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

📄 rbc.h

📁 用ST92163开发的鼠标
💻 H
字号:
/*-*-*-*-*-*-*-*-*-*-* (C) 2000 STMicroelectronics *-*-*-*-*-*-*-*-*-*-*-*-*-*

PROJECT  : ST92163 USB Mass Storage Class - Bulk-Only
COMPILER : ST9 C

MODULE  :  RBC.h
VERSION :  V 4.0

CREATION DATE :  19/09/2000

AUTHOR : Microcontroller Division - ePI BU Application Lab
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


DESCRIPTION:    Definitions for interface with RBC layer

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/

typedef struct _INQUIRY_DATA {
	BYTE	Peripheral_Qualfier:3;		// default = 0x00
	BYTE	Peripheral_Device_Type:5;	// = 0x0E
// 0:	0x0E
	BYTE	RMB:1;						// Removable medium, default = 0x01
	BYTE	Reserved:7;					// = 0x00
// 1:	0x80
	BYTE	Version;					// default = 0x04;
// 2:	0x04
	BYTE	AERC:1;						// Asynchronous event reporting capability, default = 0x00
	BYTE	Obsolete:1;					// = 0x00
	BYTE	NormACA:1;					// Normal ACA Supported bit, default = 0x00
	BYTE	HiSup:1;					// Hierarchical support, default = 0x00
	BYTE	Response_Data_Format:4;		// = 0x02
// 3:	0x02
	BYTE	Additional_Length;			// sizeof(INQUIRY_DATA) - 5
// 4:	91 = 0x5B
	BYTE	SCCS:1;						// SCC support, default = 0x00
	BYTE	Reserved1:7;				// = 0x00
// 5:	0x00
	BYTE	BQue:1;						// The basic queuing, default = 0x00
	BYTE	EncServ:1;					// Enclosure Services, default = 0x00
	BYTE	VS:1;						// 
	BYTE	MultiP:1;					// Multi port, default = 0x00
	BYTE	MChngr:1;					// Medium changer, default = 0x00
	BYTE	Obsolete1:2;				// = 0x00
	BYTE	Addr16:1;					// Reserved in this spec., = 0x00
// 6:	0x00
	BYTE	RelAdr:1;					// = 0x00
	BYTE	Obsolete2:1;				// 0x00
	BYTE	WBUS16:1;					// Reserved in this spec., = 0x00
	BYTE	SYNC:1;						// Reserved in this spec., = 0x00
	BYTE	Linked:1;					// = 0x00
	BYTE	TranDis:1;					// Reserved in this spec., = 0x00
	BYTE	CmdQue:1;					// Command queuing, default = 0x00
	BYTE	VS1:1;
// 7:	0x00
	BYTE	Vendor_Identification[8];	// "STM     "
// 8-15:	APPLI
	BYTE	Product_Identification[16];	// "Flash R/W Demo  "
// 16-31:	APPLI
	BYTE	Procuct_Revision_Level[4];	// "V1.1"
// 32-35:	APPLI
	BYTE	Vendor_Specific[20];
// 36-55:	0x00, 0x00, ....
	BYTE	Reserved3:4;
	BYTE	Clocking:2;					// Not used
	BYTE	QAS:1;						// Not used
	BYTE	IUS:1;						// Not used
// 56: 0x00
	BYTE	Reserved4;
// 57: 0x00
	WORD	Version_descriptor[8];		// See Table 57
// 58-73:	0x0000 ......, OR 0x0220, 0x0000, .....
	BYTE	Reserved5[22];
// 74-95:	0x00, 0x00, .......
} INQUIRY_DATA;

typedef struct _MEDIA_CAPACITY {
	DWORD	Last_Logical_Address;		// big endian
	DWORD	Block_Length;				// in bytes, big endian
} MEDIA_CAPACITY;

typedef struct _SENSE_DATA {
/*
	BYTE	Valid:1;					// default = 0x0
	BYTE	Response_Code:7;			// default = 0x70
*/
	BYTE	Resp_Code;
// 0:	0x70
	BYTE	Segment_Number;				// default = 0x00
// 1:	0x00
/*
	BYTE	FileMark:1;					// reserved, default = 0x0
	BYTE	End_of_Medium:1;			// reserved, default = 0x0
	BYTE	Incorrect_Length:1;			// logical block length did not match the medium. default = 0x0
	BYTE	Reserved:1;					// default = 0x0
	BYTE	Sense_Key:4;				// application related
*/
	BYTE	Sense_Key;
// 2:	0000????b
	DWORD	Information;				// reserved, default = 0x00000000
// 3:	0x00000000
	BYTE	Additional_sense_length;	// sizeof(SENSE_DATA) - 7, default = 0x0c
// 7:	0x0c
	DWORD	Cmd_Information;			// reserved, default = 0x00000000
// 8:	0x00000000
	BYTE	ASC;						// Additional Sense Code, applicatoin related
// 12:	0x??
	BYTE	ASCQ;						// Additional Sense Code Qualifier, application related
// 13:	0x??
	BYTE	FRUC;						// Field Replaceable Unit Code, reserved
// 14:	0x00
/*
	BYTE	SKSV:1;
	BYTE	TBD:7;
*/
	BYTE	TBD;
// 15:	0x00
	WORD	Sense_Key_Specific;
// 16:	0x0000
	BYTE	ASB[2];						// Additional Sense Bytes, reserved
// 18:	0x00, 0x00
} SENSE_DATA;

typedef struct _RBC_CALLS {
	BYTE	(*Inquiry_Data)(BYTE Page, BYTE* Inquiry_Buffer);
	BYTE	(*Mode_Select6)(BYTE Length, BYTE* Para_List);
	BYTE	(*Mode_Sense6)(BYTE PC_Page, BYTE* Para_List);
	BYTE	(*Prevent_Removal)(BYTE Prevent);
	BYTE	(*Read_Capacity)(BYTE* Capacity);
	BYTE	(*Start_Stop)(BYTE Power_Control);
	BYTE	(*Test_Ready)(void);

	WORD	(*Read_Data10)(void);
	WORD	(*Write_Data10)(void);
	WORD	(*Verify_Data10)(void);

	BYTE	(*Read_Block)(BYTE* Buffer);
	BYTE	(*Write_Block)(BYTE* Buffer);
	BYTE	(*Verify_Block)(BYTE* Buffer);

#ifdef FORMAT_MEDIA
	BYTE	(*Format_Media)(BYTE Cmd_Flags);
#endif

	void	(*Release_SenseData)(BYTE* Sense_Buffer);

	WORD	(*Mode_Sense10)(BYTE PC_Page, BYTE* Para_List);
} RBC_CALLS;


#define RBC_GOOD	1
#define	RBC_FAIL	0

#define BOT_STATUS_GOOD			0x00
#define BOT_STATUS_FAILED		0x01
#define BOT_STATUS_PHASE		0x02
#define BOT_STATUS_MORE_DATA	0xFF

typedef struct _CMD_INQUIRY {
	BYTE	Op_code;
	BYTE	Reserved:6;
	BYTE	CmdDt:1;
	BYTE	Evpd:1;
	BYTE	Page;
	BYTE	Reserved1;
	BYTE	Allocation_Length;
	BYTE	Control;
} CMD_INQUIRY;

typedef struct _CMD_MODE_SELECT6 {
	BYTE	Op_code;

	BYTE	Reserved0:3;
	BYTE	PF:1;				// Page Format
	BYTE	Reserved1:3;
	BYTE	SP:1;				// Save Page

	BYTE	Reserved2;
	BYTE	Reserved3;
	BYTE	Para_Length;
	BYTE	Control;
} CMD_MODE_SELECT6;

typedef struct _CMD_MODE_SENSE6 {
	BYTE	Op_code;

	BYTE	Reserved0:4;
	BYTE	DBD:1;
	BYTE	Reserved1:3;

	BYTE	PC_Page;
	BYTE	Reserved;
	BYTE	Para_Length;
	BYTE	Control;
} CMD_MODE_SENSE6;

typedef struct _CMD_MODE_SENSE10 {
	BYTE	Op_code;

	BYTE	Reserved0:4;
	BYTE	DBD:1;
	BYTE	Reserved1:3;

	BYTE	PC_Page;
	BYTE	Reserved[4];
	WORD	Para_Length;
	BYTE	Control;
} CMD_MODE_SENSE10;

typedef struct _CMD_PRENVENT_REMOVAL {
	BYTE	Op_Code;
	BYTE	Reserved[3];
	BYTE	Reserved_Prevent;
	BYTE	Control;
} CMD_PRENVENT_REMOVAL;

typedef struct _CMD_READ_CAPACITY {
	BYTE	Op_Code;
	BYTE	Reserved[8];
	BYTE	Control;
} CMD_READ_CAPACITY;

typedef struct _CMD_START_STOP {
	BYTE	Op_Code;
	BYTE	Reserved0:7;
	BYTE	Immed:1;
	BYTE	Reserved[2];
	BYTE	Power_Control;
	BYTE	Control;
} CMD_START_STOP;

typedef struct _CMD_REQUEST_SENSE {
	BYTE	Op_code;
	BYTE	Reserved[3];
	BYTE	Length;
	BYTE	Control;
} CMD_REQUEST_SENSE;

typedef struct _CMD_READ10 {
	BYTE	Op_code;
	BYTE	Reserved0;
	DWORD	Block_Address;
	BYTE	Reserved1;
	WORD	Length;
	BYTE	Control;
} CMD_READ10;

typedef struct _CMD_WRITE10 {
	BYTE	Op_code;
	BYTE	Reserved0;		// Assume FUA bit is 0
	DWORD	Block_Address;
	BYTE	Reserved1;
	WORD	Length;
	BYTE	Control;
} CMD_WRITE10;

typedef struct _CMD_VERIFY10 {
	BYTE	Op_code;
	BYTE	Reserved0;
	DWORD	Block_Address;
	BYTE	Reserved1;
	WORD	Length;
	BYTE	Control;
} CMD_VERIFY10;

BYTE RBC_Inquiry(CMD_INQUIRY *pCmd, BYTE *repBuf, WORD *repCnt);
WORD RBC_Read10(CMD_READ10 *pCmd, BYTE *repBuf, WORD *repCnt);
BYTE RBC_Request_Sense(CMD_REQUEST_SENSE *pCmd, BYTE *repBuf, WORD *repCnt);

⌨️ 快捷键说明

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