Fix BluetoothSerial crash when restart (#3471)
* Update esp32-hal-bt.c
BluetoothSerial crash when restart:  this is because the BT controller remains in state  ESP_BT_CONTROLLER_STATUS_INITED instead of state  ESP_BT_CONTROLLER_STATUS_IDLE after the end() method.
in file esp_bt.h it is specified
> @brief Enable BT controller.
>                Due to a known issue, you cannot call esp_bt_controller_enable() a second time
>                 to change the controller mode dynamically. To change controller mode, call
>                esp_bt_controller_disable() and then call esp_bt_controller_enable() with the new mode.
after **esp_bt_controller_disable()** the controller remains in state INITED so we do call the **esp_bt_controller_deinit()** function to put the controller into state IDLE.
i have modified the **esp32-hal-bt.c** file
line 57 and next
(i have insert the esp_bt_controller_deinit() function so the controller go into Idle state)
```c++
bool btStop(){
    if(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_IDLE){
		log_i("bt stopped");
        return true;
    }
    if(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_ENABLED){
		log_i("bt enabled");
        if (esp_bt_controller_disable()) {
            log_e("BT Disable failed");
            return false;
        }
        while(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_ENABLED);
    }
    if(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_INITED){
		log_i("inited");
		if (esp_bt_controller_deinit()) {
			log_e("BT deint failed");
			return false;
		}
		while (esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_INITED);
        return true;
    }
    log_e("BT Stop failed");
    return false;
}
```
* Update esp32-hal-bt.c
remove while to avoid infinite loop
			
			
This commit is contained in:
		
							parent
							
								
									dac493fb92
								
							
						
					
					
						commit
						cec3fca4ad
					
				| @ -65,6 +65,14 @@ bool btStop(){ | ||||
|         while(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_ENABLED); | ||||
|     } | ||||
|     if(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_INITED){ | ||||
|         if (esp_bt_controller_deinit()) { | ||||
| 			log_e("BT deint failed"); | ||||
| 			return false; | ||||
| 		} | ||||
| 		vTaskDelay(1); | ||||
| 		if (esp_bt_controller_get_status() != ESP_BT_CONTROLLER_STATUS_IDLE) {			 | ||||
| 			return false;		 | ||||
| 		} | ||||
|         return true; | ||||
|     } | ||||
|     log_e("BT Stop failed"); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user