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}