@@ -47,7 +47,6 @@ extern "C" {
47
47
48
48
#include " esp32-hal-log.h"
49
49
#include < vector>
50
-
51
50
#include " sdkconfig.h"
52
51
53
52
static xQueueHandle _network_event_queue;
@@ -133,24 +132,19 @@ static bool wifiLowLevelDeinit(){
133
132
134
133
static bool _esp_wifi_started = false ;
135
134
136
- static bool espWiFiStart (bool persistent ){
135
+ static bool espWiFiStart (){
137
136
if (_esp_wifi_started){
138
137
return true ;
139
138
}
140
- if (!wifiLowLevelInit (persistent)){
141
- return false ;
142
- }
143
139
esp_err_t err = esp_wifi_start ();
144
140
if (err != ESP_OK) {
145
141
log_e (" esp_wifi_start %d" , err);
146
- wifiLowLevelDeinit ();
147
142
return false ;
148
143
}
149
144
_esp_wifi_started = true ;
150
145
system_event_t event;
151
146
event.event_id = SYSTEM_EVENT_WIFI_READY;
152
147
WiFiGenericClass::_eventCallback (nullptr , &event);
153
-
154
148
return true ;
155
149
}
156
150
@@ -190,6 +184,7 @@ wifi_event_id_t WiFiEventCbList::current_id = 1;
190
184
static std::vector<WiFiEventCbList_t> cbEventList;
191
185
192
186
bool WiFiGenericClass::_persistent = true ;
187
+ bool WiFiGenericClass::_long_range = false ;
193
188
wifi_mode_t WiFiGenericClass::_forceSleepLastMode = WIFI_MODE_NULL;
194
189
195
190
WiFiGenericClass::WiFiGenericClass ()
@@ -471,6 +466,16 @@ void WiFiGenericClass::persistent(bool persistent)
471
466
}
472
467
473
468
469
+ /* *
470
+ * enable WiFi long range mode
471
+ * @param enable
472
+ */
473
+ void WiFiGenericClass::enableLongRange (bool enable)
474
+ {
475
+ _long_range = enable;
476
+ }
477
+
478
+
474
479
/* *
475
480
* set new mode
476
481
* @param m WiFiMode_t
@@ -482,7 +487,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
482
487
return true ;
483
488
}
484
489
if (!cm && m){
485
- if (!espWiFiStart (_persistent)){
490
+ if (!wifiLowLevelInit (_persistent)){
486
491
return false ;
487
492
}
488
493
} else if (cm && !m){
@@ -495,6 +500,25 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
495
500
log_e (" Could not set mode! %d" , err);
496
501
return false ;
497
502
}
503
+ if (_long_range){
504
+ if (m & WIFI_MODE_STA){
505
+ err = esp_wifi_set_protocol (WIFI_IF_STA, WIFI_PROTOCOL_LR);
506
+ if (err != ESP_OK){
507
+ log_e (" Could not enable long range on STA! %d" , err);
508
+ return false ;
509
+ }
510
+ }
511
+ if (m & WIFI_MODE_AP){
512
+ err = esp_wifi_set_protocol (WIFI_IF_AP, WIFI_PROTOCOL_LR);
513
+ if (err != ESP_OK){
514
+ log_e (" Could not enable long range on AP! %d" , err);
515
+ return false ;
516
+ }
517
+ }
518
+ }
519
+ if (!espWiFiStart ()){
520
+ return false ;
521
+ }
498
522
return true ;
499
523
}
500
524
@@ -504,7 +528,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
504
528
*/
505
529
wifi_mode_t WiFiGenericClass::getMode ()
506
530
{
507
- if (!_esp_wifi_started ){
531
+ if (!lowLevelInitDone ){
508
532
return WIFI_MODE_NULL;
509
533
}
510
534
wifi_mode_t mode;
0 commit comments