diff options
author | Lukasz Rymanowski <lukasz.rymanowski@tieto.com> | 2014-11-28 10:37:24 +0100 |
---|---|---|
committer | Szymon Janc <szymon.janc@tieto.com> | 2014-12-01 17:12:40 +0100 |
commit | 3617ef60c998e109c3496b63b4bff5d07dddc19d (patch) | |
tree | 1f9aa0b9ccdf4db4fb89ede562c3eaf423e66a35 /android/handsfree-client.c | |
parent | 13f027fb9c3c66a057fce1c363a53ba104678782 (diff) | |
download | bluez-3617ef60c998e109c3496b63b4bff5d07dddc19d.tar.gz |
android/handsfree-client: Send AT+BCC to start codec negotiation
With this patch we start codec negotation on audio connect if both sides
does support it.
This patch also moves codec_negotiation_supported functions up in the
file
Diffstat (limited to 'android/handsfree-client.c')
-rw-r--r-- | android/handsfree-client.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/android/handsfree-client.c b/android/handsfree-client.c index fd68d78eb..9818a47ed 100644 --- a/android/handsfree-client.c +++ b/android/handsfree-client.c @@ -312,9 +312,26 @@ static void set_audio_state(struct device *dev, uint8_t state) HAL_EV_HF_CLIENT_AUDIO_STATE, sizeof(ev), &ev); } +static void bcc_cb(enum hfp_result result, enum hfp_error cme_err, + void *user_data) +{ + struct device *dev = user_data; + + if (result != HFP_RESULT_OK) + set_audio_state(dev, HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED); +} + +static bool codec_negotiation_supported(struct device *dev) +{ + return (dev->features & HFP_AG_FEAT_CODEC) && + (hfp_hf_features & HFP_HF_FEAT_CODEC); +} + static bool connect_sco(struct device *dev) { - /* TODO: handle codec negotiation */ + if (codec_negotiation_supported(dev)) + return hfp_hf_send_command(dev->hf, bcc_cb, dev, + "AT+BCC"); return bt_sco_connect(sco, &dev->bdaddr, BT_VOICE_CVSD_16BIT); } @@ -383,7 +400,6 @@ static void cmd_complete_cb(enum hfp_result result, enum hfp_error cme_err, struct hal_ev_hf_client_command_complete ev; DBG(""); - memset(&ev, 0, sizeof(ev)); switch (result) { @@ -1653,12 +1669,6 @@ static void slc_brsf_cb(struct hfp_context *context, void *user_data) dev->features = feat; } -static bool codec_negotiation_supported(struct device *dev) -{ - return (dev->features & HFP_AG_FEAT_CODEC) && - (hfp_hf_features & HFP_HF_FEAT_CODEC); -} - static void slc_brsf_resp(enum hfp_result result, enum hfp_error cme_err, void *user_data) { |