Реализован уровень обработки данных драйвера IMU
This commit is contained in:
@@ -3,7 +3,64 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user