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

Commit 9da86c0b authored by Mudumba Ananth's avatar Mudumba Ananth Committed by android-build-merger
Browse files

eSCO: BT 4.1 Enhanced SCO command (1/5) am: f677ae32

am: 825fa062

Change-Id: I78633f7c19e6b613bb352df79d6b15a23d6c1908
parents 1d939195 825fa062
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -50,9 +50,9 @@
#ifndef BTA_AG_SCO_PKT_TYPES
/* S1 packet type setting from HFP 1.5 spec */
#define BTA_AG_SCO_PKT_TYPES /* BTM_SCO_LINK_ALL_PKT_MASK */     \
  (BTM_SCO_LINK_ONLY_MASK | BTM_SCO_PKT_TYPES_MASK_EV3 |               \
   BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | \
   BTM_SCO_PKT_TYPES_MASK_NO_3_EV5)
  (BTM_SCO_LINK_ONLY_MASK | ESCO_PKT_TYPES_MASK_EV3 |            \
   ESCO_PKT_TYPES_MASK_NO_3_EV3 | ESCO_PKT_TYPES_MASK_NO_2_EV5 | \
   ESCO_PKT_TYPES_MASK_NO_3_EV5)
#endif

#ifndef BTA_AG_BIND_INFO
+22 −0
Original line number Diff line number Diff line
@@ -86,3 +86,25 @@ void bta_ag_ci_slc_ready(uint16_t handle) {

  bta_sys_sendmsg(p_buf);
}

/******************************************************************************
 *
 * Function         bta_ag_ci_audio_open_continue
 *
 * Description      This function is called to notify AG that pre-SCO vendor
 *                  setup is finished and the AG can move on and
 *                  send the rest of HCI commands meant to be sent to
 *                  create/accept a SCO connection with the peer device.
 *
 * Returns          void
 *
 *****************************************************************************/
void bta_ag_ci_audio_open_continue(uint16_t handle, uint8_t status) {
  tBTA_AG_DATA* p_buf;
  if ((p_buf = (tBTA_AG_DATA*)osi_malloc(sizeof(tBTA_AG_DATA))) != NULL) {
    p_buf->api_result.hdr.event = BTA_AG_CI_AUDIO_OPEN_CONTINUE_EVT;
    p_buf->api_result.hdr.layer_specific = handle;
    p_buf->api_result.result = status;
    bta_sys_sendmsg(p_buf);
  }
}
+12 −7
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ enum {
  BTA_AG_SVC_TIMEOUT_EVT,
  BTA_AG_CI_SCO_DATA_EVT,
  BTA_AG_CI_SLC_READY_EVT,
  BTA_AG_CI_AUDIO_OPEN_CONTINUE_EVT,
  BTA_AG_MAX_EVT,

  /* these events are handled outside of the state machine */
@@ -265,8 +266,10 @@ typedef struct {
  alarm_t* codec_negotiation_timer;
  tBTA_AG_PEER_CODEC peer_codecs; /* codecs for eSCO supported by the peer */
  tBTA_AG_PEER_CODEC sco_codec;   /* codec to be used for eSCO connection */
#endif
  tBTA_AG_PEER_CODEC
      inuse_codec;     /* codec being used for the current SCO connection */
#if (BTM_WBS_INCLUDED == TRUE)
  bool codec_updated;  /* set to true whenever the app updates codec type */
  bool codec_fallback; /* If sco nego fails for mSBC, fallback to CVSD */
  tBTA_AG_SCO_MSBC_SETTINGS
@@ -288,8 +291,9 @@ typedef struct {
  tBTA_AG_SCB* p_xfer_scb;  /* SCB associated with SCO transfer */
  uint16_t cur_idx;         /* SCO handle */
  uint8_t state;            /* SCO state variable */
  bool param_updated;      /* if params were updated to non-default */
  tBTM_ESCO_PARAMS params; /* ESCO parameters */
  bool is_local;            /* SCO connection initiated locally or remotely */
  uint8_t set_audio_status; /* SCO variable for storing the status of the
                           pre-SCO vendor setup (set_audio_state)*/
} tBTA_AG_SCO_CB;

/* type for AG control block */
@@ -388,6 +392,8 @@ extern void bta_ag_rfc_acp_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
extern void bta_ag_rfc_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
extern void bta_ag_sco_listen(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
extern void bta_ag_sco_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
extern void bta_ag_ci_sco_open_continue(tBTA_AG_SCB* p_scb,
                                        tBTA_AG_DATA* p_data);
extern void bta_ag_sco_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
#if (BTM_WBS_INCLUDED == TRUE)
extern void bta_ag_sco_codec_nego(tBTA_AG_SCB* p_scb, bool result);
@@ -406,7 +412,6 @@ extern void bta_ag_send_bcs(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
#endif
extern void bta_ag_send_ring(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
extern void bta_ag_ci_sco_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
extern void bta_ag_set_esco_param(bool set_reset, tBTM_ESCO_PARAMS* param);
extern void bta_ag_ci_rx_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);
extern void bta_ag_rcvd_slc_ready(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);

+46 −25
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ enum {
  BTA_AG_SEND_RING,
  BTA_AG_CI_SCO_DATA,
  BTA_AG_CI_RX_DATA,
  BTA_AG_CI_SCO_OPEN_CONTINUE,
  BTA_AG_RCVD_SLC_READY,
  BTA_AG_NUM_ACTIONS
};
@@ -92,17 +93,23 @@ typedef void (*tBTA_AG_ACTION)(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data);

/* action functions */
const tBTA_AG_ACTION bta_ag_action[] = {
    bta_ag_register,       bta_ag_deregister,    bta_ag_start_open,
    bta_ag_rfc_do_open,    bta_ag_rfc_do_close,  bta_ag_start_dereg,
    bta_ag_start_close,    bta_ag_rfc_open,      bta_ag_open_fail,
    bta_ag_rfc_acp_open,   bta_ag_rfc_close,     bta_ag_rfc_fail,
    bta_ag_rfc_data,       bta_ag_disc_int_res,  bta_ag_disc_fail,
    bta_ag_disc_acp_res,   bta_ag_free_db,       bta_ag_sco_conn_open,
    bta_ag_sco_conn_close, bta_ag_sco_listen,    bta_ag_sco_open,
    bta_ag_sco_close,      bta_ag_sco_shutdown,  bta_ag_post_sco_open,
    bta_ag_post_sco_close, bta_ag_svc_conn_open, bta_ag_result,
    bta_ag_setcodec,       bta_ag_send_ring,     bta_ag_ci_sco_data,
    bta_ag_ci_rx_data,     bta_ag_rcvd_slc_ready};
    bta_ag_register,       bta_ag_deregister,
    bta_ag_start_open,     bta_ag_rfc_do_open,
    bta_ag_rfc_do_close,   bta_ag_start_dereg,
    bta_ag_start_close,    bta_ag_rfc_open,
    bta_ag_open_fail,      bta_ag_rfc_acp_open,
    bta_ag_rfc_close,      bta_ag_rfc_fail,
    bta_ag_rfc_data,       bta_ag_disc_int_res,
    bta_ag_disc_fail,      bta_ag_disc_acp_res,
    bta_ag_free_db,        bta_ag_sco_conn_open,
    bta_ag_sco_conn_close, bta_ag_sco_listen,
    bta_ag_sco_open,       bta_ag_sco_close,
    bta_ag_sco_shutdown,   bta_ag_post_sco_open,
    bta_ag_post_sco_close, bta_ag_svc_conn_open,
    bta_ag_result,         bta_ag_setcodec,
    bta_ag_send_ring,      bta_ag_ci_sco_data,
    bta_ag_ci_rx_data,     bta_ag_ci_sco_open_continue,
    bta_ag_rcvd_slc_ready};

/* state table information */
#define BTA_AG_ACTIONS 2    /* number of actions */
@@ -134,7 +141,9 @@ const uint8_t bta_ag_st_init[][BTA_AG_NUM_COLS] = {
    /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
    /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}};
    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST},
    /* CI_AUDIO_OPEN_CONTINUE_EVT */
    {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}};

/* state table for opening state */
const uint8_t bta_ag_st_opening[][BTA_AG_NUM_COLS] = {
@@ -164,7 +173,9 @@ const uint8_t bta_ag_st_opening[][BTA_AG_NUM_COLS] = {
    /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
    /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}};
    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST},
    /* CI_AUDIO_OPEN_CONTINUE_EVT */
    {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}};

/* state table for open state */
const uint8_t bta_ag_st_open[][BTA_AG_NUM_COLS] = {
@@ -194,8 +205,10 @@ const uint8_t bta_ag_st_open[][BTA_AG_NUM_COLS] = {
    /* RING_TOUT_EVT */ {BTA_AG_SEND_RING, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
    /* SVC_TOUT_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
    /* CI_SCO_DATA_EVT */ {BTA_AG_CI_SCO_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
    /* CI_SLC_READY_EVT */ {BTA_AG_RCVD_SLC_READY, BTA_AG_IGNORE,
                            BTA_AG_OPEN_ST}};
    /* CI_SLC_READY_EVT */
    {BTA_AG_RCVD_SLC_READY, BTA_AG_IGNORE, BTA_AG_OPEN_ST},
    /* CI_AUDIO_OPEN_CONTINUE_EVT */
    {BTA_AG_CI_SCO_OPEN_CONTINUE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}};

/* state table for closing state */
const uint8_t bta_ag_st_closing[][BTA_AG_NUM_COLS] = {
@@ -224,7 +237,9 @@ const uint8_t bta_ag_st_closing[][BTA_AG_NUM_COLS] = {
    /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
    /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
    /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}};
    /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST},
    /* CI_AUDIO_OPEN_CONTINUE_EVT */
    {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}};

/* type for state table */
typedef const uint8_t (*tBTA_AG_ST_TBL)[BTA_AG_NUM_COLS];
@@ -723,22 +738,25 @@ void bta_ag_sm_execute(tBTA_AG_SCB* p_scb, uint16_t event,
  tBTA_AG_ST_TBL state_table;
  uint8_t action;
  int i;

#if (BTA_AG_DEBUG == TRUE)
  uint16_t in_event = event;
  uint8_t in_state = p_scb->state;
  uint16_t previous_event = event;
  uint8_t previous_state = p_scb->state;

  /* Ignore displaying of AT results when not connected (Ignored in state
   * machine) */
  if (in_event != BTA_AG_API_RESULT_EVT || p_scb->state == BTA_AG_OPEN_ST) {
  if ((previous_event != BTA_AG_API_RESULT_EVT ||
       p_scb->state == BTA_AG_OPEN_ST) &&
      event != BTA_AG_CI_SCO_DATA_EVT) {
    APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d (%s), Event 0x%04x (%s)",
                     bta_ag_scb_to_idx(p_scb), p_scb->state,
                     bta_ag_state_str(p_scb->state), event,
                     bta_ag_evt_str(event, p_data->api_result.result));
  }
#else
  APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d, Event 0x%04x",
                   bta_ag_scb_to_idx(p_scb), p_scb->state, event);
  if (event != BTA_AG_CI_SCO_DATA_EVT) {
    APPL_TRACE_EVENT("%s: AG evt (hdl 0x%04x): State %d, Event 0x%04x",
                     __func__, bta_ag_scb_to_idx(p_scb), p_scb->state, event);
  }
#endif

  event &= 0x00FF;
@@ -763,10 +781,11 @@ void bta_ag_sm_execute(tBTA_AG_SCB* p_scb, uint16_t event,
    }
  }
#if (BTA_AG_DEBUG == TRUE)
  if (p_scb->state != in_state) {
  if (p_scb->state != previous_state) {
    APPL_TRACE_EVENT("BTA AG State Change: [%s] -> [%s] after Event [%s]",
                     bta_ag_state_str(in_state), bta_ag_state_str(p_scb->state),
                     bta_ag_evt_str(in_event, p_data->api_result.result));
                     bta_ag_state_str(previous_state),
                     bta_ag_state_str(p_scb->state),
                     bta_ag_evt_str(previous_event, p_data->api_result.result));
  }
#endif
}
@@ -914,6 +933,8 @@ static char* bta_ag_evt_str(uint16_t event, tBTA_AG_RES result) {
      return "SCO data Callin";
    case BTA_AG_CI_SLC_READY_EVT:
      return "SLC Ready Callin";
    case BTA_AG_CI_AUDIO_OPEN_CONTINUE_EVT:
      return "Pre-SCO setup done. Continue Audio Open";
    default:
      return "Unknown AG Event";
  }
+251 −256

File changed.

Preview size limit exceeded, changes collapsed.

Loading