blob: 499cf3d0801554d136ea0ed0811f648dfc5ad15f [file] [log] [blame]
/*
* 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 <stdint.h>
#include <zephyr/drivers/sensor.h>
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 enum sensor_channel *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_ */