M5Unit-INFRARED 0.2.0 git rev:76ad9e1
Loading...
Searching...
No Matches
sirc_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_SIRC_CODEC_HPP
11#define M5_UNIT_INFRARED_IR_SIRC_CODEC_HPP
12
13#include "ir_codec.hpp"
14
15namespace m5 {
16namespace unit {
17namespace ir {
18
37class SircCodec : public IRCodec {
38public:
40 enum class Variant : uint8_t {
41 SIRC12 = 12,
42 SIRC15 = 15,
43 SIRC20 = 20,
44 };
45
50 explicit SircCodec(Variant v = Variant::SIRC12) : IRCodec(CodecType::SIRC), _variant(v)
51 {
52 }
53
55 item_container_type encode(uint16_t address, uint16_t command, bool repeat) override;
57 bool decode(const gpio::m5_rmt_item_t* items, uint32_t num, DecodeResult& result) override;
58
60 uint32_t carrierFrequencyHz() const override
61 {
62 return 40000;
63 }
64
66 uint8_t minFrames() const override
67 {
68 return 3;
69 }
70
72 uint16_t frameGapUs() const override
73 {
74 return 30000;
75 }
76
82 {
83 return _variant;
84 }
90 {
91 _variant = v;
92 }
93
94private:
95 Variant _variant;
96
97 static constexpr uint16_t START_MARK{2400};
98 static constexpr uint16_t START_SPACE{600};
99 static constexpr uint16_t ONE_MARK{1200};
100 static constexpr uint16_t ZERO_MARK{600};
101 static constexpr uint16_t BIT_SPACE{600};
102 static constexpr uint16_t TOLERANCE{200};
103};
104
105} // namespace ir
106} // namespace unit
107} // namespace m5
108#endif
Abstract base class for IR protocol encoding/decoding.
Definition ir_codec.hpp:62
Sony SIRC IR protocol encoder/decoder.
Definition sirc_codec.hpp:37
void setVariant(Variant v)
Set variant (12 / 15 / 20-bit)
Definition sirc_codec.hpp:89
item_container_type encode(uint16_t address, uint16_t command, bool repeat) override
Encode a Sony SIRC frame for the currently selected variant.
Definition sirc_codec.cpp:32
uint16_t frameGapUs() const override
Inter-frame gap ≈ 30 ms (keeps the 45 ms start-to-start cycle)
Definition sirc_codec.hpp:72
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.
Definition sirc_codec.cpp:67
uint32_t carrierFrequencyHz() const override
Carrier frequency for Sony SIRC (40 kHz)
Definition sirc_codec.hpp:60
SircCodec(Variant v=Variant::SIRC12)
Constructor.
Definition sirc_codec.hpp:50
uint8_t minFrames() const override
Sony SIRC requires the frame to be sent at least 3 times per keypress.
Definition sirc_codec.hpp:66
Variant variant() const
Get current variant.
Definition sirc_codec.hpp:81
Variant
SIRC protocol variants.
Definition sirc_codec.hpp:40
IR protocol codec base class and types.
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
@ SIRC
Sony SIRC (12/15/20-bit)
Top level namespace of M5Stack.
Unit-related namespace.
Result of decoding a received IR frame.
Definition ir_codec.hpp:44