/* VectorNav HSI Calibration Library v1.0.0.2
 *
 * Copyright (c) 2018 VectorNav Technologies, LLC
 *
 * This source code is proprietary to and copyrighted by VectorNav Technologies, LLC and is
 * available solely under license from VectorNav. All rights reserved. If you do not have a
 * license to use this source code from VectorNav, any use hereof is strictly prohibited by
 * U.S. law and other applicable law. This source code is restricted for use solely with the
 * products of VectorNav and as otherwise set forth in any agreement with VectorNav. Any
 * disclosure of this source code to the public or to any third party is also prohibited.
 */
#ifndef _VNSENSORREGISTERS_H_
#define _VNSENSORREGISTERS_H_

#include "vnint.h"
#include "vnvector.h"
#include "vnmatrix.h"

/**\defgroup registerStructures Register Structures
* \brief These structures represent the various registers on a VecotorNav
* sensor.
*
* \{ */

#if defined(_MSC_VER)
  #pragma warning(push)
  #pragma warning(disable:4820)   /* Not concerned with tight data structure packing on Windows. */
#endif

/**\brief Structure representing a Binary Output register.
* The field outputGroup available on the sensor's register is not necessary
* in this structure since all read/writes operations will automatically
* determine this from the settings for the individual groups within this
* structure. */
struct VnBinaryOutputRegister
{
  enum ASYNCMODE asyncMode;           /**< The asyncMode field. */
  uint16_t rateDivisor;               /**< The rateDivisor field. */
  enum COMMONGROUP commonField;       /**< Group 1 (Common) */
  enum TIMEGROUP timeField;           /**< Group 2 (Time) */
  enum IMUGROUP imuField;             /**< Group 3 (IMU) */
  enum GPSGROUP gpsField;             /**< Group 4 (GPS) */
  enum ATTITUDEGROUP attitudeField;   /**< Group 5 (Attitude) */
  enum INSGROUP insField;             /**< Group 6 (INS) */
};

#ifndef __cplusplus
typedef struct VnBinaryOutputRegister VnBinaryOutputRegister_t;
#endif

/**\brief Initializes a BinaryOutputRegister structure.
* \param[in] reg The BinaryOutputRegister structure to initialize.
* \param[in] asyncMode Value to initialize the asyncMode field with.
* \param[in] rateDivisor Value to initialize the rateDivisor field with.
* \param[in] commonField Value to initialize the commonField with.
* \param[in] timeField Value to initialize the timeField with.
* \param[in] imuField Value to initialize the imuField with.
* \param[in] gpsField Value to initialize the gpsField with.
* \param[in] attitudeField Value to initialize the attitudeField with.
* \param[in] insField Value to initialize the insField with. */
void
VnBinaryOutputRegister_initialize(
    struct VnBinaryOutputRegister *reg,
    enum ASYNCMODE asyncMode,
    uint16_t rateDivisor,
    enum COMMONGROUP commonField,
    enum TIMEGROUP timeField,
    enum IMUGROUP imuField,
    enum GPSGROUP gpsField,
    enum ATTITUDEGROUP attitudeField,
    enum INSGROUP insField);

/** \brief Structure representing the Quaternion, Magnetic, Acceleration and Angular Rates register. */
struct VnQuaternionMagneticAccelerationAndAngularRatesRegister
{
  union vn_vec4f quat;                    /**< \brief The Quat field. */
  union vn_vec3f mag;                     /**< \brief The Mag field. */
  union vn_vec3f accel;                   /**< \brief The Accel field. */
  union vn_vec3f gyro;                    /**< \brief The Gyro field. */
};

/** \brief Structure representing the Magnetic, Acceleration and Angular Rates register. */
struct VnMagneticAccelerationAndAngularRatesRegister
{
  union vn_vec3f mag;                     /**< \brief The Mag field. */
  union vn_vec3f accel;                   /**< \brief The Accel field. */
  union vn_vec3f gyro;                    /**< \brief The Gyro field. */
};

/** \brief Structure representing the Magnetic and Gravity Reference Vectors register. */
struct VnMagneticAndGravityReferenceVectorsRegister
{
  union vn_vec3f magRef;                  /**< \brief The MagRef field. */
  union vn_vec3f accRef;                  /**< \brief The AccRef field. */
};

/** \brief Structure representing the Filter Measurements Variance Parameters register. */
struct VnFilterMeasurementsVarianceParametersRegister
{
  float angularWalkVariance;              /**< \brief The Angular Walk Variance field. */
  union vn_vec3f angularRateVariance;     /**< \brief The Angular Rate Variance field. */
  union vn_vec3f magneticVariance;        /**< \brief The Magnetic Variance field. */
  union vn_vec3f accelerationVariance;    /**< \brief The Acceleration Variance field. */
};

/** \brief Structure representing the Magnetometer Compensation register. */
struct VnMagnetometerCompensationRegister
{
  union vn_mat3f c;                       /**< \brief The C field. */
  union vn_vec3f b;                       /**< \brief The B field. */
};

/** \brief Structure representing the Filter Active Tuning Parameters register. */
struct VnFilterActiveTuningParametersRegister
{
  float magneticDisturbanceGain;          /**< \brief The Magnetic Disturbance Gain field. */
  float accelerationDisturbanceGain;      /**< \brief The Acceleration Disturbance Gain field. */
  float magneticDisturbanceMemory;        /**< \brief The Magnetic Disturbance Memory field. */
  float accelerationDisturbanceMemory;    /**< \brief The Acceleration Disturbance Memory field. */
};

/** \brief Structure representing the Acceleration Compensation register. */
struct VnAccelerationCompensationRegister
{
  union vn_mat3f c;                       /**< \brief The C field. */
  union vn_vec3f b;                       /**< \brief The B field. */
};

/** \brief Structure representing the Yaw, Pitch, Roll, Magnetic, Acceleration and Angular Rates register. */
struct VnYawPitchRollMagneticAccelerationAndAngularRatesRegister
{
  union vn_vec3f yawPitchRoll;            /**< \brief The YawPitchRoll field. */
  union vn_vec3f mag;                     /**< \brief The Mag field. */
  union vn_vec3f accel;                   /**< \brief The Accel field. */
  union vn_vec3f gyro;                    /**< \brief The Gyro field. */
};

/** \brief Structure representing the Communication Protocol Control register. */
struct VnCommunicationProtocolControlRegister
{
  uint8_t serialCount;                    /**< \brief The SerialCount field. */
  uint8_t serialStatus;                   /**< \brief The SerialStatus field. */
  uint8_t spiCount;                       /**< \brief The SPICount field. */
  uint8_t spiStatus;                      /**< \brief The SPIStatus field. */
  uint8_t serialChecksum;                 /**< \brief The SerialChecksum field. */
  uint8_t spiChecksum;                    /**< \brief The SPIChecksum field. */
  uint8_t errorMode;                      /**< \brief The ErrorMode field. */
};

/** \brief Structure representing the Synchronization Control register. */
struct VnSynchronizationControlRegister
{
  uint8_t syncInMode;                     /**< \brief The SyncInMode field. */
  uint8_t syncInEdge;                     /**< \brief The SyncInEdge field. */
  uint16_t syncInSkipFactor;              /**< \brief The SyncInSkipFactor field. */
  uint8_t syncOutMode;                    /**< \brief The SyncOutMode field. */
  uint8_t syncOutPolarity;                /**< \brief The SyncOutPolarity field. */
  uint16_t syncOutSkipFactor;             /**< \brief The SyncOutSkipFactor field. */
  uint32_t syncOutPulseWidth;             /**< \brief The SyncOutPulseWidth field. */
};

/** \brief Structure representing the Synchronization Status register. */
struct VnSynchronizationStatusRegister
{
  uint32_t syncInCount;                   /**< \brief The SyncInCount field. */
  uint32_t syncInTime;                    /**< \brief The SyncInTime field. */
  uint32_t syncOutCount;                  /**< \brief The SyncOutCount field. */
};

/** \brief Structure representing the Filter Basic Control register. */
struct VnFilterBasicControlRegister
{
  uint8_t magMode;                        /**< \brief The MagMode field. */
  uint8_t extMagMode;                     /**< \brief The ExtMagMode field. */
  uint8_t extAccMode;                     /**< \brief The ExtAccMode field. */
  uint8_t extGyroMode;                    /**< \brief The ExtGyroMode field. */
  union vn_vec3f gyroLimit;               /**< \brief The GyroLimit field. */
};

/** \brief Structure representing the VPE Basic Control register. */
struct VnVpeBasicControlRegister
{
  uint8_t enable;                         /**< \brief The Enable field. */
  uint8_t headingMode;                    /**< \brief The HeadingMode field. */
  uint8_t filteringMode;                  /**< \brief The FilteringMode field. */
  uint8_t tuningMode;                     /**< \brief The TuningMode field. */
};

/** \brief Structure representing the VPE Magnetometer Basic Tuning register. */
struct VnVpeMagnetometerBasicTuningRegister
{
  union vn_vec3f baseTuning;              /**< \brief The BaseTuning field. */
  union vn_vec3f adaptiveTuning;          /**< \brief The AdaptiveTuning field. */
  union vn_vec3f adaptiveFiltering;       /**< \brief The AdaptiveFiltering field. */
};

/** \brief Structure representing the VPE Magnetometer Advanced Tuning register. */
struct VnVpeMagnetometerAdvancedTuningRegister
{
  union vn_vec3f minFiltering;            /**< \brief The MinFiltering field. */
  union vn_vec3f maxFiltering;            /**< \brief The MaxFiltering field. */
  float maxAdaptRate;                     /**< \brief The MaxAdaptRate field. */
  float disturbanceWindow;                /**< \brief The DisturbanceWindow field. */
  float maxTuning;                        /**< \brief The MaxTuning field. */
};

/** \brief Structure representing the VPE Accelerometer Basic Tuning register. */
struct VnVpeAccelerometerBasicTuningRegister
{
  union vn_vec3f baseTuning;              /**< \brief The BaseTuning field. */
  union vn_vec3f adaptiveTuning;          /**< \brief The AdaptiveTuning field. */
  union vn_vec3f adaptiveFiltering;       /**< \brief The AdaptiveFiltering field. */
};

/** \brief Structure representing the VPE Accelerometer Advanced Tuning register. */
struct VnVpeAccelerometerAdvancedTuningRegister
{
  union vn_vec3f minFiltering;            /**< \brief The MinFiltering field. */
  union vn_vec3f maxFiltering;            /**< \brief The MaxFiltering field. */
  float maxAdaptRate;                     /**< \brief The MaxAdaptRate field. */
  float disturbanceWindow;                /**< \brief The DisturbanceWindow field. */
  float maxTuning;                        /**< \brief The MaxTuning field. */
};

/** \brief Structure representing the VPE Gyro Basic Tuning register. */
struct VnVpeGyroBasicTuningRegister
{
  union vn_vec3f angularWalkVariance;     /**< \brief The AngularWalkVariance field. */
  union vn_vec3f baseTuning;              /**< \brief The BaseTuning field. */
  union vn_vec3f adaptiveTuning;          /**< \brief The AdaptiveTuning field. */
};

/** \brief Structure representing the Magnetometer Calibration Control register. */
struct VnMagnetometerCalibrationControlRegister
{
  uint8_t hsiMode;                        /**< \brief The HSIMode field. */
  uint8_t hsiOutput;                      /**< \brief The HSIOutput field. */
  uint8_t convergeRate;                   /**< \brief The ConvergeRate field. */
};

/** \brief Structure representing the Calculated Magnetometer Calibration register. */
struct VnCalculatedMagnetometerCalibrationRegister
{
  union vn_mat3f c;                       /**< \brief The C field. */
  union vn_vec3f b;                       /**< \brief The B field. */
};

/** \brief Structure representing the Velocity Compensation Control register. */
struct VnVelocityCompensationControlRegister
{
  uint8_t mode;                           /**< \brief The Mode field. */
  float velocityTuning;                   /**< \brief The VelocityTuning field. */
  float rateTuning;                       /**< \brief The RateTuning field. */
};

/** \brief Structure representing the Velocity Compensation Status register. */
struct VnVelocityCompensationStatusRegister
{
  float x;                                /**< \brief The x field. */
  float xDot;                             /**< \brief The xDot field. */
  union vn_vec3f accelOffset;             /**< \brief The accelOffset field. */
  union vn_vec3f omega;                   /**< \brief The omega field. */
};

/** \brief Structure representing the IMU Measurements register. */
struct VnImuMeasurementsRegister
{
  union vn_vec3f mag;                     /**< \brief The Mag field. */
  union vn_vec3f accel;                   /**< \brief The Accel field. */
  union vn_vec3f gyro;                    /**< \brief The Gyro field. */
  float temp;                             /**< \brief The Temp field. */
  float pressure;                         /**< \brief The Pressure field. */
};

/** \brief Structure representing the GPS Configuration register. */
struct VnGpsConfigurationRegister
{
  uint8_t mode;                           /**< \brief The Mode field. */
  uint8_t ppsSource;                      /**< \brief The PpsSource field. */
};

/** \brief Structure representing the GPS Solution - LLA register. */
struct VnGpsSolutionLlaRegister
{
  double time;                            /**< \brief The Time field. */
  uint16_t week;                          /**< \brief The Week field. */
  uint8_t gpsFix;                         /**< \brief The GpsFix field. */
  uint8_t numSats;                        /**< \brief The NumSats field. */
  union vn_vec3d lla;                     /**< \brief The Lla field. */
  union vn_vec3f nedVel;                  /**< \brief The NedVel field. */
  union vn_vec3f nedAcc;                  /**< \brief The NedAcc field. */
  float speedAcc;                         /**< \brief The SpeedAcc field. */
  float timeAcc;                          /**< \brief The TimeAcc field. */
};

/** \brief Structure representing the GPS Solution - ECEF register. */
struct VnGpsSolutionEcefRegister
{
  double tow;                             /**< \brief The Tow field. */
  uint16_t week;                          /**< \brief The Week field. */
  uint8_t gpsFix;                         /**< \brief The GpsFix field. */
  uint8_t numSats;                        /**< \brief The NumSats field. */
  union vn_vec3d position;                /**< \brief The Position field. */
  union vn_vec3f velocity;                /**< \brief The Velocity field. */
  union vn_vec3f posAcc;                  /**< \brief The PosAcc field. */
  float speedAcc;                         /**< \brief The SpeedAcc field. */
  float timeAcc;                          /**< \brief The TimeAcc field. */
};

/** \brief Structure representing the INS Solution - LLA register. */
struct VnInsSolutionLlaRegister
{
  double time;                            /**< \brief The Time field. */
  uint16_t week;                          /**< \brief The Week field. */
  uint16_t status;                        /**< \brief The Status field. */
  union vn_vec3f yawPitchRoll;            /**< \brief The YawPitchRoll field. */
  union vn_vec3d position;                /**< \brief The Position field. */
  union vn_vec3f nedVel;                  /**< \brief The NedVel field. */
  float attUncertainty;                   /**< \brief The AttUncertainty field. */
  float posUncertainty;                   /**< \brief The PosUncertainty field. */
  float velUncertainty;                   /**< \brief The VelUncertainty field. */
};

/** \brief Structure representing the INS Solution - ECEF register. */
struct VnInsSolutionEcefRegister
{
  double time;                            /**< \brief The Time field. */
  uint16_t week;                          /**< \brief The Week field. */
  uint16_t status;                        /**< \brief The Status field. */
  union vn_vec3f yawPitchRoll;            /**< \brief The YawPitchRoll field. */
  union vn_vec3d position;                /**< \brief The Position field. */
  union vn_vec3f velocity;                /**< \brief The Velocity field. */
  float attUncertainty;                   /**< \brief The AttUncertainty field. */
  float posUncertainty;                   /**< \brief The PosUncertainty field. */
  float velUncertainty;                   /**< \brief The VelUncertainty field. */
};

/** \brief Structure representing the INS Basic Configuration register for a VN-200 sensor. */
struct VnInsBasicConfigurationRegisterVn200
{
  uint8_t scenario;                       /**< \brief The Scenario field. */
  uint8_t ahrsAiding;                     /**< \brief The AhrsAiding field. */
};

/** \brief Structure representing the INS Basic Configuration register for a VN-300 sensor. */
struct VnInsBasicConfigurationRegisterVn300
{
  uint8_t scenario;                       /**< \brief The Scenario field. */
  uint8_t ahrsAiding;                     /**< \brief The AhrsAiding field. */
  uint8_t estBaseline;                    /**< \brief The EstBaseline field. */
};

/** \brief Structure representing the INS Advanced Configuration register. */
struct VnInsAdvancedConfigurationRegister
{
  uint8_t useMag;                         /**< \brief The UseMag field. */
  uint8_t usePres;                        /**< \brief The UsePres field. */
  uint8_t posAtt;                         /**< \brief The PosAtt field. */
  uint8_t velAtt;                         /**< \brief The VelAtt field. */
  uint8_t velBias;                        /**< \brief The VelBias field. */
  uint8_t useFoam;                        /**< \brief The UseFoam field. */
  uint8_t gpsCovType;                     /**< \brief The GPSCovType field. */
  uint8_t velCount;                       /**< \brief The VelCount field. */
  float velInit;                          /**< \brief The VelInit field. */
  float moveOrigin;                       /**< \brief The MoveOrigin field. */
  float gpsTimeout;                       /**< \brief The GPSTimeout field. */
  float deltaLimitPos;                    /**< \brief The DeltaLimitPos field. */
  float deltaLimitVel;                    /**< \brief The DeltaLimitVel field. */
  float minPosUncertainty;                /**< \brief The MinPosUncertainty field. */
  float minVelUncertainty;                /**< \brief The MinVelUncertainty field. */
};

/** \brief Structure representing the INS State - LLA register. */
struct VnInsStateLlaRegister
{
  union vn_vec3f yawPitchRoll;            /**< \brief The YawPitchRoll field. */
  union vn_vec3d position;                /**< \brief The Position field. */
  union vn_vec3f velocity;                /**< \brief The Velocity field. */
  union vn_vec3f accel;                   /**< \brief The Accel field. */
  union vn_vec3f angularRate;             /**< \brief The AngularRate field. */
};

/** \brief Structure representing the INS State - ECEF register. */
struct VnInsStateEcefRegister
{
  union vn_vec3f yawPitchRoll;            /**< \brief The YawPitchRoll field. */
  union vn_vec3d position;                /**< \brief The Position field. */
  union vn_vec3f velocity;                /**< \brief The Velocity field. */
  union vn_vec3f accel;                   /**< \brief The Accel field. */
  union vn_vec3f angularRate;             /**< \brief The AngularRate field. */
};

/** \brief Structure representing the Startup Filter Bias Estimate register. */
struct VnStartupFilterBiasEstimateRegister
{
  union vn_vec3f gyroBias;                /**< \brief The GyroBias field. */
  union vn_vec3f accelBias;               /**< \brief The AccelBias field. */
  float pressureBias;                     /**< \brief The PressureBias field. */
};

/** \brief Structure representing the Delta Theta and Delta Velocity register. */
struct VnDeltaThetaAndDeltaVelocityRegister
{
  float deltaTime;                        /**< \brief The DeltaTime field. */
  union vn_vec3f deltaTheta;              /**< \brief The DeltaTheta field. */
  union vn_vec3f deltaVelocity;           /**< \brief The DeltaVelocity field. */
};

/** \brief Structure representing the Delta Theta and Delta Velocity Configuration register. */
struct VnDeltaThetaAndDeltaVelocityConfigurationRegister
{
  uint8_t integrationFrame;               /**< \brief The IntegrationFrame field. */
  uint8_t gyroCompensation;               /**< \brief The GyroCompensation field. */
  uint8_t accelCompensation;              /**< \brief The AccelCompensation field. */
};

/** \brief Structure representing the Reference Vector Configuration register. */
struct VnReferenceVectorConfigurationRegister
{
  uint8_t useMagModel;                    /**< \brief The UseMagModel field. */
  uint8_t useGravityModel;                /**< \brief The UseGravityModel field. */
  uint32_t recalcThreshold;               /**< \brief The RecalcThreshold field. */
  float year;                             /**< \brief The Year field. */
  union vn_vec3d position;                /**< \brief The Position field. */
};

/** \brief Structure representing the Gyro Compensation register. */
struct VnGyroCompensationRegister
{
  union vn_mat3f c;                       /**< \brief The C field. */
  union vn_vec3f b;                       /**< \brief The B field. */
};

/** \brief Structure representing the IMU Filtering Configuration register. */
struct VnImuFilteringConfigurationRegister
{
  uint16_t magWindowSize;                 /**< \brief The MagWindowSize field. */
  uint16_t accelWindowSize;               /**< \brief The AccelWindowSize field. */
  uint16_t gyroWindowSize;                /**< \brief The GyroWindowSize field. */
  uint16_t tempWindowSize;                /**< \brief The TempWindowSize field. */
  uint16_t presWindowSize;                /**< \brief The PresWindowSize field. */
  uint8_t magFilterMode;                  /**< \brief The MagFilterMode field. */
  uint8_t accelFilterMode;                /**< \brief The AccelFilterMode field. */
  uint8_t gyroFilterMode;                 /**< \brief The GyroFilterMode field. */
  uint8_t tempFilterMode;                 /**< \brief The TempFilterMode field. */
  uint8_t presFilterMode;                 /**< \brief The PresFilterMode field. */
};

/** \brief Structure representing the GPS Compass Baseline register. */
struct VnGpsCompassBaselineRegister
{
  union vn_vec3f position;                /**< \brief The Position field. */
  union vn_vec3f uncertainty;             /**< \brief The Uncertainty field. */
};

/** \brief Structure representing the GPS Compass Estimated Baseline register. */
struct VnGpsCompassEstimatedBaselineRegister
{
  uint8_t estBaselineUsed;                /**< \brief The EstBaselineUsed field. */
  uint16_t numMeas;                       /**< \brief The NumMeas field. */
  union vn_vec3f position;                /**< \brief The Position field. */
  union vn_vec3f uncertainty;             /**< \brief The Uncertainty field. */
};

/** \brief Structure representing the IMU Rate Configuration register. */
struct VnImuRateConfigurationRegister
{
  uint16_t imuRate;                       /**< \brief The imuRate field. */
  uint16_t navDivisor;                    /**< \brief The NavDivisor field. */
  float filterTargetRate;                 /**< \brief The filterTargetRate field. */
  float filterMinRate;                    /**< \brief The filterMinRate field. */
};

/** \brief Structure representing the Yaw, Pitch, Roll, True Body Acceleration and Angular Rates register. */
struct VnYawPitchRollTrueBodyAccelerationAndAngularRatesRegister
{
  union vn_vec3f yawPitchRoll;            /**< \brief The YawPitchRoll field. */
  union vn_vec3f bodyAccel;               /**< \brief The BodyAccel field. */
  union vn_vec3f gyro;                    /**< \brief The Gyro field. */
};

/** \brief Structure representing the Yaw, Pitch, Roll, True Inertial Acceleration and Angular Rates register. */
struct VnYawPitchRollTrueInertialAccelerationAndAngularRatesRegister
{
  union vn_vec3f yawPitchRoll;            /**< \brief The YawPitchRoll field. */
  union vn_vec3f inertialAccel;           /**< \brief The InertialAccel field. */
  union vn_vec3f gyro;                    /**< \brief The Gyro field. */
};

#ifndef _cplusplus
typedef struct VnUserTagRegister VnUserTagRegister_t;
typedef struct VnModelNumberRegister VnModelNumberRegister_t;
typedef struct VnHardwareRevisionRegister VnHardwareRevisionRegister_t;
typedef struct VnSerialNumberRegister VnSerialNumberRegister_t;
typedef struct VnFirmwareVersionRegister VnFirmwareVersionRegister_t;
typedef struct VnSerialBaudRateRegister VnSerialBaudRateRegister_t;
typedef struct VnAsyncDataOutputTypeRegister VnAsyncDataOutputTypeRegister_t;
typedef struct VnAsyncDataOutputFrequencyRegister VnAsyncDataOutputFrequencyRegister_t;
typedef struct VnYawPitchRollRegister VnYawPitchRollRegister_t;
typedef struct VnAttitudeQuaternionRegister VnAttitudeQuaternionRegister_t;
typedef struct VnQuaternionMagneticAccelerationAndAngularRatesRegister VnQuaternionMagneticAccelerationAndAngularRatesRegister_t;
typedef struct VnMagneticMeasurementsRegister VnMagneticMeasurementsRegister_t;
typedef struct VnAccelerationMeasurementsRegister VnAccelerationMeasurementsRegister_t;
typedef struct VnAngularRateMeasurementsRegister VnAngularRateMeasurementsRegister_t;
typedef struct VnMagneticAccelerationAndAngularRatesRegister VnMagneticAccelerationAndAngularRatesRegister_t;
typedef struct VnMagneticAndGravityReferenceVectorsRegister VnMagneticAndGravityReferenceVectorsRegister_t;
typedef struct VnFilterMeasurementsVarianceParametersRegister VnFilterMeasurementsVarianceParametersRegister_t;
typedef struct VnMagnetometerCompensationRegister VnMagnetometerCompensationRegister_t;
typedef struct VnFilterActiveTuningParametersRegister VnFilterActiveTuningParametersRegister_t;
typedef struct VnAccelerationCompensationRegister VnAccelerationCompensationRegister_t;
typedef struct VnReferenceFrameRotationRegister VnReferenceFrameRotationRegister_t;
typedef struct VnYawPitchRollMagneticAccelerationAndAngularRatesRegister VnYawPitchRollMagneticAccelerationAndAngularRatesRegister_t;
typedef struct VnCommunicationProtocolControlRegister VnCommunicationProtocolControlRegister_t;
typedef struct VnSynchronizationControlRegister VnSynchronizationControlRegister_t;
typedef struct VnSynchronizationStatusRegister VnSynchronizationStatusRegister_t;
typedef struct VnFilterBasicControlRegister VnFilterBasicControlRegister_t;
typedef struct VnVpeBasicControlRegister VnVpeBasicControlRegister_t;
typedef struct VnVpeMagnetometerBasicTuningRegister VnVpeMagnetometerBasicTuningRegister_t;
typedef struct VnVpeMagnetometerAdvancedTuningRegister VnVpeMagnetometerAdvancedTuningRegister_t;
typedef struct VnVpeAccelerometerBasicTuningRegister VnVpeAccelerometerBasicTuningRegister_t;
typedef struct VnVpeAccelerometerAdvancedTuningRegister VnVpeAccelerometerAdvancedTuningRegister_t;
typedef struct VnVpeGyroBasicTuningRegister VnVpeGyroBasicTuningRegister_t;
typedef struct VnFilterStartupGyroBiasRegister VnFilterStartupGyroBiasRegister_t;
typedef struct VnMagnetometerCalibrationControlRegister VnMagnetometerCalibrationControlRegister_t;
typedef struct VnCalculatedMagnetometerCalibrationRegister VnCalculatedMagnetometerCalibrationRegister_t;
typedef struct VnIndoorHeadingModeControlRegister VnIndoorHeadingModeControlRegister_t;
typedef struct VnVelocityCompensationMeasurementRegister VnVelocityCompensationMeasurementRegister_t;
typedef struct VnVelocityCompensationControlRegister VnVelocityCompensationControlRegister_t;
typedef struct VnVelocityCompensationStatusRegister VnVelocityCompensationStatusRegister_t;
typedef struct VnImuMeasurementsRegister VnImuMeasurementsRegister_t;
typedef struct VnGpsConfigurationRegister VnGpsConfigurationRegister_t;
typedef struct VnGpsAntennaOffsetRegister VnGpsAntennaOffsetRegister_t;
typedef struct VnGpsSolutionLlaRegister VnGpsSolutionLlaRegister_t;
typedef struct VnGpsSolutionEcefRegister VnGpsSolutionEcefRegister_t;
typedef struct VnInsSolutionLlaRegister VnInsSolutionLlaRegister_t;
typedef struct VnInsSolutionEcefRegister VnInsSolutionEcefRegister_t;
typedef struct VnInsBasicConfigurationRegisterVn200 VnInsBasicConfigurationRegisterVn200_t;
typedef struct VnInsBasicConfigurationRegisterVn300 VnInsBasicConfigurationRegisterVn300_t;
typedef struct VnInsAdvancedConfigurationRegister VnInsAdvancedConfigurationRegister_t;
typedef struct VnInsStateLlaRegister VnInsStateLlaRegister_t;
typedef struct VnInsStateEcefRegister VnInsStateEcefRegister_t;
typedef struct VnStartupFilterBiasEstimateRegister VnStartupFilterBiasEstimateRegister_t;
typedef struct VnDeltaThetaAndDeltaVelocityRegister VnDeltaThetaAndDeltaVelocityRegister_t;
typedef struct VnDeltaThetaAndDeltaVelocityConfigurationRegister VnDeltaThetaAndDeltaVelocityConfigurationRegister_t;
typedef struct VnReferenceVectorConfigurationRegister VnReferenceVectorConfigurationRegister_t;
typedef struct VnGyroCompensationRegister VnGyroCompensationRegister_t;
typedef struct VnImuFilteringConfigurationRegister VnImuFilteringConfigurationRegister_t;
typedef struct VnGpsCompassBaselineRegister VnGpsCompassBaselineRegister_t;
typedef struct VnGpsCompassEstimatedBaselineRegister VnGpsCompassEstimatedBaselineRegister_t;
typedef struct VnImuRateConfigurationRegister VnImuRateConfigurationRegister_t;
typedef struct VnYawPitchRollTrueBodyAccelerationAndAngularRatesRegister VnYawPitchRollTrueBodyAccelerationAndAngularRatesRegister_t;
typedef struct VnYawPitchRollTrueInertialAccelerationAndAngularRatesRegister VnYawPitchRollTrueInertialAccelerationAndAngularRatesRegister_t;
#endif

#if defined(_MSC_VER)
  #pragma warning(pop)
#endif

/* \} */

#endif
