10#ifndef SEMF_HARDWAREABSTRACTION_STM32F4_STM32F4USBVCP_H_
11#define SEMF_HARDWAREABSTRACTION_STM32F4_STM32F4USBVCP_H_
16#if defined(STM32F4) && defined(HAL_PCD_MODULE_ENABLED)
25class Stm32F4UsbVcp:
public UartHardware
31 enum class ErrorCode : uint8_t
37 Init_RegisterInterface,
46 explicit Stm32F4UsbVcp(USBD_HandleTypeDef& usbHandle, uint8_t* usbRxCache,
size_t usbRxCacheSize);
47 virtual ~Stm32F4UsbVcp() =
default;
60 void deinit()
override;
61 void stopRead()
override;
62 void stopWrite()
override;
63 void setFormat(uint8_t bits, WireMode wire, Parity par, StopBits stop, FlowControl flow)
override;
64 void setBaud(uint32_t baud)
override;
71 Stm32F4UsbVcp* member =
nullptr;
73 CallbackList* next =
nullptr;
77 static CallbackList* m_callbackList;
78 static uint8_t cdcInitCallback(USBD_HandleTypeDef *usb, uint8_t cfgidx);
79 static uint8_t cdcDeInitCallback(USBD_HandleTypeDef *usb, uint8_t cfgidx);
86 static uint8_t cdcTxCallback(USBD_HandleTypeDef* usb, uint8_t epnum);
93 static uint8_t cdcRxCallback(USBD_HandleTypeDef* usb, uint8_t epnum);
94 static int8_t cdcControlCallback(uint8_t cmd, uint8_t pbuf[], uint16_t size);
95 void cdcInit(USBD_HandleTypeDef* usb);
101 void cdcTx(USBD_HandleTypeDef* usb);
107 void cdcRx(USBD_HandleTypeDef* usb, uint8_t epnum);
115 void cdcControl(uint8_t cmd, uint8_t pbuf[], uint16_t size);
116 void writeHardware(
const uint8_t data[],
size_t size)
override;
117 void readHardware(uint8_t data[],
size_t size)
override;
120 USBD_HandleTypeDef* m_handle;
122 USBD_CDC_HandleTypeDef m_cdcHandle;
124 USBD_ClassTypeDef m_interfaceCallbackClass;
126 CallbackList m_listMember;
128 USBD_CDC_LineCodingTypeDef m_lineCoding =
137 uint8_t* m_usbRxCache =
nullptr;
139 size_t m_usbRxCacheSize = 0;
141 size_t m_usbRxCacheWritePos = 0;
143 size_t m_usbRxCacheReadPos = 0;
145 uint8_t* m_rxData =
nullptr;
147 size_t m_rxDataSize = 0;
149 size_t m_rxDataAvailable = 0;
151 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32F4UsbVcp;