Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Pierre NARVOR
seatrac_driver
Commits
d3509b52
Commit
d3509b52
authored
Jul 12, 2021
by
Pierre NARVOR
Browse files
[driver] Added some print_utils and message definitions
parent
6d1e41e7
Changes
9
Hide whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
d3509b52
...
...
@@ -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
)
...
...
include/seatrac_driver/SeatracDriver.h
View file @
d3509b52
...
...
@@ -3,6 +3,7 @@
#include <seatrac_driver/SeatracTypes.h>
#include <seatrac_driver/SeatracSerial.h>
#include <seatrac_driver/messages/Messages.h>
namespace
narval
{
namespace
seatrac
{
...
...
include/seatrac_driver/SeatracEnums.h
View file @
d3509b52
...
...
@@ -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_
include/seatrac_driver/SeatracTypes.h
View file @
d3509b52
...
...
@@ -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
...
...
include/seatrac_driver/messages/MessageBase.h
0 → 100644
View file @
d3509b52
#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_
include/seatrac_driver/messages/Messages.h
0 → 100644
View file @
d3509b52
#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_
include/seatrac_driver/messages/Status.h
0 → 100644
View file @
d3509b52
#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
)