⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transfer.h

📁 usb host在ARM7上的实现
💻 H
字号:
#ifndef _TR_GENE_H
#define _TR_GENE_H


/****************************************************************************/
/*	includes																*/
/****************************************************************************/
#include	"config.h"
//#include	"_hc_core/chap9.h"
//#include	"_hc_core/dev_ep.h"

/****************************************************************************/
/*	constants																*/
/****************************************************************************/

#define		reqtype( x )					(x >> 8)
#define		request( x )					(x & 0xF)


#define		UNLOCK									0x00
#define		LOCK									0x80//底7位表示索引号 
#define		DELETE									0xff

#define		CONTROL_TRANSFER						1
#define		BULK_TRANSFER							2
#define		INTERRUPT_TRANSFER						0
#define		ISO_TRANSFER							3

#define		TRANSFER_STATE_IDLE						0
#define		TRANSFER_STATE_ACTIVE					1

#define		BULK_TRANSFER_NAK_WAIT_THRESHOLD		5
#define		BULK_TRANSFER_NAK_WAIT_TIME_ms			20

#define		DEFAULT_TRANSFER_TIMEOUT_ms				5000

#define		TRANSFER_TIMEOUT_LIMIT			10000
#define		CONTROL_TRANSFER_TIMEOUT_LIMIT		50		//	50ms : control transfer timeout, no response from device
#define		INTERRUPT_TRANSFER_TIMEOUT_LIMIT		1000
#define		BULK_TRANSFER_TIMEOUT_LIMIT			1000


#define TR_HANDLE_ERR				(unsigned char)-1
#define TR_INSTANCE_ERR				(unsigned char)-2
#define TR_ENDPORT_ERR				(unsigned char)-3
#define TR_INSTANCE_BE_DEL			(unsigned char)-4
#define TR_OS_EVENT_ERR	 			(unsigned char)-5
#define TR_ENDPONT_ID_ERR			(unsigned char)-6
#define TR_TIMEOUT					(unsigned char)-7
#define TR_NO_ERR					(unsigned char)0

#define OS_EVENT_DELETE 				0xff

/****************************************************************************/
/*	types																	*/
/****************************************************************************/

typedef	struct		req			{
									unsigned char	bmRequestType;
									unsigned char	bRequest;
									unsigned short	wValue;
									unsigned short	wIndex;
									unsigned short	wLength;
								} 
								USB_Device_Request;
							
typedef struct _LIST_ENTRY{
	struct	transfr 	*Flink;
	struct	transfr 	*Blink;
}LIST_ENTRY,*PLIST_ENTRY;

typedef struct transfr{
	/*  for general ATL transfers		*/
									
	unsigned char		lock;				// 非0则该传输实例被锁,其底7位为索引号
	unsigned char		*data_ptr_base;		// 该传输数据缓冲区基地址指针
	unsigned char		*data_ptr_start;		// 当该指针为非NULL则该传输实例在中断中被传输
	unsigned char		*data_ptr_end;
	unsigned char		*readout_position;	// 
	endpoint_info_ptr	epi_ptr;				// 传输端点描述
	void				(*callback)( struct	transfr *ptr );	// 传输完成回调函数
	unsigned int		need_transfer_total_size;	// 需要传输的总字节数	
	unsigned short		transferred_size;		// 已传输的字节数
	unsigned char		direction;				// 传输方向,IN,OUT,SETUP
	unsigned char		completion_code;		// 完成代码
	unsigned char		fatal_error;			// 严重错误标记
	unsigned long 		endpoint_create_id;	// 端点ID号
	LIST_ENTRY		tr_list_for_tr;
	LIST_ENTRY		tr_list_for_ep;

	/*  for interrupt transfer			*/
	/*  中断传输  */
	unsigned char		schedule_rate;		// 轮询数据传送端点的时间间隔	 
	unsigned long		poll_timing_timer;	// 轮询时间记数器
								
	/* for uC/OS-II */
	OS_EVENT *os_event_ptr;					//uC/OS-II 事件指针
}transfer_instance;
								
typedef			transfer_instance	*transfer_instance_ptr;


/****************************************************************************/
/*	function prototypes														*/
/****************************************************************************/

unsigned short		control_transfer( USB_Device_Request *dev_req, device_instance *dvi_ptr, unsigned char *data_ptr );
unsigned char		control_transaction( unsigned char direction, unsigned char *data_ptr, unsigned short *size_ptr, endpoint_info_ptr epi_ptr );

unsigned char bulk_transaction(  unsigned char direction, unsigned char *data_ptr, unsigned short *size_ptr, transfer_instance *hTrInstance );
unsigned char interrupt_transaction( unsigned char direction, unsigned char *data_ptr, unsigned short *size_ptr, transfer_instance *hTrInstance );

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -