18 #ifndef SOCKETCAN__SOCKET_CAN_SENDER_HPP_
19 #define SOCKETCAN__SOCKET_CAN_SENDER_HPP_
43 const std::string & interface =
"can0",
57 const void *
const data,
58 const std::size_t length,
59 const std::chrono::nanoseconds timeout = std::chrono::nanoseconds::zero())
const;
70 const void *
const data,
71 const std::size_t length,
73 const std::chrono::nanoseconds timeout = std::chrono::nanoseconds::zero())
const;
81 template<typename T, typename = std::enable_if_t<!std::is_pointer<T>::value>>
84 const std::chrono::nanoseconds timeout = std::chrono::nanoseconds::zero())
const
86 send(data, m_default_id, timeout);
97 template<typename T, typename = std::enable_if_t<!std::is_pointer<T>::value>>
101 const std::chrono::nanoseconds timeout = std::chrono::nanoseconds::zero())
const
103 static_assert(
sizeof(data) <=
MAX_DATA_LENGTH,
"Data type too large for CAN");
105 send_impl(
reinterpret_cast<const char8_t *
>(&data),
sizeof(data),
id, timeout);
111 CanId default_id() const noexcept;
116 const
void * const data,
117 const std::
size_t length,
119 const std::chrono::nanoseconds timeout) const;
121 SOCKETCAN_LOCAL void wait(const std::chrono::nanoseconds timeout) const;
123 int32_t m_file_descriptor{};
131 #endif // SOCKETCAN__SOCKET_CAN_SENDER_HPP_