📄 mass_cbitrance.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: PORT_CTL.c
** Last modified Date: 2005-04-22
** Last Version: V1.0
** Description:
**
**------------------------------------------------------------------------------------------------------
** Created By: Lishan Zhou
** Created date: 2005-04-22
** Version: V1.0
** Description:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include "HostStack.h"
const uint8 Command_Block_Rest[12] = { 0x1d,0x04,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff };
uint8 CBI_CommandBlockReset(MassStorageClass * MSC_ptr)
{
TR_With_RBC tr_with_rbc_ptr;
endpoint_info * epi_ptr;
tr_with_rbc_ptr.DataTransferLength = 0;
tr_with_rbc_ptr.MSC = MSC_ptr;
tr_with_rbc_ptr.RBC_BuffPtr = (uint8 *)Command_Block_Rest;
tr_with_rbc_ptr.TrDirection = NONE_DATA;
epi_ptr = MSC_ptr->tr_bulk_in_ptr->epi_ptr;
if(ClearEndpointSTALL(MSC_ptr->dvi_ptr, epi_ptr) == FALSE)
return FALSE;
epi_ptr = MSC_ptr->tr_bulk_in_ptr->epi_ptr;
if(ClearEndpointSTALL(MSC_ptr->dvi_ptr, epi_ptr) == FALSE)
return FALSE;
if(COMMAND_PASSED == CBIOnlyComHandle( &tr_with_rbc_ptr ));
{
return TRUE;
}
return FALSE;
}
const USB_Device_Request COMMAND_REQ = {0x21,0x00,0x0000,0x0000,0x000c};
uint8 CBIOnlyComHandle( TR_With_RBC *tr_with_rbc_ptr)
{
USB_Device_Request command_req;
device_instance * dvi_ptr;
uint8 Status[2];
uint16 tr_size;
uint16 ComCode;
dvi_ptr = tr_with_rbc_ptr->MSC->dvi_ptr;
if(dvi_ptr==NULL)
return PERSISTENT_FAILURE;
command_req.bmRequestType = 0x21;
command_req.bRequest = 0x00;
command_req.wValue = 0x0000;
command_req.wIndex = 0x0000;
command_req.wLength = 0x000c;
ComCode = control_transfer( &command_req, dvi_ptr, tr_with_rbc_ptr->RBC_BuffPtr);
if((ComCode & 0xf) == CompletionCode_Stall)
return COMMAND_FAILED;
if(ComCode)
return PERSISTENT_FAILURE;
if(tr_with_rbc_ptr->TrDirection== IN_DATA)
{
ComCode = bulk_transaction( DirectionPID_IN,
tr_with_rbc_ptr->Data_BuffPtr,
&tr_with_rbc_ptr->DataTransferLength,
tr_with_rbc_ptr->MSC->tr_bulk_in_ptr);
if( (ComCode & 0xf) == CompletionCode_Stall)
{ if(FALSE == ClearEndpointSTALL( dvi_ptr,
tr_with_rbc_ptr->MSC->tr_bulk_in_ptr->epi_ptr))
return PERSISTENT_FAILURE;
}
}
if(tr_with_rbc_ptr->TrDirection == OUT_DATA)
{
ComCode = bulk_transaction( DirectionPID_OUT,
tr_with_rbc_ptr->Data_BuffPtr,
&tr_with_rbc_ptr->DataTransferLength,
tr_with_rbc_ptr->MSC->tr_bulk_out_ptr);
if( (ComCode & 0xf) == CompletionCode_Stall)
{ if(FALSE == ClearEndpointSTALL( dvi_ptr,
tr_with_rbc_ptr->MSC->tr_bulk_out_ptr->epi_ptr))
return PERSISTENT_FAILURE;
}
}
tr_size = 2;
ComCode = interrupt_transaction( IN_DATA, Status, &tr_size,
tr_with_rbc_ptr->MSC->tr_int_in_ptr);
if(ComCode)
return PERSISTENT_FAILURE;
if( 0 == Status[0] )
return Status[1];
else
return COMMAND_FAILED;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -