1515#include "esp32-hal-bt.h"
1616
1717#if SOC_BT_SUPPORTED
18- #ifdef CONFIG_BT_ENABLED
1918
20- #if CONFIG_IDF_TARGET_ESP32
21- bool btInUse () {
22- return true;
23- }
24- #else
25- // user may want to change it to free resources
26- __attribute__((weak )) bool btInUse () {
27- return true;
28- }
29- #endif
30-
31- #include "esp_bt.h"
32-
33- #ifdef CONFIG_BTDM_CONTROLLER_MODE_BTDM
34- #define BT_MODE ESP_BT_MODE_BTDM
35- #elif defined(CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY )
36- #define BT_MODE ESP_BT_MODE_CLASSIC_BT
37- #else
38- #define BT_MODE ESP_BT_MODE_BLE
39- #endif
40-
41- bool btStarted () {
42- return (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_ENABLED );
43- }
44-
45- bool btStart () {
46- return btStartMode (BT_MODE );
47- }
48-
49- bool btStartMode (bt_mode mode ) {
50- esp_bt_mode_t esp_bt_mode ;
51- esp_bt_controller_config_t cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT ();
52- #if CONFIG_IDF_TARGET_ESP32
53- switch (mode ) {
54- case BT_MODE_BLE : esp_bt_mode = ESP_BT_MODE_BLE ; break ;
55- case BT_MODE_CLASSIC_BT : esp_bt_mode = ESP_BT_MODE_CLASSIC_BT ; break ;
56- case BT_MODE_BTDM : esp_bt_mode = ESP_BT_MODE_BTDM ; break ;
57- default : esp_bt_mode = BT_MODE ; break ;
58- }
59- // esp_bt_controller_enable(MODE) This mode must be equal as the mode in “cfg” of esp_bt_controller_init().
60- cfg .mode = esp_bt_mode ;
61- if (cfg .mode == ESP_BT_MODE_CLASSIC_BT ) {
62- esp_bt_controller_mem_release (ESP_BT_MODE_BLE );
63- }
64- #else
65- // other esp variants dont support BT-classic / DM.
66- esp_bt_mode = BT_MODE ;
67- #endif
68-
69- if (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_ENABLED ) {
70- return true;
71- }
72- esp_err_t ret ;
73- if (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_IDLE ) {
74- if ((ret = esp_bt_controller_init (& cfg )) != ESP_OK ) {
75- log_e ("initialize controller failed: %s" , esp_err_to_name (ret ));
76- return false;
77- }
78- while (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_IDLE ) {}
79- }
80- if (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_INITED ) {
81- if ((ret = esp_bt_controller_enable (esp_bt_mode )) != ESP_OK ) {
82- log_e ("BT Enable mode=%d failed %s" , BT_MODE , esp_err_to_name (ret ));
83- return false;
84- }
85- }
86- if (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_ENABLED ) {
87- return true;
88- }
89- log_e ("BT Start failed" );
90- return false;
91- }
92-
93- bool btStop () {
94- if (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_IDLE ) {
95- return true;
96- }
97- if (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_ENABLED ) {
98- if (esp_bt_controller_disable ()) {
99- log_e ("BT Disable failed" );
100- return false;
101- }
102- while (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_ENABLED );
103- }
104- if (esp_bt_controller_get_status () == ESP_BT_CONTROLLER_STATUS_INITED ) {
105- if (esp_bt_controller_deinit ()) {
106- log_e ("BT deint failed" );
107- return false;
108- }
109- vTaskDelay (1 );
110- if (esp_bt_controller_get_status () != ESP_BT_CONTROLLER_STATUS_IDLE ) {
111- return false;
112- }
113- return true;
114- }
115- log_e ("BT Stop failed" );
116- return false;
117- }
118-
119- #else // CONFIG_BT_ENABLED
12019bool btStarted () {
12120 return false;
12221}
@@ -129,6 +28,4 @@ bool btStop() {
12928 return false;
13029}
13130
132- #endif /* CONFIG_BT_ENABLED */
133-
13431#endif /* SOC_BT_SUPPORTED */
0 commit comments