diff --git a/src/classic/hfp.c b/src/classic/hfp.c index 12d2715b8..12603eec1 100644 --- a/src/classic/hfp.c +++ b/src/classic/hfp.c @@ -516,6 +516,8 @@ static void hfp_handle_failed_sco_connection(uint8_t status){ case HFP_LINK_SETTINGS_T1: log_info("T1 failed, fallback to CVSD - D1"); sco_establishment_active->negotiated_codec = HFP_CODEC_CVSD; + sco_establishment_active->sco_for_msbc_failed = 1; + sco_establishment_active->command = HFP_CMD_AG_SEND_COMMON_CODEC; sco_establishment_active->link_setting = HFP_LINK_SETTINGS_D1; break; case HFP_LINK_SETTINGS_T2: diff --git a/src/classic/hfp.h b/src/classic/hfp.h index 9f5bb9f15..2e29a3637 100644 --- a/src/classic/hfp.h +++ b/src/classic/hfp.h @@ -541,7 +541,8 @@ typedef struct hfp_connection { // establish codecs connection uint8_t suggested_codec; uint8_t codec_confirmed; - + uint8_t sco_for_msbc_failed; + hfp_link_setttings_t link_setting; uint8_t establish_audio_connection; diff --git a/src/classic/hfp_ag.c b/src/classic/hfp_ag.c index bf148e499..bc62d83b3 100644 --- a/src/classic/hfp_ag.c +++ b/src/classic/hfp_ag.c @@ -528,6 +528,8 @@ static int hfp_ag_set_response_and_hold(uint16_t cid, int state){ } static uint8_t hfp_ag_suggest_codec(hfp_connection_t *hfp_connection){ + if (hfp_connection->sco_for_msbc_failed) return HFP_CODEC_CVSD; + if (hfp_supports_codec(HFP_CODEC_MSBC, hfp_codecs_nr, hfp_codecs)){ if (hfp_supports_codec(HFP_CODEC_MSBC, hfp_connection->remote_codecs_nr, hfp_connection->remote_codecs)){ return HFP_CODEC_MSBC;