@@ -31,17 +31,20 @@ class WiFiConnectionManager : public ConnectionManager {
3131
3232 void changeConnectionState (NetworkConnectionState _newState);
3333
34- const int CHECK_INTERVAL_IDLE = 100 ;
3534 const int CHECK_INTERVAL_INIT = 100 ;
3635 const int CHECK_INTERVAL_CONNECTING = 500 ;
37- const int CHECK_INTERVAL_GETTIME = 1000 ;
36+ const int CHECK_INTERVAL_GETTIME = 100 ;
3837 const int CHECK_INTERVAL_CONNECTED = 10000 ;
3938 const int CHECK_INTERVAL_RETRYING = 5000 ;
4039 const int CHECK_INTERVAL_DISCONNECTED = 1000 ;
4140 const int CHECK_INTERVAL_ERROR = 500 ;
4241
42+ const int MAX_GETTIME_RETRY = 30 ;
43+
4344 const char *ssid, *pass;
4445 unsigned long lastConnectionTickTime, lastNetworkStep;
46+ unsigned long getTimeRetries;
47+
4548 WiFiClient wifiClient;
4649 int connectionTickTimeInterval;
4750};
@@ -51,7 +54,8 @@ static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
5154WiFiConnectionManager::WiFiConnectionManager (const char *ssid, const char *pass) :
5255 ssid(ssid), pass(pass),
5356 lastConnectionTickTime(millis()),
54- connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
57+ connectionTickTimeInterval(CHECK_INTERVAL_INIT),
58+ getTimeRetries(MAX_GETTIME_RETRY) {
5559}
5660
5761unsigned long WiFiConnectionManager::getTime () {
@@ -62,28 +66,39 @@ void WiFiConnectionManager::init() {
6266}
6367
6468void WiFiConnectionManager::changeConnectionState (NetworkConnectionState _newState) {
65- netConnectionState = _newState ;
66- int newInterval = CHECK_INTERVAL_IDLE ;
69+ char msgBuffer[ 120 ] ;
70+ int newInterval = CHECK_INTERVAL_INIT ;
6771 switch (_newState) {
6872 case CONNECTION_STATE_INIT:
6973 newInterval = CHECK_INTERVAL_INIT;
7074 break ;
7175 case CONNECTION_STATE_CONNECTING:
76+ *msgBuffer = 0 ;
77+ sprintf (msgBuffer, " Connecting to \" %s\" " , ssid);
78+ debugMessage (msgBuffer, 2 );
7279 newInterval = CHECK_INTERVAL_CONNECTING;
7380 break ;
7481 case CONNECTION_STATE_GETTIME:
7582 newInterval = CHECK_INTERVAL_GETTIME;
83+ debugMessage (" Acquiring Time from Network" , 3 );
7684 break ;
7785 case CONNECTION_STATE_CONNECTED:
7886 newInterval = CHECK_INTERVAL_CONNECTED;
7987 break ;
8088 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 );
8196 newInterval = CHECK_INTERVAL_DISCONNECTED;
82-
8397 break ;
8498 }
8599 connectionTickTimeInterval = newInterval;
86100 lastConnectionTickTime = millis ();
101+ netConnectionState = _newState;
87102}
88103
89104void WiFiConnectionManager::check () {
@@ -92,9 +107,6 @@ void WiFiConnectionManager::check() {
92107 int networkStatus = 0 ;
93108 if (now - lastConnectionTickTime > connectionTickTimeInterval) {
94109 switch (netConnectionState) {
95- case CONNECTION_STATE_IDLE:
96- changeConnectionState (CONNECTION_STATE_INIT);
97- break ;
98110 case CONNECTION_STATE_INIT:
99111 networkStatus = WiFi.status ();
100112 *msgBuffer = 0 ;
@@ -108,19 +120,21 @@ void WiFiConnectionManager::check() {
108120 return ;
109121 }
110122 *msgBuffer = 0 ;
111- sprintf (msgBuffer, " WiFi Firmware v. %s" , WiFi.firmwareVersion ());
123+ sprintf (msgBuffer, " Current WiFi Firmware: %s" , WiFi.firmwareVersion ());
112124 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+ }
113131 changeConnectionState (CONNECTION_STATE_CONNECTING);
114132 break ;
115133 case CONNECTION_STATE_CONNECTING:
116- *msgBuffer = 0 ;
117- sprintf (msgBuffer, " Connecting to \" %s\" " , ssid);
118- debugMessage (msgBuffer, 2 );
119-
120134 networkStatus = WiFi.begin (ssid, pass);
121135 *msgBuffer = 0 ;
122136 sprintf (msgBuffer, " WiFi.status(): %d" , networkStatus);
123- debugMessage (msgBuffer, 2 );
137+ debugMessage (msgBuffer, 4 );
124138 if (networkStatus != NETWORK_CONNECTED) {
125139 *msgBuffer = 0 ;
126140 sprintf (msgBuffer, " Connection to \" %s\" failed" , ssid);
@@ -136,46 +150,47 @@ void WiFiConnectionManager::check() {
136150 sprintf (msgBuffer, " Connected to \" %s\" " , ssid);
137151 debugMessage (msgBuffer, 2 );
138152 changeConnectionState (CONNECTION_STATE_GETTIME);
153+ getTimeRetries = MAX_GETTIME_RETRY;
139154 return ;
140155 }
141156 break ;
142157 case CONNECTION_STATE_GETTIME:
143- debugMessage ( " Acquiring Time from Network " , 3 );
158+
144159 unsigned long networkTime;
145160 networkTime = WiFi.getTime ();
146- *msgBuffer = 0 ;
147- sprintf (msgBuffer, " Network Time: %u" , networkTime);
148- debugMessage (msgBuffer, 3 );
161+
162+ debugMessage (" ." , 3 , false , false );
149163 if (networkTime > lastValidTimestamp){
150164 lastValidTimestamp = networkTime;
165+ *msgBuffer = 0 ;
166+ sprintf (msgBuffer, " Network Time: %u" , networkTime);
167+ debugMessage (msgBuffer, 3 );
151168 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+ }
153174 break ;
154175 case CONNECTION_STATE_CONNECTED:
155176 // keep testing connection
156177 networkStatus = WiFi.status ();
157178 *msgBuffer = 0 ;
158179 sprintf (msgBuffer, " WiFi.status(): %d" , networkStatus);
159- debugMessage (msgBuffer, 2 );
180+ debugMessage (msgBuffer, 4 );
160181 if (networkStatus != WL_CONNECTED) {
161182 changeConnectionState (CONNECTION_STATE_DISCONNECTED);
162183 return ;
163184 }
164185 *msgBuffer = 0 ;
165186 sprintf (msgBuffer, " Connected to \" %s\" " , ssid);
166- debugMessage (msgBuffer, 2 );
187+ debugMessage (msgBuffer, 4 );
167188 break ;
168189 case CONNECTION_STATE_DISCONNECTED:
169190 // WiFi.disconnect();
170191 WiFi.end ();
171192
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+
179194 changeConnectionState (CONNECTION_STATE_CONNECTING);
180195 // wifiClient.stop();
181196 break ;
0 commit comments