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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mass_bulk.c

?? zlg/fs源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define  MASS_BULK_GLOBALS

#include "config.h"

INT8U Test_UnitReady(hMedLUN *medium_ptr);

//********************************************************************************
//函數名稱:Creat_Medium
//輸入參數:dvi_ptr,大容量設備的設備描述信息結構指針
//				   LUNIndex,邏輯單元索引,0為第1個邏輯單元
//輸出參數:邏輯單元存在,返回邏輯單元描述符指針
//				   邏輯單元不存在,返回一個容指針
//功能描述:建立(獲取)大容量設備的一個媒介(邏輯單元)描述符。
//********************************************************************************
hMedLUN *Create_Medium(device_instance *dvi_ptr ,INT8U LUNIndex)
{

	hMedLUN *medium_ptr;
	MassStorageClass *mass_ptr;
	SENSE_DATA SenseData;
	INT8U i;
	INT8U Statue;
	mass_ptr = &MSCDevices[0];

	for (i=0; i<MAX_MASS_LUN; i++) {
		mass_ptr->LUN_info_ptr[i] = &MSCDeviceLUNs[i];
		mass_ptr->LUN_info_ptr[i]->MSC = mass_ptr;
	}
	
	(dvi_ptr->class_instance_ptr) = mass_ptr;
	mass_ptr->LUN = 0;
	mass_ptr->dvi_ptr = dvi_ptr;
	mass_ptr->ProtocolCode = dvi_ptr->interfacef_descriptor.bInterfaceProtocol;
	mass_ptr->SubclassCode = dvi_ptr->interfacef_descriptor.bInterfaceSubClass;
	
	if (mass_ptr->ProtocolCode != 0x50) {
		return NULL;
	}
/*
	if (BulkOnlyGet_MassInfo(mass_ptr) == NULL) {
		return NULL;
	}

	USB_Delay(10);
*/

	Statue = Test_UnitReady(mass_ptr->LUN_info_ptr[0]);
	if (Statue == COMMAND_FAILED) {
		return NULL;
	}
	
	Statue = Get_RequestSense(mass_ptr->LUN_info_ptr[0], &SenseData);
	if (Statue == COMMAND_FAILED) {
		return NULL;
	}
	Statue = Get_ThisMediumCapacity(mass_ptr->LUN_info_ptr[0]);
	if (Statue == COMMAND_FAILED) {
		return NULL;
	}
	
	if( (mass_ptr->LUN_info_ptr[LUNIndex]->LastLogicalBlookAddress==0) 
	    && ( mass_ptr->LUN_info_ptr[LUNIndex]->BlockLengthInBytes==0))
	{
		medium_ptr = mass_ptr->LUN_info_ptr[LUNIndex];
		
		for( i=0; i<3; i++ )
		{
			Statue = Get_ThisMediumCapacity(medium_ptr);	
			if (Statue == COMMAND_PASSED) {
				return medium_ptr;
			}
		}
	}
	
	return NULL;
}

//********************************************************************************
//函數名稱:Creat_Medium
//輸入參數:hMedLUNPtr,邏輯單元描述符指針
//			LUNIndex,邏輯單元索引,0為第1個邏輯單元
//輸出參數:無
//功能描述:關閉邏輯單元
//********************************************************************************

void Close_Medium(hMedLUN *medium_ptr, INT8U LUNIndex)
{
	if (medium_ptr == NULL) {
		return ;
	}

	if (medium_ptr->MSC == NULL) {
		return;
	}

	if (medium_ptr->MSC->LUN < LUNIndex) {
		return;
	}

	medium_ptr->LastLogicalBlookAddress = 0;
	medium_ptr->BlockLengthInBytes = 0;
}


//******************************************************************************************
// 函數名稱:MassStorageReset
// 輸入參數:DevicePtr,設備描述信息結構指針
// 輸出參數:TRUE,正常完成
// 		   FALSE,出錯
// 功能描述:大容量設備復位請求。
//******************************************************************************************
INT8U Reset_MassStorage(device_instance *dvi_ptr)
{
	USB_Device_Request req;
	INT16U err;
	INT8U none;
	req.bmRequestType = 0x21;
	req.bRequest = 0xff;
	req.wValue = 0;
	req.wIndex = 0;
	req.wLength = 0;
	err = Control_Transfer(&req, dvi_ptr, &none);
	return (err ? FALSE:TRUE);
}

//******************************************************************************************
// 函數名稱:GetMaxLUN
// 輸入參數:DevicePtr,設備描述信息結構指針
// 輸出參數:返回最大邏輯單元數,返回值為0表示只有1個邏輯單元存在。
//		   出錯返回去0xff.
// 功能描述:獲取設備的邏輯單元總數請求。
//******************************************************************************************
INT8U Get_MaxLUN(device_instance *dvi_ptr)
{
	INT8U MaxLUN = 0;
	USB_Device_Request req;
	INT16U err;
	req.bmRequestType = 0xa1;
	req.bRequest = 0xfe;
	req.wValue = 0;
	req.wIndex = 0;
	req.wLength = 1;
	err = Control_Transfer(&req, dvi_ptr, &MaxLUN);
	if (err) {
		return (0);									//有些邋MassStorage設備不支持該命令
	}
	else {
		return (MaxLUN);
	}
}


//************************************************************************************
// 函數名稱:BulkGetCSWStatus
// 輸入參數:Bulk_tr_In_Ptr,批量輸入傳輸描述符
//				    CBW_BuffPtr,命令塊包緩沖區指針
// 輸出參數:正常返回命令狀態:0、1、2
//				    出錯返回0xff;
// 功能描述:獲取命令狀態包
//************************************************************************************
INT16U Get_CSWStatus(hMedLUN *medium_ptr)
{
	COMMAND_STATUS_WRAPPER	CSWB;
	COMMAND_BLOCK_WRAPPER *CBW_ptr;
	INT16U err;
	
	INT8U	CSWStatus;
	INT32U	dCSWDataResidue;
	INT32U	dCBW_DataXferLen;


	return 0;
	
	err =Bulk_Transfer(DirectionPID_IN, (INT8U *)&CSWB, 13,  medium_ptr->MSC->dvi_ptr);
	if (err) {
		return err;
	}

	if (!
		(  	
			(CSWB.dCSW_Signature_0==0x55)
		   &&(CSWB.dCSW_Signature_1==0x53)
		   &&(CSWB.dCSW_Signature_2==0x42)
		   &&(CSWB.dCSW_Signature_3==0x53)
		 )
	   ) { 
		return 0xff;
	}

	if (CSWB.bCSW_Status != COMMAND_PASSED) {
		return 0xff;
	}

	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 0xff;
	}

	return 0;
}


//******************************************************************************************
//函數名稱:GetThisInquiryData
//輸入參數:hMedLUNPtr,邏輯單元描述符指針
//		  DataBuff_ptr,查詢數據存放的結構指針
//輸出參數:COMMAND_PASSED,命令完成
//		  COMMAND_FAILED,命令失敗
//		  PHASE_ERROR,相位出錯
//   		  PERSISTENT_FAILURE,嚴重出錯
//功能描述:查詢媒介信息,如廠商信息、產品信息及產品版本號。
//******************************************************************************************
INT8U	Get_ThisInquiryData(hMedLUN * medium_ptr )
{
	INT8U		InquiryDataBuf[36];
	INQUIRY_COMMAND *inquiry_ptr;
	COMMAND_BLOCK_WRAPPER *CBW_ptr;
	INQUIRY_COMMAND *CBWCB_ptr;
	INT16U err;
	
	if (medium_ptr->MSC == NULL) {
		return PERSISTENT_FAILURE;
	}

	CBW_ptr = (COMMAND_BLOCK_WRAPPER *)(medium_ptr->MSC->CBW_Buff);
	CBW_ptr->dCBW_Tag++;
	CBW_ptr->dCBW_DataXferLen_0 = 36;
	CBW_ptr->dCBW_DataXferLen_1 = 0;
	CBW_ptr->dCBW_DataXferLen_2 = 0;
	CBW_ptr->dCBW_DataXferLen_3 = 0;
	CBW_ptr->bCBW_Flag = CBW_IN_DATA;
	CBW_ptr->bCBW_LUN = medium_ptr->LUN;
	CBW_ptr->bCBW_CDBLength = 12;

	CBWCB_ptr = (INQUIRY_COMMAND *)CBW_ptr->CBWCB;
	memset((INT8U *)CBWCB_ptr, 0x00, 16);
	CBWCB_ptr->OperationCode = UFI_INQUIRY;
	CBWCB_ptr->AllocationLength = 0x24;
	

	USB_Delay(200);
	err = Bulk_Transfer(DirectionPID_OUT, (INT8U *)CBW_ptr, 31, medium_ptr->MSC->dvi_ptr);
	if(err) {
		goto FAILURE;
	}
	USB_Delay(50);
	err = Bulk_Transfer(DirectionPID_IN, InquiryDataBuf, 36, medium_ptr->MSC->dvi_ptr);
	if(err) {
		goto FAILURE;
	}
	
	err = Get_CSWStatus(medium_ptr);
	if (err) {
		goto FAILURE;
	}
	
	memcpy(medium_ptr->VendorInfo, &InquiryDataBuf[8], 8);
	memcpy(medium_ptr->ProductInfo, &InquiryDataBuf[16], 16);
	memcpy(medium_ptr->ProductRev, &InquiryDataBuf[32], 4);
	
	return COMMAND_PASSED;

FAILURE:
	memset(medium_ptr->VendorInfo,0,8) ;	
	memset(medium_ptr->ProductInfo,0,16) ;	
	memset(medium_ptr->ProductRev,0,4) ;	
	return COMMAND_FAILED;
}

//*****************************************************************************
//功能描述:GetThisMediumCapacity
//輸入參數:hMedLUNPtr
//輸出參數:COMMAND_PASSED,命令完成
//				    COMMAND_FAILED,命令失敗
//				    PHASE_ERROR,相位出錯
//   				    PERSISTENT_FAILURE,嚴重出錯
//功能描述:獲取媒介的容量,塊字節數及最后塊地址.
//****************************************************************************
INT8U	Get_ThisMediumCapacity(hMedLUN * medium_ptr)
{

	INT8U		CapacityDataBuf[8];
	INQUIRY_COMMAND *inquiry_ptr;
	COMMAND_BLOCK_WRAPPER *CBW_ptr;
	READ_CAPACITY *CBWCB_ptr;
	INT16U err;
	
	if (medium_ptr->MSC == NULL) {
		return PERSISTENT_FAILURE;
	}

	CBW_ptr = (COMMAND_BLOCK_WRAPPER *)(medium_ptr->MSC->CBW_Buff);
	CBW_ptr->dCBW_Tag++;
	CBW_ptr->dCBW_DataXferLen_0 = 8;
	CBW_ptr->dCBW_DataXferLen_1 = 0;
	CBW_ptr->dCBW_DataXferLen_2 = 0;
	CBW_ptr->dCBW_DataXferLen_3 = 0;
	CBW_ptr->bCBW_Flag = CBW_IN_DATA;
	CBW_ptr->bCBW_LUN = medium_ptr->LUN;
	CBW_ptr->bCBW_CDBLength = 10;

	CBWCB_ptr = (READ_CAPACITY *)CBW_ptr->CBWCB;
	memset((INT8U *)CBWCB_ptr, 0x00, 16);
	CBWCB_ptr->OperationCode = UFI_READCAPACITY;
	
	err = Bulk_Transfer(DirectionPID_OUT, (INT8U *)CBW_ptr, 31, medium_ptr->MSC->dvi_ptr);
	if(err) {
		goto FAILURE;
	}
	
	USB_Delay(10);
	err = Bulk_Transfer(DirectionPID_IN, CapacityDataBuf, 8, medium_ptr->MSC->dvi_ptr);
	if(err) {
		goto FAILURE;
	}

	err = Get_CSWStatus(medium_ptr);
	if (err) {
		goto FAILURE;
	}


	medium_ptr->BlockLengthInBytes 			// 媒介塊長度(字節數)
			= 	CapacityDataBuf[7] + 
				CapacityDataBuf[6]*0x100 + 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色一级视频| xfplay精品久久| 日韩精品一区二区三区中文不卡| 国产亚洲综合在线| 视频一区欧美精品| 91在线丨porny丨国产| 精品999在线播放| 日韩在线观看一区二区| 91黄色激情网站| 欧美韩日一区二区三区| 久久66热偷产精品| 欧美日韩mp4| 亚洲一区二区三区四区在线观看| 国产激情91久久精品导航| 日韩欧美国产综合一区| 日韩高清中文字幕一区| 欧美亚洲高清一区二区三区不卡| 中文字幕亚洲成人| 国产精品一二三| 久久午夜羞羞影院免费观看| 欧美aa在线视频| 9191精品国产综合久久久久久 | 久久久久久99久久久精品网站| 亚洲图片自拍偷拍| 在线观看不卡一区| 亚洲一区二区三区爽爽爽爽爽| 91啪亚洲精品| 亚洲一区免费在线观看| 欧洲色大大久久| 亚洲综合在线视频| 欧美在线综合视频| 亚洲高清不卡在线观看| 欧美日产在线观看| 日本视频一区二区三区| 日韩亚洲欧美中文三级| 狠狠色狠狠色合久久伊人| 欧美videos大乳护士334| 激情综合五月婷婷| 国产午夜精品福利| 成人av电影在线网| 一区二区在线观看视频| 在线观看网站黄不卡| 国产成人久久精品77777最新版本| 奇米色777欧美一区二区| 欧美精品日韩精品| 久久丁香综合五月国产三级网站| 欧美成人福利视频| 国产69精品久久777的优势| 一区二区中文字幕在线| 色婷婷av一区| 日本视频免费一区| 精品福利一区二区三区 | 精品日韩在线观看| 粉嫩av一区二区三区粉嫩 | 久久久九九九九| 成人高清视频在线| 亚洲午夜日本在线观看| 日韩一区二区三区观看| 成人精品视频一区二区三区 | 欧美日韩不卡视频| 国产在线视频一区二区| 亚洲免费在线视频一区 二区| 欧美三级中文字| 国产麻豆午夜三级精品| 亚洲视频中文字幕| 欧美大片一区二区| 99久久婷婷国产| 蜜臀av在线播放一区二区三区| 精品国产污污免费网站入口 | 欧美国产一区视频在线观看| 色美美综合视频| 精品一区二区三区欧美| 亚洲视频一区在线| 久久久久久久久久久电影| 欧美日韩在线综合| 丰满少妇在线播放bd日韩电影| 香蕉久久夜色精品国产使用方法| 日本一二三不卡| 91精品蜜臀在线一区尤物| 99精品视频在线观看| 韩国女主播成人在线| 亚洲成人一区在线| 国产精品久久久久久久久快鸭| 91精品国产综合久久精品麻豆| 成人97人人超碰人人99| 国内精品国产三级国产a久久| 一区二区三区产品免费精品久久75| 精品av综合导航| 欧美一区二区三区在线观看| 色天天综合色天天久久| 粉嫩高潮美女一区二区三区 | 视频一区二区国产| 国产精品久久久久久妇女6080 | 欧美一区午夜精品| 欧美性色欧美a在线播放| 粉嫩蜜臀av国产精品网站| 久99久精品视频免费观看| 亚洲va韩国va欧美va精品| 亚洲欧美视频在线观看| 国产精品视频九色porn| 国产亲近乱来精品视频| 久久美女艺术照精彩视频福利播放| 欧美高清视频一二三区 | 欧美96一区二区免费视频| 亚洲一区av在线| 亚洲精品日韩专区silk| 亚洲精品久久7777| 亚洲色图.com| 中文字幕在线不卡| 亚洲色图都市小说| 一区二区理论电影在线观看| 一区二区激情小说| 亚洲国产中文字幕| 日韩高清不卡一区二区三区| 天天综合天天做天天综合| 亚洲成人动漫在线免费观看| 亚洲午夜国产一区99re久久| 午夜精品影院在线观看| 日本免费在线视频不卡一不卡二| 午夜激情一区二区三区| 视频一区在线播放| 麻豆一区二区在线| 国产精品1区2区3区在线观看| 国产毛片一区二区| www.欧美精品一二区| 色美美综合视频| 欧美精品tushy高清| 久久综合给合久久狠狠狠97色69| 国产日韩成人精品| 一区二区日韩电影| 日本最新不卡在线| 国产成人夜色高潮福利影视| 99v久久综合狠狠综合久久| 在线观看成人免费视频| 欧美一区二区三区视频免费| 久久久久国产精品免费免费搜索| 国产精品女人毛片| 亚洲国产一区二区三区| 老汉av免费一区二区三区| 国产馆精品极品| 91国产视频在线观看| 日韩欧美中文字幕精品| 欧美国产精品v| 午夜亚洲福利老司机| 经典三级视频一区| 色婷婷av一区二区三区之一色屋| 欧美二区三区91| 国产精品丝袜在线| 丝袜脚交一区二区| 成人美女在线观看| 日韩一区二区三区视频在线| 国产精品国产精品国产专区不蜜 | 国产精品美女一区二区三区 | 中文字幕日韩精品一区| 日韩在线卡一卡二| 9色porny自拍视频一区二区| 555www色欧美视频| 成人欧美一区二区三区白人 | 久久久久久久久一| 亚洲第一搞黄网站| 成人av网站免费观看| 日韩一二三四区| 亚洲一区二区三区国产| 成人激情动漫在线观看| 欧美一级二级三级蜜桃| 亚洲乱码国产乱码精品精小说 | 精品亚洲免费视频| 欧美三级电影一区| 国产精品毛片久久久久久久| 蜜桃av一区二区三区电影| 色综合天天性综合| 久久精品免视看| 激情五月婷婷综合网| 精品视频一区二区三区免费| 国产精品高潮呻吟久久| 国产自产高清不卡| 精品少妇一区二区三区在线播放| 亚洲精品日韩专区silk| 不卡一卡二卡三乱码免费网站| 欧美一级高清片| 日本vs亚洲vs韩国一区三区 | 欧美猛男男办公室激情| 中文字幕在线观看不卡视频| 国产福利精品一区| 亚洲精品一区二区三区福利| 视频一区视频二区中文| 欧美乱妇23p| 亚洲成年人影院| 欧美午夜视频网站| 亚洲国产欧美日韩另类综合| 色天使久久综合网天天| 1区2区3区欧美| 不卡av电影在线播放| 国产精品视频一二三| 成人性生交大片免费看视频在线| 欧美精品一区二区蜜臀亚洲| 久久99精品久久久久| 久久精品一区二区三区不卡牛牛| 精品一区二区三区免费| 国产亚洲视频系列|