M5Unit-INFRARED 0.2.0 git rev:76ad9e1
Loading...
Searching...
No Matches
m5::unit::ir::IRCodec Class Referenceabstract

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

#include <ir_codec.hpp>

Inheritance diagram for m5::unit::ir::IRCodec:
m5::unit::ir::AutoDetectCodec m5::unit::ir::MitsubishiCodec m5::unit::ir::NecCodec m5::unit::ir::PanasonicCodec m5::unit::ir::RawCodec m5::unit::ir::Rc5Codec m5::unit::ir::Rc6Codec m5::unit::ir::SircCodec

Public Member Functions

 IRCodec (CodecType t)
 
CodecType type () const
 Get codec type for safe downcasting.
 
TX
virtual item_container_type encode (uint16_t address, uint16_t command, bool repeat=false)=0
 Encode IR command into RMT items.
 
virtual uint32_t carrierFrequencyHz () const =0
 Carrier frequency for this protocol in Hz.
 
virtual float carrierDuty () const
 Carrier duty cycle (0.0 - 1.0)
 
virtual uint8_t minFrames () const
 Number of frames that should be transmitted per keypress for this protocol.
 
virtual uint16_t frameGapUs () const
 Inter-frame gap (microseconds) when transmitting multiple frames in one burst.
 
RX
virtual bool decode (const m5::unit::gpio::m5_rmt_item_t *items, uint32_t num, DecodeResult &result)=0
 Try to decode RMT items into an IR command.
 

Detailed Description

Abstract base class for IR protocol encoding/decoding.

Follows the Strategy pattern (like rf433::ProtocolCodec). Each protocol subclass implements encode/decode with protocol-specific timing.

Member Function Documentation

◆ carrierDuty()

virtual float m5::unit::ir::IRCodec::carrierDuty ( ) const
inlinevirtual

Carrier duty cycle (0.0 - 1.0)

Returns
Duty cycle (default 0.33)

◆ carrierFrequencyHz()

virtual uint32_t m5::unit::ir::IRCodec::carrierFrequencyHz ( ) const
pure virtual

Carrier frequency for this protocol in Hz.

Returns
Frequency (e.g., 38000 for NEC, 40000 for SIRC, 36000 for RC5/RC6)

Implemented in m5::unit::ir::AutoDetectCodec, m5::unit::ir::MitsubishiCodec, m5::unit::ir::NecCodec, m5::unit::ir::PanasonicCodec, m5::unit::ir::RawCodec, m5::unit::ir::Rc5Codec, m5::unit::ir::Rc6Codec, and m5::unit::ir::SircCodec.

◆ decode()

virtual bool m5::unit::ir::IRCodec::decode ( const m5::unit::gpio::m5_rmt_item_t * items,
uint32_t num,
DecodeResult & result )
pure virtual

Try to decode RMT items into an IR command.

Parameters
itemsRMT items from receiver
numNumber of items
[out]resultDecoded result
Returns
true if successfully decoded

◆ encode()

virtual item_container_type m5::unit::ir::IRCodec::encode ( uint16_t address,
uint16_t command,
bool repeat = false )
pure virtual

Encode IR command into RMT items.

Parameters
addressDevice address
commandCommand code
repeatIf true, encode repeat frame instead of full frame
Returns
RMT items for transmission

Implemented in m5::unit::ir::AutoDetectCodec, m5::unit::ir::MitsubishiCodec, m5::unit::ir::NecCodec, m5::unit::ir::PanasonicCodec, m5::unit::ir::RawCodec, m5::unit::ir::Rc5Codec, m5::unit::ir::Rc6Codec, and m5::unit::ir::SircCodec.

◆ frameGapUs()

virtual uint16_t m5::unit::ir::IRCodec::frameGapUs ( ) const
inlinevirtual

Inter-frame gap (microseconds) when transmitting multiple frames in one burst.

Returns
Default 0; overridden by protocols that specify a gap (Sony SIRC ≈ 30000, Mitsubishi ≈ 28500)

Reimplemented in m5::unit::ir::MitsubishiCodec, and m5::unit::ir::SircCodec.

◆ minFrames()

virtual uint8_t m5::unit::ir::IRCodec::minFrames ( ) const
inlinevirtual

Number of frames that should be transmitted per keypress for this protocol.

Returns
Default 1; overridden by protocols that require multi-frame transmission (Sony SIRC = 3, Mitsubishi = 2)

Reimplemented in m5::unit::ir::MitsubishiCodec, and m5::unit::ir::SircCodec.

◆ type()

CodecType m5::unit::ir::IRCodec::type ( ) const
inline

Get codec type for safe downcasting.

Returns
CodecType enum value identifying the protocol