Skip to content

Commit 3625397

Browse files
committed
Use WiFi.mode to enable/disable the Network Interfaces
1 parent 7b29bac commit 3625397

File tree

5 files changed

+118
-38
lines changed

5 files changed

+118
-38
lines changed

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

+45-18
Original file line numberDiff line numberDiff line change
@@ -157,37 +157,21 @@ APClass::~APClass(){
157157
_ap_network_if = NULL;
158158
}
159159

160-
bool APClass::begin(){
161-
162-
Network.begin();
160+
bool APClass::onEnable(){
163161
if(_ap_ev_instance == NULL && esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &_ap_event_cb, this, &_ap_ev_instance)){
164162
log_e("event_handler_instance_register for WIFI_EVENT Failed!");
165163
return false;
166164
}
167165
if(_esp_netif == NULL){
168166
Network.onSysEvent(_onApArduinoEvent);
169-
}
170-
171-
if(!WiFi.enableAP(true)) {
172-
log_e("AP enable failed!");
173-
return false;
174-
}
175-
176-
// attach events and esp_netif here
177-
if(_esp_netif == NULL){
178167
_esp_netif = get_esp_interface_netif(ESP_IF_WIFI_AP);
179168
/* attach to receive events */
180169
initNetif(ESP_NETIF_ID_AP);
181170
}
182-
183171
return true;
184172
}
185173

186-
bool APClass::end(){
187-
if(!WiFi.enableAP(false)) {
188-
log_e("AP disable failed!");
189-
return false;
190-
}
174+
bool APClass::onDisable(){
191175
Network.removeEvent(_onApArduinoEvent);
192176
// we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
193177
// That would be done by WiFi.enableAP(false) if STA is not enabled, or when it gets disabled
@@ -200,6 +184,49 @@ bool APClass::end(){
200184
return true;
201185
}
202186

187+
bool APClass::begin(){
188+
189+
// Network.begin();
190+
// if(_ap_ev_instance == NULL && esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &_ap_event_cb, this, &_ap_ev_instance)){
191+
// log_e("event_handler_instance_register for WIFI_EVENT Failed!");
192+
// return false;
193+
// }
194+
// if(_esp_netif == NULL){
195+
// Network.onSysEvent(_onApArduinoEvent);
196+
// }
197+
198+
if(!WiFi.enableAP(true)) {
199+
log_e("AP enable failed!");
200+
return false;
201+
}
202+
203+
// // attach events and esp_netif here
204+
// if(_esp_netif == NULL){
205+
// _esp_netif = get_esp_interface_netif(ESP_IF_WIFI_AP);
206+
// /* attach to receive events */
207+
// initNetif(ESP_NETIF_ID_AP);
208+
// }
209+
210+
return true;
211+
}
212+
213+
bool APClass::end(){
214+
if(!WiFi.enableAP(false)) {
215+
log_e("AP disable failed!");
216+
return false;
217+
}
218+
// Network.removeEvent(_onApArduinoEvent);
219+
// // we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
220+
// // That would be done by WiFi.enableAP(false) if STA is not enabled, or when it gets disabled
221+
// _esp_netif = NULL;
222+
// destroyNetif();
223+
// if(_ap_ev_instance != NULL){
224+
// esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &_ap_event_cb);
225+
// _ap_ev_instance = NULL;
226+
// }
227+
return true;
228+
}
229+
203230
bool APClass::create(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection, bool ftm_responder){
204231
if(!ssid || *ssid == 0) {
205232
// fail SSID missing

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

+45-18
Original file line numberDiff line numberDiff line change
@@ -288,28 +288,55 @@ bool STAClass::bandwidth(wifi_bandwidth_t bandwidth) {
288288
return true;
289289
}
290290

291-
bool STAClass::begin(bool tryConnect){
292-
293-
Network.begin();
291+
bool STAClass::onEnable(){
294292
if(_sta_ev_instance == NULL && esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &_sta_event_cb, this, &_sta_ev_instance)){
295293
log_e("event_handler_instance_register for WIFI_EVENT Failed!");
296294
return false;
297295
}
298296
if(_esp_netif == NULL){
299297
Network.onSysEvent(_onStaArduinoEvent);
298+
_esp_netif = get_esp_interface_netif(ESP_IF_WIFI_STA);
299+
/* attach to receive events */
300+
initNetif(ESP_NETIF_ID_STA);
301+
}
302+
return true;
303+
}
304+
305+
bool STAClass::onDisable(){
306+
Network.removeEvent(_onStaArduinoEvent);
307+
// we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
308+
// That would be done by WiFi.enableSTA(false) if AP is not enabled, or when it gets disabled
309+
_esp_netif = NULL;
310+
destroyNetif();
311+
if(_sta_ev_instance != NULL){
312+
esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &_sta_event_cb);
313+
_sta_ev_instance = NULL;
300314
}
315+
return true;
316+
}
317+
318+
bool STAClass::begin(bool tryConnect){
319+
320+
// Network.begin();
321+
// if(_sta_ev_instance == NULL && esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &_sta_event_cb, this, &_sta_ev_instance)){
322+
// log_e("event_handler_instance_register for WIFI_EVENT Failed!");
323+
// return false;
324+
// }
325+
// if(_esp_netif == NULL){
326+
// Network.onSysEvent(_onStaArduinoEvent);
327+
// }
301328

302329
if(!WiFi.enableSTA(true)) {
303330
log_e("STA enable failed!");
304331
return false;
305332
}
306333

307-
// attach events and esp_netif here
308-
if(_esp_netif == NULL){
309-
_esp_netif = get_esp_interface_netif(ESP_IF_WIFI_STA);
310-
/* attach to receive events */
311-
initNetif(ESP_NETIF_ID_STA);
312-
}
334+
// // attach events and esp_netif here
335+
// if(_esp_netif == NULL){
336+
// _esp_netif = get_esp_interface_netif(ESP_IF_WIFI_STA);
337+
// /* attach to receive events */
338+
// initNetif(ESP_NETIF_ID_STA);
339+
// }
313340

314341
if(tryConnect){
315342
return connect();
@@ -322,15 +349,15 @@ bool STAClass::end(){
322349
log_e("STA disable failed!");
323350
return false;
324351
}
325-
Network.removeEvent(_onStaArduinoEvent);
326-
// we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
327-
// That would be done by WiFi.enableSTA(false) if AP is not enabled, or when it gets disabled
328-
_esp_netif = NULL;
329-
destroyNetif();
330-
if(_sta_ev_instance != NULL){
331-
esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &_sta_event_cb);
332-
_sta_ev_instance = NULL;
333-
}
352+
// Network.removeEvent(_onStaArduinoEvent);
353+
// // we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
354+
// // That would be done by WiFi.enableSTA(false) if AP is not enabled, or when it gets disabled
355+
// _esp_netif = NULL;
356+
// destroyNetif();
357+
// if(_sta_ev_instance != NULL){
358+
// esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &_sta_event_cb);
359+
// _sta_ev_instance = NULL;
360+
// }
334361
return true;
335362
}
336363

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

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ class APClass: public NetworkInterface {
5555

5656
protected:
5757
size_t printDriverInfo(Print & out) const;
58+
59+
friend class WiFiGeneric;
60+
bool onEnable();
61+
bool onDisable();
5862
};
5963

6064
// ----------------------------------------------------------------------------------------------

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

+20-2
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,25 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
471471
return false;
472472
}
473473
Network.onSysEvent(_eventCallback);
474-
} else if(cm && !m){
474+
}
475+
476+
if(((m & WIFI_MODE_STA) != 0) && ((cm & WIFI_MODE_STA) == 0)){
477+
// we are enabling STA interface
478+
WiFi.STA.onEnable();
479+
} else if(((m & WIFI_MODE_STA) == 0) && ((cm & WIFI_MODE_STA) != 0)){
480+
// we are disabling STA interface
481+
WiFi.STA.onDisable();
482+
}
483+
484+
if(((m & WIFI_MODE_AP) != 0) && ((cm & WIFI_MODE_AP) == 0)){
485+
// we are enabling AP interface
486+
WiFi.AP.onEnable();
487+
} else if(((m & WIFI_MODE_AP) == 0) && ((cm & WIFI_MODE_AP) != 0)){
488+
// we are disabling AP interface
489+
WiFi.AP.onDisable();
490+
}
491+
492+
if(cm && !m){
475493
// Turn OFF WiFi
476494
if(!espWiFiStop()){
477495
return false;
@@ -481,7 +499,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
481499
}
482500

483501
esp_err_t err;
484-
if(m & WIFI_MODE_STA){
502+
if(((m & WIFI_MODE_STA) != 0) && ((cm & WIFI_MODE_STA) == 0)){
485503
err = esp_netif_set_hostname(esp_netifs[ESP_IF_WIFI_STA], NetworkManager::getHostname());
486504
if(err){
487505
log_e("Could not set hostname! %d", err);

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

+4
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ class STAClass: public NetworkInterface {
9191
wl_status_t _status;
9292

9393
size_t printDriverInfo(Print & out) const;
94+
95+
friend class WiFiGeneric;
96+
bool onEnable();
97+
bool onDisable();
9498
};
9599

96100
// ----------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)