pub struct Decoder { /* private fields */ }
Expand description
Decode a Manchester encoded stream of periodically taken samples into a datagram.
Implementations§
Source§impl Decoder
impl Decoder
Sourcepub const fn new(
activity_level: ActivityLevel,
sync_on_turning_edge: SyncOnTurningEdge,
bit_order: BitOrder,
) -> Self
pub const fn new( activity_level: ActivityLevel, sync_on_turning_edge: SyncOnTurningEdge, bit_order: BitOrder, ) -> Self
Create an instance of a new manchester encoder
§Arguments
activity_level
- Low and High indicate what the activity level is the negation of the activity level is the inactivity level where no datagram is transmitted.sync_on_turning_edge
- Indication if on the First or the Second edge bits are aligned.bit_order
- Either BigEndian (MSP is received first) or LittleEndian (LSB is received first) In combination of activity_level and sync_on_turning_edge it is determined what if the first bit is either zero or one
Activity level | Sync on turning edge | Resulting first bit datagram |
---|---|---|
High | First | Zero |
High | Second | One |
Low | First | One |
Low | Second | Zero |
Sourcepub fn next(&mut self, sample: bool) -> Option<Datagram>
pub fn next(&mut self, sample: bool) -> Option<Datagram>
Sample a manchester modulated signal periodically and extract datagrams
To cover some jitter the sampling rate is three times the half bit frequency i.e. an Infrared manchester decoded bit lasts 2x 889 us), Thus sampling period should be 296 us.
Note: three times the bit frequency is good enough to consider the Nyquist criterion and some potential jitter in sending frequency.
§Arguments
sample
- the level of the pin true equals high, false equals low
§Returns
Option of an infrared datagram
- None - if no complete datagram is received
- Some(datagram) - a completely received datagram
Auto Trait Implementations§
impl Freeze for Decoder
impl RefUnwindSafe for Decoder
impl Send for Decoder
impl Sync for Decoder
impl Unpin for Decoder
impl UnwindSafe for Decoder
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
Mutably borrows from an owned value. Read more