diff options
Diffstat (limited to 'src/lib/adapter.c')
-rw-r--r-- | src/lib/adapter.c | 383 |
1 files changed, 175 insertions, 208 deletions
diff --git a/src/lib/adapter.c b/src/lib/adapter.c index d5b9a86..fd11968 100644 --- a/src/lib/adapter.c +++ b/src/lib/adapter.c @@ -35,6 +35,19 @@ struct _AdapterPrivate { DBusGProxy *dbus_g_proxy; + + /* Properties */ + gchar *address; + guint32 class; + GPtrArray *devices; + gboolean discoverable; + guint32 discoverable_timeout; + gboolean discovering; + gchar *name; + gboolean pairable; + guint32 paireable_timeout; + gboolean powered; + GPtrArray *uuids; }; G_DEFINE_TYPE(Adapter, adapter, G_TYPE_OBJECT); @@ -88,6 +101,12 @@ static void adapter_dispose(GObject *gobject) dbus_g_proxy_disconnect_signal(self->priv->dbus_g_proxy, "DeviceRemoved", G_CALLBACK(device_removed_handler), self); dbus_g_proxy_disconnect_signal(self->priv->dbus_g_proxy, "PropertyChanged", G_CALLBACK(property_changed_handler), self); + /* Properties free */ + g_free(self->priv->address); + g_ptr_array_unref(self->priv->devices); + g_free(self->priv->name); + g_ptr_array_unref(self->priv->uuids); + /* Chain up to the parent class */ G_OBJECT_CLASS(adapter_parent_class)->dispose(gobject); } @@ -223,6 +242,47 @@ static void adapter_post_init(Adapter *self) /* PropertyChanged(string name, variant value) */ dbus_g_proxy_add_signal(self->priv->dbus_g_proxy, "PropertyChanged", G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); dbus_g_proxy_connect_signal(self->priv->dbus_g_proxy, "PropertyChanged", G_CALLBACK(property_changed_handler), self, NULL); + + /* Properties init */ + GError *error = NULL; + GHashTable *properties = adapter_get_properties(self, &error); + g_assert(error == NULL); + g_assert(properties != NULL); + + /* string Address [readonly] */ + self->priv->address = g_value_dup_string(g_hash_table_lookup(properties, "Address")); + + /* uint32 Class [readonly] */ + self->priv->class = g_value_get_uint(g_hash_table_lookup(properties, "Class")); + + /* array{object} Devices [readonly] */ + self->priv->devices = g_value_dup_boxed(g_hash_table_lookup(properties, "Devices")); + + /* boolean Discoverable [readwrite] */ + self->priv->discoverable = g_value_get_boolean(g_hash_table_lookup(properties, "Discoverable")); + + /* uint32 DiscoverableTimeout [readwrite] */ + self->priv->discoverable_timeout = g_value_get_uint(g_hash_table_lookup(properties, "DiscoverableTimeout")); + + /* boolean Discovering [readonly] */ + self->priv->discovering = g_value_get_boolean(g_hash_table_lookup(properties, "Discovering")); + + /* string Name [readwrite] */ + self->priv->name = g_value_dup_string(g_hash_table_lookup(properties, "Name")); + + /* boolean Pairable [readwrite] */ + self->priv->pairable = g_value_get_boolean(g_hash_table_lookup(properties, "Pairable")); + + /* uint32 PaireableTimeout [readwrite] */ + self->priv->paireable_timeout = g_value_get_uint(g_hash_table_lookup(properties, "PaireableTimeout")); + + /* boolean Powered [readwrite] */ + self->priv->powered = g_value_get_boolean(g_hash_table_lookup(properties, "Powered")); + + /* array{string} UUIDs [readonly] */ + self->priv->uuids = g_value_dup_boxed(g_hash_table_lookup(properties, "UUIDs")); + + g_hash_table_unref(properties); } static void _adapter_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) @@ -231,128 +291,51 @@ static void _adapter_get_property(GObject *object, guint property_id, GValue *va switch (property_id) { case PROP_DBUS_OBJECT_PATH: - g_value_set_string(value, g_strdup(adapter_get_dbus_object_path(self))); + g_value_set_string(value, adapter_get_dbus_object_path(self)); break; case PROP_ADDRESS: - { - GError *error = NULL; - g_value_set_string(value, adapter_get_address(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_string(value, adapter_get_address(self)); break; case PROP_CLASS: - { - GError *error = NULL; - g_value_set_uint(value, adapter_get_class(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_uint(value, adapter_get_class(self)); break; case PROP_DEVICES: - { - GError *error = NULL; - g_value_set_boxed(value, adapter_get_devices(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_boxed(value, adapter_get_devices(self)); break; case PROP_DISCOVERABLE: - { - GError *error = NULL; - g_value_set_boolean(value, adapter_get_discoverable(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_boolean(value, adapter_get_discoverable(self)); break; case PROP_DISCOVERABLE_TIMEOUT: - { - GError *error = NULL; - g_value_set_uint(value, adapter_get_discoverable_timeout(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_uint(value, adapter_get_discoverable_timeout(self)); break; case PROP_DISCOVERING: - { - GError *error = NULL; - g_value_set_boolean(value, adapter_get_discovering(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_boolean(value, adapter_get_discovering(self)); break; case PROP_NAME: - { - GError *error = NULL; - g_value_set_string(value, adapter_get_name(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_string(value, adapter_get_name(self)); break; case PROP_PAIRABLE: - { - GError *error = NULL; - g_value_set_boolean(value, adapter_get_pairable(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_boolean(value, adapter_get_pairable(self)); break; case PROP_PAIREABLE_TIMEOUT: - { - GError *error = NULL; - g_value_set_uint(value, adapter_get_paireable_timeout(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_uint(value, adapter_get_paireable_timeout(self)); break; case PROP_POWERED: - { - GError *error = NULL; - g_value_set_boolean(value, adapter_get_powered(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_boolean(value, adapter_get_powered(self)); break; case PROP_UUIDS: - { - GError *error = NULL; - g_value_set_boxed(value, adapter_get_uuids(self, &error)); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } - } + g_value_set_boxed(value, adapter_get_uuids(self)); break; default: @@ -380,10 +363,7 @@ static void _adapter_set_property(GObject *object, guint property_id, const GVal { GError *error = NULL; adapter_set_property(self, "Discoverable", value, &error); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } + g_assert(error == NULL); } break; @@ -391,10 +371,7 @@ static void _adapter_set_property(GObject *object, guint property_id, const GVal { GError *error = NULL; adapter_set_property(self, "DiscoverableTimeout", value, &error); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } + g_assert(error == NULL); } break; @@ -402,10 +379,7 @@ static void _adapter_set_property(GObject *object, guint property_id, const GVal { GError *error = NULL; adapter_set_property(self, "Name", value, &error); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } + g_assert(error == NULL); } break; @@ -413,10 +387,7 @@ static void _adapter_set_property(GObject *object, guint property_id, const GVal { GError *error = NULL; adapter_set_property(self, "Pairable", value, &error); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } + g_assert(error == NULL); } break; @@ -424,10 +395,7 @@ static void _adapter_set_property(GObject *object, guint property_id, const GVal { GError *error = NULL; adapter_set_property(self, "PaireableTimeout", value, &error); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } + g_assert(error == NULL); } break; @@ -435,10 +403,7 @@ static void _adapter_set_property(GObject *object, guint property_id, const GVal { GError *error = NULL; adapter_set_property(self, "Powered", value, &error); - if (error != NULL) { - g_print("%s: %s\n", g_get_prgname(), error->message); - g_error_free(error); - } + g_assert(error == NULL); } break; @@ -582,232 +547,234 @@ const gchar *adapter_get_dbus_object_path(Adapter *self) return dbus_g_proxy_get_path(self->priv->dbus_g_proxy); } -gchar *adapter_get_address(Adapter *self, GError **error) +const gchar *adapter_get_address(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, NULL); - gchar *ret = g_value_dup_string(g_hash_table_lookup(properties, "Address")); - g_hash_table_unref(properties); - - return ret; + return self->priv->address; } -guint32 adapter_get_class(Adapter *self, GError **error) +const guint32 adapter_get_class(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, 0); - guint32 ret = g_value_get_uint(g_hash_table_lookup(properties, "Class")); - g_hash_table_unref(properties); - - return ret; + return self->priv->class; } -GPtrArray *adapter_get_devices(Adapter *self, GError **error) +const GPtrArray *adapter_get_devices(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, NULL); - GPtrArray *ret = g_value_dup_boxed(g_hash_table_lookup(properties, "Devices")); - g_hash_table_unref(properties); - - return ret; + return self->priv->devices; } -gboolean adapter_get_discoverable(Adapter *self, GError **error) +const gboolean adapter_get_discoverable(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, 0); - gboolean ret = g_value_get_boolean(g_hash_table_lookup(properties, "Discoverable")); - g_hash_table_unref(properties); - - return ret; + return self->priv->discoverable; } -void adapter_set_discoverable(Adapter *self, const gboolean value, GError **error) +void adapter_set_discoverable(Adapter *self, const gboolean value) { - g_return_if_fail(ADAPTER_IS(self)); + g_assert(ADAPTER_IS(self)); + + GError *error = NULL; GValue t = {0}; g_value_init(&t, G_TYPE_BOOLEAN); g_value_set_boolean(&t, value); - adapter_set_property(self, "Discoverable", &t, error); + adapter_set_property(self, "Discoverable", &t, &error); g_value_unset(&t); + + g_assert(error == NULL); } -guint32 adapter_get_discoverable_timeout(Adapter *self, GError **error) +const guint32 adapter_get_discoverable_timeout(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, 0); - guint32 ret = g_value_get_uint(g_hash_table_lookup(properties, "DiscoverableTimeout")); - g_hash_table_unref(properties); - - return ret; + return self->priv->discoverable_timeout; } -void adapter_set_discoverable_timeout(Adapter *self, const guint32 value, GError **error) +void adapter_set_discoverable_timeout(Adapter *self, const guint32 value) { - g_return_if_fail(ADAPTER_IS(self)); + g_assert(ADAPTER_IS(self)); + + GError *error = NULL; GValue t = {0}; g_value_init(&t, G_TYPE_UINT); g_value_set_uint(&t, value); - adapter_set_property(self, "DiscoverableTimeout", &t, error); + adapter_set_property(self, "DiscoverableTimeout", &t, &error); g_value_unset(&t); + + g_assert(error == NULL); } -gboolean adapter_get_discovering(Adapter *self, GError **error) +const gboolean adapter_get_discovering(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, 0); - gboolean ret = g_value_get_boolean(g_hash_table_lookup(properties, "Discovering")); - g_hash_table_unref(properties); - - return ret; + return self->priv->discovering; } -gchar *adapter_get_name(Adapter *self, GError **error) +const gchar *adapter_get_name(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, NULL); - gchar *ret = g_value_dup_string(g_hash_table_lookup(properties, "Name")); - g_hash_table_unref(properties); - - return ret; + return self->priv->name; } -void adapter_set_name(Adapter *self, const gchar *value, GError **error) +void adapter_set_name(Adapter *self, const gchar *value) { - g_return_if_fail(ADAPTER_IS(self)); + g_assert(ADAPTER_IS(self)); + + GError *error = NULL; GValue t = {0}; g_value_init(&t, G_TYPE_STRING); g_value_set_string(&t, value); - adapter_set_property(self, "Name", &t, error); + adapter_set_property(self, "Name", &t, &error); g_value_unset(&t); + + g_assert(error == NULL); } -gboolean adapter_get_pairable(Adapter *self, GError **error) +const gboolean adapter_get_pairable(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, 0); - gboolean ret = g_value_get_boolean(g_hash_table_lookup(properties, "Pairable")); - g_hash_table_unref(properties); - - return ret; + return self->priv->pairable; } -void adapter_set_pairable(Adapter *self, const gboolean value, GError **error) +void adapter_set_pairable(Adapter *self, const gboolean value) { - g_return_if_fail(ADAPTER_IS(self)); + g_assert(ADAPTER_IS(self)); + + GError *error = NULL; GValue t = {0}; g_value_init(&t, G_TYPE_BOOLEAN); g_value_set_boolean(&t, value); - adapter_set_property(self, "Pairable", &t, error); + adapter_set_property(self, "Pairable", &t, &error); g_value_unset(&t); + + g_assert(error == NULL); } -guint32 adapter_get_paireable_timeout(Adapter *self, GError **error) +const guint32 adapter_get_paireable_timeout(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, 0); - guint32 ret = g_value_get_uint(g_hash_table_lookup(properties, "PaireableTimeout")); - g_hash_table_unref(properties); - - return ret; + return self->priv->paireable_timeout; } -void adapter_set_paireable_timeout(Adapter *self, const guint32 value, GError **error) +void adapter_set_paireable_timeout(Adapter *self, const guint32 value) { - g_return_if_fail(ADAPTER_IS(self)); + g_assert(ADAPTER_IS(self)); + + GError *error = NULL; GValue t = {0}; g_value_init(&t, G_TYPE_UINT); g_value_set_uint(&t, value); - adapter_set_property(self, "PaireableTimeout", &t, error); + adapter_set_property(self, "PaireableTimeout", &t, &error); g_value_unset(&t); + + g_assert(error == NULL); } -gboolean adapter_get_powered(Adapter *self, GError **error) +const gboolean adapter_get_powered(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, 0); - gboolean ret = g_value_get_boolean(g_hash_table_lookup(properties, "Powered")); - g_hash_table_unref(properties); - - return ret; + return self->priv->powered; } -void adapter_set_powered(Adapter *self, const gboolean value, GError **error) +void adapter_set_powered(Adapter *self, const gboolean value) { - g_return_if_fail(ADAPTER_IS(self)); + g_assert(ADAPTER_IS(self)); + + GError *error = NULL; GValue t = {0}; g_value_init(&t, G_TYPE_BOOLEAN); g_value_set_boolean(&t, value); - adapter_set_property(self, "Powered", &t, error); + adapter_set_property(self, "Powered", &t, &error); g_value_unset(&t); + + g_assert(error == NULL); } -GPtrArray *adapter_get_uuids(Adapter *self, GError **error) +const GPtrArray *adapter_get_uuids(Adapter *self) { g_assert(ADAPTER_IS(self)); - GHashTable *properties = adapter_get_properties(self, error); - g_return_val_if_fail(properties != NULL, NULL); - GPtrArray *ret = g_value_dup_boxed(g_hash_table_lookup(properties, "UUIDs")); - g_hash_table_unref(properties); - - return ret; + return self->priv->uuids; } /* Signals handlers */ static void device_created_handler(DBusGProxy *dbus_g_proxy, const gchar *device, gpointer data) { Adapter *self = ADAPTER(data); + g_signal_emit(self, signals[DEVICE_CREATED], 0, device); } static void device_disappeared_handler(DBusGProxy *dbus_g_proxy, const gchar *address, gpointer data) { Adapter *self = ADAPTER(data); + g_signal_emit(self, signals[DEVICE_DISAPPEARED], 0, address); } static void device_found_handler(DBusGProxy *dbus_g_proxy, const gchar *address, const GHashTable *values, gpointer data) { Adapter *self = ADAPTER(data); + g_signal_emit(self, signals[DEVICE_FOUND], 0, address, values); } static void device_removed_handler(DBusGProxy *dbus_g_proxy, const gchar *device, gpointer data) { Adapter *self = ADAPTER(data); + g_signal_emit(self, signals[DEVICE_REMOVED], 0, device); } static void property_changed_handler(DBusGProxy *dbus_g_proxy, const gchar *name, const GValue *value, gpointer data) { Adapter *self = ADAPTER(data); + + if (g_strcmp0(name, "Address") == 0) { + g_free(self->priv->address); + self->priv->address = g_value_dup_string(value); + } else if (g_strcmp0(name, "Class") == 0) { + self->priv->class = g_value_get_uint(value); + } else if (g_strcmp0(name, "Devices") == 0) { + g_ptr_array_unref(self->priv->devices); + self->priv->devices = g_value_dup_boxed(value); + } else if (g_strcmp0(name, "Discoverable") == 0) { + self->priv->discoverable = g_value_get_boolean(value); + } else if (g_strcmp0(name, "DiscoverableTimeout") == 0) { + self->priv->discoverable_timeout = g_value_get_uint(value); + } else if (g_strcmp0(name, "Discovering") == 0) { + self->priv->discovering = g_value_get_boolean(value); + } else if (g_strcmp0(name, "Name") == 0) { + g_free(self->priv->name); + self->priv->name = g_value_dup_string(value); + } else if (g_strcmp0(name, "Pairable") == 0) { + self->priv->pairable = g_value_get_boolean(value); + } else if (g_strcmp0(name, "PaireableTimeout") == 0) { + self->priv->paireable_timeout = g_value_get_uint(value); + } else if (g_strcmp0(name, "Powered") == 0) { + self->priv->powered = g_value_get_boolean(value); + } else if (g_strcmp0(name, "UUIDs") == 0) { + g_ptr_array_unref(self->priv->uuids); + self->priv->uuids = g_value_dup_boxed(value); + } + g_signal_emit(self, signals[PROPERTY_CHANGED], 0, name, value); } |