@@ -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" 
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" 
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" 
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" 
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