summaryrefslogtreecommitdiffstats
path: root/hcid/dbus-hci.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-03-20 15:00:51 +0000
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-03-20 15:00:51 +0000
commitb29381cae56e509c87cfc6ce12ea34d19dec6f55 (patch)
tree25f20a9504b5128eba515d388221a40b5a6e24f7 /hcid/dbus-hci.c
parentf511421ba10092ba32343a973e71f96ce4698f7b (diff)
Emit device PropertyChanged properly and fix adapter signals to be emmitted in old and new path when necessary.
Diffstat (limited to 'hcid/dbus-hci.c')
-rw-r--r--hcid/dbus-hci.c86
1 files changed, 80 insertions, 6 deletions
diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c
index 2ae1e8c4..d3cb1855 100644
--- a/hcid/dbus-hci.c
+++ b/hcid/dbus-hci.c
@@ -768,8 +768,8 @@ int hcid_dbus_start_device(uint16_t id)
dbus_connection_emit_signal(connection, "/",
MANAGER_INTERFACE,
"DefaultAdapterChanged",
- DBUS_TYPE_OBJECT_PATH, &ptr,
- DBUS_TYPE_INVALID);
+ DBUS_TYPE_OBJECT_PATH, &ptr,
+ DBUS_TYPE_INVALID);
dbus_connection_emit_signal(connection, BASE_PATH,
MANAGER_INTERFACE,
@@ -1011,11 +1011,24 @@ void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer,
adapter->pin_reqs = g_slist_remove(adapter->pin_reqs, l->data);
g_free(d);
- if (!status)
+ if (!status) {
send_adapter_signal(connection, adapter->dev_id,
"BondingCreated",
DBUS_TYPE_STRING, &paddr,
DBUS_TYPE_INVALID);
+
+ if (hcid_dbus_use_experimental()) {
+ struct device *device;
+ gboolean paired = TRUE;
+
+ device = adapter_get_device(adapter, paddr);
+ if (device) {
+ dbus_connection_emit_property_changed(connection,
+ device->path, DEVICE_INTERFACE,
+ "Paired", DBUS_TYPE_BOOLEAN, &paired);
+ }
+ }
+ }
}
release_passkey_agents(adapter, peer);
@@ -1617,7 +1630,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
name_status = NAME_SENT;
if (hcid_dbus_use_experimental()) {
- emit_device_found(path, paddr,
+ emit_device_found(path + ADAPTER_PATH_INDEX, paddr,
"Address", DBUS_TYPE_STRING, &paddr,
"Class", DBUS_TYPE_UINT32, &class,
"RSSI", DBUS_TYPE_INT16, &tmp_rssi,
@@ -1627,7 +1640,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
g_free(name);
} else if (hcid_dbus_use_experimental()) {
- emit_device_found(path, paddr,
+ emit_device_found(path + ADAPTER_PATH_INDEX, paddr,
"Address", DBUS_TYPE_STRING, &paddr,
"Class", DBUS_TYPE_UINT32, &class,
"RSSI", DBUS_TYPE_INT16, &tmp_rssi,
@@ -1663,6 +1676,29 @@ void hcid_dbus_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class)
DBUS_TYPE_UINT32, &class,
DBUS_TYPE_INVALID);
+ if (hcid_dbus_use_experimental()) {
+ char path[MAX_PATH_LENGTH];
+ struct device *device;
+ struct adapter *adapter;
+ GSList *l;
+
+ snprintf(path, sizeof(path), "hci%d", id);
+
+ dbus_connection_get_object_user_data(connection, path,
+ (void *) &adapter);
+ if (!adapter)
+ return;
+
+ l = g_slist_find_custom(adapter->devices, paddr,
+ (GCompareFunc) device_address_cmp);
+ if (!l)
+ return;
+
+ device = l->data;
+ dbus_connection_emit_property_changed(connection,
+ device->path, DEVICE_INTERFACE,
+ "Class", DBUS_TYPE_UINT32, &class);
+ }
}
void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,
@@ -1696,7 +1732,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,
"RemoteNameFailed",
DBUS_TYPE_STRING, &paddr,
DBUS_TYPE_INVALID);
- else
+ else {
dbus_connection_emit_signal(connection, path,
ADAPTER_INTERFACE,
"RemoteNameUpdated",
@@ -1704,6 +1740,18 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_INVALID);
+ if (hcid_dbus_use_experimental()) {
+ struct device *device;
+
+ device = adapter_get_device(adapter, paddr);
+ if (device) {
+ dbus_connection_emit_property_changed(connection,
+ device->path, DEVICE_INTERFACE,
+ "Name", DBUS_TYPE_STRING, &name);
+ }
+ }
+ }
+
/* remove from remote name request list */
found_device_remove(&adapter->found_devices, peer);
@@ -1804,6 +1852,19 @@ void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle,
DBUS_TYPE_STRING, &paddr,
DBUS_TYPE_INVALID);
+ if (hcid_dbus_use_experimental()) {
+ struct device *device;
+ gboolean connected = TRUE;
+
+ device = adapter_get_device(adapter, paddr);
+ if (device) {
+ dbus_connection_emit_property_changed(connection,
+ device->path, DEVICE_INTERFACE,
+ "Connected", DBUS_TYPE_BOOLEAN,
+ &connected);
+ }
+ }
+
/* add in the active connetions list */
active_conn_append(&adapter->active_conn, peer, handle);
}
@@ -1907,6 +1968,19 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,
DBUS_TYPE_STRING, &paddr,
DBUS_TYPE_INVALID);
+ if (hcid_dbus_use_experimental()) {
+ struct device *device;
+ gboolean connected = FALSE;
+
+ device = adapter_get_device(adapter, paddr);
+ if (device) {
+ dbus_connection_emit_property_changed(connection,
+ device->path, DEVICE_INTERFACE,
+ "Connected", DBUS_TYPE_BOOLEAN,
+ &connected);
+ }
+ }
+
adapter->active_conn = g_slist_remove(adapter->active_conn, dev);
g_free(dev);