@@ -93,6 +93,7 @@ extern TaskHandle_t svTaskHandle;
93
93
#if defined(FIPY )
94
94
extern TaskHandle_t xLoRaTaskHndl ;
95
95
extern TaskHandle_t xSigfoxTaskHndl ;
96
+ //extern TaskHandle_t xMeshTaskHndl;
96
97
#endif
97
98
extern TaskHandle_t xLTETaskHndl ;
98
99
@@ -168,55 +169,87 @@ static void lte_pause_ppp(void) {
168
169
mp_hal_delay_ms (LTE_PPP_BACK_OFF_TIME_MS );
169
170
if (!lte_push_at_command ("+++" , LTE_PPP_BACK_OFF_TIME_MS )) {
170
171
mp_hal_delay_ms (LTE_PPP_BACK_OFF_TIME_MS );
171
- if (!lte_push_at_command ("+++" , LTE_RX_TIMEOUT_MAX_MS )) {
172
- nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError , mpexception_os_operation_failed ));
172
+ if (!lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MIN_MS )) {
173
+ mp_hal_delay_ms (LTE_PPP_BACK_OFF_TIME_MS );
174
+ if (!lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MIN_MS )) {
175
+ mp_hal_delay_ms (LTE_PPP_BACK_OFF_TIME_MS );
176
+ if (!lte_push_at_command ("+++" , LTE_PPP_BACK_OFF_TIME_MS )) {
177
+ mp_hal_delay_ms (LTE_PPP_BACK_OFF_TIME_MS );
178
+ if (!lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MIN_MS )) {
179
+ mp_hal_delay_ms (LTE_PPP_BACK_OFF_TIME_MS );
180
+ if (!lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MIN_MS )) {
181
+ nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError , mpexception_os_operation_failed ));
182
+ }
183
+ }
184
+ }
185
+ }
173
186
}
174
187
}
175
188
}
176
189
177
190
static bool lte_check_attached (void ) {
178
191
char * pos ;
179
192
bool attached = false;
193
+ bool cgatt = false;
180
194
if (lteppp_get_state () == E_LTE_PPP && lteppp_ipv4 () > 0 ) {
181
195
attached = true;
182
196
} else {
197
+ if (lteppp_get_state () == E_LTE_PPP ) {
198
+ lte_pause_ppp ();
199
+ while (true) {
200
+ mp_hal_delay_ms (LTE_RX_TIMEOUT_MIN_MS );
201
+ if (lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MAX_MS )) {
202
+ break ;
203
+ }
204
+ }
205
+ }
183
206
lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MIN_MS );
184
207
lte_push_at_command ("AT+CGATT?" , LTE_RX_TIMEOUT_MIN_MS );
185
208
if (((pos = strstr (modlte_rsp .data , "+CGATT" )) && (strlen (pos ) >= 7 ) && (pos [7 ] == '1' || pos [8 ] == '1' ))) {
186
- if (lteppp_get_state () <= E_LTE_PPP ) {
187
- lteppp_set_state (E_LTE_ATTACHED );
209
+ cgatt = true;
210
+ }
211
+ lte_push_at_command ("AT+CEREG?" , LTE_RX_TIMEOUT_MIN_MS );
212
+ if (!cgatt ) {
213
+ if (((pos = strstr (modlte_rsp .data , "+CEREG: 2,1," )) || (pos = strstr (modlte_rsp .data , "+CEREG: 2,5," )))
214
+ && (strlen (pos ) >= 31 ) && (pos [30 ] == '7' || pos [30 ] == '9' )) {
215
+ attached = true;
188
216
}
189
- attached = true;
190
217
} else {
191
- lte_push_at_command ("AT+CEREG?" , LTE_RX_TIMEOUT_MIN_MS );
192
- if (((pos = strstr (modlte_rsp .data , "+CEREG: 2,1," )) || (pos = strstr (modlte_rsp .data , "+CEREG: 2,5," )))
193
- && (strlen (pos ) >= 31 ) && pos [30 ] == '7' ) {
194
- if (lteppp_get_state () <= E_LTE_PPP ) {
195
- lteppp_set_state (E_LTE_ATTACHED );
196
- }
197
- attached = true;
198
- }
199
- lte_push_at_command ("AT+CFUN?" , LTE_RX_TIMEOUT_MIN_MS );
200
- if (lteppp_get_state () == E_LTE_ATTACHING ) {
201
- // for some reason the modem has crashed, enabled the radios again...
202
- if (!strstr (modlte_rsp .data , "+CFUN: 1" )) {
203
- lte_push_at_command ("AT+CFUN=1" , LTE_RX_TIMEOUT_MIN_MS );
204
- }
218
+ if ((pos = strstr (modlte_rsp .data , "+CEREG: 2,1," )) || (pos = strstr (modlte_rsp .data , "+CEREG: 2,5," ))) {
219
+ attached = true;
205
220
} else {
206
- if (strstr (modlte_rsp .data , "+CFUN: 1" )) {
207
- lteppp_set_state (E_LTE_ATTACHING );
208
- } else {
209
- lteppp_set_state (E_LTE_IDLE );
210
- }
221
+ attached = false;
222
+ }
223
+ }
224
+ lte_push_at_command ("AT+CFUN?" , LTE_RX_TIMEOUT_MIN_MS );
225
+ if (lteppp_get_state () == E_LTE_ATTACHING ) {
226
+ // for some reason the modem has crashed, enabled the radios again...
227
+ if (!strstr (modlte_rsp .data , "+CFUN: 1" )) {
228
+ lte_push_at_command ("AT+CFUN=1" , LTE_RX_TIMEOUT_MIN_MS );
229
+ }
230
+ } else {
231
+ if (strstr (modlte_rsp .data , "+CFUN: 1" )) {
232
+ lteppp_set_state (E_LTE_ATTACHING );
233
+ } else {
234
+ lteppp_set_state (E_LTE_IDLE );
211
235
}
212
236
}
213
237
}
238
+ if (attached && lteppp_get_state () <= E_LTE_PPP ) {
239
+ lteppp_set_state (E_LTE_ATTACHED );
240
+ }
241
+ //printf("This is our current LTE state: %d\n", lteppp_get_state());
242
+ //printf("This is check_attached returning %d\n", attached);
214
243
return attached ;
215
244
}
216
245
217
246
static bool lte_check_legacy_version (void ) {
218
- lte_push_at_command ("ATI1" , LTE_RX_TIMEOUT_MAX_MS );
219
- return strstr (modlte_rsp .data , "LR5.1.1.0-33080" );
247
+ if (lte_push_at_command ("ATI1" , LTE_RX_TIMEOUT_MAX_MS )) {
248
+ return strstr (modlte_rsp .data , "LR5.1.1.0-33080" );
249
+ } else {
250
+ nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError , "LTE modem version not read" ));
251
+ }
252
+ return true;
220
253
}
221
254
222
255
@@ -257,6 +290,7 @@ static void TASK_LTE_UPGRADE(void *pvParameters){
257
290
#if defined(FIPY )
258
291
vTaskSuspend (xLoRaTaskHndl );
259
292
vTaskSuspend (xSigfoxTaskHndl );
293
+ // vTaskSuspend(xMeshTaskHndl);
260
294
#endif
261
295
vTaskSuspend (xLTETaskHndl );
262
296
@@ -305,6 +339,11 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
305
339
if (!lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MAX_MS )) {
306
340
lte_pause_ppp ();
307
341
}
342
+ // disable PSM if enabled by default
343
+ lte_push_at_command ("AT+CPSMS?" , LTE_RX_TIMEOUT_MAX_MS );
344
+ if (!strstr (modlte_rsp .data , "+CPSMS: 0" )) {
345
+ lte_push_at_command ("AT+CPSMS=0" , LTE_RX_TIMEOUT_MIN_MS );
346
+ }
308
347
309
348
lte_push_at_command ("AT!=\"setlpm airplane=1 enable=1\"" , LTE_RX_TIMEOUT_MIN_MS );
310
349
lte_push_at_command ("AT+CFUN?" , LTE_RX_TIMEOUT_MIN_MS );
@@ -607,11 +646,15 @@ STATIC mp_obj_t lte_suspend(mp_obj_t self_in) {
607
646
}
608
647
lte_check_init ();
609
648
if (lteppp_get_state () == E_LTE_PPP ) {
649
+ //printf("Pausing ppp...\n");
610
650
lte_pause_ppp ();
651
+ //printf("Pausing ppp done...\n");
611
652
lteppp_set_state (E_LTE_SUSPENDED );
612
653
while (true) {
613
654
mp_hal_delay_ms (LTE_RX_TIMEOUT_MIN_MS );
655
+ //printf("Sending AT...\n");
614
656
if (lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MAX_MS )) {
657
+ //printf("OK\n");
615
658
break ;
616
659
}
617
660
}
0 commit comments