📄 scsicbwprocess.c
字号:
#ifndef _SCSI_DEFINE
#include "SCSI.c"
#endif
void SCSICBWProcess(void)
{
//验证CBW有效性
if (USBEP1Buffer.InLength!=0x1f) return; //31字节
if (SCSICBW->dSignature!=0x55534243) return; //包标记 USBC
//验证CBW有意义
if (SCSICBW->bLUN>SCSI_MAX_LUN) return; //错误的LUN
if (SCSICBW->bCBLength>0x10) return; //CBWCB长度错误
switch (SCSICBW->CBWCB[0])
{
case SCSI_CMD_INQUIRY :
SCSIInquiry();
USBEP2WritePacket();
SCSICSWProcess(SCSI_CSW_PASSED,0);
break;
case SCSI_CMD_READ10 :
SCSIRead10();
SCSICSWProcess(SCSI_CSW_PASSED,0);
break;
case SCSI_CMD_WRITE10 :
SCSIWrite10();
SCSICSWProcess(SCSI_CSW_PASSED,0);
break;
case SCSI_CMD_READ_LONG :
SCSIReadLong();
USBEP2WritePacket();
SCSICSWProcess(SCSI_CSW_PASSED,SCSICBW->dDataLength - USBEP1Buffer.OutLength);
break;
case SCSI_CMD_READ_CAPACITY :
// printf("request CAPACITY\n");
SCSIReadCapacity();
USBEP2WritePacket();
SCSICSWProcess(SCSI_CSW_PASSED,0);
break;
case SCSI_CMD_TEST_UNIT_READY :
SCSICSWProcess(SCSI_CSW_PASSED,0);
break;
case SCSI_CMD_REQUEST_SENSE :
printf("request sense\n");
SCSIRequestSense();
break;
case SCSI_CMD_MODE_SENSE6 :
SCSIModeSense6();
USBEP2WritePacket();
// UEPNUM=0x02;
// USB_SEND_STALL_PACKET;
SCSICSWProcess(SCSI_CSW_PASSED,0xbc);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -