www.pudn.com > UDISK.rar > UFI.H


//************************************************************************ 
//author:dragon 
//web:8dragon.com 
//2004.2.5完成于桃龙源 
//************************************************************************* 
#define CBW_SIGNATURE   0x55534243 
#define CSW_SIGNATURE   0x55534253 
#define BYTE	unsigned char 
#define WORD	unsigned short 
#define DWORD	unsigned long 
#define UINT	unsigned int 
//****************************************************************************** 
//The macroinstruction of USB Mass Storage Class -UFI Command Specification 
//***************************************************************************** 
#define UFI_CMD_FORMAT			0x04 
#define UFI_CMD_INQUIRY			0x12 
#define UFI_CMD_MODESELECT		0x15 
#define UFI_CMD_MODESENSE6		0x1A 
#define UFI_CMD_LOCKORNOT		0x1E 
#define UFI_CMD_READ			0x28 
#define UFI_CMD_READCAPACITY	0x25 
#define UFI_CMD_REQUESTSENSE	0x03 
#define UFI_CMD_STARTSTOPUNIT	0x1B 
#define UFI_CMD_TESTUNITREADY	0x00 
#define UFI_CMD_VERIFY			0x2F 
#define UFI_CMD_WRITE			0x2A 
//**************************************************************************** 
// The definition of structure of UFI command 
//some essential commands that can control U disk are defined here, 
//and some others are not refered here.IF you want to know necessary details  
// you may read UFI Command Specification 1.0  
//**************************************************************************** 
typedef struct _READ { 
		BYTE OperationCode; 
		BYTE Reserved1; 
		DWORD LBA; 
		BYTE Reserved2; 
		WORD ReadLength; 
		BYTE Reserved3[3]; 
		} READ, * PREAD; 
typedef struct _WRITE { 
		BYTE OperationCode; 
		BYTE Reserved1; 
		DWORD LBA; 
		BYTE Reserved2; 
		WORD WriteLength; 
		BYTE Reserved3[3]; 
		} WRITE, *PWRITE;	 
typedef struct _READ_CAPACITY { 
		BYTE OperationCode; 
		BYTE Rseverd1; 
		DWORD LBA; 
		BYTE Resverd2[6]; 
	} READ_CAPACITY, *PREAD_CAPACITY; 
typedef struct _INQUIRY { 
	BYTE OperationCode;	/* 12H */ 
	BYTE Reserved0 ; 
	BYTE PageCode; 
	BYTE Reserved1; 
	BYTE AllocationLen; 
    BYTE Resverd2[7];		 
	} INQUIRY, *PINQUIRY; 
typedef struct _REQUEST_SENSE { 
		BYTE OperationCode;    
		BYTE Reserved1[3]; 
		BYTE AllocationLen; 
		BYTE Reserved2[7]; 
	} REQUEST_SENSE, *PREQUEST_SENSE; 
typedef struct _TEST_UNIT { 
		BYTE OperationCode;     
		BYTE Reserved[11]; 
	} TEST_UNIT, *PTEST_UNIT; 
//typedef struct _GENERIC_CDB { 
//	unsigned char OperationCode; 
 //   unsigned char Reserved[15]; 
//} Standard_CDB,*PGENERIC_CDB; 
//********************************************************************************* 
//the structure of CBWCB. 
// Usually  CBWCB include UFI COMMAND which can directly control U disks; 
//********************************************************************************* 
typedef union _CBWCB{     
		READ					Ufi_Read; 
		READ_CAPACITY			Ufi_ReadCapacity; 
		WRITE					Ufi_Write; 
		INQUIRY					Ufi_Inquiry; 
		REQUEST_SENSE			Ufi_RequestSense; 
		TEST_UNIT				Ufi_TestUnit; 
//		GENERIC_CDB				Ufi_Genric; 
	} CBWCB, *PCBWCB; 
 
//********************************************************************************** 
//Defined the USB bulk transcation. 
//the structure of  CBW( command Block Wrapper)and CSW(Command Status Wrapper) 
//all the USB's packet are transferd by CBW,and the status are returned by  
//CSW. 
//********************************************************************************** 
typedef struct _COMMAND_BLOCK_WRAPPER{ 
		DWORD  dCBW_Signature; 
		DWORD  dCBW_Tag; 
		DWORD  dCBW_DataXferLen; 
		BYTE   bCBW_Flag; 
		BYTE   bCBW_LUN; 
		BYTE   bCBW_CDBLen;	 
		CBWCB  CBWCommand;		// UFI COMMAND are inclued in it; 
		BYTE   Resverd[4];			// 
	} CBW, *PCBW; 
typedef struct _COMMAND_STATUS_WRAPPER{ 
		DWORD   dCSW_Signature; 
		DWORD   dCSW_Tag; 
		DWORD   dCSW_DataResidue; 
		BYTE    bCSW_Status; 
	} CSW, *PCSW; 
typedef union _Block{ 
		CBW		CbwBlock; 
		CSW		CswBlock; 
	} BLOCK,*pBlock; 
//********************************************************************************** 
//Functions 
// 
//********************************************************************************** 
BYTE BulkOut(BYTE *pbBuffer,WORD len,WORD lba); 
BYTE BulkIn(BYTE *pbBuffer,WORD len); 
BYTE Inquiry(void); 
BYTE TestUnit(void); 
BYTE LockMedia(void); 
BYTE RequestSense(void); 
BYTE ReadCapacity(void); 
BYTE Read(DWORD dlba,BYTE blen,BYTE *pbBuffer); 
BYTE Write(DWORD dlba,BYTE blen,BYTE *pbBuffer,BYTE bWaitTime); 
BYTE PollDisk(void); 
//************************************************************************ 
//author:dragon 
//web:8dragon.com 
//2004.2.5完成于桃龙源 
//*************************************************************************