diff options
Diffstat (limited to 'hcid/device.c')
-rw-r--r-- | hcid/device.c | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/hcid/device.c b/hcid/device.c index 002b77ab..bf84ad2c 100644 --- a/hcid/device.c +++ b/hcid/device.c @@ -52,10 +52,13 @@ #include "textfile.h" #include "oui.h" +#include "adapter.h" #include "device.h" #define MAX_DEVICES 16 +#define DEVICE_INTERFACE "org.bluez.Device" + struct hci_peer { struct timeval lastseen; struct timeval lastused; @@ -717,7 +720,7 @@ gboolean device_init(DBusConnection *conn) return TRUE; } -static void device_destroy(struct device_data *device) +static void device_destroy(struct device *device) { debug("Removing device %s", device->path); @@ -740,7 +743,7 @@ void device_foreach(GFunc func, gpointer user_data) g_slist_foreach(device_list, func, user_data); } -static void device_free(struct device_data *device) +static void device_free(struct device *device) { g_free(device->path); g_free(device); @@ -748,22 +751,53 @@ static void device_free(struct device_data *device) static void device_unregister(DBusConnection *conn, void *user_data) { - struct device_data *device = user_data; + struct device *device = user_data; device_list = g_slist_remove(device_list, device); device_free(device); } -struct device_data *device_create(const char *adapter, const char *address) +static DBusHandlerResult disconnect(DBusConnection *conn, + DBusMessage *msg, void *user_data) +{ + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static DBusHandlerResult get_properties(DBusConnection *conn, + DBusMessage *msg, void *user_data) +{ + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static DBusHandlerResult set_property(DBusConnection *conn, + DBusMessage *msg, void *user_data) +{ + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static DBusMethodVTable device_methods[] = { + { "GetProperties", get_properties, "", "a{sv}" }, + { "SetProperty", set_property, "sv", "" }, + { "Disconnect", disconnect, "", "" }, + { NULL, NULL, NULL, NULL } +}; + +static DBusSignalVTable device_signals[] = { + { "PropertyChanged", "sv" }, + { "DisconnectRequested", "" }, + { NULL, NULL } +}; + +struct device *device_create(struct adapter *adapter, const char *address) { - struct device_data *device; + struct device *device; - device = g_try_malloc0(sizeof(struct device_data)); + device = g_try_malloc0(sizeof(struct device)); if (device == NULL) return NULL; - device->path = g_strdup_printf("%s/dev_%s", adapter, address); + device->path = g_strdup_printf("%s/dev_%s", adapter->address, address); g_strdelimit(device->path, ":", '_'); debug("Creating device %s", device->path); @@ -773,6 +807,8 @@ struct device_data *device_create(const char *adapter, const char *address) device_free(device); return NULL; } + dbus_connection_register_interface(connection, device->path, + DEVICE_INTERFACE, device_methods, device_signals, NULL); device_list = g_slist_append(device_list, device); |