Subversion Repositories NaviCtrl

Rev

Rev 493 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#ifndef _COMPASS_H
#define _COMPASS_H

// this is the abstract interface for the magnetometer/compass sensor
// below this there are different special sensors that are supported

typedef struct
{
  s16 X;
  s16 Y;
  s16 Z;
} __attribute__((packed)) s16vec_t;

extern volatile s16vec_t MagVector;       // current magnetic field vector
extern volatile s16vec_t AccVector;       // current acceleration vector of compass, not supported by any HW version
extern volatile s16vec_t MagVectorHorizontal; // vector componenents in horizontal projection
extern volatile s16 Compass_Heading;  // current heading direction
extern volatile u8  Compass_CalState; // current calibration state
extern s32 EarthMagneticField;
extern s32 EarthMagneticFieldFiltered;
extern s32 EarthMagneticInclination;
extern s32 EarthMagneticInclinationFiltered;
extern s32 EarthMagneticInclinationTheoretic;
extern u8  ErrorDisturbedEarthMagnetField;
extern s16 EarthMagneticStrengthTheoretic;

#define COMPASS_NONE    0
#define COMPASS_MK3MAG  1
#define COMPASS_NCMAG   2
extern u8 Compass_Device;
extern I2C_TypeDef* Compass_I2CPort;
extern u32 CompassValueErrorCount;

void Compass_Init(void);        // initialization for compass sensor
void Compass_Check(void);       // possible check for compass plausibility, called when FC gets calibrates
void Compass_Update(void);      // updates sensor values, cyclic called
void Compass_CalcHeading(void); // calculates heading from magent vector componentes
void Compass_SetCalState(u8 CalState);  // append to CalState queue
void Compass_UpdateCalState(void);              // process CalState queue

#endif  //  _COMPASS_H