summaryrefslogtreecommitdiffstats
path: root/hcid/adapter.c
diff options
context:
space:
mode:
authorVinicius Gomes <vinicius.gomes@openbossa.org>2008-04-03 17:37:38 +0000
committerVinicius Gomes <vinicius.gomes@openbossa.org>2008-04-03 17:37:38 +0000
commit83735b4aa67748253b2e3df02847ffb86c131085 (patch)
tree45be1897a1dab3ecad7f055b8d8242b265c3c98a /hcid/adapter.c
parent4685a04c10fd0ec2bfed0cabb2f26b822d406b4d (diff)
hcid: creating the device object when the pair is initiated by the remote device.
Diffstat (limited to 'hcid/adapter.c')
-rw-r--r--hcid/adapter.c38
1 files changed, 33 insertions, 5 deletions
diff --git a/hcid/adapter.c b/hcid/adapter.c
index 045d425d..04fe4c09 100644
--- a/hcid/adapter.c
+++ b/hcid/adapter.c
@@ -2014,7 +2014,7 @@ static DBusHandlerResult adapter_set_remote_alias(DBusConnection *conn,
if (new_path) {
struct device *device;
- device = adapter_get_device(adapter, addr);
+ device = adapter_find_device(adapter, addr);
if (device) {
dbus_connection_emit_property_changed(conn,
device->path, DEVICE_INTERFACE,
@@ -2267,7 +2267,7 @@ static void create_device_req_free(struct create_device_req *create)
g_free(create);
}
-struct device *adapter_get_device(struct adapter *adapter, const char *dest)
+struct device *adapter_find_device(struct adapter *adapter, const char *dest)
{
struct device *device;
GSList *l;
@@ -2285,6 +2285,34 @@ struct device *adapter_get_device(struct adapter *adapter, const char *dest)
return device;
}
+struct device *adapter_get_device(DBusConnection *conn,
+ struct adapter *adapter, const gchar *address)
+{
+ struct device *device;
+ char path[MAX_PATH_LENGTH];
+
+ if (!adapter)
+ return NULL;
+
+ device = adapter_find_device(adapter, address);
+ if (device)
+ return device;
+
+ device = device_create(conn, adapter, address, NULL);
+ if (!device)
+ return NULL;
+
+ snprintf(path, MAX_PATH_LENGTH, "/hci%d", adapter->dev_id);
+
+ adapter->devices = g_slist_append(adapter->devices, device);
+ dbus_connection_emit_signal(conn, path,
+ ADAPTER_INTERFACE, "DeviceCreated",
+ DBUS_TYPE_OBJECT_PATH, &device->path,
+ DBUS_TYPE_INVALID);
+
+ return device;
+}
+
static gboolean create_bonding_conn_complete(GIOChannel *io, GIOCondition cond,
struct adapter *adapter)
{
@@ -2643,7 +2671,7 @@ static DBusHandlerResult adapter_remove_bonding(DBusConnection *conn,
struct device *device;
gboolean paired = FALSE;
- device = adapter_get_device(adapter, addr_ptr);
+ device = adapter_find_device(adapter, addr_ptr);
if (device) {
dbus_connection_emit_property_changed(conn,
device->path, DEVICE_INTERFACE,
@@ -3289,7 +3317,7 @@ static DBusHandlerResult adapter_set_trusted(DBusConnection *conn,
struct device *device;
gboolean trust = TRUE;
- device = adapter_get_device(adapter, address);
+ device = adapter_find_device(adapter, address);
if (device) {
dbus_connection_emit_property_changed(conn,
device->path, DEVICE_INTERFACE,
@@ -3370,7 +3398,7 @@ static DBusHandlerResult adapter_remove_trust(DBusConnection *conn,
struct device *device;
gboolean trust = FALSE;
- device = adapter_get_device(adapter, address);
+ device = adapter_find_device(adapter, address);
if (device) {
dbus_connection_emit_property_changed(conn,
device->path, DEVICE_INTERFACE,