Enum esp_idf_hal::can::config::Filter

source ·
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

Fields

§filter: u16
§mask: u16
§

Dual

Filter for two 11 bit standard CAN IDs

Fields

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

Extended

Filter for 29 bit extended CAN IDs

Fields

§filter: u32
§mask: u32

Implementations§

source§

impl Filter

source

pub fn standard_allow_all() -> Self

Filter that allows all standard CAN IDs.

source

pub fn extended_allow_all() -> Self

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

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

impl Default for Filter

source§

fn default() -> Self

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 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 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> CloneToUninit for T
where T: Clone,

§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
§

impl<T> CloneToUninit for T
where T: Copy,

§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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.