1 /*
2   ******************************************************************************
3   * @file    HAL_Uart.h
4   * @version V1.0.0
5   * @date    2020
6   * @brief   Header file of UART HAL module.
7   ******************************************************************************
8 */
9 #ifndef __HAL_FSUSB_H__
10 #define __HAL_FSUSB_H__
11 
12 #include "ACM32Fxx_HAL.h"
13 
14 
15 #define     HIGH_SPEED     1
16 #define     FULL_SPEED     0
17 
18 #define     USB_EP0        0
19 #define     USB_EP1        1
20 #define     USB_EP2        2
21 #define     USB_EP3        3
22 #define     USB_EP4        4
23 
24 #define     USB_EP_IN      USB_EP1
25 #define     USB_EP_OUT     USB_EP1
26 
27 #define     EP_DIR_IN      0x80
28 #define     EP_DIR_OUT     0x00
29 
30 #define 	HID_REPORT_SIZE         1024
31 
32 #define     EP0_MAX_PACKET_SIZE     64
33 #define     EPX_MAX_PACKET_SIZE     64
34 //#define     EPX_MAX_PACKET_SIZE_HS     512
35 //#define     EPX_MAX_PACKET_SIZE_FS     64
36 
37 #define     MASK_EPX_IN(x)		(1<<(6+3*x))
38 #define     MASK_EPX_OUT(x)     (1<<(7+3*x))
39 #define     MASK_EPX_ACK(x)     (1<<(8+3*x))
40 #define     MASK_EPX_TIMEOUT(x) (1<< (25+x))
41 
42 typedef __PACKED_STRUCT _device_request
43 {
44 	uint8_t  bmRequestType;
45 	uint8_t  bRequest;
46 	uint16_t wValue;
47 	uint16_t wIndex;
48 	uint16_t wLength;
49 } DEVICE_REQUEST;
50 
51 
52 
53 #define USB_BUS_RESET         	0x01
54 #define USB_SUSPEND           	0x02
55 #define USB_RESUME           	0x04
56 #define USB_SOF            		0x08
57 #define USB_SETUPTOK         	0x10
58 #define USB_EP0_SETUP_PACKET  	0x20
59 #define USB_EP0_IN		  		0x40
60 #define USB_EP0_OUT_PACKET 		0x80
61 #define USB_EP0_ACK  			0x100
62 #define USB_EP1_IN		  		0x200
63 #define USB_EP1_OUT_PACKET    	0x400
64 #define USB_EP1_ACK		    	0x800
65 #define USB_EP2_IN		  		0x1000
66 #define USB_EP2_OUT_PACKET    	0x2000
67 #define USB_EP2_ACK		    	0x4000
68 #define USB_EP3_IN		  		0x8000
69 #define USB_EP3_OUT_PACKET    	0x10000
70 #define USB_EP3_ACK		    	0x20000
71 #define USB_EP4_IN		  		0x40000
72 #define USB_EP4_OUT_PACKET    	0x80000
73 #define USB_EP4_ACK		    	0x100000
74 #define USB_IN_TIMEOUT	    	0x200000
75 #define USB_SETADDR		    	0x400000
76 #define USB_CRC_ERR 	    	0x800000
77 #define USB_MORETHAN_64     	0x1000000
78 #define USB_EP0_IN_ERR      	0x2000000
79 #define USB_EP1_IN_ERR      	0x4000000
80 #define USB_EP2_IN_ERR      	0x8000000
81 #define USB_EP3_IN_ERR      	0x10000000
82 #define USB_EP4_IN_ERR      	0x20000000
83 #define USB_NOEOP_ERR      		0x40000000
84 #define USB_TOGGLE_ERR      	0x80000000
85 
86 
87 
88 #define ERROR_OUT_OUT            4  // received a same out packet
89 #define ERROR_IN_OUT             2  // received a pakcet when try to send packet
90 
91 
92 
93 uint32_t HAL_FSUSB_Init(void);
94 void HAL_FSUSB_Read_EP_MEM8(uint8_t *dst, uint32_t length, uint32_t fifo_offset, uint8_t ep_index);
95 uint8_t HAL_FSUSB_Send_Data(uint8_t *buffer,uint32_t length,uint8_t ep_index);
96 void HAL_FSUSB_Receive_Data(uint8_t *buffer,uint32_t length,uint8_t ep_index);
97 uint16_t HAL_USB_Get_Stall_Status(uint8_t ep_index, uint8_t ep_dir);
98 void HAL_FSUSB_EP0_Send_Empty_Packet(void);
99 void HAL_FSUSB_EP0_Send_Stall(void);
100 void usb_clear_stall(uint8_t ep_index, uint8_t ep_dir);
101 void usb_send_stall(uint8_t ep_index, uint8_t ep_dir);
102 uint16_t HAL_FSUSB_Get_FIFO_Length(uint8_t ep_index);
103 
104 #endif
105 
106