40 template <
typename,
typename =
void>
51 typename std::enable_if<!HasTransmitCplt<T>::value, USBD_CDC_ItfTypeDef>::type Apply()
53 return {libxr_stm32_virtual_uart_init, libxr_stm32_virtual_uart_deinit,
54 libxr_stm32_virtual_uart_control, libxr_stm32_virtual_uart_receive};
58 typename std::enable_if<HasTransmitCplt<T>::value, USBD_CDC_ItfTypeDef>::type Apply()
60 return {libxr_stm32_virtual_uart_init, libxr_stm32_virtual_uart_deinit,
61 libxr_stm32_virtual_uart_control, libxr_stm32_virtual_uart_receive,
62 libxr_stm32_virtual_uart_transmit};
65 using WriteFunctionType = ErrorCode (*)(WritePort &);
67 static ErrorCode
WriteFun(WritePort &port);
69 static ErrorCode
ReadFun(ReadPort &port);
71 STM32VirtualUART(USBD_HandleTypeDef &usb_handle, uint8_t *tx_buffer = UserTxBufferFS,
72 uint8_t *rx_buffer = UserRxBufferFS, uint32_t tx_queue_size = 5);
74 ErrorCode
SetConfig(UART::Configuration config);
76 static STM32VirtualUART *map[1];
78 USBD_HandleTypeDef *usb_handle_ =
nullptr;
79 DoubleBuffer tx_buffer_;
80 DoubleBuffer rx_buffer_;
82 WritePort _write_port;
85 WriteInfoBlock write_info_active_;
86 ReadInfoBlock read_info_active_;
89 bool writing_ =
false;
90 uint32_t write_size_ = 0;