Program Listing for File raw_data_pa.hpp

Return to documentation for file (/tmp/ws/src/ublox/ublox_gps/include/ublox_gps/raw_data_pa.hpp)

//==============================================================================
// Copyright (c) 2019, Peter Weissig, TU Chemnitz
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of the Flight Systems and Automatic Control group,
//       TU Darmstadt, nor the names of its contributors may be used to
//       endorse or promote products derived from this software without
//       specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//==============================================================================

// This file is an addon from TUC-ProAut (https://github.com/TUC-ProAut/).
// It was created to log all data from the ublox to a logfile and to publish
// the data as ros messages. This is used by our group to also evaluate the
// measured data with the rtklib.


#ifndef UBLOX_GPS_RAW_DATA_PA_HPP
#define UBLOX_GPS_RAW_DATA_PA_HPP

// STL
#include <fstream>
#include <string>

// ROS includes
#include <rclcpp/rclcpp.hpp>

// ROS messages
#include <std_msgs/msg/u_int8_multi_array.hpp>

namespace ublox_node {

class RawDataStreamPa final : public rclcpp::Node {
 public:

  explicit RawDataStreamPa(bool is_ros_subscriber = false);

  void getRosParams();

  bool isEnabled();

  void initialize();

  void ubloxCallback(const unsigned char* data,
                     std::size_t size);

 private:
  void msgCallback(const std_msgs::msg::UInt8MultiArray::SharedPtr msg);

  std_msgs::msg::UInt8MultiArray str2uint8(const std::string & str);

  void publishMsg(const std::string & str);

  void saveToFile(const std::string & str);

  std::string file_dir_;
  std::string file_name_;
  std::ofstream file_handle_;

  bool flag_publish_;

  bool is_ros_subscriber_;

  rclcpp::Publisher<std_msgs::msg::UInt8MultiArray>::SharedPtr raw_pub_;
  rclcpp::Subscription<std_msgs::msg::UInt8MultiArray>::SharedPtr raw_data_stream_sub_;
};

}  // namespace ublox_node

#endif