Skip to content

Commit 103d927

Browse files
committed
applications: serial_lte_modem: Fix assert in modem fault hander
Move UART message sending to worker. They cannot be sent from ISR context. Signed-off-by: Markus Lassila <markus.lassila@nordicsemi.no>
1 parent 5372540 commit 103d927

File tree

1 file changed

+13
-20
lines changed
  • applications/serial_lte_modem/src

1 file changed

+13
-20
lines changed

applications/serial_lte_modem/src/main.c

+13-20
Original file line numberDiff line numberDiff line change
@@ -61,35 +61,28 @@ static void on_modem_lib_init(int ret, void *ctx)
6161
}
6262

6363
#if defined(CONFIG_NRF_MODEM_LIB_ON_FAULT_APPLICATION_SPECIFIC)
64-
static void on_modem_failure_shutdown(struct k_work *item);
65-
static void on_modem_failure_reinit(struct k_work *item);
64+
static struct nrf_modem_fault_info modem_fault_info;
6665

67-
K_WORK_DELAYABLE_DEFINE(modem_failure_shutdown_work, on_modem_failure_shutdown);
68-
K_WORK_DELAYABLE_DEFINE(modem_failure_reinit_work, on_modem_failure_reinit);
69-
70-
void nrf_modem_fault_handler(struct nrf_modem_fault_info *fault_info)
66+
static void on_modem_failure(struct k_work *)
7167
{
72-
rsp_send("\r\n#XMODEM: FAULT,0x%x,0x%x\r\n", fault_info->reason,
73-
fault_info->program_counter);
74-
/* For now we wait 10 ms to give the trace handler time to process trace data. */
75-
k_work_reschedule(&modem_failure_shutdown_work, K_MSEC(10));
76-
}
68+
int ret;
7769

78-
static void on_modem_failure_shutdown(struct k_work *work)
79-
{
80-
int ret = nrf_modem_lib_shutdown();
70+
rsp_send("\r\n#XMODEM: FAULT,0x%x,0x%x\r\n", modem_fault_info.reason,
71+
modem_fault_info.program_counter);
8172

82-
ARG_UNUSED(work);
73+
ret = nrf_modem_lib_shutdown();
8374
rsp_send("\r\n#XMODEM: SHUTDOWN,%d\r\n", ret);
84-
k_work_reschedule(&modem_failure_reinit_work, K_MSEC(10));
75+
76+
ret = nrf_modem_lib_init();
77+
rsp_send("\r\n#XMODEM: INIT,%d\r\n", ret);
8578
}
79+
K_WORK_DEFINE(modem_failure_work, on_modem_failure);
8680

87-
static void on_modem_failure_reinit(struct k_work *work)
81+
void nrf_modem_fault_handler(struct nrf_modem_fault_info *fault_info)
8882
{
89-
int ret = nrf_modem_lib_init();
83+
modem_fault_info = *fault_info;
9084

91-
ARG_UNUSED(work);
92-
rsp_send("\r\n#XMODEM: INIT,%d\r\n", ret);
85+
k_work_submit(&modem_failure_work);
9386
}
9487
#endif /* CONFIG_NRF_MODEM_LIB_ON_FAULT_APPLICATION_SPECIFIC */
9588

0 commit comments

Comments
 (0)