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

Commit fa231970 authored by Jakub Rotkiewicz (xWF)'s avatar Jakub Rotkiewicz (xWF) Committed by Gerrit Code Review
Browse files

Merge changes I4497bf8a,Ia59f552e,I4d063245,I09fc6938,I3553199f into main

* changes:
  avdt: enable verbose logging for scb and ccb
  avdt: simplify searching for ccb and scb events
  bta_av: remove btif_ extern declarations
  bta_av: Remove redundant function call
  bta_av: Remove redundant API to SM event parser
parents cc427262 8c208c8b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -230,7 +230,7 @@ void BTA_AvStart(tBTA_AV_HNDL handle, bool use_latency_mode) {
            use_latency_mode);

  tBTA_AV_DO_START* p_buf = (tBTA_AV_DO_START*)osi_malloc(sizeof(tBTA_AV_DO_START));
  p_buf->hdr.event = BTA_AV_API_START_EVT;
  p_buf->hdr.event = BTA_AV_AP_START_EVT;
  p_buf->hdr.layer_specific = handle;
  p_buf->use_latency_mode = use_latency_mode;

@@ -273,7 +273,7 @@ void BTA_AvStop(tBTA_AV_HNDL handle, bool suspend) {

  tBTA_AV_API_STOP* p_buf = (tBTA_AV_API_STOP*)osi_malloc(sizeof(tBTA_AV_API_STOP));

  p_buf->hdr.event = BTA_AV_API_STOP_EVT;
  p_buf->hdr.event = BTA_AV_AP_STOP_EVT;
  p_buf->hdr.layer_specific = handle;
  p_buf->flush = true;
  p_buf->suspend = suspend;
+3 −11
Original line number Diff line number Diff line
@@ -64,8 +64,7 @@ enum {
  /* these events are handled by the AV stream state machine */
  BTA_AV_API_OPEN_EVT,
  BTA_AV_API_CLOSE_EVT,
  BTA_AV_AP_START_EVT, /* the following 2 events must be in the same order as
                          the *API_*EVT */
  BTA_AV_AP_START_EVT,
  BTA_AV_AP_STOP_EVT,
  BTA_AV_API_RECONFIG_EVT,
  BTA_AV_API_PROTECT_REQ_EVT,
@@ -117,9 +116,6 @@ enum {
  BTA_AV_DEREG_COMP_EVT,
  BTA_AV_AVDT_RPT_CONN_EVT,
  BTA_AV_API_PEER_SEP_EVT,
  BTA_AV_API_START_EVT, /* the following 2 events must be in the same order as
                           the *AP_*EVT */
  BTA_AV_API_STOP_EVT,
  BTA_AV_API_SET_LATENCY_EVT,
};

@@ -134,10 +130,6 @@ enum {
#define BTA_AV_FIRST_NSM_EVT BTA_AV_API_ENABLE_EVT
#define BTA_AV_LAST_NSM_EVT BTA_AV_API_SET_LATENCY_EVT

/* API events passed to both SSMs (by bta_av_api_to_ssm) */
#define BTA_AV_FIRST_A2S_API_EVT BTA_AV_API_START_EVT
#define BTA_AV_FIRST_A2S_SSM_EVT BTA_AV_AP_START_EVT

#define BTA_AV_LAST_EVT BTA_AV_API_SET_LATENCY_EVT

/* maximum number of SEPS in stream discovery results */
@@ -263,13 +255,13 @@ typedef struct {
  bool is_low_latency;
} tBTA_AV_API_SET_LATENCY;

/* data type for BTA_AV_API_START_EVT and bta_av_do_start */
/* data type for BTA_AV_AP_START_EVT from API and bta_av_do_start */
typedef struct {
  BT_HDR_RIGID hdr;
  bool use_latency_mode;
} tBTA_AV_DO_START;

/* data type for BTA_AV_API_STOP_EVT */
/* data type for BTA_AV_AP_STOP_EVT from API*/
typedef struct {
  BT_HDR_RIGID hdr;
  bool suspend;
+3 −39
Original line number Diff line number Diff line
@@ -83,7 +83,6 @@ static void bta_av_api_enable(tBTA_AV_DATA* p_data);
static void bta_av_api_register(tBTA_AV_DATA* p_data);
static void bta_av_ci_data(tBTA_AV_DATA* p_data);
static void bta_av_rpc_conn(tBTA_AV_DATA* p_data);
static void bta_av_api_to_ssm(tBTA_AV_DATA* p_data);

static void bta_av_sco_chg_cback(tBTA_SYS_CONN_STATUS status, uint8_t num_sco_links, uint8_t app_id,
                                 const RawAddress& peer_addr);
@@ -210,7 +209,6 @@ tBTA_AV_SCB* bta_av_addr_to_scb(const RawAddress& bd_addr) {
  return p_scb;
}

extern const RawAddress& btif_av_find_by_handle(tBTA_AV_HNDL bta_handle);
int BTA_AvObtainPeerChannelIndex(const RawAddress& peer_address) {
  // Find the entry for the peer (if exists)
  tBTA_AV_SCB* p_scb = bta_av_addr_to_scb(peer_address);
@@ -797,26 +795,6 @@ static void bta_av_ci_data(tBTA_AV_DATA* p_data) {
 ******************************************************************************/
static void bta_av_rpc_conn(tBTA_AV_DATA* /* p_data */) {}

/*******************************************************************************
 *
 * Function         bta_av_api_to_ssm
 *
 * Description      forward the API request to stream state machine
 *
 *
 * Returns          void
 *
 ******************************************************************************/
static void bta_av_api_to_ssm(tBTA_AV_DATA* p_data) {
  uint16_t event = p_data->hdr.event - BTA_AV_FIRST_A2S_API_EVT + BTA_AV_FIRST_A2S_SSM_EVT;
  tBTA_AV_HNDL handle = p_data->hdr.layer_specific;
  tBTA_AV_SCB* p_scb = bta_av_hndl_to_scb(handle);

  if (p_scb != nullptr) {
    bta_av_ssm_execute(p_scb, event, p_data);
  }
}

/*******************************************************************************
 *
 * Function         bta_av_chk_start
@@ -1207,19 +1185,15 @@ static void bta_av_non_state_machine_event(uint16_t event, tBTA_AV_DATA* p_data)
    case BTA_AV_AVDT_RPT_CONN_EVT:
      bta_av_rpc_conn(p_data);
      break;
    case BTA_AV_API_START_EVT:
      bta_av_api_to_ssm(p_data);
      break;
    case BTA_AV_API_STOP_EVT:
      bta_av_api_to_ssm(p_data);
      break;
    case BTA_AV_API_PEER_SEP_EVT:
      bta_av_api_set_peer_sep(p_data);
      break;
  }
}

static void bta_av_better_state_machine(tBTA_AV_CB* p_cb, uint16_t event, tBTA_AV_DATA* p_data) {
void bta_av_sm_execute(tBTA_AV_CB* p_cb, uint16_t event, tBTA_AV_DATA* p_data) {
  log::verbose("AV event=0x{:x}({}) state={}({})", event, bta_av_evt_code(event), p_cb->state,
               bta_av_st_code(p_cb->state));
  switch (p_cb->state) {
    case BTA_AV_INIT_ST:
      switch (event) {
@@ -1273,12 +1247,6 @@ static void bta_av_better_state_machine(tBTA_AV_CB* p_cb, uint16_t event, tBTA_A
  }
}

void bta_av_sm_execute(tBTA_AV_CB* p_cb, uint16_t event, tBTA_AV_DATA* p_data) {
  log::verbose("AV event=0x{:x}({}) state={}({})", event, bta_av_evt_code(event), p_cb->state,
               bta_av_st_code(p_cb->state));
  bta_av_better_state_machine(p_cb, event, p_data);
}

/*******************************************************************************
 *
 * Function         bta_av_hdl_event
@@ -1462,10 +1430,6 @@ const char* bta_av_evt_code(uint16_t evt_code) {
      return "DEREG_COMP";
    case BTA_AV_AVDT_RPT_CONN_EVT:
      return "RPT_CONN";
    case BTA_AV_API_START_EVT:
      return "API_START";
    case BTA_AV_API_STOP_EVT:
      return "API_STOP";
    default:
      return "unknown";
  }
+18 −22
Original line number Diff line number Diff line
@@ -45,11 +45,27 @@ enum {
  BTA_AV_CLOSING_SST
};

static void bta_av_better_stream_state_machine(tBTA_AV_SCB* p_scb, uint16_t event,
                                               tBTA_AV_DATA* p_data) {
/*******************************************************************************
 *
 * Function         bta_av_ssm_execute
 *
 * Description      Stream state machine event handling function for AV
 *
 *
 * Returns          void
 *
 ******************************************************************************/
void bta_av_ssm_execute(tBTA_AV_SCB* p_scb, uint16_t event, tBTA_AV_DATA* p_data) {
  if (p_scb == NULL) {
    /* this stream is not registered */
    log::error("AV channel not registered");
    return;
  }

  uint8_t previous_state = p_scb->state;
  tBTA_AV_ACT event_handler1 = nullptr;
  tBTA_AV_ACT event_handler2 = nullptr;

  switch (p_scb->state) {
    case BTA_AV_INIT_SST:
      switch (event) {
@@ -439,26 +455,6 @@ static void bta_av_better_stream_state_machine(tBTA_AV_SCB* p_scb, uint16_t even
  }
}

/*******************************************************************************
 *
 * Function         bta_av_ssm_execute
 *
 * Description      Stream state machine event handling function for AV
 *
 *
 * Returns          void
 *
 ******************************************************************************/
void bta_av_ssm_execute(tBTA_AV_SCB* p_scb, uint16_t event, tBTA_AV_DATA* p_data) {
  if (p_scb == NULL) {
    /* this stream is not registered */
    log::verbose("AV channel not registered");
    return;
  }

  bta_av_better_stream_state_machine(p_scb, event, p_data);
}

/*******************************************************************************
 *
 * Function         bta_av_is_scb_opening
+112 −114
Original line number Diff line number Diff line
@@ -86,244 +86,244 @@ const tAVDT_CCB_ACTION avdt_ccb_action[] = {
const uint8_t avdt_ccb_st_idle[][AVDT_CCB_NUM_COLS] = {
        /* Event */
        /* Action 1                    Action 2                    Next state */
        /* API_DISCOVER_REQ_EVT */
        /* AVDT_CCB_API_DISCOVER_REQ_EVT */
        {AVDT_CCB_SND_DISCOVER_CMD, AVDT_CCB_CHAN_OPEN, AVDT_CCB_OPENING_ST},
        /* API_GETCAP_REQ_EVT */
        /* AVDT_CCB_API_GETCAP_REQ_EVT */
        {AVDT_CCB_SND_GETCAP_CMD, AVDT_CCB_CHAN_OPEN, AVDT_CCB_OPENING_ST},
        /* API_START_REQ_EVT */
        /* AVDT_CCB_API_START_REQ_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* API_SUSPEND_REQ_EVT */
        /* AVDT_CCB_API_SUSPEND_REQ_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* API_DISCOVER_RSP_EVT */
        /* AVDT_CCB_API_DISCOVER_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* API_GETCAP_RSP_EVT */
        /* AVDT_CCB_API_GETCAP_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* API_START_RSP_EVT */
        /* AVDT_CCB_API_START_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* API_SUSPEND_RSP_EVT */
        /* AVDT_CCB_API_SUSPEND_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* API_CONNECT_REQ_EVT */
        /* AVDT_CCB_API_CONNECT_REQ_EVT */
        {AVDT_CCB_SET_CONN, AVDT_CCB_CHAN_OPEN, AVDT_CCB_OPENING_ST},
        /* API_DISCONNECT_REQ_EVT */
        /* AVDT_CCB_API_DISCONNECT_REQ_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_DISCOVER_CMD_EVT */
        /* AVDT_CCB_MSG_DISCOVER_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_GETCAP_CMD_EVT */
        /* AVDT_CCB_MSG_GETCAP_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_START_CMD_EVT */
        /* AVDT_CCB_MSG_START_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_SUSPEND_CMD_EVT */
        /* AVDT_CCB_MSG_SUSPEND_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_DISCOVER_RSP_EVT */
        /* AVDT_CCB_MSG_DISCOVER_RSP_EVT */
        {AVDT_CCB_HDL_DISCOVER_RSP, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_GETCAP_RSP_EVT */
        /* AVDT_CCB_MSG_GETCAP_RSP_EVT */
        {AVDT_CCB_HDL_GETCAP_RSP, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_START_RSP_EVT */
        /* AVDT_CCB_MSG_START_RSP_EVT */
        {AVDT_CCB_HDL_START_RSP, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* MSG_SUSPEND_RSP_EVT */
        /* AVDT_CCB_MSG_SUSPEND_RSP_EVT */
        {AVDT_CCB_HDL_SUSPEND_RSP, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* RCVRSP_EVT */
        /* AVDT_CCB_RCVRSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* SENDMSG_EVT */
        /* AVDT_CCB_SENDMSG_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* RET_TOUT_EVT */
        /* AVDT_CCB_RET_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* RSP_TOUT_EVT */
        /* AVDT_CCB_RSP_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* IDLE_TOUT_EVT */
        /* AVDT_CCB_IDLE_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* UL_OPEN_EVT */
        /* AVDT_CCB_UL_OPEN_EVT */
        {AVDT_CCB_CHAN_OPEN, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* UL_CLOSE_EVT */
        /* AVDT_CCB_UL_CLOSE_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* LL_OPEN_EVT */
        /* AVDT_CCB_LL_OPEN_EVT */
        {AVDT_CCB_LL_OPENED, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* LL_CLOSE_EVT */
        /* AVDT_CCB_LL_CLOSE_EVT */
        {AVDT_CCB_LL_CLOSED, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* LL_CONG_EVT */
        /* AVDT_CCB_LL_CONG_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST}};

/* state table for opening state */
const uint8_t avdt_ccb_st_opening[][AVDT_CCB_NUM_COLS] = {
        /* Event */
        /* Action 1                    Action 2                    Next state */
        /* API_DISCOVER_REQ_EVT */
        /* AVDT_CCB_API_DISCOVER_REQ_EVT */
        {AVDT_CCB_SND_DISCOVER_CMD, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_GETCAP_REQ_EVT */
        /* AVDT_CCB_API_GETCAP_REQ_EVT */
        {AVDT_CCB_SND_GETCAP_CMD, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_START_REQ_EVT */
        /* AVDT_CCB_API_START_REQ_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_SUSPEND_REQ_EVT */
        /* AVDT_CCB_API_SUSPEND_REQ_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_DISCOVER_RSP_EVT */
        /* AVDT_CCB_API_DISCOVER_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_GETCAP_RSP_EVT */
        /* AVDT_CCB_API_GETCAP_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_START_RSP_EVT */
        /* AVDT_CCB_API_START_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_SUSPEND_RSP_EVT */
        /* AVDT_CCB_API_SUSPEND_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_CONNECT_REQ_EVT */
        /* AVDT_CCB_API_CONNECT_REQ_EVT */
        {AVDT_CCB_SET_CONN, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* API_DISCONNECT_REQ_EVT */
        /* AVDT_CCB_API_DISCONNECT_REQ_EVT */
        {AVDT_CCB_SET_DISCONN, AVDT_CCB_DO_DISCONN, AVDT_CCB_CLOSING_ST},
        /* MSG_DISCOVER_CMD_EVT */
        /* AVDT_CCB_MSG_DISCOVER_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* MSG_GETCAP_CMD_EVT */
        /* AVDT_CCB_MSG_GETCAP_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* MSG_START_CMD_EVT */
        /* AVDT_CCB_MSG_START_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* MSG_SUSPEND_CMD_EVT */
        /* AVDT_CCB_MSG_SUSPEND_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* MSG_DISCOVER_RSP_EVT */
        /* AVDT_CCB_MSG_DISCOVER_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* MSG_GETCAP_RSP_EVT */
        /* AVDT_CCB_MSG_GETCAP_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* MSG_START_RSP_EVT */
        /* AVDT_CCB_MSG_START_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* MSG_SUSPEND_RSP_EVT */
        /* AVDT_CCB_MSG_SUSPEND_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* RCVRSP_EVT */
        /* AVDT_CCB_RCVRSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* SENDMSG_EVT */
        /* AVDT_CCB_SENDMSG_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* RET_TOUT_EVT */
        /* AVDT_CCB_RET_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* RSP_TOUT_EVT */
        /* AVDT_CCB_RSP_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* IDLE_TOUT_EVT */
        /* AVDT_CCB_IDLE_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* UL_OPEN_EVT */
        /* AVDT_CCB_UL_OPEN_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST},
        /* UL_CLOSE_EVT */
        /* AVDT_CCB_UL_CLOSE_EVT */
        {AVDT_CCB_CLEAR_CMDS, AVDT_CCB_CHAN_CLOSE, AVDT_CCB_CLOSING_ST},
        /* LL_OPEN_EVT */
        /* AVDT_CCB_LL_OPEN_EVT */
        {AVDT_CCB_SND_CMD, AVDT_CCB_LL_OPENED, AVDT_CCB_OPEN_ST},
        /* LL_CLOSE_EVT */
        /* AVDT_CCB_LL_CLOSE_EVT */
        {AVDT_CCB_LL_CLOSED, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* LL_CONG_EVT */
        /* AVDT_CCB_LL_CONG_EVT */
        {AVDT_CCB_CONG_STATE, AVDT_CCB_IGNORE, AVDT_CCB_OPENING_ST}};

/* state table for open state */
const uint8_t avdt_ccb_st_open[][AVDT_CCB_NUM_COLS] = {
        /* Event */
        /* Action 1                    Action 2                    Next state */
        /* API_DISCOVER_REQ_EVT */
        /* AVDT_CCB_API_DISCOVER_REQ_EVT */
        {AVDT_CCB_SND_DISCOVER_CMD, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_GETCAP_REQ_EVT */
        /* AVDT_CCB_API_GETCAP_REQ_EVT */
        {AVDT_CCB_SND_GETCAP_CMD, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_START_REQ_EVT */
        /* AVDT_CCB_API_START_REQ_EVT */
        {AVDT_CCB_SND_START_CMD, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_SUSPEND_REQ_EVT */
        /* AVDT_CCB_API_SUSPEND_REQ_EVT */
        {AVDT_CCB_SND_SUSPEND_CMD, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_DISCOVER_RSP_EVT */
        /* AVDT_CCB_API_DISCOVER_RSP_EVT */
        {AVDT_CCB_SND_DISCOVER_RSP, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_GETCAP_RSP_EVT */
        /* AVDT_CCB_API_GETCAP_RSP_EVT */
        {AVDT_CCB_SND_GETCAP_RSP, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_START_RSP_EVT */
        /* AVDT_CCB_API_START_RSP_EVT */
        {AVDT_CCB_SND_START_RSP, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_SUSPEND_RSP_EVT */
        /* AVDT_CCB_API_SUSPEND_RSP_EVT */
        {AVDT_CCB_SND_SUSPEND_RSP, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* API_CONNECT_REQ_EVT */
        /* AVDT_CCB_API_CONNECT_REQ_EVT */
        {AVDT_CCB_SET_CONN, AVDT_CCB_LL_OPENED, AVDT_CCB_OPEN_ST},
        /* API_DISCONNECT_REQ_EVT */
        /* AVDT_CCB_API_DISCONNECT_REQ_EVT */
        {AVDT_CCB_SET_DISCONN, AVDT_CCB_DO_DISCONN, AVDT_CCB_CLOSING_ST},
        /* MSG_DISCOVER_CMD_EVT */
        /* AVDT_CCB_MSG_DISCOVER_CMD_EVT */
        {AVDT_CCB_HDL_DISCOVER_CMD, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* MSG_GETCAP_CMD_EVT */
        /* AVDT_CCB_MSG_GETCAP_CMD_EVT */
        {AVDT_CCB_HDL_GETCAP_CMD, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* MSG_START_CMD_EVT */
        /* AVDT_CCB_MSG_START_CMD_EVT */
        {AVDT_CCB_HDL_START_CMD, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* MSG_SUSPEND_CMD_EVT */
        /* AVDT_CCB_MSG_SUSPEND_CMD_EVT */
        {AVDT_CCB_HDL_SUSPEND_CMD, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* MSG_DISCOVER_RSP_EVT */
        /* AVDT_CCB_MSG_DISCOVER_RSP_EVT */
        {AVDT_CCB_CHK_CLOSE, AVDT_CCB_HDL_DISCOVER_RSP, AVDT_CCB_OPEN_ST},
        /* MSG_GETCAP_RSP_EVT */
        /* AVDT_CCB_MSG_GETCAP_RSP_EVT */
        {AVDT_CCB_CHK_CLOSE, AVDT_CCB_HDL_GETCAP_RSP, AVDT_CCB_OPEN_ST},
        /* MSG_START_RSP_EVT */
        /* AVDT_CCB_MSG_START_RSP_EVT */
        {AVDT_CCB_HDL_START_RSP, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* MSG_SUSPEND_RSP_EVT */
        /* AVDT_CCB_MSG_SUSPEND_RSP_EVT */
        {AVDT_CCB_HDL_SUSPEND_RSP, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* RCVRSP_EVT */
        /* AVDT_CCB_RCVRSP_EVT */
        {AVDT_CCB_FREE_CMD, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* SENDMSG_EVT */
        /* AVDT_CCB_SENDMSG_EVT */
        {AVDT_CCB_SND_MSG, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* RET_TOUT_EVT */
        /* AVDT_CCB_RET_TOUT_EVT */
        {AVDT_CCB_RET_CMD, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* RSP_TOUT_EVT */
        /* AVDT_CCB_RSP_TOUT_EVT */
        {AVDT_CCB_CMD_FAIL, AVDT_CCB_SND_CMD, AVDT_CCB_OPEN_ST},
        /* IDLE_TOUT_EVT */
        /* AVDT_CCB_IDLE_TOUT_EVT */
        {AVDT_CCB_CLEAR_CMDS, AVDT_CCB_CHAN_CLOSE, AVDT_CCB_CLOSING_ST},
        /* UL_OPEN_EVT */
        /* AVDT_CCB_UL_OPEN_EVT */
        {AVDT_CCB_CHK_TIMER, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* UL_CLOSE_EVT */
        /* AVDT_CCB_UL_CLOSE_EVT */
        {AVDT_CCB_CHK_CLOSE, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* LL_OPEN_EVT */
        /* AVDT_CCB_LL_OPEN_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_OPEN_ST},
        /* LL_CLOSE_EVT */
        /* AVDT_CCB_LL_CLOSE_EVT */
        {AVDT_CCB_LL_CLOSED, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* LL_CONG_EVT */
        /* AVDT_CCB_LL_CONG_EVT */
        {AVDT_CCB_CONG_STATE, AVDT_CCB_SND_MSG, AVDT_CCB_OPEN_ST}};

/* state table for closing state */
const uint8_t avdt_ccb_st_closing[][AVDT_CCB_NUM_COLS] = {
        /* Event */
        /* Action 1                    Action 2                    Next state */
        /* API_DISCOVER_REQ_EVT */
        /* AVDT_CCB_API_DISCOVER_REQ_EVT */
        {AVDT_CCB_SET_RECONN, AVDT_CCB_SND_DISCOVER_CMD, AVDT_CCB_CLOSING_ST},
        /* API_GETCAP_REQ_EVT */
        /* AVDT_CCB_API_GETCAP_REQ_EVT */
        {AVDT_CCB_SET_RECONN, AVDT_CCB_SND_GETCAP_CMD, AVDT_CCB_CLOSING_ST},
        /* API_START_REQ_EVT */
        /* AVDT_CCB_API_START_REQ_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* API_SUSPEND_REQ_EVT */
        /* AVDT_CCB_API_SUSPEND_REQ_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* API_DISCOVER_RSP_EVT */
        /* AVDT_CCB_API_DISCOVER_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* API_GETCAP_RSP_EVT */
        /* AVDT_CCB_API_GETCAP_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* API_START_RSP_EVT */
        /* AVDT_CCB_API_START_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* API_SUSPEND_RSP_EVT */
        /* AVDT_CCB_API_SUSPEND_RSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* API_CONNECT_REQ_EVT */
        /* AVDT_CCB_API_CONNECT_REQ_EVT */
        {AVDT_CCB_SET_RECONN, AVDT_CCB_SET_CONN, AVDT_CCB_CLOSING_ST},
        /* API_DISCONNECT_REQ_EVT */
        /* AVDT_CCB_API_DISCONNECT_REQ_EVT */
        {AVDT_CCB_CLR_RECONN, AVDT_CCB_SET_DISCONN, AVDT_CCB_CLOSING_ST},
        /* MSG_DISCOVER_CMD_EVT */
        /* AVDT_CCB_MSG_DISCOVER_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* MSG_GETCAP_CMD_EVT */
        /* AVDT_CCB_MSG_GETCAP_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* MSG_START_CMD_EVT */
        /* AVDT_CCB_MSG_START_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* MSG_SUSPEND_CMD_EVT */
        /* AVDT_CCB_MSG_SUSPEND_CMD_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* MSG_DISCOVER_RSP_EVT */
        /* AVDT_CCB_MSG_DISCOVER_RSP_EVT */
        {AVDT_CCB_HDL_DISCOVER_RSP, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* MSG_GETCAP_RSP_EVT */
        /* AVDT_CCB_MSG_GETCAP_RSP_EVT */
        {AVDT_CCB_HDL_GETCAP_RSP, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* MSG_START_RSP_EVT */
        /* AVDT_CCB_MSG_START_RSP_EVT */
        {AVDT_CCB_HDL_START_RSP, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* MSG_SUSPEND_RSP_EVT */
        /* AVDT_CCB_MSG_SUSPEND_RSP_EVT */
        {AVDT_CCB_HDL_SUSPEND_RSP, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* RCVRSP_EVT */
        /* AVDT_CCB_RCVRSP_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* SENDMSG_EVT */
        /* AVDT_CCB_SENDMSG_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* RET_TOUT_EVT */
        /* AVDT_CCB_RET_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* RSP_TOUT_EVT */
        /* AVDT_CCB_RSP_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* IDLE_TOUT_EVT */
        /* AVDT_CCB_IDLE_TOUT_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* UL_OPEN_EVT */
        /* AVDT_CCB_UL_OPEN_EVT */
        {AVDT_CCB_SET_RECONN, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* UL_CLOSE_EVT */
        /* AVDT_CCB_UL_CLOSE_EVT */
        {AVDT_CCB_CLR_RECONN, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* LL_OPEN_EVT */
        /* AVDT_CCB_LL_OPEN_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST},
        /* LL_CLOSE_EVT */
        /* AVDT_CCB_LL_CLOSE_EVT */
        {AVDT_CCB_CHK_RECONN, AVDT_CCB_IGNORE, AVDT_CCB_IDLE_ST},
        /* LL_CONG_EVT */
        /* AVDT_CCB_LL_CONG_EVT */
        {AVDT_CCB_IGNORE, AVDT_CCB_IGNORE, AVDT_CCB_CLOSING_ST}};

/* type for state table */
@@ -365,10 +365,8 @@ void avdt_ccb_event(AvdtpCcb* p_ccb, uint8_t event, tAVDT_CCB_EVT* p_data) {
  uint8_t action;
  int i;

#if (AVDT_DEBUG == TRUE)
  log::verbose("CCB ccb={} event={} state={} p_ccb={}", avdt_ccb_to_idx(p_ccb),
               avdt_ccb_evt_str[event], avdt_ccb_st_str[p_ccb->state], fmt::ptr(p_ccb));
#endif

  /* look up the state table for the current state */
  state_table = avdt_ccb_st_tbl[p_ccb->state];
Loading