#pragma once #ifndef ICM20948_H #define ICM20948_H #include "IIMU.h" #define ACCEL_FCHOICE_OFF 0 #define ACCEL_FCHOICE_ON 1 #define ACCEL_FS_SEL_2 0<<1 #define ACCEL_FS_SEL_4 1<<1 #define ACCEL_FS_SEL_8 2<<1 #define ACCEL_FS_SEL_16 3<<1 #define ACCEL_DLPFCFG_265 0<<3 #define ACCEL_DLPFCFG_136 2<<3 #define ACCEL_DLPFCFG_69 3<<3 #define ACCEL_DLPFCFG_34 4<<3 #define ACCEL_DLPFCFG_17 5<<3 #define ACCEL_DLPFCFG_8 6<<3 #define ACCEL_DLPFCFG_500 7<<3 #define GYRO_FCHOICE_OFF 0 #define GYRO_FCHOICE_ON 1 #define GYRO_FS_SEL_250 0<<1 #define GYRO_FS_SEL_500 1<<1 #define GYRO_FS_SEL_1000 2<<1 #define GYRO_FS_SEL_2000 3<<1 #define GYRO_DLPFCFG_230 0<<3 #define GYRO_DLPFCFG_188 1<<3 #define GYRO_DLPFCFG_154 2<<3 #define GYRO_DLPFCFG_73 3<<3 #define GYRO_DLPFCFG_36 4<<3 #define GYRO_DLPFCFG_18 5<<3 #define GYRO_DLPFCFG_9 6<<3 #define GYRO_DLPFCFG_377 7<<3 #define MAG_DATARATE_10_HZ 0x02 #define MAG_DATARATE_20_HZ 0x04 #define MAG_DATARATE_50_HZ 0x06 #define MAG_DATARATE_100_HZ 0x08 class ICM20948 : IIMU { public: ICM20948(){}; ~ICM20948(){}; unsigned char IMU_Addr = 0x68; unsigned char IMU_Read_Reg = 0x2D; void Init(); void IMU_SetBank(unsigned char Bank); void Get(IMU_Data& Data); void GetAsync(const IMU_Proc& DoneProc); }; #endif