Home | History | Annotate | Download | only in av
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2004-2012 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 /******************************************************************************
     20  *
     21  *  This is the stream state machine for the BTA advanced audio/video.
     22  *
     23  ******************************************************************************/
     24 #include <string.h>
     25 
     26 #include "bt_target.h"
     27 #include "bta_av_co.h"
     28 #include "bta_av_int.h"
     29 
     30 /*****************************************************************************
     31  * Constants and types
     32  ****************************************************************************/
     33 
     34 /* state machine states */
     35 enum {
     36   BTA_AV_INIT_SST,
     37   BTA_AV_INCOMING_SST,
     38   BTA_AV_OPENING_SST,
     39   BTA_AV_OPEN_SST,
     40   BTA_AV_RCFG_SST,
     41   BTA_AV_CLOSING_SST
     42 };
     43 
     44 /* state machine action enumeration list */
     45 enum {
     46   BTA_AV_DO_DISC,
     47   BTA_AV_CLEANUP,
     48   BTA_AV_FREE_SDB,
     49   BTA_AV_CONFIG_IND,
     50   BTA_AV_DISCONNECT_REQ,
     51   BTA_AV_SECURITY_REQ,
     52   BTA_AV_SECURITY_RSP,
     53   BTA_AV_SETCONFIG_RSP,
     54   BTA_AV_ST_RC_TIMER,
     55   BTA_AV_STR_OPENED,
     56   BTA_AV_SECURITY_IND,
     57   BTA_AV_SECURITY_CFM,
     58   BTA_AV_DO_CLOSE,
     59   BTA_AV_CONNECT_REQ,
     60   BTA_AV_SDP_FAILED,
     61   BTA_AV_DISC_RESULTS,
     62   BTA_AV_DISC_RES_AS_ACP,
     63   BTA_AV_OPEN_FAILED,
     64   BTA_AV_GETCAP_RESULTS,
     65   BTA_AV_SETCONFIG_REJ,
     66   BTA_AV_DISCOVER_REQ,
     67   BTA_AV_CONN_FAILED,
     68   BTA_AV_DO_START,
     69   BTA_AV_STR_STOPPED,
     70   BTA_AV_RECONFIG,
     71   BTA_AV_DATA_PATH,
     72   BTA_AV_START_OK,
     73   BTA_AV_START_FAILED,
     74   BTA_AV_STR_CLOSED,
     75   BTA_AV_CLR_CONG,
     76   BTA_AV_SUSPEND_CFM,
     77   BTA_AV_RCFG_STR_OK,
     78   BTA_AV_RCFG_FAILED,
     79   BTA_AV_RCFG_CONNECT,
     80   BTA_AV_RCFG_DISCNTD,
     81   BTA_AV_SUSPEND_CONT,
     82   BTA_AV_RCFG_CFM,
     83   BTA_AV_RCFG_OPEN,
     84   BTA_AV_SECURITY_REJ,
     85   BTA_AV_OPEN_RC,
     86   BTA_AV_CHK_2ND_START,
     87   BTA_AV_SAVE_CAPS,
     88   BTA_AV_SET_USE_RC,
     89   BTA_AV_CCO_CLOSE,
     90   BTA_AV_SWITCH_ROLE,
     91   BTA_AV_ROLE_RES,
     92   BTA_AV_DELAY_CO,
     93   BTA_AV_OPEN_AT_INC,
     94   BTA_AV_OFFLOAD_REQ,
     95   BTA_AV_OFFLOAD_RSP,
     96   BTA_AV_NUM_SACTIONS
     97 };
     98 
     99 #define BTA_AV_SIGNORE BTA_AV_NUM_SACTIONS
    100 
    101 /* state table information */
    102 /* #define BTA_AV_SACTION_COL           0       position of actions */
    103 #define BTA_AV_SACTIONS 2    /* number of actions */
    104 #define BTA_AV_SNEXT_STATE 2 /* position of next state */
    105 #define BTA_AV_NUM_COLS 3    /* number of columns in state tables */
    106 
    107 /* state table for init state */
    108 static const uint8_t bta_av_sst_init[][BTA_AV_NUM_COLS] = {
    109     /* Event                     Action 1               Action 2 Next state */
    110     /* AP_OPEN_EVT */ {BTA_AV_DO_DISC, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    111     /* AP_CLOSE_EVT */ {BTA_AV_CLEANUP, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    112     /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    113     /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    114     /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    115     /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    116     /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    117     /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    118     /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    119     /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    120     /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    121                                  BTA_AV_INIT_SST},
    122     /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    123     /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    124     /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    125     /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    126     /* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    127     /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    128     /* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    129     /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    130     /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    131     /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    132     /* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    133     /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE,
    134                               BTA_AV_INIT_SST},
    135     /* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    136                                 BTA_AV_INIT_SST},
    137     /* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    138                                 BTA_AV_INIT_SST},
    139     /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    140     /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    141     /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    142                                 BTA_AV_INIT_SST},
    143     /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    144     /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    145     /* AVDT_DISCONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    146     /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    147     /* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    148     /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
    149     /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE,
    150                                  BTA_AV_INIT_SST},
    151     /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE,
    152                                      BTA_AV_INIT_SST}};
    153 
    154 /* state table for incoming state */
    155 static const uint8_t bta_av_sst_incoming[][BTA_AV_NUM_COLS] = {
    156     /* Event                     Action 1               Action 2 Next state */
    157     /* AP_OPEN_EVT */ {BTA_AV_OPEN_AT_INC, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
    158     /* AP_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ,
    159                         BTA_AV_CLOSING_SST},
    160     /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
    161     /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
    162     /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    163                             BTA_AV_INCOMING_SST},
    164     /* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE,
    165                                BTA_AV_INCOMING_SST},
    166     /* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE,
    167                                BTA_AV_INCOMING_SST},
    168     /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    169                             BTA_AV_INCOMING_SST},
    170     /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    171                               BTA_AV_INCOMING_SST},
    172     /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SETCONFIG_RSP, BTA_AV_ST_RC_TIMER,
    173                                BTA_AV_INCOMING_SST},
    174     /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_CLEANUP,
    175                                  BTA_AV_INIT_SST},
    176     /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE,
    177                            BTA_AV_INCOMING_SST},
    178     /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE,
    179                              BTA_AV_INCOMING_SST},
    180     /* STR_DISC_OK_EVT */ {BTA_AV_DISC_RES_AS_ACP, BTA_AV_SIGNORE,
    181                            BTA_AV_INCOMING_SST},
    182     /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    183                              BTA_AV_INCOMING_SST},
    184     /* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE,
    185                              BTA_AV_INCOMING_SST},
    186     /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    187                                BTA_AV_INCOMING_SST},
    188     /* STR_OPEN_OK_EVT */ {BTA_AV_STR_OPENED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    189     /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    190                              BTA_AV_INCOMING_SST},
    191     /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    192                             BTA_AV_INCOMING_SST},
    193     /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    194                               BTA_AV_INCOMING_SST},
    195     /* STR_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_CLEANUP, BTA_AV_INIT_SST},
    196     /* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE,
    197                               BTA_AV_INCOMING_SST},
    198     /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE,
    199                                 BTA_AV_INCOMING_SST},
    200     /* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE,
    201                                 BTA_AV_INCOMING_SST},
    202     /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    203                              BTA_AV_INCOMING_SST},
    204     /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    205                                BTA_AV_INCOMING_SST},
    206     /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    207                                 BTA_AV_INCOMING_SST},
    208     /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
    209     /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    210                             BTA_AV_INCOMING_SST},
    211     /* AVDT_DISCONNECT_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ,
    212                                BTA_AV_CLOSING_SST},
    213     /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
    214     /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE,
    215                               BTA_AV_INCOMING_SST},
    216     /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST},
    217     /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE,
    218                                  BTA_AV_INCOMING_SST},
    219     /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE,
    220                                      BTA_AV_INCOMING_SST}};
    221 
    222 /* state table for opening state */
    223 static const uint8_t bta_av_sst_opening[][BTA_AV_NUM_COLS] = {
    224     /* Event                     Action 1               Action 2 Next state */
    225     /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    226     /* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    227     /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    228     /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    229     /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    230     /* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE,
    231                                BTA_AV_OPENING_SST},
    232     /* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE,
    233                                BTA_AV_OPENING_SST},
    234     /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    235     /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    236                               BTA_AV_OPENING_SST},
    237     /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    238                                BTA_AV_OPENING_SST},
    239     /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    240                                  BTA_AV_OPENING_SST},
    241     /* SDP_DISC_OK_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE,
    242                            BTA_AV_OPENING_SST},
    243     /* SDP_DISC_FAIL_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE,
    244                              BTA_AV_OPENING_SST},
    245     /* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE,
    246                            BTA_AV_OPENING_SST},
    247     /* STR_DISC_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE,
    248                              BTA_AV_CLOSING_SST},
    249     /* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE,
    250                              BTA_AV_OPENING_SST},
    251     /* STR_GETCAP_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE,
    252                                BTA_AV_CLOSING_SST},
    253     /* STR_OPEN_OK_EVT */ {BTA_AV_ST_RC_TIMER, BTA_AV_STR_OPENED,
    254                            BTA_AV_OPEN_SST},
    255     /* STR_OPEN_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE,
    256                              BTA_AV_CLOSING_SST},
    257     /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    258     /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    259                               BTA_AV_OPENING_SST},
    260     /* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    261     /* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE,
    262                               BTA_AV_INCOMING_SST},
    263     /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE,
    264                                 BTA_AV_OPENING_SST},
    265     /* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE,
    266                                 BTA_AV_OPENING_SST},
    267     /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    268                              BTA_AV_OPENING_SST},
    269     /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    270                                BTA_AV_OPENING_SST},
    271     /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    272                                 BTA_AV_OPENING_SST},
    273     /* AVRC_TIMER_EVT */ {BTA_AV_SWITCH_ROLE, BTA_AV_SIGNORE,
    274                           BTA_AV_OPENING_SST},
    275     /* AVDT_CONNECT_EVT */ {BTA_AV_DISCOVER_REQ, BTA_AV_SIGNORE,
    276                             BTA_AV_OPENING_SST},
    277     /* AVDT_DISCONNECT_EVT */ {BTA_AV_CONN_FAILED, BTA_AV_SIGNORE,
    278                                BTA_AV_INIT_SST},
    279     /* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    280     /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE,
    281                               BTA_AV_OPENING_SST},
    282     /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST},
    283     /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE,
    284                                  BTA_AV_OPENING_SST},
    285     /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE,
    286                                      BTA_AV_OPENING_SST}};
    287 
    288 /* state table for open state */
    289 static const uint8_t bta_av_sst_open[][BTA_AV_NUM_COLS] = {
    290     /* Event                     Action 1               Action 2 Next state */
    291     /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    292     /* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    293     /* AP_START_EVT */ {BTA_AV_DO_START, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    294     /* AP_STOP_EVT */ {BTA_AV_STR_STOPPED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    295     /* API_RECONFIG_EVT */ {BTA_AV_RECONFIG, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    296     /* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE,
    297                                BTA_AV_OPEN_SST},
    298     /* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE,
    299                                BTA_AV_OPEN_SST},
    300     /* API_RC_OPEN_EVT  */ {BTA_AV_SET_USE_RC, BTA_AV_OPEN_RC, BTA_AV_OPEN_SST},
    301     /* SRC_DATA_READY_EVT */ {BTA_AV_DATA_PATH, BTA_AV_SIGNORE,
    302                               BTA_AV_OPEN_SST},
    303     /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    304     /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    305                                  BTA_AV_OPEN_SST},
    306     /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    307     /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    308     /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    309     /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    310     /* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    311     /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    312     /* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    313     /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    314     /* STR_START_OK_EVT */ {BTA_AV_START_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    315     /* STR_START_FAIL_EVT */ {BTA_AV_START_FAILED, BTA_AV_SIGNORE,
    316                               BTA_AV_OPEN_SST},
    317     /* STR_CLOSE_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    318     /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE,
    319                               BTA_AV_OPEN_SST},
    320     /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE,
    321                                 BTA_AV_OPEN_SST},
    322     /* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE,
    323                                 BTA_AV_OPEN_SST},
    324     /* STR_WRITE_CFM_EVT */ {BTA_AV_CLR_CONG, BTA_AV_DATA_PATH,
    325                              BTA_AV_OPEN_SST},
    326     /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CFM, BTA_AV_SIGNORE,
    327                                BTA_AV_OPEN_SST},
    328     /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    329                                 BTA_AV_OPEN_SST},
    330     /* AVRC_TIMER_EVT */ {BTA_AV_OPEN_RC, BTA_AV_CHK_2ND_START,
    331                           BTA_AV_OPEN_SST},
    332     /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    333     /* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE,
    334                                BTA_AV_INIT_SST},
    335     /* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    336     /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    337     /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    338     /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE,
    339                                  BTA_AV_OPEN_SST},
    340     /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE,
    341                                      BTA_AV_OPEN_SST}};
    342 
    343 /* state table for reconfig state */
    344 static const uint8_t bta_av_sst_rcfg[][BTA_AV_NUM_COLS] = {
    345     /* Event                     Action 1               Action 2 Next state */
    346     /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    347     /* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE,
    348                         BTA_AV_CLOSING_SST},
    349     /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    350     /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    351     /* API_RECONFIG_EVT */ {BTA_AV_RECONFIG, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    352     /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    353     /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    354     /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    355     /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    356     /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    357     /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    358                                  BTA_AV_RCFG_SST},
    359     /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    360     /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    361     /* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE,
    362                            BTA_AV_RCFG_SST},
    363     /* STR_DISC_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE,
    364                              BTA_AV_INIT_SST},
    365     /* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE,
    366                              BTA_AV_RCFG_SST},
    367     /* STR_GETCAP_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE,
    368                                BTA_AV_INIT_SST},
    369     /* STR_OPEN_OK_EVT */ {BTA_AV_RCFG_STR_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST},
    370     /* STR_OPEN_FAIL_EVT */ {BTA_AV_RCFG_FAILED, BTA_AV_SIGNORE,
    371                              BTA_AV_RCFG_SST},
    372     /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    373     /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    374     /* STR_CLOSE_EVT */ {BTA_AV_RCFG_CONNECT, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    375     /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE,
    376                               BTA_AV_RCFG_SST},
    377     /* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    378                                 BTA_AV_RCFG_SST},
    379     /* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    380                                 BTA_AV_RCFG_SST},
    381     /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    382     /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CFM, BTA_AV_SUSPEND_CONT,
    383                                BTA_AV_RCFG_SST},
    384     /* STR_RECONFIG_CFM_EVT */ {BTA_AV_RCFG_CFM, BTA_AV_SIGNORE,
    385                                 BTA_AV_RCFG_SST},
    386     /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    387     /* AVDT_CONNECT_EVT */ {BTA_AV_RCFG_OPEN, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    388     /* AVDT_DISCONNECT_EVT */ {BTA_AV_RCFG_DISCNTD, BTA_AV_SIGNORE,
    389                                BTA_AV_RCFG_SST},
    390     /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    391     /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    392     /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST},
    393     /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE,
    394                                  BTA_AV_RCFG_SST},
    395     /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE,
    396                                      BTA_AV_RCFG_SST}};
    397 
    398 /* state table for closing state */
    399 static const uint8_t bta_av_sst_closing[][BTA_AV_NUM_COLS] = {
    400     /* Event                     Action 1               Action 2 Next state */
    401     /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    402     /* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE,
    403                         BTA_AV_CLOSING_SST},
    404     /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    405     /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    406     /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    407     /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    408                                BTA_AV_CLOSING_SST},
    409     /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    410                                BTA_AV_CLOSING_SST},
    411     /* API_RC_OPEN_EVT  */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    412     /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    413                               BTA_AV_CLOSING_SST},
    414     /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    415                                BTA_AV_CLOSING_SST},
    416     /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    417                                  BTA_AV_CLOSING_SST},
    418     /* SDP_DISC_OK_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST},
    419     /* SDP_DISC_FAIL_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE,
    420                              BTA_AV_INIT_SST},
    421     /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    422     /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    423                              BTA_AV_CLOSING_SST},
    424     /* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    425                              BTA_AV_CLOSING_SST},
    426     /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    427                                BTA_AV_CLOSING_SST},
    428     /* STR_OPEN_OK_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    429     /* STR_OPEN_FAIL_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE,
    430                              BTA_AV_CLOSING_SST},
    431     /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    432     /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    433                               BTA_AV_CLOSING_SST},
    434     /* STR_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE,
    435                          BTA_AV_CLOSING_SST},
    436     /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE,
    437                               BTA_AV_CLOSING_SST},
    438     /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_REJ, BTA_AV_SIGNORE,
    439                                 BTA_AV_CLOSING_SST},
    440     /* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    441                                 BTA_AV_CLOSING_SST},
    442     /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    443                              BTA_AV_CLOSING_SST},
    444     /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    445                                BTA_AV_CLOSING_SST},
    446     /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    447                                 BTA_AV_CLOSING_SST},
    448     /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    449     /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    450     /* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE,
    451                                BTA_AV_INIT_SST},
    452     /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    453     /* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE,
    454                               BTA_AV_CLOSING_SST},
    455     /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST},
    456     /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE,
    457                                  BTA_AV_CLOSING_SST},
    458     /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE,
    459                                      BTA_AV_CLOSING_SST}};
    460 
    461 /* type for state table */
    462 typedef const uint8_t (*tBTA_AV_SST_TBL)[BTA_AV_NUM_COLS];
    463 
    464 /* state table */
    465 static const tBTA_AV_SST_TBL bta_av_sst_tbl[] = {
    466     bta_av_sst_init, bta_av_sst_incoming, bta_av_sst_opening,
    467     bta_av_sst_open, bta_av_sst_rcfg,     bta_av_sst_closing};
    468 
    469 static const char* bta_av_sst_code(uint8_t state);
    470 
    471 /*******************************************************************************
    472  *
    473  * Function         bta_av_is_rcfg_sst
    474  *
    475  * Description      Check if stream state machine is in reconfig state.
    476  *
    477  *
    478  * Returns          true if stream state machine is in reconfig state.
    479  *
    480  ******************************************************************************/
    481 bool bta_av_is_rcfg_sst(tBTA_AV_SCB* p_scb) {
    482   bool is_rcfg_sst = false;
    483 
    484   if (p_scb != NULL) {
    485     if (p_scb->state == BTA_AV_RCFG_SST) is_rcfg_sst = true;
    486   }
    487 
    488   return is_rcfg_sst;
    489 }
    490 
    491 /*******************************************************************************
    492  *
    493  * Function         bta_av_ssm_execute
    494  *
    495  * Description      Stream state machine event handling function for AV
    496  *
    497  *
    498  * Returns          void
    499  *
    500  ******************************************************************************/
    501 void bta_av_ssm_execute(tBTA_AV_SCB* p_scb, uint16_t event,
    502                         tBTA_AV_DATA* p_data) {
    503   tBTA_AV_SST_TBL state_table;
    504   uint8_t action;
    505   int i, xx;
    506 
    507   if (p_scb == NULL) {
    508     /* this stream is not registered */
    509     APPL_TRACE_EVENT("AV channel not registered");
    510     return;
    511   }
    512 
    513   /* In case incoming connection is for VDP, we need to swap scb.        */
    514   /* When ACP_CONNECT_EVT was received, we put first available scb to    */
    515   /* to Incoming state. Later, when STR_CONFIG_IND_EVT is coming, we     */
    516   /* know if it is A2DP or VDP.                                          */
    517   if ((p_scb->state == BTA_AV_INIT_SST) &&
    518       (event == BTA_AV_STR_CONFIG_IND_EVT)) {
    519     for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) {
    520       if (bta_av_cb.p_scb[xx]) {
    521         if (bta_av_cb.p_scb[xx]->state == BTA_AV_INCOMING_SST) {
    522           bta_av_cb.p_scb[xx]->state = BTA_AV_INIT_SST;
    523           bta_av_cb.p_scb[xx]->coll_mask = 0;
    524           p_scb->state = BTA_AV_INCOMING_SST;
    525           break;
    526         }
    527       }
    528     }
    529   }
    530 
    531   APPL_TRACE_VERBOSE("%s: AV Sevent(0x%x)=0x%x(%s) state=%d(%s)", __func__,
    532                      p_scb->hndl, event, bta_av_evt_code(event), p_scb->state,
    533                      bta_av_sst_code(p_scb->state));
    534 
    535   /* look up the state table for the current state */
    536   state_table = bta_av_sst_tbl[p_scb->state];
    537 
    538   event -= BTA_AV_FIRST_SSM_EVT;
    539 
    540   /* set next state */
    541   p_scb->state = state_table[event][BTA_AV_SNEXT_STATE];
    542 
    543   /* execute action functions */
    544   for (i = 0; i < BTA_AV_SACTIONS; i++) {
    545     action = state_table[event][i];
    546     if (action != BTA_AV_SIGNORE) {
    547       (*p_scb->p_act_tbl[action])(p_scb, p_data);
    548     } else
    549       break;
    550   }
    551 }
    552 
    553 /*******************************************************************************
    554  *
    555  * Function         bta_av_is_scb_opening
    556  *
    557  * Description      Returns true is scb is in opening state.
    558  *
    559  *
    560  * Returns          true if scb is in opening state.
    561  *
    562  ******************************************************************************/
    563 bool bta_av_is_scb_opening(tBTA_AV_SCB* p_scb) {
    564   bool is_opening = false;
    565 
    566   if (p_scb) {
    567     if (p_scb->state == BTA_AV_OPENING_SST) is_opening = true;
    568   }
    569 
    570   return is_opening;
    571 }
    572 
    573 /*******************************************************************************
    574  *
    575  * Function         bta_av_is_scb_incoming
    576  *
    577  * Description      Returns true is scb is in incoming state.
    578  *
    579  *
    580  * Returns          true if scb is in incoming state.
    581  *
    582  ******************************************************************************/
    583 bool bta_av_is_scb_incoming(tBTA_AV_SCB* p_scb) {
    584   bool is_incoming = false;
    585 
    586   if (p_scb) {
    587     if (p_scb->state == BTA_AV_INCOMING_SST) is_incoming = true;
    588   }
    589 
    590   return is_incoming;
    591 }
    592 
    593 /*******************************************************************************
    594  *
    595  * Function         bta_av_set_scb_sst_init
    596  *
    597  * Description      Set SST state to INIT.
    598  *                  Use this function to change SST outside of state machine.
    599  *
    600  * Returns          None
    601  *
    602  ******************************************************************************/
    603 void bta_av_set_scb_sst_init(tBTA_AV_SCB* p_scb) {
    604   if (p_scb) {
    605     p_scb->state = BTA_AV_INIT_SST;
    606   }
    607 }
    608 
    609 /*******************************************************************************
    610  *
    611  * Function         bta_av_is_scb_init
    612  *
    613  * Description      Returns true is scb is in init state.
    614  *
    615  *
    616  * Returns          true if scb is in incoming state.
    617  *
    618  ******************************************************************************/
    619 bool bta_av_is_scb_init(tBTA_AV_SCB* p_scb) {
    620   bool is_init = false;
    621 
    622   if (p_scb) {
    623     if (p_scb->state == BTA_AV_INIT_SST) is_init = true;
    624   }
    625 
    626   return is_init;
    627 }
    628 
    629 /*******************************************************************************
    630  *
    631  * Function         bta_av_set_scb_sst_incoming
    632  *
    633  * Description      Set SST state to incoming.
    634  *                  Use this function to change SST outside of state machine.
    635  *
    636  * Returns          None
    637  *
    638  ******************************************************************************/
    639 void bta_av_set_scb_sst_incoming(tBTA_AV_SCB* p_scb) {
    640   if (p_scb) {
    641     p_scb->state = BTA_AV_INCOMING_SST;
    642   }
    643 }
    644 
    645 /*****************************************************************************
    646  *  Debug Functions
    647  ****************************************************************************/
    648 /*******************************************************************************
    649  *
    650  * Function         bta_av_sst_code
    651  *
    652  * Description
    653  *
    654  * Returns          char *
    655  *
    656  ******************************************************************************/
    657 static const char* bta_av_sst_code(uint8_t state) {
    658   switch (state) {
    659     case BTA_AV_INIT_SST:
    660       return "INIT";
    661     case BTA_AV_INCOMING_SST:
    662       return "INCOMING";
    663     case BTA_AV_OPENING_SST:
    664       return "OPENING";
    665     case BTA_AV_OPEN_SST:
    666       return "OPEN";
    667     case BTA_AV_RCFG_SST:
    668       return "RCFG";
    669     case BTA_AV_CLOSING_SST:
    670       return "CLOSING";
    671     default:
    672       return "unknown";
    673   }
    674 }
    675