15
15
* a commercial license, send an email to [email protected] .
16
16
*/
17
17
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
+ */
18
32
#include < MKRGSM.h>
19
33
#include " ConnectionManager.h"
20
34
@@ -45,12 +59,14 @@ class GSMConnectionManager : public ConnectionManager {
45
59
const int CHECK_INTERVAL_DISCONNECTED = 1000 ;
46
60
const int CHECK_INTERVAL_ERROR = 500 ;
47
61
62
+ const int MAX_GETTIME_RETRY = 30 ;
63
+
48
64
const char *pin, *apn, *login, *pass;
49
65
unsigned long lastConnectionTickTime, lastNetworkStep;
66
+ unsigned long getTimeRetries;
50
67
int connectionTickTimeInterval;
51
68
GSMUDP Udp;
52
- void sendNTPpacket (const char * address, uint8_t * packetBuffer);
53
- unsigned long getNTPTime ();
69
+
54
70
};
55
71
56
72
static const unsigned long NETWORK_CONNECTION_INTERVAL = 30000 ;
@@ -61,7 +77,8 @@ GSMConnectionManager::GSMConnectionManager(const char *pin, const char *apn, con
61
77
login(login),
62
78
pass(pass),
63
79
lastConnectionTickTime(millis()),
64
- connectionTickTimeInterval(CHECK_INTERVAL_IDLE) {
80
+ connectionTickTimeInterval(CHECK_INTERVAL_IDLE),
81
+ getTimeRetries(MAX_GETTIME_RETRY) {
65
82
}
66
83
67
84
unsigned long GSMConnectionManager::getTime () {
@@ -71,85 +88,98 @@ unsigned long GSMConnectionManager::getTime() {
71
88
void GSMConnectionManager::init () {
72
89
char msgBuffer[120 ];
73
90
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 );
77
93
gsmAccess.setTimeout (CHECK_INTERVAL_RETRYING);
94
+ changeConnectionState (CONNECTION_STATE_CONNECTING);
78
95
} 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 );
82
98
while (1 );
83
99
}
84
100
}
85
101
86
102
void GSMConnectionManager::changeConnectionState (NetworkConnectionState _newState) {
87
- netConnectionState = _newState ;
103
+ char msgBuffer[ 120 ] ;
88
104
int newInterval = CHECK_INTERVAL_IDLE;
89
105
switch (_newState) {
90
106
case CONNECTION_STATE_INIT:
91
107
newInterval = CHECK_INTERVAL_INIT;
92
108
break ;
93
109
case CONNECTION_STATE_CONNECTING:
110
+ sprintf (msgBuffer, " Connecting to Cellular Network" );
111
+ debugMessage (msgBuffer, 2 );
94
112
newInterval = CHECK_INTERVAL_CONNECTING;
95
113
break ;
96
114
case CONNECTION_STATE_GETTIME:
115
+ debugMessage (" Acquiring Time from Network" , 3 );
97
116
newInterval = CHECK_INTERVAL_GETTIME;
117
+ getTimeRetries = MAX_GETTIME_RETRY;
98
118
break ;
99
119
case CONNECTION_STATE_CONNECTED:
100
120
newInterval = CHECK_INTERVAL_CONNECTED;
101
121
break ;
102
122
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.\n Attempting reconnection" , 0 );
128
+ }
103
129
newInterval = CHECK_INTERVAL_DISCONNECTED;
104
130
break ;
131
+ case CONNECTION_STATE_ERROR:
132
+ debugMessage (" GPRS attach failed\n Make sure the antenna is connected" , 0 );
133
+ break ;
105
134
}
106
135
connectionTickTimeInterval = newInterval;
107
136
lastConnectionTickTime = millis ();
137
+ netConnectionState = _newState;
108
138
}
109
139
110
140
void GSMConnectionManager::check () {
111
141
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;
114
146
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
115
147
switch (netConnectionState) {
116
148
case CONNECTION_STATE_INIT:
117
149
init ();
118
- changeConnectionState (CONNECTION_STATE_CONNECTING);
119
150
break ;
120
151
case CONNECTION_STATE_CONNECTING:
121
152
// blocking call with 4th parameter == true
122
153
networkStatus = gprs.attachGPRS (apn, login, pass, true );
123
- *msgBuffer = 0 ;
154
+
124
155
sprintf (msgBuffer, " GPRS.attachGPRS(): %d" , networkStatus);
125
- debugMessage (msgBuffer, 2 );
126
- if (networkStatus == ERROR) {
127
- debugMessage (" GPRS attach failed\n Make 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);
130
159
return ;
131
160
}
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);
139
169
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 );
144
174
145
- *msgBuffer = 0 ;
175
+
146
176
sprintf (msgBuffer, " Retrying in \" %d\" milliseconds" , connectionTickTimeInterval);
147
177
debugMessage (msgBuffer, 2 );
148
- changeConnectionState (CONNECTION_STATE_CONNECTING);
178
+ // changeConnectionState(CONNECTION_STATE_CONNECTING);
149
179
return ;
150
180
} else {
151
- *msgBuffer = 0 ;
152
- sprintf (msgBuffer, " Connected! " );
181
+
182
+ sprintf (msgBuffer, " Connected to GPRS netowrk " );
153
183
debugMessage (msgBuffer, 2 );
154
184
changeConnectionState (CONNECTION_STATE_GETTIME);
155
185
return ;
@@ -159,38 +189,38 @@ void GSMConnectionManager::check() {
159
189
debugMessage (" Acquiring Time from Network" , 3 );
160
190
unsigned long networkTime;
161
191
networkTime = getTime ();
162
- *msgBuffer = 0 ;
163
- sprintf (msgBuffer, " Network Time: %u" , networkTime);
164
- debugMessage (msgBuffer, 3 );
192
+
193
+ debugMessage (" ." , 3 , false , false );
165
194
if (networkTime > lastValidTimestamp){
166
195
lastValidTimestamp = networkTime;
196
+ sprintf (msgBuffer, " Network Time: %u" , networkTime);
197
+ debugMessage (msgBuffer, 3 );
167
198
changeConnectionState (CONNECTION_STATE_CONNECTED);
199
+ }else if (gsmAccess.isAccessAlive () != 1 ){
200
+ changeConnectionState (CONNECTION_STATE_DISCONNECTED);
201
+ }else if (!getTimeRetries--) {
202
+ changeConnectionState (CONNECTION_STATE_DISCONNECTED);
168
203
}
169
204
break ;
170
205
case CONNECTION_STATE_CONNECTED:
171
206
// 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 );
175
210
debugMessage (msgBuffer, 4 );
176
- if (networkStatus != 1 ) {
211
+ if (gsmAccessAlive != 1 ) {
177
212
changeConnectionState (CONNECTION_STATE_DISCONNECTED);
178
213
return ;
179
214
}
180
- *msgBuffer = 0 ;
181
- sprintf (msgBuffer, " Still connected " );
215
+
216
+ sprintf (msgBuffer, " Connected to Cellular Network " );
182
217
debugMessage (msgBuffer, 4 );
183
218
break ;
184
219
case CONNECTION_STATE_DISCONNECTED:
185
220
gprs.detachGPRS ();
186
221
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
+
194
224
changeConnectionState (CONNECTION_STATE_CONNECTING);
195
225
// wifiClient.stop();
196
226
break ;
0 commit comments