From 76db8986584926ad20160b1f9792e07d1eb8f11d Mon Sep 17 00:00:00 2001 From: pennam Date: Thu, 30 Jan 2025 10:29:43 +0100 Subject: [PATCH 1/3] Modem: check wifi firmware softreset response to set initialization done --- libraries/WiFiS3/src/Modem.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/WiFiS3/src/Modem.cpp b/libraries/WiFiS3/src/Modem.cpp index 7aa34391a..bbdb2b073 100644 --- a/libraries/WiFiS3/src/Modem.cpp +++ b/libraries/WiFiS3/src/Modem.cpp @@ -34,10 +34,9 @@ void ModemClass::begin(int badurate){ /* -------------------------------------------------------------------------- */ if(_serial != nullptr && !beginned) { _serial->begin(badurate); - beginned = true; string res = ""; _serial->flush(); - modem.write(string(PROMPT(_SOFTRESETWIFI)),res, "%s" , CMD(_SOFTRESETWIFI)); + beginned = modem.write(string(PROMPT(_SOFTRESETWIFI)),res, "%s" , CMD(_SOFTRESETWIFI)); } } From 836caebfe9a8c24d21f4eb326421c42a30fe8387 Mon Sep 17 00:00:00 2001 From: pennam Date: Thu, 30 Jan 2025 10:51:44 +0100 Subject: [PATCH 2/3] Modem: reduce wait time begin --- libraries/WiFiS3/src/Modem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/WiFiS3/src/Modem.cpp b/libraries/WiFiS3/src/Modem.cpp index bbdb2b073..597269633 100644 --- a/libraries/WiFiS3/src/Modem.cpp +++ b/libraries/WiFiS3/src/Modem.cpp @@ -36,7 +36,9 @@ void ModemClass::begin(int badurate){ _serial->begin(badurate); string res = ""; _serial->flush(); + modem.timeout(500); beginned = modem.write(string(PROMPT(_SOFTRESETWIFI)),res, "%s" , CMD(_SOFTRESETWIFI)); + modem.timeout(MODEM_TIMEOUT); } } From 3ffc324c5e3cfcee7bbef1117926446805998d1c Mon Sep 17 00:00:00 2001 From: pennam Date: Thu, 30 Jan 2025 10:54:13 +0100 Subject: [PATCH 3/3] Modem: add retry if begin fails --- libraries/WiFiS3/src/Modem.cpp | 7 +++++-- libraries/WiFiS3/src/Modem.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/WiFiS3/src/Modem.cpp b/libraries/WiFiS3/src/Modem.cpp index 597269633..d20b1bc7d 100644 --- a/libraries/WiFiS3/src/Modem.cpp +++ b/libraries/WiFiS3/src/Modem.cpp @@ -30,14 +30,17 @@ ModemClass::~ModemClass() { } /* -------------------------------------------------------------------------- */ -void ModemClass::begin(int badurate){ +void ModemClass::begin(int badurate, int retry){ /* -------------------------------------------------------------------------- */ if(_serial != nullptr && !beginned) { _serial->begin(badurate); string res = ""; _serial->flush(); modem.timeout(500); - beginned = modem.write(string(PROMPT(_SOFTRESETWIFI)),res, "%s" , CMD(_SOFTRESETWIFI)); + while(!beginned && retry > 0) { + beginned = modem.write(string(PROMPT(_SOFTRESETWIFI)),res, "%s" , CMD(_SOFTRESETWIFI)); + retry -= 1; + } modem.timeout(MODEM_TIMEOUT); } } diff --git a/libraries/WiFiS3/src/Modem.h b/libraries/WiFiS3/src/Modem.h index 3f785bc9d..d340dd976 100644 --- a/libraries/WiFiS3/src/Modem.h +++ b/libraries/WiFiS3/src/Modem.h @@ -22,7 +22,7 @@ class ModemClass { ModemClass(UART * _serial); ~ModemClass(); - void begin(int badurate = 115200); + void begin(int badurate = 115200, int retry = 3); void end(); bool write(const std::string &cmd, std::string &str, const char * fmt, ...); void write_nowait(const std::string &cmd, std::string &str, const char * fmt, ...);