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

Panasonic (Kaseikyo) 48-bit IR protocol encoder/decoder. More...

#include <panasonic_codec.hpp>

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

Public Member Functions

 PanasonicCodec ()
 Constructor.
 
item_container_type encode (uint16_t address, uint16_t command, bool repeat) override
 Encode a 48-bit Panasonic frame from (manufacturer=address, device+function=command)
 
bool decode (const gpio::m5_rmt_item_t *items, uint32_t num, DecodeResult &result) override
 Decode a 48-bit Panasonic frame; result.raw receives the full 48-bit value.
 
uint32_t carrierFrequencyHz () const override
 Carrier frequency for Panasonic (36.7 kHz)
 
item_container_type encodeRaw48 (uint64_t data48)
 Encode with explicit 48-bit raw data.
 
- 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 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.
 
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.
 

Static Public Member Functions

static uint64_t encodePanasonic (uint16_t manufacturer, uint8_t device, uint8_t subdevice, uint8_t function)
 Build a 48-bit Panasonic / Kaseikyo frame from structured fields.
 

Detailed Description

Panasonic (Kaseikyo) 48-bit IR protocol encoder/decoder.

  • Carrier: 36.7 kHz, duty 1/3
  • Modulation: Pulse Distance (same as NEC)
  • Bit order: LSB first
  • 48 bits: Customer Code (16) + Data (32)
  • Customer code for Panasonic TV: 0x4004
  • Data: device(8) + subdevice(8) + function(8) + checksum(8)
Timing
Element Mark (us) Space (us)
Leader 3500 1750
Bit "1" 425 1275
Bit "0" 425 425
Stop 425 -
API mapping (simple encode(address, command, repeat))
  • address = manufacturer / customer code (e.g. 0x4004 for Panasonic TV)
  • command = (device << 8) | function, subdevice is fixed to 0
  • checksum = device ^ subdevice ^ function (auto-computed)
  • result.raw (decode) holds the full 48-bit frame for post-processing.

For full control (non-zero subdevice, custom manufacturer codes), use the static helper encodePanasonic(manufacturer, device, subdevice, function) and feed the returned 48-bit value to encodeRaw48().

Member Function Documentation

◆ carrierFrequencyHz()

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

Carrier frequency for Panasonic (36.7 kHz)

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

◆ encode()

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

Encode a 48-bit Panasonic frame from (manufacturer=address, device+function=command)

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

◆ encodePanasonic()

static uint64_t m5::unit::ir::PanasonicCodec::encodePanasonic ( uint16_t manufacturer,
uint8_t device,
uint8_t subdevice,
uint8_t function )
inlinestatic

Build a 48-bit Panasonic / Kaseikyo frame from structured fields.

Parameters
manufacturer16-bit manufacturer / customer code (e.g. 0x4004 for Panasonic TV)
device8-bit device identifier
subdevice8-bit sub-device
function8-bit function
Returns
48-bit raw frame with correct checksum (device ^ subdevice ^ function)
Note
Pair with encodeRaw48() to transmit the result, or decode -> compare against this to verify a captured frame at application level.

◆ encodeRaw48()

item_container_type m5::unit::ir::PanasonicCodec::encodeRaw48 ( uint64_t data48)

Encode with explicit 48-bit raw data.

Parameters
data48Full 48-bit Panasonic frame (customer + data)
Returns
RMT items