@@ -120,6 +120,12 @@ static bool espWiFiStop(){
120
120
// ------------------------------------------------- Generic WiFi function -----------------------------------------------
121
121
// -----------------------------------------------------------------------------------------------------------------------
122
122
123
+ typedef struct {
124
+ WiFiEventCb cb;
125
+ WiFiEventFullCb fcb;
126
+ system_event_id_t event;
127
+ } WiFiEventCbList_t;
128
+
123
129
// arduino dont like std::vectors move static here
124
130
static std::vector<WiFiEventCbList_t> cbEventList;
125
131
@@ -143,6 +149,19 @@ void WiFiGenericClass::onEvent(WiFiEventCb cbEvent, system_event_id_t event)
143
149
}
144
150
WiFiEventCbList_t newEventHandler;
145
151
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;
146
165
newEventHandler.event = event;
147
166
cbEventList.push_back (newEventHandler);
148
167
}
@@ -166,6 +185,20 @@ void WiFiGenericClass::removeEvent(WiFiEventCb cbEvent, system_event_id_t event)
166
185
}
167
186
}
168
187
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
+
169
202
/* *
170
203
* callback for WiFi events
171
204
* @param arg
@@ -208,9 +241,13 @@ esp_err_t WiFiGenericClass::_eventCallback(void *arg, system_event_t *event)
208
241
209
242
for (uint32_t i = 0 ; i < cbEventList.size (); i++) {
210
243
WiFiEventCbList_t entry = cbEventList[i];
211
- if (entry.cb ) {
244
+ if (entry.cb || entry. fcb ) {
212
245
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
+ }
214
251
}
215
252
}
216
253
}
0 commit comments