| /* |
| * Copyright (c) 2023 Meta |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/ztest.h> |
| #include <zephyr/logging/log.h> |
| #include <zephyr/logging/log_backend.h> |
| #include <zephyr/drivers/uart.h> |
| #include <zephyr/drivers/serial/uart_emul.h> |
| |
| LOG_MODULE_REGISTER(test, CONFIG_SAMPLE_MODULE_LOG_LEVEL); |
| |
| #define EMUL_UART_NUM DT_NUM_INST_STATUS_OKAY(zephyr_uart_emul) |
| #define EMUL_UART_NODE(i) DT_NODELABEL(euart##i) |
| #define EMUL_UART_DEV_INIT(i, _) DEVICE_DT_GET(EMUL_UART_NODE(i)) |
| #define EMUL_UART_TX_FIFO_SIZE(i) DT_PROP(EMUL_UART_NODE(i), tx_fifo_size) |
| #define SAMPLE_DATA_SIZE EMUL_UART_TX_FIFO_SIZE(0) |
| |
| #define TEST_DATA "0123456789ABCDEF" |
| BUILD_ASSERT(strlen(TEST_DATA) < SAMPLE_DATA_SIZE); |
| |
| struct log_backend_uart_fixture { |
| const struct device *dev[EMUL_UART_NUM]; |
| }; |
| |
| static void *uart_emul_setup(void) |
| { |
| static struct log_backend_uart_fixture fixture = { |
| .dev = {LISTIFY(EMUL_UART_NUM, EMUL_UART_DEV_INIT, (,))}}; |
| |
| for (size_t i = 0; i < EMUL_UART_NUM; i++) { |
| zassert_not_null(fixture.dev[i]); |
| } |
| |
| return &fixture; |
| } |
| |
| static void uart_emul_before(void *f) |
| { |
| struct log_backend_uart_fixture *fixture = f; |
| |
| for (size_t i = 0; i < EMUL_UART_NUM; i++) { |
| uart_irq_tx_disable(fixture->dev[i]); |
| uart_irq_rx_disable(fixture->dev[i]); |
| |
| uart_emul_flush_rx_data(fixture->dev[i]); |
| uart_emul_flush_tx_data(fixture->dev[i]); |
| |
| uart_err_check(fixture->dev[i]); |
| } |
| } |
| |
| ZTEST_F(log_backend_uart, test_log_backend_uart_multi_instance) |
| { |
| zassert_equal(log_backend_count_get(), EMUL_UART_NUM, "Unexpected number of instance(s)"); |
| |
| LOG_RAW(TEST_DATA); |
| |
| for (size_t i = 0; i < EMUL_UART_NUM; i++) { |
| uint8_t tx_content[SAMPLE_DATA_SIZE] = {0}; |
| size_t tx_len; |
| |
| tx_len = uart_emul_get_tx_data(fixture->dev[i], tx_content, sizeof(tx_content)); |
| zassert_equal(tx_len, strlen(TEST_DATA), |
| "%d: TX buffer length does not match. Expected %d, got %d", |
| i, strlen(TEST_DATA), tx_len); |
| zassert_mem_equal(tx_content, TEST_DATA, strlen(tx_content)); |
| } |
| } |
| |
| ZTEST_SUITE(log_backend_uart, NULL, uart_emul_setup, uart_emul_before, NULL, NULL); |