#ifndef __UART_DRIVER_H__ #define __UART_DRIVER_H__ #include #include "bus_core.h" enum class UartPort : uint8_t { _0 = 0, _1, _2, _3, _4, _5, _6, MAX }; struct UartConfig { uint32_t baudrate = 115200; uint8_t data_bits = 8; uint8_t stop_bits = 1; uint8_t parity = 0; }; class UartBus { public: explicit UartBus(UartPort port); ~UartBus(); UartBus(const UartBus &) = delete; UartBus &operator=(const UartBus &) = delete; RetCode init(const UartConfig &config); RetCode deinit(); RetCode send_byte(uint8_t data); RetCode send_data(const uint8_t *data, uint32_t len); RetCode receive_byte(uint8_t *data, uint32_t timeout_ms); RetCode irq_handler(); static UartBus &default_instance(); private: UartPort port_; UartConfig config_; bool initialized_ = false; }; #endif