From 623536b4a10a96a8e71389b741774e645e652e9b Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Thu, 9 Mar 2017 02:26:48 +0100 Subject: [PATCH] Added a static method to get used by Diagnostic manager that respect the requested signature. Change-Id: Id10215597d65ecaf280fe6252d78bc74a306958e Signed-off-by: Romain Forlot --- src/can/can-bus-dev.cpp | 31 +++++++++++++++++++++++++++++++ src/can/can-bus-dev.hpp | 1 + 2 files changed, 32 insertions(+) diff --git a/src/can/can-bus-dev.cpp b/src/can/can-bus-dev.cpp index 389154b8..f4595676 100644 --- a/src/can/can-bus-dev.cpp +++ b/src/can/can-bus-dev.cpp @@ -193,3 +193,34 @@ int can_bus_dev_t::send_can_message(can_message_t& can_msg) } return 0; } + +/// @brief Send a can message from a can_message_t object. +/// @param[in] can bus used to send the message +/// @param[in] can_msg the can message object to send +bool can_bus_dev_t::send_can_message(const uint16_t arbitration_id, const uint8_t* data, const uint8_t size) +{ + ssize_t nbytes; + canfd_frame f; + + f.can_id = arbitration_id; + f.len = size; + ::memcpy(f.data, data, size); + + if(socket.socket()) + { + nbytes = ::sendto(socket.socket(), &f, sizeof(struct canfd_frame), 0, + (struct sockaddr*)&txAddress_, sizeof(txAddress_)); + if (nbytes == -1) + { + ERROR(binder_interface, "send_can_message: Sending CAN frame failed."); + return -1; + } + return (int)nbytes; + } + else + { + ERROR(binder_interface, "send_can_message: socket not initialized. Attempt to reopen can device socket."); + open(); + } + return 0; +} diff --git a/src/can/can-bus-dev.hpp b/src/can/can-bus-dev.hpp index d7c3458e..59d999f1 100644 --- a/src/can/can-bus-dev.hpp +++ b/src/can/can-bus-dev.hpp @@ -57,4 +57,5 @@ public: std::pair read(); int send_can_message(can_message_t& can_msg); + static bool send_can_message(const uint16_t arbitration_id, const uint8_t* data, const uint8_t size); }; -- 2.16.6