OSDN Git Service

android: Report adapter address in adapter_ready callback
authorSzymon Janc <szymon.janc@gmail.com>
Tue, 12 Nov 2013 23:48:17 +0000 (23:48 +0000)
committerJohan Hedberg <johan.hedberg@intel.com>
Thu, 14 Nov 2013 12:55:30 +0000 (14:55 +0200)
Adapter is not going to change while daemon is running so its address
can be stored after init is complete.

android/adapter.c
android/adapter.h
android/main.c

index 001059a..dcb823b 100644 (file)
@@ -950,11 +950,11 @@ static void load_link_keys_complete(uint8_t status, uint16_t length,
 
        DBG("status %u", status);
 
-       cb(0);
+       cb(0, &adapter.bdaddr);
        return;
 
 failed:
-       cb(err);
+       cb(err, NULL);
 }
 
 static void load_link_keys(GSList *keys, bt_adapter_ready cb)
@@ -989,7 +989,7 @@ static void load_link_keys(GSList *keys, bt_adapter_ready cb)
 
        if (id == 0) {
                error("Failed to load link keys");
-               cb(-EIO);
+               cb(-EIO, NULL);
        }
 }
 
@@ -1336,7 +1336,7 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
        return;
 
 failed:
-       cb(err);
+       cb(err, NULL);
 }
 
 static void mgmt_index_added_event(uint16_t index, uint16_t length,
@@ -1358,7 +1358,7 @@ static void mgmt_index_added_event(uint16_t index, uint16_t length,
 
        if (mgmt_send(mgmt_if, MGMT_OP_READ_INFO, index, 0, NULL,
                                read_info_complete, cb, NULL) == 0) {
-               cb(-EIO);
+               cb(-EIO, NULL);
                return;
        }
 }
@@ -1425,7 +1425,7 @@ static void read_index_list_complete(uint8_t status, uint16_t length,
        return;
 
 failed:
-       cb(-EIO);
+       cb(-EIO, NULL);
 }
 
 static void read_version_complete(uint8_t status, uint16_t length,
@@ -1471,7 +1471,7 @@ static void read_version_complete(uint8_t status, uint16_t length,
        error("Failed to read controller index list");
 
 failed:
-       cb(-EIO);
+       cb(-EIO, NULL);
 }
 
 bool bt_adapter_start(int index, bt_adapter_ready cb)
index e8993f2..68f2046 100644 (file)
@@ -21,7 +21,7 @@
  *
  */
 
-typedef void (*bt_adapter_ready)(int err);
+typedef void (*bt_adapter_ready)(int err, const bdaddr_t *addr);
 bool bt_adapter_start(int index, bt_adapter_ready cb);
 
 typedef void (*bt_adapter_stopped)(void);
index 8164819..553f2e0 100644 (file)
@@ -65,6 +65,8 @@
 
 static guint bluetooth_start_timeout = 0;
 
+static bdaddr_t adapter_bdaddr;
+
 static GMainLoop *event_loop;
 
 static GIOChannel *hal_cmd_io = NULL;
@@ -75,7 +77,6 @@ static bool services[HAL_SERVICE_ID_MAX + 1] = { false };
 static void service_register(void *buf, uint16_t len)
 {
        struct hal_cmd_register_module *m = buf;
-       const bdaddr_t *adapter_bdaddr = bt_adapter_get_address();
        int sk = g_io_channel_unix_get_fd(hal_notif_io);
 
        if (m->service_id > HAL_SERVICE_ID_MAX || services[m->service_id])
@@ -88,22 +89,22 @@ static void service_register(void *buf, uint16_t len)
 
                break;
        case HAL_SERVICE_ID_SOCK:
-               if (!bt_socket_register(sk, adapter_bdaddr))
+               if (!bt_socket_register(sk, &adapter_bdaddr))
                        goto failed;
 
                break;
        case HAL_SERVICE_ID_HIDHOST:
-               if (!bt_hid_register(sk, adapter_bdaddr))
+               if (!bt_hid_register(sk, &adapter_bdaddr))
                        goto failed;
 
                break;
        case HAL_SERVICE_ID_A2DP:
-               if (!bt_a2dp_register(sk, adapter_bdaddr))
+               if (!bt_a2dp_register(sk, &adapter_bdaddr))
                        goto failed;
 
                break;
        case HAL_SERVICE_ID_PAN:
-               if (!bt_pan_register(sk, adapter_bdaddr))
+               if (!bt_pan_register(sk, &adapter_bdaddr))
                        goto failed;
 
                break;
@@ -372,13 +373,15 @@ static gboolean cmd_connect_cb(GIOChannel *io, GIOCondition cond,
        return FALSE;
 }
 
-static void adapter_ready(int err)
+static void adapter_ready(int err, const bdaddr_t *addr)
 {
        if (err < 0) {
                error("Adapter initialization failed: %s", strerror(-err));
                exit(EXIT_FAILURE);
        }
 
+       bacpy(&adapter_bdaddr, addr);
+
        if (bluetooth_start_timeout > 0) {
                g_source_remove(bluetooth_start_timeout);
                bluetooth_start_timeout = 0;