Skip to content

Commit fec3d64

Browse files
committed
Refactoring restored in WiFiConnectionHandler
1 parent e178c6c commit fec3d64

File tree

2 files changed

+129
-199
lines changed

2 files changed

+129
-199
lines changed

src/Arduino_WiFiConnectionHandler.cpp

Lines changed: 119 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,9 @@
1919
INCLUDE
2020
******************************************************************************/
2121

22-
23-
/*
24-
static int const DBG_NONE = -1;
25-
static int const DBG_ERROR = 0;
26-
static int const DBG_WARNING = 1;
27-
static int const DBG_INFO = 2;
28-
static int const DBG_DEBUG = 3;
29-
static int const DBG_VERBOSE = 4;
30-
*/
31-
32-
#if defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_NANO_33_IOT)
33-
3422
#include "Arduino_WiFiConnectionHandler.h"
3523

36-
/******************************************************************************
37-
CONSTANTS
38-
******************************************************************************/
39-
40-
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000; /* NOT USED */
24+
#ifdef BOARD_HAS_WIFI /* Only compile if the board has WiFi */
4125

4226
/******************************************************************************
4327
CTOR/DTOR
@@ -101,197 +85,142 @@ unsigned long WiFiConnectionHandler::getTime() {
10185
void WiFiConnectionHandler::update() {
10286

10387
unsigned long const now = millis();
104-
int networkStatus = 0;
105-
if (now - lastConnectionTickTime > connectionTickTimeInterval) { /* time bracket */
106-
88+
if((now - lastConnectionTickTime) > connectionTickTimeInterval)
89+
{
10790
lastConnectionTickTime = now;
10891

10992
switch (netConnectionState) {
110-
case NetworkConnectionState::INIT: {
111-
Debug.print(DBG_VERBOSE, "::INIT");
112-
#if !defined(BOARD_ESP8266)
113-
networkStatus = WiFi.status();
114-
115-
Debug.print(DBG_INFO, "WiFi.status(): %d", networkStatus);
116-
if (networkStatus == NETWORK_HARDWARE_ERROR) {
117-
// NO FURTHER ACTION WILL FOLLOW THIS
118-
changeConnectionState(NetworkConnectionState::ERROR);
119-
return;
120-
}
121-
Debug.print(DBG_ERROR, "Current WiFi Firmware: %s", WiFi.firmwareVersion());
122-
if (WiFi.firmwareVersion() < WIFI_FIRMWARE_VERSION_REQUIRED) {
123-
Debug.print(DBG_ERROR, "Latest WiFi Firmware: %s", WIFI_FIRMWARE_VERSION_REQUIRED);
124-
Debug.print(DBG_ERROR, "Please update to the latest version for best performance.");
125-
delay(5000);
126-
}
127-
#else
128-
Debug.print(DBG_ERROR, "WiFi status ESP: %d", WiFi.status());
129-
WiFi.disconnect();
130-
delay(300);
131-
networkStatus = WiFi.begin(ssid, pass);
132-
delay(1000);
133-
#endif
134-
135-
changeConnectionState(NetworkConnectionState::CONNECTING);
136-
}
137-
break;
138-
case NetworkConnectionState::CONNECTING: {
139-
Debug.print(DBG_VERBOSE, "::CONNECTING");
140-
networkStatus = WiFi.status();
141-
142-
#if !defined(BOARD_ESP8266)
143-
144-
if (networkStatus != WL_CONNECTED) {
145-
networkStatus = WiFi.begin(ssid, pass);
146-
}
147-
148-
#else
149-
150-
networkStatus = WiFi.status();
151-
152-
#endif
153-
154-
Debug.print(DBG_VERBOSE, "WiFi.status(): %d", networkStatus);
155-
if (networkStatus != NETWORK_CONNECTED) {
156-
Debug.print(DBG_ERROR, "Connection to \"%s\" failed", ssid);
157-
Debug.print(DBG_INFO, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
158-
159-
return;
160-
} else {
161-
Debug.print(DBG_INFO, "Connected to \"%s\"", ssid);
162-
changeConnectionState(NetworkConnectionState::GETTIME);
163-
return;
164-
}
165-
}
166-
break;
167-
case NetworkConnectionState::CONNECTED: {
168-
169-
networkStatus = WiFi.status();
170-
Debug.print(DBG_VERBOSE, "WiFi.status(): %d", networkStatus);
171-
if (networkStatus != WL_CONNECTED) {
172-
changeConnectionState(NetworkConnectionState::DISCONNECTED);
173-
return;
174-
}
175-
Debug.print(DBG_VERBOSE, "Connected to \"%s\"", ssid);
176-
}
177-
break;
178-
case NetworkConnectionState::GETTIME: {
179-
Debug.print(DBG_VERBOSE, "NetworkConnectionState::GETTIME");
180-
#if defined(BOARD_ESP8266)
181-
configTime(0, 0, "time.arduino.cc", "pool.ntp.org", "time.nist.gov");
182-
#endif
183-
changeConnectionState(NetworkConnectionState::CONNECTED);
184-
}
185-
break;
186-
case NetworkConnectionState::DISCONNECTING: {
187-
if (networkStatus != WL_CONNECTED) {
188-
changeConnectionState(NetworkConnectionState::DISCONNECTED);
189-
}
190-
}
191-
break;
192-
case NetworkConnectionState::DISCONNECTED: {
193-
#if !defined(BOARD_ESP8266)
194-
WiFi.end();
195-
#endif
196-
if (keepAlive) {
197-
changeConnectionState(NetworkConnectionState::INIT);
198-
} else {
199-
changeConnectionState(NetworkConnectionState::CLOSED);
200-
}
201-
202-
}
203-
break;
204-
case NetworkConnectionState::ERROR: {
205-
206-
}
207-
break;
208-
case NetworkConnectionState::CLOSED: {
209-
210-
}
211-
break;
93+
case NetworkConnectionState::INIT: netConnectionState = update_handleInit (); break;
94+
case NetworkConnectionState::CONNECTING: netConnectionState = update_handleConnecting (); break;
95+
case NetworkConnectionState::CONNECTED: netConnectionState = update_handleConnected (); break;
96+
case NetworkConnectionState::GETTIME: netConnectionState = update_handleGetTime (); break;
97+
case NetworkConnectionState::DISCONNECTING: netConnectionState = update_handleDisconnecting(); break;
98+
case NetworkConnectionState::DISCONNECTED: netConnectionState = update_handleDisconnected (); break;
99+
case NetworkConnectionState::ERROR: break;
100+
case NetworkConnectionState::CLOSED: break;
212101
}
213-
} /* time bracket */
102+
}
214103
}
215104

216105
/******************************************************************************
217106
PRIVATE MEMBER FUNCTIONS
218107
******************************************************************************/
219108

220-
void WiFiConnectionHandler::changeConnectionState(NetworkConnectionState _newState) {
221-
if (_newState == netConnectionState) {
109+
void WiFiConnectionHandler::connect() {
110+
if (netConnectionState == NetworkConnectionState::INIT || netConnectionState == NetworkConnectionState::CONNECTING) {
222111
return;
223112
}
224-
int newInterval = CHECK_INTERVAL_INIT;
225-
switch (_newState) {
226-
case NetworkConnectionState::INIT: {
227-
Debug.print(DBG_VERBOSE, "CHANGING STATE TO ::INIT");
228-
newInterval = CHECK_INTERVAL_INIT;
229-
}
230-
break;
231-
case NetworkConnectionState::CONNECTING: {
232-
Debug.print(DBG_INFO, "Connecting to \"%s\"", ssid);
233-
newInterval = CHECK_INTERVAL_CONNECTING;
234-
}
235-
break;
236-
case NetworkConnectionState::CONNECTED: {
237-
execNetworkEventCallback(_on_connect_event_callback, 0);
238-
newInterval = CHECK_INTERVAL_CONNECTED;
239-
}
240-
break;
241-
case NetworkConnectionState::GETTIME: {
242-
}
243-
break;
244-
case NetworkConnectionState::DISCONNECTING: {
245-
Debug.print(DBG_VERBOSE, "Disconnecting from \"%s\"", ssid);
246-
WiFi.disconnect();
247-
}
248-
break;
249-
case NetworkConnectionState::DISCONNECTED: {
250-
execNetworkEventCallback(_on_disconnect_event_callback, 0);
251-
Debug.print(DBG_VERBOSE, "WiFi.status(): %d", WiFi.status());
252-
253-
Debug.print(DBG_ERROR, "Connection to \"%s\" lost.", ssid);
254-
if (keepAlive) {
255-
Debug.print(DBG_ERROR, "Attempting reconnection");
256-
}
257-
258-
newInterval = CHECK_INTERVAL_DISCONNECTED;
259-
}
260-
break;
261-
case NetworkConnectionState::CLOSED: {
262-
263-
#if !defined(BOARD_ESP8266)
264-
WiFi.end();
265-
#endif
266-
267-
Debug.print(DBG_VERBOSE, "Connection to \"%s\" closed", ssid);
268-
}
269-
break;
270-
case NetworkConnectionState::ERROR: {
271-
execNetworkEventCallback(_on_error_event_callback, 0);
272-
Debug.print(DBG_ERROR, "WiFi Hardware failure.\nMake sure you are using a WiFi enabled board/shield.");
273-
Debug.print(DBG_ERROR, "Then reset and retry.");
274-
}
275-
break;
113+
keepAlive = true;
114+
connectionTickTimeInterval = CHECK_INTERVAL_INIT;
115+
netConnectionState = NetworkConnectionState::INIT;
116+
}
117+
118+
void WiFiConnectionHandler::disconnect() {
119+
keepAlive = false;
120+
netConnectionState = NetworkConnectionState::DISCONNECTING;
121+
}
122+
123+
NetworkConnectionState WiFiConnectionHandler::update_handleInit() {
124+
Debug.print(DBG_VERBOSE, "::INIT");
125+
126+
#ifndef BOARD_ESP8266
127+
Debug.print(DBG_INFO, "WiFi.status(): %d", WiFi.status());
128+
if (WiFi.status() == NETWORK_HARDWARE_ERROR) {
129+
execNetworkEventCallback(_on_error_event_callback, 0);
130+
Debug.print(DBG_ERROR, "WiFi Hardware failure.\nMake sure you are using a WiFi enabled board/shield.");
131+
Debug.print(DBG_ERROR, "Then reset and retry.");
132+
return NetworkConnectionState::ERROR;
276133
}
277-
connectionTickTimeInterval = newInterval;
278-
lastConnectionTickTime = millis();
279-
netConnectionState = _newState;
280-
//connectionStateChanged(netConnectionState);
134+
135+
Debug.print(DBG_ERROR, "Current WiFi Firmware: %s", WiFi.firmwareVersion());
136+
137+
if (WiFi.firmwareVersion() < WIFI_FIRMWARE_VERSION_REQUIRED) {
138+
Debug.print(DBG_ERROR, "Latest WiFi Firmware: %s", WIFI_FIRMWARE_VERSION_REQUIRED);
139+
Debug.print(DBG_ERROR, "Please update to the latest version for best performance.");
140+
delay(5000);
141+
}
142+
#else
143+
Debug.print(DBG_ERROR, "WiFi status ESP: %d", WiFi.status());
144+
WiFi.disconnect();
145+
delay(300);
146+
WiFi.begin(ssid, pass);
147+
delay(1000);
148+
#endif /* ifndef BOARD_ESP8266 */
149+
150+
connectionTickTimeInterval = CHECK_INTERVAL_CONNECTING;
151+
return NetworkConnectionState::CONNECTING;
281152
}
282153

283-
void WiFiConnectionHandler::connect() {
284-
if (netConnectionState == NetworkConnectionState::INIT || netConnectionState == NetworkConnectionState::CONNECTING) {
285-
return;
154+
NetworkConnectionState WiFiConnectionHandler::update_handleConnecting() {
155+
Debug.print(DBG_VERBOSE, "::CONNECTING");
156+
157+
#ifndef BOARD_ESP8266
158+
if (WiFi.status() != WL_CONNECTED) {
159+
WiFi.begin(ssid, pass);
286160
}
287-
keepAlive = true;
288-
changeConnectionState(NetworkConnectionState::INIT);
161+
#endif /* ifndef BOARD_ESP8266 */
289162

163+
Debug.print(DBG_VERBOSE, "WiFi.status(): %d", WiFi.status());
164+
if (WiFi.status() != NETWORK_CONNECTED) {
165+
Debug.print(DBG_ERROR, "Connection to \"%s\" failed", ssid);
166+
Debug.print(DBG_INFO, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
167+
return NetworkConnectionState::CONNECTING;
168+
}
169+
else {
170+
Debug.print(DBG_INFO, "Connected to \"%s\"", ssid);
171+
execNetworkEventCallback(_on_connect_event_callback, 0);
172+
connectionTickTimeInterval = CHECK_INTERVAL_CONNECTED;
173+
return NetworkConnectionState::GETTIME;
174+
}
290175
}
291-
void WiFiConnectionHandler::disconnect() {
292-
//WiFi.end();
293176

294-
changeConnectionState(NetworkConnectionState::DISCONNECTING);
295-
keepAlive = false;
177+
NetworkConnectionState WiFiConnectionHandler::update_handleConnected() {
178+
179+
Debug.print(DBG_VERBOSE, "WiFi.status(): %d", WiFi.status());
180+
if (WiFi.status() != WL_CONNECTED)
181+
{
182+
execNetworkEventCallback(_on_disconnect_event_callback, 0);
183+
184+
Debug.print(DBG_VERBOSE, "WiFi.status(): %d", WiFi.status());
185+
Debug.print(DBG_ERROR, "Connection to \"%s\" lost.", ssid);
186+
187+
if (keepAlive) {
188+
Debug.print(DBG_ERROR, "Attempting reconnection");
189+
}
190+
191+
connectionTickTimeInterval = CHECK_INTERVAL_DISCONNECTED;
192+
return NetworkConnectionState::DISCONNECTED;
193+
}
194+
Debug.print(DBG_VERBOSE, "Connected to \"%s\"", ssid);
195+
return NetworkConnectionState::CONNECTED;
196+
}
197+
198+
NetworkConnectionState WiFiConnectionHandler::update_handleGetTime() {
199+
Debug.print(DBG_VERBOSE, "NetworkConnectionState::GETTIME");
200+
#ifdef BOARD_ESP8266
201+
configTime(0, 0, "time.arduino.cc", "pool.ntp.org", "time.nist.gov");
202+
#endif
203+
return NetworkConnectionState::CONNECTED;
204+
}
205+
206+
NetworkConnectionState WiFiConnectionHandler::update_handleDisconnecting() {
207+
Debug.print(DBG_VERBOSE, "Disconnecting from \"%s\"", ssid);
208+
WiFi.disconnect();
209+
return NetworkConnectionState::DISCONNECTED;
296210
}
211+
212+
NetworkConnectionState WiFiConnectionHandler::update_handleDisconnected() {
213+
#ifndef BOARD_ESP8266
214+
WiFi.end();
215+
#endif /* ifndef BOARD_ESP8266 */
216+
if (keepAlive) {
217+
connectionTickTimeInterval = CHECK_INTERVAL_INIT;
218+
return NetworkConnectionState::INIT;
219+
}
220+
else {
221+
Debug.print(DBG_VERBOSE, "Connection to \"%s\" closed", ssid);
222+
return NetworkConnectionState::CLOSED;
223+
}
224+
}
225+
297226
#endif /* #ifdef BOARD_HAS_WIFI */

src/Arduino_WiFiConnectionHandler.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@
2121
/******************************************************************************
2222
INCLUDE
2323
******************************************************************************/
24-
//#if defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT)
25-
//#ifdef BOARD_HAS_WIFI /* Only compile if the board has WiFi */
26-
//extern void connectionStateChanged(NetworkConnectionState _newState);
2724

2825
#include "Arduino_TcpIpConnectionHandler.h"
2926

27+
#ifdef BOARD_HAS_WIFI /* Only compile if the board has WiFi */
28+
3029
/******************************************************************************
3130
CLASS DECLARATION
3231
******************************************************************************/
@@ -58,16 +57,11 @@ class WiFiConnectionHandler : public TcpIpConnectionHandler {
5857

5958
private:
6059

61-
void changeConnectionState(NetworkConnectionState _newState);
62-
6360
const int CHECK_INTERVAL_IDLE = 100;
6461
const int CHECK_INTERVAL_INIT = 100;
6562
const int CHECK_INTERVAL_CONNECTING = 500;
6663
const int CHECK_INTERVAL_CONNECTED = 10000;
67-
const int CHECK_INTERVAL_RETRYING = 5000;
68-
const int CHECK_INTERVAL_DISCONNECTING = 500;
6964
const int CHECK_INTERVAL_DISCONNECTED = 1000;
70-
const int CHECK_INTERVAL_ERROR = 500;
7165

7266
const char *ssid, *pass;
7367
unsigned long lastConnectionTickTime;
@@ -83,8 +77,15 @@ class WiFiConnectionHandler : public TcpIpConnectionHandler {
8377

8478
static void execNetworkEventCallback(OnNetworkEventCallback & callback, void * callback_arg);
8579

80+
NetworkConnectionState update_handleInit ();
81+
NetworkConnectionState update_handleConnecting ();
82+
NetworkConnectionState update_handleConnected ();
83+
NetworkConnectionState update_handleGetTime ();
84+
NetworkConnectionState update_handleDisconnecting();
85+
NetworkConnectionState update_handleDisconnected ();
86+
8687
};
8788

88-
//#endif /* #ifdef BOARD_HAS_WIFI */
89+
#endif /* #ifdef BOARD_HAS_WIFI */
8990

9091
#endif /* ARDUINO_WIFI_CONNECTION_HANDLER_H_ */

0 commit comments

Comments
 (0)