Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
66c1bda98This file is pinned to the selected release. Download the original to open it in your design tool.
#pragma once
#include <cstddef>
#include <cstdint>
namespace Espfc::Hal {
#if defined(ESP32)
static constexpr size_t SERIAL_TX_BUFFER_SIZE = 0xff;
#elif defined(ESP8266)
static constexpr size_t SERIAL_TX_BUFFER_SIZE = 0x80;
#elif defined(ARCH_RP2040)
static constexpr size_t SERIAL_TX_BUFFER_SIZE = 256;
#elif defined(UNIT_TEST)
static constexpr size_t SERIAL_TX_BUFFER_SIZE = 0xff;
#else
#error "Unsupported platform!"
#endif
enum SerialDeviceConfigParity : uint8_t
{
SDC_SERIAL_PARITY_NONE,
SDC_SERIAL_PARITY_EVEN,
SDC_SERIAL_PARITY_ODD,
};
enum SerialDeviceConfigStopBits : uint8_t
{
SDC_SERIAL_STOP_BITS_0,
SDC_SERIAL_STOP_BITS_1,
SDC_SERIAL_STOP_BITS_15,
SDC_SERIAL_STOP_BITS_2,
};
struct SerialDeviceConfig
{
uint32_t baud = 115200;
int8_t rx_pin = -1;
int8_t tx_pin = -1;
bool inverted = false;
int8_t data_bits = 8;
SerialDeviceConfigParity parity = SDC_SERIAL_PARITY_NONE;
SerialDeviceConfigStopBits stop_bits = SDC_SERIAL_STOP_BITS_1;
};
class SerialUart
{
public:
SerialUart(int index): _index(index) {}
void begin(const SerialDeviceConfig& conf);
void updateBaudRate(int baud);
int available();
int read();
size_t readMany(uint8_t* c, size_t l);
int peek();
void flush();
size_t write(uint8_t c);
size_t write(const uint8_t* c, size_t l);
int availableForWrite();
bool isTxFifoEmpty();
private:
int _index;
};
SerialUart* getSerialUart(int index);
#if ARDUINO_USB_CDC_ON_BOOT || ARCH_RP2040
class SerialUsb
{
public:
void begin(const SerialDeviceConfig& conf);
void reenumerate();
void updateBaudRate(int baud);
int available();
int read();
size_t readMany(uint8_t* c, size_t l);
int peek();
void flush();
size_t write(uint8_t c);
size_t write(const uint8_t* c, size_t l);
int availableForWrite();
bool isTxFifoEmpty();
};
SerialUsb* getSerialUsb();
#endif
} // namespace Espfc::Hal