Commit d3509b52 authored by Pierre NARVOR's avatar Pierre NARVOR
Browse files

[driver] Added some print_utils and message definitions

parent 6d1e41e7
......@@ -8,6 +8,7 @@ message(STATUS "Boost location : ${Boost_INCLUDE_DIRS}")
list(APPEND seatrac_driver_headers
include/seatrac_driver/SeatracEnums.h
include/seatrac_driver/SeatracTypes.h
include/seatrac_driver/print_utils.h
include/seatrac_driver/SeatracSerial.h
include/seatrac_driver/SeatracDriver.h
)
......
......@@ -3,6 +3,7 @@
#include <seatrac_driver/SeatracTypes.h>
#include <seatrac_driver/SeatracSerial.h>
#include <seatrac_driver/messages/Messages.h>
namespace narval { namespace seatrac {
......
......@@ -2,6 +2,7 @@
#define _DEF_SEATRAC_DRIVER_SEATRAC_ENUMS_H_
#include <cstdint>
#include <iostream>
namespace narval { namespace seatrac {
......@@ -479,7 +480,208 @@ enum STATUSMODE_E : uint8_t {
// beacon processor may stall.
};
/**
* NAV_QUERY_E : NAV Protocol Query Bit Mask
*
* The NAV Protocol Query Flags type is defined as a bit-field stored in a
* uint8_t value, where one or more bits (flags) may be set to specify an overall
* numerical value.
*
*/
enum NAV_QUERY_E : uint8_t {
QRY_DEPTH = 0x01, // When set, a NAV_QUERY_SEND command will request
// that depth information is sent back, and a
// NAV_QUERY_RESP will contain depth data fields.
QRY_SUPPLY = 0x02, // When set, a NAV_QUERY_SEND command will request
// that supply voltage information is sent back, and a
// NAV_QUERY_RESP will contain supply voltage data
// fields.
QRY_TEMP = 0x04, // When set, a NAV_QUERY_SEND command will request
// that temperature information is sent back, and a
// NAV_QUERY_RESP will contain temperature data
// fields.
QRY_ATTITUDE = 0x08, // When set, a NAV_QUERY_SEND command will request
// that attitude information is sent back, and a
// NAV_QUERY_RESP will contain attitude data fields.
QRY_DATA = 0x80, // When set, a NAV_QUERY_SEND command will request
// that any queued pending NAV data should be sent
// back, and a NAV_QUERY_RESP will contain data
// payload fields.
};
/**
* STATUS_BITS_E : Status Fields Bit-Mask
*
* The Status Flags type is defined as a bit-field stored in a uint8_t value,
* where one or more bits (flags) may be set to specify an overall numerical
* value.
*/
enum STATUS_BITS_E : uint8_t {
ENVIRONMENT = 0x01, // When set, appends environmental sensor data
// fields (temperature, depth, VOS, supply voltage
// etc) to the end of the status output message.
ATTITUDE = 0x02, // When set, appends the AHRS attitude (yaw, pitch,
// roll) fields to the end of the status output
// message.
MAG_CAL = 0x04, // When set, appends magnetometer calibration and
// buffer fields to the end of the status output
// message.
ACC_CAL = 0x08, // When set, appends accelerometer calibration and
// limits fields to the end of the status output
// message.
AHRS_RAW_DATA = 0x10, // When set, appends raw sensor data fields to the
// end of the status output message.
AHRS_COMP_DATA = 0x20, // When set, appends compensated sensor data fields
// to the end of the status output message.
};
/**
* ENV_FLAGS_E : Used in SETTINGS_T type.
*/
enum ENV_FLAGS_E : uint8_t {
AUTO_VOS = 0x01, // When this flag is true, the velocity-of-sound
// used in range timing equations is
// automatically computed form the current water
// pressure, temperature and manually specified
// salinity. VOS is calculated using the Coppens
// 1981 equation where temperature is valid over
// 0°C to 45°C, salinity over 0ppt to 35ppt and
// depth over 0m to 4000m.
AUTO_PRESSURE_OFS = 0x02, // When this flag is true, the pressure offset is
// automatically chosen using the minimum
// observed pressure reading when the beacon is
// in less than 3m of water (0.3 bar). The
// assumption is than when fitted to an ROV this
// value will be seen on deck after the ROV is
// powered up, but if power is cycled when the
// beacon is below 3m, the pressure offset will
// not be updated.
};
/**
* AHRS_FLAGS_E : Used in SETTINGS_T type.
*/
enum AHRS_FLAGS_E : uint8_t {
AUTO_CAL_MAG = 0x01, // When this bit is true, automatic (dynamic)
// calibration of the magnetometer is enabled. In this
// mode, the magnetic field surrounding the beacon is
// continuously samples as the beacon is rotated
// through space, and every 30s a new calibration is
// attempted. If the results are better than the
// current calibration, then the new coefficientsi are
// accepted.
};
/**
* XCVR_FLAGS_E : Used in SETTINGS_T type.
*/
enum XCVR_FLAGS_E : uint8_t {
USBL_USE_AHRS = 0x01, // When this flag is true the acoustic
// transceiver will use the current AHRS
// attitude (updated internally at a 50Hz rate)
// when resolving relative positions of remote
// beacons to the local beacon. When the flag is
// false, the fixed attitude specified in the
// XCVR_YAW, XCVR_PITCH and XCVR_ROLL fields
// will be used.
XCVR_POSFLT_ENABLE = 0x02, // When this flag is true, the position filter
// is enabled to mark potentially erroneous
// acoustic USBL fixes based on velocity and
// angular movement limits.
XCVR_USBL_MSGS = 0x20, // When this flag is true, a CID_XCVR_USBL
// status message is generated on successfully
// reception of an acoustic message containing
// USBL signal information.
XCVR_FIX_MSGS = 0x40, // When this flag is true, a CID_XCVR_FIX status
// message will be generated on successful
// reception of an acoustic response message.
// The fix message contains details relating to
// distance, position and depth of the remote
// beacon.
XCVR_DIAG_MSGS = 0x80, // When this flag is true a series of diagnostic
// status messages will be generated by
// triggering events processed by the acoustic
// transceiver for further details see the
// following commands (CID_XCVR_TX_MSG,
// CID_XCVR_RX_ERR, CID_XCVR_RX_MSG,
// CID_XCVR_RX_REQ, CID_XCVR_RX_RESP,
// CID_XCVR_RX_RESP_ERROR,
// CID_XCVR_RX_UNHANDLED)
};
}; //namespace seatrac
}; //namespace narval
inline std::ostream& operator<<(std::ostream& os, narval::seatrac::CID_E cid)
{
using namespace narval::seatrac;
switch(cid) {
default: os << "Unknown CID : " << (uint8_t)cid; break;
case CID_SYS_ALIVE: os << "CID_SYS_ALIVE"; break;
case CID_SYS_INFO: os << "CID_SYS_INFO"; break;
case CID_SYS_REBOOT: os << "CID_SYS_REBOOT"; break;
case CID_SYS_ENGINEERING: os << "CID_SYS_ENGINEERING"; break;
case CID_PROG_INIT: os << "CID_PROG_INIT"; break;
case CID_PROG_BLOCK: os << "CID_PROG_BLOCK"; break;
case CID_PROG_UPDATE: os << "CID_PROG_UPDATE"; break;
case CID_STATUS: os << "CID_STATUS"; break;
case CID_STATUS_CFG_GET: os << "CID_STATUS_CFG_GET"; break;
case CID_STATUS_CFG_SET: os << "CID_STATUS_CFG_SET"; break;
case CID_SETTINGS_GET: os << "CID_SETTINGS_GET"; break;
case CID_SETTINGS_SET: os << "CID_SETTINGS_SET"; break;
case CID_SETTINGS_LOAD: os << "CID_SETTINGS_LOAD"; break;
case CID_SETTINGS_SAVE: os << "CID_SETTINGS_SAVE"; break;
case CID_SETTINGS_RESET: os << "CID_SETTINGS_RESET"; break;
case CID_CAL_ACTION: os << "CID_CAL_ACTION"; break;
case CID_AHRS_CAL_GET: os << "CID_AHRS_CAL_GET"; break;
case CID_AHRS_CAL_SET: os << "CID_AHRS_CAL_SET"; break;
case CID_XCVR_ANALYSE: os << "CID_XCVR_ANALYSE"; break;
case CID_XCVR_TX_MSG: os << "CID_XCVR_TX_MSG"; break;
case CID_XCVR_RX_ERR: os << "CID_XCVR_RX_ERR"; break;
case CID_XCVR_RX_MSG: os << "CID_XCVR_RX_MSG"; break;
case CID_XCVR_RX_REQ: os << "CID_XCVR_RX_REQ"; break;
case CID_XCVR_RX_RESP: os << "CID_XCVR_RX_RESP"; break;
case CID_XCVR_RX_UNHANDLED: os << "CID_XCVR_RX_UNHANDLED"; break;
case CID_XCVR_USBL: os << "CID_XCVR_USBL"; break;
case CID_XCVR_FIX: os << "CID_XCVR_FIX"; break;
case CID_XCVR_STATUS: os << "CID_XCVR_STATUS"; break;
case CID_PING_SEND: os << "CID_PING_SEND"; break;
case CID_PING_REQ: os << "CID_PING_REQ"; break;
case CID_PING_RESP: os << "CID_PING_RESP"; break;
case CID_PING_ERROR: os << "CID_PING_ERROR"; break;
case CID_ECHO_SEND: os << "CID_ECHO_SEND"; break;
case CID_ECHO_REQ: os << "CID_ECHO_REQ"; break;
case CID_ECHO_RESP: os << "CID_ECHO_RESP"; break;
case CID_ECHO_ERROR: os << "CID_ECHO_ERROR"; break;
case CID_NAV_QUERY_SEND: os << "CID_NAV_QUERY_SEND"; break;
case CID_NAV_QUERY_REQ: os << "CID_NAV_QUERY_REQ"; break;
case CID_NAV_QUERY_RESP: os << "CID_NAV_QUERY_RESP"; break;
case CID_NAV_ERROR: os << "CID_NAV_ERROR"; break;
case CID_NAV_QUEUE_SET: os << "CID_NAV_QUEUE_SET"; break;
case CID_NAV_QUEUE_CLR: os << "CID_NAV_QUEUE_CLR"; break;
case CID_NAV_QUEUE_STATUS: os << "CID_NAV_QUEUE_STATUS"; break;
case CID_NAV_STATUS_SEND: os << "CID_NAV_STATUS_SEND"; break;
case CID_NAV_STATUS_RECEIVE: os << "CID_NAV_STATUS_RECEIVE"; break;
case CID_DAT_SEND: os << "CID_DAT_SEND"; break;
case CID_DAT_RECEIVE: os << "CID_DAT_RECEIVE"; break;
case CID_DAT_ERROR: os << "CID_DAT_ERROR"; break;
case CID_DAT_QUEUE_SET: os << "CID_DAT_QUEUE_SET"; break;
case CID_DAT_QUEUE_CLR: os << "CID_DAT_QUEUE_CLR"; break;
case CID_DAT_QUEUE_STATUS: os << "CID_DAT_QUEUE_STATUS"; break;
}
return os;
}
inline std::ostream& operator<<(std::ostream& os, narval::seatrac::STATUS_BITS_E flags)
{
using namespace narval::seatrac;
os << "\n- ENVIRONMENT : " << ((ENVIRONMENT & flags) ? '1' : '0')
<< "\n- ATTITUDE : " << ((ATTITUDE & flags) ? '1' : '0')
<< "\n- MAG_CAL : " << ((MAG_CAL & flags) ? '1' : '0')
<< "\n- ACC_CAL : " << ((ACC_CAL & flags) ? '1' : '0')
<< "\n- AHRS_RAW_DATA : " << ((AHRS_RAW_DATA & flags) ? '1' : '0')
<< "\n- AHRS_COMP_DATA : " << ((AHRS_COMP_DATA & flags) ? '1' : '0');
return os;
}
#endif //_DEF_SEATRAC_DRIVER_SEATRAC_ENUMS_H_
......@@ -359,136 +359,6 @@ struct MACADDR_T {
};
};
/**
* NAV_QUERY_T : NAV Protocol Query Bit Mask
*
* The NAV Protocol Query Flags type is defined as a bit-field stored in a
* uint8_t value, where one or more bits (flags) may be set to specify an overall
* numerical value.
*
*/
enum NAV_QUERY_T : uint8_t {
QRY_DEPTH = 0x01, // When set, a NAV_QUERY_SEND command will request
// that depth information is sent back, and a
// NAV_QUERY_RESP will contain depth data fields.
QRY_SUPPLY = 0x02, // When set, a NAV_QUERY_SEND command will request
// that supply voltage information is sent back, and a
// NAV_QUERY_RESP will contain supply voltage data
// fields.
QRY_TEMP = 0x04, // When set, a NAV_QUERY_SEND command will request
// that temperature information is sent back, and a
// NAV_QUERY_RESP will contain temperature data
// fields.
QRY_ATTITUDE = 0x08, // When set, a NAV_QUERY_SEND command will request
// that attitude information is sent back, and a
// NAV_QUERY_RESP will contain attitude data fields.
QRY_DATA = 0x80, // When set, a NAV_QUERY_SEND command will request
// that any queued pending NAV data should be sent
// back, and a NAV_QUERY_RESP will contain data
// payload fields.
};
//using NAV_QUERY_T = uint8_t;
/**
* STATUS_BITS_T : Status Fields Bit-Mask
*
* The Status Flags type is defined as a bit-field stored in a uint8_t value,
* where one or more bits (flags) may be set to specify an overall numerical
* value.
*/
enum STATUS_BITS_T : uint8_t {
ENVIRONMENT = 0x01, // When set, appends environmental sensor data
// fields (temperature, depth, VOS, supply voltage
// etc) to the end of the status output message.
ATTITUDE = 0x02, // When set, appends the AHRS attitude (yaw, pitch,
// roll) fields to the end of the status output
// message.
MAG_CAL = 0x04, // When set, appends magnetometer calibration and
// buffer fields to the end of the status output
// message.
ACC_CAL = 0x08, // When set, appends accelerometer calibration and
// limits fields to the end of the status output
// message.
AHRS_RAW_DATA = 0x10, // When set, appends raw sensor data fields to the
// end of the status output message.
AHRS_COMP_DATA = 0x20, // When set, appends compensated sensor data fields
// to the end of the status output message.
};
/**
* ENV_FLAGS_E : Used in SETTINGS_T type.
*/
enum ENV_FLAGS_E : uint8_t {
AUTO_VOS = 0x01, // When this flag is true, the velocity-of-sound
// used in range timing equations is
// automatically computed form the current water
// pressure, temperature and manually specified
// salinity. VOS is calculated using the Coppens
// 1981 equation where temperature is valid over
// 0°C to 45°C, salinity over 0ppt to 35ppt and
// depth over 0m to 4000m.
AUTO_PRESSURE_OFS = 0x02, // When this flag is true, the pressure offset is
// automatically chosen using the minimum
// observed pressure reading when the beacon is
// in less than 3m of water (0.3 bar). The
// assumption is than when fitted to an ROV this
// value will be seen on deck after the ROV is
// powered up, but if power is cycled when the
// beacon is below 3m, the pressure offset will
// not be updated.
};
/**
* AHRS_FLAGS_E : Used in SETTINGS_T type.
*/
enum AHRS_FLAGS_E : uint8_t {
AUTO_CAL_MAG = 0x01, // When this bit is true, automatic (dynamic)
// calibration of the magnetometer is enabled. In this
// mode, the magnetic field surrounding the beacon is
// continuously samples as the beacon is rotated
// through space, and every 30s a new calibration is
// attempted. If the results are better than the
// current calibration, then the new coefficientsi are
// accepted.
};
/**
* XCVR_FLAGS_E : Used in SETTINGS_T type.
*/
enum XCVR_FLAGS_E : uint8_t {
USBL_USE_AHRS = 0x01, // When this flag is true the acoustic
// transceiver will use the current AHRS
// attitude (updated internally at a 50Hz rate)
// when resolving relative positions of remote
// beacons to the local beacon. When the flag is
// false, the fixed attitude specified in the
// XCVR_YAW, XCVR_PITCH and XCVR_ROLL fields
// will be used.
XCVR_POSFLT_ENABLE = 0x02, // When this flag is true, the position filter
// is enabled to mark potentially erroneous
// acoustic USBL fixes based on velocity and
// angular movement limits.
XCVR_USBL_MSGS = 0x20, // When this flag is true, a CID_XCVR_USBL
// status message is generated on successfully
// reception of an acoustic message containing
// USBL signal information.
XCVR_FIX_MSGS = 0x40, // When this flag is true, a CID_XCVR_FIX status
// message will be generated on successful
// reception of an acoustic response message.
// The fix message contains details relating to
// distance, position and depth of the remote
// beacon.
XCVR_DIAG_MSGS = 0x80, // When this flag is true a series of diagnostic
// status messages will be generated by
// triggering events processed by the acoustic
// transceiver for further details see the
// following commands (CID_XCVR_TX_MSG,
// CID_XCVR_RX_ERR, CID_XCVR_RX_MSG,
// CID_XCVR_RX_REQ, CID_XCVR_RX_RESP,
// CID_XCVR_RX_RESP_ERROR,
// CID_XCVR_RX_UNHANDLED)
};
/**
* SETTINGS_T : Settings Record Structure
*
......@@ -505,7 +375,7 @@ struct SETTINGS_T {
STATUSMODE_E statusFlags; // Value containing flags that control the
// generation and output CID_STATUS of
// messages.
STATUS_BITS_T status_output; // A bit-mask specifying which information
STATUS_BITS_E status_output; // A bit-mask specifying which information
// should be included in generated status
// output messages. For each bit set in this
// mask, a corresponding group of output
......
#ifndef _DEF_SEATRAC_DRIVER_MESSAGES_MESSAGE_BASE_H_
#define _DEF_SEATRAC_DRIVER_MESSAGES_MESSAGE_BASE_H_
#include <seatrac_driver/SeatracTypes.h>
namespace narval { namespace seatrac { namespace messages {
struct Message
{
CID_E cmdId;
};
}; //namespace messages
}; //namespace seatrac
}; //namespace narval
inline std::ostream& operator<<(std::ostream& os, const narval::seatrac::messages::Message& msg)
{
os << "Message :\n- cmdId : " << msg.cmdId;
return os;
}
#endif //_DEF_SEATRAC_DRIVER_MESSAGES_MESSAGE_BASE_H_
#ifndef _DEF_SEATRAC_DRIVER_MESSAGES_MESSAGES_H_
#define _DEF_SEATRAC_DRIVER_MESSAGES_MESSAGES_H_
#include <seatrac_driver/messages/MessageBase.h>
#include <seatrac_driver/messages/Status.h>
#endif //_DEF_SEATRAC_DRIVER_MESSAGES_MESSAGES_H_
#ifndef _DEF_SEATRAC_DRIVER_MESSAGES_STATUS_H_
#define _DEF_SEATRAC_DRIVER_MESSAGES_STATUS_H_
#include <seatrac_driver/SeatracTypes.h>
#include <seatrac_driver/messages/MessageBase.h>
namespace narval { namespace seatrac { namespace messages {
struct Status : public Message
{
STATUS_BITS_E contentType;
uint64_t timestamp;
};
/**
* Environmental Fields.
*
* If the Status.contentType field contains the ENVIRONMENT bit (see
* STATUS_BITS_T), then the following fields are sequentially appended to the
* message.
*/
struct StatusEnvironment {
uint16_t envSupply; // The beacons supply voltage. Values are encoded in
// milli-volts, so divide by 1000 for a value in
// Volts.
int16_t envTemp; // The temperature of air/water in contact with the
// diaphragm of the pressure sensor. Values are
// encoded in deci-Celsius, so divide by 10 to obtain
// a value in Celsius.
int32_t envPressure; // The external pressure measured on the diaphragm of
// the pressure sensor. Values are encoded in
// milli-bars, so divide by 1000 to obtain a value in
// Bar. Please note, the specification of pressure
// reading is 0.5% of the sensors full-scale value, so
// for a 200 Bar sensor the tolerance applicable to
// this value is ±1 Bar (~10m).
int32_t envDepth; // The computed depth based on the measured
// environmental pressure. Values are encoded in
// deci-metres, so divide by 10 for a value in metres.
uint16_t envVos; // The value of Velocity-of-Sound currently being used
// for computing ranges. This may be either the
// manually specified VOS from settings, or the
// auto-computed value based on pressure, temperature
// and salinity. Values are encoded in
// deci-metres-per-second, so divide by 10 to obtain a
// value in metres-per-second.
};
/**
* Attitude Fields
*
* If Status.contentType contains the ATTITUDE bit (see STATUS_BITS_T), then
* the following fields are sequentially appended to the message.
*/
struct StatusAttitude {
int16_t attYaw; // The current Yaw angle of the beacon, relative to
// magnetic north, measured by the beacons AHRS system.
// Values are encoded as deci-degrees, so divide the
// value by 10 to obtain a value in degrees.
int16_t attPitch; // The current Pitch angle of the beacon, relative to
// magnetic north, measured by the beacons AHRS system.
// Values are encoded as deci-degrees, so divide the
// value by 10 to obtain a value in degrees.
int16_t attRoll; // The current Roll angle of the beacon, relative to
// magnetic north, measured by the beacons AHRS system.
// Values are encoded as deci-degrees, so divide the
// value by 10 to obtain a value in degrees.
};
/**
* Magnetometer Calibration and Status Fields
*
* If Status.contentType contains the MAG_CAL bit (see STATUS_BITS_T), then the
* following fields are sequentially appended to the message record. These
* fields are commonly used to monitor the current magnetic calibration state
* and to assist with the magnetometer calibration procedure.
*/
struct StatusMagCalibration {
uint8_t magCalBuf; // Value that indicates how full the data buffer is
// that holds magnetometer values describing the
// surrounding magnetic environment. Values are encoded
// as a percentage from 0 to 100 representing empty
// (where no magnetic calibration is possible) to full
// (where the best magnetic calibration can be
// computed).
bool magCalValid; // The flag is True if a magnetic calibration has been
// computed and is currently in use, compensating
// magnetometer readings.
uint32_t magCalAge; // The number of seconds that have elapsed since the
// magnetometer calibration was last computed. When
// dynamic calibration is enabled, and there is
// sufficient data in the magnetic calibration buffer,
// then calibrations should be computed every 30
// seconds.
uint8_t magCalFit; // Value indicating how well the current magnetometer
// calibration can fit the measured data to an ideal
// "sphere" (or perfect calibration). Values are
// encoded as a percentage from 0 to 100.
};
/**
* Accelerometer Calibration Fields
*
* If Status.contentType contains the ACC_CAL bit (see STATUS_BITS_T), then the
* following fields are sequentially appended to the message record. The
* fields are commonly used to assist in calibrating the accelerometer
* hardware.
*/
struct StatusAccCalibration {
int16_t accLimMinX; // Value that holds the raw accelerometer sensor value
// that will be used to represent -1G on the X sensor
// axis.
int16_t accLimMinY; // Value that holds the raw accelerometer sensor value
// that will be used to represent +1G on the X sensor
// axis.
int16_t accLimMinZ; // Value that holds the raw accelerometer sensor value
// that will be used to represent -1G on the Y sensor
// axis.
int16_t accLimMaxX; // Value that holds the raw accelerometer sensor value
// that will be used to represent +1G on the Y sensor
// axis.
int16_t accLimMaxY; // Value that holds the raw accelerometer sensor value
// that will be used to represent -1G on the Z sensor
// axis.
int16_t accLimMaxZ; // Value that holds the raw accelerometer sensor value
// that will be used to represent +1G on the Z sensor
// axis.
};
/**
* Raw AHRS Sensor Data Fields
*
* If Status.contentType contains the AHRS_RAW_DATA bit (see STATUS_BITS_T),
* then the following fields are sequentially appended to the message record.
*
* Values are sampled internally by the AHRS at a rate of 50Hz.
*/
struct StatusRawAHRS {
int16_t ahrsRawAccX; // The last raw accelerometer sensor value measured
// on the X-axis. This field is used during
// functional testing and can be used to assist with
// the accelerometer calibration procedure. Computing
// a ratio between this value and the -1G to +1G
// interval (specified by the ACC_LIM_MIN_X and
// ACC_LIM_MAX_X values), gives the current
// gravitation acceleration seen on the sensor axis.
int16_t ahrsRawAccY; // The last raw accelerometer sensor value measured
// on the Y-axis. This field is used during
// functional testing and can be used to assist with
// the accelerometer calibration procedure. Computing
// a ratio between this value and the -1G to +1G
// interval (specified by the ACC_LIM_MIN_Y and
// ACC_LIM_MAX_Y values), gives the current
// gravitation acceleration seen on the sensor axis.
int16_t ahrsRawAccZ; // The last raw accelerometer sensor value measured
// on the Z-axis. This field is used during
// functional testing and can be used to assist with
// the accelerometer calibration procedure. Computing
// a ratio between this value and the -1G to +1G
// interval (specified by the ACC_LIM_MIN_Z and
// ACC_LIM_MAX_Z values), gives the current
// gravitation acceleration seen on the sensor axis.
int16_t ahrsRawMagX; // The last raw magnetometer sensor value measure on
// the X-axis. This field is used during functional
// testing and can be used to assist with the
// magnetometer calibration procedure (in conjunction
// with the accelerometer orientation value).
int16_t ahrsRawMagY; // The last raw magnetometer sensor value measure on
// the Y-axis. This field is used during functional
// testing and can be used to assist with the
// magnetometer calibration procedure (in conjunction
// with the accelerometer orientation value).
int16_t ahrsRawMagZ; // The last raw magnetometer sensor value measure on
// the Z-axis. This field is used during functional
// testing and can be used to assist with the
// magnetometer calibration procedure (in conjunction
// with the accelerometer orientation value).
int16_t ahrsRawGyroX; // The last raw rate of rotation measured around the
// X-axis of the gyroscope sensor. Values are encoded
// in degrees-per-second.
int16_t ahrsRawGyroY; // The last raw rate of rotation measured around the
// Y-axis of the gyroscope sensor. Values are encoded
// in degrees-per-second.
int16_t ahrsRawGyroZ; // The last raw rate of rotation measured around the
// Z-axis of the gyroscope sensor. Values are encoded
// in degrees-per-second.
};
}; //namespace messages
}; //namespace seatrac
}; //namespace narval
inline std::ostream& operator<<(std::ostream& os, const narval::seatrac::messages::Status& msg)