10#ifndef M5_UNIT_INFRARED_UNIT_IR_HPP
11#define M5_UNIT_INFRARED_UNIT_IR_HPP
13#include <M5UnitComponent.hpp>
81class UnitIR :
public Component {
82 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitIR, 0x00);
143 bool begin()
override;
148 void update(
const bool force =
false)
override;
158 return _codec ? *_codec :
static_cast<ir::IRCodec&
>(_default_codec);
166 return _codec ?
static_cast<const ir::IRCodec&
>(*_codec) :
static_cast<const ir::IRCodec&
>(_default_codec);
176 _codec = (&
codec == &_default_codec) ?
nullptr : &
codec;
189 return _default_codec;
208 bool send(uint16_t address, uint16_t command, uint8_t frames = 0);
217 bool sendRaw(
const gpio::m5_rmt_item_t* items, uint32_t num);
230 return _rx_available ? 1 : 0;
238 return !_rx_available;
247 return _latest_result;
265 return _raw_item_count;
291 bool apply_carrier();
294 ir::IRCodec* _codec{};
296 ir::DecodeResult _latest_result{};
297 const gpio::m5_rmt_item_t* _raw_items{};
298 uint32_t _raw_item_count{};
299 bool _rx_available{};
305 void operator()(uint8_t* p)
const
310 std::unique_ptr<uint8_t[], FreeDeleter> _rx_buffer{};
311 size_t _rx_buffer_size{};
Auto-detecting multi-protocol IR codec.
uint32_t rawItemCount() const
Number of raw RMT items from last reception.
Definition unit_IR.hpp:263
void update(const bool force=false) override
Poll the RX ringbuffer and decode incoming frames.
Definition unit_IR.cpp:147
ir::IRCodec & codec()
Get current codec.
Definition unit_IR.hpp:156
void resetCodec()
Reset to built-in AutoDetectCodec.
Definition unit_IR.hpp:179
bool begin() override
Initialize the RMT channels (TX and/or RX) based on the adapter pins.
Definition unit_IR.cpp:41
bool hasTX() const
True if TX pin is configured and RMT TX channel initialized.
Definition unit_IR.hpp:275
void flush()
Clear received data (both DecodeResult and raw items)
Definition unit_IR.cpp:223
const ir::DecodeResult & latest() const
Get latest received result.
Definition unit_IR.hpp:245
void config(const config_t &cfg)
Set the config values.
Definition unit_IR.hpp:132
size_t available() const
Number of received frames available since last update.
Definition unit_IR.hpp:228
bool sendRaw(const gpio::m5_rmt_item_t *items, uint32_t num)
Send raw RMT items directly.
Definition unit_IR.cpp:205
bool hasRX() const
True if RX pin is configured and RMT RX channel initialized.
Definition unit_IR.hpp:283
const ir::IRCodec & codec() const
Get current codec (const)
Definition unit_IR.hpp:164
config_t config() const
Gets the config values.
Definition unit_IR.hpp:124
UnitIR()
Constructor.
Definition unit_IR.hpp:116
ir::AutoDetectCodec & defaultCodec()
Get built-in AutoDetectCodec (for accessing individual protocol codecs)
Definition unit_IR.hpp:187
bool send(uint16_t address, uint16_t command, uint8_t frames=0)
Send IR command using current codec.
Definition unit_IR.cpp:165
const gpio::m5_rmt_item_t * rawItems() const
Get raw RMT items from last reception.
Definition unit_IR.hpp:255
void setCodec(ir::IRCodec &codec)
Set protocol codec.
Definition unit_IR.hpp:174
bool empty() const
True if no received frames.
Definition unit_IR.hpp:236
Auto-detecting multi-protocol IR decoder.
Definition auto_detect_codec.hpp:40
Abstract base class for IR protocol encoding/decoding.
Definition ir_codec.hpp:61
Top level namespace of M5Stack.
Settings for begin.
Definition unit_IR.hpp:89
uint16_t rx_filter_threshold
Definition unit_IR.hpp:100
uint32_t tick_ns
RMT tick resolution in nanoseconds (default: 1000 = 1us)
Definition unit_IR.hpp:91
uint16_t rx_idle_threshold
Definition unit_IR.hpp:97
uint16_t rx_ring_buffer_size
RX ring buffer size in bytes.
Definition unit_IR.hpp:93
gpio::RxPull rx_pull
Definition unit_IR.hpp:112
uint8_t rx_min_item_count
Definition unit_IR.hpp:104
bool rx_invert_level
Definition unit_IR.hpp:108
Result of decoding a received IR frame.
Definition ir_codec.hpp:43