Program Listing for File node.hpp
↰ Return to documentation for file (/tmp/ws/src/myactuator_rmd/include/myactuator_rmd/can/node.hpp
)
#ifndef MYACTUATOR_RMD__CAN__NODE
#define MYACTUATOR_RMD__CAN__NODE
#pragma once
#include <array>
#include <chrono>
#include <cstdint>
#include <string>
#include "myactuator_rmd/can/frame.hpp"
namespace myactuator_rmd {
namespace can {
class Node {
public:
Node(std::string const& ifname, std::chrono::microseconds const& send_timeout = std::chrono::seconds(1),
std::chrono::microseconds const& receive_timeout = std::chrono::seconds(1), bool const is_signal_errors = true);
Node() = delete;
Node(Node const&) = delete;
Node& operator = (Node const&) = default;
Node(Node&&) = default;
Node& operator = (Node&&) = default;
~Node();
void setLoopback(bool const is_loopback);
void setRecvFilter(std::uint32_t const& can_id, bool const is_invert = false);
void setSendTimeout(std::chrono::microseconds const& timeout);
void setRecvTimeout(std::chrono::microseconds const& timeout);
void setErrorFilters(bool const is_signal_errors);
[[nodiscard]]
Frame read() const;
void write(Frame const& frame);
void write(std::uint32_t const can_id, std::array<std::uint8_t,8> const& data);
protected:
void initSocket(std::string const& ifname);
void closeSocket() noexcept;
std::string ifname_;
int socket_;
};
}
}
#endif // MYACTUATOR_RMD__CAN__NODE