4 #ifndef __M5_IMU_CLASS_H__
5 #define __M5_IMU_CLASS_H__
100 bool getAccel(
float* ax,
float* ay,
float* az);
101 bool getGyro(
float* gx,
float* gy,
float* gz);
102 bool getMag(
float* mx,
float* my,
float* mz);
121 void setCalibration(uint8_t accel_strength, uint8_t gyro_strength, uint8_t mag_strength);
141 struct offset_point_t
182 inline void setValue16(
size_t index, int16_t val) {
value[index] = val << 16; }
183 inline int32_t
getValue16(
size_t index)
const {
return value[index] >> 16; }
184 } __attribute__((__packed__));
186 struct imu_offset_data_t
190 offset_point_t sensor[3];
193 offset_point_t
accel;
200 void _update_convert_param(
void);
201 void _update_axis_order(
void);
202 void _proc_calibration(
void);
205 uint32_t _latest_micros;
208 std::unique_ptr<IMU_Base> _imu_instance[2];
211 IMU_Base::imu_convert_param_t _convert_param;
214 IMU_Base::imu_raw_data_t _raw_data;
217 imu_offset_data_t _offset_data;
223 uint32_t _moving_micros;
226 uint8_t _assign_axis_x;
227 uint8_t _assign_axis_y;
228 uint8_t _assign_axis_z;
237 uint32_t _axis_order_3bit_x9;
239 enum internal_axisorder_t : uint8_t
244 axis_order_shift = 3,
245 axis_order_xyz = 0 << axis_order_shift,
246 axis_order_xzy = 1 << axis_order_shift,
247 axis_order_yxz = 2 << axis_order_shift,
248 axis_order_yzx = 3 << axis_order_shift,
249 axis_order_zxy = 4 << axis_order_shift,
250 axis_order_zyx = 5 << axis_order_shift,
254 internal_axisorder_t _internal_axisorder_fixed[3] = { (internal_axisorder_t)0, (internal_axisorder_t)0, (internal_axisorder_t)0 };
257 internal_axisorder_t _internal_axisorder_user = (internal_axisorder_t)0;
int32_t getValue16(size_t index) const
std::uint_fast8_t updateStillness(const IMU_Base::point3d_i16_t &dst)
void setValue16(size_t index, int16_t val)
bool getMag(float *mx, float *my, float *mz)
bool getGyroMag(float *mx, float *my, float *mz)
bool begin(I2C_Class *i2c=nullptr, board_t board=board_t::board_unknown)
bool setAxisOrderRightHanded(axis_t axis0, axis_t axis1)
bool saveOffsetToNVS(void)
bool isEnabled(void) const
bool getGyroData(float *gx, float *gy, float *gz)
int16_t getRawData(size_t index)
sensor_mask_t update(void)
bool loadOffsetFromNVS(void)
bool init(I2C_Class *i2c=nullptr)
bool setAxisOrderLeftHanded(axis_t axis0, axis_t axis1)
bool getAccelData(float *ax, float *ay, float *az)
void clearOffsetData(void)
void setCalibration(uint8_t accel_strength, uint8_t gyro_strength, uint8_t mag_strength)
bool getGyro(float *gx, float *gy, float *gz)
bool setINTPinActiveLogic(bool level)
bool getAccel(float *ax, float *ay, float *az)
const imu_data_t & getImuData(void)
void setOffsetData(size_t index, int32_t value)
bool setAxisOrder(axis_t axis0, axis_t axis1, axis_t axis2)
imu_t getType(void) const
int32_t getOffsetData(size_t index)
IMU_Class::imu_3d_t imu_3d_t
IMU_Class::imu_data_t imu_data_t