这篇教程C++ Bot_Abort函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中Bot_Abort函数的典型用法代码示例。如果您正苦于以下问题:C++ Bot_Abort函数的具体用法?C++ Bot_Abort怎么用?C++ Bot_Abort使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了Bot_Abort函数的22个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: Mass_Storage_Out/******************************************************************************** Function Name : Mass_Storage_Out* Description : Mass Storage OUT transfer.* Input : None.* Output : None.* Return : None.*******************************************************************************/void Mass_Storage_Out (void){ u8 CMD; CMD = CBW.CB[0]; Data_Len = GetEPRxCount(ENDP2); PMAToUserBufferCopy(Bulk_Data_Buff, ENDP2_RXADDR, Data_Len); switch (Bot_State) { case BOT_IDLE: CBW_Decode(); break; case BOT_DATA_OUT: if (CMD == SCSI_WRITE10) { SCSI_Write10_Cmd(SCSI_LBA , SCSI_BlkLen); break; } Bot_Abort(DIR_OUT); Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; default: Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; }}
开发者ID:matthiasbock,项目名称:DSOQuad_SourceCode,代码行数:37,
示例2: Mass_Storage_Out/******************************************************************************** Function Name : Mass_Storage_Out* Description : Mass Storage OUT transfer.* Input : None.* Output : None.* Return : None.*******************************************************************************/void Mass_Storage_Out (void){ uint8_t CMD; CMD = CBW.CB[0]; Data_Len = USB_SIL_Read(EP5_OUT, Bulk_Data_Buff); switch (Bot_State) { case BOT_IDLE: CBW_Decode(); break; case BOT_DATA_OUT: if (CMD == SCSI_WRITE10) { SCSI_Write10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen); break; } Bot_Abort(DIR_OUT); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; default: Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; } //az#ifndef STM32F10X_CL /* Enable the receive of data on EP3 */ SetEPRxValid(ENDP5);#endif /* STM32F10X_CL */}
开发者ID:AndrewZamansky,项目名称:uCProjects,代码行数:42,
示例3: SCSI_Address_Management/******************************************************************************** Function Name : SCSI_Address_Management* Description : Test the received address.* Input : u8 Cmd : the command can be SCSI_READ10 or SCSI_WRITE10.* Output : None.* Return : Read/Write status (bool).*******************************************************************************/bool SCSI_Address_Management(u8 Cmd , u32 LBA , u32 BlockNbr){ if ((LBA + BlockNbr) > Mass_Block_Count ) { if (Cmd == SCSI_WRITE10) { Bot_Abort(BOTH_DIR); } Bot_Abort(DIR_IN); Set_Scsi_Sense_Data(ILLEGAL_REQUEST, ADDRESS_OUT_OF_RANGE); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); return false; } if (CBW.dDataLength != BlockNbr * Mass_Block_Size) { if (Cmd == SCSI_WRITE10) { Bot_Abort(BOTH_DIR); } else { Bot_Abort(DIR_IN); } Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); return false; } return true;}
开发者ID:PetteriAimonen,项目名称:dsoquad-BIOS,代码行数:39,
示例4: Mass_Storage_Out/******************************************************************************** Function Name : Mass_Storage_Out* Description : Mass Storage OUT transfer.* Input : None.* Output : None.* Return : None.//USB->设备*******************************************************************************/void Mass_Storage_Out (void){ u8 CMD; USB_STATUS_REG|=0X10;//标记轮询 CMD = CBW.CB[0]; Data_Len = GetEPRxCount(ENDP4); PMAToUserBufferCopy(Bulk_Data_Buff, ENDP4_RXADDR, Data_Len);//printf("Bot_State_out:%d;Data_Len=%d",Bot_State,Data_Len); switch (Bot_State) { case BOT_IDLE: CBW_Decode(); break; case BOT_DATA_OUT://USB发送数据到设备 if (CMD == SCSI_WRITE10) { USB_STATUS_REG|=0X01;//标记正在写数据 SCSI_Write10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen); break; } Bot_Abort(DIR_OUT); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; default: Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; }}
开发者ID:blackmiaool,项目名称:cattyware,代码行数:40,
示例5: SCSI_Address_Management/******************************************************************************** Function Name : SCSI_Address_Management* Description : Test the received address.* Input : uint8_t Cmd : the command can be SCSI_READ10 or SCSI_WRITE10.* Output : None.* Return : Read/Write status (bool).*******************************************************************************/bool SCSI_Address_Management(uint8_t lun , uint8_t Cmd , uint32_t LBA , uint32_t BlockNbr){ if ((LBA + BlockNbr) > Mass_Block_Count[lun] ) { if (Cmd == SCSI_WRITE10) { Bot_Abort(BOTH_DIR); } Bot_Abort(DIR_IN); Set_Scsi_Sense_Data(lun, ILLEGAL_REQUEST, ADDRESS_OUT_OF_RANGE); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); return (FALSE); } if (CBW.dDataLength != BlockNbr * Mass_Block_Size[lun]) { if (Cmd == SCSI_WRITE10) { Bot_Abort(BOTH_DIR); } else { Bot_Abort(DIR_IN); } Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); return (FALSE); } return (TRUE);}
开发者ID:crystalfontz,项目名称:cfa_735_simple,代码行数:39,
示例6: Mass_Storage_Out/******************************************************************************** Function Name : Mass_Storage_Out* Description : Mass Storage OUT transfer.* Input : None.* Output : None.* Return : None.*******************************************************************************/void Mass_Storage_Out (void){ u8 CMD; CMD = CBW.CB[0]; Data_Len = USB_SIL_Read(EP2_OUT, Bulk_Data_Buff); switch (Bot_State) { case BOT_IDLE: CBW_Decode(); break; case BOT_DATA_OUT: if (CMD == SCSI_WRITE10) { SCSI_Write10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen); break; } Bot_Abort(DIR_OUT); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; default: Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE); break; }}
开发者ID:joe3501,项目名称:BlueRing,代码行数:36,
示例7: SCSI_Write10_Cmd/******************************************************************************** Function Name : SCSI_Write10_Cmd* Description : SCSI Write10 Command routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Write10_Cmd(u32 LBA , u32 BlockNbr){ if (Bot_State == BOT_IDLE) { if (!(SCSI_Address_Management(SCSI_WRITE10 , LBA, BlockNbr)))/*address out of range*/ { return; } if ((CBW.bmFlags & 0x80) == 0) { Bot_State = BOT_DATA_OUT; SetEPRxStatus(ENDP2, EP_RX_VALID); } else { Bot_Abort(DIR_IN); Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); } return; } else if (Bot_State == BOT_DATA_OUT) { Write_Memory(LBA , BlockNbr); }}
开发者ID:PetteriAimonen,项目名称:dsoquad-BIOS,代码行数:35,
示例8: SCSI_Write10_Cmd/******************************************************************************** Function Name : SCSI_Write10_Cmd* Description : SCSI Write10 Command routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Write10_Cmd(uint8_t lun , uint32_t LBA , uint32_t BlockNbr){ if (Bot_State == BOT_IDLE) { if (!(SCSI_Address_Management(CBW.bLUN, SCSI_WRITE10 , LBA, BlockNbr)))/*address out of range*/ { return; } if ((CBW.bmFlags & 0x80) == 0) { Bot_State = BOT_DATA_OUT; #ifndef STM32F10X_CL SetEPRxStatus(ENDP2, EP_RX_VALID); #endif /* STM32F10X_CL */ } else { Bot_Abort(DIR_IN); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); } return; } else if (Bot_State == BOT_DATA_OUT) { Write_Memory(lun , LBA , BlockNbr); }}
开发者ID:crystalfontz,项目名称:cfa_735_simple,代码行数:37,
示例9: SCSI_Read10_Cmd/******************************************************************************** Function Name : SCSI_Read10_Cmd* Description : SCSI Read10 Command routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Read10_Cmd(uint8_t lun , uint32_t LBA , uint32_t BlockNbr){ if (Bot_State == BOT_IDLE) { if (!(SCSI_Address_Management(CBW.bLUN, SCSI_READ10, LBA, BlockNbr)))/*address out of range*/ { return; } if ((CBW.bmFlags & 0x80) != 0) { Bot_State = BOT_DATA_IN; Read_Memory(lun, LBA , BlockNbr); } else { Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE); } return; } else if (Bot_State == BOT_DATA_IN) { Read_Memory(lun , LBA , BlockNbr); }}
开发者ID:crystalfontz,项目名称:cfa_735_simple,代码行数:35,
示例10: Mass_Storage_ClearFeature/******************************************************************************** Function Name : Mass_Storage_ClearFeature* Description : Handle the ClearFeature request.* Input : None.* Output : None.* Return : None.*******************************************************************************/void Mass_Storage_ClearFeature(void){ /* when the host send a CBW with invalid signature or invalid length the two Endpoints (IN & OUT) shall stall until receiving a Mass Storage Reset */ if (CBW.dSignature != BOT_CBW_SIGNATURE) Bot_Abort(BOTH_DIR);}
开发者ID:a-c-t-i-n-i-u-m,项目名称:HY-STM32F103,代码行数:14,
示例11: Address_Management_Test/******************************************************************************** Function Name : Address_Management_Test* Description : Test the received address. * Input : u8 Cmd : the command can be SCSI_READ10 or SCSI_WRITE10.* Output : None.* Return : Read/Write status (bool).*******************************************************************************/bool Address_Management_Test(u8 Cmd){ vu32 temp1; vu32 temp2; GPIO_SetBits(GPIOB, GPIO_Pin_5); /* Logical Block Address of First Block */ temp1 = (CBW.CB[2] << 24) | (CBW.CB[3] << 16) | (CBW.CB[4] << 8) | (CBW.CB[5] << 0); /* Number of Blocks to transfer */ temp2 = (CBW.CB[7] << 8) | (CBW.CB[8] << 0); Memory_Offset = temp1 * Mass_Block_Size; Transfer_Length = temp2 * Mass_Block_Size; if ((Memory_Offset + Transfer_Length) > Mass_Memory_Size) { if (Cmd == SCSI_WRITE10) { Bot_Abort(BOTH_DIR); } Bot_Abort(DIR_IN); Set_Scsi_Sense_Data(ILLEGAL_REQUEST, ADDRESS_OUT_OF_RANGE); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); return (FALSE); } if (CBW.dDataLength != Transfer_Length) { if (Cmd == SCSI_WRITE10) { Bot_Abort(BOTH_DIR); } else { Bot_Abort(DIR_IN); } Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); return (FALSE); } return (TRUE);}
开发者ID:HamsterReserved,项目名称:STM32-NAND-Programmer,代码行数:53,
示例12: SCSI_Format_Cmd/******************************************************************************** Function Name : SCSI_Format_Cmd* Description : Format Commands routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Format_Cmd(uint8_t lun){ if (MAL_GetStatus(lun)) { Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT); Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE); Bot_Abort(DIR_IN); return; }}
开发者ID:MBARM,项目名称:MatchboxARM,代码行数:17,
示例13: SCSI_Invalid_Cmd/******************************************************************************** Function Name : SCSI_Invalid_Cmd* Description : Invalid Commands routine* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Invalid_Cmd(uint8_t lun){ if (CBW.dDataLength == 0) { Bot_Abort(DIR_IN); } else { if ((CBW.bmFlags & 0x80) != 0) { Bot_Abort(DIR_IN); } else { Bot_Abort(BOTH_DIR); } } Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);}
开发者ID:crystalfontz,项目名称:cfa_735_simple,代码行数:27,
示例14: SCSI_Valid_Cmd/******************************************************************************** Function Name : SCSI_Valid_Cmd* Description : Valid Commands routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Valid_Cmd(uint8_t lun){ if (CBW.dDataLength != 0) { Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); } else Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);}
开发者ID:crystalfontz,项目名称:cfa_735_simple,代码行数:18,
示例15: USB_APP_ClearFeature/******************************************************************************** Function Name : Mass_Storage_ClearFeature* Description : Handle the ClearFeature request.* Input : None.* Output : None.* Return : None.*******************************************************************************/void USB_APP_ClearFeature(void){#if(USB_DEVICE_CONFIG & _USE_USB_MASS_STOARGE_DEVICE) /* when the host send a CBW with invalid signature or invalid length the two Endpoints (IN & OUT) shall stall until receiving a Mass Storage Reset */ if (g_usb_type == USB_MASSSTORAGE) { if (CBW.dSignature != BOT_CBW_SIGNATURE) Bot_Abort(BOTH_DIR); }#endif}
开发者ID:joe3501,项目名称:BTPrinter,代码行数:20,
示例16: SCSI_Verify10_Cmd/******************************************************************************** Function Name : SCSI_Verify10_Cmd* Description : SCSI Verify10 Command routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Verify10_Cmd(uint8_t lun){ if ((CBW.dDataLength == 0) && !(CBW.CB[1] & BLKVFY))/* BLKVFY not set*/ { Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE); } else { Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); }}
开发者ID:crystalfontz,项目名称:cfa_735_simple,代码行数:20,
示例17: SCSI_TestUnitReady_Cmd/******************************************************************************** Function Name : SCSI_Valid_Cmd* Description : Valid Commands routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_TestUnitReady_Cmd(u8 lun){ if (MAL_GetStatus(lun)) { Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT); Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE); Bot_Abort(DIR_IN); return; } else { Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE); }}
开发者ID:chenghongyao,项目名称:gitprogram,代码行数:21,
示例18: SCSI_Format_Cmd/******************************************************************************** Function Name : SCSI_Format_Cmd* Description : Format Commands routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_Format_Cmd(uint8_t lun){ if (MAL_GetStatus(lun)) { Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT); Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE); Bot_Abort(DIR_IN); return; }#ifdef USE_STM3210E_EVAL else { NAND_Format(); Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE); }#endif}
开发者ID:crystalfontz,项目名称:cfa_735_simple,代码行数:24,
示例19: SCSI_ReadFormatCapacity_Cmd/******************************************************************************** Function Name : SCSI_ReadFormatCapacity_Cmd* Description : SCSI ReadFormatCapacity Command routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_ReadFormatCapacity_Cmd(uint8_t lun){ if (MAL_GetStatus(lun) != 0 ) { Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT); Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE); Bot_Abort(DIR_IN); return; } ReadFormatCapacity_Data[4] = (uint8_t)(Mass_Block_Count[lun] >> 24); ReadFormatCapacity_Data[5] = (uint8_t)(Mass_Block_Count[lun] >> 16); ReadFormatCapacity_Data[6] = (uint8_t)(Mass_Block_Count[lun] >> 8); ReadFormatCapacity_Data[7] = (uint8_t)(Mass_Block_Count[lun]); ReadFormatCapacity_Data[9] = (uint8_t)(Mass_Block_Size[lun] >> 16); ReadFormatCapacity_Data[10] = (uint8_t)(Mass_Block_Size[lun] >> 8); ReadFormatCapacity_Data[11] = (uint8_t)(Mass_Block_Size[lun]); Transfer_Data_Request(ReadFormatCapacity_Data, READ_FORMAT_CAPACITY_DATA_LEN);}
开发者ID:12019,项目名称:STM32F103_USB_CDC,代码行数:26,
示例20: SCSI_ReadCapacity10_Cmd/******************************************************************************** Function Name : SCSI_ReadCapacity10_Cmd* Description : SCSI ReadCapacity10 Command routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_ReadCapacity10_Cmd(u8 lun){ if (MAL_GetStatus(lun)) { Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT); Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE); Bot_Abort(DIR_IN); return; } ReadCapacity10_Data[0] = (u8)(Mass_Block_Count[lun] - 1 >> 24); ReadCapacity10_Data[1] = (u8)(Mass_Block_Count[lun] - 1 >> 16); ReadCapacity10_Data[2] = (u8)(Mass_Block_Count[lun] - 1 >> 8); ReadCapacity10_Data[3] = (u8)(Mass_Block_Count[lun] - 1); ReadCapacity10_Data[4] = (u8)(Mass_Block_Size[lun] >> 24); ReadCapacity10_Data[5] = (u8)(Mass_Block_Size[lun] >> 16); ReadCapacity10_Data[6] = (u8)(Mass_Block_Size[lun] >> 8); ReadCapacity10_Data[7] = (u8)(Mass_Block_Size[lun]); Transfer_Data_Request(ReadCapacity10_Data, READ_CAPACITY10_DATA_LEN);}
开发者ID:chenghongyao,项目名称:gitprogram,代码行数:29,
示例21: SCSI_ReadCapacity10_Cmd/******************************************************************************** Function Name : SCSI_ReadCapacity10_Cmd* Description : SCSI ReadCapacity10 Command routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void SCSI_ReadCapacity10_Cmd(uint8_t lun){ if (DRV_MSp_UpdateStatus(lun)) { Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT); Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE); Bot_Abort(DIR_IN); return; } ReadCapacity10_Data[0] = (uint8_t)((DRV_MS_MemDevice[lun].Block_Count - 1) >> 24); ReadCapacity10_Data[1] = (uint8_t)((DRV_MS_MemDevice[lun].Block_Count - 1) >> 16); ReadCapacity10_Data[2] = (uint8_t)((DRV_MS_MemDevice[lun].Block_Count - 1) >> 8); ReadCapacity10_Data[3] = (uint8_t)(DRV_MS_MemDevice[lun].Block_Count - 1); ReadCapacity10_Data[4] = (uint8_t)(DRV_MS_MemDevice[lun].Block_Size >> 24); ReadCapacity10_Data[5] = (uint8_t)(DRV_MS_MemDevice[lun].Block_Size >> 16); ReadCapacity10_Data[6] = (uint8_t)(DRV_MS_MemDevice[lun].Block_Size >> 8); ReadCapacity10_Data[7] = (uint8_t)(DRV_MS_MemDevice[lun].Block_Size); Transfer_Data_Request(ReadCapacity10_Data, READ_CAPACITY10_DATA_LEN);}
开发者ID:St0rmingBr4in,项目名称:wallig,代码行数:30,
示例22: CBW_Decode/******************************************************************************** Function Name : CBW_Decode* Description : Decode the received CBW and call the related SCSI command* routine.* Input : None.* Output : None.* Return : None.*******************************************************************************/void CBW_Decode(void){ u32 Counter; for (Counter = 0; Counter < Data_Len; Counter++) { *((u8 *)&CBW + Counter) = Bulk_Data_Buff[Counter]; } CSW.dTag = CBW.dTag; CSW.dDataResidue = CBW.dDataLength; if (Data_Len != BOT_CBW_PACKET_LENGTH) { Bot_Abort(BOTH_DIR); /* reset the CBW.dSignature to desible the clear feature until receiving a Mass storage reset*/ CBW.dSignature = 0; Set_Scsi_Sense_Data(ILLEGAL_REQUEST, PARAMETER_LIST_LENGTH_ERROR); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); return; } if ((CBW.CB[0] == SCSI_READ10 ) || (CBW.CB[0] == SCSI_WRITE10 )) { /* Calculate Logical Block Address */ SCSI_LBA = (CBW.CB[2] << 24) | (CBW.CB[3] << 16) | (CBW.CB[4] << 8) | CBW.CB[5]; /* Calculate the Number of Blocks to transfer */ SCSI_BlkLen = (CBW.CB[7] << 8) | CBW.CB[8]; } if (CBW.dSignature == BOT_CBW_SIGNATURE) { /* Valid CBW */ if ((CBW.bLUN > Max_Lun) || (CBW.bCBLength < 1) || (CBW.bCBLength > 16)) { Bot_Abort(BOTH_DIR); Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); } else { switch (CBW.CB[0]) { case SCSI_REQUEST_SENSE: SCSI_RequestSense_Cmd (); break; case SCSI_INQUIRY: SCSI_Inquiry_Cmd(); break; case SCSI_START_STOP_UNIT: SCSI_Start_Stop_Unit_Cmd(); break; case SCSI_ALLOW_MEDIUM_REMOVAL: SCSI_Start_Stop_Unit_Cmd(); break; case SCSI_MODE_SENSE6: SCSI_ModeSense6_Cmd (); break; case SCSI_MODE_SENSE10: SCSI_ModeSense10_Cmd (); break; case SCSI_READ_FORMAT_CAPACITIES: SCSI_ReadFormatCapacity_Cmd(); break; case SCSI_READ_CAPACITY10: SCSI_ReadCapacity10_Cmd(); break; case SCSI_TEST_UNIT_READY: SCSI_TestUnitReady_Cmd(); break; case SCSI_READ10: SCSI_Read10_Cmd(SCSI_LBA , SCSI_BlkLen); break; case SCSI_WRITE10: SCSI_Write10_Cmd(SCSI_LBA , SCSI_BlkLen); break; case SCSI_VERIFY10: SCSI_Verify10_Cmd(); break; case SCSI_FORMAT_UNIT: SCSI_Format_Cmd(); break; /*Unsupported command*/ case SCSI_MODE_SELECT10: SCSI_Mode_Select10_Cmd(); break; case SCSI_MODE_SELECT6: SCSI_Mode_Select6_Cmd(); break; case SCSI_SEND_DIAGNOSTIC: SCSI_Send_Diagnostic_Cmd(); break;//.........这里部分代码省略.........
开发者ID:matthiasbock,项目名称:DSOQuad_SourceCode,代码行数:101,
注:本文中的Bot_Abort函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ Bound函数代码示例 C++ BotSetTeamStatus函数代码示例 |