imsensors/include/imsensors/imu/imu_lsm6dsl.h

71 lines
2.5 KiB
C

#ifndef IMS_IMU_LSM6DSL_H
#define IMS_IMU_LSM6DSL_H
#include "imsensors/common/sensors_common.h"
typedef enum {
IMS_LSM6DSL_XL_ODR_POWER_DOWN = 0x00U, /* Power Down */
IMS_LSM6DSL_XL_ODR_1_6_HZ = 0x0BU | (1U << 4U), /* 1.6Hz, low power mode only */
IMS_LSM6DSL_XL_ODR_12_5_HZ = 0x01U, /* 12.5Hz */
IMS_LSM6DSL_XL_ODR_26_HZ = 0x02U, /* 26Hz */
IMS_LSM6DSL_XL_ODR_52_HZ = 0x03U, /* 52Hz */
IMS_LSM6DSL_XL_ODR_104_HZ = 0x04U, /* 104Hz */
IMS_LSM6DSL_XL_ODR_208_HZ = 0x05U, /* 208Hz */
IMS_LSM6DSL_XL_ODR_416_HZ = 0x06U, /* 416Hz */
IMS_LSM6DSL_XL_ODR_833_HZ = 0x07U, /* 833Hz */
IMS_LSM6DSL_XL_ODR_1_66_KHZ = 0x08U, /* 1.66kHz */
IMS_LSM6DSL_XL_ODR_3_33_KHZ = 0x09U, /* 3.3kHz */
IMS_LSM6DSL_XL_ODR_6_66_KHZ = 0x0AU, /* 6.66kHz */
} ims_lsm6dsl_xl_odr_t;
typedef enum {
IMS_LSM6DSL_GYRO_ODR_POWER_DOWN = 0x00U, /* Power down */
IMS_LSM6DSL_GYRO_ODR_12_5_HZ = 0x01U, /* 12.5Hz */
IMS_LSM6DSL_GYRO_ODR_26_HZ = 0x02U, /* 26Hz */
IMS_LSM6DSL_GYRO_ODR_52_HZ = 0x03U, /* 52Hz */
IMS_LSM6DSL_GYRO_ODR_104_HZ = 0x04U, /* 104Hz */
IMS_LSM6DSL_GYRO_ODR_208_HZ = 0x05U, /* 208Hz */
IMS_LSM6DSL_GYRO_ODR_416_HZ = 0x06U, /* 416Hz */
IMS_LSM6DSL_GYRO_ODR_833_HZ = 0x07U, /* 833Hz */
IMS_LSM6DSL_GYRO_ODR_1_66_KHZ = 0x08U, /* 1.66kHz */
IMS_LSM6DSL_GYRO_ODR_3_33_KHZ = 0x09U, /* 3.33kHz */
IMS_LSM6DSL_GYRO_ODR_6_66_KHZ = 0x0AU, /* 6.66kHz */
} ims_lsm6dsl_gyro_odr_t;
typedef enum {
IMS_LSM6DSL_XL_LPF_BW_0 = 0x00U,
IMS_LSM6DSL_XL_LPF_BW_1 = 0x01U,
IMS_LSM6DSL_XL_LPF_BW_2 = 0x02U,
IMS_LSM6DSL_XL_LPF_BW_3 = 0x03U,
} ims_lsm6dsl_xl_lpf_config_t;
typedef struct {
ims_lsm6dsl_xl_odr_t odr;
ims_lsm6dsl_xl_lpf_config_t lpf_config;
} ims_lsm6dsl_xl_config_t;
typedef struct {
ims_lsm6dsl_gyro_odr_t odr;
} ims_lsm6dsl_gyro_config_t;
typedef struct {
ims_lsm6dsl_xl_config_t xl_config;
ims_lsm6dsl_gyro_config_t gyro_config;
} ims_lsm6dsl_config_t;
typedef struct {
ims_i2c_xfer_t i2c_xfer;
ims_delay_t delay;
} ims_lsm6dsl_cb_t;
typedef struct {
void *pdev;
ims_lsm6dsl_cb_t cb;
} ims_lsm6dsl_t;
ims_ret_t ims_lsm6dsl_init(ims_lsm6dsl_t *imu);
ims_ret_t ims_lsm6dsl_config(ims_lsm6dsl_t *imu, ims_lsm6dsl_config_t *config);
ims_ret_t ims_lsm6dsl_read_temperature(ims_lsm6dsl_t *imu, int16_t *temp);
#endif // IMS_IMU_LSM6DSL_H