5#ifdef HAL_PCD_MODULE_ENABLED
14#include "libxr_def.hpp"
15#include "libxr_rw.hpp"
18#include "usbd_cdc_if.h"
20extern uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
21extern uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
23int8_t libxr_stm32_virtual_uart_init(
void);
25int8_t libxr_stm32_virtual_uart_deinit(
void);
27int8_t libxr_stm32_virtual_uart_control(uint8_t cmd, uint8_t *pbuf, uint16_t len);
29int8_t libxr_stm32_virtual_uart_receive(uint8_t *pbuf, uint32_t *Len);
31int8_t libxr_stm32_virtual_uart_transmit(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
38 template <
typename,
typename =
void>
51 return {libxr_stm32_virtual_uart_init, libxr_stm32_virtual_uart_deinit,
52 libxr_stm32_virtual_uart_control, libxr_stm32_virtual_uart_receive};
58 return {libxr_stm32_virtual_uart_init, libxr_stm32_virtual_uart_deinit,
59 libxr_stm32_virtual_uart_control, libxr_stm32_virtual_uart_receive,
60 libxr_stm32_virtual_uart_transmit};
63 using WriteFunctionType = ErrorCode (*)(WritePort &);
73 WritePort::WriteInfo
info;
76 info.op.UpdateStatus(
false, ErrorCode::INIT_ERR);
77 return ErrorCode::INIT_ERR;
86 WritePort::WriteInfo
info;
89 if (
ans != ErrorCode::OK)
91 return ErrorCode::EMPTY;
94 if (
port.queue_data_->PopBatch(
uart->tx_buffer_,
info.size) != ErrorCode::OK)
97 return ErrorCode::EMPTY;
101 uart->writing_ =
true;
107 info.op.MarkAsRunning();
109 return ErrorCode::OK;
111 return ErrorCode::OK;
118 if (
port.queue_block_->Peek(
block) != ErrorCode::OK)
120 return ErrorCode::EMPTY;
123 block.op_.MarkAsRunning();
125 if (
port.queue_data_->Size() >=
block.data_.size_)
128 port.queue_block_->Pop();
131 block.op_.UpdateStatus(
false, ErrorCode::OK);
132 return ErrorCode::OK;
136 return ErrorCode::OK;
163 return ErrorCode::OK;
ErrorCode SetConfig(UART::Configuration config)
设置 UART 配置 / Sets the UART configuration
通用异步收发传输(UART)基类 / Abstract base class for Universal Asynchronous Receiver-Transmitter (UART)
UART(size_t rx_queue_size, size_t rx_buffer_size, size_t tx_queue_size, size_t tx_buffer_size)
UART 构造函数 / UART constructor.
WritePort write_port_
写入端口 / Write port
ReadPort read_port_
读取端口 / Read port
LibXR Color Control Library / LibXR终端颜色控制库
ErrorCode(* ReadFun)(ReadPort &port)
Function pointer type for read operations.
ErrorCode(* WriteFun)(WritePort &port)
Function pointer type for write operations.
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值
UART 配置结构体 / UART configuration structure.