Skip to main content

rs_can/
bus.rs

1use crate::{device::Device, CanResult};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum BusState {
5    ErrorActive,
6    ErrorPassive,
7    BusOff,
8    Unknown,
9}
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub struct ErrorCounters {
13    pub tx: u32,
14    pub rx: u32,
15}
16
17pub trait BusDiagnostic: Device {
18    fn bus_state(&self, channel: Self::Channel) -> CanResult<BusState>;
19    fn error_counters(&self, channel: Self::Channel) -> CanResult<ErrorCounters>;
20    fn recover_bus_off(&self, channel: Self::Channel) -> CanResult<()>;
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
24pub struct BusCapabilities {
25    pub can_fd: bool,
26    pub bitrate_switch: bool,
27    pub error_state_indicator: bool,
28    pub listen_only: bool,
29    pub loopback: bool,
30    pub hardware_timestamp: bool,
31    pub bus_diagnostics: bool,
32}
33
34pub trait BusCapability: Device {
35    fn capabilities(&self) -> BusCapabilities;
36}