From 2e8465c8dc5973aafd4888af1663343bac1a6af0 Mon Sep 17 00:00:00 2001 From: Graham Wacey Date: Mon, 1 Jul 2024 16:42:07 +0100 Subject: [PATCH] applications: nrf5340_audio: Add a deinitialise function The data FIFO module did not have a deinitialise function so added one, with a twister test. Signed-off-by: Graham Wacey --- include/data_fifo.h | 12 ++++++++++++ lib/data_fifo/data_fifo.c | 16 ++++++++++++++++ tests/lib/data_fifo/src/main.c | 15 +++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/include/data_fifo.h b/include/data_fifo.h index ea5b33bb3ff5..56379c9f5d32 100644 --- a/include/data_fifo.h +++ b/include/data_fifo.h @@ -150,6 +150,18 @@ int data_fifo_num_used_get(struct data_fifo *data_fifo, uint32_t *alloced_num, */ int data_fifo_empty(struct data_fifo *data_fifo); +/** + * @brief Deinitialise the data_fifo. + * + * @note The fifo is emptied first, so it is the users responsibility to release any data items it + * has queued. The internal slab and message buffer are not released. + * + * @param data_fifo Pointer to the data_fifo structure. + * + * @retval 0 if success, error otherwise. + */ +int data_fifo_deinit(struct data_fifo *data_fifo); + /** * @brief Initialise the data_fifo. * diff --git a/lib/data_fifo/data_fifo.c b/lib/data_fifo/data_fifo.c index a3f77be96f9d..1c1b7dc3299c 100644 --- a/lib/data_fifo/data_fifo.c +++ b/lib/data_fifo/data_fifo.c @@ -167,6 +167,22 @@ int data_fifo_empty(struct data_fifo *data_fifo) return 0; } +int data_fifo_deinit(struct data_fifo *data_fifo) +{ + __ASSERT_NO_MSG(data_fifo != NULL); + __ASSERT_NO_MSG(data_fifo->initialized); + int ret; + + ret = data_fifo_empty(data_fifo); + if (ret) { + return ret; + } + + data_fifo->initialized = false; + + return 0; +} + int data_fifo_init(struct data_fifo *data_fifo) { __ASSERT_NO_MSG(data_fifo != NULL); diff --git a/tests/lib/data_fifo/src/main.c b/tests/lib/data_fifo/src/main.c index 885cb8ad36c1..d26efc99a99f 100644 --- a/tests/lib/data_fifo/src/main.c +++ b/tests/lib/data_fifo/src/main.c @@ -31,6 +31,21 @@ static void internal_test_remaining_elements(struct data_fifo *data_fifo, uint32 num_locked, line); } +ZTEST(suite_data_fifo, test_data_fifo_deinit_ok) +{ + DATA_FIFO_DEFINE(data_fifo, 8, 128); + + int ret; + + ret = data_fifo_init(&data_fifo); + zassert_equal(ret, 0, "init did not return 0"); + zassert_equal(data_fifo.initialized, true, "init did not set initialise flag"); + + ret = data_fifo_deinit(&data_fifo); + zassert_equal(ret, 0, "deinit did not return 0"); + zassert_equal(data_fifo.initialized, false, "deinit did not reset initialise flag"); +} + ZTEST(suite_data_fifo, test_data_fifo_init_ok) { DATA_FIFO_DEFINE(data_fifo, 8, 128);