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