From cf77427b9d936fd5bbcabc13b16452cf28c56d06 Mon Sep 17 00:00:00 2001 From: Yusuf YILDIRIM <122603576+MYusufY@users.noreply.github.com> Date: Sat, 30 Nov 2024 21:08:13 +0300 Subject: [PATCH 1/3] added non blocking delayless localIP function --- libraries/WiFiS3/src/WiFi.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libraries/WiFiS3/src/WiFi.cpp b/libraries/WiFiS3/src/WiFi.cpp index 7e73b94f1..0a9992ce2 100644 --- a/libraries/WiFiS3/src/WiFi.cpp +++ b/libraries/WiFiS3/src/WiFi.cpp @@ -356,6 +356,29 @@ IPAddress CWifi::localIP() { return local_IP; } +IPAddress CWifi::localIPNonBlocking(unsigned long timeoutMs) { + modem.begin(); + string res = ""; + unsigned long start = millis(); + IPAddress local_IP(0, 0, 0, 0); + + while (local_IP == IPAddress(0, 0, 0, 0) && millis() - start < timeoutMs) { + if (modem.write(string(PROMPT(_MODE)), res, "%s", CMD_READ(_MODE))) { + if (atoi(res.c_str()) == 1) { + if (modem.write(string(PROMPT(_IPSTA)), res, "%s%d\\r\\n", CMD_WRITE(_IPSTA), IP_ADDR)) { + local_IP.fromString(res.c_str()); + } + } else if (atoi(res.c_str()) == 2) { + if (modem.write(string(PROMPT(_IPSOFTAP)), res, CMD(_IPSOFTAP))) { + local_IP.fromString(res.c_str()); + } + } + } + } + return local_IP; +} + + /* -------------------------------------------------------------------------- */ IPAddress CWifi::subnetMask() { /* -------------------------------------------------------------------------- */ From 72ba7e5a2d1857d0daec25bb6e0dc9da488d7ae0 Mon Sep 17 00:00:00 2001 From: Yusuf YILDIRIM <122603576+MYusufY@users.noreply.github.com> Date: Sun, 1 Dec 2024 09:33:10 +0300 Subject: [PATCH 2/3] fix return paths in FifoBuffer functions --- cores/arduino/FifoBuffer.h | 42 ++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/cores/arduino/FifoBuffer.h b/cores/arduino/FifoBuffer.h index 298304808..a3a036b7a 100644 --- a/cores/arduino/FifoBuffer.h +++ b/cores/arduino/FifoBuffer.h @@ -27,7 +27,6 @@ namespace arduino { - #define FIFO_DEFAULT_SIZE 64 template @@ -38,28 +37,30 @@ class FifoBuffer synchronized { return (uint32_t)(index + 1) % size; } + return 0; // Fallback return } + inline bool isEmpty() const { return (_numElems == 0); } - T _aucBuffer[size] ; - uint32_t _iHead ; - uint32_t _iTail ; + T _aucBuffer[size]; + uint32_t _iHead; + uint32_t _iTail; uint32_t _numElems; + public: /* ---------------------------------------------------------------------- */ - FifoBuffer( void ) { - memset( _aucBuffer, 0, size * sizeof(T) ) ; + FifoBuffer(void) { + memset(_aucBuffer, 0, size * sizeof(T)); clear(); } /* ---------------------------------------------------------------------- */ - bool store( T c ) { + bool store(T c) { bool rv = true; synchronized { if (!isFull()) { - _aucBuffer[_iHead] = c ; + _aucBuffer[_iHead] = c; _iHead = nextIndex(_iHead); _numElems++; - } - else { + } else { rv = false; } } @@ -72,36 +73,39 @@ class FifoBuffer _numElems = 0; } /* ---------------------------------------------------------------------- */ - T read(bool *read_ok) { + T read(bool* read_ok) { *read_ok = true; if (isEmpty()) { *read_ok = false; - return _aucBuffer[0]; + return T(); // Return default-constructed object } synchronized { T value = _aucBuffer[_iTail]; _iTail = nextIndex(_iTail); _numElems--; - + return value; } + return T(); // Fallback return } /* ---------------------------------------------------------------------- */ int available() { synchronized { return _numElems; } + return 0; // Fallback return } /* ---------------------------------------------------------------------- */ int freePositions() { synchronized { return (size - _numElems); } + return 0; // Fallback return } /* ---------------------------------------------------------------------- */ T peek() { if (isEmpty()) - return -1; + return T(); // Return default-constructed object return _aucBuffer[_iTail]; } @@ -110,15 +114,13 @@ class FifoBuffer synchronized { return (_numElems == size); } + return false; // Fallback return } /* ---------------------------------------------------------------------- */ - uint32_t lenght() const { return size; } - - + uint32_t lenght() const { return size; } }; - -} //namespace arduino +} // namespace arduino #endif /* _ARDUINO_FIFO_BUFFER_DH_ */ -#endif /* __cplusplus */ \ No newline at end of file +#endif /* __cplusplus */ From 613ce96c8c06a7c0e11732d5db4b25d1951fc691 Mon Sep 17 00:00:00 2001 From: Yusuf YILDIRIM <122603576+MYusufY@users.noreply.github.com> Date: Sun, 1 Dec 2024 09:47:26 +0300 Subject: [PATCH 3/3] add localIPNonBlocking to WiFi.h --- libraries/WiFiS3/src/WiFi.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/WiFiS3/src/WiFi.h b/libraries/WiFiS3/src/WiFi.h index 2b733cfab..c28135fc8 100644 --- a/libraries/WiFiS3/src/WiFi.h +++ b/libraries/WiFiS3/src/WiFi.h @@ -175,7 +175,8 @@ class CWifi { * return: IP address value */ IPAddress localIP(); - + IPAddress localIPNonBlocking(unsigned long timeoutMs); + /* * Get the interface subnet mask address. *