66 lines
1.2 KiB
C++
66 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#ifndef IIMU_H
|
|
#define IIMU_H
|
|
|
|
#pragma pack(push, 1)
|
|
struct IMU_Data
|
|
{
|
|
long Temp;
|
|
struct { float X, Y, Z; } Acc;
|
|
struct { float X, Y, Z; } RawAcc;
|
|
struct { float X, Y, Z; } Gyr;
|
|
struct { float X, Y, Z; } RawGyr;
|
|
struct { float X, Y, Z; } Mag;
|
|
struct { float X, Y, Z; } RawMag;
|
|
};
|
|
|
|
struct XYZ_Calib
|
|
{
|
|
short X[2] = {-4096, 4096};
|
|
short Y[2] = {-4096, 4096};
|
|
short Z[2] = {-4096, 4096};
|
|
};
|
|
|
|
struct XYZ_IMU_DATA
|
|
{
|
|
char Writed = sizeof(XYZ_IMU_DATA);
|
|
XYZ_Calib Acc;
|
|
};
|
|
|
|
struct IMU_Calib_Data
|
|
{
|
|
bool AllowedCalib = false;
|
|
bool AccCalibNeed = true;
|
|
XYZ_IMU_DATA Data;
|
|
};
|
|
|
|
struct IMU_Info
|
|
{
|
|
unsigned char Addrs[1] = {0x68};
|
|
unsigned char WhoIAMReg[1] = {0x00};
|
|
unsigned char ExpectedIDs[1] = {0xEA};
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
typedef void (*IMU_Proc)(IMU_Data&);
|
|
|
|
extern IMU_Calib_Data CalibDataIMU;
|
|
|
|
void IMU_SetReg(unsigned char Addr, unsigned char Reg, unsigned char Value);
|
|
|
|
unsigned char IMU_GetReg(unsigned char Addr, unsigned char Reg);
|
|
|
|
class IIMU
|
|
{
|
|
protected:
|
|
virtual ~IIMU() = default;
|
|
public:
|
|
virtual void Init() = 0;
|
|
virtual void Get(IMU_Data& Data) = 0;
|
|
virtual void GetAsync(const IMU_Proc& DoneProc) = 0;
|
|
};
|
|
|
|
IIMU* TryFindIMU(bool& find);
|
|
|
|
#endif |