diff --git a/applications/serial_lte_modem/src/main.c b/applications/serial_lte_modem/src/main.c index 1fb06d7db12a..2514b2645d70 100644 --- a/applications/serial_lte_modem/src/main.c +++ b/applications/serial_lte_modem/src/main.c @@ -61,35 +61,28 @@ static void on_modem_lib_init(int ret, void *ctx) } #if defined(CONFIG_NRF_MODEM_LIB_ON_FAULT_APPLICATION_SPECIFIC) -static void on_modem_failure_shutdown(struct k_work *item); -static void on_modem_failure_reinit(struct k_work *item); +static struct nrf_modem_fault_info modem_fault_info; -K_WORK_DELAYABLE_DEFINE(modem_failure_shutdown_work, on_modem_failure_shutdown); -K_WORK_DELAYABLE_DEFINE(modem_failure_reinit_work, on_modem_failure_reinit); - -void nrf_modem_fault_handler(struct nrf_modem_fault_info *fault_info) +static void on_modem_failure(struct k_work *) { - rsp_send("\r\n#XMODEM: FAULT,0x%x,0x%x\r\n", fault_info->reason, - fault_info->program_counter); - /* For now we wait 10 ms to give the trace handler time to process trace data. */ - k_work_reschedule(&modem_failure_shutdown_work, K_MSEC(10)); -} + int ret; -static void on_modem_failure_shutdown(struct k_work *work) -{ - int ret = nrf_modem_lib_shutdown(); + rsp_send("\r\n#XMODEM: FAULT,0x%x,0x%x\r\n", modem_fault_info.reason, + modem_fault_info.program_counter); - ARG_UNUSED(work); + ret = nrf_modem_lib_shutdown(); rsp_send("\r\n#XMODEM: SHUTDOWN,%d\r\n", ret); - k_work_reschedule(&modem_failure_reinit_work, K_MSEC(10)); + + ret = nrf_modem_lib_init(); + rsp_send("\r\n#XMODEM: INIT,%d\r\n", ret); } +K_WORK_DEFINE(modem_failure_work, on_modem_failure); -static void on_modem_failure_reinit(struct k_work *work) +void nrf_modem_fault_handler(struct nrf_modem_fault_info *fault_info) { - int ret = nrf_modem_lib_init(); + modem_fault_info = *fault_info; - ARG_UNUSED(work); - rsp_send("\r\n#XMODEM: INIT,%d\r\n", ret); + k_work_submit(&modem_failure_work); } #endif /* CONFIG_NRF_MODEM_LIB_ON_FAULT_APPLICATION_SPECIFIC */ diff --git a/applications/serial_lte_modem/src/slm_at_udp_proxy.c b/applications/serial_lte_modem/src/slm_at_udp_proxy.c index 0d33e9fa350c..0381dfd9e7cb 100644 --- a/applications/serial_lte_modem/src/slm_at_udp_proxy.c +++ b/applications/serial_lte_modem/src/slm_at_udp_proxy.c @@ -392,18 +392,12 @@ static void udp_thread_func(void *p1, void *p2, void *p3) LOG_DBG("sock events 0x%08x", fds[SOCK].revents); LOG_DBG("efd events 0x%08x", fds[EVENT_FD].revents); if ((fds[SOCK].revents & ZSOCK_POLLIN) != 0) { - if (proxy.role == UDP_ROLE_SERVER) { - /* Store the remote to send responses with the #XUDPSEND command. */ - unsigned int size = sizeof(proxy.remote); - - memset(&proxy.remote, 0, sizeof(proxy.remote)); - ret = zsock_recvfrom(proxy.sock, (void *)slm_data_buf, - sizeof(slm_data_buf), ZSOCK_MSG_DONTWAIT, - (struct sockaddr *)&proxy.remote, &size); - } else { - ret = zsock_recv(proxy.sock, (void *)slm_data_buf, - sizeof(slm_data_buf), ZSOCK_MSG_DONTWAIT); - } + unsigned int size = sizeof(proxy.remote); + + memset(&proxy.remote, 0, sizeof(proxy.remote)); + ret = zsock_recvfrom(proxy.sock, (void *)slm_data_buf, + sizeof(slm_data_buf), ZSOCK_MSG_DONTWAIT, + (struct sockaddr *)&proxy.remote, &size); if (ret < 0 && errno != EAGAIN) { LOG_WRN("zsock_recv() error: %d", -errno); } else if (ret > 0) {