OSDN Git Service

thermometer: Register ThermometerManager interface on adapter path
authorAndrzej Kaczmarek <andrzej.kaczmarek@tieto.com>
Tue, 9 Oct 2012 11:19:45 +0000 (13:19 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Tue, 9 Oct 2012 15:49:37 +0000 (17:49 +0200)
profiles/thermometer/thermometer.c

index d9ee0c1..bcfd241 100644 (file)
@@ -42,7 +42,8 @@
 #include "gatt.h"
 #include "thermometer.h"
 
-#define THERMOMETER_INTERFACE "org.bluez.Thermometer"
+#define THERMOMETER_INTERFACE          "org.bluez.Thermometer"
+#define THERMOMETER_MANAGER_INTERFACE  "org.bluez.ThermometerManager"
 
 /* Temperature measurement flag fields */
 #define TEMP_UNITS             0x01
@@ -189,6 +190,16 @@ static void destroy_thermometer(gpointer user_data)
        g_free(t);
 }
 
+static void destroy_thermometer_adapter(gpointer user_data)
+{
+       struct thermometer_adapter *tadapter = user_data;
+
+       if (tadapter->devices != NULL)
+               g_slist_free_full(tadapter->devices, destroy_thermometer);
+
+       g_free(tadapter);
+}
+
 static gint cmp_adapter(gconstpointer a, gconstpointer b)
 {
        const struct thermometer_adapter *tadapter = a;
@@ -1320,6 +1331,10 @@ void thermometer_unregister(struct btd_device *device)
                                device_get_path(t->dev), THERMOMETER_INTERFACE);
 }
 
+static const GDBusMethodTable thermometer_manager_methods[] = {
+       { }
+};
+
 int thermometer_adapter_register(struct btd_adapter *adapter)
 {
        struct thermometer_adapter *tadapter;
@@ -1327,6 +1342,18 @@ int thermometer_adapter_register(struct btd_adapter *adapter)
        tadapter = g_new0(struct thermometer_adapter, 1);
        tadapter->adapter = adapter;
 
+       if (!g_dbus_register_interface(btd_get_dbus_connection(),
+                                               adapter_get_path(adapter),
+                                               THERMOMETER_MANAGER_INTERFACE,
+                                               thermometer_manager_methods,
+                                               NULL, NULL, tadapter,
+                                               destroy_thermometer_adapter)) {
+               error("D-Bus failed to register %s interface",
+                                               THERMOMETER_MANAGER_INTERFACE);
+               destroy_thermometer_adapter(tadapter);
+               return -EIO;
+       }
+
        thermometer_adapters = g_slist_prepend(thermometer_adapters, tadapter);
 
        return 0;
@@ -1341,4 +1368,8 @@ void thermometer_adapter_unregister(struct btd_adapter *adapter)
                return;
 
        thermometer_adapters = g_slist_remove(thermometer_adapters, tadapter);
+
+       g_dbus_unregister_interface(btd_get_dbus_connection(),
+                                       adapter_get_path(tadapter->adapter),
+                                       THERMOMETER_MANAGER_INTERFACE);
 }