Skip to content

Commit e85c35d

Browse files
Rocketctsandeepmistry
authored andcommitted
Add WiFiClass::setTimeout(...) API's to set timeout of begin
Added timeout logic check on WiFiClass's begin API Porting of arduino-libraries/WiFiNINA#46
1 parent 30967e1 commit e85c35d

File tree

3 files changed

+23
-12
lines changed

3 files changed

+23
-12
lines changed

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ WiFiMDNSResponder KEYWORD2
5454
lowPowerMode KEYWORD2
5555
maxLowPowerMode KEYWORD2
5656
noLowPowerMode KEYWORD2
57+
setTimeout KEYWORD2
5758

5859
#######################################
5960
# Constants (LITERAL1)

src/WiFi.cpp

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,12 @@ void WiFiClass::handlePingResponse(uint32 u32IPAddr, uint32 u32RTT, uint8 u8Erro
260260
}
261261
}
262262

263-
WiFiClass::WiFiClass()
263+
WiFiClass::WiFiClass() :
264+
_init(0),
265+
_mode(WL_RESET_MODE),
266+
_status(WL_NO_SHIELD),
267+
_timeout(60000)
264268
{
265-
_mode = WL_RESET_MODE;
266-
_status = WL_NO_SHIELD;
267-
_init = 0;
268269
}
269270

270271
void WiFiClass::setPins(int8_t cs, int8_t irq, int8_t rst, int8_t en)
@@ -377,11 +378,12 @@ uint8_t WiFiClass::begin()
377378
_mode = WL_STA_MODE;
378379

379380
// Wait for connection or timeout:
380-
unsigned long start = millis();
381-
while (!(_status & WL_CONNECTED) &&
382-
!(_status & WL_DISCONNECTED) &&
383-
millis() - start < 60000) {
381+
for (unsigned long start = millis(); millis() - start < _timeout;)
382+
{
384383
m2m_wifi_handle_events(NULL);
384+
if ((_status & WL_CONNECTED) || (_status & WL_DISCONNECTED)) {
385+
break;
386+
}
385387
}
386388

387389
memset(_ssid, 0, M2M_MAX_SSID_LEN);
@@ -438,11 +440,12 @@ uint8_t WiFiClass::startConnect(const char *ssid, uint8_t u8SecType, const void
438440
_mode = WL_STA_MODE;
439441

440442
// Wait for connection or timeout:
441-
unsigned long start = millis();
442-
while (!(_status & WL_CONNECTED) &&
443-
!(_status & WL_DISCONNECTED) &&
444-
millis() - start < 60000) {
443+
for (unsigned long start = millis(); millis() - start < _timeout;)
444+
{
445445
m2m_wifi_handle_events(NULL);
446+
if ((_status & WL_CONNECTED) || (_status & WL_DISCONNECTED)) {
447+
break;
448+
}
446449
}
447450
if (!(_status & WL_CONNECTED)) {
448451
_mode = WL_RESET_MODE;
@@ -1166,4 +1169,9 @@ uint32_t WiFiClass::getTime()
11661169
#endif
11671170
}
11681171

1172+
void WiFiClass::setTimeout(unsigned long timeout)
1173+
{
1174+
_timeout = timeout;
1175+
}
1176+
11691177
WiFiClass WiFi;

src/WiFi101.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class WiFiClass
165165
void handleEvent(uint8_t u8MsgType, void *pvMsg);
166166
void handleResolve(uint8_t * hostName, uint32_t hostIp);
167167
void handlePingResponse(uint32 u32IPAddr, uint32 u32RTT, uint8 u8ErrorCode);
168+
void setTimeout(unsigned long timeout);
168169

169170
private:
170171
int _init;
@@ -182,6 +183,7 @@ class WiFiClass
182183
uint8_t _scan_auth;
183184
uint8_t _scan_channel;
184185
char _ssid[M2M_MAX_SSID_LEN];
186+
unsigned long _timeout;
185187

186188
uint8_t startConnect(const char *ssid, uint8_t u8SecType, const void *pvAuthInfo);
187189
uint8_t startAP(const char *ssid, uint8_t u8SecType, const void *pvAuthInfo, uint8_t channel);

0 commit comments

Comments
 (0)