@@ -134,6 +134,14 @@ do {
134
134
hf_local_param[idx].btc_hf_cb.num_active = 0; \
135
135
hf_local_param[idx].btc_hf_cb.num_held = 0;
136
136
137
+ #define CHECK_HF_IDX (idx ) \
138
+ do { \
139
+ if ((idx < 0) || (idx >= BTC_HF_NUM_CB)) { \
140
+ BTC_TRACE_ERROR("%s: Invalid index %d", __FUNCTION__, idx); \
141
+ return; \
142
+ } \
143
+ } while (0)
144
+
137
145
/************************************************************************************
138
146
** Static Function
139
147
************************************************************************************/
@@ -1213,19 +1221,9 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1213
1221
tBTA_AG * p_data = (tBTA_AG * )msg -> arg ;
1214
1222
esp_hf_cb_param_t param ;
1215
1223
bdstr_t bdstr ;
1216
- int idx ;
1217
-
1218
- if (p_data == NULL ) {
1219
- idx = BTC_HF_INVALID_IDX ;
1220
- } else {
1221
- idx = p_data -> hdr .handle - 1 ;
1222
- }
1224
+ int idx = BTC_HF_INVALID_IDX ;
1223
1225
1224
1226
BTC_TRACE_DEBUG ("%s: event = %s" , __FUNCTION__ , dump_hf_event (event ));
1225
- if ((idx < 0 ) || (idx >= BTC_HF_NUM_CB )) {
1226
- BTC_TRACE_ERROR ("%s: Invalid index %d" , __FUNCTION__ , idx );
1227
- return ;
1228
- }
1229
1227
1230
1228
switch (event ) {
1231
1229
case BTA_AG_ENABLE_EVT :
@@ -1234,6 +1232,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1234
1232
1235
1233
case BTA_AG_REGISTER_EVT :
1236
1234
{
1235
+ idx = p_data -> hdr .handle - 1 ;
1236
+ CHECK_HF_IDX (idx );
1237
1237
hf_local_param [idx ].btc_hf_cb .handle = p_data -> reg .hdr .handle ;
1238
1238
BTC_TRACE_DEBUG ("%s: BTA_AG_REGISTER_EVT," "hf_local_param[%d].btc_hf_cb.handle = %d" ,
1239
1239
__FUNCTION__ , idx , hf_local_param [idx ].btc_hf_cb .handle );
@@ -1242,7 +1242,9 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1242
1242
1243
1243
case BTA_AG_OPEN_EVT :
1244
1244
{
1245
- if (p_data -> open .status == BTA_AG_SUCCESS )
1245
+ idx = p_data -> hdr .handle - 1 ;
1246
+ CHECK_HF_IDX (idx );
1247
+ if (p_data -> open .hdr .status == BTA_AG_SUCCESS )
1246
1248
{
1247
1249
bdcpy (hf_local_param [idx ].btc_hf_cb .connected_bda .address , p_data -> open .bd_addr );
1248
1250
hf_local_param [idx ].btc_hf_cb .connection_state = ESP_HF_CONNECTION_STATE_CONNECTED ;
@@ -1253,7 +1255,7 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1253
1255
hf_local_param [idx ].btc_hf_cb .connection_state = ESP_HF_CONNECTION_STATE_DISCONNECTED ;
1254
1256
} else {
1255
1257
BTC_TRACE_WARNING ("%s: AG open failed, but another device connected. status=%d state=%d connected device=%s" , __FUNCTION__ ,
1256
- p_data -> open .status , hf_local_param [idx ].btc_hf_cb .connection_state ,
1258
+ p_data -> open .hdr . status , hf_local_param [idx ].btc_hf_cb .connection_state ,
1257
1259
bdaddr_to_string (& hf_local_param [idx ].btc_hf_cb .connected_bda , bdstr , sizeof (bdstr )));
1258
1260
break ;
1259
1261
}
@@ -1270,13 +1272,15 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1270
1272
if (hf_local_param [idx ].btc_hf_cb .connection_state == ESP_HF_CONNECTION_STATE_DISCONNECTED )
1271
1273
bdsetany (hf_local_param [idx ].btc_hf_cb .connected_bda .address );
1272
1274
1273
- if (p_data -> open .status != BTA_AG_SUCCESS )
1275
+ if (p_data -> open .hdr . status != BTA_AG_SUCCESS )
1274
1276
btc_queue_advance ();
1275
1277
break ;
1276
1278
}
1277
1279
1278
1280
case BTA_AG_CONN_EVT :
1279
1281
{
1282
+ idx = p_data -> hdr .handle - 1 ;
1283
+ CHECK_HF_IDX (idx );
1280
1284
clock_gettime (CLOCK_MONOTONIC , & (hf_local_param [idx ].btc_hf_cb .connected_timestamp ));
1281
1285
BTC_TRACE_DEBUG ("%s: BTA_AG_CONN_EVT, idx = %d " , __FUNCTION__ , idx );
1282
1286
hf_local_param [idx ].btc_hf_cb .peer_feat = p_data -> conn .peer_feat ;
@@ -1298,6 +1302,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1298
1302
1299
1303
case BTA_AG_CLOSE_EVT :
1300
1304
{
1305
+ idx = p_data -> hdr .handle - 1 ;
1306
+ CHECK_HF_IDX (idx );
1301
1307
hf_local_param [idx ].btc_hf_cb .connected_timestamp .tv_sec = 0 ;
1302
1308
hf_local_param [idx ].btc_hf_cb .connection_state = ESP_HF_CONNECTION_STATE_DISCONNECTED ;
1303
1309
BTC_TRACE_DEBUG ("%s: BTA_AG_CLOSE_EVT," "hf_local_param[%d].btc_hf_cb.handle = %d" , __FUNCTION__ ,
@@ -1319,6 +1325,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1319
1325
1320
1326
case BTA_AG_AUDIO_OPEN_EVT :
1321
1327
{
1328
+ idx = p_data -> hdr .handle - 1 ;
1329
+ CHECK_HF_IDX (idx );
1322
1330
do {
1323
1331
memset (& param , 0 , sizeof (esp_hf_cb_param_t ));
1324
1332
param .audio_stat .state = ESP_HF_AUDIO_STATE_CONNECTED ;
@@ -1330,6 +1338,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1330
1338
1331
1339
case BTA_AG_AUDIO_MSBC_OPEN_EVT :
1332
1340
{
1341
+ idx = p_data -> hdr .handle - 1 ;
1342
+ CHECK_HF_IDX (idx );
1333
1343
do {
1334
1344
memset (& param , 0 , sizeof (esp_hf_cb_param_t ));
1335
1345
param .audio_stat .state = ESP_HF_AUDIO_STATE_CONNECTED_MSBC ;
@@ -1340,6 +1350,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1340
1350
}
1341
1351
case BTA_AG_AUDIO_CLOSE_EVT :
1342
1352
{
1353
+ idx = p_data -> hdr .handle - 1 ;
1354
+ CHECK_HF_IDX (idx );
1343
1355
do {
1344
1356
memset (& param , 0 , sizeof (esp_hf_cb_param_t ));
1345
1357
param .audio_stat .state = ESP_HF_AUDIO_STATE_DISCONNECTED ;
@@ -1351,6 +1363,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1351
1363
1352
1364
case BTA_AG_AT_BVRA_EVT :
1353
1365
{
1366
+ idx = p_data -> hdr .handle - 1 ;
1367
+ CHECK_HF_IDX (idx );
1354
1368
do {
1355
1369
memset (& param , 0 , sizeof (esp_hf_cb_param_t ));
1356
1370
param .vra_rep .value = p_data -> val .num ;
@@ -1468,6 +1482,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1468
1482
case BTA_AG_AT_BINP_EVT :
1469
1483
case BTA_AG_AT_BTRH_EVT :
1470
1484
{
1485
+ idx = p_data -> hdr .handle - 1 ;
1486
+ CHECK_HF_IDX (idx );
1471
1487
tBTA_AG_RES_DATA ag_res ;
1472
1488
memset (& ag_res , 0 , sizeof (ag_res ));
1473
1489
ag_res .ok_flag = BTA_AG_OK_ERROR ;
@@ -1478,6 +1494,8 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1478
1494
1479
1495
case BTA_AG_AT_BAC_EVT :
1480
1496
{
1497
+ idx = p_data -> hdr .handle - 1 ;
1498
+ CHECK_HF_IDX (idx );
1481
1499
BTC_TRACE_DEBUG ("AG Bitmap of peer-codecs %d" , p_data -> val .num );
1482
1500
#if (BTM_WBS_INCLUDED == TRUE )
1483
1501
/* If the peer supports mSBC and the BTC prefferred codec is also mSBC, then
@@ -1497,9 +1515,9 @@ void btc_hf_cb_handler(btc_msg_t *msg)
1497
1515
#if (BTM_WBS_INCLUDED == TRUE )
1498
1516
case BTA_AG_WBS_EVT :
1499
1517
{
1500
- BTC_TRACE_DEBUG ("Set codec status %d codec %d 1=CVSD 2=MSBC" , p_data -> val .hdr .status , p_data -> val .value );
1518
+ BTC_TRACE_DEBUG ("Set codec status %d codec %d 1=CVSD 2=MSBC" , p_data -> val .hdr .status , p_data -> val .num );
1501
1519
memset (& param , 0 , sizeof (esp_hf_cb_param_t ));
1502
- param .wbs_rep .codec = p_data -> val .value ;
1520
+ param .wbs_rep .codec = p_data -> val .num ;
1503
1521
btc_hf_cb_to_app (ESP_HF_WBS_RESPONSE_EVT , & param );
1504
1522
break ;
1505
1523
}
0 commit comments