Arduino PulseWire Transceiver Library
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes
pulsewire::ManchesterCodec Class Reference

Manchester encoding/decoding utility class for IR communication. More...

#include <ManchesterCodec.h>

Inheritance diagram for pulsewire::ManchesterCodec:
Inheritance graph
[legend]
Collaboration diagram for pulsewire::ManchesterCodec:
Collaboration graph
[legend]

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.
 
PreamblegetPreamble ()
 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 charname () 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
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ ManchesterCodec()

pulsewire::ManchesterCodec::ManchesterCodec ( Preamble preambleDetector)
inline

Definition at line 24 of file ManchesterCodec.h.

Member Function Documentation

◆ begin()

bool pulsewire::ManchesterCodec::begin ( uint32_t  bitFrequencyHz)
inlineoverridevirtual

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.

◆ decodeByte()

bool pulsewire::ManchesterCodec::decodeByte ( Vector< OutputEdge > &  edges,
uint8_t result 
)
inlineprotected

Definition at line 141 of file ManchesterCodec.h.

◆ decodeEdge()

bool pulsewire::ManchesterCodec::decodeEdge ( uint32_t  durationUs,
bool  level,
uint8_t result 
)
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.

Parameters
durationUs
level
result
Returns
true
false

Implements pulsewire::Codec.

Definition at line 62 of file ManchesterCodec.h.

◆ decodeEdgeInternal()

bool pulsewire::ManchesterCodec::decodeEdgeInternal ( uint32_t  durationUs,
bool  level,
uint8_t result 
)
inlineprotected

Definition at line 101 of file ManchesterCodec.h.

◆ encode()

virtual size_t pulsewire::ManchesterCodec::encode ( uint8_t  byte,
Vector< OutputEdge > &  output 
)
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.

Parameters
byteThe byte to encode.
outputVector to append OutputSpec(s).
Returns
Number of OutputSpec entries added.

Implements pulsewire::Codec.

Definition at line 89 of file ManchesterCodec.h.

◆ encodeBit()

size_t pulsewire::ManchesterCodec::encodeBit ( bool  bit,
Vector< OutputEdge > &  output 
)
inlineprotected

Fill output vector with Manchester OutputSpec(s) for a bit.

Parameters
bitThe bit to encode (true/false).
_bitPeriodUsThe bit period in microseconds.
outputVector to append OutputSpec(s).
Returns
Number of OutputSpec entries added.

Definition at line 175 of file ManchesterCodec.h.

◆ encodeByte()

virtual void pulsewire::Codec::encodeByte ( uint8_t  byte,
std::vector< bool > &  bits 
) const
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.

Parameters
byteThe input byte to encode.
bitsOutput buffer for encoded bits (protocol-specific format).

Definition at line 204 of file Codec.h.

◆ encodePreamble()

size_t pulsewire::Codec::encodePreamble ( Vector< OutputEdge > &  output)
inlineinherited

Definition at line 157 of file Codec.h.

◆ flushEncoder()

virtual size_t pulsewire::Codec::flushEncoder ( Vector< OutputEdge > &  output)
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.

Parameters
outputVector to append OutputSpec(s).
Returns
Number of OutputSpec entries added.

Reimplemented in pulsewire::MillerCodec.

Definition at line 185 of file Codec.h.

◆ getCodecType()

CodecEnum pulsewire::ManchesterCodec::getCodecType ( ) const
inlineoverridevirtual

Get the codec type (e.g., PulseDistance, Manchester) for this Codec instance.

Implements pulsewire::Codec.

Definition at line 26 of file ManchesterCodec.h.

◆ getEdgeCount()

size_t pulsewire::ManchesterCodec::getEdgeCount ( ) const
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.

◆ getEndOfFrameDelayUs()

int pulsewire::ManchesterCodec::getEndOfFrameDelayUs ( )
inlineoverridevirtual

Get delay to mark End Of Frame in us.

Returns
int

Implements pulsewire::Codec.

Definition at line 43 of file ManchesterCodec.h.

◆ getFrameSize()

uint16_t pulsewire::Codec::getFrameSize ( ) const
inlineinherited

Get the configured frame size.

Definition at line 120 of file Codec.h.

◆ getIdleLevel()

virtual bool pulsewire::Codec::getIdleLevel ( ) const
inlinevirtualinherited

Provides the initial ldle state (low or hith)

Reimplemented in pulsewire::DifferentialManchesterCodec, pulsewire::MillerCodec, pulsewire::NRZCodec, and pulsewire::RZCodec.

Definition at line 127 of file Codec.h.

◆ getPreamble()

Preamble & pulsewire::Codec::getPreamble ( )
inlineinherited

Get the preamble detector associated with this codec.

Returns
Reference to the Preamble instance used for preamble detection.

Definition at line 100 of file Codec.h.

◆ init()

virtual void pulsewire::Codec::init ( Preamble detector,
uint32_t  shortPulseUs = 600,
uint32_t  longPulseUs = 1200,
uint32_t  toleranceUs = 200 
)
inlinevirtualinherited

Used by IRTransceiver to initialize codec with protocol-specific parameters

Reimplemented in pulsewire::PulseWidthCodec, pulsewire::PulseDistanceCodec, and pulsewire::RecorderCodec.

Definition at line 63 of file Codec.h.

◆ name()

const char * pulsewire::Codec::name ( ) const
inlineinherited

Get the name of the codec type as a string (e.g., "PulseDistance", "Manchester").

Definition at line 135 of file Codec.h.

◆ reset()

virtual void pulsewire::Codec::reset ( )
inlinevirtualinherited

Reset the internal state of the codec.

Reimplemented in pulsewire::DifferentialManchesterCodec, pulsewire::MillerCodec, pulsewire::NRZCodec, and pulsewire::RZCodec.

Definition at line 84 of file Codec.h.

◆ setFrameSize()

void pulsewire::Codec::setFrameSize ( uint16_t  size)
inlineinherited

Set the Frame Size.

Parameters
size

Definition at line 114 of file Codec.h.

◆ setPreamble()

void pulsewire::Codec::setPreamble ( Preamble preamble)
inlineinherited

Set the Preamble Detector object.

Parameters
preamble

Definition at line 94 of file Codec.h.

Field Documentation

◆ _bitFrequencyHz

uint16_t pulsewire::Codec::_bitFrequencyHz = 0
protectedinherited

Definition at line 190 of file Codec.h.

◆ _bitPeriodUs

uint32_t pulsewire::Codec::_bitPeriodUs = 0
protectedinherited

Definition at line 191 of file Codec.h.

◆ _decodeEdgeStream

Vector<OutputEdge> pulsewire::Codec::_decodeEdgeStream
protectedinherited

Definition at line 192 of file Codec.h.

◆ _defaultPreamble

CustomPreambleUs pulsewire::Codec::_defaultPreamble
protectedinherited

Definition at line 188 of file Codec.h.

◆ _frameSize

uint16_t pulsewire::Codec::_frameSize = 0
protectedinherited

Definition at line 194 of file Codec.h.

◆ _inFrame

volatile bool pulsewire::Codec::_inFrame = false
protectedinherited

Definition at line 193 of file Codec.h.

◆ _preamble

Preamble* pulsewire::Codec::_preamble = &_defaultPreamble
protectedinherited

Definition at line 189 of file Codec.h.


The documentation for this class was generated from the following file: