22 #define cmd_VGplus (((((('V' << 8) | 'G') << 8) | '+') << 8) | ' ') // "VG+ " = enable angular velocity packet transmission 23 #define cmd_VGminus (((((('V' << 8) | 'G') << 8) | '-') << 8) | ' ') // "VG- " = disable angular velocity packet transmission 24 #define cmd_DBplus (((((('D' << 8) | 'B') << 8) | '+') << 8) | ' ') // "DB+ " = enable debug packet transmission 25 #define cmd_DBminus (((((('D' << 8) | 'B') << 8) | '-') << 8) | ' ') // "DB- " = disable debug packet transmission 26 #define cmd_Q3 (((((('Q' << 8) | '3') << 8) | ' ') << 8) | ' ') // "Q3 " = transmit 3-axis accelerometer quaternion in standard packet 27 #define cmd_Q3M (((((('Q' << 8) | '3') << 8) | 'M') << 8) | ' ') // "Q3M " = transmit 3-axis magnetic quaternion in standard packet 28 #define cmd_Q3G (((((('Q' << 8) | '3') << 8) | 'G') << 8) | ' ') // "Q3G " = transmit 3-axis gyro quaternion in standard packet 29 #define cmd_Q6MA (((((('Q' << 8) | '6') << 8) | 'M') << 8) | 'A') // "Q6MA" = transmit 6-axis mag/accel quaternion in standard packet 30 #define cmd_Q6AG (((((('Q' << 8) | '6') << 8) | 'A') << 8) | 'G') // "Q6AG" = transmit 6-axis accel/gyro quaternion in standard packet 31 #define cmd_Q9 (((((('Q' << 8) | '9') << 8) | ' ') << 8) | ' ') // "Q9 " = transmit 9-axis quaternion in standard packet (default) 32 #define cmd_RPCplus (((((('R' << 8) | 'P') << 8) | 'C') << 8) | '+') // "RPC+" = Roll/Pitch/Compass on 33 #define cmd_RPCminus (((((('R' << 8) | 'P') << 8) | 'C') << 8) | '-') // "RPC-" = Roll/Pitch/Compass off 34 #define cmd_ALTplus (((((('A' << 8) | 'L') << 8) | 'T') << 8) | '+') // "ALT+" = Altitude packet on 35 #define cmd_ALTminus (((((('A' << 8) | 'L') << 8) | 'T') << 8) | '-') // "ALT-" = Altitude packet off 36 #define cmd_RST (((((('R' << 8) | 'S') << 8) | 'T') << 8) | ' ') // "RST " = Soft reset 37 #define cmd_RINS (((((('R' << 8) | 'I') << 8) | 'N') << 8) | 'S') // "RINS" = Reset INS inertial navigation velocity and position 38 #define cmd_SVAC (((((('S' << 8) | 'V') << 8) | 'A') << 8) | 'C') // "SVAC" = save all calibrations to Kinetis flash 39 #define cmd_SVMC (((((('S' << 8) | 'V') << 8) | 'M') << 8) | 'C') // "SVMC" = save magnetic calibration to Kinetis flash 40 #define cmd_SVYC (((((('S' << 8) | 'V') << 8) | 'Y') << 8) | 'C') // "SVYC" = save gyroscope calibration to Kinetis flash 41 #define cmd_SVGC (((((('S' << 8) | 'V') << 8) | 'G') << 8) | 'C') // "SVGC" = save precision accelerometer calibration to Kinetis flash 42 #define cmd_ERAC (((((('E' << 8) | 'R') << 8) | 'A') << 8) | 'C') // "ERAC" = erase all calibrations from Kinetis flash 43 #define cmd_ERMC (((((('E' << 8) | 'R') << 8) | 'M') << 8) | 'C') // "ERMC" = erase magnetic calibration from Kinetis flash 44 #define cmd_ERYC (((((('E' << 8) | 'R') << 8) | 'Y') << 8) | 'C') // "ERYC" = erase gyro offset calibration from Kinetis flash 45 #define cmd_ERGC (((((('E' << 8) | 'R') << 8) | 'G') << 8) | 'C') // "ERGC" = erase precision accelerometer calibration from Kinetis flash 46 #define cmd_180X (((((('1' << 8) | '8') << 8) | '0') << 8) | 'X') // "180X" perturbation 47 #define cmd_180Y (((((('1' << 8) | '8') << 8) | '0') << 8) | 'Y') // "180Y" perturbation 48 #define cmd_180Z (((((('1' << 8) | '8') << 8) | '0') << 8) | 'Z') // "180Z" perturbation 49 #define cmd_M90X (((((('M' << 8) | '9') << 8) | '0') << 8) | 'X') // "M90X" perturbation 50 #define cmd_P90X (((((('P' << 8) | '9') << 8) | '0') << 8) | 'X') // "P90X" perturbation 51 #define cmd_M90Y (((((('M' << 8) | '9') << 8) | '0') << 8) | 'Y') // "M90Y" perturbation 52 #define cmd_P90Y (((((('P' << 8) | '9') << 8) | '0') << 8) | 'Y') // "P90Y" perturbation 53 #define cmd_M90Z (((((('M' << 8) | '9') << 8) | '0') << 8) | 'Z') // "M90Z" perturbation 54 #define cmd_P90Z (((((('P' << 8) | '9') << 8) | '0') << 8) | 'Z') // "P90Z" perturbation 55 #define cmd_PA00 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '0') // "PA00" average precision accelerometer location 0 56 #define cmd_PA01 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '1') // "PA01" average precision accelerometer location 1 57 #define cmd_PA02 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '2') // "PA02" average precision accelerometer location 2 58 #define cmd_PA03 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '3') // "PA03" average precision accelerometer location 3 59 #define cmd_PA04 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '4') // "PA04" average precision accelerometer location 4 60 #define cmd_PA05 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '5') // "PA05" average precision accelerometer location 5 61 #define cmd_PA06 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '6') // "PA06" average precision accelerometer location 6 62 #define cmd_PA07 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '7') // "PA07" average precision accelerometer location 7 63 #define cmd_PA08 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '8') // "PA08" average precision accelerometer location 8 64 #define cmd_PA09 (((((('P' << 8) | 'A') << 8) | '0') << 8) | '9') // "PA09" average precision accelerometer location 9 65 #define cmd_PA10 (((((('P' << 8) | 'A') << 8) | '1') << 8) | '0') // "PA10" average precision accelerometer location 10 66 #define cmd_PA11 (((((('P' << 8) | 'A') << 8) | '1') << 8) | '1') // "PA11" average precision accelerometer location 11 74 for (i = 0; i < nbytes; i++) {
76 for (j = 0; j < 3; j++)
77 iCommandBuffer[j] = iCommandBuffer[j + 1];
78 iCommandBuffer[3] = sUART_InputBuffer[i];
81 isum = ((((((
int32)iCommandBuffer[0] << 8) | iCommandBuffer[1]) << 8) | iCommandBuffer[2]) << 8) | iCommandBuffer[3];
85 iCommandBuffer[3] =
'~';
90 iCommandBuffer[3] =
'~';
95 iCommandBuffer[3] =
'~';
100 iCommandBuffer[3] =
'~';
107 iCommandBuffer[3] =
'~';
114 iCommandBuffer[3] =
'~';
121 iCommandBuffer[3] =
'~';
128 iCommandBuffer[3] =
'~';
135 iCommandBuffer[3] =
'~';
139 #if F_9DOF_GBY_KALMAN 142 iCommandBuffer[3] =
'~';
147 iCommandBuffer[3] =
'~';
152 iCommandBuffer[3] =
'~';
157 iCommandBuffer[3] =
'~';
162 iCommandBuffer[3] =
'~';
177 iCommandBuffer[3] =
'~';
181 #if F_9DOF_GBY_KALMAN 182 for (i =
CHX; i <=
CHZ; i++) {
183 sfg->SV_9DOF_GBY_KALMAN.fVelGl[i] = 0.0F;
184 sfg->SV_9DOF_GBY_KALMAN.fDisGl[i] = 0.0F;
187 iCommandBuffer[3] =
'~';
194 iCommandBuffer[3] =
'~';
199 iCommandBuffer[3] =
'~';
204 iCommandBuffer[3] =
'~';
209 iCommandBuffer[3] =
'~';
216 iCommandBuffer[3] =
'~';
221 iCommandBuffer[3] =
'~';
226 iCommandBuffer[3] =
'~';
231 iCommandBuffer[3] =
'~';
236 iCommandBuffer[3] =
'~';
241 iCommandBuffer[3] =
'~';
246 iCommandBuffer[3] =
'~';
251 iCommandBuffer[3] =
'~';
256 iCommandBuffer[3] =
'~';
261 iCommandBuffer[3] =
'~';
266 iCommandBuffer[3] =
'~';
271 iCommandBuffer[3] =
'~';
276 iCommandBuffer[3] =
'~';
281 sfg->AccelBuffer.iStoreLocation = 0;
283 iCommandBuffer[3] =
'~';
287 sfg->AccelBuffer.iStoreLocation = 1;
289 iCommandBuffer[3] =
'~';
293 sfg->AccelBuffer.iStoreLocation = 2;
295 iCommandBuffer[3] =
'~';
299 sfg->AccelBuffer.iStoreLocation = 3;
301 iCommandBuffer[3] =
'~';
305 sfg->AccelBuffer.iStoreLocation = 4;
307 iCommandBuffer[3] =
'~';
311 sfg->AccelBuffer.iStoreLocation = 5;
313 iCommandBuffer[3] =
'~';
317 sfg->AccelBuffer.iStoreLocation = 6;
319 iCommandBuffer[3] =
'~';
323 sfg->AccelBuffer.iStoreLocation = 7;
325 iCommandBuffer[3] =
'~';
329 sfg->AccelBuffer.iStoreLocation = 8;
331 iCommandBuffer[3] =
'~';
335 sfg->AccelBuffer.iStoreLocation = 9;
337 iCommandBuffer[3] =
'~';
341 sfg->AccelBuffer.iStoreLocation = 10;
343 iCommandBuffer[3] =
'~';
347 sfg->AccelBuffer.iStoreLocation = 11;
349 iCommandBuffer[3] =
'~';
351 #endif // precision accelerometer calibration
volatile uint8_t RPCPacketOn
flag to enable roll, pitch, compass packet
volatile uint8_t iPerturbation
test perturbation to be applied
volatile uint8_t AngularVelocityPacketOn
flag to enable angular velocity packet
#define ACCEL_CAL_AVERAGING_SECS
calibration constants
#define CHZ
Used to access Z-channel entries in various data data structures.
void EraseAccelCalibrationFromNVM(void)
Quaternion derived from 3-axis accel + 3 axis mag (eCompass)
Defines control sub-system.
void SaveGyroCalibrationToNVM(SensorFusionGlobals *sfg)
The top level fusion structure.
volatile uint8_t DebugPacketOn
flag to enable debug packet
void fInitializeAccelCalibration(struct AccelCalibration *pthisAccelCal, struct AccelBuffer *pthisAccelBuffer, volatile int8 *AccelCalPacketOn)
Initialize the accelerometer calibration functions.
Quaternion derived from 3-axis accel (tilt)
Quaternion derived from 3-axis mag only (auto compass algorithm)
volatile quaternion_type QuaternionPacketType
quaternion type transmitted over UART
struct MagCalibration MagCal
mag cal storage
struct MagBuffer MagBuffer
mag cal constellation points
Quaternion derived from full 9-axis sensor fusion.
void DecodeCommandBytes(SensorFusionGlobals *sfg, char iCommandBuffer[], uint8 sUART_InputBuffer[], uint16 nbytes)
The sensor_fusion.h file implements the top level programming interface.
void SaveMagCalibrationToNVM(SensorFusionGlobals *sfg)
void EraseMagCalibrationFromNVM(void)
volatile uint8_t AltPacketOn
flag to enable altitude packet
void fInitializeMagCalibration(struct MagCalibration *pthisMagCal, struct MagBuffer *pthisMagBuffer)
#define FUSION_HZ
(int) actual rate of fusion algorithm execution and sensor FIFO reads
struct ControlSubsystem * pControlSubsystem
Quaternion derived from 3-axis gyro only (rotation)
#define CHX
Used to access X-channel entries in various data data structures.
void fInitializeFusion(SensorFusionGlobals *sfg)
Quaternion derived from 3-axis accel + 3-axis gyro (gaming)
void SaveAccelCalibrationToNVM(SensorFusionGlobals *sfg)
void EraseGyroCalibrationFromNVM(void)
Provides functions to store calibration to NVM.
Lower level sensor fusion interface.
volatile int8_t AccelCalPacketOn
variable used to coordinate accelerometer calibration