56#ifndef HF_CO_CAN_MAX_LEN
57#if defined(HF_CO_CAN_FD) && HF_CO_CAN_FD
58#define HF_CO_CAN_MAX_LEN 64U
60#define HF_CO_CAN_MAX_LEN 8U
65#ifndef HF_CO_MAX_PORTS
66#define HF_CO_MAX_PORTS 4U
70#ifndef HF_CO_RX_RING_LEN
71#define HF_CO_RX_RING_LEN 64U
75#ifndef HF_CO_MAX_DRIVERS
76#define HF_CO_MAX_DRIVERS 2U
80#ifndef HF_CO_BUSOFF_RETRY_CALLS
81#define HF_CO_BUSOFF_RETRY_CALLS 100U
84#if (HF_CO_RX_RING_LEN & (HF_CO_RX_RING_LEN - 1U)) != 0U
85#error "HF_CO_RX_RING_LEN must be a power of two"
87#if HF_CO_MAX_PORTS > 8U
88#error "HF_CO_MAX_PORTS is limited to 8 (one pending bit per port in a uint8_t)"
94#define HF_CO_FRAME_MAX_LEN 64U
97#define HF_CO_FRAME_EXT 0x01U
98#define HF_CO_FRAME_RTR 0x02U
99#define HF_CO_FRAME_FDF 0x04U
100#define HF_CO_FRAME_BRS 0x08U
101#define HF_CO_FRAME_ESI 0x10U
104typedef struct hf_co_frame {
115typedef enum hf_co_tx_result {
123typedef enum hf_co_bus_state {
132typedef struct hf_co_port_status {
142typedef struct hf_co_port_ops {
148 bool (*recover)(
void* ctx);
152#define HF_CO_PORT_ERROR_SOURCE 0x01U
155typedef struct hf_co_port_stats {
203 uint8_t max_len, uint8_t flags);
void hf_co_driver_detach_port(hf_co_driver_t *drv, uint8_t index)
Definition CO_driver_hardfoc.c:227
hf_co_tx_result_t
Definition hf_co_driver.h:115
@ HF_CO_TX_QUEUE_FULL
Definition hf_co_driver.h:117
@ HF_CO_TX_BUS_OFF
Definition hf_co_driver.h:118
@ HF_CO_TX_OK
Definition hf_co_driver.h:116
@ HF_CO_TX_NOT_ALLOWED
Definition hf_co_driver.h:119
void hf_co_driver_set_wake(hf_co_driver_t *drv, hf_co_wake_fn wake, void *ctx)
Definition CO_driver_hardfoc.c:263
hf_co_driver_t * hf_co_driver_acquire(void)
Definition CO_driver_hardfoc.c:158
bool(* hf_co_rx_policy_fn)(void *ctx, uint8_t port, uint16_t rx_index, const void *consumer, const hf_co_frame_t *frame)
Definition hf_co_driver.h:176
void hf_co_driver_set_policy(hf_co_driver_t *drv, hf_co_rx_policy_fn rx, hf_co_tx_policy_fn tx, void *ctx)
Definition CO_driver_hardfoc.c:251
void(* hf_co_wake_fn)(void *ctx)
Definition hf_co_driver.h:184
hf_co_bus_state_t
Definition hf_co_driver.h:123
@ HF_CO_BUS_STOPPED
Definition hf_co_driver.h:124
@ HF_CO_BUS_OFF
Definition hf_co_driver.h:128
@ HF_CO_BUS_ERROR_ACTIVE
Definition hf_co_driver.h:125
@ HF_CO_BUS_ERROR_WARNING
Definition hf_co_driver.h:126
@ HF_CO_BUS_ERROR_PASSIVE
Definition hf_co_driver.h:127
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
void hf_co_driver_release(hf_co_driver_t *drv)
Definition CO_driver_hardfoc.c:193
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
uint32_t hf_co_driver_rx_drain(hf_co_driver_t *drv, uint32_t max)
Definition CO_driver_hardfoc.c:412
#define HF_CO_FRAME_MAX_LEN
Definition hf_co_driver.h:94
uint32_t hf_co_driver_rx_pending(const hf_co_driver_t *drv)
Definition CO_driver_hardfoc.c:326
void hf_co_driver_get_stats(const hf_co_driver_t *drv, uint8_t port, hf_co_port_stats_t *out)
Definition CO_driver_hardfoc.c:350
void hf_co_driver_tx_done(hf_co_driver_t *drv, uint8_t port)
Definition CO_driver_hardfoc.c:318
bool(* hf_co_tx_policy_fn)(void *ctx, uint8_t port, uint16_t tx_index, const hf_co_frame_t *frame)
Definition hf_co_driver.h:182
uint32_t hf_co_driver_tx_pending(const hf_co_driver_t *drv)
Definition CO_driver_hardfoc.c:339
Definition CO_driver_hardfoc.c:68
CO_CANmodule_t *hf_co_port_slot_t port[HF_CO_MAX_PORTS]
Definition CO_driver_hardfoc.c:71
Definition hf_co_driver.h:104
uint8_t flags
Definition hf_co_driver.h:107
uint32_t ts_us
Definition hf_co_driver.h:109
uint8_t len
Definition hf_co_driver.h:106
uint32_t id
Definition hf_co_driver.h:105
Definition hf_co_driver.h:142
Definition hf_co_driver.h:155
uint32_t rx_ring_overruns
Definition hf_co_driver.h:157
uint32_t recover_requests
Definition hf_co_driver.h:167
uint32_t rx_rejected
Definition hf_co_driver.h:158
uint32_t tx_frames
Definition hf_co_driver.h:162
uint32_t rx_dispatched
Definition hf_co_driver.h:159
uint32_t tx_dropped
Definition hf_co_driver.h:165
uint32_t rx_denied
Definition hf_co_driver.h:161
uint32_t rx_frames
Definition hf_co_driver.h:156
uint32_t tx_retried
Definition hf_co_driver.h:164
uint32_t tx_denied
Definition hf_co_driver.h:166
uint32_t rx_unhandled
Definition hf_co_driver.h:160
uint32_t tx_queue_full
Definition hf_co_driver.h:163
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