235 lines
14 KiB
C++
235 lines
14 KiB
C++
#ifndef SBGLOGPARSE_H
|
|
#define SBGLOGPARSE_H
|
|
|
|
#include "sbgbuffer.h"
|
|
|
|
|
|
|
|
namespace sbgtc
|
|
{
|
|
//----------------------------------------------------------------------//
|
|
//- Definition of all class id for sbgECom -//
|
|
//----------------------------------------------------------------------//
|
|
|
|
/*!
|
|
* Enum that defines all the message classes available.
|
|
*/
|
|
typedef enum _SbgEComClass
|
|
{
|
|
SBG_ECOM_CLASS_LOG_ECOM_0 = 0x00, /*!< Class that contains sbgECom protocol input/output log messages. */
|
|
|
|
SBG_ECOM_CLASS_LOG_ECOM_1 = 0x01, /*!< Class that contains special sbgECom output messages that handle high frequency output. */
|
|
|
|
SBG_ECOM_CLASS_LOG_NMEA_0 = 0x02, /*!< Class that contains NMEA (and NMEA like) output logs. <br>
|
|
Note: This class is only used for identification purpose and does not contain any sbgECom message. */
|
|
SBG_ECOM_CLASS_LOG_NMEA_1 = 0x03, /*!< Class that contains proprietary NMEA (and NMEA like) output logs. <br>
|
|
Note: This class is only used for identification purpose and does not contain any sbgECom message. */
|
|
SBG_ECOM_CLASS_LOG_THIRD_PARTY_0 = 0x04, /*!< Class that contains third party output logs.
|
|
Note: This class is only used for identification purpose and does not contain any sbgECom message. */
|
|
|
|
SBG_ECOM_CLASS_LOG_CMD_0 = 0x10, /*!< Class that contains sbgECom protocol commands. */
|
|
|
|
SBG_ECOM_CLASS_LOG_ECOM_PRIVATE = 0xFE, /*!< Private output logs - internal use only */
|
|
SBG_ECOM_CLASS_CMD_PRIVATE = 0xFF /*!< Private commands - internal use only */
|
|
} SbgEComClass;
|
|
|
|
//----------------------------------------------------------------------//
|
|
//- Definition of all messages id for sbgECom -//
|
|
//----------------------------------------------------------------------//
|
|
|
|
/*!
|
|
* Enum that defines all the available ECom output logs from the sbgECom library.
|
|
*/
|
|
typedef enum _SbgEComLog
|
|
{
|
|
SBG_ECOM_LOG_STATUS = 1, /*!< Status general, clock, com aiding, solution, heave */
|
|
|
|
SBG_ECOM_LOG_UTC_TIME = 2, /*!< Provides UTC time reference */
|
|
|
|
SBG_ECOM_LOG_IMU_DATA = 3, /*!< Includes IMU status, acc., gyro, temp delta speeds and delta angles values */
|
|
|
|
SBG_ECOM_LOG_MAG = 4, /*!< Magnetic data with associated accelerometer on each axis */
|
|
SBG_ECOM_LOG_MAG_CALIB = 5, /*!< Magnetometer calibration data (raw buffer) */
|
|
|
|
SBG_ECOM_LOG_EKF_EULER = 6, /*!< Includes roll, pitch, yaw and their accuracies on each axis */
|
|
SBG_ECOM_LOG_EKF_QUAT = 7, /*!< Includes the 4 quaternions values */
|
|
SBG_ECOM_LOG_EKF_NAV = 8, /*!< Position and velocities in NED coordinates with the accuracies on each axis */
|
|
|
|
SBG_ECOM_LOG_SHIP_MOTION = 9, /*!< Heave, surge and sway and accelerations on each axis. */
|
|
|
|
SBG_ECOM_LOG_GPS1_VEL = 13, /*!< GPS velocities from primary or secondary GPS receiver */
|
|
SBG_ECOM_LOG_GPS1_POS = 14, /*!< GPS positions from primary or secondary GPS receiver */
|
|
SBG_ECOM_LOG_GPS1_HDT = 15, /*!< GPS true heading from dual antenna system */
|
|
SBG_ECOM_LOG_GPS1_RAW = 31, /*!< GPS 1 raw data for post processing. */
|
|
|
|
SBG_ECOM_LOG_GPS2_VEL = 16, /*!< GPS 2 velocity log data. */
|
|
SBG_ECOM_LOG_GPS2_POS = 17, /*!< GPS 2 position log data. */
|
|
SBG_ECOM_LOG_GPS2_HDT = 18, /*!< GPS 2 true heading log data. */
|
|
SBG_ECOM_LOG_GPS2_RAW = 38, /*!< GPS 2 raw data for post processing. */
|
|
|
|
SBG_ECOM_LOG_ODO_VEL = 19, /*!< Provides odometer velocity */
|
|
|
|
SBG_ECOM_LOG_EVENT_A = 24, /*!< Event markers sent when events are detected on sync in A pin */
|
|
SBG_ECOM_LOG_EVENT_B = 25, /*!< Event markers sent when events are detected on sync in B pin */
|
|
SBG_ECOM_LOG_EVENT_C = 26, /*!< Event markers sent when events are detected on sync in C pin */
|
|
SBG_ECOM_LOG_EVENT_D = 27, /*!< Event markers sent when events are detected on sync in D pin */
|
|
SBG_ECOM_LOG_EVENT_E = 28, /*!< Event markers sent when events are detected on sync in E pin */
|
|
|
|
SBG_ECOM_LOG_DVL_BOTTOM_TRACK = 29, /*!< Doppler Velocity Log for bottom tracking data. */
|
|
SBG_ECOM_LOG_DVL_WATER_TRACK = 30, /*!< Doppler Velocity log for water layer data. */
|
|
|
|
SBG_ECOM_LOG_SHIP_MOTION_HP = 32, /*!< Return delayed ship motion such as surge, sway, heave. */
|
|
|
|
SBG_ECOM_LOG_AIR_DATA = 36, /*!< Air Data aiding such as barometric altimeter and true air speed. */
|
|
|
|
SBG_ECOM_LOG_USBL = 37, /*!< Raw USBL position data for subsea navigation. */
|
|
|
|
SBG_ECOM_LOG_IMU_RAW_DATA = 40, /*!< DEPRECATED: Private only log. */
|
|
|
|
SBG_ECOM_LOG_IMU_SHORT = 44, /*!< Short IMU message recommended for post processing usages. */
|
|
|
|
SBG_ECOM_LOG_EVENT_OUT_A = 45, /*!< Event marker used to time stamp each generated Sync Out A signal. */
|
|
SBG_ECOM_LOG_EVENT_OUT_B = 46, /*!< Event marker used to time stamp each generated Sync Out B signal. */
|
|
|
|
SBG_ECOM_LOG_DEPTH = 47, /*!< Depth sensor measurement log used for subsea navigation. */
|
|
SBG_ECOM_LOG_DIAG = 48, /*!< Diagnostic log. */
|
|
|
|
SBG_ECOM_LOG_ECOM_NUM_MESSAGES /*!< Helper definition to know the number of ECom messages */
|
|
} SbgEComLog;
|
|
|
|
|
|
/*!
|
|
* This type defines any message identifier.
|
|
* Because message identifiers enum will be different with each class id, we use a generic uint8_t rather than an enum.
|
|
*/
|
|
typedef uint8_t SbgEComMsgId;
|
|
|
|
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
/*!
|
|
* Solution filter mode enum.
|
|
*/
|
|
typedef enum _SbgEComSolutionMode
|
|
{
|
|
SBG_ECOM_SOL_MODE_UNINITIALIZED = 0, /*!< The Kalman filter is not initialized and the returned data are all invalid. */
|
|
SBG_ECOM_SOL_MODE_VERTICAL_GYRO = 1, /*!< The Kalman filter only rely on a vertical reference to compute roll and pitch angles. Heading and navigation data drift freely. */
|
|
SBG_ECOM_SOL_MODE_AHRS = 2, /*!< A heading reference is available, the Kalman filter provides full orientation but navigation data drift freely. */
|
|
SBG_ECOM_SOL_MODE_NAV_VELOCITY = 3, /*!< The Kalman filter computes orientation and velocity. Position is freely integrated from velocity estimation. */
|
|
SBG_ECOM_SOL_MODE_NAV_POSITION = 4 /*!< Nominal mode, the Kalman filter computes all parameters (attitude, velocity, position). Absolute position is provided. */
|
|
} SbgEComSolutionMode;
|
|
|
|
|
|
/*!
|
|
* EKF computed orientation using euler angles.
|
|
*/
|
|
typedef struct _SbgLogEkfEulerData
|
|
{
|
|
uint32_t timeStamp; /*!< Time in us since the sensor power up. */
|
|
float euler[3]; /*!< Roll, Pitch and Yaw angles in rad. */
|
|
float eulerStdDev[3]; /*!< Roll, Pitch and Yaw angles 1 sigma standard deviation in rad. */
|
|
uint32_t status; /*!< EKF solution status bitmask and enum. */
|
|
} SbgLogEkfEulerData;
|
|
|
|
/*!
|
|
* EFK computed orientation using quaternion.
|
|
*/
|
|
typedef struct _SbgLogEkfQuatData
|
|
{
|
|
uint32_t timeStamp; /*!< Time in us since the sensor power up. */
|
|
float quaternion[4]; /*!< Orientation quaternion stored in W, X, Y, Z form. */
|
|
float eulerStdDev[3]; /*!< Roll, Pitch and Yaw angles 1 sigma standard deviation in rad. */
|
|
uint32_t status; /*!< EKF solution status bitmask and enum. */
|
|
} SbgLogEkfQuatData;
|
|
|
|
/*!
|
|
* EFK computed navigation data.
|
|
*/
|
|
typedef struct _SbgLogEkfNavData
|
|
{
|
|
uint32_t timeStamp; /*!< Time in us since the sensor power up. */
|
|
float velocity[3]; /*!< North, East, Down velocity in m.s^-1. */
|
|
float velocityStdDev[3]; /*!< North, East, Down velocity 1 sigma standard deviation in m.s^-1. */
|
|
double position[3]; /*!< Latitude, Longitude in degrees positive North and East.
|
|
Altitude above Mean Sea Level in meters. */
|
|
float undulation; /*!< Altitude difference between the geoid and the Ellipsoid in meters (Height above Ellipsoid = altitude + undulation). */
|
|
float positionStdDev[3]; /*!< Latitude, longitude and altitude 1 sigma standard deviation in meters. */
|
|
uint32_t status; /*!< EKF solution status bitmask and enum. */
|
|
} SbgLogEkfNavData;
|
|
|
|
|
|
|
|
/*!
|
|
* Structure that stores data for the SBG_ECOM_LOG_UTC_TIME message.
|
|
*/
|
|
typedef struct _SbgLogUtcData
|
|
{
|
|
uint32_t timeStamp; /*!< Time in us since the sensor power up. */
|
|
uint16_t status; /*!< UTC time and clock status information */
|
|
uint16_t year; /*!< Year for example: 2013. */
|
|
int8_t month; /*!< Month in year [1 .. 12]. */
|
|
int8_t day; /*!< Day in month [1 .. 31]. */
|
|
int8_t hour; /*!< Hour in day [0 .. 23]. */
|
|
int8_t minute; /*!< Minute in hour [0 .. 59]. */
|
|
int8_t second; /*!< Second in minute [0 .. 60]. (60 is used only when a leap second is added) */
|
|
int32_t nanoSecond; /*!< Nanosecond of current second in ns. */
|
|
uint32_t gpsTimeOfWeek; /*!< GPS time of week in ms. */
|
|
} SbgLogUtcData;
|
|
|
|
/*!
|
|
* Structure that stores data for the SBG_ECOM_LOG_GPS#_POS message.
|
|
*/
|
|
typedef struct _SbgLogGpsPos
|
|
{
|
|
uint32_t timeStamp; /*!< Time in us since the sensor power up. */
|
|
uint32_t status; /*!< GPS position status, type and bitmask. */
|
|
uint32_t timeOfWeek; /*!< GPS time of week in ms. */
|
|
double latitude; /*!< Latitude in degrees, positive north. */
|
|
double longitude; /*!< Longitude in degrees, positive east. */
|
|
double altitude; /*!< Altitude above Mean Sea Level in meters. */
|
|
float undulation; /*!< Altitude difference between the geoid and the Ellipsoid in meters (Height above Ellipsoid = altitude + undulation). */
|
|
float latitudeAccuracy; /*!< 1 sigma latitude accuracy in meters. */
|
|
float longitudeAccuracy; /*!< 1 sigma longitude accuracy in meters. */
|
|
float altitudeAccuracy; /*!< 1 sigma altitude accuracy in meters. */
|
|
uint8_t numSvUsed; /*!< Number of space vehicles used to compute the solution (since version 1.4). */
|
|
uint16_t baseStationId; /*!< Base station id for differential corrections (0-4095). Set to 0xFFFF if differential corrections are not used (since version 1.4). */
|
|
uint16_t differentialAge; /*!< Differential correction age in 0.01 seconds. Set to 0XFFFF if differential corrections are not used (since version 1.4). */
|
|
} SbgLogGpsPos;
|
|
|
|
typedef union _SbgBinaryLogData
|
|
{
|
|
// SbgLogStatusData statusData; /*!< Stores data for the SBG_ECOM_LOG_STATUS message. */
|
|
// SbgLogImuData imuData; /*!< Stores data for the SBG_ECOM_LOG_IMU_DATA message. */
|
|
// SbgLogImuShort imuShort; /*!< Stores data for the SBG_ECOM_LOG_IMU_SHORT message. */
|
|
SbgLogEkfEulerData ekfEulerData; /*!< Stores data for the SBG_ECOM_LOG_EKF_EULER message. */
|
|
SbgLogEkfQuatData ekfQuatData; /*!< Stores data for the SBG_ECOM_LOG_EKF_QUAT message. */
|
|
SbgLogEkfNavData ekfNavData; /*!< Stores data for the SBG_ECOM_LOG_EKF_NAV message. */
|
|
// SbgLogShipMotionData shipMotionData; /*!< Stores data for the SBG_ECOM_LOG_SHIP_MOTION or SBG_ECOM_LOG_SHIP_MOTION_HP message. */
|
|
// SbgLogOdometerData odometerData; /*!< Stores data for the SBG_ECOM_LOG_ODO_VEL message. */
|
|
SbgLogUtcData utcData; /*!< Stores data for the SBG_ECOM_LOG_UTC_TIME message. */
|
|
SbgLogGpsPos gpsPosData; /*!< Stores data for the SBG_ECOM_LOG_GPS_POS message. */
|
|
// SbgLogGpsVel gpsVelData; /*!< Stores data for the SBG_ECOM_LOG_GPS#_VEL message. */
|
|
// SbgLogGpsHdt gpsHdtData; /*!< Stores data for the SBG_ECOM_LOG_GPS#_HDT message. */
|
|
// SbgLogGpsRaw gpsRawData; /*!< Stores data for the SBG_ECOM_LOG_GPS#_RAW message. */
|
|
// SbgLogMag magData; /*!< Stores data for the SBG_ECOM_LOG_MAG message. */
|
|
// SbgLogMagCalib magCalibData; /*!< Stores data for the SBG_ECOM_LOG_MAG_CALIB message. */
|
|
// SbgLogDvlData dvlData; /*!< Stores data for the SBG_ECOM_LOG_DVL_BOTTOM_TRACK message. */
|
|
// SbgLogAirData airData; /*!< Stores data for the SBG_ECOM_LOG_AIR_DATA message. */
|
|
// SbgLogUsblData usblData; /*!< Stores data for the SBG_ECOM_LOG_USBL message. */
|
|
// SbgLogDepth depthData; /*!< Stores data for the SBG_ECOM_LOG_DEPTH message */
|
|
// SbgLogEvent eventMarker; /*!< Stores data for the SBG_ECOM_LOG_EVENT_# message. */
|
|
// SbgLogDiagData diagData; /*!< Stores data for the SBG_ECOM_LOG_DIAG message. */
|
|
|
|
// /* Fast logs */
|
|
// SbgLogFastImuData fastImuData; /*!< Stores Fast Imu Data for 1KHz output */
|
|
} SbgBinaryLogData;
|
|
|
|
SbgErrorCode sbgEComBinaryLogParseEkfEulerData(SbgStreamBuffer *pInputStream, SbgLogEkfEulerData *pOutputData);
|
|
|
|
SbgErrorCode sbgEComBinaryLogParseUtcData(SbgStreamBuffer *pInputStream, SbgLogUtcData *pOutputData);
|
|
|
|
SbgErrorCode sbgEComBinaryLogParseGpsPosData(SbgStreamBuffer *pInputStream, SbgLogGpsPos *pOutputData);
|
|
|
|
}
|
|
|
|
#endif // SBGLOGPARSE_H
|