From: Romain Forlot Date: Thu, 9 Mar 2017 01:26:48 +0000 (+0100) Subject: Added a static method to get used by Diagnostic manager X-Git-Tag: 5.0.2~516 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=623536b4a10a96a8e71389b741774e645e652e9b;p=apps%2Fagl-service-can-low-level.git Added a static method to get used by Diagnostic manager that respect the requested signature. Change-Id: Id10215597d65ecaf280fe6252d78bc74a306958e Signed-off-by: Romain Forlot --- 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); };