Program Listing for File sbg_device.h
↰ Return to documentation for file (include/sbg_driver/sbg_device.h)
#ifndef SBG_ROS_SBG_DEVICE_H
#define SBG_ROS_SBG_DEVICE_H
// Standard headers
#include <iostream>
#include <map>
#include <string>
// ROS headers
#include <std_srvs/srv/set_bool.hpp>
#include <std_srvs/srv/trigger.hpp>
#include <rtcm_msgs/msg/message.hpp>
// Project headers
#include <config_applier.h>
#include <config_store.h>
#include <message_publisher.h>
namespace sbg
{
class SbgDevice
{
private:
//---------------------------------------------------------------------//
//- Static members definition -//
//---------------------------------------------------------------------//
static std::map<SbgEComMagCalibQuality, std::string> g_mag_calib_quality_;
static std::map<SbgEComMagCalibConfidence, std::string> g_mag_calib_confidence_;
static std::map<SbgEComMagCalibMode, std::string> g_mag_calib_mode_;
static std::map<SbgEComMagCalibBandwidth, std::string> g_mag_calib_bandwidth_;
//---------------------------------------------------------------------//
//- Private variables -//
//---------------------------------------------------------------------//
SbgEComHandle com_handle_;
SbgInterface sbg_interface_;
rclcpp::Node& ref_node_;
MessagePublisher message_publisher_;
ConfigStore config_store_;
uint32_t rate_frequency_;
bool mag_calibration_ongoing_;
bool mag_calibration_done_;
SbgEComMagCalibResults mag_calib_results_;
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr calib_service_;
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr calib_save_service_;
rclcpp::Subscription<rtcm_msgs::msg::Message>::SharedPtr rtcm_sub_;
//---------------------------------------------------------------------//
//- Private methods -//
//---------------------------------------------------------------------//
static SbgErrorCode onLogReceivedCallback(SbgEComHandle* p_handle, SbgEComClass msg_class, SbgEComMsgId msg, const SbgEComLogUnion* p_log_data, void* p_user_arg);
void onLogReceived(SbgEComClass msg_class, SbgEComMsgId msg, const SbgEComLogUnion& ref_sbg_data);
void loadParameters();
void connect();
void readDeviceInfo();
std::string getVersionAsString(uint32_t sbg_version_enc) const;
void initPublishers();
void initSubscribers();
void configure();
bool processMagCalibration(const std::shared_ptr<std_srvs::srv::Trigger::Request> ref_ros_request, std::shared_ptr<std_srvs::srv::Trigger::Response> ref_ros_response);
bool saveMagCalibration(const std::shared_ptr<std_srvs::srv::Trigger::Request> ref_ros_request, std::shared_ptr<std_srvs::srv::Trigger::Response> ref_ros_response);
bool startMagCalibration();
bool endMagCalibration();
bool uploadMagCalibrationToDevice();
void displayMagCalibrationStatusResult() const;
void exportMagCalibrationResults() const;
void writeRtcmMessageToDevice(const rtcm_msgs::msg::Message::SharedPtr msg);
public:
//---------------------------------------------------------------------//
//- Constructor -//
//---------------------------------------------------------------------//
SbgDevice(rclcpp::Node& ref_node_handle);
~SbgDevice();
//---------------------------------------------------------------------//
//- Parameters -//
//---------------------------------------------------------------------//
uint32_t getUpdateFrequency() const;
//---------------------------------------------------------------------//
//- Public methods -//
//---------------------------------------------------------------------//
void initDeviceForReceivingData();
void initDeviceForMagCalibration();
void periodicHandle();
};
}
#endif // SBG_ROS_SBG_DEVICE_H