13#ifndef INFUSE_SDK_INCLUDE_INFUSE_DRIVERS_IMU_H_
14#define INFUSE_SDK_INCLUDE_INFUSE_DRIVERS_IMU_H_
16#include <zephyr/kernel.h>
17#include <zephyr/device.h>
71 int (*
data_wait)(
const struct device *dev, k_timeout_t timeout);
73 uint16_t max_samples);
74#if defined(CONFIG_INFUSE_IMU_SELF_TEST) || defined(__DOXYGEN__)
95 return api->
configure(dev, config, output);
107static inline int imu_data_wait(
const struct device *dev, k_timeout_t timeout)
127 uint16_t max_samples)
131 return api->
data_read(dev, samples, max_samples);
134#if defined(CONFIG_INFUSE_IMU_SELF_TEST) || defined(__DOXYGEN__)
163 switch (full_scale) {
203 if (period_us == 0) {
206 return 1000000 / period_us;
265 const struct imu_sample *input, uint16_t num_input);
int imu_linear_downsample_scaled(struct imu_linear_downsample_scaled_state *state, const struct imu_sample *input, uint16_t num_input)
Downsample IMU samples to a new frequency using linear interpolation.
static uint16_t imu_sample_rate(const struct imu_sensor_meta *meta)
Get the approximate sample rate of a buffer.
Definition imu.h:199
static int imu_self_test(const struct device *dev)
Run self-test functionality on the IMU.
Definition imu.h:143
static k_ticks_t imu_sample_timestamp(const struct imu_sensor_meta *meta, uint8_t sample)
Get the local tick counter of a given sample in a buffer.
Definition imu.h:217
static int16_t imu_accelerometer_1g(uint8_t full_scale)
Convert a full scale range to an expected value for 1G.
Definition imu.h:161
static uint32_t imu_sample_period(const struct imu_sensor_meta *meta)
Get the local ticks between samples in a buffer.
Definition imu.h:184
static int imu_configure(const struct device *dev, const struct imu_config *config, struct imu_config_output *output)
Configure IMU for operation.
Definition imu.h:90
static int imu_data_wait(const struct device *dev, k_timeout_t timeout)
Wait for FIFO interrupt from IMU.
Definition imu.h:107
static int imu_data_read(const struct device *dev, struct imu_sample_array *samples, uint16_t max_samples)
Read samples from IMU.
Definition imu.h:126
Configured IMU value.
Definition imu.h:57
uint32_t accelerometer_period_us
Expected period between accelerometer samples.
Definition imu.h:59
uint32_t gyroscope_period_us
Expected period between gyroscope samples.
Definition imu.h:61
uint32_t expected_interrupt_period_us
Expected period FIFO interrupts.
Definition imu.h:65
uint32_t magnetometer_period_us
Expected period between magnetometer samples.
Definition imu.h:63
IMU configuration struct.
Definition imu.h:32
struct imu_config::@002066230011174142061264175250353301144202043330 accelerometer
uint16_t sample_rate_hz
Sample rate in Hertz.
Definition imu.h:35
struct imu_config::@012327065131013340056006222315027114333325114165 magnetometer
uint8_t full_scale_range
Full scale range in G.
Definition imu.h:37
uint16_t fifo_sample_buffer
Requested number of samples to buffer in FIFO before raising interrupt.
Definition imu.h:53
struct imu_config::@337212207024143026276102347134057053356067255150 gyroscope
bool low_power
True for low power mode, false for performance.
Definition imu.h:39
State for imu_linear_downsample_scaled.
Definition imu.h:226
uint8_t freq_mult
Multiplier applied to input frequency.
Definition imu.h:242
int16_t scale
Output is scaled as (integer_val/scale)
Definition imu.h:240
uint8_t freq_div
Divider applied to (input_frequency * freq_mult)
Definition imu.h:244
uint16_t output_offset
Current number of samples written to output.
Definition imu.h:238
uint16_t output_size
Size of the axis output arrays.
Definition imu.h:236
uint8_t subsample_idx
Private.
Definition imu.h:246
float * output_z
Buffer storage for Z axis output.
Definition imu.h:234
struct imu_sample last_sample
Private.
Definition imu.h:228
float * output_x
Buffer storage for X axis output.
Definition imu.h:230
float * output_y
Buffer storage for Y axis output.
Definition imu.h:232
FIFO read structure.
Definition data_types.h:52
IMU sample struct.
Definition data_types.h:28
int(* self_test)(const struct device *dev)
Definition imu.h:75
int(* data_read)(const struct device *dev, struct imu_sample_array *samples, uint16_t max_samples)
Definition imu.h:72
int(* configure)(const struct device *dev, const struct imu_config *config, struct imu_config_output *output)
Definition imu.h:69
int(* data_wait)(const struct device *dev, k_timeout_t timeout)
Definition imu.h:71