📄 rbc.c
字号:
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 11
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 12
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 13
,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 14
,__DEFAULT_VPD_SERIAL_PAGE
#endif
};
#define __DEFAULT_VPD_DEVICE_ID_PAGE \
{\
__RBC_DEVICE,\
0x00,\
\
__VPDPAGE_DEVICE_IDENTITY,\
\
0x00,\
\
sizeof(__ASCII_ID_DESCRIPTOR), /* 36 */\
{\
0x02,\
0x00,\
\
0x01,\
0x00,\
0x00,\
\
0x00,\
\
sizeof(__ASCII_ID_STRING), /* 32 */\
\
{ /* ASCII_ID_STRING */\
'P','h','i','l',\
'i','p','s',' ',\
'S','u','p','e',\
'r',' ','D','i',\
's','k',' '\
}\
}\
}
#define __GdeviceIDPage __GdeviceIDPages[__GbCurLun]
static const __VPD_DEVICE_ID_PAGE __GdeviceIDPages[__MAXLUN+1] =
{
__DEFAULT_VPD_DEVICE_ID_PAGE
#if __MAXLUN > 0
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 1
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 2
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 3
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 4
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 5
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 6
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 7
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 8
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 9
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 10
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 11
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 12
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 13
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
#if __MAXLUN > 14
,__DEFAULT_VPD_DEVICE_ID_PAGE
#endif
};
#define __DEFAULT_STD_INQUIRYDATA \
{\
0x00, /* DEVICE TYPE: 5; */\
/* direct-access device */\
0, /* INT8 Reserved0 : 3; */\
\
0, /* INT8 Reserved1 : 7; */\
1, /* INT8 RemovableMedia : 1; */\
\
2, /* INT8 Version; */\
\
2, /* INT8 Reserved3 : 5; */\
0, /* INT8 NormACA : 1; */\
0, /* INT8 Obsolete0 : 1; */\
0, /* INT8 AERC : 1; */\
\
{\
0x1F,0,0 /* INT8 Reserved4[3]; */\
},\
\
0, /* INT8 SoftReset : 1; */\
0, /* INT8 CommandQueue : 1; */\
0, /* INT8 Reserved5 : 1; */\
0, /* INT8 LinkedCommands : 1; */\
0, /* INT8 Synchronous : 1; */\
0, /* INT8 Wide16Bit : 1; */\
0, /* INT8 Wide32Bit : 1; */\
0, /* INT8 RelativeAddressing : 1;*/\
\
/* INT8 VendorId[8]; */\
{\
'Z','L','G','-',\
'M','C','U',' '\
},\
\
/* INT8 ProductId[16]; */\
{\
'U','S','B','-',\
'M','a','s','s',\
' ','S','t','o',\
'r','a','g','e'\
},\
\
/* \
* INT8 ProductRevisionLevel[4];\
*/\
{\
'0','.','0','0'\
},\
\
/* \
* Above is 36 bytes can be tranmitted by Bulk\
*/\
\
/*\
* INT8 VendorSpecific[20]; out[64 bytes] within one packet only.\
*/\
{\
0, 0, 0, 0,\
0, 0, 0, 0,\
0, 0, 0, 0,\
0, 0, 0, 0,\
0, 0, 0, 0\
},\
\
\
0, /* INT8 InfoUnitSupport : 1; */\
0, /* INT8 QuickArbitSupport : 1; */\
0, /* INT8 Clocking : 2; */\
0, /* INT8 Reserved1 : 4; */\
0, /* INT8 Reserved2 ; */\
\
/*\
* USHORT VersionDescriptor[8] ;\
*/\
{\
0, 0, 0, 0,\
0, 0, 0, 0\
},\
\
{ /* INT8 Reserved3[22]; */\
0, 0, 0, 0,\
0, 0, 0, 0,\
0, 0, 0, 0,\
0, 0, 0, 0,\
0, 0, 0, 0,\
0, 0\
}\
}
#define __GinquiryData __GinquiryDatas[__GbCurLun]
static const __STD_INQUIRYDATA __GinquiryDatas[__MAXLUN+1] =
{
__DEFAULT_STD_INQUIRYDATA
#if __MAXLUN > 0
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 1
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 2
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 3
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 4
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 5
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 6
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 7
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 8
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 9
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 10
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 11
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 12
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 13
,__DEFAULT_STD_INQUIRYDATA
#endif
#if __MAXLUN > 14
,__DEFAULT_STD_INQUIRYDATA
#endif
};
/*********************************************************************************************************
** Function name: __rbcHandler
**
** Descriptions: 处理RBC命令
**
** input parameters: 无
** output parameters: 无
** Returned value: ucRetStatus
**
*********************************************************************************************************/
__uint8 __rbcHandler (void)
{
#define __cdbGeneric __RBC_CDB
__uint8 ucRetStatus = __MASS_FAIL;
switch (__RBC_OPCODE){
/*
* required command
*/
case __RBC_CMD_READ10: /* 0x28 */
ucRetStatus = __rbcRead();
break;
case __RBC_CMD_READCAPACITY: /* 0x25 */
ucRetStatus = __rbcReadCapacity();
break;
#if 0
case __RBC_CMD_STARTSTOPUNIT: /* 0x1b */
ucRetStatus = __rbcOnOffUnit();
break;
case __RBC_CMD_SYNCCACHE: /* 0x35 */
ucRetStatus = __rbcSyncCache();
break;
#endif
case __RBC_CMD_VERIFY10: /* 0x2f */
ucRetStatus = __rbcVerify();
break;
case __RBC_CMD_WRITE10: /* 0x2a */
ucRetStatus = __rbcWrite();
break;
case __SPC_CMD_INQUIRY: /* 0x12 */
ucRetStatus = __spcInquiry();
break;
#if 0
case __SPC_CMD_MODESELECT6: /* 0x15 */
ucRetStatus = __spcModeSelect();
break;
#endif
case __SPC_CMD_MODESENSE6: /* 0x1A */
ucRetStatus = __spcModeSense();
break;
case __SPC_CMD_PRVENTALLOWMEDIUMREMOVAL: /* 0x1E */
ucRetStatus = __spcLockMedia();
break;
case __SPC_CMD_TESTUNITREADY: /* 0x00 */
ucRetStatus = __spcTestUnit();
break;
case __SPC_CMD_REQUESTSENSE: /* 0x03 */
ucRetStatus = __spcRequestSense();
break;
/*
* optional commands
*/
case __SPC_CMD_READLONG:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -