@@ -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()
4444int 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)
6465int 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)
8386int 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)
108112uint8_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)
133138uint8_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+ }
339349WiFiClass WiFi;
0 commit comments