Skip to content

Commit 4d3c7b8

Browse files
Rocketctsandeepmistry
authored andcommitted
Add WiFiClass::setTimeout(...) API's to set timeout of begin (#46)
* Add WiFiClass::setTimeout(...) API's to set timeout of begin Added timeout logic check on WiFiClass's begin API
1 parent b790908 commit 4d3c7b8

File tree

4 files changed

+31
-19
lines changed

4 files changed

+31
-19
lines changed

keywords.txt

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

5859

5960
#######################################

src/WiFi.cpp

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ extern "C" {
2727
#include "utility/debug.h"
2828
}
2929

30-
WiFiClass::WiFiClass()
30+
WiFiClass::WiFiClass() : _timeout(50000)
3131
{
3232
}
3333

@@ -44,16 +44,17 @@ const char* WiFiClass::firmwareVersion()
4444
int WiFiClass::begin(const char* ssid)
4545
{
4646
uint8_t status = WL_IDLE_STATUS;
47-
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
4847

4948
if (WiFiDrv::wifiSetNetwork(ssid, strlen(ssid)) != WL_FAILURE)
5049
{
51-
do
50+
for (unsigned long start = millis(); (millis() - start) < _timeout;)
5251
{
5352
delay(WL_DELAY_START_CONNECTION);
5453
status = WiFiDrv::getConnectionStatus();
54+
if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
55+
break;
56+
}
5557
}
56-
while (((status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
5758
}else
5859
{
5960
status = WL_CONNECT_FAILED;
@@ -64,16 +65,18 @@ int WiFiClass::begin(const char* ssid)
6465
int WiFiClass::begin(const char* ssid, uint8_t key_idx, const char *key)
6566
{
6667
uint8_t status = WL_IDLE_STATUS;
67-
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
6868

6969
// set encryption key
7070
if (WiFiDrv::wifiSetKey(ssid, strlen(ssid), key_idx, key, strlen(key)) != WL_FAILURE)
7171
{
72-
do
72+
for (unsigned long start = millis(); (millis() - start) < _timeout;)
7373
{
7474
delay(WL_DELAY_START_CONNECTION);
7575
status = WiFiDrv::getConnectionStatus();
76-
}while ((( status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
76+
if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
77+
break;
78+
}
79+
}
7780
}else{
7881
status = WL_CONNECT_FAILED;
7982
}
@@ -83,17 +86,18 @@ int WiFiClass::begin(const char* ssid, uint8_t key_idx, const char *key)
8386
int WiFiClass::begin(const char* ssid, const char *passphrase)
8487
{
8588
uint8_t status = WL_IDLE_STATUS;
86-
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
8789

8890
// set passphrase
8991
if (WiFiDrv::wifiSetPassphrase(ssid, strlen(ssid), passphrase, strlen(passphrase))!= WL_FAILURE)
9092
{
91-
do
93+
for (unsigned long start = millis(); (millis() - start) < _timeout;)
9294
{
9395
delay(WL_DELAY_START_CONNECTION);
9496
status = WiFiDrv::getConnectionStatus();
97+
if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
98+
break;
99+
}
95100
}
96-
while ((( status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
97101
}else{
98102
status = WL_CONNECT_FAILED;
99103
}
@@ -108,16 +112,17 @@ uint8_t WiFiClass::beginAP(const char *ssid)
108112
uint8_t WiFiClass::beginAP(const char *ssid, uint8_t channel)
109113
{
110114
uint8_t status = WL_IDLE_STATUS;
111-
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
112115

113116
if (WiFiDrv::wifiSetApNetwork(ssid, strlen(ssid), channel) != WL_FAILURE)
114117
{
115-
do
118+
for (unsigned long start = millis(); (millis() - start) < _timeout;)
116119
{
117120
delay(WL_DELAY_START_CONNECTION);
118121
status = WiFiDrv::getConnectionStatus();
122+
if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
123+
break;
124+
}
119125
}
120-
while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
121126
}else
122127
{
123128
status = WL_AP_FAILED;
@@ -133,17 +138,18 @@ uint8_t WiFiClass::beginAP(const char *ssid, const char* passphrase)
133138
uint8_t WiFiClass::beginAP(const char *ssid, const char* passphrase, uint8_t channel)
134139
{
135140
uint8_t status = WL_IDLE_STATUS;
136-
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
137141

138142
// set passphrase
139143
if (WiFiDrv::wifiSetApPassphrase(ssid, strlen(ssid), passphrase, strlen(passphrase), channel)!= WL_FAILURE)
140144
{
141-
do
142-
{
145+
for (unsigned long start = millis(); (millis() - start) < _timeout;)
146+
{
143147
delay(WL_DELAY_START_CONNECTION);
144148
status = WiFiDrv::getConnectionStatus();
149+
if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
150+
break;
151+
}
145152
}
146-
while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
147153
}else{
148154
status = WL_AP_FAILED;
149155
}
@@ -336,4 +342,8 @@ int WiFiClass::ping(IPAddress host, uint8_t ttl)
336342
return WiFiDrv::ping(host, ttl);
337343
}
338344

345+
void WiFiClass::setTimeout(unsigned long timeout)
346+
{
347+
_timeout = timeout;
348+
}
339349
WiFiClass WiFi;

src/WiFi.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class WiFiClass
4040
private:
4141

4242
static void init();
43+
unsigned long _timeout;
4344
public:
4445
WiFiClass();
4546

@@ -259,6 +260,8 @@ class WiFiClass
259260
int ping(const char* hostname, uint8_t ttl = 128);
260261
int ping(const String &hostname, uint8_t ttl = 128);
261262
int ping(IPAddress host, uint8_t ttl = 128);
263+
264+
void setTimeout(unsigned long timeout);
262265
};
263266

264267
extern WiFiClass WiFi;

src/utility/wl_definitions.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@
4545
#define SOCK_NOT_AVAIL 255
4646
// Default state value for Wifi state field
4747
#define NA_STATE -1
48-
//Maximum number of attempts to establish wifi connection
49-
#define WL_MAX_ATTEMPT_CONNECTION 500
5048

5149
typedef enum {
5250
WL_NO_SHIELD = 255,

0 commit comments

Comments
 (0)