summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-06-09 00:14:05 +0000
committerMarcel Holtmann <marcel@holtmann.org>2008-06-09 00:14:05 +0000
commita2529a9b417959a52f5d501cba4bcaf32caf6964 (patch)
treefbb41f36aa176b0ad05eadc06bcbf5515d8e3c3e
parent64f8405b60509908b8668a4160d3ebe120f7b67f (diff)
First attempt at Device.DiscoverServices() implementation
-rw-r--r--hcid/adapter.c5
-rw-r--r--hcid/dbus-hci.c2
-rw-r--r--hcid/device.c15
-rw-r--r--hcid/device.h2
-rwxr-xr-xhcid/test-device10
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"