M5UnitUnified 0.6.4 git rev:53b220c
Loading...
Searching...
No Matches
adapter_uart.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
11#ifndef M5_UNIT_COMPONENT_ADAPTER_UART_HPP
12#define M5_UNIT_COMPONENT_ADAPTER_UART_HPP
13
14#include "adapter_base.hpp"
15#if defined(ESP_PLATFORM)
16#include <driver/uart.h>
17#endif
18
19class HardwareSerial;
20
21namespace m5 {
22namespace unit {
23
28class AdapterUART : public Adapter {
29public:
30 class UARTImpl : public Adapter::Impl {
31 public:
32 UARTImpl() = default;
33 virtual ~UARTImpl() = default;
34 inline virtual HardwareSerial* getSerial()
35 {
36 return nullptr;
37 }
38 virtual void flush()
39 {
40 }
41 virtual void flushRX()
42 {
43 }
44 virtual void setTimeout(const uint32_t)
45 {
46 }
48 virtual size_t available()
49 {
50 return 0;
51 }
52#if defined(ESP_PLATFORM)
54 virtual uart_port_t uartPort() const
55 {
56 return UART_NUM_MAX;
57 }
58#endif
59 };
60
61 //
62#if defined(ARDUINO)
63 class SerialImpl : public UARTImpl {
64 public:
65 explicit SerialImpl(HardwareSerial& serial);
66 inline virtual HardwareSerial* getSerial() override
67 {
68 return _serial;
69 }
70 virtual void flush() override;
71 virtual void flushRX() override;
72 virtual void setTimeout(const uint32_t ms) override;
73 virtual size_t available() override;
74 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len) override;
75 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
76 const uint32_t stop) override;
77
78 protected:
79 HardwareSerial* _serial{};
80 };
81#endif
82
83#if defined(ESP_PLATFORM)
84 class ESPIDFImpl : public UARTImpl {
85 public:
86 explicit ESPIDFImpl(const uart_port_t uart_num) : AdapterUART::UARTImpl(), _uart_num(uart_num)
87 {
88 }
89 virtual void flush() override;
90 virtual void flushRX() override;
91 virtual void setTimeout(const uint32_t ms) override;
92 virtual size_t available() override;
93 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len) override;
94 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
95 const uint32_t stop) override;
96 inline virtual uart_port_t uartPort() const override
97 {
98 return _uart_num;
99 }
100
101 protected:
102 uart_port_t _uart_num{UART_NUM_1};
103 uint32_t _timeout_ms{1000};
104 };
105#endif
106
107#if defined(ARDUINO)
108 explicit AdapterUART(HardwareSerial& serial);
109#endif
110
111#if defined(ESP_PLATFORM)
112 explicit AdapterUART(const uart_port_t uart_num);
113#endif
114
115 inline void flush()
116 {
117 impl()->flush();
118 }
119 inline void flushRX()
120 {
121 impl()->flushRX();
122 }
123 inline void setTimeout(const uint32_t ms)
124 {
125 impl()->setTimeout(ms);
126 }
133 inline size_t available()
134 {
135 return impl()->available();
136 }
137#if defined(ESP_PLATFORM)
144 inline uart_port_t uartPort() const
145 {
146 return impl()->uartPort();
147 }
148#endif
149
150 inline UARTImpl* impl()
151 {
152 return static_cast<UARTImpl*>(_impl.get());
153 }
154 inline const UARTImpl* impl() const
155 {
156 return static_cast<UARTImpl*>(_impl.get());
157 }
158
159protected:
160 AdapterUART() : Adapter(Adapter::Type::UART, new UARTImpl())
161 {
162 }
163
164protected:
165};
166
167} // namespace unit
168} // namespace m5
169#endif
Adapter base.
Implementation base class (Pimpl pattern)
Definition adapter_base.hpp:37
Adapter()
Default constructor (creates Unknown type adapter)
Definition adapter_base.hpp:137
Type
Adapter type.
Definition adapter_base.hpp:28
Definition adapter_uart.hpp:30
virtual size_t available()
Bytes received and not read yet (0 if unknown)
Definition adapter_uart.hpp:48
size_t available()
Bytes received and not read yet.
Definition adapter_uart.hpp:133
Top level namespace of M5Stack.
Definition test_helper.hpp:20
Unit-related namespace.