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

📄 mass_bulk.h

📁 zlg/fs源代码
💻 H
字号:
#ifndef	_MASS_BULK_H
#define	_MASS_BULK_H

#ifdef  MASS_BULK_GLOBALS
#define MASS_BULK_GLOBALS_EXT
#else
#define MASS_BULK_GLOBALS_EXT extern
#endif

#define MAX_MASS_DEVICES_DEFINE			2
#define MAX_MASS_DEVICES_LUN_DEFINE 	MAX_MASS_DEVICES_DEFINE+ 3							
#define MAX_MASS_LUN 4

#define	PERSISTENT_FAILURE	(INT8U)0x03  
#define	PHASE_ERROR 		(INT8U)0x02
#define	COMMAND_FAILED 		(INT8U)0x01
#define	COMMAND_PASSED		(INT8U)0x00

#define	IN_DATA			DirectionPID_IN 		// 数据输入
#define	OUT_DATA		 	DirectionPID_OUT		// 数据输出
#define	NONE_DATA			NoDirection_Just_Hold		// 无数据传输




/* 大容量设备描述数据结构 */
typedef struct MASS_STORAGE_CLASS
{
	struct _HMEDLUN	*LUN_info_ptr[MAX_MASS_LUN];	/* 逻辑单元描述信息结构指针 */ 
	device_instance 		*dvi_ptr;						/* 设备信息描述结构指针*/
	INT8U  		LUN;							/* 该设备的逻辑单元数*/
	INT8U		SubclassCode;					/* 子类代码 */
	INT8U		ProtocolCode;					/* 传输协议代码CBI 或BULK*/ 
	INT8U		Reserved;
	INT8U		CBW_Buff[31];					/* 批量传输的命令包缓冲区指针 */
	//INT8U		RBC_Buff[12];				/* 命令设置缓冲区 */
}MassStorageClass,*PMassStorageClass;

/* 媒介设备句柄 */ 
typedef struct _HMEDLUN
{
	MassStorageClass	*MSC;					// 大容量设备的描述信息结构
	INT8U  		LUN;					// 所在大容量设备的逻辑单元号
	INT8U  		VendorInfo[8];			// 厂商信息
	INT8U  		ProductInfo[16];		// 产品信息
	INT8U  		ProductRev[4];			// 产品版本	
	INT32U		LastLogicalBlookAddress;// 最后逻辑块地址
	INT32U  		BlockLengthInBytes;		// 逻辑块长度
}hMedLUN;



/* 命令块包结构(仅单批量使用) */
typedef struct _COMMAND_BLOCK_WRAPPER{
   	INT8U   	dCBW_Signature_0;
	INT8U   	dCBW_Signature_1;
	INT8U   	dCBW_Signature_2;
	INT8U   	dCBW_Signature_3;
   	INT32U   		dCBW_Tag;
   	INT8U		dCBW_DataXferLen_0;
	INT8U		dCBW_DataXferLen_1;
	INT8U		dCBW_DataXferLen_2;
	INT8U		dCBW_DataXferLen_3;
   	INT8U    	bCBW_Flag;
	INT8U    	bCBW_LUN;
   	INT8U    	bCBW_CDBLength;
   	INT8U 	CBWCB[16];
} COMMAND_BLOCK_WRAPPER, *PCOMMAND_BLOCK_WRAPPER;

/* 命令状态包结构(仅单批量使用) */
typedef  struct _COMMAND_STATUS_WRAPPER{
   	INT8U   	dCSW_Signature_0;		//  0x55
	INT8U   	dCSW_Signature_1;		// 0x53
	INT8U   	dCSW_Signature_2;		// 0x42
	INT8U   	dCSW_Signature_3;		// 0x53
   	INT32U   		dCSW_Tag;				// 与CBW一致
   	INT8U  		dCSW_DataResidue_0;
	INT8U  		dCSW_DataResidue_1;
	INT8U  		dCSW_DataResidue_2;
	INT8U  		dCSW_DataResidue_3;
   	INT8U    	bCSW_Status;
} COMMAND_STATUS_WRAPPER, *PCOMMAND_STATUS_WRAPPER;

MASS_BULK_GLOBALS_EXT hMedLUN *Create_Medium(device_instance * dvi_ptr, INT8U LUNIndex);
MASS_BULK_GLOBALS_EXT void Close_Medium(hMedLUN * hMedLUNPtr, INT8U LUNIndex);
MASS_BULK_GLOBALS_EXT INT32U Read_BlockData(hMedLUN * medium_ptr, INT8U * data_ptr, INT32U LBA, INT16U block_num);
MASS_BULK_GLOBALS_EXT INT32U Write_BlockData(hMedLUN * medium_ptr, INT8U * data_ptr, INT32U LBA, INT16U block_num);

#ifdef  MASS_BULK_GLOBALS
#define MASS_BULK_GLOBALS_INT

#define CBW_IN_DATA 	0x80
#define CBW_OUT_DATA 	0x00

MASS_BULK_GLOBALS_INT MassStorageClass MSCDevices[MAX_MASS_DEVICES_DEFINE];
MASS_BULK_GLOBALS_INT hMedLUN MSCDeviceLUNs[MAX_MASS_DEVICES_LUN_DEFINE];

MASS_BULK_GLOBALS_INT INT8U Reset_MassStorage(device_instance * dvi_ptr);
MASS_BULK_GLOBALS_INT INT8U Get_MaxLUN(device_instance * dvi_ptr);
MASS_BULK_GLOBALS_INT INT16U Get_CSWStatus(hMedLUN * Medium_ptr);
MASS_BULK_GLOBALS_INT INT8U Get_ThisInquiryData(hMedLUN * Medium_ptr);
MASS_BULK_GLOBALS_INT INT8U Get_ThisMediumCapacity(hMedLUN * Medium_ptr);
MASS_BULK_GLOBALS_INT hMedLUN *BulkOnlyGet_MassInfo(MassStorageClass * mass_i_ptr);
MASS_BULK_GLOBALS_INT INT8U Get_RequestSense(hMedLUN * Medium_ptr, SENSE_DATA * SenseData_ptr);

#endif


#endif

⌨️ 快捷键说明

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