semf
stm32f4usbvcp.h
Go to the documentation of this file.
1
10#ifndef SEMF_HARDWAREABSTRACTION_STM32F4_STM32F4USBVCP_H_
11#define SEMF_HARDWAREABSTRACTION_STM32F4_STM32F4USBVCP_H_
12
15
16#if defined(STM32F4) && defined(HAL_PCD_MODULE_ENABLED)
17#include <usbd_def.h>
18#include <usbd_cdc.h>
19
20namespace semf
21{
25class Stm32F4UsbVcp: public UartHardware
26{
27public:
31 enum class ErrorCode : uint8_t
32 {
33 Init_Stop = 0,
34 Init_Deinit,
35 Init_Init,
36 Init_RegisterClass,
37 Init_RegisterInterface,
38 Init_Start
39 };
40
46 explicit Stm32F4UsbVcp(USBD_HandleTypeDef& usbHandle, uint8_t* usbRxCache, size_t usbRxCacheSize);
47 virtual ~Stm32F4UsbVcp() = default;
48
58 void init() override;
59 // not implemented
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;
65
66private:
68 struct CallbackList
69 {
71 Stm32F4UsbVcp* member = nullptr;
73 CallbackList* next = nullptr;
74 };
75
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;
118
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 =
129 {
130 115200, /* baud rate*/
131 0x00, /* stop bits-1*/
132 0x00, /* parity - none*/
133 0x08 /* nb. of bits 8*/
134 };
135
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;
152};
153} /* namespace semf */
154#endif
155#endif /* SEMF_HARDWAREABSTRACTION_STM32F4_STM32F4USBVCP_H_ */
ClassID
Semf class IDs.
Definition: error.h:28