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

Commit 1b5eba3

Browse files
author
iwahdan88
committed
esp32/modlte: Added flag for legacy attachment method
1 parent dd002a2 commit 1b5eba3

File tree

1 file changed

+36
-19
lines changed

1 file changed

+36
-19
lines changed

esp32/mods/modlte.c

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ uart_dev_t* uart_driver_lte = &UART2;
8787
uart_config_t lte_uart_config0;
8888
uart_config_t lte_uart_config1;
8989

90+
static bool lte_legacyattach_flag = false;
91+
9092
extern TaskHandle_t xLTEUpgradeTaskHndl;
9193
extern TaskHandle_t mpTaskHandle;
9294
extern TaskHandle_t svTaskHandle;
@@ -107,7 +109,7 @@ extern TaskHandle_t xLTETaskHndl;
107109
static bool lte_push_at_command_ext (char *cmd_str, uint32_t timeout, const char *expected_rsp);
108110
static bool lte_push_at_command (char *cmd_str, uint32_t timeout);
109111
static void lte_pause_ppp(void);
110-
static bool lte_check_attached(void);
112+
static bool lte_check_attached(bool legacy);
111113
static void lte_check_init(void);
112114
static bool lte_check_sim_present(void);
113115
STATIC mp_obj_t lte_suspend(mp_obj_t self_in);
@@ -187,7 +189,7 @@ static void lte_pause_ppp(void) {
187189
}
188190
}
189191

190-
static bool lte_check_attached(void) {
192+
static bool lte_check_attached(bool legacy) {
191193
char *pos;
192194
bool attached = false;
193195
bool cgatt = false;
@@ -208,19 +210,25 @@ static bool lte_check_attached(void) {
208210
if (((pos = strstr(modlte_rsp.data, "+CGATT")) && (strlen(pos) >= 7) && (pos[7] == '1' || pos[8] == '1'))) {
209211
cgatt = true;
210212
}
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;
216-
}
217-
} else {
218-
if ((pos = strstr(modlte_rsp.data, "+CEREG: 2,1,")) || (pos = strstr(modlte_rsp.data, "+CEREG: 2,5,"))) {
219-
attached = true;
213+
if (legacy) {
214+
lte_push_at_command("AT+CEREG?", LTE_RX_TIMEOUT_MIN_MS);
215+
if (!cgatt) {
216+
if (((pos = strstr(modlte_rsp.data, "+CEREG: 2,1,")) || (pos = strstr(modlte_rsp.data, "+CEREG: 2,5,")))
217+
&& (strlen(pos) >= 31) && (pos[30] == '7' || pos[30] == '9')) {
218+
attached = true;
219+
}
220220
} else {
221-
attached = false;
221+
if ((pos = strstr(modlte_rsp.data, "+CEREG: 2,1,")) || (pos = strstr(modlte_rsp.data, "+CEREG: 2,5,"))) {
222+
attached = true;
223+
} else {
224+
attached = false;
225+
}
222226
}
223227
}
228+
else
229+
{
230+
attached = cgatt;
231+
}
224232
lte_push_at_command("AT+CFUN?", LTE_RX_TIMEOUT_MIN_MS);
225233
if (lteppp_get_state() == E_LTE_ATTACHING) {
226234
// for some reason the modem has crashed, enabled the radios again...
@@ -360,6 +368,9 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
360368
}
361369
}
362370

371+
// set legacy flag
372+
lte_legacyattach_flag = args[1].u_bool;
373+
363374
// configure the carrier
364375
lte_push_at_command("AT+SQNCTM?", LTE_RX_TIMEOUT_MAX_MS);
365376
if (!strstr(modlte_rsp.data, carrier)) {
@@ -382,7 +393,8 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
382393

383394
static const mp_arg_t lte_init_args[] = {
384395
{ MP_QSTR_id, MP_ARG_INT, {.u_int = 0} },
385-
{ MP_QSTR_carrier, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }
396+
{ MP_QSTR_carrier, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none}},
397+
{ MP_QSTR_legacyattach, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false}}
386398
};
387399

388400
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) {
@@ -516,13 +528,18 @@ STATIC mp_obj_t lte_attach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
516528
{ MP_QSTR_band, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
517529
{ MP_QSTR_apn, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
518530
{ MP_QSTR_log, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_false} },
531+
{ MP_QSTR_legacyattach, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
519532
};
520533

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

525-
lte_check_attached();
538+
if (args[3].u_obj != mp_const_none) {
539+
lte_legacyattach_flag = mp_obj_is_true(args[3].u_obj);
540+
}
541+
542+
lte_check_attached(lte_legacyattach_flag);
526543

527544
if (lteppp_get_state() < E_LTE_ATTACHING) {
528545
// configuring scanning in all 6 bands
@@ -665,7 +682,7 @@ STATIC mp_obj_t lte_suspend(mp_obj_t self_in) {
665682
break;
666683
}
667684
}
668-
lte_check_attached();
685+
lte_check_attached(lte_legacyattach_flag);
669686
}
670687
return mp_const_none;
671688
}
@@ -675,7 +692,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(lte_suspend_obj, lte_suspend);
675692

676693
STATIC mp_obj_t lte_isattached(mp_obj_t self_in) {
677694
lte_check_init();
678-
if (lte_check_attached()) {
695+
if (lte_check_attached(lte_legacyattach_flag)) {
679696
return mp_const_true;
680697
}
681698
return mp_const_false;
@@ -699,7 +716,7 @@ STATIC mp_obj_t lte_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
699716
args[1].u_bool = lte_check_legacy_version();
700717
}
701718

702-
lte_check_attached();
719+
lte_check_attached(lte_legacyattach_flag);
703720
lteppp_set_legacy(args[1].u_bool);
704721

705722
if (args[1].u_bool) {
@@ -749,7 +766,7 @@ STATIC mp_obj_t lte_resume(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
749766
if (lteppp_get_state() == E_LTE_PPP) {
750767
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_request_not_possible));
751768
}
752-
lte_check_attached();
769+
lte_check_attached(lte_legacyattach_flag);
753770

754771
if (lteppp_get_state() == E_LTE_SUSPENDED || lteppp_get_state() == E_LTE_ATTACHED) {
755772
if (lteppp_get_state() == E_LTE_ATTACHED && lteppp_get_legacy() == E_LTE_LEGACY) {
@@ -788,7 +805,7 @@ STATIC mp_obj_t lte_disconnect(mp_obj_t self_in) {
788805
break;
789806
}
790807
}
791-
lte_check_attached();
808+
lte_check_attached(lte_legacyattach_flag);
792809
}
793810
return mp_const_none;
794811
}

0 commit comments

Comments
 (0)