socketcan_alt/frame/
id.rs

1use crate::sys;
2
3#[derive(Clone, Copy, Debug)]
4#[cfg_attr(test, derive(PartialEq))]
5pub enum Id {
6    /// 11-bit identifier
7    Standard(u32),
8    /// 29-bit identifier
9    Extended(u32),
10}
11
12impl Id {
13    pub(crate) fn from_can_id(can_id: u32) -> Self {
14        if can_id & sys::CAN_EFF_FLAG == 0 {
15            Id::Standard(can_id & sys::CAN_SFF_MASK)
16        } else {
17            Id::Extended(can_id & sys::CAN_EFF_MASK)
18        }
19    }
20
21    pub(crate) fn into_can_id(self) -> u32 {
22        match self {
23            Self::Standard(id) => {
24                assert!(id <= sys::CAN_SFF_MASK);
25                id
26            }
27            Self::Extended(id) => {
28                assert!(id <= sys::CAN_EFF_MASK);
29                id | sys::CAN_EFF_FLAG
30            }
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests;