HardFOC Core
API reference
Loading...
Searching...
No Matches
HfUtilsCanOpenBridge.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include "CanFrame.h"
10#include "base/BaseCan.h"
11
12#include <algorithm>
13#include <cstring>
14
15inline void HfUtilsCanFrameToMessage(const CanOpen::CanFrame& c, hf_can_message_t& m) noexcept {
16 // CanOpen::CanFrame is classic (8 data bytes); hf_can_message_t is FD-sized
17 // (64), so bound the copy by the source buffer and keep `dlc` a valid
18 // classic length.
19 const std::size_t n = (std::min)(static_cast<std::size_t>(c.dlc), sizeof(c.data));
20 m.id = static_cast<hf_u32_t>(c.id);
21 m.dlc = static_cast<hf_u8_t>(n);
22 m.is_extended = c.extended;
23 m.is_rtr = c.rtr;
24 m.is_canfd = false;
25 (void)std::memcpy(m.data, c.data, n);
26 if (n < sizeof(m.data)) {
27 (void)std::memset(m.data + n, 0, sizeof(m.data) - n);
28 }
29}
30
31inline void HfUtilsMessageToCanFrame(const hf_can_message_t& m, CanOpen::CanFrame& c) noexcept {
32 c.id = m.id;
33 c.dlc = m.dlc;
34 c.extended = m.is_extended;
35 c.rtr = m.is_rtr;
36 const std::size_t n = (std::min)(static_cast<std::size_t>(m.dlc), sizeof(c.data));
37 (void)std::memcpy(c.data, m.data, n);
38 if (n < sizeof(c.data)) {
39 (void)std::memset(c.data + n, 0, sizeof(c.data) - n);
40 }
41}
void HfUtilsCanFrameToMessage(const CanOpen::CanFrame &c, hf_can_message_t &m) noexcept
Definition HfUtilsCanOpenBridge.hpp:15
void HfUtilsMessageToCanFrame(const hf_can_message_t &m, CanOpen::CanFrame &c) noexcept
Definition HfUtilsCanOpenBridge.hpp:31