📄 rbc.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: Rbc.c
** Latest modified Date: 2007-10-8
** Latest Version: 1.0
** Descriptions: 这是SCSI基本命令的子集。这部分代码用于对主机发出的SCSI命令进行解码
**
**--------------------------------------------------------------------------------------------------------
** Created by: Lizhenming
** Created date: 2007-09-14
** Version: 1.0
** Descriptions: The original version
**
*********************************************************************************************************/
#include "RbcBasicType.h"
#include "Hal4Rbc.h"
#include "RBC.h"
#include "RBCCmd.h"
#include "massStorage.h"
#include "tpbulk.h"
/*********************************************************************************************************
Private Data
*********************************************************************************************************/
#if 1
typedef __packed union _RBC_PROP {
__packed struct {
unsigned MediumRemovFlag : 2;
unsigned MediumState : 2;
unsigned PowerState : 4;
} bits;
__uint8 value;
} __RBC_PROPERTY, * __PRBC_PROPERTY;
#define __GrbcPropertyData __GrbcPropertyDatas[__GbCurLun]
static __RBC_PROPERTY __GrbcPropertyDatas[__MAXLUN+1]; /* 储存器的状态属性 */
#endif
/*
* 储存设备存储每个命令块的执行结果状态作为判别数据,判别数据通过请求判别命令被返回到主机。判别数据包括
* 三层越来越详细的错误代码。判别键(SenseKey)提供可反映出错误和异常条件的普通范畴。附加判别代码(ASC)提
* 供描述判别键的更多信息。附加判别代码限定词(ASCQ)为附加判别代码增添更多详细的内容。
*/
static __REQUEST_SENSE_DATA __GrbcSenseData =
{
/*
* 0x70, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x29,
* 0x00, 0x00, 0x00, 0x00, 0x00
*/
0xf0, /* INT8 ResponseCode : 7; */
0, /* INT8 Valid : 1; */
0, /* INT8 SegmentNum; */
0x5, /* INT8 SenseKey : 4;5= */
/* illegal request */
0, /* INT8 Reserved0 : 1; */
0, /* INT8 WrongLenIndicator : 1; */
0, /* INT8 EndofMedium : 1; */
0, /* INT8 FileMark : 1; */
0, /* INT8 Info_0; */
0, /* INT8 Info_1; */
0, /* INT8 Info_2; */
0, /* INT8 Info_3; */
0xA, /* INT8 AdditionalSenseLen; */
0, /* INT8 CommandSpecInfo_0; */
0, /* INT8 CommandSpecInfo_1; */
0, /* INT8 CommandSpecInfo_2; */
0, /* INT8 CommandSpecInfo_3; */
0x20, /* INT8 ASC; */
0, /* INT8 ASCQ; */
0, /* INT8 ReplacableUnitCode; */
0, /* INT8 SenseKeySpec_0 : 7; */
0, /* INT8 SenseKeySpecValid : 1; */
0, /* INT8 SenseKeySpec_1; */
0 /* INT8 SenseKeySpec_2; */
};
/*********************************************************************************************************
模式参数页
*********************************************************************************************************/
/*
* 模式参量列表包含一个表头,后面跟随着设备参数页
*/
#define __PARAMETER_LIST_LENGTH (sizeof(__MODE_PARAMETER_HEAD)+sizeof(__MODE_RBC_DEVICE_PARAMETERS_PAGE))
/* Default Device Para. Page */
#define __DEFAULT_DEV_PAGE { /* Mode parameter header(6) */\
{\
__PARAMETER_LIST_LENGTH-1, /* mode data length (exclude */\
/* the number of bytes in the */\
/* MODE DATA LENGTH field. */\
0, /* medium type */\
0, /* device spec Param */\
0 /* block Descriptor length */\
},\
/* device parameter page */\
{\
__MODE_PAGE_RBC_DEVICE_PARAMETERS, /* Page Code */\
0, /* Reserved */\
1, /* PageSavable */\
\
0x0B, /* PageLength */\
\
0, /* WriteCacheDisable */\
00, /* Reserved */\
\
{ /* Logical block Size = */\
0x02, /* 512 Bytes */\
0x00\
},\
\
{ /* Number of logical blocks */\
0x00,\
0x00,\
0x00,\
0x00,\
0x00\
},\
\
0xFF, /* Power/Peformance */\
\
0, /* LockDisable */\
0, /* FormatDisable */\
0, /* WriteDisable */\
0, /* ReadDisable */\
0x0, /* Reserved */\
\
0x00 /* Reserved */\
}\
}
#define __GdefaultParaPage __GdefaultParaPages[__GbCurLun]
static const __MODE_PAGE __GdefaultParaPages[__MAXLUN+1] =
{
__DEFAULT_DEV_PAGE
#if __MAXLUN > 0
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 1
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 2
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 3
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 4
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 5
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 6
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 7
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 8
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 9
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 10
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 11
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 12
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 13
,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 14
,__DEFAULT_DEV_PAGE
#endif
};
/*
* 可变的模式参数的掩码。在这个掩码里,可变的模式参数字段将全部设置为1位,以及不可变的模式参数字段
* 将全部设置为0位。
*/
static const __MODE_PARAMETER_HEAD __GparaHeadMask =
{
__PARAMETER_LIST_LENGTH - 1, /* mode data length (exclude */
/* the number of bytes in the */
/* MODE DATA LENGTH field. */
0, /* medium type */
0, /* device spec Param */
0 /* block Descriptor length */
};
static const __MODE_RBC_DEVICE_PARAMETERS_PAGE __GparaPageMask =
{
__MODE_PAGE_RBC_DEVICE_PARAMETERS, /* Page Code */
0, /* Reserved */
0, /* PageSavable */
0x00, /* PageLength */
0, /* WriteCacheDisable */
00, /* Reserved */
{ /* Logical block Size = */
0x00, /* 512 Bytes */
0x00
},
{ /* Number of logical blocks */
0x00,
0x00,
0x00,
0x00,
0x00
},
0x00, /* Power/Peformance */
0, /* LockDisable */
0, /* FormatDisable */
0, /* WriteDisable */
0, /* ReadDisable */
0x0, /* Reserved */
0x00 /* Reserved */
};
#define __DEFAULT_VPD_SERIAL_PAGE \
{\
__RBC_DEVICE,\
0x00,\
\
__VPDPAGE_SERIAL_NUMBER,\
\
0x00,\
\
24, /* size of SerialNumber */\
\
{ /* SerialNumber */\
'0',0,\
'0',0,\
'0',0,\
'0',0,\
\
'0',0,\
'0',0,\
'0',0,\
'0',0,\
\
'0',0,\
'0',0,\
'0',0,\
'0',0\
}\
}
#define __GserialPage __GserialPages[__GbCurLun]
static const __VPD_SERIAL_PAGE __GserialPages[__MAXLUN+1] =
{
__DEFAULT_VPD_SERIAL_PAGE
#if __MAXLUN > 0
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 1
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 2
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 3
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 4
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 5
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 6
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 7
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 8
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 9
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -