#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 }; class USART { public: USART(UartPort port, uint32_t baudrate = 115200); ~USART(); USART(const USART &) = delete; USART &operator=(const USART &) = delete; 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); void reinit(uint32_t baudrate); UartPort port() const { return port_; } bool is_initialized() const { return initialized_; } static void setDefault(USART *uart); static USART *defaultInstance() { return default_; } private: UartPort port_; uint32_t baudrate_; bool initialized_ = false; static USART *default_; }; #endif