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

📄 scsi.h

📁 TELECHIPS MP3解决方案UMS实现源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __SCSI_H__
#define __SCSI_H__

#include "GENLIB.H"

#define MAX_LUN					2			// 2002.08.29 Insert by Nicehong

typedef int		SCSI_BOOL;

/* SCSI operation code */
#define SCSI_OPCODE_INQUIRY					0x12
#define SCSI_OPCODE_READ_FORMAT_CAPACITY	0x23	// only in UFI, not in SCSI
#define SCSI_OPCODE_READ_CAPACITY			0x25
#define SCSI_OPCODE_REQUEST_SENSE			0x03
#define SCSI_OPCODE_READ6					0x08
#define SCSI_OPCODE_READ10					0x28
#define SCSI_OPCODE_MODE_SELECT6			0x15
#define SCSI_OPCODE_MODE_SENSE6				0x1a
//#define SCSI_OPCODE_MODE_SENSE10			0x5a
#define SCSI_OPCODE_ALLOW_REMOVAL			0x1e
#define SCSI_OPCODE_WRITE10					0x2a
#define SCSI_OPCODE_FORMAT_UNIT				0x04
#define SCSI_OPCODE_RESERVED				0x16
#define SCSI_OPCODE_SEND_DIAGNOSTIC			0x1d
#define SCSI_OPCODE_TEST_UNIT_READY			0x00
#define SCSI_OPCODE_START_STOP_UNIT			0x1b
#define SCSI_OPCODE_VERIFY					0x2f

enum _tag_scsi_error {
	SCSI_ERR_NOERROR = 0,
	SCSI_ERR_INVALID_CBW,
	SCSI_ERR_UNSUPPORTED,
	SCSI_ERR_SPECIFIC				// Locally assign the sense key
};

#define SCSI_OK			SCSI_ERR_NOERROR
#define SCSI_ERR_OK		SCSI_ERR_NOERROR
	
#pragma packed on
typedef struct __tag_scsi_COMMAND
{
	unsigned char		opcode;
	unsigned char		parameters[15];
} SCSI_COMMAND;
#pragma packed off

/////////////////////////////////////////////////////////////////////////////7
// INQUIRY
#pragma packed on
typedef struct __tag_scsi_command_INQUIRY
{
	unsigned char		opcode;			// must be 0x12 = INQUIRY
	
	unsigned char		bEVPD;			// = LogicalUnit:3, Reserved1:4, EVPD:1;

	unsigned char		bPageCode;
	unsigned char		bReserved2;
	unsigned char		bAllocLength;
	unsigned char		bControl;
} SCSI_COMMAND_INQUIRY;
#pragma packed off

#define SCSI_DEVICE_TYPE_DIRECT_ACCESS				0x00    /* disks */
#define SCSI_DEVICE_TYPE_SEQUENTIAL_ACCESS			0x01    /* tapes */
#define SCSI_DEVICE_TYPE_PRINTER					0x02    /* printers */
#define SCSI_DEVICE_TYPE_PROCESSOR					0x03    /* scanners, printers, etc */
#define SCSI_DEVICE_TYPE_WRITE_ONCE_READ_MULTIPLE	0x04    /* worms */
#define SCSI_DEVICE_TYPE_READ_ONLY_DIRECT_ACCESS	0x05    /* cdroms */
#define SCSI_DEVICE_TYPE_SCANNER					0x06    /* scanners */
#define SCSI_DEVICE_TYPE_OPTICAL					0x07    /* optical disks */
#define SCSI_DEVICE_TYPE_MEDIUM_CHANGER				0x08    /* jukebox */
#define SCSI_DEVICE_TYPE_COMMUNICATION				0x09    /* network */
#define SCSI_DEVICE_TYPE_ASC0T18					0x0A    /* ASC IT8 */
#define SCSI_DEVICE_TYPE_ASC1T18					0x0B    /* ASC IT8 */
#define SCSI_DEVICE_TYPE_SCC2						0x0C    /* Storage Controller device */
#define SCSI_DEVICE_TYPE_SES						0x0D    /* Enclousre Service device */
#define SCSI_DEVICE_TYPE_RBC						0x0E    /* RBC device */
#define SCSI_DEVICE_TYPE_OCRW						0x0F    /* optical Card Reader /writer Device */
#define SCSI_DEVICE_TYPE_UNKNOWN

#pragma packed on
typedef struct __tag_scsi_data_STANDARD_INQUITY
{
	unsigned char		bPeriphDevType;			// = PeriphQualifier:3, PeriphDevType:5
	
	unsigned char		bDevTypeModifier;		// = RMB:1, DevTypeModifier:7
												//           (RMB = "removable media bit")
	unsigned char		bVersion;				// = ISOVersion:2, ECMAVersion:3, ANSIVersion:3
	
	unsigned char		bDeviceCapability;		// = AENC:1, TrmIOP:1, Reserved1:2, ResponseFormat:4

	unsigned char		bAdditionalLength;
	unsigned char		bReserved2;
	unsigned char		bReserved3;

	unsigned char		bDeviceSupport;			// = RelAddr:1, WBus32:1, WBus16:1, Sync:1
												// = Linked:1, Reserved4:1, CmdQueue, SoftReset:1
	unsigned char		sVendorID[8];
	unsigned char		sProductID[16];
	unsigned char		sProductRevision[4];
} SCSI_DATA_STANDARD_INQUIRY;
#pragma packed off

#pragma packed on
typedef struct __tag_scsi_data_SERIALNUM_INQUITY
{
	unsigned char		bPeriphDeviceType;		// = PeriphQualifier:3, PeriphDeviceType:5
	
	unsigned char		bPageCode;
	unsigned char		bReserved1;
	unsigned char		bPageLength;
	
	unsigned char		sSerialNum[24];
} SCSI_DATA_SERIALNUM_INQUIRY;
#pragma packed off

#define SCSI_INQUIRY_ASCIIID_STRING_LEN		32
#pragma packed on
typedef struct __tag_scsi_inquiry_ID_DESC {
	unsigned char		bCodeSet;				// = Reserved1:4, CodeSet:4

	unsigned char		bIDType;				// = Reserved2:2, Association:2, IDType:4

   	unsigned char		bReserved3;

	unsigned char		bIDLength;
	unsigned char		sAsciiID[SCSI_INQUIRY_ASCIIID_STRING_LEN];
} SCSI_DATA_INQUIRY_ID_DESC;
#pragma packed off

#pragma packed on
typedef struct __tag_scsi_data_ASCIIID_INQUITY
{
	unsigned char		bPeriphDeviceType;		// = PeriphQualifier:3, PeriphDeviceType:5

	unsigned char		bPageCode;
	unsigned char		bReserved1;
	unsigned char		bPageLength;

	SCSI_DATA_INQUIRY_ID_DESC id[1];
} SCSI_DATA_ASCIIID_INQUIRY;
#pragma packed off

/////////////////////////////////////////////////////////////////////////////7
// READ FORMAT CAPACITY

#pragma packed on
typedef struct __tag_scsi_command_READ_FORMAT_CAPACITY
{
	unsigned char		opcode;			// must be 0x23 = READ_FORMAT_CAPACITY

	unsigned char		bLogicalUnit;	// = LogicalUnit:3, Reserved1:5

	unsigned char		bReserved2;
	unsigned char		bReserved3;
	unsigned char		bReserved4;
	unsigned char		bReserved5;
	unsigned char		bReserved6;

	unsigned short int	wAllocLength;
} SCSI_COMMAND_READ_FORMAT_CAPACITY;
#pragma packed off

#pragma packed on
typedef struct __tag_scsi_data_CAPACITY_LIST_HEADER
{
	unsigned char		bReserved1;
	unsigned char		bReserved2;
	unsigned char		bReserved3;

	unsigned char		bCapacityListLen;
} SCSI_DATA_CAPACITY_LIST_HEADER;
#pragma packed off

#pragma packed on
typedef struct __tag_scsi_data_CUR_MAX_CAPACITY_DESC
{
	unsigned long int	dwBlockCount;

	unsigned char		bDescriptorCode;	// = Reserved1:6, DescriptorCode:2

	unsigned char		xBlockLength[3];
} SCSI_DATA_CUR_MAX_CAPACITY_DESC;
#pragma packed off

#pragma packed on
typedef struct __tag_scsi_data_FORMATTABLE_CAPACITY_DESC
{
	unsigned long int	dwBlockCount;

	unsigned char		bReserved1;
	unsigned char		xBlockLength[3];
} SCSI_DATA_FORMATTABLE_CAPACITY_DESC;
#pragma packed off

/////////////////////////////////////////////////////////////////////////////7
// READ CAPACITY
#pragma packed on
typedef struct __tag_scsi_command_READ_CAPACITY
{
	unsigned char		opcode;			// must be 0x25 = READ_CAPACITY

	unsigned char		bLogicalUnit;	// = LogicalUnit:3, Reserved1:4, RelAddr:1
	
	unsigned long		dwLogicalBlockAddr;
	unsigned char		bReserved2;
	unsigned char		bReserved3;

	unsigned char		bPMI;			// = Reserved4:7, PMI:1
	
	unsigned char		bControl;
} SCSI_COMMAND_READ_CAPACITY;
#pragma packed off

#pragma packed on
typedef struct __tag_scsi_data_READ_CAPACITY
{
	unsigned long		dwLogicalBlockAddr;
	unsigned long		dwBlockLength;
} SCSI_DATA_READ_CAPACITY;
#pragma packed off

/////////////////////////////////////////////////////////////////////////////7
// REQUEST SENSE

#pragma packed on
typedef struct __tag_scsi_command_REQUEST_SENSE
{
	unsigned char		opcode;
	
	unsigned char		bLogicalUnit;	// = LogicalUnit:3, Reserved1:5

	unsigned char		bReserved2;
	unsigned char		bReserved3;
	
	unsigned char		bAllocLength;
	unsigned char		bControl;
} SCSI_COMMAND_REQUEST_SENSE;
#pragma packed off

#pragma packed on
typedef struct __tag_scsi_data_REQUEST_SENSE
{
	unsigned char		bErrorCode;		// = Valid:1, ErrorCode:7

	unsigned char		bSegNumber;

	unsigned char		bSenseKey;		// = FileMark:1, EOM:1, ILI:1, Reserved1:1, SenseKey:4

	unsigned long int	dwInfo;
	unsigned char		bAddSenseLength;
	unsigned long int	dwCommandSpecificInfo;

	unsigned char		bASC;
	unsigned char		bASCQ;
	unsigned char		bFieldRepaceUnitCode;
	unsigned char		xSenseKeySpecific[3];
} SCSI_DATA_REQUEST_SENSE;
#pragma packed off

/////////////////////////////////////////////////////////////////////////////7
// READ(10)
#pragma packed on
typedef struct __tag_scsi_command_READ10
{
	unsigned char		opcode;
	
	unsigned char		bLogicalUnit;	// LogicalUnit:3, DPO:1, FUA:1, Reserved1:2, RelAddr:1
	
	unsigned long		dwLogicalBlockAddr;
	unsigned char		bReserved2;
	unsigned short int	wTransferLength;
	unsigned char		bContol;
} SCSI_COMMAND_READ10;
#pragma packed off

/////////////////////////////////////////////////////////////////////////////7
// MODE SELECT(6)
#pragma packed on
typedef struct __tag_scsi_command_MODE_SELECT6
{
	unsigned char		opcode;			// must be 0x15 = MODE_SELECT6
	
	unsigned char		bLogicalUnit;	// LogicalUnit:3, PF:1, Reserved1:3, SP:1
	
	unsigned char		bReserved2;
	unsigned char		bReserved3;
	
	unsigned char		bParamListLen;
	unsigned char		bControl;
} SCSI_COMMAND_MODE_SELECT6;
#pragma packed off

⌨️ 快捷键说明

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