|
Arduino PulseWire Transceiver Library
|
Manchester encoding/decoding utility class for IR communication. More...
#include <ManchesterCodec.h>


Public Member Functions | |
| ManchesterCodec (Preamble &preambleDetector) | |
| CodecEnum | getCodecType () const override |
| bool | begin (uint32_t bitFrequencyHz) override |
| initialization method for codecs that require setup before use (e.g., loading PIO programs, configuring state machines). | |
| int | getEndOfFrameDelayUs () override |
| Get delay to mark End Of Frame in us. | |
| size_t | getEdgeCount () const override |
| Get the number of edges used to encode a byte (16 for Manchester). | |
| bool | decodeEdge (uint32_t durationUs, bool level, uint8_t &result) override |
| Decode incoming edges to reconstruct bytes. Handles multiple edges per bit for noise tolerance by averaging edge durations and applying decodeEdge() logic to the average. This allows for robust decoding even in noisy environments where multiple edges may be detected. | |
| virtual size_t | encode (uint8_t byte, Vector< OutputEdge > &output) |
| Fill output vector with protocol-specific OutputSpec(s) for a byte. | |
| virtual void | init (Preamble &detector, uint32_t shortPulseUs=600, uint32_t longPulseUs=1200, uint32_t toleranceUs=200) |
| virtual void | reset () |
| Reset the internal state of the codec. | |
| void | setPreamble (Preamble &preamble) |
| Set the Preamble Detector object. | |
| Preamble & | getPreamble () |
| Get the preamble detector associated with this codec. | |
| void | setFrameSize (uint16_t size) |
| Set the Frame Size. | |
| uint16_t | getFrameSize () const |
| Get the configured frame size. | |
| virtual bool | getIdleLevel () const |
| Provides the initial ldle state (low or hith) | |
| const char * | name () const |
| Get the name of the codec type as a string (e.g., "PulseDistance", "Manchester"). | |
| size_t | encodePreamble (Vector< OutputEdge > &output) |
| virtual size_t | flushEncoder (Vector< OutputEdge > &output) |
| Flush any pending encoder state at end of frame. | |
Protected Member Functions | |
| bool | decodeEdgeInternal (uint32_t durationUs, bool level, uint8_t &result) |
| bool | decodeByte (Vector< OutputEdge > &edges, uint8_t &result) |
| size_t | encodeBit (bool bit, Vector< OutputEdge > &output) |
| Fill output vector with Manchester OutputSpec(s) for a bit. | |
| virtual void | encodeByte (uint8_t byte, std::vector< bool > &bits) const |
| Encode a byte to protocol bitstream. Default implementation encodes to raw bits (MSB first), but can be overridden by protocols that require different bit formatting (e.g., Manchester). The output bits are stored in. | |
Protected Attributes | |
| CustomPreambleUs | _defaultPreamble |
| Preamble * | _preamble = &_defaultPreamble |
| uint16_t | _bitFrequencyHz = 0 |
| uint32_t | _bitPeriodUs = 0 |
| Vector< OutputEdge > | _decodeEdgeStream |
| volatile bool | _inFrame = false |
| uint16_t | _frameSize = 0 |
Manchester encoding/decoding utility class for IR communication.
The following IR protocols use Manchester encoding:
Provides instance methods for encoding bytes to Manchester bitstream and decoding Manchester bitstream to bytes. Can be injected into drivers for modularity and reuse.
Definition at line 20 of file ManchesterCodec.h.
|
inline |
Definition at line 24 of file ManchesterCodec.h.
initialization method for codecs that require setup before use (e.g., loading PIO programs, configuring state machines).
Reimplemented from pulsewire::Codec.
Definition at line 28 of file ManchesterCodec.h.
|
inlineprotected |
Definition at line 141 of file ManchesterCodec.h.
|
inlineoverridevirtual |
Decode incoming edges to reconstruct bytes. Handles multiple edges per bit for noise tolerance by averaging edge durations and applying decodeEdge() logic to the average. This allows for robust decoding even in noisy environments where multiple edges may be detected.
| durationUs | |
| level | |
| result |
Implements pulsewire::Codec.
Definition at line 62 of file ManchesterCodec.h.
|
inlineprotected |
Definition at line 101 of file ManchesterCodec.h.
|
inlinevirtual |
Fill output vector with protocol-specific OutputSpec(s) for a byte.
Encodes the byte to protocol bits and appends OutputSpec(s) for each bit.
| byte | The byte to encode. |
| output | Vector to append OutputSpec(s). |
Implements pulsewire::Codec.
Definition at line 89 of file ManchesterCodec.h.
|
inlineprotected |
Fill output vector with Manchester OutputSpec(s) for a bit.
| bit | The bit to encode (true/false). |
| _bitPeriodUs | The bit period in microseconds. |
| output | Vector to append OutputSpec(s). |
Definition at line 175 of file ManchesterCodec.h.
|
inlineprotectedvirtualinherited |
Encode a byte to protocol bitstream. Default implementation encodes to raw bits (MSB first), but can be overridden by protocols that require different bit formatting (e.g., Manchester). The output bits are stored in.
| byte | The input byte to encode. |
| bits | Output buffer for encoded bits (protocol-specific format). |
|
inlineinherited |
|
inlinevirtualinherited |
Flush any pending encoder state at end of frame.
Some codecs (e.g., Miller) accumulate pending duration that must be output at the end of the frame. This method outputs any remaining pending state. Default implementation does nothing.
| output | Vector to append OutputSpec(s). |
Reimplemented in pulsewire::MillerCodec.
|
inlineoverridevirtual |
Get the codec type (e.g., PulseDistance, Manchester) for this Codec instance.
Implements pulsewire::Codec.
Definition at line 26 of file ManchesterCodec.h.
|
inlineoverridevirtual |
Get the number of edges used to encode a byte (16 for Manchester).
Implements pulsewire::Codec.
Definition at line 48 of file ManchesterCodec.h.
|
inlineoverridevirtual |
Get delay to mark End Of Frame in us.
Implements pulsewire::Codec.
Definition at line 43 of file ManchesterCodec.h.
|
inlineinherited |
Provides the initial ldle state (low or hith)
Reimplemented in pulsewire::DifferentialManchesterCodec, pulsewire::MillerCodec, pulsewire::NRZCodec, and pulsewire::RZCodec.
|
inlineinherited |
|
inlinevirtualinherited |
Used by IRTransceiver to initialize codec with protocol-specific parameters
Reimplemented in pulsewire::PulseWidthCodec, pulsewire::PulseDistanceCodec, and pulsewire::RecorderCodec.
Reset the internal state of the codec.
Reimplemented in pulsewire::DifferentialManchesterCodec, pulsewire::MillerCodec, pulsewire::NRZCodec, and pulsewire::RZCodec.
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |