@@ -27,7 +27,7 @@ extern "C" {
27
27
#include " utility/debug.h"
28
28
}
29
29
30
- WiFiClass::WiFiClass ()
30
+ WiFiClass::WiFiClass () : _timeout( 50000 )
31
31
{
32
32
}
33
33
@@ -44,16 +44,17 @@ const char* WiFiClass::firmwareVersion()
44
44
int WiFiClass::begin (const char * ssid)
45
45
{
46
46
uint8_t status = WL_IDLE_STATUS;
47
- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
48
47
49
48
if (WiFiDrv::wifiSetNetwork (ssid, strlen (ssid)) != WL_FAILURE)
50
49
{
51
- do
50
+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
52
51
{
53
52
delay (WL_DELAY_START_CONNECTION);
54
53
status = WiFiDrv::getConnectionStatus ();
54
+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
55
+ break ;
56
+ }
55
57
}
56
- while (((status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
57
58
}else
58
59
{
59
60
status = WL_CONNECT_FAILED;
@@ -64,16 +65,18 @@ int WiFiClass::begin(const char* ssid)
64
65
int WiFiClass::begin (const char * ssid, uint8_t key_idx, const char *key)
65
66
{
66
67
uint8_t status = WL_IDLE_STATUS;
67
- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
68
68
69
69
// set encryption key
70
70
if (WiFiDrv::wifiSetKey (ssid, strlen (ssid), key_idx, key, strlen (key)) != WL_FAILURE)
71
71
{
72
- do
72
+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
73
73
{
74
74
delay (WL_DELAY_START_CONNECTION);
75
75
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
+ }
77
80
}else {
78
81
status = WL_CONNECT_FAILED;
79
82
}
@@ -83,17 +86,18 @@ int WiFiClass::begin(const char* ssid, uint8_t key_idx, const char *key)
83
86
int WiFiClass::begin (const char * ssid, const char *passphrase)
84
87
{
85
88
uint8_t status = WL_IDLE_STATUS;
86
- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
87
89
88
90
// set passphrase
89
91
if (WiFiDrv::wifiSetPassphrase (ssid, strlen (ssid), passphrase, strlen (passphrase))!= WL_FAILURE)
90
92
{
91
- do
93
+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
92
94
{
93
95
delay (WL_DELAY_START_CONNECTION);
94
96
status = WiFiDrv::getConnectionStatus ();
97
+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
98
+ break ;
99
+ }
95
100
}
96
- while ((( status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
97
101
}else {
98
102
status = WL_CONNECT_FAILED;
99
103
}
@@ -108,16 +112,17 @@ uint8_t WiFiClass::beginAP(const char *ssid)
108
112
uint8_t WiFiClass::beginAP (const char *ssid, uint8_t channel)
109
113
{
110
114
uint8_t status = WL_IDLE_STATUS;
111
- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
112
115
113
116
if (WiFiDrv::wifiSetApNetwork (ssid, strlen (ssid), channel) != WL_FAILURE)
114
117
{
115
- do
118
+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
116
119
{
117
120
delay (WL_DELAY_START_CONNECTION);
118
121
status = WiFiDrv::getConnectionStatus ();
122
+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
123
+ break ;
124
+ }
119
125
}
120
- while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
121
126
}else
122
127
{
123
128
status = WL_AP_FAILED;
@@ -133,17 +138,18 @@ uint8_t WiFiClass::beginAP(const char *ssid, const char* passphrase)
133
138
uint8_t WiFiClass::beginAP (const char *ssid, const char * passphrase, uint8_t channel)
134
139
{
135
140
uint8_t status = WL_IDLE_STATUS;
136
- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
137
141
138
142
// set passphrase
139
143
if (WiFiDrv::wifiSetApPassphrase (ssid, strlen (ssid), passphrase, strlen (passphrase), channel)!= WL_FAILURE)
140
144
{
141
- do
142
- {
145
+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
146
+ {
143
147
delay (WL_DELAY_START_CONNECTION);
144
148
status = WiFiDrv::getConnectionStatus ();
149
+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
150
+ break ;
151
+ }
145
152
}
146
- while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
147
153
}else {
148
154
status = WL_AP_FAILED;
149
155
}
@@ -336,4 +342,8 @@ int WiFiClass::ping(IPAddress host, uint8_t ttl)
336
342
return WiFiDrv::ping (host, ttl);
337
343
}
338
344
345
+ void WiFiClass::setTimeout (unsigned long timeout)
346
+ {
347
+ _timeout = timeout;
348
+ }
339
349
WiFiClass WiFi;
0 commit comments