@@ -30,7 +30,7 @@ extern "C" {
3030 #include " utility/debug.h"
3131}
3232
33- WiFiClass::WiFiClass ()
33+ WiFiClass::WiFiClass () : _timeout( 50000 )
3434{
3535}
3636
@@ -64,16 +64,17 @@ const char* WiFiClass::firmwareVersion()
6464int WiFiClass::begin (const char * ssid)
6565{
6666 uint8_t status = WL_IDLE_STATUS;
67- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
6867
6968 if (WiFiDrv::wifiSetNetwork (ssid, strlen (ssid)) != WL_FAILURE)
7069 {
71- do
70+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
7271 {
7372 delay (WL_DELAY_START_CONNECTION);
7473 status = WiFiDrv::getConnectionStatus ();
74+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
75+ break ;
76+ }
7577 }
76- while (((status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
7778 }else
7879 {
7980 status = WL_CONNECT_FAILED;
@@ -84,16 +85,18 @@ int WiFiClass::begin(const char* ssid)
8485int WiFiClass::begin (const char * ssid, uint8_t key_idx, const char *key)
8586{
8687 uint8_t status = WL_IDLE_STATUS;
87- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
8888
8989 // set encryption key
9090 if (WiFiDrv::wifiSetKey (ssid, strlen (ssid), key_idx, key, strlen (key)) != WL_FAILURE)
9191 {
92- do
92+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
9393 {
9494 delay (WL_DELAY_START_CONNECTION);
9595 status = WiFiDrv::getConnectionStatus ();
96- }while ((( status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
96+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
97+ break ;
98+ }
99+ }
97100 }else {
98101 status = WL_CONNECT_FAILED;
99102 }
@@ -103,17 +106,18 @@ int WiFiClass::begin(const char* ssid, uint8_t key_idx, const char *key)
103106int WiFiClass::begin (const char * ssid, const char *passphrase)
104107{
105108 uint8_t status = WL_IDLE_STATUS;
106- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
107109
108110 // set passphrase
109111 if (WiFiDrv::wifiSetPassphrase (ssid, strlen (ssid), passphrase, strlen (passphrase))!= WL_FAILURE)
110112 {
111- do
113+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
112114 {
113115 delay (WL_DELAY_START_CONNECTION);
114116 status = WiFiDrv::getConnectionStatus ();
117+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
118+ break ;
119+ }
115120 }
116- while ((( status == WL_IDLE_STATUS)||(status == WL_NO_SSID_AVAIL)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
117121 }else {
118122 status = WL_CONNECT_FAILED;
119123 }
@@ -128,16 +132,17 @@ uint8_t WiFiClass::beginAP(const char *ssid)
128132uint8_t WiFiClass::beginAP (const char *ssid, uint8_t channel)
129133{
130134 uint8_t status = WL_IDLE_STATUS;
131- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
132135
133136 if (WiFiDrv::wifiSetApNetwork (ssid, strlen (ssid), channel) != WL_FAILURE)
134137 {
135- do
138+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
136139 {
137140 delay (WL_DELAY_START_CONNECTION);
138141 status = WiFiDrv::getConnectionStatus ();
142+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
143+ break ;
144+ }
139145 }
140- while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
141146 }else
142147 {
143148 status = WL_AP_FAILED;
@@ -153,17 +158,18 @@ uint8_t WiFiClass::beginAP(const char *ssid, const char* passphrase)
153158uint8_t WiFiClass::beginAP (const char *ssid, const char * passphrase, uint8_t channel)
154159{
155160 uint8_t status = WL_IDLE_STATUS;
156- uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
157161
158162 // set passphrase
159163 if (WiFiDrv::wifiSetApPassphrase (ssid, strlen (ssid), passphrase, strlen (passphrase), channel)!= WL_FAILURE)
160164 {
161- do
162- {
165+ for ( unsigned long start = millis (); ( millis () - start) < _timeout;)
166+ {
163167 delay (WL_DELAY_START_CONNECTION);
164168 status = WiFiDrv::getConnectionStatus ();
169+ if ((status != WL_IDLE_STATUS) && (status != WL_NO_SSID_AVAIL) && (status != WL_SCAN_COMPLETED)) {
170+ break ;
171+ }
165172 }
166- while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0 ));
167173 }else {
168174 status = WL_AP_FAILED;
169175 }
@@ -315,6 +321,11 @@ uint8_t WiFiClass::status()
315321 return WiFiDrv::getConnectionStatus ();
316322}
317323
324+ uint8_t WiFiClass::reasonCode ()
325+ {
326+ return WiFiDrv::getReasonCode ();
327+ }
328+
318329int WiFiClass::hostByName (const char * aHostname, IPAddress& aResult)
319330{
320331 return WiFiDrv::getHostByName (aHostname, aResult);
@@ -356,4 +367,8 @@ int WiFiClass::ping(IPAddress host, uint8_t ttl)
356367 return WiFiDrv::ping (host, ttl);
357368}
358369
370+ void WiFiClass::setTimeout (unsigned long timeout)
371+ {
372+ _timeout = timeout;
373+ }
359374WiFiClass WiFi;
0 commit comments