@@ -93,6 +93,7 @@ extern TaskHandle_t svTaskHandle;
9393#if defined(FIPY )
9494extern TaskHandle_t xLoRaTaskHndl ;
9595extern TaskHandle_t xSigfoxTaskHndl ;
96+ //extern TaskHandle_t xMeshTaskHndl;
9697#endif
9798extern TaskHandle_t xLTETaskHndl ;
9899
@@ -168,55 +169,87 @@ static void lte_pause_ppp(void) {
168169 mp_hal_delay_ms (LTE_PPP_BACK_OFF_TIME_MS );
169170 if (!lte_push_at_command ("+++" , LTE_PPP_BACK_OFF_TIME_MS )) {
170171 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+ }
173186 }
174187 }
175188}
176189
177190static bool lte_check_attached (void ) {
178191 char * pos ;
179192 bool attached = false;
193+ bool cgatt = false;
180194 if (lteppp_get_state () == E_LTE_PPP && lteppp_ipv4 () > 0 ) {
181195 attached = true;
182196 } 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+ }
183206 lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MIN_MS );
184207 lte_push_at_command ("AT+CGATT?" , LTE_RX_TIMEOUT_MIN_MS );
185208 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;
188216 }
189- attached = true;
190217 } 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;
205220 } 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 );
211235 }
212236 }
213237 }
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);
214243 return attached ;
215244}
216245
217246static 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;
220253}
221254
222255
@@ -257,6 +290,7 @@ static void TASK_LTE_UPGRADE(void *pvParameters){
257290#if defined(FIPY )
258291 vTaskSuspend (xLoRaTaskHndl );
259292 vTaskSuspend (xSigfoxTaskHndl );
293+ // vTaskSuspend(xMeshTaskHndl);
260294#endif
261295 vTaskSuspend (xLTETaskHndl );
262296
@@ -305,6 +339,11 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
305339 if (!lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MAX_MS )) {
306340 lte_pause_ppp ();
307341 }
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+ }
308347
309348 lte_push_at_command ("AT!=\"setlpm airplane=1 enable=1\"" , LTE_RX_TIMEOUT_MIN_MS );
310349 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) {
607646 }
608647 lte_check_init ();
609648 if (lteppp_get_state () == E_LTE_PPP ) {
649+ //printf("Pausing ppp...\n");
610650 lte_pause_ppp ();
651+ //printf("Pausing ppp done...\n");
611652 lteppp_set_state (E_LTE_SUSPENDED );
612653 while (true) {
613654 mp_hal_delay_ms (LTE_RX_TIMEOUT_MIN_MS );
655+ //printf("Sending AT...\n");
614656 if (lte_push_at_command ("AT" , LTE_RX_TIMEOUT_MAX_MS )) {
657+ //printf("OK\n");
615658 break ;
616659 }
617660 }
0 commit comments