11#ifndef CAN_COREX_CAN_COREX_BUS_H_
12#define CAN_COREX_CAN_COREX_BUS_H_
14#if !defined(CAN_COREX_CAN_COREX_H_) && !defined(DOXYGEN)
15#error "Include can_corex.h instead of can_corex_bus.h directly."
35 CCX_HR_TIME_t HighResDelay;
40#ifdef CCX_DISABLE_HIGH_RES_TIMEBASE
41#define CCX_BUS_RECOVERY_MS(ms) \
42 ((CCX_BusRecoveryDelay_t){.HighResDelay = 0U, .BaseDelay = (CCX_TIME_t)(ms), .UsesHighRes = 0U})
43#define CCX_BUS_RECOVERY_US(us) \
44 ((CCX_BusRecoveryDelay_t){ \
45 .HighResDelay = 0U, .BaseDelay = (CCX_TIME_t)CCX_INTERNAL_MS_FROM_US_CEIL(us), .UsesHighRes = 0U})
47#define CCX_BUS_RECOVERY_MS(ms) \
48 ((CCX_BusRecoveryDelay_t){.HighResDelay = 0U, .BaseDelay = (CCX_TIME_t)(ms), .UsesHighRes = 0U})
49#define CCX_BUS_RECOVERY_US(us) \
50 ((CCX_BusRecoveryDelay_t){.HighResDelay = ((us) <= 3000U) ? CCX_HR_TIME(us) : 0U, \
51 .BaseDelay = (CCX_TIME_t)CCX_INTERNAL_MS_FROM_US_CEIL(us), \
52 .UsesHighRes = (uint8_t)((us) <= 3000U)})
68#define CAN_COREX_BUS_OFF_RECOVERY_10KBPS_MS CCX_BUS_RECOVERY_MS(141U)
69#define CAN_COREX_BUS_OFF_RECOVERY_20KBPS_MS CCX_BUS_RECOVERY_MS(71U)
70#define CAN_COREX_BUS_OFF_RECOVERY_50KBPS_MS CCX_BUS_RECOVERY_MS(29U)
71#define CAN_COREX_BUS_OFF_RECOVERY_83K3BPS_MS CCX_BUS_RECOVERY_MS(17U)
72#define CAN_COREX_BUS_OFF_RECOVERY_100KBPS_MS CCX_BUS_RECOVERY_MS(15U)
73#define CAN_COREX_BUS_OFF_RECOVERY_125KBPS_MS CCX_BUS_RECOVERY_MS(12U)
74#define CAN_COREX_BUS_OFF_RECOVERY_250KBPS_MS CCX_BUS_RECOVERY_MS(6U)
75#define CAN_COREX_BUS_OFF_RECOVERY_500KBPS_MS CCX_BUS_RECOVERY_US(2816U)
76#define CAN_COREX_BUS_OFF_RECOVERY_800KBPS_MS CCX_BUS_RECOVERY_US(1760U)
77#define CAN_COREX_BUS_OFF_RECOVERY_1000KBPS_MS CCX_BUS_RECOVERY_US(1408U)
80#define CAN_COREX_BUS_OFF_RECOVERY_FD_2M_MS CCX_BUS_RECOVERY_US(704U)
81#define CAN_COREX_BUS_OFF_RECOVERY_FD_5M_MS CCX_BUS_RECOVERY_US(282U)
82#define CAN_COREX_BUS_OFF_RECOVERY_FD_8M_MS CCX_BUS_RECOVERY_US(176U)
99 CCX_BUS_STATE_ACTIVE = 0,
100 CCX_BUS_STATE_WARNING,
101 CCX_BUS_STATE_PASSIVE,
197 uint8_t auto_recovery_enabled, uint8_t max_recovery_attempts);
199 CCX_Status_t CCX_BusMonitor_TriggerRecovery(
CCX_instance_t *Instance);
CCX_BusState_t
CAN bus state according to ISO 11898-1.
Definition can_corex_bus.h:98
Bus monitor configuration and state.
Definition can_corex_bus.h:150
void(* OnErrorCountersUpdate)(CCX_instance_t *Instance, const CCX_ErrorCounters_t *Counters, void *UserData)
Called when TEC/REC updated.
Definition can_corex_bus.h:183
void(* OnRecoveryAttempt)(CCX_instance_t *Instance, uint8_t AttemptNumber, void *UserData)
Called before each recovery attempt.
Definition can_corex_bus.h:180
CCX_TIME_t recovery_start_time
Base-domain timestamp for current recovery cycle.
Definition can_corex_bus.h:163
void * UserData
User context pointer for callbacks.
Definition can_corex_bus.h:185
uint8_t max_recovery_attempts
Max attempts before grace period (0 = unlimited).
Definition can_corex_bus.h:159
uint8_t in_grace_period
1 = waiting in grace period after max attempts
Definition can_corex_bus.h:168
CCX_TIME_t grace_period_start
When grace period started.
Definition can_corex_bus.h:169
CCX_TIME_t bus_off_entry_time
When bus-off state was entered.
Definition can_corex_bus.h:167
void(* OnBusStateChange)(CCX_instance_t *Instance, CCX_BusState_t OldState, CCX_BusState_t NewState, void *UserData)
Called on state transition.
Definition can_corex_bus.h:178
CCX_BusState_t current_state
Current bus state.
Definition can_corex_bus.h:151
CCX_TIME_t successful_run_time
Time to run successfully before resetting counter, in base ticks.
Definition can_corex_bus.h:157
CCX_BusState_t(* GetBusState)(const CCX_instance_t *Instance)
Read bus state from hardware.
Definition can_corex_bus.h:172
void(* OnRecoveryFailed)(CCX_instance_t *Instance, void *UserData)
Called when max attempts reached.
Definition can_corex_bus.h:182
void(* RequestRecovery)(const CCX_instance_t *Instance)
Trigger recovery in hardware.
Definition can_corex_bus.h:175
void(* GetErrorCounters)(const CCX_instance_t *Instance, CCX_ErrorCounters_t *Counters)
Read TEC/REC (can be NULL).
Definition can_corex_bus.h:173
CCX_TIME_t last_successful_recovery
When last recovery succeeded.
Definition can_corex_bus.h:166
CCX_HR_TIME_t recovery_start_time_hr
HR-domain timestamp for current recovery cycle when sub-ms recovery is used.
Definition can_corex_bus.h:165
uint8_t recovery_attempts
Current recovery attempt counter.
Definition can_corex_bus.h:160
CCX_BusRecoveryDelay_t recovery_delay
Delay between recovery attempts, in base or HR ticks depending on macro used.
Definition can_corex_bus.h:156
CCX_BusStats_t stats
Accumulated statistics.
Definition can_corex_bus.h:152
uint8_t auto_recovery_enabled
Enable automatic bus-off recovery.
Definition can_corex_bus.h:158
Definition can_corex_bus.h:34
Bus monitoring statistics.
Definition can_corex_bus.h:131
CCX_ErrorCounters_t error_counters
Current TEC/REC values from hardware.
Definition can_corex_bus.h:137
CCX_TIME_t last_bus_off_time
Timestamp of last bus-off occurrence in base ticks.
Definition can_corex_bus.h:135
CCX_ErrorCounters_t peak_error_counters
Peak TEC/REC values since initialization.
Definition can_corex_bus.h:138
CCX_TIME_t total_bus_off_duration
Cumulative time spent in bus-off state in base ticks.
Definition can_corex_bus.h:136
uint32_t error_passive_count
Number of error passive events (TEC/REC > 127).
Definition can_corex_bus.h:134
uint32_t bus_off_count
Number of bus-off events.
Definition can_corex_bus.h:132
uint32_t error_warning_count
Number of error warning events (TEC/REC > 96).
Definition can_corex_bus.h:133
CAN error counters from hardware controller.
Definition can_corex_bus.h:119
uint8_t REC
Receive Error Counter (0-255).
Definition can_corex_bus.h:121
uint8_t TEC
Transmit Error Counter (0-255).
Definition can_corex_bus.h:120
Definition can_corex.h:460