M5Unit-INFRARED 0.2.0 git rev:76ad9e1
Loading...
Searching...
No Matches
ir_rmt_items.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_RMT_ITEMS_HPP
11#define M5_UNIT_INFRARED_IR_RMT_ITEMS_HPP
12
13#include "ir_codec.hpp"
14
15namespace m5 {
16namespace unit {
17namespace ir {
18
25inline gpio::m5_rmt_item_t makeItem(uint16_t mark_us, uint16_t space_us)
26{
27 gpio::m5_rmt_item_t item{};
28 item.duration0 = mark_us;
29 item.level0 = 1; // Mark: carrier ON
30 item.duration1 = space_us;
31 item.level1 = 0; // Space: carrier OFF
32 return item;
33}
34
40inline gpio::m5_rmt_item_t makeTerminator(uint16_t mark_us)
41{
42 return makeItem(mark_us, 0);
43}
44
52inline bool matchDuration(uint16_t actual, uint16_t expected, uint16_t tolerance)
53{
54 return (actual >= expected - tolerance) && (actual <= expected + tolerance);
55}
56
68void encodePulseDistance(item_container_type& items, uint32_t data, uint8_t bits, uint16_t bit_mark, uint16_t one_space,
69 uint16_t zero_space, bool lsb_first = true);
70
84uint32_t decodePulseDistance(const gpio::m5_rmt_item_t* items, uint32_t num, uint32_t& data, uint8_t bits,
85 uint16_t bit_mark, uint16_t one_space, uint16_t zero_space, uint16_t tolerance,
86 bool lsb_first = true);
87
99void encodePulseWidth(item_container_type& items, uint32_t data, uint8_t bits, uint16_t one_mark, uint16_t zero_mark,
100 uint16_t bit_space, bool lsb_first = true);
101
115uint32_t decodePulseWidth(const gpio::m5_rmt_item_t* items, uint32_t num, uint32_t& data, uint8_t bits,
116 uint16_t one_mark, uint16_t zero_mark, uint16_t bit_space, uint16_t tolerance,
117 bool lsb_first = true);
118
132void encodeManchester(item_container_type& items, uint32_t data, uint8_t bits, uint16_t half_bit,
133 bool rc5_polarity = true, bool msb_first = true);
134
149uint32_t decodeManchester(const gpio::m5_rmt_item_t* items, uint32_t num, uint32_t& data, uint8_t bits,
150 uint16_t half_bit, uint16_t tolerance, bool rc5_polarity = true, bool msb_first = true);
151
152} // namespace ir
153} // namespace unit
154} // namespace m5
155#endif
IR protocol codec base class and types.
gpio::m5_rmt_item_t makeItem(uint16_t mark_us, uint16_t space_us)
Create an RMT item representing a mark (carrier burst) followed by a space (silence)
Definition ir_rmt_items.hpp:25
bool matchDuration(uint16_t actual, uint16_t expected, uint16_t tolerance)
Check if a duration matches an expected value within tolerance.
Definition ir_rmt_items.hpp:52
gpio::m5_rmt_item_t makeTerminator(uint16_t mark_us)
Create a terminator RMT item (mark only, no space)
Definition ir_rmt_items.hpp:40
Top level namespace of M5Stack.
Unit-related namespace.