@@ -31,17 +31,20 @@ class WiFiConnectionManager : public ConnectionManager {
31
31
32
32
void changeConnectionState (NetworkConnectionState _newState);
33
33
34
- const int CHECK_INTERVAL_IDLE = 100 ;
35
34
const int CHECK_INTERVAL_INIT = 100 ;
36
35
const int CHECK_INTERVAL_CONNECTING = 500 ;
37
- const int CHECK_INTERVAL_GETTIME = 1000 ;
36
+ const int CHECK_INTERVAL_GETTIME = 100 ;
38
37
const int CHECK_INTERVAL_CONNECTED = 10000 ;
39
38
const int CHECK_INTERVAL_RETRYING = 5000 ;
40
39
const int CHECK_INTERVAL_DISCONNECTED = 1000 ;
41
40
const int CHECK_INTERVAL_ERROR = 500 ;
42
41
42
+ const int MAX_GETTIME_RETRY = 30 ;
43
+
43
44
const char *ssid, *pass;
44
45
unsigned long lastConnectionTickTime, lastNetworkStep;
46
+ unsigned long getTimeRetries;
47
+
45
48
WiFiClient wifiClient;
46
49
int connectionTickTimeInterval;
47
50
};
@@ -51,7 +54,8 @@ static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
51
54
WiFiConnectionManager::WiFiConnectionManager (const char *ssid, const char *pass) :
52
55
ssid(ssid), pass(pass),
53
56
lastConnectionTickTime(millis()),
54
- connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
57
+ connectionTickTimeInterval(CHECK_INTERVAL_INIT),
58
+ getTimeRetries(MAX_GETTIME_RETRY) {
55
59
}
56
60
57
61
unsigned long WiFiConnectionManager::getTime () {
@@ -62,28 +66,39 @@ void WiFiConnectionManager::init() {
62
66
}
63
67
64
68
void WiFiConnectionManager::changeConnectionState (NetworkConnectionState _newState) {
65
- netConnectionState = _newState ;
66
- int newInterval = CHECK_INTERVAL_IDLE ;
69
+ char msgBuffer[ 120 ] ;
70
+ int newInterval = CHECK_INTERVAL_INIT ;
67
71
switch (_newState) {
68
72
case CONNECTION_STATE_INIT:
69
73
newInterval = CHECK_INTERVAL_INIT;
70
74
break ;
71
75
case CONNECTION_STATE_CONNECTING:
76
+ *msgBuffer = 0 ;
77
+ sprintf (msgBuffer, " Connecting to \" %s\" " , ssid);
78
+ debugMessage (msgBuffer, 2 );
72
79
newInterval = CHECK_INTERVAL_CONNECTING;
73
80
break ;
74
81
case CONNECTION_STATE_GETTIME:
75
82
newInterval = CHECK_INTERVAL_GETTIME;
83
+ debugMessage (" Acquiring Time from Network" , 3 );
76
84
break ;
77
85
case CONNECTION_STATE_CONNECTED:
78
86
newInterval = CHECK_INTERVAL_CONNECTED;
79
87
break ;
80
88
case CONNECTION_STATE_DISCONNECTED:
89
+ *msgBuffer = 0 ;
90
+ sprintf (msgBuffer, " WiFi.status(): %d" , WiFi.status ());
91
+ debugMessage (msgBuffer, 4 );
92
+ *msgBuffer = 0 ;
93
+ sprintf (msgBuffer, " Connection to \" %s\" lost." , ssid);
94
+ debugMessage (msgBuffer, 0 );
95
+ debugMessage (" Attempting reconnection" , 0 );
81
96
newInterval = CHECK_INTERVAL_DISCONNECTED;
82
-
83
97
break ;
84
98
}
85
99
connectionTickTimeInterval = newInterval;
86
100
lastConnectionTickTime = millis ();
101
+ netConnectionState = _newState;
87
102
}
88
103
89
104
void WiFiConnectionManager::check () {
@@ -92,9 +107,6 @@ void WiFiConnectionManager::check() {
92
107
int networkStatus = 0 ;
93
108
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
94
109
switch (netConnectionState) {
95
- case CONNECTION_STATE_IDLE:
96
- changeConnectionState (CONNECTION_STATE_INIT);
97
- break ;
98
110
case CONNECTION_STATE_INIT:
99
111
networkStatus = WiFi.status ();
100
112
*msgBuffer = 0 ;
@@ -108,19 +120,21 @@ void WiFiConnectionManager::check() {
108
120
return ;
109
121
}
110
122
*msgBuffer = 0 ;
111
- sprintf (msgBuffer, " WiFi Firmware v. %s" , WiFi.firmwareVersion ());
123
+ sprintf (msgBuffer, " Current WiFi Firmware: %s" , WiFi.firmwareVersion ());
112
124
debugMessage (msgBuffer, 0 );
125
+ if (strcmp (WiFi.firmwareVersion (), WIFI_FIRMWARE_VERSION_REQUIRED) != 0 ){
126
+ *msgBuffer = 0 ;
127
+ sprintf (msgBuffer, " Latest WiFi Firmware: %s" , WIFI_FIRMWARE_VERSION_REQUIRED);
128
+ debugMessage (msgBuffer, 0 );
129
+ debugMessage (" Please update to latest version for optimal performance." , 0 );
130
+ }
113
131
changeConnectionState (CONNECTION_STATE_CONNECTING);
114
132
break ;
115
133
case CONNECTION_STATE_CONNECTING:
116
- *msgBuffer = 0 ;
117
- sprintf (msgBuffer, " Connecting to \" %s\" " , ssid);
118
- debugMessage (msgBuffer, 2 );
119
-
120
134
networkStatus = WiFi.begin (ssid, pass);
121
135
*msgBuffer = 0 ;
122
136
sprintf (msgBuffer, " WiFi.status(): %d" , networkStatus);
123
- debugMessage (msgBuffer, 2 );
137
+ debugMessage (msgBuffer, 4 );
124
138
if (networkStatus != NETWORK_CONNECTED) {
125
139
*msgBuffer = 0 ;
126
140
sprintf (msgBuffer, " Connection to \" %s\" failed" , ssid);
@@ -136,46 +150,47 @@ void WiFiConnectionManager::check() {
136
150
sprintf (msgBuffer, " Connected to \" %s\" " , ssid);
137
151
debugMessage (msgBuffer, 2 );
138
152
changeConnectionState (CONNECTION_STATE_GETTIME);
153
+ getTimeRetries = MAX_GETTIME_RETRY;
139
154
return ;
140
155
}
141
156
break ;
142
157
case CONNECTION_STATE_GETTIME:
143
- debugMessage ( " Acquiring Time from Network " , 3 );
158
+
144
159
unsigned long networkTime;
145
160
networkTime = WiFi.getTime ();
146
- *msgBuffer = 0 ;
147
- sprintf (msgBuffer, " Network Time: %u" , networkTime);
148
- debugMessage (msgBuffer, 3 );
161
+
162
+ debugMessage (" ." , 3 , false , false );
149
163
if (networkTime > lastValidTimestamp){
150
164
lastValidTimestamp = networkTime;
165
+ *msgBuffer = 0 ;
166
+ sprintf (msgBuffer, " Network Time: %u" , networkTime);
167
+ debugMessage (msgBuffer, 3 );
151
168
changeConnectionState (CONNECTION_STATE_CONNECTED);
152
- }
169
+ } else if (WiFi.status () != WL_CONNECTED) {
170
+ changeConnectionState (CONNECTION_STATE_DISCONNECTED);
171
+ } else if (!getTimeRetries--) {
172
+ changeConnectionState (CONNECTION_STATE_DISCONNECTED);
173
+ }
153
174
break ;
154
175
case CONNECTION_STATE_CONNECTED:
155
176
// keep testing connection
156
177
networkStatus = WiFi.status ();
157
178
*msgBuffer = 0 ;
158
179
sprintf (msgBuffer, " WiFi.status(): %d" , networkStatus);
159
- debugMessage (msgBuffer, 2 );
180
+ debugMessage (msgBuffer, 4 );
160
181
if (networkStatus != WL_CONNECTED) {
161
182
changeConnectionState (CONNECTION_STATE_DISCONNECTED);
162
183
return ;
163
184
}
164
185
*msgBuffer = 0 ;
165
186
sprintf (msgBuffer, " Connected to \" %s\" " , ssid);
166
- debugMessage (msgBuffer, 2 );
187
+ debugMessage (msgBuffer, 4 );
167
188
break ;
168
189
case CONNECTION_STATE_DISCONNECTED:
169
190
// WiFi.disconnect();
170
191
WiFi.end ();
171
192
172
- *msgBuffer = 0 ;
173
- sprintf (msgBuffer, " DISC | WiFi.status(): %d" , WiFi.status ());
174
- debugMessage (msgBuffer, 1 );
175
- *msgBuffer = 0 ;
176
- sprintf (msgBuffer, " Connection to \" %s\" lost." , ssid);
177
- debugMessage (msgBuffer, 0 );
178
- debugMessage (" Attempting reconnection" , 1 );
193
+
179
194
changeConnectionState (CONNECTION_STATE_CONNECTING);
180
195
// wifiClient.stop();
181
196
break ;
0 commit comments