From 449381885f9ea3424bb721d7c9930d5b5a45a6c3 Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Mon, 16 Feb 2015 16:15:53 +0100 Subject: [PATCH] android/handsfree: Refactor connect_sco_cb This is to avoid unnecessary connecting->disconnected and disconnected->connecting transitions when doing fallback to CVSD codec. --- android/handsfree.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/android/handsfree.c b/android/handsfree.c index ba798ee18..7cdc8b4a8 100644 --- a/android/handsfree.c +++ b/android/handsfree.c @@ -968,24 +968,21 @@ static void connect_sco_cb(enum sco_status status, const bdaddr_t *addr) return; } - if (status != SCO_STATUS_OK) { - error("handsfree: audio connect failed"); - - set_audio_state(dev, HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED); - - if (!codec_negotiation_supported(dev)) - return; - - /* If other failed, try connecting with CVSD */ - if (dev->negotiated_codec != CODEC_ID_CVSD) { - info("handsfree: trying fallback with CVSD"); - select_codec(dev, CODEC_ID_CVSD); - } + if (status == SCO_STATUS_OK) { + set_audio_state(dev, HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTED); + return; + } + /* Try fallback to CVSD first */ + if (codec_negotiation_supported(dev) && + dev->negotiated_codec != CODEC_ID_CVSD) { + info("handsfree: trying fallback with CVSD"); + select_codec(dev, CODEC_ID_CVSD); return; } - set_audio_state(dev, HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTED); + error("handsfree: audio connect failed"); + set_audio_state(dev, HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED); } static bool connect_sco(struct hf_device *dev) -- 2.47.3