8000 esp32/modlte: updated · pycom/pycom-micropython-sigfox@9e091a5 · GitHub
[go: up one dir, main page]

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

Commit 9e091a5

Browse files
XykonIslam Wahdan
authored and
Islam Wahdan
committed
esp32/modlte: updated
* Setting APN with corresponding IP Protocol [IP / IPV6] * No more exception when calling `LTE.connect` when already connected * Setting Connection ID in Init function * Renamed `lte.dettach` to `lte.detach` with backward compatibility * Setting Connection ID and IP protocol type in attach method
1 parent dd002a2 commit 9e091a5

File tree

1 file changed

+66
-31
lines changed

1 file changed

+66
-31
lines changed

esp32/mods/modlte.c

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@
7676
******************************************************************************/
7777
#define LTE_NUM_UARTS 2
7878
#define UART_TRANSFER_MAX_LEN 1
79+
80+
#define DEFAULT_PROTO_TYPE (const char*)"IP"
81+
#define DEFAULT_APN (const char*)""
7982
/******************************************************************************
8083
DECLARE PRIVATE DATA
8184
******************************************************************************/
@@ -100,7 +103,6 @@ extern TaskHandle_t xLTETaskHndl;
100103
/******************************************************************************
101104
DECLARE PUBLIC DATA
102105
******************************************************************************/
103-
104106
/******************************************************************************
105107
DECLARE PRIVATE FUNCTIONS
106108
******************************************************************************/
@@ -147,13 +149,13 @@ static bool lte_push_at_command_delay_ext (char *cmd_str, uint32_t timeout, cons
147149
.timeout = timeout
148150
};
149151
memcpy(cmd.data, cmd_str, strlen(cmd_str));
150-
//printf("%s\n", cmd_str);
152+
//printf("[CMD] %s\n", cmd_str);
151153
lteppp_send_at_command_delay (&cmd, &modlte_rsp, delay);
152154
if (strstr(modlte_rsp.data, expected_rsp) != NULL) {
153-
//printf("%s\n", modlte_rsp.data);
155+
//printf("[OK] %s\n", modlte_rsp.data);
154156
return true;
155157
}
156-
//printf("%s\n", modlte_rsp.data);
158+
//printf("[FAIL] %s\n", modlte_rsp.data);
157159
return false;
158160
}
159161

@@ -265,12 +267,6 @@ static void lte_check_inppp(void) {
265267
}
266268
}
267269

268-
static void lte_check_connected(void) {
269-
if (lteppp_get_state() == E_LTE_PPP) {
270-
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "LTE modem is already connected!"));
271-
}
272-
}
273-
274270
static bool lte_check_sim_present(void) {
275271
lte_push_at_command("AT+CPIN?", LTE_RX_TIMEOUT_MAX_MS);
276272
if (strstr(modlte_rsp.data, "ERROR")) {
@@ -334,6 +330,7 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
334330
//printf("All done since we were already initialised.\n");
335331
return mp_const_none;
336332
}
333+
lte_obj.cid = args[1].u_int;
337334
vTaskDelay(1500);
338335
lte_push_at_command("AT", LTE_RX_TIMEOUT_MAX_MS);
339336
if (!lte_push_at_command("AT", LTE_RX_TIMEOUT_MAX_MS)) {
@@ -381,8 +378,9 @@ static mp_obj_t lte_init_helper(lte_obj_t *self, const mp_arg_val_t *args) {
381378
}
382379

383380
static const mp_arg_t lte_init_args[] = {
384-
{ 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} }
381+
{ MP_QSTR_id, MP_ARG_INT, {.u_int = 0} },
382+
{ 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} }
386384
};
387385

388386
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) {
@@ -429,8 +427,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(lte_init_obj, 1, lte_init);
429427
STATIC mp_obj_t lte_deinit(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
430428

431429
STATIC const mp_arg_t allowed_args[] = {
432-
{ MP_QSTR_dettach, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true}},
433-
{ MP_QSTR_reset, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false}},
430+
{ MP_QSTR_detach, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true}},
431+
{ MP_QSTR_reset, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false}},
432+
{ MP_QSTR_dettach, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true}}, /* backward compatibility for dettach method FIXME */
434433
};
435434

436435
// parse args
@@ -445,7 +444,7 @@ STATIC mp_obj_t lte_deinit(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
445444
if (lteppp_get_state() == E_LTE_PPP) {
446445
lte_suspend(self);
447446
}
448-
if (!args[0].u_bool) {
447+
if (!args[0].u_bool || !args[2].u_bool) { /* backward compatibility for dettach method FIXME */
449448
vTaskDelay(100);
450449
lte_push_at_command("AT!=\"setlpm airplane=1 enable=1\"", LTE_RX_TIMEOUT_MAX_MS);
451450
lteppp_deinit();
@@ -516,6 +515,9 @@ STATIC mp_obj_t lte_attach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
516515
{ MP_QSTR_band, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
517516
{ MP_QSTR_apn, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
518517
{ MP_QSTR_log, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_false} },
518+
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_obj = mp_const_none} },
519+
{ MP_QSTR_type, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
520+
519521
};
520522

521523
// parse args
@@ -560,16 +562,41 @@ STATIC mp_obj_t lte_attach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
560562
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "band %d not supported", band));
561563
}
562564
}
563-
if (args[1].u_obj != mp_const_none) {
564-
const char *apn = mp_obj_str_get_str(args[1].u_obj);
565+
if (args[3].u_obj != mp_const_none) {
566+
lte_obj.cid = args[3].u_int;
567+
}
568+
569+
if (args[1].u_obj != mp_const_none || args[4].u_obj != mp_const_none) {
570+
571+
const char* strapn;
572+
const char* strtype;
573+
574+
if (args[1].u_obj == mp_const_none) {
575+
strapn = DEFAULT_APN;
576+
}
577+
else
578+
{
579+
strapn = mp_obj_str_get_str(args[1].u_obj);
580+
}
581+
582+
if (args[4].u_obj == mp_const_none) {
583+
strtype = DEFAULT_PROTO_TYPE;
584+
}
585+
else
586+
{
587+
strtype = mp_obj_str_get_str(args[4].u_obj);
588+
}
589+
565590
char at_cmd[LTE_AT_CMD_SIZE_MAX - 4];
566-
sprintf(at_cmd, "AT+CGDCONT=1,\"IP\",\"%s\"", apn);
567-
lte_push_at_command(at_cmd, LTE_RX_TIMEOUT_MIN_MS);
591+
sprintf(at_cmd, "AT+CGDCONT=%d,\"%s\",\"%s\"", lte_obj.cid, strtype, strapn);
592+
if (!lte_push_at_command(at_cmd, LTE_RX_TIMEOUT_MAX_MS)) {
593+
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_operation_failed));
594+
}
568595
}
569596
if (args[2].u_obj == mp_const_false) {
570-
lte_push_at_command("AT!=\"disablelog 1\"", LTE_RX_TIMEOUT_MIN_MS);
597+
lte_push_at_command("AT!=\"disablelog 1\"", LTE_RX_TIMEOUT_MAX_MS);
571598
} else {
572-
lte_push_at_command("AT!=\"disablelog 0\"", LTE_RX_TIMEOUT_MIN_MS);
599+
lte_push_at_command("AT!=\"disablelog 0\"", LTE_RX_TIMEOUT_MAX_MS);
573600
}
574601
lteppp_set_state(E_LTE_ATTACHING);
575602
if (!lte_push_at_command("AT+CFUN=1", LTE_RX_TIMEOUT_MAX_MS)) {
@@ -580,7 +607,7 @@ STATIC mp_obj_t lte_attach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
580607
}
581608
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(lte_attach_obj, 1, lte_attach);
582609

583-
mp_obj_t lte_dettach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
610+
mp_obj_t lte_detach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
584611
lte_check_init();
585612

586613
STATIC const mp_arg_t allowed_args[] = {
@@ -627,8 +654,6 @@ mp_obj_t lte_dettach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
627654
lte_push_at_command("AT", LTE_RX_TIMEOUT_MAX_MS);
628655
if (!lte_push_at_command("AT", LTE_RX_TIMEOUT_MAX_MS)) {
629656
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_operation_failed));
630-
} else {
631-
lte_push_at_command("AT!=\"setlpm airplane=1 enable=1\"", LTE_RX_TIMEOUT_MAX_MS);
632657
}
633658
}
634659
} else {
@@ -644,7 +669,7 @@ mp_obj_t lte_dettach(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
644669
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_operation_failed));
645670
return mp_const_none;
646671
}
647-
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(lte_dettach_obj, 1, lte_dettach);
672+
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(lte_detach_obj, 1, lte_detach);
648673

649674
STATIC mp_obj_t lte_suspend(mp_obj_t self_in) {
650675

@@ -684,9 +709,11 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(lte_isattached_obj, lte_isattached);
684709

685710
STATIC mp_obj_t lte_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
686711
lte_check_init();
687-
lte_check_connected();
712+
if (lteppp_get_state() == E_LTE_PPP && lteppp_ipv4() > 0) {
713+
return mp_const_none;
714+
}
688715
STATIC const mp_arg_t allowed_args[] = {
689-
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
716+
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_obj = mp_const_none} },
690717
{ MP_QSTR_legacy, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_obj = mp_const_none} },
691718

692719
};
@@ -715,7 +742,9 @@ STATIC mp_obj_t lte_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
715742
if (lteppp_get_state() == E_LTE_ATTACHED || (args[1].u_bool && lteppp_get_state() == E_LTE_SUSPENDED)) {
716743
if (args[1].u_bool || !lte_push_at_command_ext("ATO", LTE_RX_TIMEOUT_MAX_MS, LTE_CONNECT_RSP)) {
717744
char at_cmd[LTE_AT_CMD_SIZE_MAX - 4];
718-
lte_obj.cid = args[0].u_int;
745+
if (args[0].u_obj != mp_const_none) {
746+
lte_obj.cid = args[0].u_int;
747+
}
719748
sprintf(at_cmd, "AT+CGDATA=\"PPP\",%d", lte_obj.cid);
720749
// set the PPP state in advance, to avoid CEREG? to be sent right after PPP is entered
721750
if (!lte_push_at_command_ext(at_cmd, LTE_RX_TIMEOUT_MAX_MS, LTE_CONNECT_RSP)) {
@@ -739,7 +768,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(lte_connect_obj, 1, lte_connect);
739768
STATIC mp_obj_t lte_resume(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
740769
lte_check_init();
741770
STATIC const mp_arg_t allowed_args[] = {
742-
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
771+
{ MP_QSTR_cid, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_obj = mp_const_none} },
743772
};
744773

745774
// parse args< EE05 /span>
@@ -756,7 +785,10 @@ STATIC mp_obj_t lte_resume(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t
756785
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_request_not_possible));
757786
}
758787
// char at_cmd[LTE_AT_CMD_SIZE_MAX - 4];
759-
lte_obj.cid = args[0].u_int;
788+
if (args[0].u_obj != mp_const_none) {
789+
lte_obj.cid = args[0].u_int;
790+
}
791+
760792
if (lte_push_at_command_ext("ATO", LTE_RX_TIMEOUT_MAX_MS, LTE_CONNECT_RSP)) {
761793
lteppp_connect();
762794
lteppp_set_state(E_LTE_PPP);
@@ -1015,7 +1047,8 @@ STATIC const mp_map_elem_t lte_locals_dict_table[] = {
10151047
{ MP_OBJ_NEW_QSTR(MP_QSTR_init), (mp_obj_t)&lte_init_obj },
10161048
{ MP_OBJ_NEW_QSTR(MP_QSTR_deinit), (mp_obj_t)&lte_deinit_obj },
10171049
{ MP_OBJ_NEW_QSTR(MP_QSTR_attach), (mp_obj_t)&lte_attach_obj },
1018-
{ MP_OBJ_NEW_QSTR(MP_QSTR_dettach), (mp_obj_t)&lte_dettach_obj },
1050+
{ MP_OBJ_NEW_QSTR(MP_QSTR_dettach), (mp_obj_t)&lte_detach_obj },
1051+
{ MP_OBJ_NEW_QSTR(MP_QSTR_detach), (mp_obj_t)&lte_detach_obj }, /* backward compatibility for dettach method FIXME */
10191052
{ MP_OBJ_NEW_QSTR(MP_QSTR_isattached), (mp_obj_t)&lte_isattached_obj },
10201053
{ MP_OBJ_NEW_QSTR(MP_QSTR_connect), (mp_obj_t)&lte_connect_obj },
10211054
{ MP_OBJ_NEW_QSTR(MP_QSTR_disconnect), (mp_obj_t)&lte_disconnect_obj },
@@ -1031,6 +1064,8 @@ STATIC const mp_map_elem_t lte_locals_dict_table[] = {
10311064
{ MP_OBJ_NEW_QSTR(MP_QSTR_reconnect_uart), (mp_obj_t)&lte_reconnect_uart_obj },
10321065

10331066
// class constants
1067+
{ MP_OBJ_NEW_QSTR(MP_QSTR_IP), MP_OBJ_NEW_QSTR(MP_QSTR_IP) },
1068+
{ MP_OBJ_NEW_QSTR(MP_QSTR_IPV4V6), MP_OBJ_NEW_QSTR(MP_QSTR_IPV4V6) },
10341069
};
10351070
STATIC MP_DEFINE_CONST_DICT(lte_locals_dict, lte_locals_dict_table);
10361071

0 commit comments

Comments
 (0)
0