16 #define MAXPACKETRATEHZ 40 17 #define RATERESOLUTION 1000 38 uint16_t iBytesToCopy)
43 for (i = 0; i < iBytesToCopy; i++)
49 pDest[(*pIndex)++] = 0x7D;
50 pDest[(*pIndex)++] = 0x5E;
55 pDest[(*pIndex)++] = 0x7D;
56 pDest[(*pIndex)++] = 0x5D;
61 pDest[(*pIndex)++] = pSource[i];
71 int16_t scratch16 = 0;
73 for (i=0; i<numZeros; i++) {
89 *iPhi = (int16_t) (10.0F * data->
fPhi);
90 *iThe = (int16_t) (10.0F * data->
fThe);
91 *iRho = (int16_t) (10.0F * data->
fRho);
92 *isystick = (uint16_t) (data->
systick / 20);
99 static int32 iThrottle = 0;
126 static uint32_t iTimeStamp = 0;
139 uint8_t AngularVelocityPacketOn,
142 int8_t AccelCalPacketOn;
143 static uint8_t iPacketNumber = 0;
148 #if (MAXPACKETRATEHZ < FUSION_HZ) 150 if (skip_packet)
return;
186 sUARTOutputBuffer[iIndex++] = 0x7E;
197 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &iTimeStamp, 4);
202 switch (quaternionPacketType)
210 scratch32 = (sfg->Accel.iGc[
CHX] * 8192) / sfg->Accel.iCountsPerg;
211 if (scratch32 > 32767) scratch32 = 32767;
212 if (scratch32 < -32768) scratch32 = -32768;
213 scratch16 = (int16_t) (scratch32);
214 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
216 scratch32 = (sfg->Accel.iGc[
CHY] * 8192) / sfg->Accel.iCountsPerg;
217 if (scratch32 > 32767) scratch32 = 32767;
218 if (scratch32 < -32768) scratch32 = -32768;
219 scratch16 = (int16_t) (scratch32);
220 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
222 scratch32 = (sfg->Accel.iGc[
CHZ] * 8192) / sfg->Accel.iCountsPerg;
223 if (scratch32 > 32767) scratch32 = 32767;
224 if (scratch32 < -32768) scratch32 = -32768;
225 scratch16 = (int16_t) (scratch32);
226 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
228 #endif // F_USING_ACCEL 243 switch (quaternionPacketType)
251 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
253 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
255 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
276 switch (quaternionPacketType)
284 scratch16 = (int16_t) ((sfg->Gyro.iYs[
CHX] * 20) / sfg->Gyro.iCountsPerDegPerSec);
285 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
286 scratch16 = (int16_t) ((sfg->Gyro.iYs[
CHY] * 20) / sfg->Gyro.iCountsPerDegPerSec);
287 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
288 scratch16 = (int16_t) ((sfg->Gyro.iYs[
CHZ] * 20) / sfg->Gyro.iCountsPerDegPerSec);
289 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
309 fq.
q1 = fq.
q2 = fq.
q3 = 0.0F;
311 iOmega[
CHX] = iOmega[
CHY] = iOmega[
CHZ] = 0;
312 iPhi = iThe = iRho = iDelta = 0;
327 switch (quaternionPacketType)
334 readCommon((
SV_ptr)&sfg->SV_3DOF_G_BASIC, &fq, &iPhi, &iThe, &iRho, iOmega, &isystick);
343 readCommon((
SV_ptr)&sfg->SV_3DOF_B_BASIC, &fq, &iPhi, &iThe, &iRho, iOmega, &isystick);
352 readCommon((
SV_ptr)&sfg->SV_3DOF_Y_BASIC, &fq, &iPhi, &iThe, &iRho, iOmega, &isystick);
361 iDelta = (int16_t) (10.0F * sfg->SV_6DOF_GB_BASIC.fLPDelta);
362 readCommon((
SV_ptr)&sfg->SV_6DOF_GB_BASIC, &fq, &iPhi, &iThe, &iRho, iOmega, &isystick);
371 readCommon((
SV_ptr)&sfg->SV_6DOF_GY_KALMAN, &fq, &iPhi, &iThe, &iRho, iOmega, &isystick);
375 #if F_9DOF_GBY_KALMAN 380 iDelta = (int16_t) (10.0F * sfg->SV_9DOF_GBY_KALMAN.fDeltaPl);
381 readCommon((
SV_ptr)&sfg->SV_9DOF_GBY_KALMAN, &fq, &iPhi, &iThe, &iRho, iOmega, &isystick);
391 scratch16 = (int16_t) (fq.
q0 * 30000.0F);
392 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
393 scratch16 = (int16_t) (fq.
q1 * 30000.0F);
394 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
395 scratch16 = (int16_t) (fq.
q2 * 30000.0F);
396 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
397 scratch16 = (int16_t) (fq.
q3 * 30000.0F);
398 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
401 #if THISCOORDSYSTEM == ANDROID 404 #elif THISCOORDSYSTEM == WIN8 407 #endif // THISCOORDSYSTEM 417 sUARTOutputBuffer[iIndex++] = 0x7E;
426 sUARTOutputBuffer[iIndex++] = 0x7E;
438 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
441 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &isystick, 2);
444 sUARTOutputBuffer[iIndex++] = 0x7E;
451 if (AngularVelocityPacketOn)
454 sUARTOutputBuffer[iIndex++] = 0x7E;
465 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &iTimeStamp, 4);
473 sUARTOutputBuffer[iIndex++] = 0x7E;
483 sUARTOutputBuffer[iIndex++] = 0x7E;
494 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &iTimeStamp, 4);
502 sUARTOutputBuffer[iIndex++] = 0x7E;
515 sUARTOutputBuffer[iIndex++] = 0x7E;
526 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &iTimeStamp,
530 scratch32 = (
int32_t) (sfg->SV_1DOF_P_BASIC.fLPH * 1000.0F);
531 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch32, 4);
534 scratch16 = (int16_t) (sfg->SV_1DOF_P_BASIC.fLPT * 100.0F);
535 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
538 sUARTOutputBuffer[iIndex++] = 0x7E;
549 static int16_t MagneticPacketID = 0;
553 sUARTOutputBuffer[iIndex++] = 0x7E;
572 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
575 scratch16 = (int16_t) (sfg->
MagCal.
fB * 10.0F);
576 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
579 k = MagneticPacketID - 10;
588 if ((MagneticPacketID >= 10) && (sfg->
MagBuffer.
index[i][j] == -1))
591 scratch16 = -MagneticPacketID;
592 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
597 scratch16 = MagneticPacketID;
598 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
604 switch (MagneticPacketID)
609 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
613 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
617 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
622 scratch16 = (int16_t) (sfg->
MagCal.
fV[
CHX] * 10.0F);
623 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
624 scratch16 = (int16_t) (sfg->
MagCal.
fV[
CHY] * 10.0F);
625 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
626 scratch16 = (int16_t) (sfg->
MagCal.
fV[
CHZ] * 10.0F);
627 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
633 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
635 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
637 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
642 scratch16 = (int16_t) (sfg->
MagCal.
finvW[CHX][CHY] * 1000.0F);
643 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
644 scratch16 = (int16_t) (sfg->
MagCal.
finvW[CHX][CHZ] * 1000.0F);
645 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
646 scratch16 = (int16_t) (sfg->
MagCal.
finvW[CHY][CHZ] * 1000.0F);
647 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
673 if (MagneticPacketID >= (10 + MAGBUFFSIZEX *
MAGBUFFSIZEY))
674 MagneticPacketID = 0;
677 sUARTOutputBuffer[iIndex++] = 0x7E;
690 kalman = six_axis_kalman;
692 #if F_9DOF_GBY_KALMAN 694 kalman = kalman | nine_axis_kalman;
696 #if F_6DOF_GY_KALMAN || F_9DOF_GBY_KALMAN 699 if ((quaternionPacketType ==
Q6AG) || (quaternionPacketType ==
Q9))
702 sUARTOutputBuffer[iIndex++] = 0x7E;
715 for (i =
CHX; i <=
CHZ; i++)
718 if (six_axis_kalman) scratch16 = (int16_t) (sfg->SV_6DOF_GY_KALMAN.fZErr[i] * 30000.0F);
720 #if F_9DOF_GBY_KALMAN 721 if (nine_axis_kalman) scratch16 = (int16_t) (sfg->SV_9DOF_GBY_KALMAN.fZErr[i] * 30000.0F);
723 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16,2);
729 for (i =
CHX; i <=
CHZ; i++)
732 if (six_axis_kalman) scratch16 = (int16_t) (sfg->SV_6DOF_GY_KALMAN.fqgErrPl[i] * 30000.0F);
734 #if F_9DOF_GBY_KALMAN 735 if (nine_axis_kalman) scratch16 = (int16_t) (sfg->SV_9DOF_GBY_KALMAN.fqgErrPl[i] * 30000.0F);
737 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16,2);
743 for (i =
CHX; i <=
CHZ; i++)
746 if (six_axis_kalman) scratch16 = 0;
748 #if F_9DOF_GBY_KALMAN 749 if (nine_axis_kalman) scratch16 = (int16_t) (sfg->SV_9DOF_GBY_KALMAN.fZErr[i + 3] * 30000.0F);
751 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
757 for (i =
CHX; i <=
CHZ; i++)
760 if (six_axis_kalman) scratch16 = 0;
762 #if F_9DOF_GBY_KALMAN 763 if (nine_axis_kalman) scratch16 = (int16_t) (sfg->SV_9DOF_GBY_KALMAN.fqmErrPl[i] * 30000.0F);
765 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
771 for (i =
CHX; i <=
CHZ; i++)
774 if (six_axis_kalman) scratch16 = (int16_t) (sfg->SV_6DOF_GY_KALMAN.fbPl[i] * 1000.0F);
776 #if F_9DOF_GBY_KALMAN 777 if (nine_axis_kalman) scratch16 = (int16_t) (sfg->SV_9DOF_GBY_KALMAN.fbPl[i] * 1000.0F);
779 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
784 #if F_9DOF_GBY_KALMAN 785 if (nine_axis_kalman) scratch16 = (int16_t) (sfg->SV_9DOF_GBY_KALMAN.fDeltaPl * 100.0F);
787 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
792 for (i =
CHX; i <=
CHZ; i++)
797 if (six_axis_kalman) ftmp = sfg->SV_6DOF_GY_KALMAN.fAccGl[i] * 8192.0F;
799 #if F_9DOF_GBY_KALMAN 800 if (nine_axis_kalman) ftmp = sfg->SV_9DOF_GBY_KALMAN.fAccGl[i] * 8192.0F;
804 if (ftmp > 32767.0F) scratch16 = 32767;
805 else if (ftmp < -32768.0F) scratch16 = -32768;
806 else scratch16 = (int16_t) ftmp;
807 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
813 for (i =
CHX; i <=
CHZ; i++)
817 #if F_9DOF_GBY_KALMAN 818 if (nine_axis_kalman) ftmp = sfg->SV_9DOF_GBY_KALMAN.fDisGl[i] * 100.0F;
822 if (ftmp > 32767.0F) scratch16 = 32767;
823 else if (ftmp < -32768.0F) scratch16 = -32768;
824 else scratch16 = (int16_t) ftmp;
825 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
829 sUARTOutputBuffer[iIndex++] = 0x7E;
840 if (AccelCalPacketOn != -1)
843 sUARTOutputBuffer[iIndex++] = 0x7E;
856 (uint8_t *) &(AccelCalPacketOn), 1);
859 if ((AccelCalPacketOn >= 0) &&
862 scratch16 = (int16_t) (sfg->AccelBuffer.fGsStored[AccelCalPacketOn][
CHX] * 8192.0F);
863 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
864 scratch16 = (int16_t) (sfg->AccelBuffer.fGsStored[AccelCalPacketOn][
CHY] * 8192.0F);
865 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
866 scratch16 = (int16_t) (sfg->AccelBuffer.fGsStored[AccelCalPacketOn][
CHZ] * 8192.0F);
867 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
876 scratch16 = (int16_t) (sfg->AccelCal.fV[
CHX] * 32768.0F);
877 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
878 scratch16 = (int16_t) (sfg->AccelCal.fV[
CHY] * 32768.0F);
879 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
880 scratch16 = (int16_t) (sfg->AccelCal.fV[
CHZ] * 32768.0F);
881 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
884 scratch16 = (int16_t) ((sfg->AccelCal.finvW[
CHX][
CHX] - 1.0F) * 10000.0F);
885 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
886 scratch16 = (int16_t) ((sfg->AccelCal.finvW[
CHY][
CHY] - 1.0F) * 10000.0F);
887 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
888 scratch16 = (int16_t) ((sfg->AccelCal.finvW[
CHZ][
CHZ] - 1.0F) * 10000.0F);
889 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
892 scratch16 = (int16_t) (sfg->AccelCal.finvW[
CHX][
CHY] * 10000.0F);
893 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
894 scratch16 = (int16_t) (sfg->AccelCal.finvW[
CHX][
CHZ] * 10000.0F);
895 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
896 scratch16 = (int16_t) (sfg->AccelCal.finvW[CHY][CHZ] * 10000.0F);
897 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
900 scratch16 = (int16_t) (sfg->AccelCal.fR0[
CHX][
CHX] * 10000.0F);
901 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
902 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHY][CHY] * 10000.0F);
903 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
904 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHZ][CHZ] * 10000.0F);
905 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
908 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHX][CHY] * 10000.0F);
909 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
910 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHX][CHZ] * 10000.0F);
911 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
912 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHY][CHX] * 10000.0F);
913 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
914 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHY][CHZ] * 10000.0F);
915 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
916 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHZ][CHX] * 10000.0F);
917 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
918 scratch16 = (int16_t) (sfg->AccelCal.fR0[CHZ][CHY] * 10000.0F);
919 sBufAppendItem(sUARTOutputBuffer, &iIndex, (uint8_t *) &scratch16, 2);
922 sUARTOutputBuffer[iIndex++] = 0x7E;
927 #endif // F_USING_ACCEL
float q2
y vector component
#define F_USING_GYRO
nominally 0x0004 if a gyro is to be used, 0x0000 otherwise
#define F_3DOF_Y_BASIC
3DOF gyro integration algorithm selector - 0x0800 to include, 0x0000 otherwise
volatile uint8_t RPCPacketOn
flag to enable roll, pitch, compass packet
float fFitErrorpc
current fit error %
int16_t iMagBufferCount
number of magnetometer readings
#define F_3DOF_G_BASIC
3DOF accel tilt (accel) algorithm selector - 0x0200 to include, 0x0000 otherwise
ApplyPerturbation function used to analyze dynamic performance.
enum quaternion quaternion_type
the quaternion type to be transmitted
#define F_USING_ACCEL
nominally 0x0001 if an accelerometer is to be used, 0x0000 otherwise
#define F_6DOF_GY_KALMAN
6DOF accel and gyro (Kalman) algorithm selector - 0x2000 to include, 0x0000 otherwise ...
void sBufAppendItem(uint8_t *pDest, uint16_t *pIndex, uint8_t *pSource, uint16_t iBytesToCopy)
Utility function used to place data in output buffer about to be transmitted via UART.
float finvW[3][3]
current inverse soft iron matrix
volatile uint8_t AngularVelocityPacketOn
flag to enable angular velocity packet
#define MAGBUFFSIZEX
x dimension in magnetometer buffer (12x24 equals 288 elements)
int32_t index[MAGBUFFSIZEX][MAGBUFFSIZEY]
array of time indices
#define CHZ
Used to access Z-channel entries in various data data structures.
writePort_t * write
low level function to write a char buffer to the serial stream
Quaternion derived from 3-axis accel + 3 axis mag (eCompass)
#define F_9DOF_GBY_KALMAN
9DOF accel, mag and gyro algorithm selector - 0x4000 to include, 0x0000 otherwise ...
struct MagSensor Mag
magnetometer storage
Defines control sub-system.
#define THIS_BOARD
FRDM_K64F.
The top level fusion structure.
volatile uint8_t DebugPacketOn
flag to enable debug packet
void readCommon(SV_ptr data, Quaternion *fq, int16_t *iPhi, int16_t *iThe, int16_t *iRho, int16_t iOmega[], uint16_t *isystick)
#define CHY
Used to access Y-channel entries in various data data structures.
typedef int32_t(DATA_FORMAT_Append_t))(void *pData
The interface function to append the data on the formated stream.
#define MAGBUFFSIZEY
y dimension in magnetometer buffer (12x24 equals 288 elements)
Quaternion derived from 3-axis accel (tilt)
Quaternion derived from 3-axis mag only (auto compass algorithm)
quaternion structure definition
float q3
z vector component
volatile quaternion_type QuaternionPacketType
quaternion type transmitted over UART
struct MagCalibration MagCal
mag cal storage
float fV[3]
current hard iron offset x, y, z, (uT)
uint32_t iFlags
a bit-field of sensors and algorithms used
struct MagBuffer MagBuffer
mag cal constellation points
int16_t iBs[3][MAGBUFFSIZEX][MAGBUFFSIZEY]
uncalibrated magnetometer readings
Quaternion derived from full 9-axis sensor fusion.
float fOmega[3]
average angular velocity (deg/s)
The sensor_fusion.h file implements the top level programming interface.
uint8_t data[FXLS8962_DATA_SIZE]
#define F_3DOF_B_BASIC
3DOF mag eCompass (vehicle/mag) algorithm selector - 0x0400 to include, 0x0000 otherwise ...
volatile uint8_t AltPacketOn
flag to enable altitude packet
#define F_6DOF_GB_BASIC
6DOF accel and mag eCompass algorithm selector - 0x1000 to include, 0x0000 otherwise ...
void sBufAppendZeros(uint8_t *pDest, uint16_t *pIndex, uint16_t numZeros)
uint16_t throttle()
(OVERSAMPLE_RATIO * MAXPACKETRATEHZ) / SENSORFS
Quaternion fq
orientation quaternion
uint8_t sUARTOutputBuffer[256]
main output buffer defined in control.c
#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)
float q1
x vector component
#define CHX
Used to access X-channel entries in various data data structures.
Quaternion derived from 3-axis accel + 3-axis gyro (gaming)
float fB
current geomagnetic field magnitude (uT)
int32_t systick
systick timer;
#define F_1DOF_P_BASIC
1DOF pressure (altitude) and temperature algorithm selector - 0x0100 to include, 0x0000 otherwise ...
int16_t iBc[3]
averaged calibrated measurement (counts)
#define THISBUILD
define build number sent in debug packet for display purposes only
int16_t iCountsPeruT
counts per uT
void CreateAndSendPackets(SensorFusionGlobals *sfg, uint8_t *sUARTOutputBuffer)
#define MAX_ACCEL_CAL_ORIENTATIONS
number of stored precision accelerometer measurements
volatile int8_t AccelCalPacketOn
variable used to coordinate accelerometer calibration