diff options
Diffstat (limited to 'hcid')
-rw-r--r-- | hcid/adapter.c | 5 | ||||
-rw-r--r-- | hcid/dbus-hci.c | 2 | ||||
-rw-r--r-- | hcid/device.c | 15 | ||||
-rw-r--r-- | hcid/device.h | 2 | ||||
-rwxr-xr-x | hcid/test-device | 10 |
5 files changed, 26 insertions, 8 deletions
diff --git a/hcid/adapter.c b/hcid/adapter.c index 20b4ca1f..dead8c4d 100644 --- a/hcid/adapter.c +++ b/hcid/adapter.c @@ -3892,7 +3892,7 @@ static DBusMessage *create_device(DBusConnection *conn, device->temporary = FALSE; - device_browse(device, conn, msg); + device_browse(device, conn, msg, FALSE); adapter->devices = g_slist_append(adapter->devices, device); @@ -3933,8 +3933,7 @@ static DBusMessage *create_paired_device(DBusConnection *conn, if (cap == IO_CAPABILITY_INVALID) return invalid_args(msg); - return create_bonding(conn, msg, address, agent_path, cap, - data); + return create_bonding(conn, msg, address, agent_path, cap, data); } static gint device_path_cmp(struct device *device, const gchar *path) diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index a15be13a..b2df0e69 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -1264,7 +1264,7 @@ proceed: dbus_message_unref(reply); } else { device->temporary = FALSE; - device_browse(device, bonding->conn, bonding->msg); + device_browse(device, bonding->conn, bonding->msg, FALSE); } } diff --git a/hcid/device.c b/hcid/device.c index b040df91..ef29f368 100644 --- a/hcid/device.c +++ b/hcid/device.c @@ -70,6 +70,7 @@ struct browse_req { DBusMessage *msg; struct device *device; int search_uuid; + gboolean update; }; struct hci_peer { @@ -1014,13 +1015,14 @@ static DBusMessage *set_property(DBusConnection *conn, static DBusMessage *discover_services(DBusConnection *conn, DBusMessage *msg, void *user_data) { + struct device *device = user_data; const char *pattern; if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &pattern, DBUS_TYPE_INVALID) == FALSE) return NULL; - /* FIXME start service discovery */ + device_browse(device, conn, msg, TRUE); return NULL; } @@ -1227,6 +1229,12 @@ probe: device_probe_drivers(device); proceed: + if (req->update == TRUE) { + /* FIXME return handle/record dictonary */ + g_dbus_send_reply(req->conn, req->msg, DBUS_TYPE_INVALID); + goto fail; + } + g_dbus_emit_signal(req->conn, dbus_message_get_path(req->msg), ADAPTER_INTERFACE, "DeviceCreated", DBUS_TYPE_OBJECT_PATH, &device->path, @@ -1238,7 +1246,7 @@ proceed: goto fail; dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &device->path, - DBUS_TYPE_INVALID); + DBUS_TYPE_INVALID); dbus_connection_send(req->conn, reply, NULL); @@ -1251,7 +1259,7 @@ fail: } int device_browse(struct device *device, DBusConnection *conn, - DBusMessage *msg) + DBusMessage *msg, gboolean update) { struct adapter *adapter = device->adapter; struct browse_req *req; @@ -1262,6 +1270,7 @@ int device_browse(struct device *device, DBusConnection *conn, req->conn = dbus_connection_ref(conn); req->msg = dbus_message_ref(msg); req->device = device; + req->update = update; str2ba(adapter->address, &src); str2ba(device->address, &dst); diff --git a/hcid/device.h b/hcid/device.h index 420985fd..88aa8aeb 100644 --- a/hcid/device.h +++ b/hcid/device.h @@ -46,7 +46,7 @@ struct device *device_create(DBusConnection *conn, struct adapter *adapter, void device_remove(DBusConnection *conn, struct device *device); gint device_address_cmp(struct device *device, const gchar *address); int device_browse(struct device *device, DBusConnection *conn, - DBusMessage *msg); + DBusMessage *msg, gboolean update); void device_probe_drivers(struct device *device); #define BTD_UUIDS(args...) ((const char *[]) { args, NULL } ) diff --git a/hcid/test-device b/hcid/test-device index f82e8d38..9657b3ae 100755 --- a/hcid/test-device +++ b/hcid/test-device @@ -42,6 +42,16 @@ if (sys.argv[1] == "remove"): adapter.RemoveDevice(sys.argv[2]) sys.exit(0) +if (sys.argv[1] == "update"): + if (len(sys.argv) < 3): + print "Need address parameter" + else: + path = adapter.FindDevice(sys.argv[2]) + device = dbus.Interface(bus.get_object("org.bluez", path), + "org.bluez.Device") + device.DiscoverServices(""); + sys.exit(0) + if (sys.argv[1] == "class"): if (len(sys.argv) < 3): print "Need address parameter" |