Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slm fixes #21041

Merged
merged 2 commits into from
Mar 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 13 additions & 20 deletions applications/serial_lte_modem/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down
18 changes: 6 additions & 12 deletions applications/serial_lte_modem/src/slm_at_udp_proxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down