Skip to content

Commit a243573

Browse files
committed
- refactor GSMConnectionManager
- minor refactoring on WiFiConnectionManager
1 parent 4014095 commit a243573

File tree

2 files changed

+91
-64
lines changed

2 files changed

+91
-64
lines changed

src/GSMConnectionManager.h

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

18+
/*
19+
TODO: REMOVE AFTER FIX [FOR REFERENCE ONLY]
20+
enum GSM3_NetworkStatus_t
21+
{
22+
ERROR,
23+
IDLE,
24+
CONNECTING,
25+
GSM_READY,
26+
GPRS_READY,
27+
TRANSPARENT_CONNECTED,
28+
GSM_OFF
29+
};
30+
31+
*/
1832
#include <MKRGSM.h>
1933
#include "ConnectionManager.h"
2034

@@ -45,12 +59,14 @@ class GSMConnectionManager : public ConnectionManager {
4559
const int CHECK_INTERVAL_DISCONNECTED = 1000;
4660
const int CHECK_INTERVAL_ERROR = 500;
4761

62+
const int MAX_GETTIME_RETRY = 30;
63+
4864
const char *pin, *apn, *login, *pass;
4965
unsigned long lastConnectionTickTime, lastNetworkStep;
66+
unsigned long getTimeRetries;
5067
int connectionTickTimeInterval;
5168
GSMUDP Udp;
52-
void sendNTPpacket(const char * address, uint8_t* packetBuffer);
53-
unsigned long getNTPTime();
69+
5470
};
5571

5672
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000;
@@ -61,7 +77,8 @@ GSMConnectionManager::GSMConnectionManager(const char *pin, const char *apn, con
6177
login(login),
6278
pass(pass),
6379
lastConnectionTickTime(millis()),
64-
connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
80+
connectionTickTimeInterval(CHECK_INTERVAL_IDLE),
81+
getTimeRetries(MAX_GETTIME_RETRY) {
6582
}
6683

6784
unsigned long GSMConnectionManager::getTime() {
@@ -71,85 +88,98 @@ unsigned long GSMConnectionManager::getTime() {
7188
void GSMConnectionManager::init() {
7289
char msgBuffer[120];
7390
if (gsmAccess.begin(pin) == GSM_READY) {
74-
*msgBuffer = 0;
75-
sprintf(msgBuffer, "SIM card ok");
76-
debugMessage(msgBuffer, 2);
91+
//sprintf(msgBuffer, "SIM card ok");
92+
debugMessage("SIM card ok", 2);
7793
gsmAccess.setTimeout(CHECK_INTERVAL_RETRYING);
94+
changeConnectionState(CONNECTION_STATE_CONNECTING);
7895
} else {
79-
*msgBuffer = 0;
80-
sprintf(msgBuffer, "SIM not present");
81-
debugMessage(msgBuffer, 2);
96+
//sprintf(msgBuffer, "SIM not present or wrong PIN");
97+
debugMessage("SIM not present or wrong PIN", 0);
8298
while(1);
8399
}
84100
}
85101

86102
void GSMConnectionManager::changeConnectionState(NetworkConnectionState _newState) {
87-
netConnectionState = _newState;
103+
char msgBuffer[120];
88104
int newInterval = CHECK_INTERVAL_IDLE;
89105
switch (_newState) {
90106
case CONNECTION_STATE_INIT:
91107
newInterval = CHECK_INTERVAL_INIT;
92108
break;
93109
case CONNECTION_STATE_CONNECTING:
110+
sprintf(msgBuffer, "Connecting to Cellular Network");
111+
debugMessage(msgBuffer, 2);
94112
newInterval = CHECK_INTERVAL_CONNECTING;
95113
break;
96114
case CONNECTION_STATE_GETTIME:
115+
debugMessage("Acquiring Time from Network", 3);
97116
newInterval = CHECK_INTERVAL_GETTIME;
117+
getTimeRetries = MAX_GETTIME_RETRY;
98118
break;
99119
case CONNECTION_STATE_CONNECTED:
100120
newInterval = CHECK_INTERVAL_CONNECTED;
101121
break;
102122
case CONNECTION_STATE_DISCONNECTED:
123+
if(netConnectionState == CONNECTION_STATE_CONNECTED){
124+
debugMessage("Disconnected from Cellular Network", 0);
125+
debugMessage("Attempting reconnection", 0);
126+
}else if(netConnectionState == CONNECTION_STATE_GETTIME){
127+
debugMessage("Connection to Cellular Network lost during Network Time acquisition.\nAttempting reconnection", 0);
128+
}
103129
newInterval = CHECK_INTERVAL_DISCONNECTED;
104130
break;
131+
case CONNECTION_STATE_ERROR:
132+
debugMessage("GPRS attach failed\nMake sure the antenna is connected", 0);
133+
break;
105134
}
106135
connectionTickTimeInterval = newInterval;
107136
lastConnectionTickTime = millis();
137+
netConnectionState = _newState;
108138
}
109139

110140
void GSMConnectionManager::check() {
111141
char msgBuffer[120];
112-
unsigned long now = millis();
113-
int networkStatus = 0;
142+
unsigned long const now = millis();
143+
//int networkStatus = 0;
144+
GSM3_NetworkStatus_t networkStatus = GSM3_NetworkStatus_t::IDLE;
145+
int gsmAccessAlive;
114146
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
115147
switch (netConnectionState) {
116148
case CONNECTION_STATE_INIT:
117149
init();
118-
changeConnectionState(CONNECTION_STATE_CONNECTING);
119150
break;
120151
case CONNECTION_STATE_CONNECTING:
121152
// blocking call with 4th parameter == true
122153
networkStatus = gprs.attachGPRS(apn, login, pass, true);
123-
*msgBuffer = 0;
154+
124155
sprintf(msgBuffer, "GPRS.attachGPRS(): %d", networkStatus);
125-
debugMessage(msgBuffer, 2);
126-
if (networkStatus == ERROR) {
127-
debugMessage("GPRS attach failed\nMake sure the antenna is connected", 0);
128-
changeConnectionState(CONNECTION_STATE_CONNECTING);
129-
lastConnectionTickTime = now;
156+
debugMessage(msgBuffer, 3);
157+
if (networkStatus == GSM3_NetworkStatus_t::ERROR) {
158+
changeConnectionState(CONNECTION_STATE_ERROR);
130159
return;
131160
}
132-
*msgBuffer = 0;
133-
sprintf(msgBuffer, "Trying to ping external world");
134-
debugMessage(msgBuffer, 2);
135-
136-
networkStatus = gprs.ping("google.com");
137-
*msgBuffer = 0;
138-
sprintf(msgBuffer, "GSM.ping(): %d", networkStatus);
161+
162+
//sprintf(msgBuffer, "Sending PING to network server ");
163+
debugMessage("Sending PING to outer space...", 2);
164+
165+
int pingResult;
166+
pingResult = gprs.ping("google.com");
167+
168+
sprintf(msgBuffer, "GSM.ping(): %d", pingResult);
139169
debugMessage(msgBuffer, 2);
140-
if (networkStatus < 0) {
141-
*msgBuffer = 0;
142-
sprintf(msgBuffer, "Ping failed");
143-
debugMessage(msgBuffer, 0);
170+
if (pingResult < 0) {
171+
172+
//sprintf(msgBuffer, "Ping failed");
173+
debugMessage("PING failed", 0);
144174

145-
*msgBuffer = 0;
175+
146176
sprintf(msgBuffer, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
147177
debugMessage(msgBuffer, 2);
148-
changeConnectionState(CONNECTION_STATE_CONNECTING);
178+
//changeConnectionState(CONNECTION_STATE_CONNECTING);
149179
return;
150180
} else {
151-
*msgBuffer = 0;
152-
sprintf(msgBuffer, "Connected!");
181+
182+
sprintf(msgBuffer, "Connected to GPRS netowrk");
153183
debugMessage(msgBuffer, 2);
154184
changeConnectionState(CONNECTION_STATE_GETTIME);
155185
return;
@@ -159,38 +189,38 @@ void GSMConnectionManager::check() {
159189
debugMessage("Acquiring Time from Network", 3);
160190
unsigned long networkTime;
161191
networkTime = getTime();
162-
*msgBuffer = 0;
163-
sprintf(msgBuffer, "Network Time: %u", networkTime);
164-
debugMessage(msgBuffer, 3);
192+
193+
debugMessage(".", 3, false, false);
165194
if(networkTime > lastValidTimestamp){
166195
lastValidTimestamp = networkTime;
196+
sprintf(msgBuffer, "Network Time: %u", networkTime);
197+
debugMessage(msgBuffer, 3);
167198
changeConnectionState(CONNECTION_STATE_CONNECTED);
199+
}else if(gsmAccess.isAccessAlive() != 1){
200+
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
201+
}else if (!getTimeRetries--) {
202+
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
168203
}
169204
break;
170205
case CONNECTION_STATE_CONNECTED:
171206
// keep testing connection
172-
networkStatus = gsmAccess.isAccessAlive();
173-
*msgBuffer = 0;
174-
sprintf(msgBuffer, "GPRS.isAccessAlive(): %d", networkStatus);
207+
gsmAccessAlive = gsmAccess.isAccessAlive();
208+
209+
sprintf(msgBuffer, "GPRS.isAccessAlive(): %d", gsmAccessAlive);
175210
debugMessage(msgBuffer, 4);
176-
if (networkStatus != 1) {
211+
if (gsmAccessAlive != 1) {
177212
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
178213
return;
179214
}
180-
*msgBuffer = 0;
181-
sprintf(msgBuffer, "Still connected");
215+
216+
sprintf(msgBuffer, "Connected to Cellular Network");
182217
debugMessage(msgBuffer, 4);
183218
break;
184219
case CONNECTION_STATE_DISCONNECTED:
185220
gprs.detachGPRS();
186221

187-
*msgBuffer = 0;
188-
sprintf(msgBuffer, "DISC | GPRS.status(): %d", gprs.status());
189-
debugMessage(msgBuffer, 1);
190-
*msgBuffer = 0;
191-
sprintf(msgBuffer, "Connection lost.");
192-
debugMessage(msgBuffer, 0);
193-
debugMessage("Attempting reconnection", 1);
222+
223+
194224
changeConnectionState(CONNECTION_STATE_CONNECTING);
195225
//wifiClient.stop();
196226
break;

src/WiFiConnectionManager.h

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,23 +73,21 @@ void WiFiConnectionManager::changeConnectionState(NetworkConnectionState _newSta
7373
newInterval = CHECK_INTERVAL_INIT;
7474
break;
7575
case CONNECTION_STATE_CONNECTING:
76-
*msgBuffer = 0;
7776
sprintf(msgBuffer, "Connecting to \"%s\"", ssid);
7877
debugMessage(msgBuffer, 2);
7978
newInterval = CHECK_INTERVAL_CONNECTING;
8079
break;
8180
case CONNECTION_STATE_GETTIME:
8281
newInterval = CHECK_INTERVAL_GETTIME;
8382
debugMessage("Acquiring Time from Network", 3);
83+
getTimeRetries = MAX_GETTIME_RETRY;
8484
break;
8585
case CONNECTION_STATE_CONNECTED:
8686
newInterval = CHECK_INTERVAL_CONNECTED;
8787
break;
8888
case CONNECTION_STATE_DISCONNECTED:
89-
*msgBuffer = 0;
9089
sprintf(msgBuffer, "WiFi.status(): %d", WiFi.status());
9190
debugMessage(msgBuffer, 4);
92-
*msgBuffer = 0;
9391
sprintf(msgBuffer, "Connection to \"%s\" lost.", ssid);
9492
debugMessage(msgBuffer, 0);
9593
debugMessage("Attempting reconnection", 0);
@@ -109,7 +107,7 @@ void WiFiConnectionManager::check() {
109107
switch (netConnectionState) {
110108
case CONNECTION_STATE_INIT:
111109
networkStatus = WiFi.status();
112-
*msgBuffer = 0;
110+
113111
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
114112
debugMessage(msgBuffer, 2);
115113
if (networkStatus == NETWORK_HARDWARE_ERROR) {
@@ -119,11 +117,11 @@ void WiFiConnectionManager::check() {
119117
lastConnectionTickTime = now;
120118
return;
121119
}
122-
*msgBuffer = 0;
120+
123121
sprintf(msgBuffer, "Current WiFi Firmware: %s", WiFi.firmwareVersion());
124122
debugMessage(msgBuffer, 0);
125123
if(strcmp(WiFi.firmwareVersion(), WIFI_FIRMWARE_VERSION_REQUIRED) != 0){
126-
*msgBuffer = 0;
124+
127125
sprintf(msgBuffer, "Latest WiFi Firmware: %s", WIFI_FIRMWARE_VERSION_REQUIRED);
128126
debugMessage(msgBuffer, 0);
129127
debugMessage("Please update to latest version for optimal performance.", 0);
@@ -132,25 +130,24 @@ void WiFiConnectionManager::check() {
132130
break;
133131
case CONNECTION_STATE_CONNECTING:
134132
networkStatus = WiFi.begin(ssid, pass);
135-
*msgBuffer = 0;
133+
136134
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
137135
debugMessage(msgBuffer, 4);
138136
if (networkStatus != NETWORK_CONNECTED) {
139-
*msgBuffer = 0;
137+
140138
sprintf(msgBuffer, "Connection to \"%s\" failed", ssid);
141139
debugMessage(msgBuffer, 0);
142140

143-
*msgBuffer = 0;
141+
144142
sprintf(msgBuffer, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
145143
debugMessage(msgBuffer, 2);
146144
//changeConnectionState(CONNECTION_STATE_CONNECTING);
147145
return;
148146
} else {
149-
*msgBuffer = 0;
147+
150148
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
151149
debugMessage(msgBuffer, 2);
152150
changeConnectionState(CONNECTION_STATE_GETTIME);
153-
getTimeRetries = MAX_GETTIME_RETRY;
154151
return;
155152
}
156153
break;
@@ -162,7 +159,7 @@ void WiFiConnectionManager::check() {
162159
debugMessage(".", 3, false, false);
163160
if(networkTime > lastValidTimestamp){
164161
lastValidTimestamp = networkTime;
165-
*msgBuffer = 0;
162+
166163
sprintf(msgBuffer, "Network Time: %u", networkTime);
167164
debugMessage(msgBuffer, 3);
168165
changeConnectionState(CONNECTION_STATE_CONNECTED);
@@ -175,14 +172,14 @@ void WiFiConnectionManager::check() {
175172
case CONNECTION_STATE_CONNECTED:
176173
// keep testing connection
177174
networkStatus = WiFi.status();
178-
*msgBuffer = 0;
175+
179176
sprintf(msgBuffer, "WiFi.status(): %d", networkStatus);
180177
debugMessage(msgBuffer, 4);
181178
if (networkStatus != WL_CONNECTED) {
182179
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
183180
return;
184181
}
185-
*msgBuffer = 0;
182+
186183
sprintf(msgBuffer, "Connected to \"%s\"", ssid);
187184
debugMessage(msgBuffer, 4);
188185
break;

0 commit comments

Comments
 (0)