Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68e4a3bd authored by Yuyang Huang's avatar Yuyang Huang Committed by Automerger Merge Worker
Browse files

Merge "Fall back to SCO connection if eSCO connection is failed" into main am: 09662594

parents 8e1483f4 09662594
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -395,6 +395,7 @@ void bta_ag_rfc_close(tBTA_AG_SCB* p_scb,
  /* Clear these flags upon SLC teardown */
  /* Clear these flags upon SLC teardown */
  p_scb->codec_updated = false;
  p_scb->codec_updated = false;
  p_scb->codec_fallback = false;
  p_scb->codec_fallback = false;
  p_scb->retransmission_effort_retries = 0;
  p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2;
  p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2;
  p_scb->codec_aptx_settings = BTA_AG_SCO_APTX_SWB_SETTINGS_Q0;
  p_scb->codec_aptx_settings = BTA_AG_SCO_APTX_SWB_SETTINGS_Q0;
  p_scb->is_aptx_swb_codec = false;
  p_scb->is_aptx_swb_codec = false;
+2 −0
Original line number Original line Diff line number Diff line
@@ -270,6 +270,8 @@ struct tBTA_AG_SCB {
      inuse_codec;     /* codec being used for the current SCO connection */
      inuse_codec;     /* codec being used for the current SCO connection */
  bool codec_updated;  /* set to true whenever the app updates codec type */
  bool codec_updated;  /* set to true whenever the app updates codec type */
  bool codec_fallback; /* If sco nego fails for mSBC, fallback to CVSD */
  bool codec_fallback; /* If sco nego fails for mSBC, fallback to CVSD */
  uint8_t retransmission_effort_retries;         /* Retry eSCO
                                                  with retransmission_effort value*/
  tBTA_AG_SCO_MSBC_SETTINGS codec_msbc_settings; /* settings to be used for the
  tBTA_AG_SCO_MSBC_SETTINGS codec_msbc_settings; /* settings to be used for the
                                                    impending eSCO on WB */
                                                    impending eSCO on WB */
  tBTA_AG_SCO_LC3_SETTINGS codec_lc3_settings;   /* settings to be used for the
  tBTA_AG_SCO_LC3_SETTINGS codec_lc3_settings;   /* settings to be used for the
+1 −0
Original line number Original line Diff line number Diff line
@@ -148,6 +148,7 @@ static tBTA_AG_SCB* bta_ag_scb_alloc(void) {
      p_scb->received_at_bac = false;
      p_scb->received_at_bac = false;
      p_scb->codec_updated = false;
      p_scb->codec_updated = false;
      p_scb->codec_fallback = false;
      p_scb->codec_fallback = false;
      p_scb->retransmission_effort_retries = 0;
      p_scb->peer_codecs = BTM_SCO_CODEC_CVSD;
      p_scb->peer_codecs = BTM_SCO_CODEC_CVSD;
      p_scb->sco_codec = BTM_SCO_CODEC_CVSD;
      p_scb->sco_codec = BTM_SCO_CODEC_CVSD;
      p_scb->peer_version = HFP_HSP_VERSION_UNKNOWN;
      p_scb->peer_version = HFP_HSP_VERSION_UNKNOWN;
+18 −2
Original line number Original line Diff line number Diff line
@@ -251,7 +251,13 @@ static void bta_ag_sco_disc_cback(uint16_t sco_idx) {
        }
        }
      }
      }
    } else if (bta_ag_sco_is_opening(bta_ag_cb.sco.p_curr_scb)) {
    } else if (bta_ag_sco_is_opening(bta_ag_cb.sco.p_curr_scb)) {
      LOG_ERROR("%s: eSCO/SCO failed to open, no more fall back", __func__);
      if (IS_FLAG_ENABLED(retry_esco_with_zero_retransmission_effort) &&
          bta_ag_cb.sco.p_curr_scb->retransmission_effort_retries == 0) {
        bta_ag_cb.sco.p_curr_scb->retransmission_effort_retries++;
        bta_ag_cb.sco.p_curr_scb->state = BTA_AG_SCO_CODEC_ST;
        LOG_WARN("eSCO/SCO failed to open, retry with retransmission_effort");
      } else
        LOG_ERROR("eSCO/SCO failed to open, no more fall back");
    }
    }


    bta_ag_cb.sco.p_curr_scb->inuse_codec = BTM_SCO_CODEC_NONE;
    bta_ag_cb.sco.p_curr_scb->inuse_codec = BTM_SCO_CODEC_NONE;
@@ -485,6 +491,13 @@ void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) {
    }
    }
  }
  }


  if (IS_FLAG_ENABLED(retry_esco_with_zero_retransmission_effort) &&
      p_scb->retransmission_effort_retries == 1) {
    LOG_INFO("change retransmission_effort to 0, retry");
    p_scb->retransmission_effort_retries++;
    params.retransmission_effort = ESCO_RETRANSMISSION_OFF;
  }

  /* Configure input/output data path based on HAL settings. */
  /* Configure input/output data path based on HAL settings. */
  hfp_hal_interface::set_codec_datapath(esco_codec);
  hfp_hal_interface::set_codec_datapath(esco_codec);
  hfp_hal_interface::update_esco_parameters(&params);
  hfp_hal_interface::update_esco_parameters(&params);
@@ -1419,12 +1432,13 @@ void bta_ag_sco_shutdown(tBTA_AG_SCB* p_scb,
void bta_ag_sco_conn_open(tBTA_AG_SCB* p_scb,
void bta_ag_sco_conn_open(tBTA_AG_SCB* p_scb,
                          UNUSED_ATTR const tBTA_AG_DATA& data) {
                          UNUSED_ATTR const tBTA_AG_DATA& data) {
  bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_OPEN_E);
  bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_OPEN_E);

  bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);
  bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);


  /* call app callback */
  /* call app callback */
  bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_OPEN_EVT);
  bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_OPEN_EVT);


  /* reset retransmission_effort_retries*/
  p_scb->retransmission_effort_retries = 0;
  /* reset to mSBC T2 settings as the preferred */
  /* reset to mSBC T2 settings as the preferred */
  p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2;
  p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2;
  /* reset to LC3 T2 settings as the preferred */
  /* reset to LC3 T2 settings as the preferred */
@@ -1464,6 +1478,8 @@ void bta_ag_sco_conn_close(tBTA_AG_SCB* p_scb,
        p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T1) ||
        p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T1) ||
       (p_scb->sco_codec == BTM_SCO_CODEC_LC3 &&
       (p_scb->sco_codec == BTM_SCO_CODEC_LC3 &&
        p_scb->codec_lc3_settings == BTA_AG_SCO_LC3_SETTINGS_T1) ||
        p_scb->codec_lc3_settings == BTA_AG_SCO_LC3_SETTINGS_T1) ||
       (IS_FLAG_ENABLED(retry_esco_with_zero_retransmission_effort) &&
        p_scb->retransmission_effort_retries == 1) ||
       aptx_voice)) {
       aptx_voice)) {
    bta_ag_sco_event(p_scb, BTA_AG_SCO_REOPEN_E);
    bta_ag_sco_event(p_scb, BTA_AG_SCO_REOPEN_E);
  } else {
  } else {