diff options
author | Andrei Emeltchenko <andrei.emeltchenko@intel.com> | 2014-11-05 10:41:22 +0200 |
---|---|---|
committer | Szymon Janc <szymon.janc@tieto.com> | 2014-11-05 12:25:11 +0100 |
commit | 19f8877af783231edda9de8d4b53c2da48d1b3cd (patch) | |
tree | 4a2ec32af30535c59dd593f980aa236fdd07e054 /android/hal-sco.c | |
parent | 5d430ce0d88869ceaeabaf9fbd46803c599ba135 (diff) | |
download | bluez-19f8877af783231edda9de8d4b53c2da48d1b3cd.tar.gz |
android/hal-sco: Use bdaddr parameter in Get SCO fd command
Diffstat (limited to 'android/hal-sco.c')
-rw-r--r-- | android/hal-sco.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/android/hal-sco.c b/android/hal-sco.c index 442e2d057..6c4e9755c 100644 --- a/android/hal-sco.c +++ b/android/hal-sco.c @@ -281,20 +281,23 @@ failed: return SCO_STATUS_FAILED; } -static int ipc_get_sco_fd(void) +static int ipc_get_sco_fd(bt_bdaddr_t *bd_addr) { int ret = SCO_STATUS_SUCCESS; pthread_mutex_lock(&sco_mutex); if (sco_fd < 0) { + struct sco_cmd_get_fd cmd; struct sco_rsp_get_fd rsp; size_t rsp_len = sizeof(rsp); DBG("Getting SCO fd"); - ret = sco_ipc_cmd(SCO_SERVICE_ID, SCO_OP_GET_FD, 0, NULL, - &rsp_len, &rsp, &sco_fd); + memcpy(cmd.bdaddr, bd_addr, sizeof(cmd.bdaddr)); + + ret = sco_ipc_cmd(SCO_SERVICE_ID, SCO_OP_GET_FD, sizeof(cmd), + &cmd, &rsp_len, &rsp, &sco_fd); /* Sometimes mtu returned is wrong */ sco_mtu = /* rsp.mtu */ 48; @@ -453,7 +456,7 @@ static ssize_t out_write(struct audio_stream_out *stream, const void *buffer, DBG("write to fd %d bytes %zu", sco_fd, bytes); - if (ipc_get_sco_fd() != SCO_STATUS_SUCCESS) + if (ipc_get_sco_fd(&out->bd_addr) != SCO_STATUS_SUCCESS) return -1; if (!out->downmix_buf) { @@ -645,9 +648,6 @@ static int sco_open_output_stream_real(struct audio_hw_device *dev, return -EIO; } - if (ipc_get_sco_fd() != SCO_STATUS_SUCCESS) - DBG("SCO is not connected yet; get fd on write()"); - out = calloc(1, sizeof(struct sco_stream_out)); if (!out) return -ENOMEM; @@ -679,6 +679,9 @@ static int sco_open_output_stream_real(struct audio_hw_device *dev, } #endif + if (ipc_get_sco_fd(&out->bd_addr) != SCO_STATUS_SUCCESS) + DBG("SCO is not connected yet; get fd on write()"); + if (config) { DBG("config: rate %u chan mask %x format %d offload %p", config->sample_rate, config->channel_mask, @@ -1063,7 +1066,7 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer, DBG("Read from fd %d bytes %zu", sco_fd, bytes); - if (ipc_get_sco_fd() != SCO_STATUS_SUCCESS) + if (ipc_get_sco_fd(&in->bd_addr) != SCO_STATUS_SUCCESS) return -1; if (!in->resampler && in->cfg.rate != AUDIO_STREAM_SCO_RATE) { |