| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #pragma once
- #include <furi.h>
- #include <furi_hal.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef enum {
- DataRate32kHz = 0x01,
- DataRate16kHz = 0x02,
- DataRate8kHz = 0x03,
- DataRate4kHz = 0x04,
- DataRate2kHz = 0x05,
- DataRate1kHz = 0x06,
- DataRate200Hz = 0x07,
- DataRate100Hz = 0x08,
- DataRate50Hz = 0x09,
- DataRate25Hz = 0x0A,
- DataRate12_5Hz = 0x0B,
- DataRate6_25Hz = 0x0C, // Accelerometer only
- DataRate3_125Hz = 0x0D, // Accelerometer only
- DataRate1_5625Hz = 0x0E, // Accelerometer only
- DataRate500Hz = 0x0F,
- } ICM42688PDataRate;
- typedef enum {
- AccelFullScale16G = 0,
- AccelFullScale8G,
- AccelFullScale4G,
- AccelFullScale2G,
- AccelFullScaleTotal,
- } ICM42688PAccelFullScale;
- typedef enum {
- GyroFullScale2000DPS = 0,
- GyroFullScale1000DPS,
- GyroFullScale500DPS,
- GyroFullScale250DPS,
- GyroFullScale125DPS,
- GyroFullScale62_5DPS,
- GyroFullScale31_25DPS,
- GyroFullScale15_625DPS,
- GyroFullScaleTotal,
- } ICM42688PGyroFullScale;
- typedef struct {
- int16_t x;
- int16_t y;
- int16_t z;
- } __attribute__((packed)) ICM42688PRawData;
- typedef struct {
- uint8_t header;
- int16_t a_x;
- int16_t a_y;
- int16_t a_z;
- int16_t g_x;
- int16_t g_y;
- int16_t g_z;
- uint8_t temp;
- uint16_t ts;
- } __attribute__((packed)) ICM42688PFifoPacket;
- typedef struct {
- float x;
- float y;
- float z;
- } ICM42688PScaledData;
- typedef struct ICM42688P ICM42688P;
- typedef void (*ICM42688PIrqCallback)(void* ctx);
- ICM42688P* icm42688p_alloc(const FuriHalSpiBusHandle* spi_bus, const GpioPin* irq_pin);
- bool icm42688p_init(ICM42688P* icm42688p);
- bool icm42688p_deinit(ICM42688P* icm42688p);
- void icm42688p_free(ICM42688P* icm42688p);
- bool icm42688p_accel_config(
- ICM42688P* icm42688p,
- ICM42688PAccelFullScale full_scale,
- ICM42688PDataRate rate);
- float icm42688p_accel_get_full_scale(ICM42688P* icm42688p);
- bool icm42688p_gyro_config(
- ICM42688P* icm42688p,
- ICM42688PGyroFullScale full_scale,
- ICM42688PDataRate rate);
- float icm42688p_gyro_get_full_scale(ICM42688P* icm42688p);
- bool icm42688p_read_accel_raw(ICM42688P* icm42688p, ICM42688PRawData* data);
- bool icm42688p_read_gyro_raw(ICM42688P* icm42688p, ICM42688PRawData* data);
- bool icm42688p_write_gyro_offset(ICM42688P* icm42688p, ICM42688PScaledData* scaled_data);
- void icm42688p_apply_scale(ICM42688PRawData* raw_data, float full_scale, ICM42688PScaledData* data);
- void icm42688p_apply_scale_fifo(
- ICM42688P* icm42688p,
- ICM42688PFifoPacket* fifo_data,
- ICM42688PScaledData* accel_data,
- ICM42688PScaledData* gyro_data);
- float icm42688p_read_temp(ICM42688P* icm42688p);
- void icm42688_fifo_enable(
- ICM42688P* icm42688p,
- ICM42688PIrqCallback irq_callback,
- void* irq_context);
- void icm42688_fifo_disable(ICM42688P* icm42688p);
- uint16_t icm42688_fifo_get_count(ICM42688P* icm42688p);
- bool icm42688_fifo_read(ICM42688P* icm42688p, ICM42688PFifoPacket* data);
- #ifdef __cplusplus
- }
- #endif
|