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);
}
Example #4
0
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);
}