/* * Copyright (c) 2023 Google LLC * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_SENSOR_ICM42688_DECODER_H_ #define ZEPHYR_DRIVERS_SENSOR_ICM42688_DECODER_H_ #include #include struct icm42688_decoder_header { uint64_t timestamp; uint8_t is_fifo: 1; uint8_t gyro_fs: 3; uint8_t accel_fs: 2; uint8_t reserved: 2; } __attribute__((__packed__)); struct icm42688_fifo_data { struct icm42688_decoder_header header; uint8_t int_status; uint16_t gyro_odr: 4; uint16_t accel_odr: 4; uint16_t fifo_count: 11; uint16_t reserved: 5; } __attribute__((__packed__)); struct icm42688_encoded_data { struct icm42688_decoder_header header; struct { uint8_t channels: 7; uint8_t reserved: 1; } __attribute__((__packed__)); int16_t readings[7]; }; int icm42688_encode(const struct device *dev, const struct sensor_chan_spec *const channels, const size_t num_channels, uint8_t *buf); int icm42688_get_decoder(const struct device *dev, const struct sensor_decoder_api **decoder); #endif /* ZEPHYR_DRIVERS_SENSOR_ICM42688_DECODER_H_ */