From 454e4f65caca85395a5ca79814d6ca333dd5ae6b Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Thu, 27 Apr 2017 00:59:40 +0200 Subject: [PATCH] Fix: write bcm message to socket. Just allowing message with 1 frame avoiding to handle dynamic sized array... This close the door for multiplexed msg for now... Let's see later and move on Change-Id: I3626d4b6634b3f119826603e64713d63e994918e Signed-off-by: Romain Forlot --- CAN-binder/low-can-binding/can/can-bus-dev.cpp | 4 ++-- CAN-binder/low-can-binding/utils/socketcan.cpp | 14 -------------- CAN-binder/low-can-binding/utils/socketcan.hpp | 25 +++++++++++++++++-------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/CAN-binder/low-can-binding/can/can-bus-dev.cpp b/CAN-binder/low-can-binding/can/can-bus-dev.cpp index 7f7a762..c0ebca1 100644 --- a/CAN-binder/low-can-binding/can/can-bus-dev.cpp +++ b/CAN-binder/low-can-binding/can/can-bus-dev.cpp @@ -125,7 +125,7 @@ int can_bus_dev_t::create_rx_filter(const can_signal_t& s) { uint32_t can_id = s.get_message().get_id(); - struct utils::basic_bcm_msg bcm_msg; + struct utils::simple_bcm_msg bcm_msg; struct can_frame cfd; memset(&cfd, 0, sizeof(cfd)); @@ -145,7 +145,7 @@ int can_bus_dev_t::create_rx_filter(const can_signal_t& s) cfd.data, CAN_MAX_DLEN); - bcm_msg.frames.push_back(cfd); + bcm_msg.frames = cfd; if(can_socket_ << bcm_msg) return 0; diff --git a/CAN-binder/low-can-binding/utils/socketcan.cpp b/CAN-binder/low-can-binding/utils/socketcan.cpp index 486c34f..53631e9 100644 --- a/CAN-binder/low-can-binding/utils/socketcan.cpp +++ b/CAN-binder/low-can-binding/utils/socketcan.cpp @@ -161,18 +161,4 @@ namespace utils return s; } - - socketcan_t& operator<<(socketcan_t& s, const struct basic_bcm_msg& obj) - { - s << obj.msg_head; - s << obj.frames; - return s; - } - - socketcan_t& operator<<(socketcan_t& s, const struct canfd_bcm_msg& obj) - { - s << obj.msg_head; - s << obj.frames; - return s; - } } \ No newline at end of file diff --git a/CAN-binder/low-can-binding/utils/socketcan.hpp b/CAN-binder/low-can-binding/utils/socketcan.hpp index cc7326e..a66e259 100644 --- a/CAN-binder/low-can-binding/utils/socketcan.hpp +++ b/CAN-binder/low-can-binding/utils/socketcan.hpp @@ -27,20 +27,20 @@ #include "low-can-binding.hpp" #define INVALID_SOCKET -1 -#define U64_DATA(p) (*(unsigned long long*)(p)->data) + namespace utils { - - template - struct basic_bcm_msg + struct simple_bcm_msg { struct bcm_msg_head msg_head; - std::vector frames; + struct can_frame frames; }; - struct canfd_bcm_msg : public basic_bcm_msg + struct canfd_bcm_msg { - canfd_bcm_msg() { msg_head.flags |= CAN_FD_FRAME; } + struct bcm_msg_head msg_head; + struct canfd_frame frames; + canfd_bcm_msg() { msg_head.flags |= CAN_FD_FRAME; } }; class socketcan_t @@ -75,7 +75,16 @@ namespace utils s << obj; return s; } - socketcan_t& operator<<(socketcan_t& s, const struct basic_bcm_msg& obj); + + template + socketcan_t& operator<<(socketcan_t& s, const T& obj) + { + if (::sendto(s.socket(), &obj, sizeof(obj), 0, (const struct sockaddr*)&s.get_tx_address(), sizeof(s.get_tx_address())) < 0) + ERROR(binder_interface, "%s: Error sending : %i %s", __FUNCTION__, errno, ::strerror(errno)); + return s; + } + + socketcan_t& operator<<(socketcan_t& s, const struct simple_bcm_msg& obj); socketcan_t& operator<<(socketcan_t& s, const struct canfd_bcm_msg& obj); socketcan_t& operator>>(socketcan_t& s, can_message_t& cm); -- 2.16.6