@@ -43,7 +43,7 @@ LoRaConnectionHandler::LoRaConnectionHandler(const char *_appeui, const char *_a
43
43
_on_connect_event_callback(NULL ),
44
44
_on_disconnect_event_callback(NULL ),
45
45
_on_error_event_callback(NULL ) {
46
- netConnectionState = NetworkConnectionState::INIT;
46
+ netConnectionState = NetworkConnectionState::INIT;
47
47
}
48
48
49
49
/* *****************************************************************************
@@ -93,22 +93,39 @@ int LoRaConnectionHandler::write(const uint8_t *buf, size_t size) {
93
93
err = modem.endPacket (true );
94
94
/* Error manager according pr #68 of MKRWAN repo*/
95
95
if (err != size) {
96
- switch (err) {
97
- case -20 : {Serial.println (" Message length is bigger than max LoRa packet!" );} break ;
98
- case -1 : {Serial.println (" Message ack was not received, the message could not be delivered" );} break ;
99
- case -2 : {Serial.println (" LoRa generic error (LORA_ERROR)" );} break ;
100
- case -3 : {Serial.println (" LoRa malformed param error (LORA_ERROR_PARAM" );} break ;
101
- case -4 : {Serial.println (" LoRa chip is busy (LORA_ERROR_BUSY)" );} break ;
102
- case -5 : {Serial.println (" LoRa chip overflow error (LORA_ERROR_OVERFLOW)" );} break ;
103
- case -6 : {Serial.println (" LoRa no network error (LORA_ERROR_NO_NETWORK)" );} break ;
104
- case -7 : {Serial.println (" LoRa rx error (LORA_ERROR_RX)" );} break ;
105
- case -8 : {Serial.println (" LoRa unknown error (LORA_ERROR_UNKNOWN)" );} break ;
106
- }
107
- }
108
- else {
109
- Serial.println (" Message sent correctly!" );
110
- }
111
- return err;
96
+ switch (err) {
97
+ case -20 : {
98
+ Serial.println (" Message length is bigger than max LoRa packet!" );
99
+ } break ;
100
+ case -1 : {
101
+ Serial.println (" Message ack was not received, the message could not be delivered" );
102
+ } break ;
103
+ case -2 : {
104
+ Serial.println (" LoRa generic error (LORA_ERROR)" );
105
+ } break ;
106
+ case -3 : {
107
+ Serial.println (" LoRa malformed param error (LORA_ERROR_PARAM" );
108
+ } break ;
109
+ case -4 : {
110
+ Serial.println (" LoRa chip is busy (LORA_ERROR_BUSY)" );
111
+ } break ;
112
+ case -5 : {
113
+ Serial.println (" LoRa chip overflow error (LORA_ERROR_OVERFLOW)" );
114
+ } break ;
115
+ case -6 : {
116
+ Serial.println (" LoRa no network error (LORA_ERROR_NO_NETWORK)" );
117
+ } break ;
118
+ case -7 : {
119
+ Serial.println (" LoRa rx error (LORA_ERROR_RX)" );
120
+ } break ;
121
+ case -8 : {
122
+ Serial.println (" LoRa unknown error (LORA_ERROR_UNKNOWN)" );
123
+ } break ;
124
+ }
125
+ } else {
126
+ Serial.println (" Message sent correctly!" );
127
+ }
128
+ return err;
112
129
}
113
130
114
131
int LoRaConnectionHandler::read () {
@@ -126,138 +143,105 @@ void LoRaConnectionHandler::update() {
126
143
if (now - lastConnectionTickTime > connectionTickTimeInterval) { /* time bracket */
127
144
128
145
lastConnectionTickTime = now;
129
-
130
146
switch (netConnectionState) {
131
- case NetworkConnectionState::INIT: {
132
- Debug.print (DBG_VERBOSE, " ::INIT" );
133
- if (!modem.begin (band)) {
134
- Debug.print (DBG_VERBOSE, " Failed to start module" );
135
- changeConnectionState (NetworkConnectionState::ERROR);
136
- };
137
- delay (1000 );
138
-
139
- changeConnectionState (NetworkConnectionState::CONNECTING);
140
- }
141
- break ;
142
- case NetworkConnectionState::CONNECTING: {
143
- Debug.print (DBG_VERBOSE, " ::CONNECTING" );
144
- networkStatus = modem.joinOTAA (appeui, appkey);
145
- if (networkStatus != true ) {
146
- changeConnectionState (NetworkConnectionState::ERROR);
147
- return ;
148
- }
149
-
150
- Debug.print (DBG_INFO, " Connected to the network" );
151
- changeConnectionState (NetworkConnectionState::CONNECTED);
152
- return ;
153
- }
154
- break ;
155
- case NetworkConnectionState::CONNECTED: {
156
-
157
- networkStatus = modem.connected ();
158
- Debug.print (DBG_VERBOSE, " Connection state: %d" , networkStatus);
159
- if (networkStatus != true ) {
160
- changeConnectionState (NetworkConnectionState::DISCONNECTED);
161
- return ;
162
- }
163
- Debug.print (DBG_VERBOSE, " Connected to the network" );
164
- }
165
- break ;
166
- case NetworkConnectionState::DISCONNECTING: {
167
- changeConnectionState (NetworkConnectionState::DISCONNECTED);
168
- }
169
- break ;
170
- case NetworkConnectionState::DISCONNECTED: {
171
- if (keepAlive) {
172
- changeConnectionState (NetworkConnectionState::INIT);
173
- } else {
174
- changeConnectionState (NetworkConnectionState::CLOSED);
175
- }
176
- }
177
- break ;
178
- case NetworkConnectionState::ERROR: {
179
-
180
- }
181
- break ;
182
- case NetworkConnectionState::CLOSED: {
183
-
184
- }
185
- break ;
147
+ case NetworkConnectionState::INIT: netConnectionState = update_handleInit (); break ;
148
+ case NetworkConnectionState::CONNECTING: netConnectionState = update_handleConnecting (); break ;
149
+ case NetworkConnectionState::CONNECTED: netConnectionState = update_handleConnected (); break ;
150
+ case NetworkConnectionState::DISCONNECTING: netConnectionState = update_handleDisconnecting (); break ;
151
+ case NetworkConnectionState::DISCONNECTED: netConnectionState = update_handleDisconnected (); break ;
152
+ case NetworkConnectionState::ERROR: break ;
153
+ case NetworkConnectionState::CLOSED: break ;
186
154
}
187
- } /* time bracket */
155
+ }
188
156
}
189
157
190
158
/* *****************************************************************************
191
159
PRIVATE MEMBER FUNCTIONS
192
160
******************************************************************************/
193
161
194
- void LoRaConnectionHandler::changeConnectionState (NetworkConnectionState _newState) {
195
- if (_newState == netConnectionState) {
196
- return ;
162
+ NetworkConnectionState LoRaConnectionHandler::update_handleInit () {
163
+ Debug.print (DBG_VERBOSE, " ::INIT" );
164
+ if (!modem.begin (band)) {
165
+ Debug.print (DBG_VERBOSE, " Failed to start module" );
166
+ execNetworkEventCallback (_on_error_event_callback, 0 );
167
+ Debug.print (DBG_ERROR, " Something went wrong; are you indoor? Move near a window, then reset and retry." );
168
+ };
169
+ delay (1000 );
170
+ Debug.print (DBG_INFO, " Connecting to the network" );
171
+ connectionTickTimeInterval = CHECK_INTERVAL_CONNECTING;
172
+ return NetworkConnectionState::CONNECTING;
173
+ }
174
+
175
+ NetworkConnectionState LoRaConnectionHandler::update_handleConnecting () {
176
+ Debug.print (DBG_VERBOSE, " ::CONNECTING" );
177
+ bool networkStatus = modem.joinOTAA (appeui, appkey);
178
+ if (networkStatus != true ) {
179
+ execNetworkEventCallback (_on_error_event_callback, 0 );
180
+ Debug.print (DBG_ERROR, " Something went wrong; are you indoor? Move near a window, then reset and retry." );
181
+ return NetworkConnectionState::ERROR;
197
182
}
198
- int newInterval = CHECK_INTERVAL_INIT;
199
- switch (_newState) {
200
- case NetworkConnectionState::INIT: {
201
- Debug.print (DBG_VERBOSE, " CHANGING STATE TO ::INIT" );
202
- newInterval = CHECK_INTERVAL_INIT;
203
- }
204
- break ;
205
- case NetworkConnectionState::CONNECTING: {
206
- Debug.print (DBG_INFO, " Connecting to the network" );
207
- newInterval = CHECK_INTERVAL_CONNECTING;
208
- }
209
- break ;
210
- case NetworkConnectionState::CONNECTED: {
211
- execNetworkEventCallback (_on_connect_event_callback, 0 );
212
- newInterval = CHECK_INTERVAL_CONNECTED;
213
- }
214
- break ;
215
- case NetworkConnectionState::GETTIME: {
216
- }
217
- break ;
218
- case NetworkConnectionState::DISCONNECTING: {
219
- Debug.print (DBG_VERBOSE, " Disconnecting from the network" );
220
- }
221
- break ;
222
- case NetworkConnectionState::DISCONNECTED: {
223
- execNetworkEventCallback (_on_disconnect_event_callback, 0 );
224
- // Debug.print(DBG_VERBOSE, "WiFi.status(): %d", WiFi.status());
225
-
226
- Debug.print (DBG_ERROR, " Connection to the network lost." );
227
- if (keepAlive) {
228
- Debug.print (DBG_ERROR, " Attempting reconnection" );
229
- }
230
-
231
- newInterval = CHECK_INTERVAL_DISCONNECTED;
232
- }
233
- break ;
234
- case NetworkConnectionState::CLOSED: {
235
-
236
- Debug.print (DBG_VERBOSE, " Connection to the network terminated" );
237
- }
238
- break ;
239
- case NetworkConnectionState::ERROR: {
240
- execNetworkEventCallback (_on_error_event_callback, 0 );
241
- Debug.print (DBG_ERROR, " Something went wrong; are you indoor? Move near a window, then reset and retry." );
242
- }
243
- break ;
183
+
184
+ Debug.print (DBG_INFO, " Connected to the network" );
185
+ connectionTickTimeInterval = CHECK_INTERVAL_CONNECTED;
186
+ execNetworkEventCallback (_on_connect_event_callback, 0 );
187
+ return NetworkConnectionState::CONNECTED;
188
+ }
189
+
190
+ NetworkConnectionState LoRaConnectionHandler::update_handleConnected () {
191
+
192
+ bool networkStatus = modem.connected ();
193
+ Debug.print (DBG_VERBOSE, " Connection state: %d" , networkStatus);
194
+ if (networkStatus != true ) {
195
+ execNetworkEventCallback (_on_disconnect_event_callback, 0 );
196
+ // Debug.print(DBG_VERBOSE, "WiFi.status(): %d", WiFi.status());
197
+
198
+ Debug.print (DBG_ERROR, " Connection to the network lost." );
199
+ if (keepAlive) {
200
+ Debug.print (DBG_ERROR, " Attempting reconnection" );
201
+ }
202
+ connectionTickTimeInterval = CHECK_INTERVAL_DISCONNECTED;
203
+ return NetworkConnectionState::DISCONNECTED;
204
+ }
205
+ Debug.print (DBG_VERBOSE, " Connected to the network" );
206
+
207
+ return NetworkConnectionState::CONNECTED;
208
+ }
209
+
210
+ NetworkConnectionState LoRaConnectionHandler::update_handleDisconnecting () {
211
+ execNetworkEventCallback (_on_disconnect_event_callback, 0 );
212
+ // Debug.print(DBG_VERBOSE, "WiFi.status(): %d", WiFi.status());
213
+
214
+ Debug.print (DBG_ERROR, " Connection to the network lost." );
215
+ if (keepAlive) {
216
+ Debug.print (DBG_ERROR, " Attempting reconnection" );
244
217
}
245
- connectionTickTimeInterval = newInterval;
246
- lastConnectionTickTime = millis ();
247
- netConnectionState = _newState;
248
- // connectionStateChanged(netConnectionState);
218
+ connectionTickTimeInterval = CHECK_INTERVAL_DISCONNECTED;
219
+ return NetworkConnectionState::DISCONNECTED;
220
+ }
221
+
222
+ NetworkConnectionState LoRaConnectionHandler::update_handleDisconnected () {
223
+ if (keepAlive) {
224
+ Debug.print (DBG_VERBOSE, " CHANGING STATE TO ::INIT" );
225
+ connectionTickTimeInterval = CHECK_INTERVAL_INIT;
226
+ return NetworkConnectionState::INIT;
227
+ } else {
228
+ Debug.print (DBG_VERBOSE, " Connection to the network terminated" );
229
+ return NetworkConnectionState::CLOSED;
230
+ }
231
+
249
232
}
250
233
251
234
void LoRaConnectionHandler::connect () {
252
235
if (netConnectionState == NetworkConnectionState::INIT || netConnectionState == NetworkConnectionState::CONNECTING) {
253
236
return ;
254
237
}
255
238
keepAlive = true ;
256
- changeConnectionState (NetworkConnectionState::INIT);
239
+ connectionTickTimeInterval = CHECK_INTERVAL_INIT;
240
+ netConnectionState = NetworkConnectionState::INIT;
257
241
258
242
}
259
243
void LoRaConnectionHandler::disconnect () {
260
244
// do nothing
261
- return ;
245
+ return ;
262
246
}
263
- #endif
247
+ #endif
0 commit comments