1 #ifndef __USBH_CDC_CORE_H__ 2 #define __USBH_CDC_CORE_H__ 3 4 #include <stdint.h> 5 6 7 typedef enum { 8 USBH_CDC_SEND = 0, 9 USBH_CDC_SEND_WAIT, 10 USBH_CDC_READ, 11 USBH_CDC_READ_WAIT, 12 USBH_CDC_CTRL 13 } USBH_CDC_State; 14 15 16 typedef enum { 17 CDC_SET_LINE_CODING = 0x20, 18 CDC_GET_LINE_CODING, 19 CDC_SET_CONTROL_LINE, 20 CDC_CLR_STALL, 21 } USBH_CDC_ReqState; 22 23 24 typedef struct { 25 void (*Send)(uint8_t *); 26 void (*Receive)(uint8_t *); 27 } USBH_CDC_cb_t; 28 29 30 typedef struct { 31 uint8_t InEp; 32 uint8_t OutEp; 33 uint16_t InEpSize; 34 uint16_t OutEpSize; 35 uint8_t InEpDATAX; 36 uint8_t OutEpDATAX; 37 38 uint8_t CtrlEp; 39 uint16_t CtrlEpSize; 40 uint8_t CtrlEpDATAX; 41 42 USBH_CDC_State state; 43 USBH_CDC_State stateBkp; 44 USBH_CDC_ReqState reqState; 45 46 uint8_t TxBuff[USBH_CDC_BUFF_SIZE]; 47 uint8_t RxBuff[USBH_CDC_BUFF_SIZE]; 48 uint16_t TxWrPtr, TxRdPtr; 49 uint16_t RxWrPtr, RxRdPtr; 50 uint16_t TxFrameNbr; // Frame Number 51 uint16_t RxFrameNbr; 52 53 USBH_CDC_cb_t *cdc_cb; 54 } USBH_CDC_Info_t; 55 56 57 extern volatile USBH_CDC_Info_t USBH_CDC_Info; 58 59 60 61 extern USBH_Class_cb_t USBH_CDC_cb; 62 63 64 USBH_Status USBH_CDC_Init(USBH_Info_t *phost); 65 void USBH_CDC_DeInit(USBH_Info_t *phost); 66 USBH_Status USBH_CDC_Request(USBH_Info_t *phost); 67 USBH_Status USBH_CDC_Process(USBH_Info_t *phost); 68 69 70 uint32_t USBH_CDC_Send(uint8_t *data, uint16_t size); 71 uint32_t USBH_CDC_Read(uint8_t *buff, uint16_t size); 72 73 74 #endif // __USBH_CDC_CORE_H__ 75