@@ -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
124130static 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 }
0 commit comments