@@ -115,6 +115,9 @@ static esp_bt_status_t btc_hci_to_esp_status(uint8_t hci_status)
115115 case HCI_SUCCESS :
116116 esp_status = ESP_BT_STATUS_SUCCESS ;
117117 break ;
118+ case HCI_ERR_ESP_VENDOR_FAIL :
119+ esp_status = ESP_BT_STATUS_FAIL ;
120+ break ;
118121 case HCI_ERR_HOST_TIMEOUT :
119122 esp_status = ESP_BT_STATUS_TIMEOUT ;
120123 break ;
@@ -169,6 +172,12 @@ static esp_bt_status_t btc_btm_status_to_esp_status (uint8_t btm_status)
169172 case BTM_SET_PRIVACY_FAIL :
170173 esp_status = ESP_BT_STATUS_FAIL ;
171174 break ;
175+ case BTM_INVALID_STATIC_RAND_ADDR :
176+ esp_status = ESP_BT_STATUS_INVALID_STATIC_RAND_ADDR ;
177+ break ;
178+ case BTM_SET_STATIC_RAND_ADDR_FAIL :
179+ esp_status = ESP_BT_STATUS_FAIL ;
180+ break ;
172181 default :
173182 esp_status = ESP_BT_STATUS_FAIL ;
174183 break ;
@@ -714,6 +723,24 @@ static void btc_add_whitelist_complete_callback(UINT8 status, tBTM_WL_OPERATION
714723 }
715724}
716725
726+ static void btc_set_rand_addr_callback (UINT8 status )
727+ {
728+ esp_ble_gap_cb_param_t param ;
729+ bt_status_t ret ;
730+ btc_msg_t msg ;
731+ param .set_rand_addr_cmpl .status = btc_btm_status_to_esp_status (status ); //todo status
732+ msg .sig = BTC_SIG_API_CB ;
733+ msg .pid = BTC_PID_GAP_BLE ;
734+ msg .act = ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT ;
735+ ret = btc_transfer_context (& msg , & param ,
736+ sizeof (esp_ble_gap_cb_param_t ), NULL );
737+
738+ if (ret != BT_STATUS_SUCCESS ) {
739+ LOG_ERROR ("%s btc_transfer_context failed\n" , __func__ );
740+ }
741+
742+ }
743+
717744static void btc_set_local_privacy_callback (UINT8 status )
718745{
719746 esp_ble_gap_cb_param_t param ;
@@ -821,13 +848,8 @@ static void btc_ble_set_pkt_data_len(BD_ADDR remote_device, uint16_t tx_data_len
821848 BTA_DmBleSetDataLength (remote_device , tx_data_length , p_set_pkt_data_cback );
822849}
823850
824- static void btc_ble_set_rand_addr (BD_ADDR rand_addr )
851+ static void btc_ble_set_rand_addr (BD_ADDR rand_addr , tBTA_SET_RAND_ADDR_CBACK * p_set_rand_addr_cback )
825852{
826- esp_ble_gap_cb_param_t param ;
827- bt_status_t ret ;
828- btc_msg_t msg ;
829- param .set_rand_addr_cmpl .status = ESP_BT_STATUS_SUCCESS ;
830-
831853 if (rand_addr != NULL ) {
832854 /*
833855 A static address is a 48-bit randomly generated address and shall meet the following requirements:
@@ -842,25 +864,15 @@ static void btc_ble_set_rand_addr (BD_ADDR rand_addr)
842864 if ((rand_addr [0 ] & BT_STATIC_RAND_ADDR_MASK ) == BT_STATIC_RAND_ADDR_MASK
843865 && memcmp (invalid_rand_addr_a , rand_addr , BD_ADDR_LEN ) != 0
844866 && memcmp (invalid_rand_addr_b , rand_addr , BD_ADDR_LEN ) != 0 ){
845- BTA_DmSetRandAddress (rand_addr );
867+ BTA_DmSetRandAddress (rand_addr , btc_set_rand_addr_callback );
846868 } else {
847- param . set_rand_addr_cmpl . status = ESP_BT_STATUS_INVALID_STATIC_RAND_ADDR ;
869+ btc_set_rand_addr_callback ( BTM_INVALID_STATIC_RAND_ADDR ) ;
848870 LOG_ERROR ("Invalid random address, the high bit should be 0b11, all bits of the random part shall not be to 1 or 0" );
849871 }
850872 } else {
851- param . set_rand_addr_cmpl . status = ESP_BT_STATUS_INVALID_STATIC_RAND_ADDR ;
873+ btc_set_rand_addr_callback ( BTM_INVALID_STATIC_RAND_ADDR ) ;
852874 LOG_ERROR ("Invalid random addressm, the address value is NULL" );
853875 }
854-
855- msg .sig = BTC_SIG_API_CB ;
856- msg .pid = BTC_PID_GAP_BLE ;
857- msg .act = ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT ;
858- ret = btc_transfer_context (& msg , & param ,
859- sizeof (esp_ble_gap_cb_param_t ), NULL );
860-
861- if (ret != BT_STATUS_SUCCESS ) {
862- LOG_ERROR ("%s btc_transfer_context failed\n" , __func__ );
863- }
864876}
865877
866878static void btc_ble_config_local_privacy (bool privacy_enable , tBTA_SET_LOCAL_PRIVACY_CBACK * set_local_privacy_cback )
@@ -1057,7 +1069,7 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
10571069 case BTC_GAP_BLE_ACT_SET_RAND_ADDRESS : {
10581070 BD_ADDR bd_addr ;
10591071 memcpy (bd_addr , arg -> set_rand_addr .rand_addr , sizeof (BD_ADDR ));
1060- btc_ble_set_rand_addr (bd_addr );
1072+ btc_ble_set_rand_addr (bd_addr , btc_set_rand_addr_callback );
10611073 break ;
10621074 }
10631075 case BTC_GAP_BLE_ACT_CONFIG_LOCAL_PRIVACY :
0 commit comments