@@ -40,14 +40,75 @@ extern "C" {
40
40
#include " lwip/opt.h"
41
41
#include " lwip/err.h"
42
42
#include " lwip/dns.h"
43
+ #include " esp_ipc.h"
43
44
44
45
#include " esp32-hal-log.h"
46
+
47
+ /* *
48
+ * Boot and start WiFi
49
+ * This method get's called on boot if you use any of the WiFi methods.
50
+ * If you do not link to this library, WiFi will not be started.
51
+ * */
52
+ static bool _esp_wifi_initalized = false ;
53
+ extern void initWiFi ()
54
+ {
55
+ wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT ();
56
+ tcpip_adapter_init ();
57
+ esp_event_loop_init (&WiFiGenericClass::_eventCallback, NULL );
58
+ esp_wifi_init (&cfg);
59
+ esp_wifi_set_storage (WIFI_STORAGE_RAM);
60
+ _esp_wifi_initalized = true ;
45
61
}
46
62
63
+ } // extern "C"
64
+
47
65
#undef min
48
66
#undef max
49
67
#include < vector>
50
68
69
+ static bool _esp_wifi_start ()
70
+ {
71
+ static bool started = false ;
72
+ esp_err_t err;
73
+
74
+ if (!_esp_wifi_initalized){
75
+ initWiFi ();
76
+ if (!_esp_wifi_initalized){
77
+ log_w (" not initialized" );
78
+ return false ;
79
+ }
80
+ }
81
+ if (started){
82
+ return true ;
83
+ }
84
+ started = true ;
85
+ err = esp_wifi_start ();
86
+ if (err != ESP_OK) {
87
+ log_e (" %d" , err);
88
+ return false ;
89
+ }
90
+ #if CONFIG_AUTOCONNECT_WIFI
91
+ wifi_mode_t mode = WIFI_MODE_NULL;
92
+ bool auto_connect = false ;
93
+
94
+ err = esp_wifi_get_mode (&mode);
95
+ if (err != ESP_OK) {
96
+ log_e (" esp_wifi_get_mode: %d" , err);
97
+ return false ;
98
+ }
99
+
100
+ err = esp_wifi_get_auto_connect (&auto_connect);
101
+ if ((mode == WIFI_MODE_STA || mode == WIFI_MODE_APSTA) && auto_connect) {
102
+ err = esp_wifi_connect ();
103
+ if (err != ESP_OK) {
104
+ log_e (" esp_wifi_connect: %d" , err);
105
+ return false ;
106
+ }
107
+ }
108
+ #endif
109
+ return true ;
110
+ }
111
+
51
112
// -----------------------------------------------------------------------------------------------------------------------
52
113
// ------------------------------------------------- Generic WiFi function -----------------------------------------------
53
114
// -----------------------------------------------------------------------------------------------------------------------
@@ -167,7 +228,11 @@ void WiFiGenericClass::persistent(bool persistent)
167
228
*/
168
229
bool WiFiGenericClass::mode (wifi_mode_t m)
169
230
{
170
- if (getMode () == m) {
231
+ wifi_mode_t cm = getMode ();
232
+ if (cm == WIFI_MODE_MAX){
233
+ return false ;
234
+ }
235
+ if (cm == m) {
171
236
return true ;
172
237
}
173
238
return esp_wifi_set_mode (m) == ESP_OK;
@@ -180,6 +245,9 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
180
245
wifi_mode_t WiFiGenericClass::getMode ()
181
246
{
182
247
uint8_t mode;
248
+ if (!_esp_wifi_start ()){
249
+ return WIFI_MODE_MAX;
250
+ }
183
251
esp_wifi_get_mode ((wifi_mode_t *)&mode);
184
252
return (wifi_mode_t )mode;
185
253
}
@@ -275,48 +343,3 @@ void wifi_dns_found_callback(const char *name, const ip_addr_t *ipaddr, void *ca
275
343
_dns_busy = false ;
276
344
}
277
345
278
- /* *
279
- * Boot and start WiFi
280
- * This method get's called on boot if you use any of the WiFi methods.
281
- * If you do not link to this library, WiFi will not be started.
282
- * */
283
- #include " nvs_flash.h"
284
-
285
- extern " C" void initWiFi ()
286
- {
287
- wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT ();
288
- nvs_flash_init ();
289
- tcpip_adapter_init ();
290
- esp_event_loop_init (WiFiGenericClass::_eventCallback, NULL );
291
- esp_wifi_init (&cfg);
292
- }
293
-
294
- void startWiFi ()
295
- {
296
- esp_err_t err;
297
-
298
- err = esp_wifi_start ();
299
- if (err != ESP_OK) {
300
- log_e (" esp_wifi_start: %d" , err);
301
- return ;
302
- }
303
- #if CONFIG_AUTOCONNECT_WIFI
304
- wifi_mode_t mode = WIFI_MODE_NULL;
305
- bool auto_connect = false ;
306
-
307
- err = esp_wifi_get_mode (&mode);
308
- if (err != ESP_OK) {
309
- log_e (" esp_wifi_get_mode: %d" , err);
310
- return ;
311
- }
312
-
313
- err = esp_wifi_get_auto_connect (&auto_connect);
314
- if ((mode == WIFI_MODE_STA || mode == WIFI_MODE_APSTA) && auto_connect) {
315
- err = esp_wifi_connect ();
316
- if (err != ESP_OK) {
317
- log_e (" esp_wifi_connect: %d" , err);
318
- }
319
- }
320
- #endif
321
- }
322
-
0 commit comments