Skip to content

Commit e63c706

Browse files
authored
Merge pull request #27 from ilcato/connection-manager
Managed exit cases for GETTIME state. Removed IDLE state.
2 parents 838ed5a + 686c57b commit e63c706

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

src/ConnectionManager.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include <Client.h>
1010

1111
enum NetworkConnectionState {
12-
CONNECTION_STATE_IDLE,
1312
CONNECTION_STATE_INIT,
1413
CONNECTION_STATE_CONNECTING,
1514
CONNECTION_STATE_CONNECTED,
@@ -30,7 +29,7 @@ class ConnectionManager {
3029

3130
protected:
3231
unsigned long lastValidTimestamp = 0;
33-
NetworkConnectionState netConnectionState = CONNECTION_STATE_IDLE;
32+
NetworkConnectionState netConnectionState = CONNECTION_STATE_INIT;
3433

3534
};
3635

src/WiFiConnectionManager.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ class WiFiConnectionManager : public ConnectionManager {
1515

1616
void changeConnectionState(NetworkConnectionState _newState);
1717

18-
const int CHECK_INTERVAL_IDLE = 100;
1918
const int CHECK_INTERVAL_INIT = 100;
2019
const int CHECK_INTERVAL_CONNECTING = 500;
2120
const int CHECK_INTERVAL_GETTIME = 100;
@@ -24,8 +23,12 @@ class WiFiConnectionManager : public ConnectionManager {
2423
const int CHECK_INTERVAL_DISCONNECTED = 1000;
2524
const int CHECK_INTERVAL_ERROR = 500;
2625

26+
const int MAX_GETTIME_RETRY = 30;
27+
2728
const char *ssid, *pass;
2829
unsigned long lastConnectionTickTime, lastNetworkStep;
30+
unsigned long getTimeRetries;
31+
2932
WiFiClient wifiClient;
3033
int connectionTickTimeInterval;
3134
};
@@ -35,7 +38,8 @@ static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
3538
WiFiConnectionManager::WiFiConnectionManager(const char *ssid, const char *pass) :
3639
ssid(ssid), pass(pass),
3740
lastConnectionTickTime(millis()),
38-
connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
41+
connectionTickTimeInterval(CHECK_INTERVAL_INIT),
42+
getTimeRetries(MAX_GETTIME_RETRY) {
3943
}
4044

4145
unsigned long WiFiConnectionManager::getTime() {
@@ -47,7 +51,7 @@ void WiFiConnectionManager::init() {
4751

4852
void WiFiConnectionManager::changeConnectionState(NetworkConnectionState _newState) {
4953
char msgBuffer[120];
50-
int newInterval = CHECK_INTERVAL_IDLE;
54+
int newInterval = CHECK_INTERVAL_INIT;
5155
switch (_newState) {
5256
case CONNECTION_STATE_INIT:
5357
newInterval = CHECK_INTERVAL_INIT;
@@ -87,9 +91,6 @@ void WiFiConnectionManager::check() {
8791
int networkStatus = 0;
8892
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
8993
switch (netConnectionState) {
90-
case CONNECTION_STATE_IDLE:
91-
changeConnectionState(CONNECTION_STATE_INIT);
92-
break;
9394
case CONNECTION_STATE_INIT:
9495
networkStatus = WiFi.status();
9596
*msgBuffer = 0;
@@ -133,6 +134,7 @@ void WiFiConnectionManager::check() {
133134
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
134135
debugMessage(msgBuffer, 2);
135136
changeConnectionState(CONNECTION_STATE_GETTIME);
137+
getTimeRetries = MAX_GETTIME_RETRY;
136138
return;
137139
}
138140
break;
@@ -148,7 +150,11 @@ void WiFiConnectionManager::check() {
148150
sprintf(msgBuffer, "Network Time: %u", networkTime);
149151
debugMessage(msgBuffer, 3);
150152
changeConnectionState(CONNECTION_STATE_CONNECTED);
151-
}
153+
} else if (WiFi.status() != WL_CONNECTED) {
154+
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
155+
} else if (!getTimeRetries--) {
156+
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
157+
}
152158
break;
153159
case CONNECTION_STATE_CONNECTED:
154160
// keep testing connection

0 commit comments

Comments
 (0)