40inline constexpr uint8_t
kExt = 0x01U;
41inline constexpr uint8_t
kRtr = 0x02U;
42inline constexpr uint8_t
kFdf = 0x04U;
43inline constexpr uint8_t
kBrs = 0x08U;
44inline constexpr uint8_t
kEsi = 0x10U;
63 return len <= 8U || len == 12U || len == 16U || len == 20U || len == 24U || len == 32U || len == 48U || len == 64U;
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 TxResult Send(const CanFrame &frame)=0
Queue frame without blocking.
virtual ~ICanPort()=default
virtual PortCaps Caps() const =0
Static capabilities.
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.
ICanPort(const ICanPort &)=default
virtual PortStatus Status() const =0
Error counters and state.
ICanPort & operator=(const ICanPort &)=default
constexpr uint8_t kFdf
FD frame format.
Definition HfCanPort.h:42
constexpr uint8_t kAll
Definition HfCanPort.h:45
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
TxResult
Result of a non-blocking ICanPort::Send.
Definition HfCanPort.h:85
bool(*)(void *ctx, const CanFrame &frame) RxSink
RX sink; may run in ISR context (copy and return). Returns false if it could not take the frame.
Definition HfCanPort.h:101
constexpr bool IsExactFdLength(uint8_t len) noexcept
Is len an exact FD payload size (0..8, 12, 16, 20, 24, 32, 48, 64)?
Definition HfCanPort.h:62
constexpr uint32_t kMaxExtId
Largest 29-bit identifier.
Definition HfCanPort.h:36
void(*)(void *ctx) TxDoneSink
TX-done sink: the port has room again; may run in ISR context.
Definition HfCanPort.h:103
BusState
Controller error state.
Definition HfCanPort.h:88
constexpr uint32_t kMaxStdId
Largest 11-bit identifier.
Definition HfCanPort.h:34
constexpr bool IsWellFormed(const CanFrame &f) noexcept
Structurally valid frame (flags, id range, length for the frame kind)?
Definition HfCanPort.h:67
constexpr uint8_t kFdMaxLen
Largest CAN FD payload in bytes.
Definition HfCanPort.h:32
constexpr uint8_t kClassicMaxLen
Largest classic CAN payload in bytes.
Definition HfCanPort.h:30
One CAN or CAN FD frame; len is a byte count, never a DLC code.
Definition HfCanPort.h:49
uint8_t len
Definition HfCanPort.h:51
constexpr bool IsRemote() const noexcept
Definition HfCanPort.h:57
constexpr bool IsExtended() const noexcept
Definition HfCanPort.h:56
uint8_t flags
Definition HfCanPort.h:52
uint32_t ts_us
RX timestamp (µs, port clock); ignored on TX.
Definition HfCanPort.h:54
uint8_t data[kFdMaxLen]
Definition HfCanPort.h:53
constexpr bool IsFd() const noexcept
Definition HfCanPort.h:58
What a port binding can carry.
Definition HfCanPort.h:76
uint32_t data_bps
Definition HfCanPort.h:80
uint8_t max_len
Definition HfCanPort.h:78
uint32_t nominal_bps
0 = not a physical bus
Definition HfCanPort.h:79
uint8_t hw_filters
Definition HfCanPort.h:81
bool fd
Definition HfCanPort.h:77
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