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

Commit cb172b4

Browse files
author
iwahdan88
committed
[PYFW-331] LTE refactoring + added Debug Logging Buff for AT comm
# Conflicts: # esp32/Makefile # esp32/application.mk # esp32/mods/modlte.c
1 parent 86d87af commit cb172b4

File tree

3 files changed

+130
-22
lines changed

3 files changed

+130
-22
lines changed

esp32/lte/lteppp.c

Lines changed: 112 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
#define LTE_TRX_WAIT_MS(len) (((len + 1) * 12 * 1000) / MICROPY_LTE_UART_BAUDRATE)
3636
#define LTE_TASK_PERIOD_MS (2)
37-
#define LTE_AT_CMD_TRIALS (20)
37+
#define LTE_AT_CMD_TRIALS (5)
3838

3939
/******************************************************************************
4040
DEFINE TYPES
@@ -54,6 +54,9 @@ SemaphoreHandle_t xLTE_modem_Conn_Sem;
5454
DECLARE PRIVATE DATA
5555
******************************************************************************/
5656
static char lteppp_trx_buffer[LTE_UART_BUFFER_SIZE + 1];
57+
#ifdef LTE_LOG
58+
static lte_log_t lteppp_log;
59+
#endif
5760
static char lteppp_queue_buffer[LTE_UART_BUFFER_SIZE];
5861
static uart_dev_t* lteppp_uart_reg;
5962
static QueueHandle_t xCmdQueue;
@@ -142,13 +145,22 @@ void lteppp_init(void) {
142145
xTaskCreatePinnedToCore(TASK_LTE, "LTE", LTE_TASK_STACK_SIZE / sizeof(StackType_t), NULL, LTE_TASK_PRIORITY, &xLTETaskHndl, 1);
143146

144147
lteppp_connstatus = LTE_PPP_IDLE;
148+
#ifdef LTE_LOG
149+
lteppp_log.log = heap_caps_malloc(LTE_LOG_BUFF_SIZE, MALLOC_CAP_SPIRAM);
150+
#endif
145151
}
146152

147153
void lteppp_start (void) {
148154
uart_set_hw_flow_ctrl(LTE_UART_ID, UART_HW_FLOWCTRL_CTS_RTS, 64);
149155
vTaskDelay(5);
150156
}
151-
157+
#ifdef LTE_LOG
158+
char* lteppp_get_log_buff(void)
159+
{
160+
lteppp_log.log[lteppp_log.ptr] = '\0';
161+
return lteppp_log.log;
162+
}
163+
#endif
152164
lte_modem_conn_state_t lteppp_modem_state(void)
153165
{
154166
lte_modem_conn_state_t state;
@@ -228,6 +240,20 @@ bool lteppp_wait_at_rsp (const char *expected_rsp, uint32_t timeout, bool from_m
228240
if (rx_len > 0) {
229241
// NULL terminate the string
230242
lteppp_trx_buffer[rx_len] = '\0';
243+
#ifdef LTE_LOG
244+
if (lteppp_log.ptr < LTE_LOG_BUFF_SIZE - rx_len) {
245+
memcpy(&(lteppp_log.log[lteppp_log.ptr]), "[RSP]: ", strlen("[RSP]: "));
246+
lteppp_log.ptr += strlen("[RSP]: ");
247+
memcpy(&(lteppp_log.log[lteppp_log.ptr]), lteppp_trx_buffer, rx_len-1);
248+
lteppp_log.ptr += rx_len-1;
249+
lteppp_log.log[lteppp_log.ptr] = '\n';
250+
lteppp_log.ptr++;
251+
}
252+
else
253+
{
254+
lteppp_log.ptr = 0;
255+
}
256+
#endif
231257
/* Check for pause after start of response */
232258
if(strcmp(lteppp_trx_buffer, "\r\n") == 0)
233259
{
@@ -334,20 +360,64 @@ static void TASK_LTE (void *pvParameters) {
334360
uart_set_hw_flow_ctrl(LTE_UART_ID, UART_HW_FLOWCTRL_CTS_RTS, 64);
335361
vTaskDelay(500/portTICK_PERIOD_MS);
336362
// exit PPP session if applicable
337-
lteppp_send_at_cmd("+++", LTE_PPP_BACK_OFF_TIME_MS);
338-
while(!lteppp_send_at_cmd("AT", LTE_RX_TIMEOUT_MIN_MS))
363+
if(lteppp_send_at_cmd("+++", LTE_PPP_BACK_OFF_TIME_MS))
339364
{
340-
if (at_trials >= LTE_AT_CMD_TRIALS) {
341-
uart_set_hw_flow_ctrl(LTE_UART_ID, UART_HW_FLOWCTRL_DISABLE, 0);
342-
uart_set_rts(LTE_UART_ID, false);
343-
xSemaphoreTake(xLTESem, portMAX_DELAY);
344-
lteppp_modem_conn_state = E_LTE_MODEM_DISCONNECTED;
345-
xSemaphoreGive(xLTESem);
346-
xSemaphoreGive(xLTE_modem_Conn_Sem);
347-
at_trials = 0;
348-
goto modem_init;
365+
vTaskDelay(LTE_PPP_BACK_OFF_TIME_MS / portTICK_RATE_MS);
366+
while(!lteppp_send_at_cmd("AT", LTE_RX_TIMEOUT_MIN_MS))
367+
{
368+
if (at_trials >= LTE_AT_CMD_TRIALS) {
369+
uart_set_hw_flow_ctrl(LTE_UART_ID, UART_HW_FLOWCTRL_DISABLE, 0);
370+
uart_set_rts(LTE_UART_ID, false);
371+
xSemaphoreTake(xLTESem, portMAX_DELAY);
372+
lteppp_modem_conn_state = E_LTE_MODEM_DISCONNECTED;
373+
xSemaphoreGive(xLTESem);
374+
xSemaphoreGive(xLTE_modem_Conn_Sem);
375+
at_trials = 0;
376+
goto modem_init;
377+
}
378+
at_trials++;
379+
}
380+
}
381+
else
382+
{
383+
lteppp_send_at_cmd("AT", LTE_RX_TIMEOUT_MIN_MS);
384+
if (!lteppp_send_at_cmd("AT", LTE_RX_TIMEOUT_MIN_MS)) {
385+
vTaskDelay(LTE_PPP_BACK_OFF_TIME_MS / portTICK_RATE_MS);
386+
if (lteppp_send_at_cmd("+++", LTE_PPP_BACK_OFF_TIME_MS))
387+
{
388+
while(!lteppp_send_at_cmd("AT", LTE_RX_TIMEOUT_MIN_MS))
389+
{
390+
if (at_trials >= LTE_AT_CMD_TRIALS) {
391+
uart_set_hw_flow_ctrl(LTE_UART_ID, UART_HW_FLOWCTRL_DISABLE, 0);
392+
uart_set_rts(LTE_UART_ID, false);
393+
xSemaphoreTake(xLTESem, portMAX_DELAY);
394+
lteppp_modem_conn_state = E_LTE_MODEM_DISCONNECTED;
395+
xSemaphoreGive(xLTESem);
396+
xSemaphoreGive(xLTE_modem_Conn_Sem);
397+
at_trials = 0;
398+
goto modem_init;
399+
}
400+
at_trials++;
401+
}
402+
}
403+
else
404+
{
405+
while(!lteppp_send_at_cmd("AT", LTE_RX_TIMEOUT_MIN_MS))
406+
{
407+
if (at_trials >= LTE_AT_CMD_TRIALS) {
408+
uart_set_hw_flow_ctrl(LTE_UART_ID, UART_HW_FLOWCTRL_DISABLE, 0);
409+
uart_set_rts(LTE_UART_ID, false);
410+
xSemaphoreTake(xLTESem, portMAX_DELAY);
411+
lteppp_modem_conn_state = E_LTE_MODEM_DISCONNECTED;
412+
xSemaphoreGive(xLTESem);
413+
xSemaphoreGive(xLTE_modem_Conn_Sem);
414+
at_trials = 0;
415+
goto modem_init;
416+
}
417+
at_trials++;
418+
}
419+
}
349420
}
350-
at_trials++;
351421
}
352422
at_trials = 0;
353423
// Disable char echo
@@ -436,13 +506,40 @@ static bool lteppp_send_at_cmd_exp (const char *cmd, uint32_t timeout, const cha
436506

437507
if(strstr(cmd, "Pycom_Dummy") != NULL)
438508
{
509+
#ifdef LTE_LOG
510+
if (lteppp_log.ptr < (LTE_LOG_BUFF_SIZE - strlen("[CMD]: Dummy") + 1))
511+
{
512+
memcpy(&(lteppp_log.log[lteppp_log.ptr]), "[CMD]: Dummy", strlen("[CMD]: Dummy"));
513+
lteppp_log.ptr += strlen("[CMD]: Dummy");
514+
lteppp_log.log[lteppp_log.ptr] = '\n';
515+
lteppp_log.ptr++;
516+
}
517+
else
518+
{
519+
lteppp_log.ptr = 0;
520+
}
521+
#endif
439522
return lteppp_wait_at_rsp(expected_rsp, timeout, false, data_rem);
440523
}
441524
else
442525
{
443526
uint32_t cmd_len = strlen(cmd);
444527
// char tmp_buf[128];
445-
528+
#ifdef LTE_LOG
529+
if (lteppp_log.ptr < (LTE_LOG_BUFF_SIZE - strlen("[CMD]:") - cmd_len + 1))
530+
{
531+
memcpy(&(lteppp_log.log[lteppp_log.ptr]), "[CMD]:", strlen("[CMD]:"));
532+
lteppp_log.ptr += strlen("[CMD]:");
533+
memcpy(&(lteppp_log.log[lteppp_log.ptr]), cmd, cmd_len);
534+
lteppp_log.ptr += cmd_len;
535+
lteppp_log.log[lteppp_log.ptr] = '\n';
536+
lteppp_log.ptr++;
537+
}
538+
else
539+
{
540+
lteppp_log.ptr = 0;
541+
}
542+
#endif
446543
// flush the rx buffer first
447544
uart_flush(LTE_UART_ID);
448545
// uart_read_bytes(LTE_UART_ID, (uint8_t *)tmp_buf, sizeof(tmp_buf), 5 / portTICK_RATE_MS);

esp32/lte/lteppp.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@
2424
#define LTE_OK_RSP "OK"
2525
#define LTE_CONNECT_RSP "CONNECT"
2626
#define LTE_RX_TIMEOUT_MAX_MS (9500)
27-
#define LTE_RX_TIMEOUT_MIN_MS (250)
27+
#define LTE_RX_TIMEOUT_MIN_MS (300)
2828
#define LTE_PPP_BACK_OFF_TIME_MS (1150)
2929

3030
#define LTE_MUTEX_TIMEOUT (5050 / portTICK_RATE_MS)
3131
#define LTE_TASK_STACK_SIZE (3072)
3232
#define LTE_TASK_PRIORITY (6)
33+
#ifdef LTE_LOG
34+
#define LTE_LOG_BUFF_SIZE (20 * 1024)
35+
#endif
3336

3437
/******************************************************************************
3538
DEFINE TYPES
@@ -59,7 +62,12 @@ typedef enum {
5962
E_LTE_MODEM_CONNECTING,
6063
E_LTE_MODEM_DISCONNECTED
6164
} lte_modem_conn_state_t;
62-
65+
#ifdef LTE_LOG
66+
typedef struct {
67+
char* log;
68+
uint16_t ptr;
69+
} lte_log_t;
70+
#endif
6371
typedef struct {
6472
uint32_t timeout;
6573
char data[LTE_AT_CMD_SIZE_MAX - 4];
@@ -115,5 +123,8 @@ extern bool ltepp_is_ppp_conn_up(void);
115123
extern void lteppp_suspend(void);
116124

117125
extern void lteppp_resume(void);
126+
#ifdef LTE_LOG
127+
extern char* lteppp_get_log_buff(void);
128+
#endif
118129

119130
#endif // _LTEPPP_H_

esp32/mods/modlte.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,15 +1257,15 @@ STATIC mp_obj_t lte_upgrade_mode(void) {
12571257
return mp_const_none;
12581258
}
12591259
STATIC MP_DEFINE_CONST_FUN_OBJ_0(lte_upgrade_mode_obj, lte_upgrade_mode);
1260-
#ifdef LTE_DEBUG_BUFF
1261-
STATIC mp_obj_t lte_debug_buff(void) {
1260+
#ifdef LTE_LOG
1261+
STATIC mp_obj_t lte_log(void) {
12621262
vstr_t vstr;
12631263
char* str_log = lteppp_get_log_buff();
12641264
vstr_init_len(&vstr, strlen(str_log));
12651265
strcpy(vstr.buf, str_log);
12661266
return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
12671267
}
1268-
STATIC MP_DEFINE_CONST_FUN_OBJ_0(lte_debug_buff_obj, lte_debug_buff);
1268+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(lte_log_obj, lte_log);
12691269
#endif
12701270
STATIC mp_obj_t lte_reconnect_uart (void) {
12711271
connect_lte_uart();
@@ -1296,8 +1296,8 @@ STATIC const mp_map_elem_t lte_locals_dict_table[] = {
12961296
{ MP_OBJ_NEW_QSTR(MP_QSTR_modem_upgrade_mode), (mp_obj_t)&lte_upgrade_mode_obj },
12971297
{ MP_OBJ_NEW_QSTR(MP_QSTR_reconnect_uart), (mp_obj_t)&lte_reconnect_uart_obj },
12981298
{ MP_OBJ_NEW_QSTR(MP_QSTR_ue_coverage), (mp_obj_t)&lte_ue_coverage_obj },
1299-
#ifdef LTE_DEBUG_BUFF
1300-
{ MP_OBJ_NEW_QSTR(MP_QSTR_debug_buff), (mp_obj_t)&lte_debug_buff_obj },
1299+
#ifdef LTE_LOG
1300+
{ MP_OBJ_NEW_QSTR(MP_QSTR_log), (mp_obj_t)&lte_log_obj },
13011301
#endif
13021302

13031303
// class constants

0 commit comments

Comments
 (0)