tests: uart: Add chained write test case for UART async API
Add new test case Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
This commit is contained in:
parent
b121660a8f
commit
48f005707e
3 changed files with 79 additions and 2 deletions
|
@ -20,7 +20,7 @@ void test_main(void)
|
|||
ztest_unit_test(test_chained_read),
|
||||
ztest_unit_test(test_double_buffer),
|
||||
ztest_unit_test(test_read_abort),
|
||||
ztest_unit_test(test_chained_write),
|
||||
ztest_unit_test(test_write_abort));
|
||||
|
||||
ztest_run_test_suite(uart_async_test);
|
||||
}
|
||||
|
|
|
@ -30,5 +30,6 @@ void test_chained_read(void);
|
|||
void test_double_buffer(void);
|
||||
void test_read_abort(void);
|
||||
void test_write_abort(void);
|
||||
void test_chained_write(void);
|
||||
|
||||
#endif /* __TEST_UART_H__ */
|
||||
|
|
|
@ -12,12 +12,17 @@ K_SEM_DEFINE(rx_rdy, 0, 1);
|
|||
K_SEM_DEFINE(rx_buf_released, 0, 1);
|
||||
K_SEM_DEFINE(rx_disabled, 0, 1);
|
||||
|
||||
|
||||
|
||||
void test_single_read_callback(struct uart_event *evt, void *user_data)
|
||||
{
|
||||
switch (evt->type) {
|
||||
case UART_TX_DONE:
|
||||
k_sem_give(&tx_done);
|
||||
break;
|
||||
case UART_TX_ABORTED:
|
||||
(*(u32_t *)user_data)++;
|
||||
break;
|
||||
case UART_RX_RDY:
|
||||
k_sem_give(&rx_rdy);
|
||||
break;
|
||||
|
@ -37,13 +42,16 @@ void test_single_read(void)
|
|||
{
|
||||
struct device *uart_dev = device_get_binding(UART_DEVICE_NAME);
|
||||
|
||||
volatile u32_t tx_aborted_count = 0;
|
||||
u8_t rx_buf[10] = {0};
|
||||
u8_t tx_buf[5] = "test";
|
||||
|
||||
zassert_not_equal(memcmp(tx_buf, rx_buf, 5), 0,
|
||||
"Initial buffer check failed");
|
||||
|
||||
uart_callback_set(uart_dev, test_single_read_callback, NULL);
|
||||
uart_callback_set(uart_dev,
|
||||
test_single_read_callback,
|
||||
(void *) &tx_aborted_count);
|
||||
|
||||
uart_rx_enable(uart_dev, rx_buf, 10, 50);
|
||||
uart_tx(uart_dev, tx_buf, sizeof(tx_buf), 100);
|
||||
|
@ -61,6 +69,7 @@ void test_single_read(void)
|
|||
"RX_BUF_RELEASED timeout");
|
||||
zassert_equal(k_sem_take(&rx_disabled, 1000), 0, "RX_DISABLED timeout");
|
||||
zassert_equal(memcmp(tx_buf, rx_buf+5, 5), 0, "Buffers not equal");
|
||||
zassert_equal(tx_aborted_count, 0, "TX aborted triggered");
|
||||
}
|
||||
|
||||
u8_t chained_read_buf0[10];
|
||||
|
@ -298,3 +307,70 @@ void test_write_abort(void)
|
|||
"RX_BUF_RELEASED timeout");
|
||||
zassert_equal(k_sem_take(&rx_disabled, 100), 0, "RX_DISABLED timeout");
|
||||
}
|
||||
|
||||
u8_t chained_write_tx_bufs[2][10] = {"Message 1", "Message 2"};
|
||||
bool chained_write_next_buf = true;
|
||||
volatile u8_t tx_sent;
|
||||
|
||||
void test_chained_write_callback(struct uart_event *evt, void *user_data)
|
||||
{
|
||||
struct device *uart_dev = (struct device *) user_data;
|
||||
|
||||
switch (evt->type) {
|
||||
case UART_TX_DONE:
|
||||
if (chained_write_next_buf) {
|
||||
uart_tx(uart_dev, chained_write_tx_bufs[1], 10, 100);
|
||||
chained_write_next_buf = false;
|
||||
}
|
||||
tx_sent = 1;
|
||||
k_sem_give(&tx_done);
|
||||
break;
|
||||
case UART_TX_ABORTED:
|
||||
sent = evt->data.tx.len;
|
||||
k_sem_give(&tx_aborted);
|
||||
break;
|
||||
case UART_RX_RDY:
|
||||
received = evt->data.rx.len;
|
||||
k_sem_give(&rx_rdy);
|
||||
break;
|
||||
case UART_RX_BUF_RELEASED:
|
||||
k_sem_give(&rx_buf_released);
|
||||
break;
|
||||
case UART_RX_DISABLED:
|
||||
k_sem_give(&rx_disabled);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void test_chained_write(void)
|
||||
{
|
||||
struct device *uart_dev = device_get_binding(UART_DEVICE_NAME);
|
||||
|
||||
u8_t rx_buf[20];
|
||||
|
||||
memset(rx_buf, 0, sizeof(rx_buf));
|
||||
|
||||
uart_callback_set(uart_dev, test_chained_write_callback, uart_dev);
|
||||
|
||||
uart_rx_enable(uart_dev, rx_buf, sizeof(rx_buf), 50);
|
||||
|
||||
uart_tx(uart_dev, chained_write_tx_bufs[0], 10, 100);
|
||||
zassert_equal(k_sem_take(&tx_done, 100), 0, "TX_DONE timeout");
|
||||
zassert_equal(k_sem_take(&tx_done, 100), 0, "TX_DONE timeout");
|
||||
zassert_equal(chained_write_next_buf, false, "Sent no message");
|
||||
zassert_equal(k_sem_take(&rx_rdy, 100), 0, "RX_RDY timeout");
|
||||
zassert_equal(memcmp(chained_write_tx_bufs[0], rx_buf, 10),
|
||||
0,
|
||||
"Buffers not equal");
|
||||
zassert_equal(memcmp(chained_write_tx_bufs[1], rx_buf + 10, 10),
|
||||
0,
|
||||
"Buffers not equal");
|
||||
|
||||
uart_rx_disable(uart_dev);
|
||||
zassert_equal(k_sem_take(&rx_buf_released, 100),
|
||||
0,
|
||||
"RX_BUF_RELEASED timeout");
|
||||
zassert_equal(k_sem_take(&rx_disabled, 100), 0, "RX_DISABLED timeout");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue