Skip to content

Commit 0cdfb0b

Browse files
authored
Add support for WiFi long range mode (#3190)
* Add support for WiFi long range mode * Update WiFiGeneric.cpp
1 parent e506136 commit 0cdfb0b

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

Diff for: libraries/WiFi/src/WiFiGeneric.cpp

+33-9
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ extern "C" {
4747

4848
#include "esp32-hal-log.h"
4949
#include <vector>
50-
5150
#include "sdkconfig.h"
5251

5352
static xQueueHandle _network_event_queue;
@@ -133,24 +132,19 @@ static bool wifiLowLevelDeinit(){
133132

134133
static 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;
190184
static std::vector<WiFiEventCbList_t> cbEventList;
191185

192186
bool WiFiGenericClass::_persistent = true;
187+
bool WiFiGenericClass::_long_range = false;
193188
wifi_mode_t WiFiGenericClass::_forceSleepLastMode = WIFI_MODE_NULL;
194189

195190
WiFiGenericClass::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
*/
505529
wifi_mode_t WiFiGenericClass::getMode()
506530
{
507-
if(!_esp_wifi_started){
531+
if(!lowLevelInitDone){
508532
return WIFI_MODE_NULL;
509533
}
510534
wifi_mode_t mode;

Diff for: libraries/WiFi/src/WiFiGeneric.h

+2
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class WiFiGenericClass
8383
int32_t channel(void);
8484

8585
void persistent(bool persistent);
86+
void enableLongRange(bool enable);
8687

8788
static bool mode(wifi_mode_t);
8889
static wifi_mode_t getMode();
@@ -100,6 +101,7 @@ class WiFiGenericClass
100101

101102
protected:
102103
static bool _persistent;
104+
static bool _long_range;
103105
static wifi_mode_t _forceSleepLastMode;
104106

105107
static int setStatusBits(int bits);

0 commit comments

Comments
 (0)