23static_assert(
sizeof(CanFrame) ==
sizeof(
hf_co_frame_t),
"CanFrame and hf_co_frame_t must match");
24static_assert(offsetof(CanFrame,
id) == offsetof(
hf_co_frame_t,
id),
"CanFrame layout");
25static_assert(offsetof(CanFrame, len) == offsetof(
hf_co_frame_t, len),
"CanFrame layout");
26static_assert(offsetof(CanFrame, flags) == offsetof(
hf_co_frame_t, flags),
"CanFrame layout");
27static_assert(offsetof(CanFrame, data) == offsetof(
hf_co_frame_t, data),
"CanFrame layout");
28static_assert(offsetof(CanFrame, ts_us) == offsetof(
hf_co_frame_t, ts_us),
"CanFrame layout");
39 std::memcpy(out.data, in.data,
sizeof(out.data));
46 std::memcpy(out.data, in.data,
sizeof(out.data));
62 bool Attach(hf_co_driver_t* drv, uint8_t index,
ICanPort& port,
bool error_source)
noexcept {
63 if (
drv_ !=
nullptr || drv ==
nullptr) {
85 if (
drv_ ==
nullptr) {
void hf_co_driver_detach_port(hf_co_driver_t *drv, uint8_t index)
Definition CO_driver_hardfoc.c:227
bool hf_co_driver_rx_push(hf_co_driver_t *drv, uint8_t port, const hf_co_frame_t *frame)
Definition CO_driver_hardfoc.c:310
bool hf_co_driver_rx_offer(hf_co_driver_t *drv, uint8_t port, const hf_co_frame_t *frame)
Definition CO_driver_hardfoc.c:314
bool hf_co_driver_attach_port(hf_co_driver_t *drv, uint8_t index, const hf_co_port_ops_t *ops, void *ctx, uint8_t max_len, uint8_t flags)
Definition CO_driver_hardfoc.c:204
void hf_co_driver_tx_done(hf_co_driver_t *drv, uint8_t port)
Definition CO_driver_hardfoc.c:318
Transport-neutral CAN frame and the ICanPort interface for port bindings (EspTwaiPort,...
One ICanPort attached to one CO driver port slot.
Definition HfCoPortBinding.h:51
ICanPort * Port() const noexcept
Definition HfCoPortBinding.h:95
CoPortBinding & operator=(const CoPortBinding &)=delete
ICanPort * port_
Definition HfCoPortBinding.h:129
static bool StatusTrampoline(void *ctx, hf_co_port_status_t *out)
Definition HfCoPortBinding.h:105
static bool RxTrampoline(void *ctx, const CanFrame &frame)
Definition HfCoPortBinding.h:116
uint8_t index_
Definition HfCoPortBinding.h:130
bool backpressure_
Definition HfCoPortBinding.h:131
uint8_t Index() const noexcept
Definition HfCoPortBinding.h:96
bool Attach(hf_co_driver_t *drv, uint8_t index, ICanPort &port, bool error_source) noexcept
Attach port at slot index of drv.
Definition HfCoPortBinding.h:62
static void TxDoneTrampoline(void *ctx)
Definition HfCoPortBinding.h:123
CoPortBinding(const CoPortBinding &)=delete
hf_co_driver_t * drv_
Definition HfCoPortBinding.h:128
void Detach() noexcept
Stop RX delivery and detach the slot.
Definition HfCoPortBinding.h:84
static bool RecoverTrampoline(void *ctx)
Definition HfCoPortBinding.h:115
static hf_co_tx_result_t SendTrampoline(void *ctx, const hf_co_frame_t *frame)
Definition HfCoPortBinding.h:99
~CoPortBinding()
Definition HfCoPortBinding.h:54
One CAN transport binding.
Definition HfCanPort.h:106
virtual bool RxBackpressure() const
True if the port holds a frame the RX sink refused and offers it again (no loss).
Definition HfCanPort.h:121
virtual void SetRxSink(RxSink sink, void *ctx)=0
Install the RX sink (nullptr detaches).
virtual void SetTxDoneSink(TxDoneSink sink, void *ctx)
Install the TX-done sink. Ports without a TX-done event ignore it.
Definition HfCanPort.h:123
virtual bool Recover()=0
Request bus-off recovery; false when not possible now.
virtual PortStatus Status() const =0
Error counters and state.
C interface of the generic CANopenNode driver (CO_driver_hardfoc.c).
#define HF_CO_FRAME_ESI
Definition hf_co_driver.h:101
hf_co_tx_result_t
Definition hf_co_driver.h:115
#define HF_CO_FRAME_RTR
Definition hf_co_driver.h:98
#define HF_CO_FRAME_EXT
Definition hf_co_driver.h:97
#define HF_CO_FRAME_FDF
Definition hf_co_driver.h:99
#define HF_CO_FRAME_BRS
Definition hf_co_driver.h:100
#define HF_CO_PORT_ERROR_SOURCE
Definition hf_co_driver.h:152
constexpr uint8_t kFdf
FD frame format.
Definition HfCanPort.h:42
constexpr uint8_t kBrs
bit-rate switch (FD only)
Definition HfCanPort.h:43
constexpr uint8_t kEsi
error state indicator (FD only)
Definition HfCanPort.h:44
constexpr uint8_t kRtr
remote request (classic only)
Definition HfCanPort.h:41
constexpr uint8_t kExt
29-bit identifier
Definition HfCanPort.h:40
Definition EspTwaiPort.cpp:12
void FromC(const hf_co_frame_t &in, CanFrame &out) noexcept
Definition HfCoPortBinding.h:42
void ToC(const CanFrame &in, hf_co_frame_t &out) noexcept
Copy between the C++ and C frame types (identical layout).
Definition HfCoPortBinding.h:35
One CAN or CAN FD frame; len is a byte count, never a DLC code.
Definition HfCanPort.h:49
What a port binding can carry.
Definition HfCanPort.h:76
uint8_t max_len
Definition HfCanPort.h:78
Error counters and statistics of one port.
Definition HfCanPort.h:91
uint32_t bus_off_count
Definition HfCanPort.h:97
uint32_t rx_overruns
Definition HfCanPort.h:95
uint32_t tx_queue_full
Definition HfCanPort.h:96
uint16_t tec
Definition HfCanPort.h:93
uint16_t rec
Definition HfCanPort.h:94
BusState state
Definition HfCanPort.h:92
Definition hf_co_driver.h:104
Definition hf_co_driver.h:142
Definition hf_co_driver.h:132
uint32_t rx_overruns
Definition hf_co_driver.h:136
uint16_t tec
Definition hf_co_driver.h:134
uint8_t state
Definition hf_co_driver.h:133
uint16_t rec
Definition hf_co_driver.h:135
uint32_t tx_queue_full
Definition hf_co_driver.h:137
uint32_t bus_off_count
Definition hf_co_driver.h:138