Skip to content

Commit f648ad7

Browse files
committed
Allow WiFi Event Callback to read the event info
Helps in cases where Event Info is needed (WPS and others)
1 parent db79c2e commit f648ad7

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

libraries/WiFi/src/WiFiGeneric.cpp

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ static bool espWiFiStop(){
120120
// ------------------------------------------------- Generic WiFi function -----------------------------------------------
121121
// -----------------------------------------------------------------------------------------------------------------------
122122

123+
typedef struct {
124+
WiFiEventCb cb;
125+
WiFiEventFullCb fcb;
126+
system_event_id_t event;
127+
} WiFiEventCbList_t;
128+
123129
// arduino dont like std::vectors move static here
124130
static std::vector<WiFiEventCbList_t> cbEventList;
125131

@@ -143,6 +149,19 @@ void WiFiGenericClass::onEvent(WiFiEventCb cbEvent, system_event_id_t event)
143149
}
144150
WiFiEventCbList_t newEventHandler;
145151
newEventHandler.cb = cbEvent;
152+
newEventHandler.fcb = NULL;
153+
newEventHandler.event = event;
154+
cbEventList.push_back(newEventHandler);
155+
}
156+
157+
void WiFiGenericClass::onEvent(WiFiEventFullCb cbEvent, system_event_id_t event)
158+
{
159+
if(!cbEvent) {
160+
return;
161+
}
162+
WiFiEventCbList_t newEventHandler;
163+
newEventHandler.cb = NULL;
164+
newEventHandler.fcb = cbEvent;
146165
newEventHandler.event = event;
147166
cbEventList.push_back(newEventHandler);
148167
}
@@ -166,6 +185,20 @@ void WiFiGenericClass::removeEvent(WiFiEventCb cbEvent, system_event_id_t event)
166185
}
167186
}
168187

188+
void WiFiGenericClass::removeEvent(WiFiEventFullCb cbEvent, system_event_id_t event)
189+
{
190+
if(!cbEvent) {
191+
return;
192+
}
193+
194+
for(uint32_t i = 0; i < cbEventList.size(); i++) {
195+
WiFiEventCbList_t entry = cbEventList[i];
196+
if(entry.fcb == cbEvent && entry.event == event) {
197+
cbEventList.erase(cbEventList.begin() + i);
198+
}
199+
}
200+
}
201+
169202
/**
170203
* callback for WiFi events
171204
* @param arg
@@ -208,9 +241,13 @@ esp_err_t WiFiGenericClass::_eventCallback(void *arg, system_event_t *event)
208241

209242
for(uint32_t i = 0; i < cbEventList.size(); i++) {
210243
WiFiEventCbList_t entry = cbEventList[i];
211-
if(entry.cb) {
244+
if(entry.cb || entry.fcb) {
212245
if(entry.event == (system_event_id_t) event->event_id || entry.event == SYSTEM_EVENT_MAX) {
213-
entry.cb((system_event_id_t) event->event_id);
246+
if(entry.cb){
247+
entry.cb((system_event_id_t) event->event_id);
248+
} else {
249+
entry.fcb((system_event_id_t) event->event_id, (system_event_info_t) event->event_info);
250+
}
214251
}
215252
}
216253
}

libraries/WiFi/src/WiFiGeneric.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@
2828
#include <esp_event_loop.h>
2929

3030
typedef void (*WiFiEventCb)(system_event_id_t event);
31-
32-
typedef struct {
33-
WiFiEventCb cb;
34-
system_event_id_t event;
35-
} WiFiEventCbList_t;
31+
typedef void (*WiFiEventFullCb)(system_event_id_t event, system_event_info_t info);
3632

3733
class WiFiGenericClass
3834
{
@@ -41,7 +37,9 @@ class WiFiGenericClass
4137
WiFiGenericClass();
4238

4339
void onEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX);
40+
void onEvent(WiFiEventFullCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX);
4441
void removeEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX);
42+
void removeEvent(WiFiEventFullCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX);
4543

4644
int32_t channel(void);
4745

0 commit comments

Comments
 (0)