static void finalize (GObject *object) { NMBluezManager *self = NM_BLUEZ_MANAGER (object); bluez_cleanup (self, FALSE); G_OBJECT_CLASS (nm_bluez_manager_parent_class)->finalize (object); }
static void dispose (GObject *object) { NMBluez5Manager *self = NM_BLUEZ5_MANAGER (object); bluez_cleanup (self, FALSE); G_OBJECT_CLASS (nm_bluez5_manager_parent_class)->dispose (object); }
static void dbus_connection_changed_cb (NMDBusManager *dbus_mgr, DBusGConnection *connection, gpointer user_data) { NMBluezManager *self = NM_BLUEZ_MANAGER (user_data); if (!connection) bluez_cleanup (self, TRUE); else bluez_connect (self); }
void BLEThread::run() { // initialize everything GDBusConnection* conn = bluez_init(); if(conn == NULL) { pi_warn("Could not connect to bus"); return; } gchar* adapter_path = bluez_get_default_adapter(conn); if(adapter_path == NULL) { pi_warn("Could not get default adapter"); return; } gchar* device_path = bluez_find_device(conn, adapter_path, m_btaddr.c_str()); if(device_path == NULL) { pi_warn("Could not get device path for the given bluetooth device"); return; } // we want to take a look at only one special characteristic gchar* service_path = g_strconcat(device_path, "/service0007", NULL); gchar* char_path = g_strconcat(service_path, "/characteristic0009", NULL); GVariant* var = bluez_characteristic_get_value(conn, char_path); if(var != NULL) { unsigned char buttonState = bluez_characteristic_extract_value(var); this->setState(buttonState); g_variant_unref(var); } // register disconnect handler bluez_register_disconnect_handler(conn, device_path); // register watcher guint owner_id = bluez_create_watcher(conn, this); bluez_register_watcher(conn, service_path); // start runloop, will only exit, if the thread will be killed soon m_loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(m_loop); // cleanup bluez_destroy_watcher(owner_id); // TODO: Unsubscribe the disconnect handler g_free(char_path); g_free(service_path); g_free(device_path); g_free(adapter_path); bluez_cleanup(conn); }