summaryrefslogtreecommitdiff
path: root/android/handsfree.c
diff options
context:
space:
mode:
authorSzymon Janc <szymon.janc@tieto.com>2014-11-22 15:47:29 +0100
committerSzymon Janc <szymon.janc@tieto.com>2014-11-22 17:01:33 +0100
commitcd88946db6c6db9a8f88b005690965a08cf0d026 (patch)
treec063d7e3ea81d0a71fedd54a44e92243702ac83b /android/handsfree.c
parent9ca3bc13467db116526003bea7befc9f04fb2a75 (diff)
downloadbluez-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.c16
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;
}