15
15
#include "esp32-hal-bt.h"
16
16
17
17
#if SOC_BT_SUPPORTED
18
- #ifdef CONFIG_BT_ENABLED
19
18
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
120
19
bool btStarted () {
121
20
return false;
122
21
}
@@ -129,6 +28,4 @@ bool btStop() {
129
28
return false;
130
29
}
131
30
132
- #endif /* CONFIG_BT_ENABLED */
133
-
134
31
#endif /* SOC_BT_SUPPORTED */
0 commit comments