📄 ufi.#1
字号:
//************************************************************************
//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完成于桃龙源
//*************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -