diff options
author | Szymon Janc <szymon.janc@tieto.com> | 2014-11-22 15:47:29 +0100 |
---|---|---|
committer | Szymon Janc <szymon.janc@tieto.com> | 2014-11-22 17:01:33 +0100 |
commit | cd88946db6c6db9a8f88b005690965a08cf0d026 (patch) | |
tree | c063d7e3ea81d0a71fedd54a44e92243702ac83b /android/handsfree.c | |
parent | 9ca3bc13467db116526003bea7befc9f04fb2a75 (diff) | |
download | bluez-cd88946db6c6db9a8f88b005690965a08cf0d026.tar.gz |
android/handsfree: Add support for multiple HF instances
This allows to have concurent connections to multiple headsets.
Diffstat (limited to 'android/handsfree.c')
-rw-r--r-- | android/handsfree.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/android/handsfree.c b/android/handsfree.c index 9bb8f435d..aa8765ec9 100644 --- a/android/handsfree.c +++ b/android/handsfree.c @@ -175,6 +175,8 @@ static GIOChannel *hsp_server = NULL; static GIOChannel *sco_server = NULL; +static unsigned int max_hfp_clients = 0; + static void set_state(struct hf_device *dev, uint8_t state) { struct hal_ev_handsfree_conn_state ev; @@ -304,8 +306,7 @@ static struct hf_device *get_device(const bdaddr_t *bdaddr) if (dev) return dev; - /* TODO For now allow only 1 remote device */ - if (!queue_isempty(devices)) + if (queue_length(devices) == max_hfp_clients) return NULL; return device_create(bdaddr); @@ -2985,10 +2986,13 @@ static bool bt_sco_register(ipc_disconnect_cb disconnect) bool bt_handsfree_register(struct ipc *ipc, const bdaddr_t *addr, uint8_t mode, int max_clients) { - DBG("mode 0x%x", mode); + DBG("mode 0x%x max_clients %d", mode, max_clients); bacpy(&adapter_addr, addr); + if (max_clients < 1) + return false; + devices = queue_new(); if (!devices) return false; @@ -3002,8 +3006,6 @@ bool bt_handsfree_register(struct ipc *ipc, const bdaddr_t *addr, uint8_t mode, if (mode == HAL_MODE_HANDSFREE_HSP_ONLY) goto done; - /* TODO: Handle max_clients argument */ - hfp_ag_features = HFP_AG_FEATURES; if (mode == HAL_MODE_HANDSFREE_HFP_WBS) @@ -3029,6 +3031,8 @@ done: bt_sco_register(NULL); + max_hfp_clients = max_clients; + return true; } @@ -3048,4 +3052,6 @@ void bt_handsfree_unregister(void) queue_destroy(devices, (queue_destroy_func_t) device_destroy); devices = NULL; + + max_hfp_clients = 0; } |