www.pudn.com > LPC2200_USB.rar > mass.h, change:2005-04-19,size:4165b


 
#ifndef _MASS_H 
#define _MASS_H 
#include	"chap9.h" 
 
typedef struct	epi 
{ 
	unsigned 				max_packet_size:10;		// 端点最大封包 
	unsigned 				dev_addr:7;			// 设备地址 
	unsigned 				ep_num:5;				// 端点号 
	unsigned 				toggle:1;				// DATA0,DATA1 
	unsigned 				speed:1;				// 传输整速度:全速或低速 
	unsigned 				direction:2;				// 端点方向 
	unsigned 				tr_type:1;				// "Async or Iso" for PTD parameter 
	unsigned 				transfer_type:3;			// Ctrl, Iso, Bulk, Intrr 
	std_endpoint_descriptor	endpoint_descriptor;		// 端点描述符 
	unsigned int			endpoint_create_id;		// 端点创建ID 
	struct transfr			*tr_instance_ptr;			// 传输描述符链表指针 
}endpoint_info; 
 
#define		MAX_ENDPOINT_NUM				6 
typedef struct	dev 
{ 
	unsigned char			address;						// 设备地址 
	unsigned char			speed;						//  
	std_dev_descriptor		dev_descriptor;					// 设备描述符 
	std_conf_descriptor		conf_descriptor;					// 配置描述符 
	std_interface_descriptor	interfacef_descriptor;				// 接口描述符 
	endpoint_info			*epi_ptr[ MAX_ENDPOINT_NUM ];	// 端点描述信息指针列表 
	#ifdef STRING_DESCRIPTOR 
	unsigned short			*string_manufacturer;				// 厂商描述符字符串指针 
	unsigned short			*string_product;					// 产品描述符字符串指针 
	unsigned short			*string_serialNum;				// 设备序列号字符串指针 
	#endif 
	void					*class_instance_ptr;				// 类实例结构指针 
	unsigned char			topology_layer;				// 拓朴层,根集线器下的设备为第1层 
}device_instance; 
						 
 
 
#define MAX_MASS_DEVICES_DEFINE			2 
#define MAX_MASS_DEVICES_LUN_DEFINE 	MAX_MASS_DEVICES_DEFINE 
 
#define		mass_instance_ptr( x )			((x)->class_instance_ptr)								 
 
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		*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; 
 
#define MAX_MASS_LUN 1 
/* 大容量设备描述数据结构 */ 
typedef struct MASS_STORAGE_CLASS 
{	unsigned char  		LUN;							/* 该设备的逻辑单元数*/ 
	struct _HMEDLUN	*LUN_infor_ptr[MAX_MASS_LUN];	/* 逻辑单元描述信息结构指针 */  
	device_instance 		*dvi_ptr;						/* 设备信息描述结构指针*/ 
	endpoint_info		*setup_epi_ptr;					/* 控制端点描述信息结构指针 */  
	transfer_instance 	*tr_bulk_in_ptr;					/* 批量输入传输描述符 */ 
	transfer_instance 	*tr_bulk_out_ptr;				/* 批量输出传输描述符 */ 
	transfer_instance 	*tr_int_in_ptr; 					/* 中断输入传输描述符CBI-Only使用*/ 
	unsigned char		SubclassCode;					/* 子类代码 */ 
	unsigned char		ProtocolCode;					/* 传输协议代码CBI 或BULK*/  
	unsigned char		*CBW_BuffPtr;					/* 批量传输的命令包缓冲区指针 */ 
	unsigned char		RBC_BuffPtr[12];				/* 命令设置缓冲区 */ 
}MassStorageClass,*PMassStorageClass; 
 
 
/* 媒介设备句柄 */  
typedef struct _HMEDLUN 
{ 
	unsigned char  	LUN;					// 所在大容量设备的逻辑单元号 
	MassStorageClass	*MSC;					// 大容量设备的描述信息结构 
 
	unsigned char  	VendorInfo[8];			// 厂商信息 
	unsigned char  	ProductInfo[16];		// 产品信息 
	unsigned char  	ProductRev[4];			// 产品版本 
	 
	unsigned int		LastLogicalBlookAddress;// 最后逻辑块地址 
	unsigned int  		BlockLengthInBytes;		// 逻辑块长度 
 
}hMedLUN; 
 
#endif //	_MASS_H