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

Commit ec15d783 authored by Jack He's avatar Jack He Committed by android-build-merger
Browse files

Merge changes from topic 'eSCO' am: a8fbed7b

am: 954aaa69

Change-Id: I5518a14dfa62f3aa64a9d9e17054219ffe19d99b
parents e009a108 954aaa69
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -828,15 +828,14 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
  tBTA_AG_SCB* ag_scb;
  uint32_t i, ind_id;
  uint32_t bia_masked_out;
  tBTA_AG_PEER_CODEC codec_type, codec_sent;
  if (p_arg == NULL) {
    APPL_TRACE_ERROR("%s: p_arg is null, send error and return", __func__);
    bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR);
    return;
  }

  APPL_TRACE_DEBUG("HFP AT cmd:%d arg_type:%d arg:%d arg:%s", cmd, arg_type,
                   int_arg, p_arg);
  APPL_TRACE_DEBUG("%s: AT command %d, arg_type %d, int_arg %d, arg %s",
                   __func__, cmd, arg_type, int_arg, p_arg);

  memset(&val, 0, sizeof(tBTA_AG_VAL));
  val.hdr.handle = bta_ag_scb_to_idx(p_scb);
@@ -1204,7 +1203,8 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
      }
      break;

    case BTA_AG_AT_BCS_EVT:
    case BTA_AG_AT_BCS_EVT: {
      tBTA_AG_PEER_CODEC codec_type, codec_sent;
      bta_ag_send_ok(p_scb);
      alarm_cancel(p_scb->codec_negotiation_timer);

@@ -1234,7 +1234,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
      /* send final codec info to callback */
      val.num = codec_sent;
      break;

    }
    case BTA_AG_LOCAL_EVT_BCC:
      bta_ag_send_ok(p_scb);
      bta_ag_sco_open(p_scb, NULL);
+33 −37
Original line number Diff line number Diff line
@@ -217,7 +217,7 @@ static void bta_ag_sco_disc_cback(uint16_t sco_idx) {
static void bta_ag_sco_read_cback(uint16_t sco_inx, BT_HDR* p_data,
                                  tBTM_SCO_DATA_FLAG status) {
  if (status != BTM_SCO_DATA_CORRECT) {
    APPL_TRACE_DEBUG("bta_ag_sco_read_cback: status(%d)", status);
    APPL_TRACE_DEBUG("%s: status %d", __func__, status);
  }

  /* Callout function must free the data. */
@@ -232,33 +232,26 @@ static void bta_ag_sco_read_cback(uint16_t sco_inx, BT_HDR* p_data,
 *                  If only_active is true, then SCO is only removed if
 *                  connected
 *
 * Returns          bool   - true if Sco removal was started
 * Returns          bool   - true if SCO removal was started
 *
 ******************************************************************************/
static bool bta_ag_remove_sco(tBTA_AG_SCB* p_scb, bool only_active) {
  bool removed_started = false;
  tBTM_STATUS status;

  if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) {
    if (!only_active || p_scb->sco_idx == bta_ag_cb.sco.cur_idx) {
      status = BTM_RemoveSco(p_scb->sco_idx);

      APPL_TRACE_DEBUG("%s: inx 0x%04x, status:0x%x", __func__, p_scb->sco_idx,
                       status);

      tBTM_STATUS status = BTM_RemoveSco(p_scb->sco_idx);
      APPL_TRACE_DEBUG("%s: SCO index 0x%04x, status %d", __func__,
                       p_scb->sco_idx, status);
      if (status == BTM_CMD_STARTED) {
        /* Sco is connected; set current control block */
        /* SCO is connected; set current control block */
        bta_ag_cb.sco.p_curr_scb = p_scb;

        removed_started = true;
      }
      /* If no connection reset the sco handle */
      else if ((status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR)) {
        return true;
      } else if ((status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR)) {
        /* If no connection reset the SCO handle */
        p_scb->sco_idx = BTM_INVALID_SCO_INDEX;
      }
    }
  }
  return removed_started;
  return false;
}

/*******************************************************************************
@@ -292,8 +285,8 @@ static void bta_ag_esco_connreq_cback(tBTM_ESCO_EVT event,
        bta_ag_cb.sco.state = BTA_AG_SCO_OPENING_ST;
        bta_ag_cb.sco.p_curr_scb = p_scb;
        bta_ag_cb.sco.cur_idx = p_scb->sco_idx;
      } else /* Begin a transfer: Close current SCO before responding */
      {
      } else {
        /* Begin a transfer: Close current SCO before responding */
        APPL_TRACE_DEBUG("bta_ag_esco_connreq_cback: Begin XFER");
        bta_ag_cb.sco.p_xfer_scb = p_scb;
        bta_ag_cb.sco.conn_data = p_data->conn_evt;
@@ -309,17 +302,15 @@ static void bta_ag_esco_connreq_cback(tBTM_ESCO_EVT event,
          bta_ag_sco_conn_rsp(p_scb, &p_data->conn_evt);
        }
      }
    }
    } else {
      /* If error occurred send reject response immediately */
    else {
      APPL_TRACE_WARNING(
          "no scb for bta_ag_esco_connreq_cback or no resources");
      BTM_EScoConnRsp(p_data->conn_evt.sco_inx, HCI_ERR_HOST_REJECT_RESOURCES,
                      (enh_esco_params_t*)NULL);
    }
  }
  } else if (event == BTM_ESCO_CHG_EVT) {
    /* Received a change in the esco link */
  else if (event == BTM_ESCO_CHG_EVT) {
    APPL_TRACE_EVENT(
        "%s: eSCO change event (inx %d): rtrans %d, "
        "rxlen %d, txlen %d, txint %d",
@@ -565,6 +556,7 @@ bool bta_ag_attempt_msbc_safe_settings(tBTA_AG_SCB* p_scb) {
 *
 ******************************************************************************/
static void bta_ag_codec_negotiation_timer_cback(void* data) {
  APPL_TRACE_DEBUG("%s", __func__);
  tBTA_AG_SCB* p_scb = (tBTA_AG_SCB*)data;

  /* Announce that codec negotiation failed. */
@@ -585,11 +577,12 @@ static void bta_ag_codec_negotiation_timer_cback(void* data) {
 *
 ******************************************************************************/
void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) {
  APPL_TRACE_DEBUG("%s", __func__);
  bta_ag_cb.sco.p_curr_scb = p_scb;

  if ((p_scb->codec_updated || p_scb->codec_fallback) &&
      (p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC)) {
    /* Change the power mode to Active until sco open is completed. */
    /* Change the power mode to Active until SCO open is completed. */
    bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);

    /* Send +BCS to the peer */
@@ -624,20 +617,19 @@ static void bta_ag_sco_event(tBTA_AG_SCB* p_scb, uint8_t event) {
  BT_HDR* p_buf;
#endif

#if BTA_AG_SCO_DEBUG == TRUE
#if (BTA_AG_SCO_DEBUG == TRUE)
  uint8_t in_state = p_sco->state;

  if (event != BTA_AG_SCO_CI_DATA_E) {
    APPL_TRACE_EVENT(
        "%s: BTA ag sco evt (hdl 0x%04x): State %d (%s), Event %d (%s)",
    APPL_TRACE_EVENT("%s: SCO Index 0x%04x, State %d (%s), Event %d (%s)",
                     __func__, p_scb->sco_idx, p_sco->state,
        bta_ag_sco_state_str(p_sco->state), event, bta_ag_sco_evt_str(event));
                     bta_ag_sco_state_str(p_sco->state), event,
                     bta_ag_sco_evt_str(event));
  }
#else

  if (event != BTA_AG_SCO_CI_DATA_E) {
    APPL_TRACE_EVENT("%s: BTA ag sco evt (hdl 0x%04x): State %d, Event %d",
                     __func__, p_scb->sco_idx, p_sco->state, event);
    APPL_TRACE_EVENT("%s: SCO Index 0x%04x, State %d, Event %d", __func__,
                     p_scb->sco_idx, p_sco->state, event);
  }
#endif

@@ -1246,13 +1238,17 @@ void bta_ag_sco_close(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) {
 ******************************************************************************/
void bta_ag_sco_codec_nego(tBTA_AG_SCB* p_scb, bool result) {
  if (result == true) {
    /* Subsequent sco connection will skip codec negotiation */
    /* Subsequent SCO connection will skip codec negotiation */
    APPL_TRACE_DEBUG("%s: Succeeded for index 0x%04x", __func__,
                     p_scb->sco_idx);
    p_scb->codec_updated = false;

    bta_ag_sco_event(p_scb, BTA_AG_SCO_CN_DONE_E);
  } else /* codec negotiation failed */
  } else {
    /* codec negotiation failed */
    APPL_TRACE_ERROR("%s: Failed for index 0x%04x", __func__, p_scb->sco_idx);
    bta_ag_sco_event(p_scb, BTA_AG_SCO_CLOSE_E);
  }
}

/*******************************************************************************
 *
+2 −2
Original line number Diff line number Diff line
@@ -3928,11 +3928,11 @@ bool bta_dm_check_if_only_hd_connected(BD_ADDR peer_addr) {
        !bdcmp(bta_dm_conn_srvcs.conn_srvc[j].peer_bdaddr, peer_addr)) {
      APPL_TRACE_DEBUG("%s: Another profile (id=%d) is connected", __func__,
                       bta_dm_conn_srvcs.conn_srvc[j].id);
      return FALSE;
      return false;
    }
  }

  return TRUE;
  return true;
}

/*******************************************************************************
+1 −2
Original line number Diff line number Diff line
@@ -222,7 +222,6 @@ static void bta_hf_client_sco_create(tBTA_HF_CLIENT_CB* client_cb,
                                     bool is_orig) {
  tBTM_STATUS status;
  uint8_t* p_bd_addr = NULL;
  enh_esco_params_t params;

  APPL_TRACE_DEBUG("%s: %d", __func__, is_orig);

@@ -233,7 +232,7 @@ static void bta_hf_client_sco_create(tBTA_HF_CLIENT_CB* client_cb,
    return;
  }

  params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1);
  enh_esco_params_t params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1);

  /* if initiating set current scb and peer bd addr */
  if (is_orig) {
+2 −2
Original line number Diff line number Diff line
@@ -465,7 +465,7 @@ void bta_sys_event(BT_HDR* p_msg) {
  uint8_t id;
  bool freebuf = true;

  APPL_TRACE_EVENT("BTA got event 0x%x", p_msg->event);
  APPL_TRACE_EVENT("%s: Event 0x%x", __func__, p_msg->event);

  /* get subsystem id from event */
  id = (uint8_t)(p_msg->event >> 8);
@@ -474,7 +474,7 @@ void bta_sys_event(BT_HDR* p_msg) {
  if ((id < BTA_ID_MAX) && (bta_sys_cb.reg[id] != NULL)) {
    freebuf = (*bta_sys_cb.reg[id]->evt_hdlr)(p_msg);
  } else {
    APPL_TRACE_WARNING("BTA got unregistered event id %d", id);
    APPL_TRACE_WARNING("%s: Received unregistered event id %d", __func__, id);
  }

  if (freebuf) {
Loading