Skip to content

Commit bb2fb7d

Browse files
committed
Separating WiFiConnectionManager definition/implementation in a h/cpp file
1 parent 25be97a commit bb2fb7d

File tree

2 files changed

+183
-136
lines changed

2 files changed

+183
-136
lines changed

src/WiFiConnectionManager.cpp

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
/*
2+
* This file is part of ArduinoIoTCloud.
3+
*
4+
* Copyright 2019 ARDUINO SA (http://www.arduino.cc/)
5+
*
6+
* This software is released under the GNU General Public License version 3,
7+
* which covers the main part of arduino-cli.
8+
* The terms of this license can be found at:
9+
* https://www.gnu.org/licenses/gpl-3.0.en.html
10+
*
11+
* You can be released from the requirements of the above licenses by purchasing
12+
* a commercial license. Buying such a license is mandatory if you want to modify or
13+
* otherwise use the software for commercial activities involving the Arduino
14+
* software without disclosing the source code of your own applications. To purchase
15+
* a commercial license, send an email to [email protected].
16+
*/
17+
18+
/******************************************************************************
19+
* INCLUDE
20+
******************************************************************************/
21+
22+
#include "WiFiConnectionManager.h"
23+
24+
/******************************************************************************
25+
* CONSTANTS
26+
******************************************************************************/
27+
28+
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
29+
30+
/******************************************************************************
31+
* CTOR/DTOR
32+
******************************************************************************/
33+
34+
WiFiConnectionManager::WiFiConnectionManager(const char *ssid, const char *pass) :
35+
ssid(ssid),
36+
pass(pass),
37+
lastConnectionTickTime(millis()),
38+
connectionTickTimeInterval(CHECK_INTERVAL_IDLE),
39+
getTimeRetries(MAX_GETTIME_RETRIES) {
40+
}
41+
42+
/******************************************************************************
43+
* PUBLIC MEMBER FUNCTIONS
44+
******************************************************************************/
45+
46+
void WiFiConnectionManager::init() {
47+
}
48+
49+
unsigned long WiFiConnectionManager::getTime() {
50+
return WiFi.getTime();
51+
}
52+
53+
void WiFiConnectionManager::check() {
54+
char msgBuffer[120];
55+
unsigned long const now = millis();
56+
int networkStatus = 0;
57+
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
58+
switch (netConnectionState) {
59+
case CONNECTION_STATE_INIT:
60+
networkStatus = WiFi.status();
61+
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
62+
debugMessage(msgBuffer, 2);
63+
if (networkStatus == NETWORK_HARDWARE_ERROR) {
64+
// NO FURTHER ACTION WILL FOLLOW THIS
65+
changeConnectionState(CONNECTION_STATE_ERROR);
66+
lastConnectionTickTime = now;
67+
return;
68+
}
69+
sprintf(msgBuffer, "Current WiFi Firmware: %s", WiFi.firmwareVersion());
70+
debugMessage(msgBuffer, 0);
71+
if(WiFi.firmwareVersion() < WIFI_FIRMWARE_VERSION_REQUIRED){
72+
sprintf(msgBuffer, "Latest WiFi Firmware: %s", WIFI_FIRMWARE_VERSION_REQUIRED);
73+
debugMessage(msgBuffer, 0);
74+
debugMessage("Please update to the latest version for best performance.", 0);
75+
delay(5000);
76+
}
77+
changeConnectionState(CONNECTION_STATE_CONNECTING);
78+
break;
79+
case CONNECTION_STATE_CONNECTING:
80+
networkStatus = WiFi.begin(ssid, pass);
81+
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
82+
debugMessage(msgBuffer, 4);
83+
if (networkStatus != NETWORK_CONNECTED) {
84+
sprintf(msgBuffer, "Connection to \"%s\" failed", ssid);
85+
debugMessage(msgBuffer, 0);
86+
sprintf(msgBuffer, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
87+
debugMessage(msgBuffer, 2);
88+
//changeConnectionState(CONNECTION_STATE_CONNECTING);
89+
return;
90+
} else {
91+
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
92+
debugMessage(msgBuffer, 2);
93+
changeConnectionState(CONNECTION_STATE_GETTIME);
94+
return;
95+
}
96+
break;
97+
case CONNECTION_STATE_GETTIME:
98+
unsigned long networkTime;
99+
networkTime = getTime();
100+
debugMessage(".", 3, false, false);
101+
if(networkTime > lastValidTimestamp){
102+
debugMessage("", 3, false, true);
103+
lastValidTimestamp = networkTime;
104+
sprintf(msgBuffer, "Network Time: %u", networkTime);
105+
debugMessage(msgBuffer, 3);
106+
changeConnectionState(CONNECTION_STATE_CONNECTED);
107+
} else if (WiFi.status() != WL_CONNECTED) {
108+
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
109+
} else if (!getTimeRetries--) {
110+
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
111+
}
112+
break;
113+
case CONNECTION_STATE_CONNECTED:
114+
// keep testing connection
115+
networkStatus = WiFi.status();
116+
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
117+
debugMessage(msgBuffer, 4);
118+
if (networkStatus != WL_CONNECTED) {
119+
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
120+
return;
121+
}
122+
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
123+
debugMessage(msgBuffer, 4);
124+
break;
125+
case CONNECTION_STATE_DISCONNECTED:
126+
WiFi.end();
127+
changeConnectionState(CONNECTION_STATE_CONNECTING);
128+
break;
129+
}
130+
lastConnectionTickTime = now;
131+
}
132+
}
133+
134+
/******************************************************************************
135+
* PRIVATE MEMBER FUNCTIONS
136+
******************************************************************************/
137+
138+
void WiFiConnectionManager::changeConnectionState(NetworkConnectionState _newState) {
139+
char msgBuffer[120];
140+
int newInterval = CHECK_INTERVAL_INIT;
141+
switch (_newState) {
142+
case CONNECTION_STATE_INIT:
143+
newInterval = CHECK_INTERVAL_INIT;
144+
break;
145+
case CONNECTION_STATE_CONNECTING:
146+
sprintf(msgBuffer, "Connecting to \"%s\"", ssid);
147+
debugMessage(msgBuffer, 2);
148+
newInterval = CHECK_INTERVAL_CONNECTING;
149+
break;
150+
case CONNECTION_STATE_GETTIME:
151+
newInterval = CHECK_INTERVAL_GETTIME;
152+
debugMessage("Acquiring Time from Network", 3);
153+
getTimeRetries = MAX_GETTIME_RETRIES;
154+
break;
155+
case CONNECTION_STATE_CONNECTED:
156+
newInterval = CHECK_INTERVAL_CONNECTED;
157+
break;
158+
case CONNECTION_STATE_DISCONNECTED:
159+
sprintf(msgBuffer, "WiFi.status(): %d", WiFi.status());
160+
debugMessage(msgBuffer, 4);
161+
sprintf(msgBuffer, "Connection to \"%s\" lost.", ssid);
162+
debugMessage(msgBuffer, 0);
163+
debugMessage("Attempting reconnection", 0);
164+
newInterval = CHECK_INTERVAL_DISCONNECTED;
165+
break;
166+
case CONNECTION_STATE_ERROR:
167+
debugMessage("WiFi Hardware failure.\nMake sure you are using a WiFi enabled board/shield.", 0);
168+
debugMessage("Then reset and retry.", 0);
169+
break;
170+
}
171+
connectionTickTimeInterval = newInterval;
172+
lastConnectionTickTime = millis();
173+
netConnectionState = _newState;
174+
}

src/WiFiConnectionManager.h

Lines changed: 9 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,23 @@
1515
* a commercial license, send an email to [email protected].
1616
*/
1717

18+
/******************************************************************************
19+
* INCLUDE
20+
******************************************************************************/
21+
1822
#include "ConnectionManager.h"
1923
#include <WiFiUdp.h>
2024

25+
/******************************************************************************
26+
* CLASS DECLARATION
27+
******************************************************************************/
28+
2129
class WiFiConnectionManager : public ConnectionManager {
2230
public:
2331
WiFiConnectionManager(const char *ssid, const char *pass);
2432

25-
virtual unsigned long getTime();
2633
virtual void init();
34+
virtual unsigned long getTime();
2735
virtual void check();
2836
virtual Client &getClient() { return wifiClient; };
2937
virtual UDP &getUDP() { return udp; };
@@ -52,138 +60,3 @@ class WiFiConnectionManager : public ConnectionManager {
5260
WiFiClient wifiClient;
5361
int connectionTickTimeInterval;
5462
};
55-
56-
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
57-
58-
WiFiConnectionManager::WiFiConnectionManager(const char *ssid, const char *pass) :
59-
ssid(ssid), pass(pass),
60-
lastConnectionTickTime(millis()),
61-
connectionTickTimeInterval(CHECK_INTERVAL_IDLE),
62-
getTimeRetries(MAX_GETTIME_RETRIES) {
63-
}
64-
65-
unsigned long WiFiConnectionManager::getTime() {
66-
return WiFi.getTime();
67-
}
68-
69-
void WiFiConnectionManager::init() {
70-
}
71-
72-
void WiFiConnectionManager::changeConnectionState(NetworkConnectionState _newState) {
73-
char msgBuffer[120];
74-
int newInterval = CHECK_INTERVAL_INIT;
75-
switch (_newState) {
76-
case CONNECTION_STATE_INIT:
77-
newInterval = CHECK_INTERVAL_INIT;
78-
break;
79-
case CONNECTION_STATE_CONNECTING:
80-
sprintf(msgBuffer, "Connecting to \"%s\"", ssid);
81-
debugMessage(msgBuffer, 2);
82-
newInterval = CHECK_INTERVAL_CONNECTING;
83-
break;
84-
case CONNECTION_STATE_GETTIME:
85-
newInterval = CHECK_INTERVAL_GETTIME;
86-
debugMessage("Acquiring Time from Network", 3);
87-
getTimeRetries = MAX_GETTIME_RETRIES;
88-
break;
89-
case CONNECTION_STATE_CONNECTED:
90-
newInterval = CHECK_INTERVAL_CONNECTED;
91-
break;
92-
case CONNECTION_STATE_DISCONNECTED:
93-
sprintf(msgBuffer, "WiFi.status(): %d", WiFi.status());
94-
debugMessage(msgBuffer, 4);
95-
sprintf(msgBuffer, "Connection to \"%s\" lost.", ssid);
96-
debugMessage(msgBuffer, 0);
97-
debugMessage("Attempting reconnection", 0);
98-
newInterval = CHECK_INTERVAL_DISCONNECTED;
99-
break;
100-
case CONNECTION_STATE_ERROR:
101-
debugMessage("WiFi Hardware failure.\nMake sure you are using a WiFi enabled board/shield.", 0);
102-
debugMessage("Then reset and retry.", 0);
103-
break;
104-
}
105-
connectionTickTimeInterval = newInterval;
106-
lastConnectionTickTime = millis();
107-
netConnectionState = _newState;
108-
}
109-
110-
void WiFiConnectionManager::check() {
111-
char msgBuffer[120];
112-
unsigned long const now = millis();
113-
int networkStatus = 0;
114-
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
115-
switch (netConnectionState) {
116-
case CONNECTION_STATE_INIT:
117-
networkStatus = WiFi.status();
118-
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
119-
debugMessage(msgBuffer, 2);
120-
if (networkStatus == NETWORK_HARDWARE_ERROR) {
121-
// NO FURTHER ACTION WILL FOLLOW THIS
122-
changeConnectionState(CONNECTION_STATE_ERROR);
123-
lastConnectionTickTime = now;
124-
return;
125-
}
126-
sprintf(msgBuffer, "Current WiFi Firmware: %s", WiFi.firmwareVersion());
127-
debugMessage(msgBuffer, 0);
128-
if(WiFi.firmwareVersion() < WIFI_FIRMWARE_VERSION_REQUIRED){
129-
sprintf(msgBuffer, "Latest WiFi Firmware: %s", WIFI_FIRMWARE_VERSION_REQUIRED);
130-
debugMessage(msgBuffer, 0);
131-
debugMessage("Please update to the latest version for best performance.", 0);
132-
delay(5000);
133-
}
134-
changeConnectionState(CONNECTION_STATE_CONNECTING);
135-
break;
136-
case CONNECTION_STATE_CONNECTING:
137-
networkStatus = WiFi.begin(ssid, pass);
138-
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
139-
debugMessage(msgBuffer, 4);
140-
if (networkStatus != NETWORK_CONNECTED) {
141-
sprintf(msgBuffer, "Connection to \"%s\" failed", ssid);
142-
debugMessage(msgBuffer, 0);
143-
sprintf(msgBuffer, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
144-
debugMessage(msgBuffer, 2);
145-
//changeConnectionState(CONNECTION_STATE_CONNECTING);
146-
return;
147-
} else {
148-
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
149-
debugMessage(msgBuffer, 2);
150-
changeConnectionState(CONNECTION_STATE_GETTIME);
151-
return;
152-
}
153-
break;
154-
case CONNECTION_STATE_GETTIME:
155-
unsigned long networkTime;
156-
networkTime = getTime();
157-
debugMessage(".", 3, false, false);
158-
if(networkTime > lastValidTimestamp){
159-
debugMessage("", 3, false, true);
160-
lastValidTimestamp = networkTime;
161-
sprintf(msgBuffer, "Network Time: %u", networkTime);
162-
debugMessage(msgBuffer, 3);
163-
changeConnectionState(CONNECTION_STATE_CONNECTED);
164-
} else if (WiFi.status() != WL_CONNECTED) {
165-
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
166-
} else if (!getTimeRetries--) {
167-
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
168-
}
169-
break;
170-
case CONNECTION_STATE_CONNECTED:
171-
// keep testing connection
172-
networkStatus = WiFi.status();
173-
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
174-
debugMessage(msgBuffer, 4);
175-
if (networkStatus != WL_CONNECTED) {
176-
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
177-
return;
178-
}
179-
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
180-
debugMessage(msgBuffer, 4);
181-
break;
182-
case CONNECTION_STATE_DISCONNECTED:
183-
WiFi.end();
184-
changeConnectionState(CONNECTION_STATE_CONNECTING);
185-
break;
186-
}
187-
lastConnectionTickTime = now;
188-
}
189-
}

0 commit comments

Comments
 (0)