diff --git a/SDK/15.2.0/components/libraries/serial/nrf_serial.c b/SDK/15.2.0/components/libraries/serial/nrf_serial.c index 35ff6b4..fe49ea5 100644 --- a/SDK/15.2.0/components/libraries/serial/nrf_serial.c +++ b/SDK/15.2.0/components/libraries/serial/nrf_serial.c @@ -183,6 +183,16 @@ static void uart_event_handler(nrf_drv_uart_event_t * p_event, void * p_context) } } +typedef struct { + volatile bool expired; +} nrf_serial_timeout_ctx_t; + +static void serial_timeout_handler(void * p_context) +{ + nrf_serial_timeout_ctx_t * p_tout_ctx = p_context; + p_tout_ctx->expired = true; +} + ret_code_t nrf_serial_init(nrf_serial_t const * p_serial, nrf_drv_uart_config_t const * p_drv_uart_config, nrf_serial_config_t const * p_config) @@ -227,6 +237,22 @@ ret_code_t nrf_serial_init(nrf_serial_t const * p_serial, nrf_mtx_init(&p_serial->p_ctx->read_lock); nrf_mtx_init(&p_serial->p_ctx->write_lock); + ret = app_timer_create(p_serial->p_tx_timer, + APP_TIMER_MODE_SINGLE_SHOT, + serial_timeout_handler); + if (ret != NRF_SUCCESS) + { + return ret; + } + + ret = app_timer_create(p_serial->p_rx_timer, + APP_TIMER_MODE_SINGLE_SHOT, + serial_timeout_handler); + if (ret != NRF_SUCCESS) + { + return ret; + } + p_serial->p_ctx->flags = NRF_SERIAL_RX_ENABLED_FLAG | NRF_SERIAL_TX_ENABLED_FLAG; @@ -286,17 +312,6 @@ ret_code_t nrf_serial_uninit(nrf_serial_t const * p_serial) return NRF_SUCCESS; } -typedef struct { - volatile bool expired; -} nrf_serial_timeout_ctx_t; - -static void serial_timeout_handler(void * p_context) -{ - nrf_serial_timeout_ctx_t * p_tout_ctx = p_context; - p_tout_ctx->expired = true; -} - - static ret_code_t timeout_setup(nrf_serial_t const * p_serial, app_timer_id_t const * p_timer_id, uint32_t timeout_ms, @@ -310,10 +325,8 @@ static ret_code_t timeout_setup(nrf_serial_t const * p_serial, return NRF_SUCCESS; } - ret_code_t ret = app_timer_create(p_timer_id, - APP_TIMER_MODE_SINGLE_SHOT, - serial_timeout_handler); - if (ret != NRF_SUCCESS) + ret_code_t ret = app_timer_stop(*p_timer_id); + if(ret != NRF_SUCCESS) { return ret; } @@ -484,7 +497,7 @@ ret_code_t nrf_serial_read(nrf_serial_t const * p_serial, *p_read = size - left; } - if (!tout_ctx.expired && (timeout_ms != NRF_SERIAL_MAX_TIMEOUT)) +if (!tout_ctx.expired && (timeout_ms != NRF_SERIAL_MAX_TIMEOUT)) { (void)app_timer_stop(*p_serial->p_rx_timer); }