OSDN Git Service

good riddance AV stream state machine
authorZach Johnson <zachoverflow@google.com>
Sun, 30 Aug 2020 17:14:36 +0000 (10:14 -0700)
committerZach Johnson <zachoverflow@google.com>
Sun, 30 Aug 2020 17:21:35 +0000 (10:21 -0700)
Bug: 159815595
Tag: #refactor
Test: compile & verify basic functions working
Change-Id: Ia756d0fa09529918b2f9a7638613831989a5d986

bta/av/bta_av_aact.cc
bta/av/bta_av_cfg.cc
bta/av/bta_av_int.h
bta/av/bta_av_main.cc
bta/av/bta_av_ssm.cc
bta/include/bta_av_api.h

index e0e12b2..9b3de08 100644 (file)
@@ -77,8 +77,6 @@
 
 static void bta_av_offload_codec_builder(tBTA_AV_SCB* p_scb,
                                          tBT_A2DP_OFFLOAD* p_a2dp_offload);
-static void bta_av_st_rc_timer(tBTA_AV_SCB* p_scb,
-                               UNUSED_ATTR tBTA_AV_DATA* p_data);
 
 /* state machine states */
 enum {
@@ -104,60 +102,6 @@ const tBTA_AV_CO_FUNCTS bta_av_a2dp_cos = {bta_av_co_audio_init,
                                            bta_av_co_audio_update_mtu,
                                            bta_av_co_content_protect_is_active};
 
-/* ssm action functions for audio stream */
-const tBTA_AV_SACT bta_av_a2dp_action[] = {
-    bta_av_do_disc_a2dp,    /* BTA_AV_DO_DISC  */
-    bta_av_cleanup,         /* BTA_AV_CLEANUP */
-    bta_av_free_sdb,        /* BTA_AV_FREE_SDB */
-    bta_av_config_ind,      /* BTA_AV_CONFIG_IND */
-    bta_av_disconnect_req,  /* BTA_AV_DISCONNECT_REQ */
-    bta_av_security_req,    /* BTA_AV_SECURITY_REQ */
-    bta_av_security_rsp,    /* BTA_AV_SECURITY_RSP */
-    bta_av_setconfig_rsp,   /* BTA_AV_SETCONFIG_RSP */
-    bta_av_st_rc_timer,     /* BTA_AV_ST_RC_TIMER */
-    bta_av_str_opened,      /* BTA_AV_STR_OPENED */
-    bta_av_security_ind,    /* BTA_AV_SECURITY_IND */
-    bta_av_security_cfm,    /* BTA_AV_SECURITY_CFM */
-    bta_av_do_close,        /* BTA_AV_DO_CLOSE */
-    bta_av_connect_req,     /* BTA_AV_CONNECT_REQ */
-    bta_av_sdp_failed,      /* BTA_AV_SDP_FAILED */
-    bta_av_disc_results,    /* BTA_AV_DISC_RESULTS */
-    bta_av_disc_res_as_acp, /* BTA_AV_DISC_RES_AS_ACP */
-    bta_av_open_failed,     /* BTA_AV_OPEN_FAILED */
-    bta_av_getcap_results,  /* BTA_AV_GETCAP_RESULTS */
-    bta_av_setconfig_rej,   /* BTA_AV_SETCONFIG_REJ */
-    bta_av_discover_req,    /* BTA_AV_DISCOVER_REQ */
-    bta_av_conn_failed,     /* BTA_AV_CONN_FAILED */
-    bta_av_do_start,        /* BTA_AV_DO_START */
-    bta_av_str_stopped,     /* BTA_AV_STR_STOPPED */
-    bta_av_reconfig,        /* BTA_AV_RECONFIG */
-    bta_av_data_path,       /* BTA_AV_DATA_PATH */
-    bta_av_start_ok,        /* BTA_AV_START_OK */
-    bta_av_start_failed,    /* BTA_AV_START_FAILED */
-    bta_av_str_closed,      /* BTA_AV_STR_CLOSED */
-    bta_av_clr_cong,        /* BTA_AV_CLR_CONG */
-    bta_av_suspend_cfm,     /* BTA_AV_SUSPEND_CFM */
-    bta_av_rcfg_str_ok,     /* BTA_AV_RCFG_STR_OK */
-    bta_av_rcfg_failed,     /* BTA_AV_RCFG_FAILED */
-    bta_av_rcfg_connect,    /* BTA_AV_RCFG_CONNECT */
-    bta_av_rcfg_discntd,    /* BTA_AV_RCFG_DISCNTD */
-    bta_av_suspend_cont,    /* BTA_AV_SUSPEND_CONT */
-    bta_av_rcfg_cfm,        /* BTA_AV_RCFG_CFM */
-    bta_av_rcfg_open,       /* BTA_AV_RCFG_OPEN */
-    bta_av_security_rej,    /* BTA_AV_SECURITY_REJ */
-    bta_av_open_rc,         /* BTA_AV_OPEN_RC */
-    bta_av_chk_2nd_start,   /* BTA_AV_CHK_2ND_START */
-    bta_av_save_caps,       /* BTA_AV_SAVE_CAPS */
-    bta_av_set_use_rc,      /* BTA_AV_SET_USE_RC */
-    bta_av_cco_close,       /* BTA_AV_CCO_CLOSE */
-    bta_av_switch_role,     /* BTA_AV_SWITCH_ROLE */
-    bta_av_role_res,        /* BTA_AV_ROLE_RES */
-    bta_av_delay_co,        /* BTA_AV_DELAY_CO */
-    bta_av_open_at_inc,     /* BTA_AV_OPEN_AT_INC */
-    bta_av_offload_req,     /* BTA_AV_OFFLOAD_REQ */
-    bta_av_offload_rsp,     /* BTA_AV_OFFLOAD_RSP */
-    NULL};
-
 /* these tables translate AVDT events to SSM events */
 static const uint16_t bta_av_stream_evt_ok[] = {
     BTA_AV_STR_DISC_OK_EVT,      /* AVDT_DISCOVER_CFM_EVT */
@@ -314,8 +258,7 @@ static void notify_start_failed(tBTA_AV_SCB* p_scb) {
  * Returns          void
  *
  ******************************************************************************/
-static void bta_av_st_rc_timer(tBTA_AV_SCB* p_scb,
-                               UNUSED_ATTR tBTA_AV_DATA* p_data) {
+void bta_av_st_rc_timer(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) {
   APPL_TRACE_DEBUG("%s: rc_handle:%d, use_rc: %d", __func__, p_scb->rc_handle,
                    p_scb->use_rc);
   /* for outgoing RC connection as INT/CT */
index 8583496..3052d00 100644 (file)
@@ -150,7 +150,6 @@ const tBTA_AV_CFG bta_av_cfg = {
                                  for company id */
     bta_av_meta_caps_evt_ids, /* the the metadata Get Capabilities
                                  response for event id */
-    NULL,                     /* the action function table for audio stream */
     BTA_AV_RC_CT_NAME,        /* Default AVRCP controller name */
     BTA_AV_RC_TG_NAME         /* Default AVRCP target name */
 };
@@ -176,7 +175,6 @@ const tBTA_AV_CFG bta_avk_cfg = {
                                   for company id */
     bta_avk_meta_caps_evt_ids, /* the the metadata Get Capabilities
                                   response for event id */
-    NULL,                      /* the action function table for audio stream */
     {0},                       /* Default AVRCP controller name */
     {0},                       /* Default AVRCP target name */
 };
@@ -202,7 +200,6 @@ const tBTA_AV_CFG bta_av_cfg_compatibility = {
     bta_av_meta_caps_evt_ids_avrcp13, /* the the metadata Get Capabilities
                                          response for event id, compatible
                                          with AVRCP1.3 */
-    NULL,              /* the action function table for audio stream */
     BTA_AV_RC_CT_NAME, /* Default AVRCP controller name */
     BTA_AV_RC_TG_NAME  /* Default AVRCP target name */
 };
index 792c172..f8ca2e1 100644 (file)
@@ -456,7 +456,6 @@ typedef union {
 // TODO: This should be renamed and changed to a proper class
 struct tBTA_AV_SCB final {
  public:
-  const tBTA_AV_ACT* p_act_tbl; /* the action table for stream state machine */
   const tBTA_AV_CO_FUNCTS* p_cos; /* the associated callout functions */
   bool sdp_discovery_started; /* variable to determine whether SDP is started */
   tBTA_AV_SEP seps[BTAV_A2DP_CODEC_INDEX_MAX];
@@ -657,7 +656,6 @@ extern const tBTA_AV_CFG bta_av_cfg_compatibility;
 extern uint16_t* p_bta_av_rc_id;
 extern uint16_t* p_bta_av_rc_id_ac;
 
-extern const tBTA_AV_SACT bta_av_a2dp_action[];
 extern const tBTA_AV_CO_FUNCTS bta_av_a2dp_cos;
 extern void bta_av_sink_data_cback(uint8_t handle, BT_HDR* p_pkt,
                                    uint32_t time_stamp, uint8_t m_pt);
@@ -781,5 +779,6 @@ extern void bta_av_open_at_inc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data);
 extern void bta_av_offload_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data);
 extern void bta_av_offload_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data);
 extern void bta_av_vendor_offload_stop(void);
+extern void bta_av_st_rc_timer(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data);
 
 #endif /* BTA_AV_INT_H */
index e7d0052..87f1587 100644 (file)
@@ -528,7 +528,6 @@ static void bta_av_api_register(tBTA_AV_DATA* p_data) {
     avdtp_stream_config.p_avdt_ctrl_cback = &bta_av_proc_stream_evt;
 
     /* set up the audio stream control block */
-    p_scb->p_act_tbl = (const tBTA_AV_ACT*)bta_av_a2dp_action;
     p_scb->p_cos = &bta_av_a2dp_cos;
     p_scb->media_type = AVDT_MEDIA_TYPE_AUDIO;
     avdtp_stream_config.cfg.psc_mask = AVDT_PSC_TRANS;
index c9fc37e..08a2740 100644 (file)
@@ -41,432 +41,378 @@ enum {
   BTA_AV_CLOSING_SST
 };
 
-/* state machine action enumeration list */
-enum {
-  BTA_AV_DO_DISC,
-  BTA_AV_CLEANUP,
-  BTA_AV_FREE_SDB,
-  BTA_AV_CONFIG_IND,
-  BTA_AV_DISCONNECT_REQ,
-  BTA_AV_SECURITY_REQ,
-  BTA_AV_SECURITY_RSP,
-  BTA_AV_SETCONFIG_RSP,
-  BTA_AV_ST_RC_TIMER,
-  BTA_AV_STR_OPENED,
-  BTA_AV_SECURITY_IND,
-  BTA_AV_SECURITY_CFM,
-  BTA_AV_DO_CLOSE,
-  BTA_AV_CONNECT_REQ,
-  BTA_AV_SDP_FAILED,
-  BTA_AV_DISC_RESULTS,
-  BTA_AV_DISC_RES_AS_ACP,
-  BTA_AV_OPEN_FAILED,
-  BTA_AV_GETCAP_RESULTS,
-  BTA_AV_SETCONFIG_REJ,
-  BTA_AV_DISCOVER_REQ,
-  BTA_AV_CONN_FAILED,
-  BTA_AV_DO_START,
-  BTA_AV_STR_STOPPED,
-  BTA_AV_RECONFIG,
-  BTA_AV_DATA_PATH,
-  BTA_AV_START_OK,
-  BTA_AV_START_FAILED,
-  BTA_AV_STR_CLOSED,
-  BTA_AV_CLR_CONG,
-  BTA_AV_SUSPEND_CFM,
-  BTA_AV_RCFG_STR_OK,
-  BTA_AV_RCFG_FAILED,
-  BTA_AV_RCFG_CONNECT,
-  BTA_AV_RCFG_DISCNTD,
-  BTA_AV_SUSPEND_CONT,
-  BTA_AV_RCFG_CFM,
-  BTA_AV_RCFG_OPEN,
-  BTA_AV_SECURITY_REJ,
-  BTA_AV_OPEN_RC,
-  BTA_AV_CHK_2ND_START,
-  BTA_AV_SAVE_CAPS,
-  BTA_AV_SET_USE_RC,
-  BTA_AV_CCO_CLOSE,
-  BTA_AV_SWITCH_ROLE,
-  BTA_AV_ROLE_RES,
-  BTA_AV_DELAY_CO,
-  BTA_AV_OPEN_AT_INC,
-  BTA_AV_OFFLOAD_REQ,
-  BTA_AV_OFFLOAD_RSP,
-  BTA_AV_NUM_SACTIONS
-};
-
-#define BTA_AV_SIGNORE BTA_AV_NUM_SACTIONS
-
-/* state table information */
-/* #define BTA_AV_SACTION_COL           0       position of actions */
-#define BTA_AV_SACTIONS 2    /* number of actions */
-#define BTA_AV_SNEXT_STATE 2 /* position of next state */
-#define BTA_AV_NUM_COLS 3    /* number of columns in state tables */
-
-/* state table for init state */
-static const uint8_t bta_av_sst_init[][BTA_AV_NUM_COLS] = {
-    /* Event                     Action 1               Action 2 Next state */
-    /* API_OPEN_EVT */ {BTA_AV_DO_DISC, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_CLOSE_EVT */ {BTA_AV_CLEANUP, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* CI_SETCONFIG_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_CONFIG_IND_EVT */
-    {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_SECURITY_IND_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_SECURITY_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_RECONFIG_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* AVDT_DISCONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* API_OFFLOAD_START_EVT */
-    {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* API_OFFLOAD_START_RSP_EVT */
-    {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_INIT_SST}};
-
-/* state table for incoming state */
-static const uint8_t bta_av_sst_incoming[][BTA_AV_NUM_COLS] = {
-    /* Event                     Action 1               Action 2 Next state */
-    /* API_OPEN_EVT */ {BTA_AV_OPEN_AT_INC, BTA_AV_SIGNORE,
-                        BTA_AV_INCOMING_SST},
-    /* API_CLOSE_EVT */
-    {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ, BTA_AV_CLOSING_SST},
-    /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* API_RECONFIG_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* API_PROTECT_REQ_EVT */
-    {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* API_PROTECT_RSP_EVT */
-    {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* API_RC_OPEN_EVT  */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* SRC_DATA_READY_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* CI_SETCONFIG_OK_EVT */
-    {BTA_AV_SETCONFIG_RSP, BTA_AV_ST_RC_TIMER, BTA_AV_INCOMING_SST},
-    /* CI_SETCONFIG_FAIL_EVT */
-    {BTA_AV_SETCONFIG_REJ, BTA_AV_CLEANUP, BTA_AV_INIT_SST},
-    /* SDP_DISC_OK_EVT */
-    {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* SDP_DISC_FAIL_EVT */
-    {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_DISC_OK_EVT */
-    {BTA_AV_DISC_RES_AS_ACP, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_DISC_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_GETCAP_OK_EVT */
-    {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_GETCAP_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_OPEN_OK_EVT */ {BTA_AV_STR_OPENED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_OPEN_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_START_OK_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_START_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_CLEANUP, BTA_AV_INIT_SST},
-    /* STR_CONFIG_IND_EVT */
-    {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_SECURITY_IND_EVT */
-    {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_SECURITY_CFM_EVT */
-    {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_WRITE_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_SUSPEND_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_RECONFIG_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* AVDT_CONNECT_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* AVDT_DISCONNECT_EVT */
-    {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ, BTA_AV_CLOSING_SST},
-    /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* AVDT_DELAY_RPT_EVT */
-    {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* API_OFFLOAD_START_EVT */
-    {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* API_OFFLOAD_START_RSP_EVT */
-    {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}};
-
-/* state table for opening state */
-static const uint8_t bta_av_sst_opening[][BTA_AV_NUM_COLS] = {
-    /* Event                     Action 1               Action 2 Next state */
-    /* API_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_PROTECT_REQ_EVT */
-    {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_PROTECT_RSP_EVT */
-    {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* SRC_DATA_READY_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* CI_SETCONFIG_OK_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* CI_SETCONFIG_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* SDP_DISC_OK_EVT */
-    {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* SDP_DISC_FAIL_EVT */
-    {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_DISC_OK_EVT */
-    {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_DISC_FAIL_EVT */
-    {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_GETCAP_OK_EVT */
-    {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_GETCAP_FAIL_EVT */
-    {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_OPEN_OK_EVT */
-    {BTA_AV_ST_RC_TIMER, BTA_AV_STR_OPENED, BTA_AV_OPEN_SST},
-    /* STR_OPEN_FAIL_EVT */
-    {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_START_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_CONFIG_IND_EVT */
-    {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
-    /* STR_SECURITY_IND_EVT */
-    {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_SECURITY_CFM_EVT */
-    {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_WRITE_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_SUSPEND_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* STR_RECONFIG_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* AVRC_TIMER_EVT */
-    {BTA_AV_SWITCH_ROLE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* AVDT_CONNECT_EVT */
-    {BTA_AV_DISCOVER_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* AVDT_DISCONNECT_EVT */
-    {BTA_AV_CONN_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* AVDT_DELAY_RPT_EVT */
-    {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_OFFLOAD_START_EVT */
-    {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
-    /* API_OFFLOAD_START_RSP_EVT */
-    {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}};
-
-/* state table for open state */
-static const uint8_t bta_av_sst_open[][BTA_AV_NUM_COLS] = {
-    /* Event                     Action 1               Action 2 Next state */
-    /* API_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* API_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AP_START_EVT */ {BTA_AV_DO_START, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* AP_STOP_EVT */ {BTA_AV_STR_STOPPED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* API_RECONFIG_EVT */ {BTA_AV_RECONFIG, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_PROTECT_REQ_EVT */
-    {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* API_PROTECT_RSP_EVT */
-    {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* API_RC_OPEN_EVT  */ {BTA_AV_SET_USE_RC, BTA_AV_OPEN_RC, BTA_AV_OPEN_SST},
-    /* SRC_DATA_READY_EVT */
-    {BTA_AV_DATA_PATH, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* CI_SETCONFIG_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_START_OK_EVT */ {BTA_AV_START_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_START_FAIL_EVT */
-    {BTA_AV_START_FAILED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_CLOSE_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_CONFIG_IND_EVT */
-    {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_SECURITY_IND_EVT */
-    {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_SECURITY_CFM_EVT */
-    {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_WRITE_CFM_EVT */
-    {BTA_AV_CLR_CONG, BTA_AV_DATA_PATH, BTA_AV_OPEN_SST},
-    /* STR_SUSPEND_CFM_EVT */
-    {BTA_AV_SUSPEND_CFM, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_RECONFIG_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* AVRC_TIMER_EVT */
-    {BTA_AV_OPEN_RC, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* AVDT_DISCONNECT_EVT */
-    {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* API_OFFLOAD_START_EVT */
-    {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* API_OFFLOAD_START_RSP_EVT */
-    {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}};
-
-/* state table for reconfig state */
-static const uint8_t bta_av_sst_rcfg[][BTA_AV_NUM_COLS] = {
-    /* Event                     Action 1               Action 2 Next state */
-    /* API_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_CLOSE_EVT */
-    {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_RECONFIG_EVT */ {BTA_AV_RECONFIG, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* CI_SETCONFIG_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_DISC_OK_EVT */
-    {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_DISC_FAIL_EVT */
-    {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_GETCAP_OK_EVT */
-    {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_GETCAP_FAIL_EVT */
-    {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_OPEN_OK_EVT */ {BTA_AV_RCFG_STR_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
-    /* STR_OPEN_FAIL_EVT */
-    {BTA_AV_RCFG_FAILED, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_CLOSE_EVT */ {BTA_AV_RCFG_CONNECT, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_CONFIG_IND_EVT */
-    {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_SECURITY_IND_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_SECURITY_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* STR_SUSPEND_CFM_EVT */
-    {BTA_AV_SUSPEND_CFM, BTA_AV_SUSPEND_CONT, BTA_AV_RCFG_SST},
-    /* STR_RECONFIG_CFM_EVT */
-    {BTA_AV_RCFG_CFM, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* AVDT_CONNECT_EVT */ {BTA_AV_RCFG_OPEN, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* AVDT_DISCONNECT_EVT */
-    {BTA_AV_RCFG_DISCNTD, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_OFFLOAD_START_EVT */
-    {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
-    /* API_OFFLOAD_START_RSP_EVT */
-    {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}};
-
-/* state table for closing state */
-static const uint8_t bta_av_sst_closing[][BTA_AV_NUM_COLS] = {
-    /* Event                     Action 1               Action 2 Next state */
-    /* API_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* API_CLOSE_EVT */
-    {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* API_PROTECT_REQ_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* API_PROTECT_RSP_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* SRC_DATA_READY_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* CI_SETCONFIG_OK_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* CI_SETCONFIG_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* SDP_DISC_OK_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* SDP_DISC_FAIL_EVT */
-    {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_DISC_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_GETCAP_OK_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_GETCAP_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_OPEN_OK_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_OPEN_FAIL_EVT */
-    {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_START_FAIL_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_CLOSE_EVT */
-    {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_CONFIG_IND_EVT */
-    {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_SECURITY_IND_EVT */
-    {BTA_AV_SECURITY_REJ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_SECURITY_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_WRITE_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_SUSPEND_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* STR_RECONFIG_CFM_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AVDT_DISCONNECT_EVT */
-    {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
-    /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* AVDT_DELAY_RPT_EVT */
-    {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* API_OFFLOAD_START_EVT */
-    {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
-    /* API_OFFLOAD_START_RSP_EVT */
-    {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}};
-
-/* type for state table */
-typedef const uint8_t (*tBTA_AV_SST_TBL)[BTA_AV_NUM_COLS];
-
-/* state table */
-static const tBTA_AV_SST_TBL bta_av_sst_tbl[] = {
-    bta_av_sst_init, bta_av_sst_incoming, bta_av_sst_opening,
-    bta_av_sst_open, bta_av_sst_rcfg,     bta_av_sst_closing};
-
+static void bta_av_better_stream_state_machine(tBTA_AV_SCB* p_scb,
+                                               uint16_t event,
+                                               tBTA_AV_DATA* p_data) {
+  switch (p_scb->state) {
+    case BTA_AV_INIT_SST:
+      switch (event) {
+        case BTA_AV_API_OPEN_EVT:
+          p_scb->state = BTA_AV_OPENING_SST;
+          bta_av_do_disc_a2dp(p_scb, p_data);
+          break;
+        case BTA_AV_API_CLOSE_EVT:
+          bta_av_cleanup(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_OK_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_FAIL_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CONFIG_IND_EVT:
+          p_scb->state = BTA_AV_INCOMING_SST;
+          bta_av_config_ind(p_scb, p_data);
+          break;
+        case BTA_AV_ACP_CONNECT_EVT:
+          p_scb->state = BTA_AV_INCOMING_SST;
+          break;
+        case BTA_AV_API_OFFLOAD_START_EVT:
+          bta_av_offload_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
+          bta_av_offload_rsp(p_scb, p_data);
+          break;
+      }
+      break;
+    case BTA_AV_INCOMING_SST:
+      switch (event) {
+        case BTA_AV_API_OPEN_EVT:
+          bta_av_open_at_inc(p_scb, p_data);
+          break;
+        case BTA_AV_API_CLOSE_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_cco_close(p_scb, p_data);
+          bta_av_disconnect_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_PROTECT_REQ_EVT:
+          bta_av_security_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_PROTECT_RSP_EVT:
+          bta_av_security_rsp(p_scb, p_data);
+          break;
+        case BTA_AV_CI_SETCONFIG_OK_EVT:
+          bta_av_setconfig_rsp(p_scb, p_data);
+          bta_av_st_rc_timer(p_scb, p_data);
+          break;
+        case BTA_AV_CI_SETCONFIG_FAIL_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_setconfig_rej(p_scb, p_data);
+          bta_av_cleanup(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_OK_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_FAIL_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_STR_DISC_OK_EVT:
+          bta_av_disc_res_as_acp(p_scb, p_data);
+          break;
+        case BTA_AV_STR_GETCAP_OK_EVT:
+          bta_av_save_caps(p_scb, p_data);
+          break;
+        case BTA_AV_STR_OPEN_OK_EVT:
+          p_scb->state = BTA_AV_OPEN_SST;
+          bta_av_str_opened(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CLOSE_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_cco_close(p_scb, p_data);
+          bta_av_cleanup(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CONFIG_IND_EVT:
+          bta_av_config_ind(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SECURITY_IND_EVT:
+          bta_av_security_ind(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SECURITY_CFM_EVT:
+          bta_av_security_cfm(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DISCONNECT_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_cco_close(p_scb, p_data);
+          bta_av_disconnect_req(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DELAY_RPT_EVT:
+          bta_av_delay_co(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_EVT:
+          bta_av_offload_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
+          bta_av_offload_rsp(p_scb, p_data);
+          break;
+      }
+      break;
+    case BTA_AV_OPENING_SST:
+      switch (event) {
+        case BTA_AV_API_CLOSE_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_do_close(p_scb, p_data);
+          break;
+        case BTA_AV_API_PROTECT_REQ_EVT:
+          bta_av_security_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_PROTECT_RSP_EVT:
+          bta_av_security_rsp(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_OK_EVT:
+          bta_av_connect_req(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_FAIL_EVT:
+          bta_av_connect_req(p_scb, p_data);
+          break;
+        case BTA_AV_STR_DISC_OK_EVT:
+          bta_av_disc_results(p_scb, p_data);
+          break;
+        case BTA_AV_STR_DISC_FAIL_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_open_failed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_GETCAP_OK_EVT:
+          bta_av_getcap_results(p_scb, p_data);
+          break;
+        case BTA_AV_STR_GETCAP_FAIL_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_open_failed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_OPEN_OK_EVT:
+          p_scb->state = BTA_AV_OPEN_SST;
+          bta_av_st_rc_timer(p_scb, p_data);
+          bta_av_str_opened(p_scb, p_data);
+          break;
+        case BTA_AV_STR_OPEN_FAIL_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_open_failed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CONFIG_IND_EVT:
+          p_scb->state = BTA_AV_INCOMING_SST;
+          bta_av_config_ind(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SECURITY_IND_EVT:
+          bta_av_security_ind(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SECURITY_CFM_EVT:
+          bta_av_security_cfm(p_scb, p_data);
+          break;
+        case BTA_AV_AVRC_TIMER_EVT:
+          bta_av_switch_role(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_CONNECT_EVT:
+          bta_av_discover_req(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DISCONNECT_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_conn_failed(p_scb, p_data);
+          break;
+        case BTA_AV_ROLE_CHANGE_EVT:
+          bta_av_role_res(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DELAY_RPT_EVT:
+          bta_av_delay_co(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_EVT:
+          bta_av_offload_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
+          bta_av_offload_rsp(p_scb, p_data);
+          break;
+      }
+      break;
+    case BTA_AV_OPEN_SST:
+      switch (event) {
+        case BTA_AV_API_CLOSE_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_do_close(p_scb, p_data);
+          break;
+        case BTA_AV_AP_START_EVT:
+          bta_av_do_start(p_scb, p_data);
+          break;
+        case BTA_AV_AP_STOP_EVT:
+          bta_av_str_stopped(p_scb, p_data);
+          break;
+        case BTA_AV_API_RECONFIG_EVT:
+          p_scb->state = BTA_AV_RCFG_SST;
+          bta_av_reconfig(p_scb, p_data);
+          break;
+        case BTA_AV_API_PROTECT_REQ_EVT:
+          bta_av_security_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_PROTECT_RSP_EVT:
+          bta_av_security_rsp(p_scb, p_data);
+          break;
+        case BTA_AV_API_RC_OPEN_EVT:
+          bta_av_set_use_rc(p_scb, p_data);
+          break;
+        case BTA_AV_SRC_DATA_READY_EVT:
+          bta_av_data_path(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_OK_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_FAIL_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_STR_GETCAP_OK_EVT:
+          bta_av_save_caps(p_scb, p_data);
+          break;
+        case BTA_AV_STR_START_OK_EVT:
+          bta_av_start_ok(p_scb, p_data);
+          break;
+        case BTA_AV_STR_START_FAIL_EVT:
+          bta_av_start_failed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CLOSE_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_str_closed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CONFIG_IND_EVT:
+          bta_av_setconfig_rej(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SECURITY_IND_EVT:
+          bta_av_security_ind(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SECURITY_CFM_EVT:
+          bta_av_security_cfm(p_scb, p_data);
+          break;
+        case BTA_AV_STR_WRITE_CFM_EVT:
+          bta_av_clr_cong(p_scb, p_data);
+          bta_av_data_path(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SUSPEND_CFM_EVT:
+          bta_av_suspend_cfm(p_scb, p_data);
+          break;
+        case BTA_AV_AVRC_TIMER_EVT:
+          bta_av_open_rc(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DISCONNECT_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_str_closed(p_scb, p_data);
+          break;
+        case BTA_AV_ROLE_CHANGE_EVT:
+          bta_av_role_res(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DELAY_RPT_EVT:
+          bta_av_delay_co(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_EVT:
+          bta_av_offload_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
+          bta_av_offload_rsp(p_scb, p_data);
+          break;
+      }
+      break;
+    case BTA_AV_RCFG_SST:
+      switch (event) {
+        case BTA_AV_API_CLOSE_EVT:
+          p_scb->state = BTA_AV_CLOSING_SST;
+          bta_av_disconnect_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_RECONFIG_EVT:
+          bta_av_reconfig(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_OK_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_FAIL_EVT:
+          bta_av_free_sdb(p_scb, p_data);
+          break;
+        case BTA_AV_STR_DISC_OK_EVT:
+          bta_av_disc_results(p_scb, p_data);
+          break;
+        case BTA_AV_STR_DISC_FAIL_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_str_closed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_GETCAP_OK_EVT:
+          bta_av_getcap_results(p_scb, p_data);
+          break;
+        case BTA_AV_STR_GETCAP_FAIL_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_str_closed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_OPEN_OK_EVT:
+          p_scb->state = BTA_AV_OPEN_SST;
+          bta_av_rcfg_str_ok(p_scb, p_data);
+          break;
+        case BTA_AV_STR_OPEN_FAIL_EVT:
+          bta_av_rcfg_failed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CLOSE_EVT:
+          bta_av_rcfg_connect(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CONFIG_IND_EVT:
+          bta_av_setconfig_rej(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SUSPEND_CFM_EVT:
+          bta_av_suspend_cfm(p_scb, p_data);
+          bta_av_suspend_cont(p_scb, p_data);
+          break;
+        case BTA_AV_STR_RECONFIG_CFM_EVT:
+          bta_av_rcfg_cfm(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_CONNECT_EVT:
+          bta_av_rcfg_open(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DISCONNECT_EVT:
+          bta_av_rcfg_discntd(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DELAY_RPT_EVT:
+          bta_av_delay_co(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_EVT:
+          bta_av_offload_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
+          bta_av_offload_rsp(p_scb, p_data);
+          break;
+      }
+      break;
+    case BTA_AV_CLOSING_SST:
+      switch (event) {
+        case BTA_AV_API_CLOSE_EVT:
+          bta_av_disconnect_req(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_OK_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_sdp_failed(p_scb, p_data);
+          break;
+        case BTA_AV_SDP_DISC_FAIL_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_sdp_failed(p_scb, p_data);
+          break;
+        case BTA_AV_STR_OPEN_OK_EVT:
+          bta_av_do_close(p_scb, p_data);
+          break;
+        case BTA_AV_STR_OPEN_FAIL_EVT:
+          bta_av_disconnect_req(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CLOSE_EVT:
+          bta_av_disconnect_req(p_scb, p_data);
+          break;
+        case BTA_AV_STR_CONFIG_IND_EVT:
+          bta_av_setconfig_rej(p_scb, p_data);
+          break;
+        case BTA_AV_STR_SECURITY_IND_EVT:
+          bta_av_security_rej(p_scb, p_data);
+          break;
+        case BTA_AV_AVDT_DISCONNECT_EVT:
+          p_scb->state = BTA_AV_INIT_SST;
+          bta_av_str_closed(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_EVT:
+          bta_av_offload_req(p_scb, p_data);
+          break;
+        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
+          bta_av_offload_rsp(p_scb, p_data);
+          break;
+      }
+      break;
+  }
+}
 
 /*******************************************************************************
  *
@@ -486,41 +432,7 @@ void bta_av_ssm_execute(tBTA_AV_SCB* p_scb, uint16_t event,
     return;
   }
 
-  /* look up the state table for the current state */
-  tBTA_AV_SST_TBL state_table = bta_av_sst_tbl[p_scb->state];
-
-  /* set next state */
-  auto new_state =
-      state_table[event - BTA_AV_FIRST_SSM_EVT][BTA_AV_SNEXT_STATE];
-  if (p_scb->state != new_state) {
-    APPL_TRACE_WARNING(
-        "%s: peer %s AV event(0x%x)=0x%x(%s) state=%d(%s) -> %d(%s) p_scb=%p",
-        __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, event,
-        bta_av_evt_code(event), p_scb->state, bta_av_sst_code(p_scb->state),
-        new_state, bta_av_sst_code(new_state), p_scb);
-  } else {
-    APPL_TRACE_VERBOSE(
-        "%s: peer %s AV event(0x%x)=0x%x(%s) state=%d(%s) p_scb=%p", __func__,
-        p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, event,
-        bta_av_evt_code(event), p_scb->state, bta_av_sst_code(p_scb->state),
-        p_scb);
-  }
-  event -= BTA_AV_FIRST_SSM_EVT;
-  p_scb->state = state_table[event][BTA_AV_SNEXT_STATE];
-
-  APPL_TRACE_VERBOSE("%s: peer %s AV next state=%d(%s) p_scb=%p(0x%x)",
-                     __func__, p_scb->PeerAddress().ToString().c_str(),
-                     p_scb->state, bta_av_sst_code(p_scb->state), p_scb,
-                     p_scb->hndl);
-
-  /* execute action functions */
-  for (int i = 0; i < BTA_AV_SACTIONS; i++) {
-    uint8_t action = state_table[event][i];
-    if (action != BTA_AV_SIGNORE) {
-      (*p_scb->p_act_tbl[action])(p_scb, p_data);
-    } else
-      break;
-  }
+  bta_av_better_stream_state_machine(p_scb, event, p_data);
 }
 
 /*******************************************************************************
index 4fbd72f..8b77d38 100644 (file)
@@ -394,7 +394,6 @@ typedef struct {
       p_meta_co_ids; /* the metadata Get Capabilities response for company id */
   const uint8_t* p_meta_evt_ids; /* the the metadata Get Capabilities response
                                     for event id */
-  const tBTA_AV_ACT* p_act_tbl;  /* action function table for audio stream */
   char avrc_controller_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP controller
                                                       name */
   char avrc_target_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP target name*/