.. _program_listing_file_include_stcamera_base.hpp: Program Listing for File stcamera_base.hpp ========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/stcamera_base.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /****************************************************************************** * Software License Agreement (BSD License) * * Copyright (C) 2023, OMRON SENTECH. 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 names of OMRON SENTECH 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 OWNER OR CONTRIBUTORS 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. *****************************************************************************/ #ifndef STCAMERA_BASE_HPP #define STCAMERA_BASE_HPP #include #include #include "stcamera_components/stheader.hpp" #include "stcamera_components/stcamera_msgs.hpp" namespace stcamera { class CStCameraBase : public rclcpp::Node { public: CStCameraBase(const std::string & camera_name_space, const rclcpp::NodeOptions & options = rclcpp::NodeOptions()); CStCameraBase(const std::string & camera_name_space, const std::string & name_space, const rclcpp::NodeOptions & options = rclcpp::NodeOptions()); virtual ~CStCameraBase(); void init(); protected: const std::string camera_name_space_; rclcpp::Subscription::SharedPtr image_subscriber_; rclcpp::Subscription::SharedPtr chunk_subscriber_; rclcpp::Subscription::SharedPtr event_subscriber_; int sent_triggers_; rclcpp::TimerBase::SharedPtr trigger_timer_; protected: template EOSError_t readNodeValue(const std::string &genicam_module, const std::string &genicam_node, value_t &value, const std::string &service_name); template EOSError_t writeNodeValue(const std::string &genicam_module, const std::string &genicam_node, value_t &value, const std::string &service_name); public: //Services EOSError_t enableChunk(const std::string &chunk_name, bool value); // EnableChunk.srv EOSError_t enableEventAcquisition(const std::string &genicam_module, bool value); // EnableEventAcquisition.srv EOSError_t enableEventNode(const std::string &genicam_module, const std::string &genicam_event, const std::string &genicam_node, bool value, const std::string &topic = ""); // EnableEventNode.srv EOSError_t enableImageAcquisition(bool value); // EnableImageAcquisition.srv EOSError_t enableTrigger(const std::string &trigger_selector, const std::string &trigger_source, bool enabled, double delay = 0); // EnableTrigger.srv EOSError_t executeNode(const std::string &genicam_module, const std::string &genicam_node); // ExecuteNode.srv EOSError_t getChunkList(std::vector &chunk_name_list, std::vector &chunk_enabled_list); // GetChunkList.srv EOSError_t getEnumList(const std::string &genicam_module, const std::string &genicam_node, std::vector &enum_value_str_list, std::vector &enum_node_list, std::vector &enum_value_int_list); // GetEnumList.srv EOSError_t getEventAcquisitionStatusList(std::vector &genicam_module_list, std::vector &enabled_list); // GetEventAcquisitionStatusList.srv EOSError_t getEventNodeStatusList(const std::string &genicam_module, std::vector &event_node_list); // GetEventNodeStatusList.srv EOSError_t getGenICamNodeInfo(const std::string &genicam_module, const std::string &genicam_node, stcamera_msgs::srv::GetGenICamNodeInfo::Response &res); // GetGenICamNodeInfo.srv EOSError_t getImageAcquisitionStatus(bool &value); // GetImageAcquisitionStatus.srv EOSError_t getTriggerList(std::vector &trigger_selector_list, std::vector &trigger_mode_list, std::vector &trigger_source_list, std::vector &trigger_delayus_list); // GetTriggerList.srv EOSError_t readNode(const std::string &genicam_module, const std::string &genicam_node, std::string &value, std::string &interface_type); // ReadNode.srv EOSError_t readNodeBool(const std::string &genicam_module, const std::string &genicam_node, bool &value); // ReadNodeBool.srv EOSError_t readNodeEnum(const std::string &genicam_module, const std::string &genicam_node, std::string &value_str, int64_t &value_int); // ReadNodeEnum.srv EOSError_t readNodeFloat(const std::string &genicam_module, const std::string &genicam_node, double &value); // ReadNodeFloat.srv EOSError_t readNodeInt(const std::string &genicam_module, const std::string &genicam_node, int64_t &value); // ReadNodeInt.srv EOSError_t readNodePort(const std::string &genicam_module, const std::string &genicam_node, int64_t address, int64_t length, std::vector &data); // ReadNodePort.srv EOSError_t readNodeRegister(const std::string &genicam_module, const std::string &genicam_node, int64_t length, std::vector &data); // ReadNodeRegister.srv EOSError_t readNodeRegisterInfo(const std::string &genicam_module, const std::string &genicam_node, int64_t &address, int64_t &length); // ReadNodeRegisterInfo.srv EOSError_t readNodeString(const std::string &genicam_module, const std::string &genicam_node, std::string &value); // ReadNodeString.srv EOSError_t sendSoftTrigger(std::shared_ptr nh, const std::string &trigger_selector); // SendSoftTrigger.srv EOSError_t writeNode(const std::string &genicam_module, const std::string &genicam_node, const std::string &value); // WriteNode.srv EOSError_t writeNodeBool(const std::string &genicam_module, const std::string &genicam_node, bool value); // WriteNodeBool.srv EOSError_t writeNodeEnumInt(const std::string &genicam_module, const std::string &genicam_node, int64_t value); // WriteNodeEnumInt.srv EOSError_t writeNodeEnumStr(const std::string &genicam_module, const std::string &genicam_node, const std::string &value); // WriteNodeEnumStr.srv EOSError_t writeNodeFloat(const std::string &genicam_module, const std::string &genicam_node, double value); // WriteNodeFloat.srv EOSError_t writeNodeInt(const std::string &genicam_module, const std::string &genicam_node, int64_t value); // WriteNodeInt.srv EOSError_t writeNodePort(const std::string &genicam_module, const std::string &genicam_node, int64_t address, int64_t length, const std::vector &data); // WriteNodePort.srv EOSError_t writeNodeRegister(const std::string &genicam_module, const std::string &genicam_node, int64_t length, const std::vector &data); // WriteNodeRegister.srv EOSError_t writeNodeString(const std::string &genicam_module, const std::string &genicam_node, const std::string &value); // WriteNodeString.srv public: EOSError_t readNodeFloatRange(const std::string &genicam_module, const std::string &genicam_node, double &value_min, double &value_max); EOSError_t readNodeIntRange(const std::string &genicam_module, const std::string &genicam_node, int64_t &value_min, int64_t &value_max); // Set the status of image acquisition EOSError_t setImageAcquisition(bool enabled); public: // Image callback void imageCallback(sensor_msgs::msg::Image::SharedPtr msg) { onRcvImage(msg); } // Chunk callback void chunkCallback(stcamera_msgs::msg::Chunk::SharedPtr msg) { onRcvChunk(msg); } // Event callback void eventCallback(stcamera_msgs::msg::Event::SharedPtr msg) { onRcvEvent(msg); } protected: std::shared_ptr GetPtr() { return(shared_from_this()); } protected: virtual void onRcvImage(sensor_msgs::msg::Image::SharedPtr msg) = 0; virtual void onRcvChunk(stcamera_msgs::msg::Chunk::SharedPtr msg) = 0; virtual void onRcvEvent(stcamera_msgs::msg::Event::SharedPtr msg) = 0; }; } #endif //STCAMERA_BASE_HPP