blob: a97be2cb7840bb1c25d5b2292aa6ee6d57608871 [file] [log] [blame]
/*
* Copyright 2023 Google LLC
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "fixture.h"
#include <zephyr/drivers/emul_sensor.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/ztest.h>
static void sensor_bmi160_setup_emulator(const struct device *dev, const struct emul *emulator)
{
static struct {
enum sensor_channel channel;
q31_t value;
} values[] = {
{SENSOR_CHAN_ACCEL_X, 0}, {SENSOR_CHAN_ACCEL_Y, 1 << 28},
{SENSOR_CHAN_ACCEL_Z, 2 << 28}, {SENSOR_CHAN_GYRO_X, 3 << 28},
{SENSOR_CHAN_GYRO_Y, 4 << 28}, {SENSOR_CHAN_GYRO_Z, 5 << 28},
};
static struct sensor_value scale;
/* 4g */
scale.val1 = 39;
scale.val2 = 226600;
zassert_ok(sensor_attr_set(dev, SENSOR_CHAN_ACCEL_XYZ, SENSOR_ATTR_FULL_SCALE, &scale));
/* 125 deg/s */
scale.val1 = 2;
scale.val2 = 181661;
zassert_ok(sensor_attr_set(dev, SENSOR_CHAN_GYRO_XYZ, SENSOR_ATTR_FULL_SCALE, &scale));
for (size_t i = 0; i < ARRAY_SIZE(values); ++i) {
zassert_ok(emul_sensor_backend_set_channel(emulator, values[i].channel,
&values[i].value, 3));
}
}
static void *bmi160_setup(void)
{
static struct bmi160_fixture fixture = {
.dev_spi = DEVICE_DT_GET(DT_ALIAS(accel_0)),
.dev_i2c = DEVICE_DT_GET(DT_ALIAS(accel_1)),
.emul_spi = EMUL_DT_GET(DT_ALIAS(accel_0)),
.emul_i2c = EMUL_DT_GET(DT_ALIAS(accel_1)),
};
sensor_bmi160_setup_emulator(fixture.dev_i2c, fixture.emul_i2c);
sensor_bmi160_setup_emulator(fixture.dev_spi, fixture.emul_spi);
return &fixture;
}
static void bmi160_before(void *f)
{
struct bmi160_fixture *fixture = (struct bmi160_fixture *)f;
zassert_true(device_is_ready(fixture->dev_spi), "'%s' device is not ready",
fixture->dev_spi->name);
zassert_true(device_is_ready(fixture->dev_i2c), "'%s' device is not ready",
fixture->dev_i2c->name);
k_object_access_grant(fixture->dev_spi, k_current_get());
k_object_access_grant(fixture->dev_i2c, k_current_get());
}
ZTEST_SUITE(bmi160, NULL, bmi160_setup, bmi160_before, NULL, NULL);