Files
WAVE_ROVER/IMU.h
T
2026-04-24 00:31:47 +02:00

54 lines
1.5 KiB
C

#ifndef _IMU_H_
#define _IMU_H_
#include "AK09918.h"
#include "QMI8658.h"
#include <stdio.h>
#include <math.h>
typedef struct imu_st_angles_data_tag
{
float fYaw;
float fPitch;
float fRoll;
}IMU_ST_ANGLES_DATA;
typedef struct imu_st_sensor_data_float
{
float X;
float Y;
float Z;
}IMU_ST_SENSOR_DATA_FLOAT;
void imuInit();
void imuDataGet(EulerAngles *pstAngles,
IMU_ST_SENSOR_DATA_FLOAT *pstGyroRawData,
IMU_ST_SENSOR_DATA_FLOAT *pstAccelRawData,
IMU_ST_SENSOR_DATA *pstMagnRawData);
bool imuRecalibrate();
void imuGetMagnOffsets(IMU_ST_SENSOR_DATA *pstMagnOffset);
void imuSetMagnOffsets(int16_t offsetX, int16_t offsetY, int16_t offsetZ);
bool imuHasHeadingCalibration();
bool imuHasStoredMagnCalibration();
bool imuIsMagnCalibrationRunning();
uint8_t imuGetMagnCalibrationProgress();
bool imuStartMagnCalibration(uint32_t durationMs = 12000);
bool imuLoadMagnCalibration();
bool imuSaveMagnCalibration();
float imuGetTemperature();
void imuAHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz);
float invSqrt(float x);
void imuSetMagneticDeclination(float deg);
float imuGetMagneticDeclination();
void imuSetHeadingOffset(float deg);
float imuGetHeadingOffset();
int8_t imuPopLastCalStatus();
const char *imuGetMagnetometerSource();
const char *imuGetMagnetometerStatus();
bool imuHasLiveMagnetometer();
uint8_t imuGetMagnetometerAddress();
uint8_t imuGetMagnetometerWia2();
uint32_t imuGetMagnetometerSampleCount();
#endif