Add support for WiFi long range mode (#3190)
* Add support for WiFi long range mode * Update WiFiGeneric.cpp
This commit is contained in:
		
							parent
							
								
									e50613622e
								
							
						
					
					
						commit
						0cdfb0b193
					
				| @ -47,7 +47,6 @@ extern "C" { | ||||
| 
 | ||||
| #include "esp32-hal-log.h" | ||||
| #include <vector> | ||||
| 
 | ||||
| #include "sdkconfig.h" | ||||
| 
 | ||||
| static xQueueHandle _network_event_queue; | ||||
| @ -133,24 +132,19 @@ static bool wifiLowLevelDeinit(){ | ||||
| 
 | ||||
| static bool _esp_wifi_started = false; | ||||
| 
 | ||||
| static bool espWiFiStart(bool persistent){ | ||||
| static bool espWiFiStart(){ | ||||
|     if(_esp_wifi_started){ | ||||
|         return true; | ||||
|     } | ||||
|     if(!wifiLowLevelInit(persistent)){ | ||||
|         return false; | ||||
|     } | ||||
|     esp_err_t err = esp_wifi_start(); | ||||
|     if (err != ESP_OK) { | ||||
|         log_e("esp_wifi_start %d", err); | ||||
|         wifiLowLevelDeinit(); | ||||
|         return false; | ||||
|     } | ||||
|     _esp_wifi_started = true; | ||||
|     system_event_t event; | ||||
|     event.event_id = SYSTEM_EVENT_WIFI_READY; | ||||
|     WiFiGenericClass::_eventCallback(nullptr, &event); | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| @ -190,6 +184,7 @@ wifi_event_id_t WiFiEventCbList::current_id = 1; | ||||
| static std::vector<WiFiEventCbList_t> cbEventList; | ||||
| 
 | ||||
| bool WiFiGenericClass::_persistent = true; | ||||
| bool WiFiGenericClass::_long_range = false; | ||||
| wifi_mode_t WiFiGenericClass::_forceSleepLastMode = WIFI_MODE_NULL; | ||||
| 
 | ||||
| WiFiGenericClass::WiFiGenericClass() | ||||
| @ -471,6 +466,16 @@ void WiFiGenericClass::persistent(bool persistent) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * enable WiFi long range mode | ||||
|  * @param enable | ||||
|  */ | ||||
| void WiFiGenericClass::enableLongRange(bool enable) | ||||
| { | ||||
|     _long_range = enable; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * set new mode | ||||
|  * @param m WiFiMode_t | ||||
| @ -482,7 +487,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m) | ||||
|         return true; | ||||
|     } | ||||
|     if(!cm && m){ | ||||
|         if(!espWiFiStart(_persistent)){ | ||||
|         if(!wifiLowLevelInit(_persistent)){ | ||||
|             return false; | ||||
|         } | ||||
|     } else if(cm && !m){ | ||||
| @ -495,6 +500,25 @@ bool WiFiGenericClass::mode(wifi_mode_t m) | ||||
|         log_e("Could not set mode! %d", err); | ||||
|         return false; | ||||
|     } | ||||
|     if(_long_range){ | ||||
|         if(m & WIFI_MODE_STA){ | ||||
|             err = esp_wifi_set_protocol(WIFI_IF_STA, WIFI_PROTOCOL_LR); | ||||
|             if(err != ESP_OK){ | ||||
|                 log_e("Could not enable long range on STA! %d", err); | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|         if(m & WIFI_MODE_AP){ | ||||
|             err = esp_wifi_set_protocol(WIFI_IF_AP, WIFI_PROTOCOL_LR); | ||||
|             if(err != ESP_OK){ | ||||
|                 log_e("Could not enable long range on AP! %d", err); | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     if(!espWiFiStart()){ | ||||
|         return false; | ||||
|     } | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| @ -504,7 +528,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m) | ||||
|  */ | ||||
| wifi_mode_t WiFiGenericClass::getMode() | ||||
| { | ||||
|     if(!_esp_wifi_started){ | ||||
|     if(!lowLevelInitDone){ | ||||
|         return WIFI_MODE_NULL; | ||||
|     } | ||||
|     wifi_mode_t mode; | ||||
|  | ||||
| @ -83,6 +83,7 @@ class WiFiGenericClass | ||||
|     int32_t channel(void); | ||||
| 
 | ||||
|     void persistent(bool persistent); | ||||
|     void enableLongRange(bool enable); | ||||
| 
 | ||||
|     static bool mode(wifi_mode_t); | ||||
|     static wifi_mode_t getMode(); | ||||
| @ -100,6 +101,7 @@ class WiFiGenericClass | ||||
| 
 | ||||
|   protected: | ||||
|     static bool _persistent; | ||||
|     static bool _long_range; | ||||
|     static wifi_mode_t _forceSleepLastMode; | ||||
| 
 | ||||
|     static int setStatusBits(int bits); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user