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

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

?? mass.c

?? zlg/fs源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "HostStack.h"

MassStorageClass *create_mass_class_instance( device_instance *dvi_ptr );
void				dispose_mass_class_instance( device_instance *dvi_ptr );

unsigned char MassStorageReset(device_instance * DevicePtr);
unsigned char GetMaxLUN(device_instance * DevicePtr);

unsigned char  GetThisInquiryData(hMedLUN * hMedLUNPtr);
unsigned char  GetThisMediumCapacity(hMedLUN * hMedLUNPtr);
unsigned char	GetRequestSense(hMedLUN * hMedLUNPtr, SENSE_DATA *SenseDataPtr);

hMedLUN	*GetMassBulkOnlyInfo(MassStorageClass *mass_i_ptr);
hMedLUN	*GetMassCBIOnlyInfo(MassStorageClass *mass_i_ptr);

//******************************************************************************************
// 函數名稱:mass_init_commands
// 輸入參數:dvi_ptr,設備描述信息數據結構指針
// 輸出參數:正常返回0,出錯返回非0。
// 功能描述:大容量類設備初始化函數
//******************************************************************************************
unsigned short mass_init_commands( device_instance *dvi_ptr )
{	MassStorageClass *mass_i_ptr;
	mass_i_ptr= create_mass_class_instance( dvi_ptr );
	if ( NULL == mass_i_ptr )
		return (1);
	dvi_ptr->class_instance_ptr	= mass_i_ptr;
	return ( 0 );
}


	MassStorageClass MSCDevices[MAX_MASS_DEVICES_DEFINE];
/*初始化大容量類內存 */
void ini_mass_device_mem(void)
{
	uint16	i;
	for( i=0; i<MAX_MASS_DEVICES_DEFINE ;i++)
		MSCDevices[i].dvi_ptr = NULL;
}
/* 獲取大容量類內存 */
MassStorageClass 	*malloc_mass_device_mem(void)
{
	uint16	i;
	for( i=0; i<MAX_MASS_DEVICES_DEFINE ;i++)
		if(MSCDevices[i].dvi_ptr==NULL)
		{
			MSCDevices[i].dvi_ptr = (device_instance *)(-1);
			return &MSCDevices[i];
		}
	return NULL;
}
/*釋放大容量類內存 */
void free_mass_device_mem(MassStorageClass * MSC_ptr)
{
	uint16	i;
	for( i=0; i<MAX_MASS_DEVICES_DEFINE ;i++)
		if( &MSCDevices[i] == MSC_ptr )
			MSC_ptr->dvi_ptr = NULL;
}
/******************************************************************/
/*  邏輯單元內存管理  */
//初始化大容量類設備邏輯單元描述符內存
/******************************************************************/
#define MAX_MASS_DEVICES_LUN_DEFINE 	MAX_MASS_DEVICES_DEFINE+ 3
	hMedLUN MSCDeviceLNUs[MAX_MASS_DEVICES_LUN_DEFINE];

void ini_mass_device_LUN_mem(void)
{
	uint16	i;
	for( i=0; i<MAX_MASS_DEVICES_LUN_DEFINE ;i++)
		MSCDeviceLNUs[i].MSC = NULL;
}
hMedLUN 	*malloc_mass_device_LUN_mem(void)
{
	uint16	i;
	for( i=0; i<MAX_MASS_DEVICES_LUN_DEFINE ;i++)
		if(MSCDeviceLNUs[i].MSC==NULL)
		{
			MSCDeviceLNUs[i].MSC = (MassStorageClass *)(-1);
			return &MSCDeviceLNUs[i];
		}
	return NULL;		
}

void free_mass_device_LNU_mem(hMedLUN * MSCLUN_ptr)
{
	uint16	i;
	for( i=0; i<MAX_MASS_DEVICES_LUN_DEFINE ;i++)
		if( &MSCDeviceLNUs[i] == MSCLUN_ptr)
			MSCLUN_ptr->MSC = NULL;
}
	

//************************************************************************************
// 函數名稱:create_mass_class_instance
// 輸入參數:dvi_ptr,設備描述信息數據結構指針
// 輸出參數:設描述信息結構指針
// 功能描述:建立大容量類設備實例
//************************************************************************************
MassStorageClass *create_mass_class_instance( device_instance *dvi_ptr )
{
	//	This instance will be disposed in function "dispose_device()"

	MassStorageClass			*mass_i_ptr;
	endpoint_info				*epi_ptr;
	transfer_instance			*tr_instance_ptr;

	if ( NULL == (mass_i_ptr = malloc_mass_device_mem()) )/*分配內存*/
		return NULL ;

	mass_i_ptr->LUN = 0 ;
	mass_i_ptr->dvi_ptr = dvi_ptr;				
	mass_i_ptr->setup_epi_ptr = dvi_ptr->epi_ptr[0];
	mass_i_ptr->ProtocolCode = Get_bInterfaceProtocol(dvi_ptr);
	mass_i_ptr->SubclassCode = Get_bInterfaceSubClass(dvi_ptr);
	mass_i_ptr->tr_bulk_in_ptr = NULL ;
	mass_i_ptr->tr_bulk_out_ptr = NULL ;
	mass_i_ptr->tr_int_in_ptr = NULL ;
	mass_i_ptr->CBW_BuffPtr = NULL ;
	/* 創建傳輸描述符 */
	epi_ptr = find_endport_type(dvi_ptr, Ep_TransferType_Bulk, Ep_Direction_IN_ENDPOINT, 1);
	if( epi_ptr == NULL )
		return NULL ;
	if(NO_OPEN_ATL_TRANSFER==(tr_instance_ptr=atl_open_transfer_instance( epi_ptr )))
		return NULL ;
	mass_i_ptr->tr_bulk_in_ptr = tr_instance_ptr;

	epi_ptr = find_endport_type(dvi_ptr, Ep_TransferType_Bulk, Ep_Direction_OUT_ENDPOINT, 1);
	if( epi_ptr == NULL )
		return NULL ;
	if(NO_OPEN_ATL_TRANSFER==(tr_instance_ptr=atl_open_transfer_instance( epi_ptr )))
		return NULL ;
	mass_i_ptr->tr_bulk_out_ptr = tr_instance_ptr;

	/* 保存大容量設備的接口子類及傳輸協議代碼 */ 


	
	if(mass_i_ptr->ProtocolCode  == 0x50)	/* Bulk-Only */
	{
		if(GetMassBulkOnlyInfo(mass_i_ptr) == NULL)
			return NULL;
	}
	else									/* CBI-Only */
	{
		if(GetMassCBIOnlyInfo(mass_i_ptr) == NULL)
			return NULL;
	}


	return ( mass_i_ptr );
}
//**********************************************************************************************
// 函數名稱:GetMassBulkOnlyInfo
// 輸入參數:mass_i_ptr,大容量類設備描述數據結構指針
// 輸出參數:出錯返回NULL
//				    正確返回最后一個邏輯單元描述指針
// 功能描述:獲取大容量類CBI協議設備描述信息。
//**********************************************************************************************
hMedLUN	*GetMassBulkOnlyInfo(MassStorageClass *mass_i_ptr)
{
	unsigned char  MediumIndex;
	hMedLUN		*medium_infor_ptr;
	
	mass_i_ptr->CBW_BuffPtr = malloc( sizeof( unsigned char )* 31 );	// 為CBW包分配固定內存
	if(mass_i_ptr->CBW_BuffPtr ==NULL)
		return NULL ;
	mass_i_ptr->CBW_BuffPtr[0] = 0x55;
	mass_i_ptr->CBW_BuffPtr[1] = 0x53;
	mass_i_ptr->CBW_BuffPtr[2] = 0x42;
	mass_i_ptr->CBW_BuffPtr[3] = 0x43;

//	if(FALSE ==MassStorageReset(mass_i_ptr->dvi_ptr))// 大容量設備復位
//		return NULL ;
	//mass_i_ptr->LUN = GetMaxLUN(mass_i_ptr->dvi_ptr);	//獲取媒體最大邏輯單元號
	mass_i_ptr->LUN = 0;
	for(MediumIndex = 0;mass_i_ptr->LUN +1>MediumIndex;MediumIndex++)
	{
		if ( NULL == (medium_infor_ptr= malloc_mass_device_LUN_mem()) )	/*分配內存*/
			break ;
		mass_i_ptr->LUN_infor_ptr[MediumIndex] = medium_infor_ptr;	// 保存邏輯單元描述信息數據結構指針
		medium_infor_ptr->LUN = MediumIndex;
		medium_infor_ptr->MSC = mass_i_ptr ;
		medium_infor_ptr->BlockLengthInBytes = 0;
		medium_infor_ptr->LastLogicalBlookAddress=0;
		if( GetThisInquiryData( medium_infor_ptr ) )						// 獲取產品及廠家信息
			return NULL ;
	}
	return medium_infor_ptr;
}

//**********************************************************************************************
// 函數名稱:GetMassCBIOnlyInfo
// 輸入參數:mass_i_ptr,大容量類設備描述數據結構指針
// 輸出參數:出錯返回NULL
//				    正確返回邏輯單元描述指針
// 功能描述:獲取大容量類CBI協議設備描述信息。
//**********************************************************************************************
hMedLUN	*GetMassCBIOnlyInfo(MassStorageClass *mass_i_ptr)
{
	hMedLUN			*medium_infor_ptr;
	endpoint_info		*epi_ptr;
	transfer_instance	*tr_instance_ptr;
	if( NULL == (epi_ptr = find_endport_type(mass_i_ptr->dvi_ptr, Ep_TransferType_Interrupt, Ep_Direction_IN_ENDPOINT, 1)))
		return NULL ;
	if(NO_OPEN_ATL_TRANSFER==(tr_instance_ptr=atl_open_transfer_instance( epi_ptr )))
		return NULL ;
	mass_i_ptr->tr_int_in_ptr = tr_instance_ptr;
	if ( NULL == (medium_infor_ptr = malloc_mass_device_LUN_mem()) )	/*分配內存*/
		return NULL ;
	mass_i_ptr->LUN_infor_ptr[0] = medium_infor_ptr;	// 保存邏輯單元描述信息數據結構指針
	medium_infor_ptr->LUN = 0;
	medium_infor_ptr->MSC = mass_i_ptr ;
	medium_infor_ptr->BlockLengthInBytes = 0;
	medium_infor_ptr->LastLogicalBlookAddress=0;
	if(GetThisInquiryData(medium_infor_ptr) )						// 獲取產品及廠家信息
		return NULL ;
	return medium_infor_ptr;
}


//**********************************************************************************************
// 函數名稱:dispose_mass_class_instance
// 輸入參數:dvi_ptr,設備描述信息數據結構指針
// 輸出參數:無
// 功能描述:刪除大容量設備處理。
//**********************************************************************************************
void dispose_mass_class_instance( device_instance *dvi_ptr )
{
	MassStorageClass		*mass_i_ptr;
	unsigned short			i;

	
	mass_i_ptr = (MassStorageClass *)mass_instance_ptr( dvi_ptr );
	if(mass_i_ptr==NULL)
		return;

	/* 刪除傳輸描述符 */
	if(mass_i_ptr->tr_bulk_in_ptr)
		atl_close_transfer_instance(mass_i_ptr->tr_bulk_in_ptr);
	if(mass_i_ptr->tr_bulk_out_ptr)
		atl_close_transfer_instance(mass_i_ptr->tr_bulk_out_ptr);
	if(mass_i_ptr->tr_int_in_ptr)
		atl_close_transfer_instance(mass_i_ptr->tr_int_in_ptr);
	/* 釋放命令塊占用的內存*/ 
	if(mass_i_ptr->CBW_BuffPtr)
		free(mass_i_ptr->CBW_BuffPtr);				
	/* 釋放邏輯單元描述信息數據結構 */
	for(i=0;i <= mass_i_ptr->LUN+1; i++)
		if(mass_i_ptr->LUN_infor_ptr[i])
		{
			free_mass_device_LNU_mem(mass_i_ptr->LUN_infor_ptr[i]);
			mass_i_ptr->LUN_infor_ptr[i] = NULL;
		}
	/* 釋放大容量類設備描述符 */
	if( dvi_ptr->class_instance_ptr )
		free_mass_device_mem(dvi_ptr->class_instance_ptr);
	dvi_ptr->class_instance_ptr = NULL;
}

//******************************************************************************************
// 函數名稱:mass_dispose_process
// 輸入參數:dvi_ptr,設備描述信息數據結構指針
// 輸出參數:返回0
// 功能描述:刪除大容量類設備處理函數
//******************************************************************************************
unsigned short mass_dispose_process( device_instance *dvi_ptr )
{
	dispose_mass_class_instance(dvi_ptr);
	return ( 0 );
}


//********************************************************************************
//函數名稱:Creat_Medium
//輸入參數:dvi_ptr,大容量設備的設備描述信息結構指針
//				   LUNIndex,邏輯單元索引,0為第1個邏輯單元
//輸出參數:邏輯單元存在,返回邏輯單元描述符指針
//				   邏輯單元不存在,返回一個容指針
//功能描述:建立(獲取)大容量設備的一個媒介(邏輯單元)描述符。
//********************************************************************************
hMedLUN * Creat_Medium(device_instance *dvi_ptr ,unsigned char LUNIndex)
{
	hMedLUN * hMedLUNPtr=0;
	MassStorageClass *MSC_ptr;
	unsigned char i,Statue;
	SENSE_DATA SenseData;
	
		
	MSC_ptr = mass_instance_ptr(dvi_ptr);
	if(MSC_ptr ==NULL)				/* 檢驗類描述結構指針*/
		return NULL;
	if(MSC_ptr->LUN < LUNIndex)		/* 檢驗邏輯單元索引 */
		return NULL;
	
	if( (MSC_ptr->LUN_infor_ptr[LUNIndex]->LastLogicalBlookAddress==0) 
	    && ( MSC_ptr->LUN_infor_ptr[LUNIndex]->BlockLengthInBytes==0))
	{
		hMedLUNPtr = MSC_ptr->LUN_infor_ptr[LUNIndex];
		for( i=0; i<3; i++ )
		{
			Statue = GetThisMediumCapacity(hMedLUNPtr);	
			if(Statue)
			{ 	
				
				if(Statue== COMMAND_FAILED)
				{	if(GetRequestSense(hMedLUNPtr, &SenseData))
						return NULL;
					else
					{  /* 這里分析出錯原因 */
						if((SenseData.ASC==0x34)&&(SenseData.ASCQ==0x00))
						{/* MEDIUM NOT PRESENT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人综合网站| 成人激情午夜影院| 5月丁香婷婷综合| 丝瓜av网站精品一区二区| 欧美亚洲国产一区二区三区va | 国产精品996| 国产亚洲欧美激情| 成人精品一区二区三区四区| 日韩码欧中文字| 欧美日韩一区小说| 九色综合狠狠综合久久| 欧美激情在线一区二区三区| proumb性欧美在线观看| 一区二区三区毛片| 日韩午夜中文字幕| 国产成人在线看| 一区二区在线免费观看| 337p亚洲精品色噜噜狠狠| 国产一区二区三区免费播放| 亚洲日本一区二区| 91精品国产黑色紧身裤美女| 国产福利不卡视频| 亚洲亚洲人成综合网络| 精品国产不卡一区二区三区| 成人高清视频免费观看| 婷婷一区二区三区| 欧美激情一区二区三区不卡| 在线一区二区三区| 国产一本一道久久香蕉| 一区二区三区欧美久久| 亚洲精品一区在线观看| 色94色欧美sute亚洲线路一ni | 福利电影一区二区三区| 亚洲福中文字幕伊人影院| 精品国产91久久久久久久妲己| 成人激情免费视频| 欧美bbbbb| 亚洲美腿欧美偷拍| 久久一区二区三区国产精品| 欧美综合天天夜夜久久| 国产91精品一区二区麻豆亚洲| 亚洲国产日产av| 国产精品丝袜黑色高跟| 日韩免费福利电影在线观看| 91黄视频在线| 成人精品免费看| 久久精品久久综合| 亚洲成人午夜电影| 国产精品福利一区二区三区| 日韩欧美高清一区| 欧美日韩亚洲综合| av色综合久久天堂av综合| 国内精品视频一区二区三区八戒| 亚洲国产日韩一级| 一级日本不卡的影视| 国产女人aaa级久久久级| 日韩欧美一卡二卡| 欧美乱熟臀69xxxxxx| 色欧美乱欧美15图片| 成人av电影在线| 国产黄人亚洲片| 国产主播一区二区| 狠狠色综合播放一区二区| 午夜av电影一区| 视频一区二区三区在线| 亚洲一区二区在线免费观看视频| 国产精品久久久久久久久动漫| 久久久久久久久久久久久女国产乱| 欧美一区二区三区在线观看视频 | 免费成人在线网站| 偷偷要91色婷婷| 亚洲成人福利片| 亚洲一区在线观看视频| 一区二区三区日韩精品视频| 一区二区三区欧美视频| 一区二区三区久久| 亚洲一区二区在线免费看| 一区二区三区四区蜜桃| 一区二区高清免费观看影视大全| 亚洲色欲色欲www在线观看| 国产精品电影一区二区三区| 国产精品理论在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产精品美女视频| 国产精品乱人伦一区二区| 国产精品第四页| 国产精品国产自产拍高清av王其| 中文字幕欧美区| 中文字幕一区二区三区不卡 | 亚洲欧美偷拍三级| 亚洲一区在线播放| 首页综合国产亚洲丝袜| 麻豆久久一区二区| 国内成人精品2018免费看| 国产成a人亚洲精| 91在线观看污| 欧美美女直播网站| 欧美精品一区二区三区四区 | 色综合久久久久综合| 欧美午夜一区二区三区| 日韩欧美一级特黄在线播放| 久久久综合视频| 中文字幕日韩精品一区| 亚洲一二三区在线观看| 韩日欧美一区二区三区| 成人性生交大片免费看中文 | 成人精品gif动图一区| 色综合久久66| 欧美美女黄视频| 国产亚洲制服色| 亚洲综合色自拍一区| 久久精品国产久精国产| 成人性生交大合| 欧美日韩精品二区第二页| 久久亚洲私人国产精品va媚药| 国产精品国产三级国产普通话99| 午夜精品免费在线观看| 国产精品99久久久久| 欧美日韩视频一区二区| 久久久久99精品一区| 亚洲香肠在线观看| 国产精品99久久久久久久vr| 欧美日韩一区二区三区在线| 久久久不卡网国产精品一区| 亚洲午夜激情av| 国产成人精品免费视频网站| 884aa四虎影成人精品一区| 国产欧美一区二区精品性色| 天天色综合成人网| 99久久久免费精品国产一区二区| 日韩视频在线永久播放| 亚洲免费高清视频在线| 国产乱妇无码大片在线观看| 欧美日韩不卡一区| 综合婷婷亚洲小说| 国产一区二区女| 欧美精品亚洲二区| 亚洲蜜臀av乱码久久精品蜜桃| 国产一区二区三区精品欧美日韩一区二区三区 | aa级大片欧美| 精品日韩一区二区| 亚洲国产另类av| 97超碰欧美中文字幕| 26uuuu精品一区二区| 日日噜噜夜夜狠狠视频欧美人 | www.日韩精品| 国产午夜精品一区二区三区视频 | 韩日av一区二区| 91麻豆精品国产91| 亚洲一区在线电影| 在线日韩一区二区| 亚洲欧洲性图库| 粉嫩绯色av一区二区在线观看| 日韩精品一区二区三区视频播放| 亚洲国产日韩在线一区模特| 在线观看一区二区精品视频| 一区二区中文视频| 成人免费视频视频| 亚洲国产精品v| 国产精品一区二区x88av| 日韩欧美成人一区| 五月天视频一区| 欧美三级在线视频| 亚洲一区二区视频在线| 在线欧美一区二区| 亚洲精品中文在线影院| 97精品国产露脸对白| 亚洲三级视频在线观看| 波多野结衣中文字幕一区二区三区| 精品国产91九色蝌蚪| 国产电影精品久久禁18| 久久久久久免费毛片精品| 国产一区二区三区免费看| 国产亚洲午夜高清国产拍精品| 国产精华液一区二区三区| 久久九九久久九九| 成人精品视频网站| 亚洲视频在线观看三级| 在线观看不卡一区| 亚洲不卡在线观看| 日韩一区二区在线观看| 久久99精品国产.久久久久| 久久精品水蜜桃av综合天堂| 国产成人一级电影| 国产精品欧美一级免费| 成人福利视频在线| 亚洲免费看黄网站| 欧美日韩久久久一区| 奇米精品一区二区三区在线观看 | 琪琪久久久久日韩精品| 26uuu亚洲综合色| 国产成人精品一区二| 亚洲男同性视频| 欧美精品亚洲二区| 国产成人在线色| 亚洲一区二区三区在线| 欧美一级理论片| 成人精品视频一区二区三区尤物| 亚洲精品中文字幕乱码三区| 91麻豆精品国产91久久久更新时间|