Skip to main content

ButtonTiming

Struct ButtonTiming 

Source
pub struct ButtonTiming {
    pub long_press_ms: u64,
    pub multi_tap_ms: u64,
}
Expand description

Press-decoding timing shared by both front-panel drivers — the Fire27 physical buttons (ButtonResources::into_buttons_with_timing, feature buttons) and the CoreS3 touch strip (TouchButtonsConfig::with_timing). Milliseconds (the touch driver’s native unit; the Fire27 async-button Durations are built from these).

The knob that matters for latency is multi_tap_ms: both drivers count consecutive taps, which delays every single press by that window. Set it to 0 (see immediate_single_press) for latency-sensitive input like an encoder — a downstream accumulator can still sum immediate Short(1) events into multi-step (#58).

Fields§

§long_press_ms: u64

Hold time before a press becomes ButtonAction::Long.

§multi_tap_ms: u64

Max gap between consecutive taps still counted as one multi-tap sequence. 0 disables counting: each press emits Short(1) as soon as it is debounced, with no counting delay.

Implementations§

Source§

impl ButtonTiming

Source

pub const fn multi_tap() -> Self

Count multi-taps (the historical behaviour): a single press is delayed by the multi_tap_ms window so consecutive taps can be counted. 500 ms long-press, 300 ms multi-tap window.

Source

pub const fn immediate_single_press() -> Self

Report every press immediately — multi-tap counting disabled (multi_tap_ms = 0). For latency-sensitive input (e.g. an encoder). Keeps the multi_tap long-press threshold.

Trait Implementations§

Source§

impl Clone for ButtonTiming

Source§

fn clone(&self) -> ButtonTiming

Returns a duplicate 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 ButtonTiming

Source§

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

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

impl Default for ButtonTiming

The unified opt-in baseline is multi_tap. Note the legacy entry points (ButtonResources::into_buttons, TouchButtons::new with TouchButtonsConfig::default) keep each driver’s original per-board timings for backward compatibility; this default is only used where a ButtonTiming is taken explicitly.

Source§

fn default() -> Self

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

impl PartialEq for ButtonTiming

Source§

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

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

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for ButtonTiming

Source§

impl Eq for ButtonTiming

Source§

impl StructuralPartialEq for ButtonTiming

Auto Trait Implementations§

§

impl Freeze for ButtonTiming

§

impl PsramSafe for ButtonTiming

§

impl RefUnwindSafe for ButtonTiming

§

impl Send for ButtonTiming

§

impl Sync for ButtonTiming

§

impl Unpin for ButtonTiming

§

impl UnsafeUnpin for ButtonTiming

§

impl UnwindSafe for ButtonTiming

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
§

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
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
§

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

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

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

Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

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.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,