Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit d586893

Browse files
author
iwahdan88
committed
Merge branch 'attach-legacy'
2 parents 9e091a5 + 1b5eba3 commit d586893

File tree

1 file changed

+37
-20
lines changed

1 file changed

+37
-20
lines changed

esp32/mods/modlte.c

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*
1+
/*
22
* Copyright (c) 2017, Pycom Limited and its licensors.
33
*
44
* This software is licensed under the GNU GPL version 3 or any later version,
@@ -90,6 +90,8 @@ uart_dev_t* uart_driver_lte = &UART2;
9090
uart_config_t lte_uart_config0;
9191
uart_config_t lte_uart_config1;
9292

93+
static bool lte_legacyattach_flag = false;
94+
9395
extern TaskHandle_t xLTEUpgradeTaskHndl;
9496
extern TaskHandle_t mpTaskHandle;
9597
extern TaskHandle_t svTaskHandle;
@@ -109,7 +111,7 @@ extern TaskHandle_t xLTETaskHndl;
109111
static bool lte_push_at_command_ext (char *cmd_str, uint32_t timeout, const char *expected_rsp);
110112
static bool lte_push_at_command (char *cmd_str, uint32_t timeout);
111113
static void lte_pause_ppp(void);
112-
static bool lte_check_attached(void);
114+
static bool lte_check_attached(bool legacy);
113115
static void lte_check_init(void);
114116
static bool lte_check_sim_present(void);
115117
STATIC mp_obj_t lte_suspend(mp_obj_t self_in);
@@ -189,7 +191,7 @@ static void lte_pause_ppp(void) {
189191
}
190192
}
191193

192-
static bool lte_check_attached(void) {
194+
static bool lte_check_attached(bool legacy) {
193195
char *pos;
194196
bool attached = false;
195197
bool cgatt = false;
@@ -210,19 +212,25 @@ static bool lte_check_attached(void) {
210212
if (((pos = strstr(modlte_rsp.data, "+CGATT")) && (strlen(pos) >= 7) && (pos[7] == '1' || pos[8] == '1'))) {
211213
cgatt = true;
212214
}
213-
lte_push_at_command("AT+CEREG?", LTE_RX_TIMEOUT_MIN_MS);
214-
if (!cgatt) {
215-
if (((pos = strstr(modlte_rsp.data, "+CEREG: 2,1,")) || (pos = strstr(modlte_rsp.data, "+CEREG: 2,5,")))
216-
&& (strlen(pos) >= 31) && (pos[30] == '7' || pos[30] == '9')) {
217-
attached = true;
218-
}
219-
} else {
220-
if ((pos = strstr(modlte_rsp.data, "+CEREG: 2,1,")) || (pos = strstr(modlte_rsp.data, "+CEREG: 2,5,"))) {
221-
attached = true;
215+
if (legacy) {
216+
lte_push_at_command("AT+CEREG?", LTE_RX_TIMEOUT_MIN_MS);
217+
if (!cgatt) {
218+
if (((pos = strstr(modlte_rsp.data, "+CEREG: 2,1,")) || (pos = strstr(modlte_rsp.data, "+CEREG: 2,5,")))
219+
&& (strlen(pos) >= 31) && (pos[30] == '7' || pos[30] == '9')) {
220+
attached = true;
221+
}
222222
} else {
223-
attached = false;
223+
if ((pos = strstr(modlte_rsp.data, "+CEREG: 2,1,")) || (pos = strstr(modlte_rsp.data, "+CEREG: 2,5,"))) {
224+
attached = true;
225+
} else {
226+
attached = false;
227+
}
224228
}
225229
}
230+
else
231+
{
232+
attached = cgatt;
233+
}
226234
lte_push_at_command("AT+CFUN?", LTE_RX_TIMEOUT_MIN_MS);
227235
if (lteppp_get_state() == E_LTE_ATTACHING) {
228236
// for some reason the modem has crashed, enabled the radios again...
@@ -357,6 +365,9 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
357365
}
358366
}
359367

368+
// set legacy flag
369+
lte_legacyattach_flag = args[2].u_bool;
370+
360371
// configure the carrier
361372
lte_push_at_command("AT+SQNCTM?", LTE_RX_TIMEOUT_MAX_MS);
362373
if (!strstr(modlte_rsp.data, carrier)) {
@@ -380,7 +391,8 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
380391
static const mp_arg_t lte_init_args[] = {
381392
{ MP_QSTR_id, MP_ARG_INT, {.u_int = 0} },
382393
{ MP_QSTR_carrier, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
383-
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} }
394+
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
395+
{ MP_QSTR_legacyattach, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false}}
384396
};
385397

386398
static mp_obj_t lte_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) {
@@ -517,14 +529,19 @@ STATIC mp_obj_t lte_attach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
517529
{ MP_QSTR_log, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_false} },
518530
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_obj = mp_const_none} },
519531
{ MP_QSTR_type, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
532+
{ MP_QSTR_legacyattach, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
520533

521534
};
522535

523536
// parse args
524537
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
525538
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
526539

527-
lte_check_attached();
540+
if (args[5].u_obj != mp_const_none) {
541+
lte_legacyattach_flag = mp_obj_is_true(args[5].u_obj);
542+
}
543+
544+
lte_check_attached(lte_legacyattach_flag);
528545

529546
if (lteppp_get_state() < E_LTE_ATTACHING) {
530547
// configuring scanning in all 6 bands
@@ -690,7 +707,7 @@ STATIC mp_obj_t lte_suspend(mp_obj_t self_in) {
690707
break;
691708
}
692709
}
693-
lte_check_attached();
710+
lte_check_attached(lte_legacyattach_flag);
694711
}
695712
return mp_const_none;
696713
}
@@ -700,7 +717,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(lte_suspend_obj, lte_suspend);
700717

701718
STATIC mp_obj_t lte_isattached(mp_obj_t self_in) {
702719
lte_check_init();
703-
if (lte_check_attached()) {
720+
if (lte_check_attached(lte_legacyattach_flag)) {
704721
return mp_const_true;
705722
}
706723
return mp_const_false;
@@ -726,7 +743,7 @@ STATIC mp_obj_t lte_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
726743
args[1].u_bool = lte_check_legacy_version();
727744
}
728745

729-
lte_check_attached();
746+
lte_check_attached(lte_legacyattach_flag);
730747
lteppp_set_legacy(args[1].u_bool);
731748

732749
if (args[1].u_bool) {
@@ -778,7 +795,7 @@ STATIC mp_obj_t lte_resume(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
778795
if (lteppp_get_state() == E_LTE_PPP) {
779796
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_request_not_possible));
780797
}
781-
lte_check_attached();
798+
lte_check_attached(lte_legacyattach_flag);
782799

783800
if (lteppp_get_state() == E_LTE_SUSPENDED || lteppp_get_state() == E_LTE_ATTACHED) {
784801
if (lteppp_get_state() == E_LTE_ATTACHED && lteppp_get_legacy() == E_LTE_LEGACY) {
@@ -820,7 +837,7 @@ STATIC mp_obj_t lte_disconnect(mp_obj_t self_in) {
820837
break;
821838
}
822839
}
823-
lte_check_attached();
840+
lte_check_attached(lte_legacyattach_flag);
824841
}
825842
return mp_const_none;
826843
}

0 commit comments

Comments
 (0)