modem: backend: uart_async: improve logging on UART_TX_ABORTED

Only log if the abort is not self-triggered,
and also print the number of bytes sent.

Signed-off-by: Tomi Fontanilles <tomi.fontanilles@nordicsemi.no>
This commit is contained in:
Tomi Fontanilles 2024-02-14 05:42:38 +02:00 committed by Fabio Baltieri
parent 11f22bf702
commit bc64c91d62

View file

@ -12,12 +12,15 @@ LOG_MODULE_DECLARE(modem_backend_uart, CONFIG_MODEM_MODULES_LOG_LEVEL);
#include <zephyr/kernel.h> #include <zephyr/kernel.h>
#include <string.h> #include <string.h>
#define MODEM_BACKEND_UART_ASYNC_STATE_TRANSMITTING_BIT (0) enum {
#define MODEM_BACKEND_UART_ASYNC_STATE_RECEIVING_BIT (1) MODEM_BACKEND_UART_ASYNC_STATE_TRANSMITTING_BIT,
#define MODEM_BACKEND_UART_ASYNC_STATE_RX_BUF0_USED_BIT (2) MODEM_BACKEND_UART_ASYNC_STATE_RECEIVING_BIT,
#define MODEM_BACKEND_UART_ASYNC_STATE_RX_BUF1_USED_BIT (3) MODEM_BACKEND_UART_ASYNC_STATE_RX_BUF0_USED_BIT,
MODEM_BACKEND_UART_ASYNC_STATE_RX_BUF1_USED_BIT,
MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT,
};
static bool modem_backend_uart_async_is_closed(struct modem_backend_uart *backend) static bool modem_backend_uart_async_is_uart_stopped(struct modem_backend_uart *backend)
{ {
if (!atomic_test_bit(&backend->async.state, if (!atomic_test_bit(&backend->async.state,
MODEM_BACKEND_UART_ASYNC_STATE_TRANSMITTING_BIT) && MODEM_BACKEND_UART_ASYNC_STATE_TRANSMITTING_BIT) &&
@ -33,6 +36,12 @@ static bool modem_backend_uart_async_is_closed(struct modem_backend_uart *backen
return false; return false;
} }
static bool modem_backend_uart_async_is_open(struct modem_backend_uart *backend)
{
return atomic_test_bit(&backend->async.state,
MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT);
}
static void modem_backend_uart_async_event_handler(const struct device *dev, static void modem_backend_uart_async_event_handler(const struct device *dev,
struct uart_event *evt, void *user_data) struct uart_event *evt, void *user_data)
{ {
@ -49,7 +58,9 @@ static void modem_backend_uart_async_event_handler(const struct device *dev,
break; break;
case UART_TX_ABORTED: case UART_TX_ABORTED:
LOG_WRN("Transmit aborted"); if (modem_backend_uart_async_is_open(backend)) {
LOG_WRN("Transmit aborted (%zu sent)", evt->data.tx.len);
}
atomic_clear_bit(&backend->async.state, atomic_clear_bit(&backend->async.state,
MODEM_BACKEND_UART_ASYNC_STATE_TRANSMITTING_BIT); MODEM_BACKEND_UART_ASYNC_STATE_TRANSMITTING_BIT);
k_work_submit(&backend->transmit_idle_work); k_work_submit(&backend->transmit_idle_work);
@ -124,7 +135,7 @@ static void modem_backend_uart_async_event_handler(const struct device *dev,
break; break;
} }
if (modem_backend_uart_async_is_closed(backend)) { if (modem_backend_uart_async_is_uart_stopped(backend)) {
k_work_submit(&backend->async.rx_disabled_work); k_work_submit(&backend->async.rx_disabled_work);
} }
} }
@ -155,6 +166,8 @@ static int modem_backend_uart_async_open(void *data)
atomic_set_bit(&backend->async.state, atomic_set_bit(&backend->async.state,
MODEM_BACKEND_UART_ASYNC_STATE_RECEIVING_BIT); MODEM_BACKEND_UART_ASYNC_STATE_RECEIVING_BIT);
atomic_set_bit(&backend->async.state,
MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT);
modem_pipe_notify_opened(&backend->pipe); modem_pipe_notify_opened(&backend->pipe);
return 0; return 0;
@ -217,6 +230,7 @@ static int modem_backend_uart_async_close(void *data)
{ {
struct modem_backend_uart *backend = (struct modem_backend_uart *)data; struct modem_backend_uart *backend = (struct modem_backend_uart *)data;
atomic_clear_bit(&backend->async.state, MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT);
uart_tx_abort(backend->uart); uart_tx_abort(backend->uart);
uart_rx_disable(backend->uart); uart_rx_disable(backend->uart);
return 0; return 0;