diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-03-09 02:26:48 +0100 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-03-16 17:10:40 +0100 |
commit | 623536b4a10a96a8e71389b741774e645e652e9b (patch) | |
tree | 2dd2d6c56285b729c7bc90f1621c94b0f6ac42a2 /src/can | |
parent | c89528d692b964be79b15dc35108740a5c893c86 (diff) |
Added a static method to get used by Diagnostic manager
that respect the requested signature.
Change-Id: Id10215597d65ecaf280fe6252d78bc74a306958e
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'src/can')
-rw-r--r-- | src/can/can-bus-dev.cpp | 31 | ||||
-rw-r--r-- | src/can/can-bus-dev.hpp | 1 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/can/can-bus-dev.cpp b/src/can/can-bus-dev.cpp index 389154b..f459567 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 d7c3458..59d999f 100644 --- a/src/can/can-bus-dev.hpp +++ b/src/can/can-bus-dev.hpp @@ -57,4 +57,5 @@ public: std::pair<struct canfd_frame&, size_t> 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); }; |