M5UnitUnified 0.5.5 git rev:bf711f3
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 }
47 };
48
49 //
50#if defined(ARDUINO)
51 class SerialImpl : public UARTImpl {
52 public:
53 explicit SerialImpl(HardwareSerial& serial);
54 inline virtual HardwareSerial* getSerial() override
55 {
56 return _serial;
57 }
58 virtual void flush() override;
59 virtual void flushRX() override;
60 virtual void setTimeout(const uint32_t ms) override;
61 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len) override;
62 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
63 const uint32_t stop) override;
64
65 protected:
66 HardwareSerial* _serial{};
67 };
68#endif
69
70#if defined(ESP_PLATFORM)
71 class ESPIDFImpl : public UARTImpl {
72 public:
73 explicit ESPIDFImpl(const uart_port_t uart_num) : AdapterUART::UARTImpl(), _uart_num(uart_num)
74 {
75 }
76 virtual void flush() override;
77 virtual void flushRX() override;
78 virtual void setTimeout(const uint32_t ms) override;
79 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len) override;
80 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
81 const uint32_t stop) override;
82 inline uart_port_t uartPort() const
83 {
84 return _uart_num;
85 }
86
87 protected:
88 uart_port_t _uart_num{UART_NUM_1};
89 uint32_t _timeout_ms{1000};
90 };
91#endif
92
93#if defined(ARDUINO)
94 explicit AdapterUART(HardwareSerial& serial);
95#endif
96
97#if defined(ESP_PLATFORM)
98 explicit AdapterUART(const uart_port_t uart_num);
99#endif
100
101 inline void flush()
102 {
103 impl()->flush();
104 }
105 inline void flushRX()
106 {
107 impl()->flushRX();
108 }
109 inline void setTimeout(const uint32_t ms)
110 {
111 impl()->setTimeout(ms);
112 }
113
114 inline UARTImpl* impl()
115 {
116 return static_cast<UARTImpl*>(_impl.get());
117 }
118 inline const UARTImpl* impl() const
119 {
120 return static_cast<UARTImpl*>(_impl.get());
121 }
122
123protected:
124 AdapterUART() : Adapter(Adapter::Type::UART, new UARTImpl())
125 {
126 }
127
128protected:
129};
130
131} // namespace unit
132} // namespace m5
133#endif
Adapter base.
Implementation base class (Pimpl pattern)
Definition adapter_base.hpp:37
Adapter()
Default constructor (creates Unknown type adapter)
Definition adapter_base.hpp:133
Type
Adapter type.
Definition adapter_base.hpp:28
Definition adapter_uart.hpp:30
Top level namespace of M5Stack.
Definition test_helper.hpp:20
Unit-related namespace.