/* * Copyright 2020 Google LLC * * SPDX-License-Identifier: Apache-2.0 */ /** * @defgroup driver_sensor_subsys_tests sensor_subsys * @ingroup all_tests * @{ * @} */ #include #include struct sensor_accel_fixture { const struct device *accel_spi; const struct device *accel_i2c; }; static enum sensor_channel channel[] = { SENSOR_CHAN_ACCEL_X, SENSOR_CHAN_ACCEL_Y, SENSOR_CHAN_ACCEL_Z, SENSOR_CHAN_GYRO_X, SENSOR_CHAN_GYRO_Y, SENSOR_CHAN_GYRO_Z, }; static void test_sensor_accel_basic(const struct device *dev) { zassert_equal(sensor_sample_fetch(dev), 0, "fail to fetch sample"); for (int i = 0; i < ARRAY_SIZE(channel); i++) { struct sensor_value val; zassert_ok(sensor_channel_get(dev, channel[i], &val), "fail to get channel"); zassert_equal(i, val.val1, "expected %d, got %d", i, val.val1); zassert_true(val.val2 < 1000, "error %d is too large", val.val2); } } /* Run all of our tests on an accelerometer device with the given label */ static void run_tests_on_accel(const struct device *accel) { zassert_true(device_is_ready(accel), "Accelerometer device is not ready"); PRINT("Running tests on '%s'\n", accel->name); k_object_access_grant(accel, k_current_get()); } ZTEST_USER_F(sensor_accel, test_sensor_accel_basic_spi) { run_tests_on_accel(fixture->accel_spi); test_sensor_accel_basic(fixture->accel_spi); } ZTEST_USER_F(sensor_accel, test_sensor_accel_basic_i2c) { if (fixture->accel_i2c == NULL) { ztest_test_skip(); } run_tests_on_accel(fixture->accel_i2c); test_sensor_accel_basic(fixture->accel_i2c); } static void *sensor_accel_setup(void) { static struct sensor_accel_fixture fixture = { .accel_spi = DEVICE_DT_GET(DT_ALIAS(accel_0)), .accel_i2c = DEVICE_DT_GET_OR_NULL(DT_ALIAS(accel_1)), }; return &fixture; } ZTEST_SUITE(sensor_accel, NULL, sensor_accel_setup, NULL, NULL, NULL);