@@ -47,7 +47,6 @@ extern "C" {
4747
4848#include " esp32-hal-log.h"
4949#include < vector>
50-
5150#include " sdkconfig.h"
5251
5352static xQueueHandle _network_event_queue;
@@ -133,24 +132,19 @@ static bool wifiLowLevelDeinit(){
133132
134133static bool _esp_wifi_started = false ;
135134
136- static bool espWiFiStart (bool persistent ){
135+ static bool espWiFiStart (){
137136 if (_esp_wifi_started){
138137 return true ;
139138 }
140- if (!wifiLowLevelInit (persistent)){
141- return false ;
142- }
143139 esp_err_t err = esp_wifi_start ();
144140 if (err != ESP_OK) {
145141 log_e (" esp_wifi_start %d" , err);
146- wifiLowLevelDeinit ();
147142 return false ;
148143 }
149144 _esp_wifi_started = true ;
150145 system_event_t event;
151146 event.event_id = SYSTEM_EVENT_WIFI_READY;
152147 WiFiGenericClass::_eventCallback (nullptr , &event);
153-
154148 return true ;
155149}
156150
@@ -190,6 +184,7 @@ wifi_event_id_t WiFiEventCbList::current_id = 1;
190184static std::vector<WiFiEventCbList_t> cbEventList;
191185
192186bool WiFiGenericClass::_persistent = true ;
187+ bool WiFiGenericClass::_long_range = false ;
193188wifi_mode_t WiFiGenericClass::_forceSleepLastMode = WIFI_MODE_NULL;
194189
195190WiFiGenericClass::WiFiGenericClass ()
@@ -471,6 +466,16 @@ void WiFiGenericClass::persistent(bool persistent)
471466}
472467
473468
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+
474479/* *
475480 * set new mode
476481 * @param m WiFiMode_t
@@ -482,7 +487,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
482487 return true ;
483488 }
484489 if (!cm && m){
485- if (!espWiFiStart (_persistent)){
490+ if (!wifiLowLevelInit (_persistent)){
486491 return false ;
487492 }
488493 } else if (cm && !m){
@@ -495,6 +500,25 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
495500 log_e (" Could not set mode! %d" , err);
496501 return false ;
497502 }
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+ }
498522 return true ;
499523}
500524
@@ -504,7 +528,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
504528 */
505529wifi_mode_t WiFiGenericClass::getMode ()
506530{
507- if (!_esp_wifi_started ){
531+ if (!lowLevelInitDone ){
508532 return WIFI_MODE_NULL;
509533 }
510534 wifi_mode_t mode;
0 commit comments