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

📄 mass.h

📁 usb host在ARM7上的实现
💻 H
字号:

#ifndef _MASS_H
#define _MASS_H

#include	"_hc_core/dev_ep.h"
#include	"_hc_core/transfer.h"

#define MAX_MASS_DEVICES_DEFINE			2
#define MAX_MASS_DEVICES_LUN_DEFINE 	MAX_MASS_DEVICES_DEFINE+ 3

#define		mass_instance_ptr( x )			((x)->class_instance_ptr)								


#define MAX_MASS_LUN 4
/* 大容量设备描述数据结构 */
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;



/* RBC与传输的通讯的数据结构 */
typedef  struct _TR_With_RBC
{
/*  */
	MassStorageClass	*MSC;			/*协议代码CBI 或BULK*/ 
	unsigned char  	LUN;					// 所在大容量设备的逻辑单元号

/* RBC到传输 */
	uint16	DataTransferLength;
	uint8 	TrDirection;				/* 数据传输方向(输入、输出、无数据) */
	uint8 	CBLength;				/* 命令有效字节的长度,UFI固定为12字节 */
	uint8 	*RBC_BuffPtr;			/* 命令设置缓冲区指针 */
/* 传输到RBC */
	uint8 	*Data_BuffPtr;			/* 命令接收数据缓冲区指针*/
}TR_With_RBC;

void ini_mass_device_LUN_mem(void);
void ini_mass_device_mem(void);
unsigned short		mass_init_commands( device_instance *dvi_ptr );
unsigned short		mass_dispose_process( device_instance *dvi_ptr );

hMedLUN * Creat_Medium(device_instance *dvi_ptr ,unsigned char LUNIndex);
void Close_Medium(hMedLUN *hMedLUNPtr,unsigned char LUNIndex);
unsigned short ReadBlockData(hMedLUN 	*MediumPtr, unsigned char *BufferPtr,
							   unsigned int LBA, unsigned short TrBLength);		
unsigned short WriteBlockData(hMedLUN 	*MediumPtr, unsigned char *BufferPtr,
							   unsigned int LBA, unsigned short TrBLength);							  

#endif //	_MASS_H


⌨️ 快捷键说明

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