diff --git a/esp32/lte/lteppp.c b/esp32/lte/lteppp.c index 9bd411fd7..bb801adf0 100644 --- a/esp32/lte/lteppp.c +++ b/esp32/lte/lteppp.c @@ -117,8 +117,9 @@ static void lteppp_print_states(); DEFINE PUBLIC FUNCTIONS ******************************************************************************/ -void connect_lte_uart (void) { - MSG("\n"); +void connect_lte_uart (bool reconnect) { + MSG("connect_lte_uart\n"); + uart_driver_delete(LTE_UART_ID); // initialize the UART interface uart_config_t config; @@ -128,7 +129,8 @@ void connect_lte_uart (void) { config.stop_bits = UART_STOP_BITS_1; config.flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS; config.rx_flow_ctrl_thresh = 64; - config.use_ref_tick = false; + // Use UART_SCLK_APB as originally use_ref_tick = false was used here + config.source_clk = UART_SCLK_APB; uart_param_config(LTE_UART_ID, &config); // configure the UART pins @@ -153,6 +155,11 @@ void connect_lte_uart (void) { uart_set_rts(LTE_UART_ID, false); + if (reconnect) { + uart_set_hw_flow_ctrl(LTE_UART_ID, UART_HW_FLOWCTRL_CTS_RTS, 64); + vTaskDelay(5); + } + xTaskCreatePinnedToCore(TASK_UART_EVT, "LTE_UART_EVT", 2048 / sizeof(StackType_t), NULL, 12, &xLTEUartEvtTaskHndl, 1); MSG("done\n"); @@ -481,7 +488,7 @@ static void TASK_LTE (void *pvParameters) { uint8_t at_trials = 0; static uint32_t thread_notification; - connect_lte_uart(); + connect_lte_uart(false); modem_init: MSG("modem_init\n"); diff --git a/esp32/lte/lteppp.h b/esp32/lte/lteppp.h index f577b8b16..ea2350eec 100644 --- a/esp32/lte/lteppp.h +++ b/esp32/lte/lteppp.h @@ -123,7 +123,7 @@ extern bool lteppp_wait_at_rsp (const char *expected_rsp, uint32_t timeout, bool lte_modem_conn_state_t lteppp_get_modem_conn_state(void); void lteppp_set_modem_conn_state(lte_modem_conn_state_t state); -extern void connect_lte_uart (void); +extern void connect_lte_uart (bool reconnect); extern bool ltepp_is_ppp_conn_up(void); diff --git a/esp32/mods/modlte.c b/esp32/mods/modlte.c index 7711813c4..3a81b4212 100644 --- a/esp32/mods/modlte.c +++ b/esp32/mods/modlte.c @@ -223,7 +223,18 @@ static bool lte_push_at_command_ext_cont (char *cmd_str, uint32_t timeout, const } static bool lte_push_at_command_ext(char *cmd_str, uint32_t timeout, const char *expected_rsp, size_t len) { - return lte_push_at_command_ext_cont(cmd_str, timeout, expected_rsp, len, false); + if (len > LTE_AT_CMD_DATA_SIZE_MAX) { + uint32_t cmd_full = len / LTE_AT_CMD_DATA_SIZE_MAX; + uint32_t cmd_remain = len % LTE_AT_CMD_DATA_SIZE_MAX; + for (int i=0; i < cmd_full; i++) { + if (!lte_push_at_command_ext_cont(cmd_str+(i*LTE_AT_CMD_DATA_SIZE_MAX), timeout, expected_rsp, LTE_AT_CMD_DATA_SIZE_MAX, true)) { + return false; + } + } + return lte_push_at_command_ext_cont(cmd_str+(cmd_full*LTE_AT_CMD_DATA_SIZE_MAX), timeout, expected_rsp, cmd_remain, false); + } else { + return lte_push_at_command_ext_cont(cmd_str, timeout, expected_rsp, len, false); + } } static bool lte_push_at_command (char *cmd_str, uint32_t timeout) { @@ -1523,7 +1534,7 @@ STATIC mp_obj_t lte_debug_buff(void) { STATIC MP_DEFINE_CONST_FUN_OBJ_0(lte_debug_buff_obj, lte_debug_buff); #endif STATIC mp_obj_t lte_reconnect_uart (void) { - connect_lte_uart(); + connect_lte_uart(true); lteppp_disconnect(); lte_obj.init = false; return mp_const_none; diff --git a/esp32/pycom_version.h b/esp32/pycom_version.h index 8946280b1..0e75d58a4 100644 --- a/esp32/pycom_version.h +++ b/esp32/pycom_version.h @@ -10,7 +10,7 @@ #ifndef VERSION_H_ #define VERSION_H_ -#define SW_VERSION_NUMBER "1.20.2.r6" +#define SW_VERSION_NUMBER "1.20.2.r7" #define LORAWAN_VERSION_NUMBER "1.0.2"