Program Listing for File iio_node.hpp
↰ Return to documentation for file (include/adi_iio/iio_node.hpp
)
// Copyright 2025 Analog Devices, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef ADI_IIO__IIO_NODE_HPP_
#define ADI_IIO__IIO_NODE_HPP_
#include <iio.h>
#include <chrono>
#include <functional>
#include <map>
#include <memory>
#include <string>
#include <rclcpp/rclcpp.hpp>
#include "adi_iio/srv/attr_read_string.hpp"
#include "adi_iio/srv/attr_write_string.hpp"
#include "adi_iio/srv/attr_enable_topic.hpp"
#include "adi_iio/srv/attr_disable_topic.hpp"
#include "adi_iio/srv/buffer_create.hpp"
#include "adi_iio/srv/buffer_destroy.hpp"
#include "adi_iio/srv/buffer_refill.hpp"
#include "adi_iio/srv/buffer_read.hpp"
#include "adi_iio/srv/buffer_write.hpp"
#include "adi_iio/srv/buffer_enable_topic.hpp"
#include "adi_iio/srv/buffer_disable_topic.hpp"
class IIOAttrTopic;
class IIOBuffer;
class IIONode : public rclcpp::Node
{
public:
IIONode();
virtual ~IIONode();
void initBuffers();
bool rwAttrPath(
std::string path, std::string & result, bool write = false,
std::string value = "");
std::string convertAttrPathToTopicName(std::string path);
// service handlers
void attrReadSrv(
const std::shared_ptr<adi_iio::srv::AttrReadString::Request> request,
std::shared_ptr<adi_iio::srv::AttrReadString::Response> response);
void attrWriteSrv(
const std::shared_ptr<adi_iio::srv::AttrWriteString::Request> request,
std::shared_ptr<adi_iio::srv::AttrWriteString::Response> response);
void attrEnableTopicSrv(
const std::shared_ptr<adi_iio::srv::AttrEnableTopic::Request> request,
std::shared_ptr<adi_iio::srv::AttrEnableTopic::Response> response);
void attrDisableTopicSrv(
const std::shared_ptr<adi_iio::srv::AttrDisableTopic::Request> request,
std::shared_ptr<adi_iio::srv::AttrDisableTopic::Response> response);
void buffRefillSrv(
const std::shared_ptr<adi_iio::srv::BufferRefill::Request> request,
std::shared_ptr<adi_iio::srv::BufferRefill::Response> response);
void buffReadSrv(
const std::shared_ptr<adi_iio::srv::BufferRead::Request> request,
std::shared_ptr<adi_iio::srv::BufferRead::Response> response);
void buffWriteSrv(
const std::shared_ptr<adi_iio::srv::BufferWrite::Request> request,
std::shared_ptr<adi_iio::srv::BufferWrite::Response> response);
void buffCreateSrv(
const std::shared_ptr<adi_iio::srv::BufferCreate::Request> request,
std::shared_ptr<adi_iio::srv::BufferCreate::Response> response);
void buffDestroySrv(
const std::shared_ptr<adi_iio::srv::BufferDestroy::Request> request,
std::shared_ptr<adi_iio::srv::BufferDestroy::Response> response);
void buffEnableTopicSrv(
const std::shared_ptr<adi_iio::srv::BufferEnableTopic::Request> request,
std::shared_ptr<adi_iio::srv::BufferEnableTopic::Response> response);
void buffDisableTopicSrv(
const std::shared_ptr<adi_iio::srv::BufferDisableTopic::Request> request,
std::shared_ptr<adi_iio::srv::BufferDisableTopic::Response> response);
// getters
std::string uri();
bool initialized();
iio_context * ctx();
private:
bool m_initialized;
std::string m_uri;
iio_context * m_ctx;
std::map<std::string, std::shared_ptr<IIOAttrTopic>> m_attrTopicMap;
std::map<std::string, std::shared_ptr<IIOBuffer>> m_bufferMap;
};
#endif // ADI_IIO__IIO_NODE_HPP_