M5UnitUnified 0.6.3 git rev:e38fc73
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 };
53
54 //
55#if defined(ARDUINO)
56 class SerialImpl : public UARTImpl {
57 public:
58 explicit SerialImpl(HardwareSerial& serial);
59 inline virtual HardwareSerial* getSerial() override
60 {
61 return _serial;
62 }
63 virtual void flush() override;
64 virtual void flushRX() override;
65 virtual void setTimeout(const uint32_t ms) override;
66 virtual size_t available() override;
67 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len) override;
68 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
69 const uint32_t stop) override;
70
71 protected:
72 HardwareSerial* _serial{};
73 };
74#endif
75
76#if defined(ESP_PLATFORM)
77 class ESPIDFImpl : public UARTImpl {
78 public:
79 explicit ESPIDFImpl(const uart_port_t uart_num) : AdapterUART::UARTImpl(), _uart_num(uart_num)
80 {
81 }
82 virtual void flush() override;
83 virtual void flushRX() override;
84 virtual void setTimeout(const uint32_t ms) override;
85 virtual size_t available() override;
86 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len) override;
87 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
88 const uint32_t stop) override;
89 inline uart_port_t uartPort() const
90 {
91 return _uart_num;
92 }
93
94 protected:
95 uart_port_t _uart_num{UART_NUM_1};
96 uint32_t _timeout_ms{1000};
97 };
98#endif
99
100#if defined(ARDUINO)
101 explicit AdapterUART(HardwareSerial& serial);
102#endif
103
104#if defined(ESP_PLATFORM)
105 explicit AdapterUART(const uart_port_t uart_num);
106#endif
107
108 inline void flush()
109 {
110 impl()->flush();
111 }
112 inline void flushRX()
113 {
114 impl()->flushRX();
115 }
116 inline void setTimeout(const uint32_t ms)
117 {
118 impl()->setTimeout(ms);
119 }
126 inline size_t available()
127 {
128 return impl()->available();
129 }
130
131 inline UARTImpl* impl()
132 {
133 return static_cast<UARTImpl*>(_impl.get());
134 }
135 inline const UARTImpl* impl() const
136 {
137 return static_cast<UARTImpl*>(_impl.get());
138 }
139
140protected:
141 AdapterUART() : Adapter(Adapter::Type::UART, new UARTImpl())
142 {
143 }
144
145protected:
146};
147
148} // namespace unit
149} // namespace m5
150#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:126
Top level namespace of M5Stack.
Definition test_helper.hpp:20
Unit-related namespace.