diff options
author | Andrzej Kaczmarek <andrzej.kaczmarek@tieto.com> | 2012-10-09 13:19:45 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-10-09 17:49:37 +0200 |
commit | 7bfdb32a177fb19a3aaa63fb8963826c89aa4266 (patch) | |
tree | 9cd44242bbb7a644e21360e31a0919ef5d1f1006 /profiles | |
parent | d135efe7672603679952a959a32166efa273795b (diff) |
thermometer: Register ThermometerManager interface on adapter path
Diffstat (limited to 'profiles')
-rw-r--r-- | profiles/thermometer/thermometer.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/profiles/thermometer/thermometer.c b/profiles/thermometer/thermometer.c index d9ee0c16..bcfd2413 100644 --- a/profiles/thermometer/thermometer.c +++ b/profiles/thermometer/thermometer.c @@ -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); } |