亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mass_bulktrance.c

?? ARM讀寫U盤驅(qū)動(dòng)軟件包源程序
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                     graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name:
** 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"

uint8 BulkGetCSWStatus(transfer_instance *Bulk_tr_In_Ptr,  uint8 *CBW_BuffPtr);
void BulkCBWSet(	uint8 *CBW_BuffPtr,
					uint32 DataTransferLength,
					uint8 CBWFlags, 
					uint8 bCBW_LUN,
					uint8 CBWCBLength,
					uint8 *RBC_BuffPtr);
uint8 BulkCommand_handle(	MassStorageClass *MSC_ptr,
								uint8		*CBW_BuffPtr,
								uint8		*Data_BuffPtr,
								uint8		Tr_Direction,
								uint16		*transfer_size);



unsigned char MassStorageReset(device_instance * DevicePtr)
{
	unsigned char None 		=0;
	USB_Device_Request		req;		
	unsigned short			err;

	req.bmRequestType		= 0x21;				
	req.bRequest			= 0xff;
	req.wValue				= 0;
	req.wIndex				= 0;
	req.wLength			= 0;
	err = control_transfer( &req, DevicePtr, &None );		
	return 	(err ? FALSE : TRUE);
}


unsigned char GetMaxLUN(device_instance * DevicePtr)
{
	unsigned char MaxLUN	 =0;
	USB_Device_Request	req;						
	req.bmRequestType	= 0xa1;					
	req.bRequest			= 0xfe;
	req.wValue			= 0;
	req.wIndex			= 0;
	req.wLength			= 1;
	if ( control_transfer( &req, DevicePtr, &MaxLUN ) )		
		return 	( 0xff );
	return 	(MaxLUN);
}


uint8 ResetRecovery(device_instance * dvi_ptr)
{
	endpoint_info *epi_ptr;
	if(FALSE == MassStorageReset(dvi_ptr))			
		return FALSE;
	epi_ptr = find_endport_type(dvi_ptr, Ep_TransferType_Bulk, Ep_Direction_IN_ENDPOINT, 1);
	if(FALSE == ClearEndpointSTALL( dvi_ptr,  epi_ptr))	
		return FALSE;
	epi_ptr = find_endport_type(dvi_ptr, Ep_TransferType_Bulk, Ep_Direction_OUT_ENDPOINT, 1);		
	if(FALSE == ClearEndpointSTALL( dvi_ptr,  epi_ptr))	
		return FALSE;
	return TRUE;
}





uint8 BulkOnlyComHandle(TR_With_RBC *tr_with_rbc_ptr)
{
	uint8		CSWStatus;

	BulkCBWSet(	tr_with_rbc_ptr->MSC->CBW_BuffPtr,
				tr_with_rbc_ptr->DataTransferLength,
				tr_with_rbc_ptr->TrDirection,
				tr_with_rbc_ptr->LUN,
				tr_with_rbc_ptr->CBLength,
				tr_with_rbc_ptr->MSC->RBC_BuffPtr
				);
	CSWStatus = BulkCommand_handle( tr_with_rbc_ptr->MSC,
									  tr_with_rbc_ptr->MSC->CBW_BuffPtr, 
									  tr_with_rbc_ptr->Data_BuffPtr, 
									  tr_with_rbc_ptr->TrDirection, 
									  &tr_with_rbc_ptr->DataTransferLength);

	if( CSWStatus == FALSE )
		return PERSISTENT_FAILURE;


	CSWStatus = BulkGetCSWStatus(	tr_with_rbc_ptr->MSC->tr_bulk_in_ptr, 
									tr_with_rbc_ptr->MSC->CBW_BuffPtr);


	if(CSWStatus == COMMAND_PASSED)
		return COMMAND_PASSED;

	if((CSWStatus == 0xff)||(CSWStatus == PHASE_ERROR))
	{	
		if( FALSE == ResetRecovery(tr_with_rbc_ptr->MSC->dvi_ptr))
			return PERSISTENT_FAILURE;			
		
		return PHASE_ERROR;
	}

	if(CSWStatus == COMMAND_FAILED)
		return COMMAND_FAILED;
		
	return PERSISTENT_FAILURE;
}



uint8 BulkCommand_handle(	MassStorageClass *MSC_ptr,
								uint8		*CBW_BuffPtr,
								uint8		*Data_BuffPtr,
								uint8		Tr_Direction,
								uint16		*transfer_size)
{
	uint8			Completion_Code;
	uint16			CBW_size;
	device_instance 	*dvi_ptr;
	endpoint_info 		*epi_ptr;


	CBW_size = 31;				
	Completion_Code = bulk_transaction( DirectionPID_OUT, CBW_BuffPtr, &CBW_size, MSC_ptr->tr_bulk_out_ptr);
	if(Completion_Code)
		return FALSE;			
	if(Tr_Direction == IN_DATA)
		Completion_Code = bulk_transaction(DirectionPID_IN,Data_BuffPtr, transfer_size, MSC_ptr->tr_bulk_in_ptr);
	if(Tr_Direction ==OUT_DATA)
		Completion_Code = bulk_transaction(DirectionPID_OUT,Data_BuffPtr, transfer_size, MSC_ptr->tr_bulk_out_ptr);
	if(Completion_Code)
	{
		if(Completion_Code == 0x04)		
		{
			if(Tr_Direction == IN_DATA)	
			{
				epi_ptr = MSC_ptr->tr_bulk_in_ptr->epi_ptr;			
				dvi_ptr = MSC_ptr->dvi_ptr;	
				return ClearEndpointSTALL( dvi_ptr, epi_ptr);
			}

			if(Tr_Direction ==OUT_DATA)	
			{
				epi_ptr = MSC_ptr->tr_bulk_out_ptr->epi_ptr;			
				dvi_ptr = MSC_ptr->dvi_ptr;	
				return ClearEndpointSTALL( dvi_ptr, epi_ptr);
			}
		}
		if(Completion_Code == 0x09)	
			return TRUE;			
	}
	return TRUE;					
}


uint8 BulkGetCSWStatus(transfer_instance *Bulk_tr_In_Ptr,  uint8 *CBW_BuffPtr)
{
	#define CSW_LENGTH		13
	COMMAND_STATUS_WRAPPER	CSWB;
	uint8	CSWStatus;
	uint16	transfer_size = CSW_LENGTH;
	uint32	dCSWDataResidue;
	uint32	dCBW_DataXferLen;
	COMMAND_BLOCK_WRAPPER *CBW_ptr;

	CBW_ptr = (COMMAND_BLOCK_WRAPPER *) CBW_BuffPtr;
	CSWStatus = bulk_transaction(DirectionPID_IN, (uint8 *)&CSWB, 
							     &transfer_size,  Bulk_tr_In_Ptr);
	
	if(CSWStatus==NULL)
	{
		
		if(transfer_size == CSW_LENGTH)
			if((CSWB.dCSW_Signature_0==0x55)&&
				(CSWB.dCSW_Signature_1==0x53)&&
				(CSWB.dCSW_Signature_2==0x42)&&
				(CSWB.dCSW_Signature_3==0x53)&&
				(CSWB.dCSW_Tag == CBW_ptr->dCBW_Tag))
			{	
				if(CSWB.bCSW_Status==PHASE_ERROR)
					return (PHASE_ERROR);
				if(CSWB.bCSW_Status < PHASE_ERROR)
				{
					dCSWDataResidue = CSWB.dCSW_DataResidue_0+
									   CSWB.dCSW_DataResidue_1*0x100+
									   CSWB.dCSW_DataResidue_2*0x10000+
									   CSWB.dCSW_DataResidue_3*0x1000000;
					dCBW_DataXferLen =  CBW_ptr->dCBW_DataXferLen_0+
									     CBW_ptr->dCBW_DataXferLen_1*0x100+
									     CBW_ptr->dCBW_DataXferLen_2*0x10000+
									     CBW_ptr->dCBW_DataXferLen_3*0x1000000;
					if(dCSWDataResidue <= dCBW_DataXferLen)
						return CSWB.bCSW_Status;
				}	
				
			}
	}
	return (0xff);
}
	

void BulkCBWSet(	uint8 *CBW_BuffPtr,
					uint32 DataTransferLength,
					uint8 CBWFlags, 
					uint8 bCBW_LUN,
					uint8 CBWCBLength,
					uint8 *RBC_BuffPtr)
{
	COMMAND_BLOCK_WRAPPER *CBW_ptr;
	uint8 *RBC_in_CBW_ptr;
	CBW_ptr = (COMMAND_BLOCK_WRAPPER *) CBW_BuffPtr;
	
	CBW_ptr->dCBW_Tag ++;
	CBW_ptr->dCBW_DataXferLen_0 = (uint8)DataTransferLength;
	CBW_ptr->dCBW_DataXferLen_1 = (uint8)(DataTransferLength/0x100);
	CBW_ptr->dCBW_DataXferLen_2 = (uint8)(DataTransferLength/0x10000);
	CBW_ptr->dCBW_DataXferLen_3 = (uint8)(DataTransferLength/0x1000000);
	CBW_ptr->bCBW_Flag = (CBWFlags == OUT_DATA)? 0x00 :0x80 ;
	CBW_ptr->bCBW_LUN = bCBW_LUN;
	CBW_ptr->bCBW_CDBLength = CBWCBLength;

	RBC_in_CBW_ptr = &CBW_ptr->bCBW_CDBLength +1;
	memset(RBC_in_CBW_ptr,0,16);
	memcpy( RBC_in_CBW_ptr , RBC_BuffPtr, CBWCBLength );
}




?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美黄色影院| 粉嫩av亚洲一区二区图片| 在线观看一区二区精品视频| 国产精品久久久久久久岛一牛影视 | 国产精品第13页| a4yy欧美一区二区三区| 综合自拍亚洲综合图不卡区| 91麻豆自制传媒国产之光| 亚洲在线成人精品| 欧美一卡二卡三卡| 国内精品自线一区二区三区视频| 精品美女被调教视频大全网站| 日韩电影在线一区二区三区| 日韩一二三区视频| 国产精品亚洲第一区在线暖暖韩国 | 精品国精品自拍自在线| 国产综合成人久久大片91| 国产精品无人区| 91国偷自产一区二区三区成为亚洲经典 | 麻豆成人av在线| 中文字幕免费不卡| 欧美在线高清视频| 美女爽到高潮91| 国产精品午夜久久| 欧美视频在线一区| 国产美女精品人人做人人爽| 亚洲欧美福利一区二区| 69堂精品视频| av电影天堂一区二区在线观看| 亚洲午夜视频在线| 国产亚洲欧美色| 欧美日韩成人综合| 丁香啪啪综合成人亚洲小说 | 欧美在线观看禁18| 国产一二三精品| 亚洲国产va精品久久久不卡综合| 欧美xxxx老人做受| 色诱视频网站一区| 国产乱码精品1区2区3区| 亚洲一二三专区| 中文成人av在线| 欧美福利一区二区| 92精品国产成人观看免费| 美女一区二区三区| 亚洲一区二区三区国产| 国产日韩亚洲欧美综合| 欧美乱妇20p| 色综合久久中文字幕| 国模冰冰炮一区二区| 婷婷综合在线观看| 亚洲人成网站影音先锋播放| 精品伦理精品一区| 欧美年轻男男videosbes| 99精品欧美一区| 国产电影一区在线| 久久爱www久久做| 亚洲国产成人tv| 亚洲精品自拍动漫在线| 国产精品色哟哟网站| 亚洲国产wwwccc36天堂| 亚洲欧美日本在线| 国产精品久久久久一区| 精品女同一区二区| 欧美老肥妇做.爰bbww视频| 99久久er热在这里只有精品66| 国产在线观看一区二区| 全国精品久久少妇| 日日骚欧美日韩| 亚洲第一福利视频在线| 一区二区三区四区在线免费观看| 亚洲国产高清在线观看视频| 国产夜色精品一区二区av| 日韩一级完整毛片| 欧美一区二区不卡视频| 欧美一级日韩免费不卡| 日韩一区二区高清| 日韩欧美中文字幕制服| 日韩精品最新网址| 精品播放一区二区| 久久综合久久综合久久| 久久久久免费观看| 国产三级精品三级在线专区| 国产欧美日韩亚州综合| 日本一区二区免费在线| 国产精品视频免费| 亚洲免费观看高清完整版在线| 最好看的中文字幕久久| 一区二区三区毛片| 亚洲高清一区二区三区| 日韩电影一二三区| 另类的小说在线视频另类成人小视频在线 | 亚洲国产人成综合网站| 亚洲福利视频一区| 石原莉奈在线亚洲二区| 蜜桃精品在线观看| 国产精品一区二区视频| 成人激情综合网站| 欧洲国内综合视频| 91麻豆精品国产综合久久久久久| 日韩精品在线一区二区| 国产亚洲一区二区三区在线观看 | 国产欧美日韩亚州综合| 亚洲欧洲精品天堂一级| 亚洲五月六月丁香激情| 日韩精品乱码av一区二区| 精品在线免费观看| a在线欧美一区| 欧美日韩国产综合草草| 日韩三级电影网址| 国产精品欧美综合在线| 亚洲图片一区二区| 久久99日本精品| 99视频精品全部免费在线| 欧美日韩一区二区三区四区五区| 日韩一区二区精品在线观看| 亚洲国产精品99久久久久久久久| 亚洲精品视频在线| 日韩av在线发布| 成人99免费视频| 91精品中文字幕一区二区三区| 久久精品男人天堂av| 亚洲制服欧美中文字幕中文字幕| 毛片av一区二区| 99麻豆久久久国产精品免费优播| 欧美精品日韩精品| 中文字幕免费在线观看视频一区| 天堂久久一区二区三区| 成人永久免费视频| 51精品国自产在线| 日韩美女精品在线| 精品一区二区三区在线观看| 色屁屁一区二区| 久久久综合视频| 亚洲国产精品久久久久秋霞影院 | 手机精品视频在线观看| 成人午夜视频在线| 日韩精品专区在线| 亚洲电影在线播放| av亚洲精华国产精华精| 欧美xfplay| 丝袜美腿亚洲一区| 日本精品视频一区二区| 国产欧美视频在线观看| 男女激情视频一区| 欧美性感一类影片在线播放| 中文字幕巨乱亚洲| 国产一区二区三区四| 欧美一区二区精品在线| 亚洲第一精品在线| 色狠狠一区二区三区香蕉| 国产午夜一区二区三区| 蜜臀av在线播放一区二区三区 | 在线观看亚洲一区| 综合自拍亚洲综合图不卡区| 国产成人亚洲综合a∨猫咪| 日韩一本二本av| 日韩精品乱码免费| 国产精品久久久久久户外露出| 精品一区二区三区蜜桃| 欧美一卡2卡三卡4卡5免费| 一区二区三区高清| 91同城在线观看| 中文字幕在线播放不卡一区| 国产福利一区二区| 久久久久久免费网| 国产在线视频一区二区三区| 日韩精品中文字幕在线一区| 日本成人中文字幕在线视频| 欧美日韩国产色站一区二区三区| 亚洲精品高清视频在线观看| 色综合天天性综合| 亚洲视频一区二区免费在线观看| 国产91清纯白嫩初高中在线观看| 久久综合成人精品亚洲另类欧美 | 激情深爱一区二区| 精品久久国产老人久久综合| 精品一区二区三区影院在线午夜 | 国产精品1024| 中文字幕乱码亚洲精品一区| 成人99免费视频| 亚洲欧美日韩国产另类专区| 色综合天天综合网国产成人综合天 | 91精品国产综合久久久久久久| 亚洲国产成人tv| 日韩视频在线你懂得| 久久99精品久久只有精品| 26uuu国产日韩综合| 国产iv一区二区三区| 日韩一区有码在线| 欧美日韩一本到| 麻豆国产精品一区二区三区 | 综合激情成人伊人| 欧美综合色免费| 日韩黄色免费电影| 久久久久久久久久久久久久久99| 成人午夜视频网站| 亚洲综合在线电影| 欧美mv日韩mv国产| av不卡免费电影| 婷婷久久综合九色综合伊人色|