HAL_FSUSB.h 3.1 KB
Newer Older
A
aisino2200 已提交
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