M5UnitUnified 0.1.2 git rev:98f967c
Loading...
Searching...
No Matches
adapter_base.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
10#ifndef M5_UNIT_COMPONENT_ADAPTER_BASE_HPP
11#define M5_UNIT_COMPONENT_ADAPTER_BASE_HPP
12
13#include <cstdint>
14#include <cstddef>
15#include <memory>
16#include <M5HAL.hpp>
17#include "types.hpp"
18
19namespace m5 {
20namespace unit {
25class Adapter {
26public:
27 enum class Type : uint8_t {
28 Unknown,
29 I2C,
30 GPIO,
31 UART,
32 SPI,
33 };
34
35 class Impl {
36 public:
37 Impl() = default;
38
39 virtual ~Impl()
40 {
41 }
42
43 // I2C R/W
44 virtual m5::hal::error::error_t readWithTransaction(uint8_t*, const size_t)
45 {
46 return m5::hal::error::error_t::UNKNOWN_ERROR;
47 }
48 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t*, const size_t, const uint32_t)
49 {
50 return m5::hal::error::error_t::UNKNOWN_ERROR;
51 }
52 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t, const uint8_t*, const size_t,
53 const uint32_t)
54 {
55 return m5::hal::error::error_t::UNKNOWN_ERROR;
56 }
57 virtual m5::hal::error::error_t writeWithTransaction(const uint16_t, const uint8_t*, const size_t,
58 const uint32_t)
59 {
60 return m5::hal::error::error_t::UNKNOWN_ERROR;
61 }
62 virtual m5::hal::error::error_t generalCall(const uint8_t*, const size_t)
63 {
64 return m5::hal::error::error_t::UNKNOWN_ERROR;
65 }
66 // GPIO R/W
67 virtual m5::hal::error::error_t pinModeRX(const gpio::Mode)
68 {
69 return m5::hal::error::error_t::UNKNOWN_ERROR;
70 }
71 virtual m5::hal::error::error_t writeDigitalRX(const bool)
72 {
73 return m5::hal::error::error_t::UNKNOWN_ERROR;
74 }
75 virtual m5::hal::error::error_t readDigitalRX(bool&)
76 {
77 return m5::hal::error::error_t::UNKNOWN_ERROR;
78 }
79 virtual m5::hal::error::error_t writeAnalogRX(const uint16_t)
80 {
81 return m5::hal::error::error_t::UNKNOWN_ERROR;
82 }
83 virtual m5::hal::error::error_t readAnalogRX(uint16_t&)
84 {
85 return m5::hal::error::error_t::UNKNOWN_ERROR;
86 }
87 virtual m5::hal::error::error_t pulseInRX(uint32_t&, const int, const uint32_t)
88 {
89 return m5::hal::error::error_t::UNKNOWN_ERROR;
90 }
91
92 virtual m5::hal::error::error_t pinModeTX(const gpio::Mode)
93 {
94 return m5::hal::error::error_t::UNKNOWN_ERROR;
95 }
96 virtual m5::hal::error::error_t writeDigitalTX(const bool)
97 {
98 return m5::hal::error::error_t::UNKNOWN_ERROR;
99 }
100 virtual m5::hal::error::error_t readDigitalTX(bool&)
101 {
102 return m5::hal::error::error_t::UNKNOWN_ERROR;
103 }
104 virtual m5::hal::error::error_t writeAnalogTX(const uint16_t)
105 {
106 return m5::hal::error::error_t::UNKNOWN_ERROR;
107 }
108 virtual m5::hal::error::error_t readAnalogTX(uint16_t&)
109 {
110 return m5::hal::error::error_t::UNKNOWN_ERROR;
111 }
112 virtual m5::hal::error::error_t pulseInTX(uint32_t&, const int, const uint32_t)
113 {
114 return m5::hal::error::error_t::UNKNOWN_ERROR;
115 }
116 };
117
118 explicit Adapter() : _impl{new Impl()}
119 {
120 }
121
122protected:
123 Adapter(const Type t, Impl* impl) : _type{t}, _impl{impl}
124 {
125 }
126
127public:
128 Adapter(const Adapter&) = delete;
129
130 Adapter(Adapter&&) noexcept = default;
131
132 Adapter& operator=(const Adapter&) = delete;
133
134 Adapter& operator=(Adapter&&) noexcept = default;
135
136 virtual ~Adapter() = default;
137
138 inline Type type() const
139 {
140 return _type;
141 }
142
143 virtual Adapter* duplicate(const uint8_t /*addr*/)
144 {
145 return new Adapter();
146 }
147
148 // I2C R/W
149 inline m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len)
150 {
151 return _impl->readWithTransaction(data, len);
152 }
153 inline m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
154 const uint32_t exparam = 1)
155 {
156 return _impl->writeWithTransaction(data, len, exparam);
157 }
158 inline m5::hal::error::error_t writeWithTransaction(const uint8_t reg, const uint8_t* data, const size_t len,
159 const uint32_t exparam = 1)
160 {
161 return _impl->writeWithTransaction(reg, data, len, exparam);
162 }
163 inline m5::hal::error::error_t writeWithTransaction(const uint16_t reg, const uint8_t* data, const size_t len,
164 const uint32_t exparam = 1)
165 {
166 return _impl->writeWithTransaction(reg, data, len, exparam);
167 }
168 inline m5::hal::error::error_t generalCall(const uint8_t* data, const size_t len)
169 {
170 return _impl->generalCall(data, len);
171 }
172
173 // GPIO R/W
174 inline m5::hal::error::error_t pinModeRX(const gpio::Mode m)
175 {
176 return _impl->pinModeRX(m);
177 }
178 inline m5::hal::error::error_t writeDigitalRX(const bool high)
179 {
180 return _impl->writeDigitalRX(high);
181 }
182 inline m5::hal::error::error_t readDigitalRX(bool& high)
183 {
184 return _impl->readDigitalRX(high);
185 }
186 inline m5::hal::error::error_t writeAnalogRX(const uint16_t v)
187 {
188 return _impl->writeAnalogRX(v);
189 }
190 inline m5::hal::error::error_t readAnalogRX(uint16_t& v)
191 {
192 return _impl->readAnalogRX(v);
193 }
194 inline m5::hal::error::error_t pulseInRX(uint32_t& duration, const int state, const uint32_t timeout_us)
195 {
196 return _impl->pulseInRX(duration, state, timeout_us);
197 }
198
199 inline m5::hal::error::error_t pinModeTX(const gpio::Mode m)
200 {
201 return _impl->pinModeTX(m);
202 }
203 inline m5::hal::error::error_t writeDigitalTX(const bool high)
204 {
205 return _impl->writeDigitalTX(high);
206 }
207 inline m5::hal::error::error_t readDigitalTX(bool& high)
208 {
209 return _impl->readDigitalTX(high);
210 }
211 inline m5::hal::error::error_t writeAnalogTX(const uint16_t v)
212 {
213 return _impl->writeAnalogTX(v);
214 }
215 inline m5::hal::error::error_t readAnalogTX(uint16_t& v)
216 {
217 return _impl->readAnalogTX(v);
218 }
219 inline m5::hal::error::error_t pulseInTX(uint32_t& duration, const int state, const uint32_t timeout_us)
220 {
221 return _impl->pulseInTX(duration, state, timeout_us);
222 }
223
224 // clang-format off
225
226 // WARNING
227 // Patches for old units for minor version upgrades (will be removed as soon as no longer needed)
228 // For M5Unit-CRYPTO
229 [[deprecated("Patches for old units")]]
230 uint32_t clock() const;
231 [[deprecated("Patches for old units")]]
232 void setClock(const uint32_t);
233 // For M5Unit-THERMO
234 [[deprecated("Patches for old units")]]
235 int16_t sda() const;
236 [[deprecated("Patches for old units")]]
237 int16_t scl() const;
238 [[deprecated("Patches for old units")]]
239 void pinMode(const uint8_t pin, const uint8_t mode);
240 [[deprecated("Patches for old units")]]
241 void digitalWrite(const uint8_t pin, const uint8_t high);
242 [[deprecated("Patches for old units")]]
243 bool begin();
244 [[deprecated("Patches for old units")]]
245 bool end();
246
247 // clang-format on
248
249private:
250 Type _type{Type::Unknown};
251
252protected:
253 std::unique_ptr<Impl> _impl{};
254};
255
256} // namespace unit
257} // namespace m5
258#endif
Definition adapter_base.hpp:35
Adapter base class to treat M5HAL and TwoWire,GPIO,Serial,SPI... in the same way.
Top level namespace of M5stack.
Definition test_helper.hpp:18
Unit-related namespace.
Type and enumerator definitions.
Mode
Pin mode.
Definition types.hpp:50