M5Unit-INFRARED 0.2.0 git rev:76ad9e1
Loading...
Searching...
No Matches
ir_rmt_items.cpp File Reference

RMT item helper functions for IR protocols. More...

#include "ir_rmt_items.hpp"

Namespaces

namespace  m5
 Top level namespace of M5Stack.
 

Functions

void m5::unit::ir::encodePulseDistance (item_container_type &items, uint32_t data, uint8_t bits, uint16_t bit_mark, uint16_t one_space, uint16_t zero_space, bool lsb_first=true)
 Encode a sequence of bits as pulse-distance modulated RMT items (NEC-style)
 
uint32_t m5::unit::ir::decodePulseDistance (const gpio::m5_rmt_item_t *items, uint32_t num, uint32_t &data, uint8_t bits, uint16_t bit_mark, uint16_t one_space, uint16_t zero_space, uint16_t tolerance, bool lsb_first=true)
 Decode pulse-distance modulated RMT items into a data value.
 
void m5::unit::ir::encodePulseWidth (item_container_type &items, uint32_t data, uint8_t bits, uint16_t one_mark, uint16_t zero_mark, uint16_t bit_space, bool lsb_first=true)
 Encode a sequence of bits as pulse-width modulated RMT items (SIRC-style)
 
uint32_t m5::unit::ir::decodePulseWidth (const gpio::m5_rmt_item_t *items, uint32_t num, uint32_t &data, uint8_t bits, uint16_t one_mark, uint16_t zero_mark, uint16_t bit_space, uint16_t tolerance, bool lsb_first=true)
 Decode pulse-width modulated RMT items into a data value.
 
void m5::unit::ir::encodeManchester (item_container_type &items, uint32_t data, uint8_t bits, uint16_t half_bit, bool rc5_polarity=true, bool msb_first=true)
 Encode a sequence of bits as Manchester (bi-phase) modulated RMT items (RC5-style)
 
uint32_t m5::unit::ir::decodeManchester (const gpio::m5_rmt_item_t *items, uint32_t num, uint32_t &data, uint8_t bits, uint16_t half_bit, uint16_t tolerance, bool rc5_polarity=true, bool msb_first=true)
 Decode Manchester (bi-phase) modulated RMT items.
 

Detailed Description

RMT item helper functions for IR protocols.

Function Documentation

◆ decodeManchester()

uint32_t m5::unit::ir::decodeManchester ( const gpio::m5_rmt_item_t * items,
uint32_t num,
uint32_t & data,
uint8_t bits,
uint16_t half_bit,
uint16_t tolerance,
bool rc5_polarity = true,
bool msb_first = true )

Decode Manchester (bi-phase) modulated RMT items.

Accepts both single-transition items (half+half in one item) and split items (consecutive half-bit items). Handles edge merging at bit boundaries.

Parameters
itemsRMT items to decode
numNumber of items
[out]dataDecoded data value
bitsExpected number of bits
half_bitExpected half-bit duration in microseconds
toleranceAcceptable timing deviation in microseconds
rc5_polarityIf true, use RC5 polarity. If false, use RC6 polarity.
msb_firstIf true, decode MSB first
Returns
Number of items consumed, or 0 on failure

◆ decodePulseDistance()

uint32_t m5::unit::ir::decodePulseDistance ( const gpio::m5_rmt_item_t * items,
uint32_t num,
uint32_t & data,
uint8_t bits,
uint16_t bit_mark,
uint16_t one_space,
uint16_t zero_space,
uint16_t tolerance,
bool lsb_first = true )

Decode pulse-distance modulated RMT items into a data value.

Parameters
itemsRMT items to decode
numNumber of items
[out]dataDecoded data value
bitsExpected number of bits
bit_markExpected mark duration in microseconds
one_spaceExpected space duration for logic "1" in microseconds
zero_spaceExpected space duration for logic "0" in microseconds
toleranceAcceptable timing deviation in microseconds
lsb_firstIf true, decode as LSB first; otherwise MSB first
Returns
Number of items consumed, or 0 on failure

◆ decodePulseWidth()

uint32_t m5::unit::ir::decodePulseWidth ( const gpio::m5_rmt_item_t * items,
uint32_t num,
uint32_t & data,
uint8_t bits,
uint16_t one_mark,
uint16_t zero_mark,
uint16_t bit_space,
uint16_t tolerance,
bool lsb_first = true )

Decode pulse-width modulated RMT items into a data value.

Parameters
itemsRMT items to decode
numNumber of items
[out]dataDecoded data value
bitsExpected number of bits
one_markExpected mark duration for logic "1" in microseconds
zero_markExpected mark duration for logic "0" in microseconds
bit_spaceExpected space duration in microseconds
toleranceAcceptable timing deviation in microseconds
lsb_firstIf true, decode as LSB first; otherwise MSB first
Returns
Number of items consumed, or 0 on failure

◆ encodeManchester()

void m5::unit::ir::encodeManchester ( item_container_type & items,
uint32_t data,
uint8_t bits,
uint16_t half_bit,
bool rc5_polarity = true,
bool msb_first = true )

Encode a sequence of bits as Manchester (bi-phase) modulated RMT items (RC5-style)

Each bit period = 2 half-bits. RC5 convention:

  • Logic "0": Mark(half) + Space(half) (high-to-low transition at midpoint)
  • Logic "1": Space(half) + Mark(half) (low-to-high transition at midpoint)
    Parameters
    [out]itemsOutput container (items are appended)
    dataRaw data value
    bitsNumber of bits to encode
    half_bitHalf-bit duration in microseconds (889us for RC5)
    rc5_polarityIf true, use RC5 polarity (0=mark-space, 1=space-mark). If false, use RC6 polarity (0=space-mark, 1=mark-space).
    msb_firstIf true, encode MSB first (RC5/RC6 standard)

◆ encodePulseDistance()

void m5::unit::ir::encodePulseDistance ( item_container_type & items,
uint32_t data,
uint8_t bits,
uint16_t bit_mark,
uint16_t one_space,
uint16_t zero_space,
bool lsb_first = true )

Encode a sequence of bits as pulse-distance modulated RMT items (NEC-style)

Each bit is encoded as: mark(bit_mark) + space(one_space or zero_space)

Parameters
[out]itemsOutput container (items are appended)
dataRaw data value
bitsNumber of bits to encode
bit_markMark duration for each bit in microseconds
one_spaceSpace duration for logic "1" in microseconds
zero_spaceSpace duration for logic "0" in microseconds
lsb_firstIf true, encode LSB first; otherwise MSB first

◆ encodePulseWidth()

void m5::unit::ir::encodePulseWidth ( item_container_type & items,
uint32_t data,
uint8_t bits,
uint16_t one_mark,
uint16_t zero_mark,
uint16_t bit_space,
bool lsb_first = true )

Encode a sequence of bits as pulse-width modulated RMT items (SIRC-style)

Each bit is encoded as: mark(one_mark or zero_mark) + space(bit_space)

Parameters
[out]itemsOutput container (items are appended)
dataRaw data value
bitsNumber of bits to encode
one_markMark duration for logic "1" in microseconds
zero_markMark duration for logic "0" in microseconds
bit_spaceSpace duration for each bit in microseconds
lsb_firstIf true, encode LSB first; otherwise MSB first