Program Listing for File sick_safevisionary.hpp

Return to documentation for file (include/sick_safevisionary_driver/sick_safevisionary.hpp)

// -- BEGIN LICENSE BLOCK -----------------------------------------------------
// -- END LICENSE BLOCK -------------------------------------------------------

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------

#ifndef SICK_SAFE_VISIONARY_HPP_INCLUDED
#define SICK_SAFE_VISIONARY_HPP_INCLUDED

#include <boost/lockfree/policies.hpp>
#include <boost/lockfree/spsc_queue.hpp>
#include <memory>
#include <thread>

#include "rclcpp/rclcpp.hpp"
#include "rclcpp_lifecycle/lifecycle_node.hpp"
#include "sick_safevisionary_base/SafeVisionaryData.h"
#include "sick_safevisionary_base/SafeVisionaryDataStream.h"
#include "sick_safevisionary_driver/compound_publisher.hpp"

namespace sick
{
class SickSafeVisionary : public rclcpp_lifecycle::LifecycleNode
{
public:
  SickSafeVisionary() : LifecycleNode("sick_safevisionary") {}

  using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn;

  CallbackReturn on_configure(const rclcpp_lifecycle::State & previous_state) override;

  CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override;

  CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override;

  CallbackReturn on_cleanup(const rclcpp_lifecycle::State & previous_state) override;

  CallbackReturn on_shutdown(const rclcpp_lifecycle::State & previous_state) override;

private:
  void reset();

  std::shared_ptr<visionary::SafeVisionaryData> data_handle_;
  std::shared_ptr<visionary::SafeVisionaryDataStream> data_stream_;
  std::thread receive_thread_;
  std::thread publish_thread_;
  boost::lockfree::spsc_queue<visionary::SafeVisionaryData, boost::lockfree::capacity<10>>
    spsc_queue_;
  std::atomic<bool> continue_{false};

  std::unique_ptr<CompoundPublisher> data_publisher_;
};
}  // namespace sick

#endif