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

Fields

§filter: u16
§mask: u16

Filter for 11 bit standard CAN IDs

§

Dual

Fields

§filter1: u16
§mask1: u16
§filter2: u16
§mask2: u16

Filter for two 11 bit standard CAN IDs

§

Extended

Fields

§filter: u32
§mask: u32

Filter for 29 bit extended CAN IDs

Implementations§

source§

impl Filter

source

pub fn standard_allow_all() -> Filter

Filter that allows all standard CAN IDs.

source

pub fn extended_allow_all() -> Filter

Filter that accepts all extended CAN IDs.

Trait Implementations§

source§

impl Clone for Filter

source§

fn clone(&self) -> Filter

Returns a copy of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Filter

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Default for Filter

source§

fn default() -> Filter

Returns the “default value” for a type. Read more
source§

impl PartialEq for Filter

source§

fn eq(&self, other: &Filter) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for Filter

source§

impl Eq for Filter

source§

impl StructuralPartialEq for Filter

Auto Trait Implementations§

§

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 T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.