19#ifndef M5_UNIT_UNIFIED_RS485_WIRING_HPP
20#define M5_UNIT_UNIFIED_RS485_WIRING_HPP
23#include <M5UnitUnified.hpp>
24#include <wiring/m5_unit_unified_wiring.hpp>
27#include <HardwareSerial.h>
35#if defined(__M5UNIFIED_HPP__)
41struct AtomicBasePinPair {
50inline AtomicBasePinPair atomicBaseUartPins()
52 switch (M5.getBoard()) {
53 case m5::board_t::board_M5AtomLite:
54 case m5::board_t::board_M5AtomMatrix:
56 case m5::board_t::board_M5AtomS3:
57 case m5::board_t::board_M5AtomS3Lite:
58 case m5::board_t::board_M5AtomS3R:
59 case m5::board_t::board_M5AtomEchoS3R:
60 case m5::board_t::board_M5AtomS3RCam:
61 case m5::board_t::board_M5AtomS3RExt:
78inline bool addAtomicBaseUART(UnitUnified& units, Component&
unit,
const uint32_t baud = 115200,
79 const uint32_t config = SERIAL_8N1)
81 const auto p = atomicBaseUartPins();
82 if (p.rx < 0 || p.tx < 0) {
83 M5_LIB_LOGE(
"wiring: addAtomicBaseUART unsupported board=0x%02x",
static_cast<int>(M5.getBoard()));
86 M5_LIB_LOGI(
"wiring: addAtomicBaseUART board=0x%02x rx=%d tx=%d baud=%lu",
static_cast<int>(M5.getBoard()),
87 static_cast<int>(p.rx),
static_cast<int>(p.tx),
static_cast<unsigned long>(baud));
89 HardwareSerial& serial = m5::unit::wiring::defaultUartSerial();
91 serial.begin(baud, config, p.rx, p.tx);
92 return units.add(
unit, serial);
104inline bool addAtomicBaseUART(UnitUnified& units, Component& unit, const uint32_t baud = 115200,
105 const m5::unit::wiring::UartConfig config = m5::unit::wiring::UartConfig::Default)
107 const auto p = atomicBaseUartPins();
108 if (p.rx < 0 || p.tx < 0) {
109 M5_LIB_LOGE(
"wiring: addAtomicBaseUART unsupported board=0x%02x",
static_cast<int>(M5.getBoard()));
112 M5_LIB_LOGI(
"wiring(ESP-IDF): addAtomicBaseUART board=0x%02x rx=%d tx=%d baud=%u",
static_cast<int>(M5.getBoard()),
113 static_cast<int>(p.rx),
static_cast<int>(p.tx),
static_cast<unsigned>(baud));
115 auto port = m5::unit::wiring::uartPortHandle(m5::unit::wiring::defaultUartPort(),
static_cast<gpio_num_t
>(p.rx),
116 static_cast<gpio_num_t
>(p.tx), baud, config);
117 if (port == UART_NUM_MAX) {
120 return units.add(
unit, port);
130struct Tab5BuiltinRS485Pins {
140inline Tab5BuiltinRS485Pins tab5BuiltinRS485Pins()
142 switch (M5.getBoard()) {
143 case m5::board_t::board_M5Tab5:
160inline bool addTab5BuiltinRS485UART(UnitUnified& units, UnitSIT3088&
unit,
const uint32_t baud = 115200,
161 const uint32_t config = SERIAL_8N1)
163 const auto p = tab5BuiltinRS485Pins();
164 if (p.rx < 0 || p.tx < 0 || p.dir < 0) {
165 M5_LIB_LOGE(
"wiring: addTab5BuiltinRS485UART unsupported board=0x%02x",
static_cast<int>(M5.getBoard()));
168 M5_LIB_LOGI(
"wiring: addTab5BuiltinRS485UART board=0x%02x rx=%d tx=%d dir=%d baud=%lu",
169 static_cast<int>(M5.getBoard()),
static_cast<int>(p.rx),
static_cast<int>(p.tx),
170 static_cast<int>(p.dir),
static_cast<unsigned long>(baud));
172 auto cfg =
unit.config();
176 HardwareSerial& serial = m5::unit::wiring::defaultUartSerial();
178 serial.begin(baud, config, p.rx, p.tx);
179 return units.add(
unit, serial);
186inline bool addTab5BuiltinRS485UART(UnitUnified& units, UnitSIT3088& unit, const uint32_t baud = 115200,
187 const m5::unit::wiring::UartConfig config = m5::unit::wiring::UartConfig::Default)
193 M5_LIB_LOGE(
"wiring(ESP-IDF): addTab5BuiltinRS485UART is not yet supported");
Top level namespace of M5Stack.
SIT3088 unit for M5UnitUnified (manual direction-controlled RS-485 transceiver)