diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp index ed8697813..d260be4d8 100644 --- a/libraries/WiFi/src/WiFi.cpp +++ b/libraries/WiFi/src/WiFi.cpp @@ -314,6 +314,18 @@ unsigned long arduino::WiFiClass::getTime() { return 0; } +void arduino::WiFiClass::setFeedWatchdogFunc(ArduinoPortentaH7WiFiFeedWatchdogFuncPtr func) +{ + _feed_watchdog_func = func; +} + +void arduino::WiFiClass::feedWatchdog() +{ + if (_feed_watchdog_func) + _feed_watchdog_func(); +} + + #if defined(COMPONENT_4343W) #include "QSPIFBlockDevice.h" diff --git a/libraries/WiFi/src/WiFi.h b/libraries/WiFi/src/WiFi.h index 18ca91daf..026055643 100644 --- a/libraries/WiFi/src/WiFi.h +++ b/libraries/WiFi/src/WiFi.h @@ -49,9 +49,12 @@ extern "C" { #define DEFAULT_AP_CHANNEL 6 #endif +#define ARDUINO_PORTENTA_H7_WIFI_HAS_FEED_WATCHDOG_FUNC + namespace arduino { typedef void* (*voidPrtFuncPtr)(void); +typedef void (*ArduinoPortentaH7WiFiFeedWatchdogFuncPtr)(void); class WiFiClass { @@ -296,6 +299,9 @@ class WiFiClass NetworkInterface *getNetwork(); + void setFeedWatchdogFunc(ArduinoPortentaH7WiFiFeedWatchdogFuncPtr func); + void feedWatchdog(); + private: EMACInterface* _softAP = nullptr; @@ -316,6 +322,7 @@ class WiFiClass bool isVisible(const char* ssid); arduino::IPAddress ipAddressFromSocketAddress(SocketAddress socketAddress); SocketAddress socketAddressFromIpAddress(arduino::IPAddress ip, uint16_t port); + ArduinoPortentaH7WiFiFeedWatchdogFuncPtr _feed_watchdog_func = 0; }; } diff --git a/libraries/WiFi/src/WiFiHelpers.cpp b/libraries/WiFi/src/WiFiHelpers.cpp index 3d1e35cc8..ed9301233 100644 --- a/libraries/WiFi/src/WiFiHelpers.cpp +++ b/libraries/WiFi/src/WiFiHelpers.cpp @@ -23,6 +23,7 @@ static FILE* target; void body_callback(const char* data, uint32_t data_len) { + WiFi.feedWatchdog(); fwrite(data, 1, data_len, target); }