summaryrefslogtreecommitdiff
path: root/bsp/acm32/acm32f4xx-nucleo/libraries/HAL_Driver/Inc/HAL_FSUSB.h
blob: 9600b4ded6fb876bfed71c6385f5a157bf9b65eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
  ******************************************************************************
  * @file    HAL_Uart.h
  * @version V1.0.0
  * @date    2020
  * @brief   Header file of UART HAL module.
  ******************************************************************************
*/
#ifndef __HAL_FSUSB_H__
#define __HAL_FSUSB_H__  

#include "ACM32Fxx_HAL.h"


#define     HIGH_SPEED     1 
#define     FULL_SPEED     0 

#define     USB_EP0        0
#define     USB_EP1        1        
#define     USB_EP2        2      
#define     USB_EP3        3        
#define     USB_EP4        4   

#define     USB_EP_IN      USB_EP1
#define     USB_EP_OUT     USB_EP1

#define     EP_DIR_IN      0x80  
#define     EP_DIR_OUT     0x00   

#define 	HID_REPORT_SIZE         1024

#define     EP0_MAX_PACKET_SIZE     64
#define     EPX_MAX_PACKET_SIZE     64
//#define     EPX_MAX_PACKET_SIZE_HS     512
//#define     EPX_MAX_PACKET_SIZE_FS     64

#define     MASK_EPX_IN(x)		(1<<(6+3*x))   
#define     MASK_EPX_OUT(x)     (1<<(7+3*x))   
#define     MASK_EPX_ACK(x)     (1<<(8+3*x)) 
#define     MASK_EPX_TIMEOUT(x) (1<< (25+x))

typedef __PACKED_STRUCT _device_request
{
	uint8_t  bmRequestType;
	uint8_t  bRequest;
	uint16_t wValue;
	uint16_t wIndex;
	uint16_t wLength;
} DEVICE_REQUEST;



#define USB_BUS_RESET         	0x01
#define USB_SUSPEND           	0x02
#define USB_RESUME           	0x04
#define USB_SOF            		0x08
#define USB_SETUPTOK         	0x10
#define USB_EP0_SETUP_PACKET  	0x20
#define USB_EP0_IN		  		0x40
#define USB_EP0_OUT_PACKET 		0x80
#define USB_EP0_ACK  			0x100
#define USB_EP1_IN		  		0x200
#define USB_EP1_OUT_PACKET    	0x400
#define USB_EP1_ACK		    	0x800
#define USB_EP2_IN		  		0x1000
#define USB_EP2_OUT_PACKET    	0x2000
#define USB_EP2_ACK		    	0x4000
#define USB_EP3_IN		  		0x8000
#define USB_EP3_OUT_PACKET    	0x10000
#define USB_EP3_ACK		    	0x20000
#define USB_EP4_IN		  		0x40000
#define USB_EP4_OUT_PACKET    	0x80000
#define USB_EP4_ACK		    	0x100000
#define USB_IN_TIMEOUT	    	0x200000
#define USB_SETADDR		    	0x400000
#define USB_CRC_ERR 	    	0x800000
#define USB_MORETHAN_64     	0x1000000
#define USB_EP0_IN_ERR      	0x2000000
#define USB_EP1_IN_ERR      	0x4000000
#define USB_EP2_IN_ERR      	0x8000000
#define USB_EP3_IN_ERR      	0x10000000
#define USB_EP4_IN_ERR      	0x20000000
#define USB_NOEOP_ERR      		0x40000000
#define USB_TOGGLE_ERR      	0x80000000



#define ERROR_OUT_OUT            4  // received a same out packet 
#define ERROR_IN_OUT             2  // received a pakcet when try to send packet   



uint32_t HAL_FSUSB_Init(void);     
void HAL_FSUSB_Read_EP_MEM8(uint8_t *dst, uint32_t length, uint32_t fifo_offset, uint8_t ep_index);  
uint8_t HAL_FSUSB_Send_Data(uint8_t *buffer,uint32_t length,uint8_t ep_index);   
void HAL_FSUSB_Receive_Data(uint8_t *buffer,uint32_t length,uint8_t ep_index);  
uint16_t HAL_USB_Get_Stall_Status(uint8_t ep_index, uint8_t ep_dir);  
void HAL_FSUSB_EP0_Send_Empty_Packet(void);  
void HAL_FSUSB_EP0_Send_Stall(void);    
void usb_clear_stall(uint8_t ep_index, uint8_t ep_dir);  
void usb_send_stall(uint8_t ep_index, uint8_t ep_dir);
uint16_t HAL_FSUSB_Get_FIFO_Length(uint8_t ep_index);      

#endif