HardFOC Core
API reference
Loading...
Searching...
No Matches
EspTwaiPort.h
Go to the documentation of this file.
1
20#pragma once
21
22#include <atomic>
23#include <cstdint>
24
25#include "HfCanPort.h"
26
27class EspCan;
28struct hf_can_message_t;
29
30namespace hf::can {
31
32class EspTwaiPort final : public ICanPort {
33 public:
38 EspTwaiPort(EspCan& can, uint32_t nominal_bps) noexcept;
39 ~EspTwaiPort() override;
40 EspTwaiPort(const EspTwaiPort&) = delete;
42
43 PortCaps Caps() const override;
44 TxResult Send(const CanFrame& frame) override;
45 void SetRxSink(RxSink sink, void* ctx) override;
46 PortStatus Status() const override;
47 bool Recover() override;
48
49 private:
50 static void OnRx(const hf_can_message_t& message, void* user_data);
51
52 EspCan& can_;
53 uint32_t nominal_bps_;
54 std::atomic<RxSink> sink_{nullptr};
55 std::atomic<void*> sink_ctx_{nullptr};
56};
57
58} // namespace hf::can
Transport-neutral CAN frame and the ICanPort interface for port bindings (EspTwaiPort,...
Definition EspTwaiPort.h:32
TxResult Send(const CanFrame &frame) override
Queue frame without blocking.
Definition EspTwaiPort.cpp:28
PortCaps Caps() const override
Static capabilities.
Definition EspTwaiPort.cpp:18
std::atomic< RxSink > sink_
Definition EspTwaiPort.h:54
void SetRxSink(RxSink sink, void *ctx) override
Install the RX sink (nullptr detaches).
Definition EspTwaiPort.cpp:58
std::atomic< void * > sink_ctx_
Definition EspTwaiPort.h:55
EspTwaiPort(const EspTwaiPort &)=delete
uint32_t nominal_bps_
Definition EspTwaiPort.h:53
EspTwaiPort & operator=(const EspTwaiPort &)=delete
EspCan & can_
Definition EspTwaiPort.h:52
~EspTwaiPort() override
Definition EspTwaiPort.cpp:16
bool Recover() override
Request bus-off recovery; false when not possible now.
Definition EspTwaiPort.cpp:85
static void OnRx(const hf_can_message_t &message, void *user_data)
Definition EspTwaiPort.cpp:46
PortStatus Status() const override
Error counters and state.
Definition EspTwaiPort.cpp:70
One CAN transport binding.
Definition HfCanPort.h:106
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
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
Error counters and statistics of one port.
Definition HfCanPort.h:91