M5Unit-INFRARED 0.3.0 git rev:2148adc
Loading...
Searching...
No Matches
m5_unit_unified_infrared_wiring.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
17#ifndef M5_UNIT_UNIFIED_INFRARED_WIRING_HPP
18#define M5_UNIT_UNIFIED_INFRARED_WIRING_HPP
19
20#include <wiring/m5_unit_unified_wiring.hpp> // M5UU core wiring (UnitUnified/Component/Wire + addI2C/addGPIO)
21#include "../unit/unit_IR.hpp" // UnitIR (addBuiltinIrRx sets its rx_pull)
22
23namespace m5 {
24namespace unit {
25namespace infrared {
26namespace wiring {
27
28#if defined(__M5UNIFIED_HPP__)
29
32
41inline bool addHatPIR(UnitUnified& units, Component& unit)
42{
43 int in = -1;
44 switch (M5.getBoard()) {
45 case m5::board_t::board_M5StickC:
46 case m5::board_t::board_M5StickCPlus:
47 case m5::board_t::board_M5StickCPlus2:
48 case m5::board_t::board_M5StackCoreInk:
49 in = 36;
50 break;
51 case m5::board_t::board_M5StickS3:
52 in = 1;
53 break;
54 case m5::board_t::board_ArduinoNessoN1:
55 in = 2;
56 break;
57 default:
58 M5_LIB_LOGE("wiring: addHatPIR unsupported board=0x%02x", (int)M5.getBoard());
59 return false;
60 }
61 M5_LIB_LOGI("wiring: addHatPIR board=0x%02x in=%d", (int)M5.getBoard(), in);
62 return units.add(unit, static_cast<int8_t>(in), static_cast<int8_t>(-1));
63}
65
68
72inline int8_t builtinIrTxPin()
73{
74 switch (M5.getBoard()) {
75 case m5::board_t::board_M5StickC:
76 case m5::board_t::board_M5StickCPlus:
77 case m5::board_t::board_ArduinoNessoN1:
78 return 9;
79 case m5::board_t::board_M5StickCPlus2:
80 return 19;
81 case m5::board_t::board_M5StickS3:
82 return 46;
83 case m5::board_t::board_M5AtomLite:
84 case m5::board_t::board_M5AtomMatrix:
85 case m5::board_t::board_M5AtomU:
86 case m5::board_t::board_M5AtomS3U:
87 return 12;
88 case m5::board_t::board_M5AtomS3:
89 case m5::board_t::board_M5AtomS3Lite:
90 case m5::board_t::board_M5Capsule:
91 return 4;
92 case m5::board_t::board_M5AtomS3R:
93 case m5::board_t::board_M5AtomVoiceS3R:
94 return 47;
95 case m5::board_t::board_M5NanoC6:
96 case m5::board_t::board_M5NanoH2:
97 return 3;
98 case m5::board_t::board_M5Cardputer:
99 case m5::board_t::board_M5CardputerADV:
100 return 44;
101 default:
102 return -1;
103 }
104}
105
110inline int8_t builtinIrRxPin()
111{
112 switch (M5.getBoard()) {
113 case m5::board_t::board_M5StickS3:
114 return 42;
115 default:
116 return -1;
117 }
118}
119
128inline bool addBuiltinIrTx(UnitUnified& units, Component& unit)
129{
130 const int8_t tx = builtinIrTxPin();
131 if (tx < 0) {
132 M5_LIB_LOGE("wiring: no built-in IR TX on board=0x%02x", (int)M5.getBoard());
133 return false;
134 }
135 if (M5.getBoard() == m5::board_t::board_M5StickS3) {
136 M5.Power.setExtOutput(true);
137 }
138 M5_LIB_LOGI("wiring: addBuiltinIrTx tx=%d", tx);
139 return units.add(unit, static_cast<int8_t>(-1), tx);
140}
141
153inline bool addBuiltinIrRx(UnitUnified& units, UnitIR& unit)
154{
155 const int8_t rx = builtinIrRxPin();
156 if (rx < 0) {
157 M5_LIB_LOGE("wiring: no built-in IR RX on board=0x%02x", (int)M5.getBoard());
158 return false;
159 }
160 if (M5.getBoard() == m5::board_t::board_M5StickS3) {
161 M5.Speaker.end();
162 M5.Power.setExtOutput(true);
163 auto cfg = unit.config();
164 cfg.rx_pull = gpio::RxPull::Up;
165 unit.config(cfg);
166 }
167 M5_LIB_LOGI("wiring: addBuiltinIrRx rx=%d", rx);
168 return units.add(unit, rx, static_cast<int8_t>(-1));
169}
171
172#endif // __M5UNIFIED_HPP__
173
174} // namespace wiring
175} // namespace infrared
176} // namespace unit
177} // namespace m5
178#endif // M5_UNIT_UNIFIED_INFRARED_WIRING_HPP
Top level namespace of M5Stack.
Unit-related namespace.
IR remote control unit (TX + RX) for M5UnitUnified.