pub enum Filter {
Standard {
filter: u16,
mask: u16,
},
Dual {
filter1: u16,
mask1: u16,
filter2: u16,
mask2: u16,
},
Extended {
filter: u32,
mask: u32,
},
}
Expand description
Is used to filter out unwanted CAN IDs (messages).
Notice that Espressif TWAI (CAN in rest of the world) acceptance filtering works differently than common CAN filtering (for example mask bits are inversed). However here those differences are hidden away from the user and common CAN filtering is used.
mask
is used to determine which bits in the incoming CAN ID are compared with the filter
value.
Bits in mask
mean:
0
: do not care - the bit is not used for the comparison
1
: must match - the bit of the incoming CAN ID must have the same state as in filter
Notice that if mask
is 0
, all CAN IDs are accepted regardless of filter
value.
§Examples
This shows how 11 bit CAN ID 0x3AA
goes through filtering engine and is finally accepted:
// incoming id [ 0 1 1 1 0 1 0 1 0 1 0 ]
// mask [ 1 0 1 0 0 1 1 1 0 0 0 ]
// 1 = compare
// 0 = do not care
// masked id [ 0 _ 1 _ _ 1 0 1 _ _ _ ]
// filter [ 0 0 1 1 1 1 0 1 0 1 1 ]
// incoming id [ 0 1 1 1 0 1 0 1 0 1 0 ]
// accepted
Notice that for example 0x7AA
would not be accepted because its MSB bit is 1
,
but filter
only accepts 0
in this bit position and mask
says that this bit must be compared.
Accept only CAN ID 0x567
let filter = 0x567;
// every bit must match filter
let mask = 0x7FF;
let f = Filter::Standard { filter, mask };
Accept CAN IDs 0x560 - 0x56F
let filter = 0x560;
// do not care about 4 LSB bits
let mask = 0x7F0;
let f = Filter::Standard { filter, mask };
Variants§
Standard
Filter for 11 bit standard CAN IDs
Dual
Filter for two 11 bit standard CAN IDs
Extended
Filter for 29 bit extended CAN IDs
Implementations§
source§impl Filter
impl Filter
sourcepub fn standard_allow_all() -> Filter
pub fn standard_allow_all() -> Filter
Filter that allows all standard CAN IDs.
sourcepub fn extended_allow_all() -> Filter
pub fn extended_allow_all() -> Filter
Filter that accepts all extended CAN IDs.
Trait Implementations§
impl Copy for Filter
impl Eq for Filter
impl StructuralPartialEq for Filter
Auto Trait Implementations§
impl Freeze for Filter
impl RefUnwindSafe for Filter
impl Send for Filter
impl Sync for Filter
impl Unpin for Filter
impl UnwindSafe for Filter
Blanket Implementations§
§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)