pub struct Packet<'a, const N: usize> { /* private fields */ }Expand description
N is the maximum packet size we can handle Panics if N >= 8191
Implementations§
Source§impl<'a, const N: usize> Packet<'a, N>
impl<'a, const N: usize> Packet<'a, N>
pub fn new(buf: &'a mut [u8; N]) -> Self
pub fn clone_backing<'b>(&self, buf: &'b mut [u8; N]) -> Packet<'b, N>
Sourcepub fn decode(buf: Buffer<'a, N>) -> Result<Self, DecodeError>
pub fn decode(buf: Buffer<'a, N>) -> Result<Self, DecodeError>
Expects bytes in the buf
buf is used as the backing buffer for the Packet
pub fn encode(&self) -> &[u8]
Sourcepub fn semi_encode(self) -> Result<Buffer<'a, N>, (EncodeError, Self)>
pub fn semi_encode(self) -> Result<Buffer<'a, N>, (EncodeError, Self)>
Directly after the CRC block in The Pipeline
Sourcepub fn semi_decode(buf: Buffer<'a, N>) -> Result<Self, DecodeError>
pub fn semi_decode(buf: Buffer<'a, N>) -> Result<Self, DecodeError>
Directly after the CRC block in The Pipeline
Expects bytes in the buf
buf is used as the backing buffer for the Packet
Sourcepub fn fully_encode<const M: usize>(
self,
out: &mut Buffer<'_, M>,
) -> Result<(), EncodeError>
pub fn fully_encode<const M: usize>( self, out: &mut Buffer<'_, M>, ) -> Result<(), EncodeError>
Encodes packet for transmission on the air. Includes the data length L, but does not include the preamble or sync word.
Sourcepub fn fully_decode(
data: &[u8],
buf: &'a mut [u8; N],
) -> Result<Self, DecodeError>
pub fn fully_decode( data: &[u8], buf: &'a mut [u8; N], ) -> Result<Self, DecodeError>
Decodes packet that was received over the air.
Packet shouldn’t have preamble, sync word, or data langth L.
Expects bytes in data
buf is used as the backing buffer for the Packet
Sourcepub fn fully_decode_soft<const M: usize, T: DecodeFrom>(
data: &mut [T],
buf: &'a mut [u8; N],
) -> Result<Self, DecodeError>
pub fn fully_decode_soft<const M: usize, T: DecodeFrom>( data: &mut [T], buf: &'a mut [u8; N], ) -> Result<Self, DecodeError>
Expects soft bits in data. Bits should be LLR, with positive numbers more likely to be 0.
Returns DecodeError::Overflow if M is less than data.len().
pub fn iter(&self) -> ValidatedWhiskerIter<'_> ⓘ
pub fn identification(&self) -> Option<Identification>
pub fn add_identification( &mut self, w: Identification, ) -> Result<(), EncodeError>
pub fn clear_identification(&mut self)
pub fn timestamp(&self) -> Option<Timestamp>
pub fn add_timestamp(&mut self, w: Timestamp) -> Result<(), EncodeError>
pub fn clear_timestamp(&mut self)
pub fn gps(&self) -> Option<Gps>
pub fn add_gps(&mut self, w: Gps) -> Result<(), EncodeError>
pub fn clear_gps(&mut self)
pub fn route(&self) -> Option<Route>
pub fn add_route(&mut self, w: Route) -> Result<(), EncodeError>
pub fn clear_route(&mut self)
pub fn node_info(&self) -> Option<NodeInfo>
pub fn add_node_info(&mut self, w: NodeInfo) -> Result<(), EncodeError>
pub fn clear_node_info(&mut self)
pub fn destination_iter( &self, ) -> FilterMap<ValidatedWhiskerIter<'_>, fn(Whisker) -> Option<Destination>>
pub fn add_destination(&mut self, w: Destination) -> Result<(), EncodeError>
pub fn clear_destination(&mut self)
pub fn arbitrary_iter( &self, ) -> FilterMap<ValidatedWhiskerIter<'_>, fn(Whisker) -> Option<Arbitrary>>
pub fn add_arbitrary(&mut self, w: Arbitrary) -> Result<(), EncodeError>
pub fn clear_arbitrary(&mut self)
pub fn comment<'b>(&self, buf: &'b mut [u8]) -> Result<&'b str, CommentError>
pub fn add_comment(&mut self, comment: &str) -> Result<(), EncodeError>
pub fn clear_comment(&mut self)
Sourcepub fn should_digipeat(
&self,
identity: Identity<'_>,
) -> Result<(), DigipeatError>
pub fn should_digipeat( &self, identity: Identity<'_>, ) -> Result<(), DigipeatError>
Given the callsign and ssid of a node, should it digipeat this packet? Takes into account things such as if we’ve digipeated it already, the max hops, etc.
Sourcepub fn append_to_route(
&mut self,
callsign: &str,
ssid: u8,
rssi: Option<f64>,
) -> Result<(), PacketRouteAppendError>
pub fn append_to_route( &mut self, callsign: &str, ssid: u8, rssi: Option<f64>, ) -> Result<(), PacketRouteAppendError>
Note that if this fails due to a CATS overflow, it will wipe the route off of the packet
Trait Implementations§
Auto Trait Implementations§
impl<'a, const N: usize> Freeze for Packet<'a, N>
impl<'a, const N: usize> RefUnwindSafe for Packet<'a, N>
impl<'a, const N: usize> Send for Packet<'a, N>
impl<'a, const N: usize> Sync for Packet<'a, N>
impl<'a, const N: usize> Unpin for Packet<'a, N>
impl<'a, const N: usize> !UnwindSafe for Packet<'a, N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.