BlueZ/Device: Add function bluez_device_network_set_connected_changed_cb() 46/19046/1
authorWu Jiangbo <jiangbox.wu@intel.com>
Fri, 4 Apr 2014 10:05:03 +0000 (18:05 +0800)
committerWu Jiangbo <jiangbox.wu@intel.com>
Fri, 4 Apr 2014 11:34:04 +0000 (19:34 +0800)
Change-Id: I8bfca210fd773470126f693448fa8ca3b95e24ac
Signed-off-by: Wu Jiangbo <jiangbox.wu@intel.com>
include/bluez.h
lib/bluez.c

index e56c45d..70027c5 100644 (file)
@@ -252,6 +252,15 @@ int bluez_device_network_get_property_connected(
                                struct _bluez_device *device,
                                gboolean *connected);
 
+typedef void (*bluez_device_network_connected_cb_t)(
+                               struct _bluez_device *device,
+                               gboolean connected,
+                               gpointer user_data);
+void bluez_device_network_set_connected_changed_cb(
+                               struct _bluez_device *device,
+                               bluez_device_network_connected_cb_t cb,
+                               gpointer user_data);
+
 typedef void (*bluez_device_paired_cb_t)(
                                struct _bluez_device *device,
                                gboolean paired,
index 4147e56..a799a67 100644 (file)
@@ -128,6 +128,8 @@ struct _bluez_device {
        gpointer device_connected_cb_data;
        bluez_device_trusted_cb_t device_trusted_cb;
        gpointer device_trusted_cb_data;
+       bluez_device_network_connected_cb_t network_connected_cb;
+       gpointer network_connected_cb_data;
 };
 
 struct _bluez_agent {
@@ -588,15 +590,30 @@ static void control_properties_changed(GDBusProxy *proxy,
        g_free(properties);
 }
 
+static inline void handle_device_network_connected(
+                                       GVariant *changed_properties,
+                                       struct _bluez_device *device)
+{
+       gboolean connected;
+
+       if (g_variant_lookup(changed_properties, "Connected", "b", &connected))
+               device->network_connected_cb(device, connected,
+                                       device->network_connected_cb_data);
+}
+
 static void network_properties_changed(GDBusProxy *proxy,
                                        GVariant *changed_properties,
                                        GStrv *invalidated_properties,
                                        gpointer user_data)
 {
        gchar *properties = g_variant_print(changed_properties, TRUE);
+       struct _bluez_device *device = user_data;
 
        DBG("properties %s", properties);
 
+       if (device->network_connected_cb)
+               handle_device_network_connected(changed_properties, user_data);
+
        g_free(properties);
 }
 
@@ -1779,6 +1796,15 @@ int bluez_device_network_disconnect(struct _bluez_device *device)
        return 0;
 }
 
+void bluez_device_network_set_connected_changed_cb(
+                                       struct _bluez_device *device,
+                                       bluez_device_network_connected_cb_t cb,
+                                       gpointer user_data)
+{
+       device->network_connected_cb = cb;
+       device->network_connected_cb_data = user_data;
+}
+
 int bluez_device_network_get_property_connected(struct _bluez_device *device,
                                                gboolean *connected)
 {