AckState

Enum AckState 

Source
pub enum AckState {
    Queued {
        needs_forward_confirmation: bool,
    },
    AwaitingForward {
        confirm_deadline_ms: u64,
    },
    RetryQueued,
    AwaitingAck,
}
Expand description

Tracks which phase of the two-stage ACK lifecycle a pending transmission is in.

UMSH ACK-requested sends go through several waiting phases before the coordinator either confirms delivery or gives up:

  1. Queued — the send has been accepted by the coordinator but has not yet gone on-air. Deadlines do not begin running until the first successful transmit.

  2. AwaitingForward — after a forwarded send is transmitted, the coordinator listens to see if the frame is re-broadcast by a repeater within confirm_deadline_ms. Because LoRa links are half-duplex, the sender may not be in direct range of the destination but can hear the repeater that retransmitted the frame, providing an early, cheap confirmation that the packet made it to the next hop.

  3. RetryQueued — the forwarding-confirmation timer expired, so the coordinator scheduled a retransmission after jittered retry backoff. No forwarding-confirmation timer runs in this state; a new one is armed only after the retransmission actually goes on-air.

  4. AwaitingAck — the coordinator waits for the destination to return a MAC ACK packet containing the correct ACK tag (a CMAC-derived value only the destination can compute after successfully decrypting the original frame). The absolute deadline is PendingAck::ack_deadline_ms; expiry means the send failed.

Nodes in direct radio range of the destination skip AwaitingForward entirely and move from Queued straight to AwaitingAck after the first successful transmit.

Variants§

§

Queued

Accepted for transmission but not yet sent.

Fields

§needs_forward_confirmation: bool
§

AwaitingForward

Waiting to overhear forwarding confirmation from the next hop.

Fields

§confirm_deadline_ms: u64
§

RetryQueued

Retransmission is queued with a retry backoff delay.

§

AwaitingAck

Waiting for the final destination’s transport ACK.

Trait Implementations§

Source§

impl Clone for AckState

Source§

fn clone(&self) -> AckState

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 AckState

Source§

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

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

impl PartialEq for AckState

Source§

fn eq(&self, other: &AckState) -> 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 AckState

Source§

impl Eq for AckState

Source§

impl StructuralPartialEq for AckState

Auto Trait Implementations§

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,

§

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<T> Same for T

Source§

type Output = T

Should always be Self
§

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.