/* * Copyright (c) 2017 comsuisse AG * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include "i2s_api_test.h" ZTEST_DMEM const struct device *dev_i2s_rx = DEVICE_DT_GET_OR_NULL(I2S_DEV_NODE_RX); ZTEST_DMEM const struct device *dev_i2s_tx = DEVICE_DT_GET_OR_NULL(I2S_DEV_NODE_TX); ZTEST_DMEM const struct device *dev_i2s = DEVICE_DT_GET_OR_NULL(I2S_DEV_NODE_RX); ZTEST_DMEM bool dir_both_supported; static void *setup(void) { k_thread_access_grant(k_current_get(), &rx_mem_slab, &tx_mem_slab); k_object_access_grant(dev_i2s_rx, k_current_get()); k_object_access_grant(dev_i2s_tx, k_current_get()); return NULL; } static void before(void *fixture) { ARG_UNUSED(fixture); int ret; zassert_not_null(dev_i2s_rx, "RX device not found"); zassert_true(device_is_ready(dev_i2s_rx), "device %s is not ready", dev_i2s_rx->name); zassert_not_null(dev_i2s_tx, "TX device not found"); zassert_true(device_is_ready(dev_i2s_tx), "device %s is not ready", dev_i2s_tx->name); ret = configure_stream(dev_i2s_rx, I2S_DIR_RX); zassert_equal(ret, TC_PASS); ret = configure_stream(dev_i2s_tx, I2S_DIR_TX); zassert_equal(ret, TC_PASS); } static void before_dir_both(void *fixture) { ARG_UNUSED(fixture); int ret; zassert_not_null(dev_i2s, "TX/RX device not found"); zassert_true(device_is_ready(dev_i2s), "device %s is not ready", dev_i2s->name); ret = configure_stream(dev_i2s, I2S_DIR_BOTH); zassert_equal(ret, TC_PASS); /* Check if the tested driver supports the I2S_DIR_BOTH value. * Use the DROP trigger for this, as in the current state of the driver * (READY, both TX and RX queues empty) it is actually a no-op. */ ret = i2s_trigger(dev_i2s, I2S_DIR_BOTH, I2S_TRIGGER_DROP); dir_both_supported = (ret == 0); if (IS_ENABLED(CONFIG_I2S_TEST_USE_I2S_DIR_BOTH)) { zassert_true(dir_both_supported, "I2S_DIR_BOTH value is supposed to be supported."); } } ZTEST_SUITE(i2s_loopback, NULL, setup, before, NULL, NULL); ZTEST_SUITE(i2s_states, NULL, setup, before, NULL, NULL); ZTEST_SUITE(i2s_dir_both_states, NULL, setup, before_dir_both, NULL, NULL); ZTEST_SUITE(i2s_dir_both_loopback, NULL, setup, before_dir_both, NULL, NULL); ZTEST_SUITE(i2s_errors, NULL, setup, before, NULL, NULL);