DUNE: Uniform Navigational Environment  2024.09.0
Sensors::Microstrain3DMGX3::Task Struct Reference

Detailed Description

Microstrain3DMGX3 software driver.

Public Member Functions

 Task (const std::string &name, Tasks::Context &ctx)
 
void onUpdateParameters (void)
 
bool onConnect () override
 
void onDisconnect () override
 
bool onSynchronize () override
 
void onInitializeDevice () override
 
bool resetUart ()
 
void consume (const IMC::MagneticField *msg)
 
bool poll (Commands cmd, Sizes cmd_size, uint16_t addr, uint16_t value)
 
bool listen (Commands cmd, Sizes cmd_size)
 
bool validateChecksum (const uint8_t *bfr, unsigned bfr_len)
 
void runCalibration (void)
 
bool isCalibrated (void)
 
void resetDevice (void)
 
void requestCalibration (uint16_t addr)
 
bool setHardIron (void)
 
void calibrate (uint16_t addr, uint16_t value)
 
void rotateData (void)
 
void reportEntityState (void)
 
bool onReadData () override
 

Public Attributes

unsigned m_min_read
 
Math::Matrix m_rotation
 
float m_hard_iron [3]
 
SerialPort * m_uart
 
IMC::EulerAngles m_euler
 
IMC::Acceleration m_accel
 
IMC::AngularVelocity m_agvel
 
IMC::MagneticField m_magfield
 
Time::Counter< float > m_timer
 
uint8_t m_bfr [c_bfr_size]
 
uint16_t m_addr [c_num_addr]
 
double m_tstamp
 
Counter< double > m_wdog
 
Counter< double > m_state_timer
 
size_t m_sample_count
 
size_t m_faults_count
 
size_t m_timeout_count
 
Arguments m_args
 

Static Public Attributes

static const unsigned c_bfr_size
 
static const unsigned c_num_addr
 
static const uint16_t c_mag_addr
 

Constructor & Destructor Documentation

◆ Task()

Member Function Documentation

◆ calibrate()

void Sensors::Microstrain3DMGX3::Task::calibrate ( uint16_t  addr,
uint16_t  value 
)
inline

Send calibration frame to the device.

Parameters
[in]addrEEPROM address.
[in]valuenew calibration value.

References Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM.

◆ consume()

void Sensors::Microstrain3DMGX3::Task::consume ( const IMC::MagneticField *  msg)
inline

◆ isCalibrated()

bool Sensors::Microstrain3DMGX3::Task::isCalibrated ( void  )
inline

Check if sensor has the same hard iron calibration parameters.

Returns
true if the parameters are the same, false otherwise.

References Sensors::Microstrain3DMGX3::CMD_READ_EEPROM, Sensors::Microstrain3DMGX3::CMD_READ_EEPROM_SIZE, and Sensors::Microstrain3DMGX3::Arguments::hard_iron.

◆ listen()

bool Sensors::Microstrain3DMGX3::Task::listen ( Commands  cmd,
Sizes  cmd_size 
)
inline

Listen for responses.

Parameters
[in]cmdcommand char.
[in]cmd_sizeexpected frame response size.
Returns
true if communication successful, false otherwise.

◆ onConnect()

bool Sensors::Microstrain3DMGX3::Task::onConnect ( void  )
inlineoverride

Try to connect to the device.

Returns
true if connection was established, false otherwise.

References Sensors::Microstrain3DMGX3::Arguments::io_dev.

◆ onDisconnect()

void Sensors::Microstrain3DMGX3::Task::onDisconnect ( void  )
inlineoverride

Disconnect from device.

◆ onInitializeDevice()

void Sensors::Microstrain3DMGX3::Task::onInitializeDevice ( void  )
inlineoverride

◆ onReadData()

bool Sensors::Microstrain3DMGX3::Task::onReadData ( void  )
inlineoverride

Get data from device.

Returns
true if data was received, false otherwise.

References Sensors::Microstrain3DMGX3::CMD_DATA, Sensors::Microstrain3DMGX3::CMD_DATA_SIZE, and DUNE::Math::transpose().

◆ onSynchronize()

bool Sensors::Microstrain3DMGX3::Task::onSynchronize ( void  )
inlineoverride

◆ onUpdateParameters()

◆ poll()

bool Sensors::Microstrain3DMGX3::Task::poll ( Commands  cmd,
Sizes  cmd_size,
uint16_t  addr,
uint16_t  value 
)
inline

Send commands to the device.

Parameters
[in]cmdcommand char.
[in]cmd_sizeexpected frame response size.
[in]addraddress.
[in]valuevalue to be assigned.
Returns
true if communication successful, false otherwise.

References Sensors::Microstrain3DMGX3::CMD_DATA, Sensors::Microstrain3DMGX3::CMD_DEVICE_RESET, Sensors::Microstrain3DMGX3::CMD_FWARE_VERSION, Sensors::Microstrain3DMGX3::CMD_READ_EEPROM, and Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM.

◆ reportEntityState()

void Sensors::Microstrain3DMGX3::Task::reportEntityState ( void  )
inline

◆ requestCalibration()

void Sensors::Microstrain3DMGX3::Task::requestCalibration ( uint16_t  addr)
inline

Request calibration parameters from device.

Parameters
[in]addraddress.

References Sensors::Microstrain3DMGX3::CMD_READ_EEPROM.

◆ resetDevice()

void Sensors::Microstrain3DMGX3::Task::resetDevice ( void  )
inline

Soft-reset device.

References Sensors::Microstrain3DMGX3::CMD_DEVICE_RESET.

◆ resetUart()

bool Sensors::Microstrain3DMGX3::Task::resetUart ( )
inline

◆ rotateData()

void Sensors::Microstrain3DMGX3::Task::rotateData ( void  )
inline

Correct data according with mounting position.

◆ runCalibration()

void Sensors::Microstrain3DMGX3::Task::runCalibration ( void  )
inline

◆ setHardIron()

bool Sensors::Microstrain3DMGX3::Task::setHardIron ( void  )
inline

Set new hard iron calibration parameters.

Returns
true if successful, false otherwise.

References Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM, Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM_SIZE, and Sensors::Microstrain3DMGX3::Arguments::hard_iron.

◆ validateChecksum()

bool Sensors::Microstrain3DMGX3::Task::validateChecksum ( const uint8_t *  bfr,
unsigned  bfr_len 
)
inline

Validate response checksum.

Parameters
[in]bfrbuffer to be validated.
[in]bfr_lenlength of the buffer.
Returns
true if checksum validated, false otherwise.

Member Data Documentation

◆ c_bfr_size

const unsigned Sensors::Microstrain3DMGX3::Task::c_bfr_size
static

Internal read buffer.

◆ c_mag_addr

const uint16_t Sensors::Microstrain3DMGX3::Task::c_mag_addr
static

Magnetic calibration initial address.

◆ c_num_addr

const unsigned Sensors::Microstrain3DMGX3::Task::c_num_addr
static

Number of addresses for magnetic calibration.

◆ m_accel

IMC::Acceleration Sensors::Microstrain3DMGX3::Task::m_accel

Acceleration message.

◆ m_addr

uint16_t Sensors::Microstrain3DMGX3::Task::m_addr[c_num_addr]

Magnetic Calibration addresses.

◆ m_agvel

IMC::AngularVelocity Sensors::Microstrain3DMGX3::Task::m_agvel

Angular velocity message.

◆ m_args

Arguments Sensors::Microstrain3DMGX3::Task::m_args

Task arguments.

◆ m_bfr

uint8_t Sensors::Microstrain3DMGX3::Task::m_bfr[c_bfr_size]

Internal read buffer.

◆ m_euler

IMC::EulerAngles Sensors::Microstrain3DMGX3::Task::m_euler

Euler angles message.

◆ m_faults_count

size_t Sensors::Microstrain3DMGX3::Task::m_faults_count

Faults count.

◆ m_hard_iron

float Sensors::Microstrain3DMGX3::Task::m_hard_iron[3]

Rotated calibration parameters.

◆ m_magfield

IMC::MagneticField Sensors::Microstrain3DMGX3::Task::m_magfield

Magnetometer Vector message.

◆ m_min_read

unsigned Sensors::Microstrain3DMGX3::Task::m_min_read

Minimum Read Bytes.

◆ m_rotation

Math::Matrix Sensors::Microstrain3DMGX3::Task::m_rotation

Rotation Matrix to correct mounting position.

◆ m_sample_count

size_t Sensors::Microstrain3DMGX3::Task::m_sample_count

Sample count.

◆ m_state_timer

Counter<double> Sensors::Microstrain3DMGX3::Task::m_state_timer

Entity state timer.

◆ m_timeout_count

size_t Sensors::Microstrain3DMGX3::Task::m_timeout_count

Timeout count.

◆ m_timer

Time::Counter<float> Sensors::Microstrain3DMGX3::Task::m_timer

Timer to wait for soft-reset without issuing error.

◆ m_tstamp

double Sensors::Microstrain3DMGX3::Task::m_tstamp

Read timestamp.

◆ m_uart

SerialPort* Sensors::Microstrain3DMGX3::Task::m_uart

Serial port.

◆ m_wdog

Counter<double> Sensors::Microstrain3DMGX3::Task::m_wdog

Watchdog.

Collaboration diagram for Sensors::Microstrain3DMGX3::Task:
Collaboration graph