From 3be6d4a82f746e0570bb16b0b550baffa63c74aa Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Tue, 12 Nov 2013 23:48:17 +0000 Subject: [PATCH] android: Report adapter address in adapter_ready callback Adapter is not going to change while daemon is running so its address can be stored after init is complete. --- android/adapter.c | 14 +++++++------- android/adapter.h | 2 +- android/main.c | 15 +++++++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/android/adapter.c b/android/adapter.c index 001059aaf..dcb823bb0 100644 --- a/android/adapter.c +++ b/android/adapter.c @@ -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) diff --git a/android/adapter.h b/android/adapter.h index e8993f2c6..68f20463b 100644 --- a/android/adapter.h +++ b/android/adapter.h @@ -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); diff --git a/android/main.c b/android/main.c index 81648190b..553f2e0ac 100644 --- a/android/main.c +++ b/android/main.c @@ -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; -- 2.47.3