15template <auto *Handle,
class HandleType = decltype(Handle)>
class Can;
17#ifdef HAL_CAN_MODULE_ENABLED
19template <auto *Handle>
20class Can<Handle, CAN_HandleTypeDef *> :
public CanBase {
24 bool start()
override {
return can_.start(); }
25 bool stop()
override {
return can_.
stop(); }
26 bool transmit(
const CanMessage &msg, uint32_t timeout)
override {
27 return can_.transmit(msg, timeout);
29 std::optional<size_t> attach_rx_filter(
const CanFilter &filter,
30 void (*callback)(
const CanMessage &msg,
32 void *context)
override {
33 return can_.attach_rx_filter(filter, callback, context);
35 bool detach_rx_filter(
size_t filter_index)
override {
36 return can_.detach_rx_filter(filter_index);
45#ifdef HAL_FDCAN_MODULE_ENABLED
47template <auto *Handle>
48class Can<Handle, FDCAN_HandleTypeDef *> :
public CanBase {
52 bool start()
override {
return can_.start(); }
53 bool stop()
override {
return can_.
stop(); }
54 bool transmit(
const CanMessage &msg, uint32_t timeout)
override {
55 return can_.transmit(msg, timeout);
57 std::optional<size_t> attach_rx_filter(
const CanFilter &filter,
60 void *context)
override {
61 return can_.attach_rx_filter(filter, callback, context);
63 bool detach_rx_filter(
size_t filter_index)
override {
64 return can_.detach_rx_filter(filter_index);