M5Unit-INFRARED 0.2.0 git rev:76ad9e1
Loading...
Searching...
No Matches
auto_detect_codec.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
10#ifndef M5_UNIT_INFRARED_IR_AUTO_DETECT_CODEC_HPP
11#define M5_UNIT_INFRARED_IR_AUTO_DETECT_CODEC_HPP
12
13#include "nec_codec.hpp"
14#include "sirc_codec.hpp"
15#include "rc5_codec.hpp"
16#include "rc6_codec.hpp"
17#include "panasonic_codec.hpp"
18#include "mitsubishi_codec.hpp"
19#include <memory>
20
21namespace m5 {
22namespace unit {
23namespace ir {
24
40class AutoDetectCodec : public IRCodec {
41public:
46
54 item_container_type encode(uint16_t address, uint16_t command, bool repeat) override
55 {
56 return _last_codec->encode(address, command, repeat);
57 }
58
66 bool decode(const gpio::m5_rmt_item_t* items, uint32_t num, DecodeResult& result) override;
67
72 uint32_t carrierFrequencyHz() const override
73 {
74 return _last_codec->carrierFrequencyHz();
75 }
76
81 {
82 return _nec;
83 }
86 {
87 return _sirc;
88 }
91 {
92 return _rc5;
93 }
96 {
97 return _rc6;
98 }
101 {
102 return _panasonic;
103 }
106 {
107 return _mitsubishi;
108 }
110
116 {
117 return _last_codec;
118 }
119
120private:
121 NecCodec _nec{};
122 SircCodec _sirc{};
123 Rc5Codec _rc5{};
124 Rc6Codec _rc6{};
125 PanasonicCodec _panasonic{};
126 MitsubishiCodec _mitsubishi{};
127 IRCodec* _last_codec{&_nec};
128};
129
130} // namespace ir
131} // namespace unit
132} // namespace m5
133#endif
Auto-detecting multi-protocol IR decoder.
Definition auto_detect_codec.hpp:40
Rc5Codec & rc5()
Get Philips RC5 codec instance.
Definition auto_detect_codec.hpp:90
AutoDetectCodec()
Constructor.
Definition auto_detect_codec.hpp:43
NecCodec & nec()
Get NEC codec instance.
Definition auto_detect_codec.hpp:80
item_container_type encode(uint16_t address, uint16_t command, bool repeat) override
Encode using the last detected protocol's codec (default: NEC)
Definition auto_detect_codec.hpp:54
PanasonicCodec & panasonic()
Get Panasonic / Kaseikyo codec instance.
Definition auto_detect_codec.hpp:100
bool decode(const gpio::m5_rmt_item_t *items, uint32_t num, DecodeResult &result) override
Try decoding with each protocol codec in priority order.
Definition auto_detect_codec.cpp:17
MitsubishiCodec & mitsubishi()
Get Mitsubishi codec instance.
Definition auto_detect_codec.hpp:105
Rc6Codec & rc6()
Get Philips RC6 codec instance.
Definition auto_detect_codec.hpp:95
IRCodec * lastCodec()
Get the codec that last successfully decoded.
Definition auto_detect_codec.hpp:115
uint32_t carrierFrequencyHz() const override
Carrier frequency of the last detected protocol.
Definition auto_detect_codec.hpp:72
SircCodec & sirc()
Get Sony SIRC codec instance.
Definition auto_detect_codec.hpp:85
Abstract base class for IR protocol encoding/decoding.
Definition ir_codec.hpp:62
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.
Mitsubishi 16-bit IR protocol encoder/decoder.
Definition mitsubishi_codec.hpp:45
NEC / Extended NEC IR protocol encoder/decoder.
Definition nec_codec.hpp:39
Panasonic (Kaseikyo) 48-bit IR protocol encoder/decoder.
Definition panasonic_codec.hpp:48
Philips RC5 / RC5X IR protocol encoder/decoder.
Definition rc5_codec.hpp:31
Philips RC6 Mode 0 IR protocol encoder/decoder.
Definition rc6_codec.hpp:31
Sony SIRC IR protocol encoder/decoder.
Definition sirc_codec.hpp:37
std::vector< m5::unit::gpio::m5_rmt_item_t > item_container_type
RMT item container.
Definition ir_codec.hpp:54
CodecType
Identifies the IR protocol codec implementation.
Definition ir_codec.hpp:27
@ Unknown
Unknown protocol.
Mitsubishi 16-bit IR protocol codec (headerless format)
Top level namespace of M5Stack.
Unit-related namespace.
NEC / Extended NEC IR protocol codec.
Panasonic (Kaseikyo) 48-bit IR protocol codec.
Philips RC5 / RC5X IR protocol codec.
Philips RC6 Mode 0 IR protocol codec.
Sony SIRC IR protocol codec (12/15/20-bit)
Result of decoding a received IR frame.
Definition ir_codec.hpp:44