From 7bfdb32a177fb19a3aaa63fb8963826c89aa4266 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Tue, 9 Oct 2012 13:19:45 +0200 Subject: [PATCH] thermometer: Register ThermometerManager interface on adapter path --- profiles/thermometer/thermometer.c | 33 +++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/profiles/thermometer/thermometer.c b/profiles/thermometer/thermometer.c index d9ee0c166..bcfd2413a 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); } -- 2.47.3