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

Sony SIRC IR protocol encoder/decoder. More...

#include <sirc_codec.hpp>

Inheritance diagram for m5::unit::ir::SircCodec:
m5::unit::ir::IRCodec

Public Types

enum class  Variant : uint8_t { SIRC12 = 12 , SIRC15 = 15 , SIRC20 = 20 }
 SIRC protocol variants.
 

Public Member Functions

 SircCodec (Variant v=Variant::SIRC12)
 Constructor.
 
item_container_type encode (uint16_t address, uint16_t command, bool repeat) override
 Encode a Sony SIRC frame for the currently selected variant.
 
bool decode (const gpio::m5_rmt_item_t *items, uint32_t num, DecodeResult &result) override
 Decode a Sony SIRC frame and, on success, sync the active variant.
 
uint32_t carrierFrequencyHz () const override
 Carrier frequency for Sony SIRC (40 kHz)
 
uint8_t minFrames () const override
 Sony SIRC requires the frame to be sent at least 3 times per keypress.
 
uint16_t frameGapUs () const override
 Inter-frame gap ≈ 30 ms (keeps the 45 ms start-to-start cycle)
 
Variant variant () const
 Get current variant.
 
void setVariant (Variant v)
 Set variant (12 / 15 / 20-bit)
 
- Public Member Functions inherited from m5::unit::ir::IRCodec
 IRCodec (CodecType t)
 
CodecType type () const
 Get codec type for safe downcasting.
 
virtual float carrierDuty () const
 Carrier duty cycle (0.0 - 1.0)
 
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

Sony SIRC IR protocol encoder/decoder.

  • Carrier: 40 kHz, duty 1/3
  • Modulation: Pulse Width (space constant, mark varies)
  • Bit order: LSB first
  • 12-bit: 7-bit command + 5-bit address
  • 15-bit: 7-bit command + 8-bit address
  • 20-bit: 7-bit command + 5-bit address + 8-bit extended
Timing
Element Mark (us) Space (us)
Start 2400 600
Bit "1" 1200 600
Bit "0" 600 600

Constructor & Destructor Documentation

◆ SircCodec()

m5::unit::ir::SircCodec::SircCodec ( Variant v = Variant::SIRC12)
inlineexplicit

Constructor.

Parameters
vInitial SIRC variant (default SIRC12)

Member Function Documentation

◆ carrierFrequencyHz()

uint32_t m5::unit::ir::SircCodec::carrierFrequencyHz ( ) const
inlineoverridevirtual

Carrier frequency for Sony SIRC (40 kHz)

Implements m5::unit::ir::IRCodec.

◆ encode()

item_container_type m5::unit::ir::SircCodec::encode ( uint16_t address,
uint16_t command,
bool repeat )
overridevirtual

Encode a Sony SIRC frame for the currently selected variant.

Implements m5::unit::ir::IRCodec.

◆ frameGapUs()

uint16_t m5::unit::ir::SircCodec::frameGapUs ( ) const
inlineoverridevirtual

Inter-frame gap ≈ 30 ms (keeps the 45 ms start-to-start cycle)

Reimplemented from m5::unit::ir::IRCodec.

◆ minFrames()

uint8_t m5::unit::ir::SircCodec::minFrames ( ) const
inlineoverridevirtual

Sony SIRC requires the frame to be sent at least 3 times per keypress.

Reimplemented from m5::unit::ir::IRCodec.

◆ setVariant()

void m5::unit::ir::SircCodec::setVariant ( Variant v)
inline

Set variant (12 / 15 / 20-bit)

Parameters
vNew variant to apply on subsequent encode() calls

◆ variant()

Variant m5::unit::ir::SircCodec::variant ( ) const
inline

Get current variant.

Returns
Variant currently used for encode()