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

Abstract base class for IR protocol encoding and decoding. More...

#include <Codec.h>

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

Public Member Functions

 Codec (Preamble &preambleDetector)
 
virtual void init (Preamble &detector, uint32_t shortPulseUs=600, uint32_t longPulseUs=1200, uint32_t toleranceUs=200)
 
virtual bool begin (uint16_t bitFrequencyHz)
 initialization method for codecs that require setup before use (e.g., loading PIO programs, configuring state machines).
 
virtual void reset ()
 
PreamblegetPreamble ()
 Get the preamble detector associated with this codec.
 
void setPreamble (Preamble &preamble)
 Set the Preamble Detector object.
 
virtual size_t getEdgeCount () const =0
 Get the number of protocol symbols (bits, pulses, etc.) per encoded byte.
 
virtual bool decodeEdge (uint32_t durationUs, bool level, uint8_t &result)
 Edge-based decoding for protocol-agnostic RX drivers.
 
size_t encodePreamble (Vector< OutputEdge > &output)
 
virtual size_t encode (uint8_t byte, Vector< OutputEdge > &output)
 Fill output vector with protocol-specific OutputSpec(s) for a byte.
 
void setFrameSize (uint16_t size)
 
virtual size_t encodeBit (bool bit, Vector< OutputEdge > &output)
 Fill output vector with protocol-specific 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.
 
virtual bool decodeByte (Vector< OutputEdge > &edges, uint8_t &result)=0
 Decode edges into a byte.
 
virtual int getEndOfFrameDelayUs ()=0
 Provide the end of frame delay in microseconds for this protocol, used by RX driver to.
 
virtual bool getIdleLevel () const
 Provides the initial ldle state (low or hith)
 
virtual CodecEnum getCodecType () const =0
 instance.
 
const charname () const
 Get the name of the codec type as a string (e.g., "PulseDistance", "Manchester").
 

Protected Attributes

CustomPreambleUs _defaultPreamble
 
Preamble_preamble = &_defaultPreamble
 
uint16_t _bitFrequencyHz = 0
 
uint32_t _bitPeriodUs = 0
 
Vector< OutputEdge_decodeEdgeStream
 
volatile bool _inFrame = false
 

Detailed Description

Abstract base class for IR protocol encoding and decoding.

Provides a unified interface for encoding bytes to protocol-specific bitstreams, edge-based decoding for protocol-agnostic drivers, and protocol symbol count. Derived classes implement protocol-specific logic (e.g., Manchester, pulse-distance).

Definition at line 41 of file Codec.h.

Constructor & Destructor Documentation

◆ Codec()

pulsewire::Codec::Codec ( Preamble preambleDetector)
inline

Definition at line 45 of file Codec.h.

Member Function Documentation

◆ begin()

virtual bool pulsewire::Codec::begin ( uint16_t  bitFrequencyHz)
inlinevirtual

initialization method for codecs that require setup before use (e.g., loading PIO programs, configuring state machines).

Reimplemented in pulsewire::RecorderCodec, pulsewire::DifferentialManchesterCodec, pulsewire::ManchesterCodec, pulsewire::NRZCodec, pulsewire::PulseDistanceCodec, and pulsewire::PulseWidthCodec.

Definition at line 56 of file Codec.h.

◆ decodeByte()

virtual bool pulsewire::Codec::decodeByte ( Vector< OutputEdge > &  edges,
uint8_t result 
)
pure virtual

◆ decodeEdge()

virtual bool pulsewire::Codec::decodeEdge ( uint32_t  durationUs,
bool  level,
uint8_t result 
)
inlinevirtual

Edge-based decoding for protocol-agnostic RX drivers.

Called on each signal edge (duration since last edge, new level, minUs, maxUs). The codec maintains its own state and assembles frames internally.

Parameters
durationUsTime in microseconds since last edge.
levelNew logic level after the edge (true = HIGH, false = LOW).
frameBufferOutput buffer for decoded frame (if available).
frameBufferSizeSize of frameBuffer (bytes).
frameLenSet to decoded frame length if a frame is available.
Returns
True if a complete frame is decoded and available in frameBuffer.

Reimplemented in pulsewire::ManchesterCodec, pulsewire::NRZCodec, and pulsewire::RecorderCodec.

Definition at line 106 of file Codec.h.

◆ encode()

virtual size_t pulsewire::Codec::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.

Reimplemented in pulsewire::NRZCodec.

Definition at line 162 of file Codec.h.

◆ encodeBit()

virtual size_t pulsewire::Codec::encodeBit ( bool  bit,
Vector< OutputEdge > &  output 
)
inlinevirtual

Fill output vector with protocol-specific OutputSpec(s) for a bit.

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

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

Definition at line 184 of file Codec.h.

◆ encodeByte()

virtual void pulsewire::Codec::encodeByte ( uint8_t  byte,
std::vector< bool > &  bits 
) const
inlinevirtual

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).

Reimplemented in pulsewire::RecorderCodec.

Definition at line 194 of file Codec.h.

◆ encodePreamble()

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

Definition at line 146 of file Codec.h.

◆ getCodecType()

virtual CodecEnum pulsewire::Codec::getCodecType ( ) const
pure virtual

◆ getEdgeCount()

virtual size_t pulsewire::Codec::getEdgeCount ( ) const
pure virtual

Get the number of protocol symbols (bits, pulses, etc.) per encoded byte.

Returns
Number of protocol symbols per byte.

Implemented in pulsewire::RecorderCodec, pulsewire::ManchesterCodec, pulsewire::NRZCodec, pulsewire::PulseDistanceCodec, and pulsewire::PulseWidthCodec.

◆ getEndOfFrameDelayUs()

virtual int pulsewire::Codec::getEndOfFrameDelayUs ( )
pure virtual

Provide the end of frame delay in microseconds for this protocol, used by RX driver to.

Implemented in pulsewire::ManchesterCodec, pulsewire::NRZCodec, pulsewire::PulseDistanceCodec, pulsewire::PulseWidthCodec, and pulsewire::RecorderCodec.

◆ getIdleLevel()

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

Provides the initial ldle state (low or hith)

Reimplemented in pulsewire::DifferentialManchesterCodec.

Definition at line 208 of file Codec.h.

◆ getPreamble()

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

Get the preamble detector associated with this codec.

Returns
Reference to the Preamble instance used for preamble detection.

Definition at line 77 of file Codec.h.

◆ init()

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

Used by IRTransceiver to initialize codec with protocol-specific parameters

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

Definition at line 49 of file Codec.h.

◆ name()

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

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

Definition at line 218 of file Codec.h.

◆ reset()

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

Definition at line 67 of file Codec.h.

◆ setFrameSize()

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

Definition at line 173 of file Codec.h.

◆ setPreamble()

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

Set the Preamble Detector object.

Parameters
preamble

Definition at line 84 of file Codec.h.

Field Documentation

◆ _bitFrequencyHz

uint16_t pulsewire::Codec::_bitFrequencyHz = 0
protected

Definition at line 224 of file Codec.h.

◆ _bitPeriodUs

uint32_t pulsewire::Codec::_bitPeriodUs = 0
protected

Definition at line 225 of file Codec.h.

◆ _decodeEdgeStream

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

Definition at line 226 of file Codec.h.

◆ _defaultPreamble

CustomPreambleUs pulsewire::Codec::_defaultPreamble
protected

Definition at line 222 of file Codec.h.

◆ _inFrame

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

Definition at line 227 of file Codec.h.

◆ _preamble

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

Definition at line 223 of file Codec.h.


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