- /// @brief Send a CAN message through the socket.
- ///
- /// @param[in] f - the CAN FD frame to send
- ///
- /// @return number of sent bytes if message sent, 0 on invalid socket and -1 if something wrong.
- ssize_t socketcan_t::send(const struct canfd_frame& f)
+ socketcan_t& operator<<(socketcan_t& s, const struct bcm_msg_head& obj)
+ {
+ struct sockaddr_can addr = s.get_tx_address();
+ ::sendto(s.socket(), &obj, sizeof(bcm_msg_head), 0, (struct sockaddr*)&addr, sizeof(addr));
+ return s;
+ }
+
+ socketcan_t& operator<<(socketcan_t& s, const struct canfd_frame& obj)
+ {
+ struct sockaddr_can addr = s.get_tx_address();
+ ::sendto(s.socket(), &obj, sizeof(canfd_frame), 0, (struct sockaddr*)&addr, sizeof(addr));
+ return s;
+ }
+
+ socketcan_t& operator<<(socketcan_t& s, const struct can_frame& obj)
+ {
+ struct sockaddr_can addr = s.get_tx_address();
+ ::sendto(s.socket(), &obj, sizeof(can_frame), 0, (struct sockaddr*)&addr, sizeof(addr));
+ return s;
+ }
+
+ socketcan_t& operator<<(socketcan_t& s, const struct basic_bcm_msg<struct can_frame>& obj)
+ {
+ s << obj.msg_head;
+ s << obj.frames;
+ return s;
+ }
+
+ socketcan_t& operator<<(socketcan_t& s, const struct canfd_bcm_msg& obj)