OSDN Git Service

android/daemon: Add handler for device disconnected
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Fri, 1 Nov 2013 13:41:44 +0000 (15:41 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Fri, 1 Nov 2013 14:39:07 +0000 (16:39 +0200)
Send event to callback thread which shall call acl state change callback.

android/adapter.c

index d8b47cf..1760bec 100644 (file)
@@ -649,6 +649,25 @@ static void mgmt_device_connected_event(uint16_t index, uint16_t length,
                        HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
 }
 
+static void mgmt_device_disconnected_event(uint16_t index, uint16_t length,
+                                       const void *param, void *user_data)
+{
+       const struct mgmt_ev_device_disconnected *ev = param;
+       struct hal_ev_acl_state_changed hal_ev;
+
+       if (length < sizeof(*ev)) {
+               error("Too short device disconnected event (%u bytes)", length);
+               return;
+       }
+
+       hal_ev.status = HAL_STATUS_SUCCESS;
+       hal_ev.state = HAL_ACL_STATE_DISCONNECTED;
+       bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
+
+       ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
+                       HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
+}
+
 static void mgmt_connect_failed_event(uint16_t index, uint16_t length,
                                        const void *param, void *user_data)
 {
@@ -708,6 +727,10 @@ static void register_mgmt_handlers(void)
        mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_CONNECTED, adapter->index,
                                mgmt_device_connected_event, NULL, NULL);
 
+       mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_DISCONNECTED,
+                               adapter->index, mgmt_device_disconnected_event,
+                               NULL, NULL);
+
        mgmt_register(adapter->mgmt, MGMT_EV_CONNECT_FAILED, adapter->index,
                                mgmt_connect_failed_event, NULL, NULL);