18 #ifndef SOCKETCAN__SOCKET_CAN_RECEIVER_HPP_
19 #define SOCKETCAN__SOCKET_CAN_RECEIVER_HPP_
54 const std::chrono::nanoseconds timeout = std::chrono::nanoseconds::zero())
const;
65 template<typename T, typename = std::enable_if_t<!std::is_pointer<T>::value>>
68 const std::chrono::nanoseconds timeout = std::chrono::nanoseconds::zero())
const
70 static_assert(
sizeof(data) <=
MAX_DATA_LENGTH,
"Data type too large for CAN");
71 std::array<uint8_t, MAX_DATA_LENGTH> data_raw{};
72 const auto ret = receive(&data_raw[0U], timeout);
73 if (ret.length() !=
sizeof(data)) {
74 throw std::runtime_error{
"Received CAN data is of size incompatible with provided type!"};
76 (void)std::memcpy(&data, &data_raw[0U], ret.length());
82 SOCKETCAN_LOCAL void wait(
const std::chrono::nanoseconds timeout)
const;
84 int32_t m_file_descriptor;
91 #endif // SOCKETCAN__SOCKET_CAN_RECEIVER_HPP_