8000 Add support for WiFi long range mode (#3190) · MartinHruza/arduino-esp32@0cdfb0b · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0cdfb0b

Browse files
authored
Add support for WiFi long range mode (espressif#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

libraries/WiFi/src/WiFiGeneric.cpp

Lines changed: 33 additions & 9 deletions
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;

libraries/WiFi/src/WiFiGeneric.h

Lines changed: 2 additions & 0 deletions
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)
0