@@ -15,7 +15,6 @@ class WiFiConnectionManager : public ConnectionManager {
15
15
16
16
void changeConnectionState (NetworkConnectionState _newState);
17
17
18
- const int CHECK_INTERVAL_IDLE = 100 ;
19
18
const int CHECK_INTERVAL_INIT = 100 ;
20
19
const int CHECK_INTERVAL_CONNECTING = 500 ;
21
20
const int CHECK_INTERVAL_GETTIME = 100 ;
@@ -24,8 +23,12 @@ class WiFiConnectionManager : public ConnectionManager {
24
23
const int CHECK_INTERVAL_DISCONNECTED = 1000 ;
25
24
const int CHECK_INTERVAL_ERROR = 500 ;
26
25
26
+ const int MAX_GETTIME_RETRY = 30 ;
27
+
27
28
const char *ssid, *pass;
28
29
unsigned long lastConnectionTickTime, lastNetworkStep;
30
+ unsigned long getTimeRetries;
31
+
29
32
WiFiClient wifiClient;
30
33
int connectionTickTimeInterval;
31
34
};
@@ -35,7 +38,8 @@ static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
35
38
WiFiConnectionManager::WiFiConnectionManager (const char *ssid, const char *pass) :
36
39
ssid(ssid), pass(pass),
37
40
lastConnectionTickTime(millis()),
38
- connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
41
+ connectionTickTimeInterval(CHECK_INTERVAL_INIT),
42
+ getTimeRetries(MAX_GETTIME_RETRY) {
39
43
}
40
44
41
45
unsigned long WiFiConnectionManager::getTime () {
@@ -47,7 +51,7 @@ void WiFiConnectionManager::init() {
47
51
48
52
void WiFiConnectionManager::changeConnectionState (NetworkConnectionState _newState) {
49
53
char msgBuffer[120 ];
50
- int newInterval = CHECK_INTERVAL_IDLE ;
54
+ int newInterval = CHECK_INTERVAL_INIT ;
51
55
switch (_newState) {
52
56
case CONNECTION_STATE_INIT:
53
57
newInterval = CHECK_INTERVAL_INIT;
@@ -87,9 +91,6 @@ void WiFiConnectionManager::check() {
87
91
int networkStatus = 0 ;
88
92
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
89
93
switch (netConnectionState) {
90
- case CONNECTION_STATE_IDLE:
91
- changeConnectionState (CONNECTION_STATE_INIT);
92
- break ;
93
94
case CONNECTION_STATE_INIT:
94
95
networkStatus = WiFi.status ();
95
96
*msgBuffer = 0 ;
@@ -133,6 +134,7 @@ void WiFiConnectionManager::check() {
133
134
sprintf (msgBuffer, " Connected to \" %s\" " , ssid);
134
135
debugMessage (msgBuffer, 2 );
135
136
changeConnectionState (CONNECTION_STATE_GETTIME);
137
+ getTimeRetries = MAX_GETTIME_RETRY;
136
138
return ;
137
139
}
138
140
break ;
@@ -148,7 +150,11 @@ void WiFiConnectionManager::check() {
148
150
sprintf (msgBuffer, " Network Time: %u" , networkTime);
149
151
debugMessage (msgBuffer, 3 );
150
152
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
+ }
152
158
break ;
153
159
case CONNECTION_STATE_CONNECTED:
154
160
// keep testing connection
0 commit comments