@@ -1381,6 +1381,45 @@ static void btc_ble_set_csa_support_callback(UINT8 status)
13811381 }
13821382}
13831383
1384+ static void btc_ble_set_vendor_evt_mask_callback (UINT8 status )
1385+ {
1386+ esp_ble_gap_cb_param_t param ;
1387+ bt_status_t ret ;
1388+ btc_msg_t msg = {0 };
1389+
1390+ msg .sig = BTC_SIG_API_CB ;
1391+ msg .pid = BTC_PID_GAP_BLE ;
1392+ msg .act = ESP_GAP_BLE_SET_VENDOR_EVT_MASK_COMPLETE_EVT ;
1393+
1394+ param .set_csa_support_cmpl .status = btc_btm_status_to_esp_status (status );
1395+
1396+ ret = btc_transfer_context (& msg , & param , sizeof (esp_ble_gap_cb_param_t ), NULL , NULL );
1397+
1398+ if (ret != BT_STATUS_SUCCESS ) {
1399+ BTC_TRACE_ERROR ("%s btc_transfer_context failed\n" , __func__ );
1400+ }
1401+ }
1402+
1403+ static void btc_ble_vendor_hci_event_callback (UINT8 subevt_code , UINT8 param_len , UINT8 * params )
1404+ {
1405+ esp_ble_gap_cb_param_t param = {0 };
1406+ bt_status_t ret ;
1407+ btc_msg_t msg = {0 };
1408+
1409+ msg .sig = BTC_SIG_API_CB ;
1410+ msg .pid = BTC_PID_GAP_BLE ;
1411+ msg .act = ESP_GAP_BLE_VENDOR_HCI_EVT ;
1412+
1413+ param .vendor_hci_evt .subevt_code = subevt_code ;
1414+ param .vendor_hci_evt .param_len = param_len ;
1415+ param .vendor_hci_evt .param_buf = params ;
1416+ ret = btc_transfer_context (& msg , & param , sizeof (esp_ble_gap_cb_param_t ), btc_gap_ble_cb_deep_copy , btc_gap_ble_cb_deep_free );
1417+
1418+ if (ret != BT_STATUS_SUCCESS ) {
1419+ BTC_TRACE_ERROR ("%s btc_transfer_context failed\n" , __func__ );
1420+ }
1421+ }
1422+
13841423void btc_get_whitelist_size (uint16_t * length )
13851424{
13861425 BTM_BleGetWhiteListSize (length );
@@ -1803,6 +1842,18 @@ void btc_gap_ble_cb_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src)
18031842 }
18041843 break ;
18051844 }
1845+ case ESP_GAP_BLE_VENDOR_HCI_EVT : {
1846+ if (src -> vendor_hci_evt .param_len ) {
1847+ dst -> vendor_hci_evt .param_buf = osi_malloc (src -> vendor_hci_evt .param_len );
1848+ if (dst -> vendor_hci_evt .param_buf ) {
1849+ memcpy (dst -> vendor_hci_evt .param_buf , src -> vendor_hci_evt .param_buf ,
1850+ src -> vendor_hci_evt .param_len );
1851+ } else {
1852+ BTC_TRACE_ERROR ("%s, malloc failed\n" , __func__ );
1853+ }
1854+ }
1855+ break ;
1856+ }
18061857 default :
18071858 BTC_TRACE_ERROR ("%s, Unhandled deep copy %d\n" , __func__ , msg -> act );
18081859 break ;
@@ -1947,6 +1998,13 @@ void btc_gap_ble_cb_deep_free(btc_msg_t *msg)
19471998 }
19481999 break ;
19492000 }
2001+ case ESP_GAP_BLE_VENDOR_HCI_EVT : {
2002+ void * value = ((esp_ble_gap_cb_param_t * )msg -> arg )-> vendor_hci_evt .param_buf ;
2003+ if (value ) {
2004+ osi_free (value );
2005+ }
2006+ break ;
2007+ }
19502008 default :
19512009 BTC_TRACE_DEBUG ("Unhandled deep free %d" , msg -> act );
19522010 break ;
@@ -2461,6 +2519,9 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
24612519 case BTC_GAP_BLE_SET_CSA_SUPPORT :
24622520 BTA_DmBleGapSetCsaSupport (arg -> set_csa_support .csa_select , btc_ble_set_csa_support_callback );
24632521 break ;
2522+ case BTC_GAP_BLE_ACT_SET_VENDOR_EVT_MASK :
2523+ BTA_DmBleGapSetVendorEventMask (arg -> set_vendor_evt_mask .evt_mask , btc_ble_set_vendor_evt_mask_callback );
2524+ break ;
24642525 default :
24652526 break ;
24662527 }
@@ -2476,6 +2537,7 @@ void btc_gap_callback_init(void)
24762537#if (BLE_50_FEATURE_SUPPORT == TRUE )
24772538 BTM_BleGapRegisterCallback (btc_ble_5_gap_callback );
24782539#endif // #if (BLE_50_FEATURE_SUPPORT == TRUE)
2540+ BTM_BleRegisterVendorHciEventCallback (btc_ble_vendor_hci_event_callback );
24792541}
24802542
24812543bool btc_gap_ble_init (void )
0 commit comments