亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一区二区三区高清不卡| 亚洲男人的天堂在线aⅴ视频| 日韩欧美精品在线视频| 欧美高清www午色夜在线视频| 日韩精品一区二区三区视频在线观看| 国产日韩欧美精品电影三级在线| 一区二区成人在线视频| 奇米影视一区二区三区| 国产成人午夜高潮毛片| 这里只有精品视频在线观看| 久久久影视传媒| 日本aⅴ精品一区二区三区| 国产精品自在在线| 欧美疯狂性受xxxxx喷水图片| 中文字幕在线一区免费| 日本vs亚洲vs韩国一区三区二区| 国产在线一区二区综合免费视频| 欧美日韩不卡一区二区| 国产亚洲自拍一区| 久久成人免费网| 日本道免费精品一区二区三区| www激情久久| 免费在线成人网| 日本福利一区二区| 亚洲欧洲综合另类在线| 激情五月播播久久久精品| 91精品1区2区| 亚洲一区精品在线| 色先锋资源久久综合| 欧美国产日韩精品免费观看| 免费在线观看不卡| 欧美精品在线观看一区二区| 樱花草国产18久久久久| 粉嫩aⅴ一区二区三区四区五区| 欧美精品一区男女天堂| 日韩中文字幕av电影| 在线观看精品一区| 亚洲第一综合色| 在线免费观看日本一区| 国产女同互慰高潮91漫画| 狠狠色丁香久久婷婷综合丁香| 欧美嫩在线观看| 三级在线观看一区二区| 欧美日韩高清一区二区不卡 | 精品av综合导航| 天天av天天翘天天综合网 | 国产精品亚洲午夜一区二区三区| 欧美精品三级在线观看| 免费欧美日韩国产三级电影| 欧美日韩mp4| 日韩二区三区在线观看| 日韩一级片在线观看| 舔着乳尖日韩一区| 91成人网在线| 亚洲成国产人片在线观看| 一本到不卡精品视频在线观看| 亚洲免费观看视频| 欧洲一区二区三区在线| 三级不卡在线观看| 日韩欧美电影一二三| 日韩av中文在线观看| 欧美va亚洲va在线观看蝴蝶网| 免费成人在线播放| 91精品免费观看| 成人夜色视频网站在线观看| 亚洲国产精品成人综合| 欧美性受xxxx黑人xyx| 亚洲成人av一区二区| 在线免费av一区| 激情小说欧美图片| 久久久不卡影院| 色美美综合视频| 麻豆中文一区二区| 欧美r级在线观看| 国产成人鲁色资源国产91色综| 国产精品天美传媒| 91国产免费看| 国内精品伊人久久久久av一坑| 日韩视频国产视频| 成人中文字幕在线| 一级中文字幕一区二区| 欧美一级一区二区| 国产中文字幕一区| 一区二区三区在线免费播放| 日韩午夜激情电影| 成人av电影在线播放| 日本不卡中文字幕| 国产精品成人一区二区艾草| 在线观看国产日韩| 成人毛片在线观看| 亚洲成av人片在www色猫咪| 国产校园另类小说区| 欧美伊人久久久久久午夜久久久久| 精品一区二区在线观看| 亚洲乱码中文字幕| 欧美精品一区二区久久久| 欧美日韩一区高清| 国产99久久久国产精品潘金 | 国产精品久久毛片av大全日韩| 色综合久久久久网| 国产综合久久久久影院| 一区二区三区在线播| 欧美精品一区二区三区在线播放| www.亚洲国产| 国产综合久久久久影院| 蜜桃一区二区三区在线观看| 国产精品国产三级国产普通话三级 | 久久久99精品免费观看| 在线精品视频小说1| 国产精品99久久久久久宅男| 天天亚洲美女在线视频| 亚洲伦在线观看| 欧美激情在线看| 欧美三级欧美一级| 在线观看成人免费视频| 国产a精品视频| 成人av在线网| 国产成人亚洲精品青草天美| 国产一区欧美二区| 美女视频网站久久| 国产一区二区三区高清播放| 日本视频免费一区| 天堂一区二区在线| 天堂午夜影视日韩欧美一区二区| 亚洲黄色免费电影| 亚洲一区二区免费视频| 亚洲人精品午夜| 亚洲一区二区精品3399| 亚洲精品国产一区二区三区四区在线 | 久久精品72免费观看| 免费一区二区视频| 久久爱www久久做| 国产精品1区2区| 成人免费视频caoporn| 成人久久18免费网站麻豆| 成人免费av在线| 91网上在线视频| 欧美精品一卡二卡| 欧美一级国产精品| 国产拍揄自揄精品视频麻豆| 欧美成人精品1314www| 国产午夜精品一区二区三区嫩草 | 日韩av在线免费观看不卡| 亚洲国产一区二区三区青草影视| 亚洲欧美在线另类| 亚洲精品你懂的| 午夜精品久久久久久久久久久| 精品一区二区三区蜜桃| 免费观看成人av| 色综合久久综合网| 欧美视频精品在线| 久久精品一区二区| 亚洲激情av在线| 亚洲欧美激情视频在线观看一区二区三区 | 欧美电影在线免费观看| 日韩一级完整毛片| 日韩毛片视频在线看| 亚洲国产综合视频在线观看| 日韩欧美国产一二三区| 国产视频一区在线播放| 亚洲欧洲性图库| 日韩高清不卡一区二区| 美女精品一区二区| 不卡一区在线观看| 欧美午夜不卡视频| 国产午夜精品久久久久久免费视| 一区二区三区不卡在线观看 | 久久综合久色欧美综合狠狠| 欧美国产一区视频在线观看| 一区二区高清在线| 国产精品原创巨作av| 欧美欧美午夜aⅴ在线观看| 久久免费的精品国产v∧| 亚洲成人激情自拍| 国产成人精品免费视频网站| 欧美精品123区| 亚洲三级久久久| 美国十次了思思久久精品导航| www.亚洲色图| 久久一区二区三区四区| 亚洲国产裸拍裸体视频在线观看乱了| 国产一区二区导航在线播放| 欧美精品高清视频| 国产精品亲子伦对白| 极品少妇xxxx精品少妇偷拍| 91免费看片在线观看| 国产日本一区二区| 日韩在线观看一区二区| 日本欧美一区二区| 欧美日韩另类国产亚洲欧美一级| 精品久久久久久久久久久久久久久| 亚洲午夜一区二区三区| 菠萝蜜视频在线观看一区| 久久一留热品黄| 裸体健美xxxx欧美裸体表演| 欧美日韩免费电影| 一区二区三区四区中文字幕| 99久久国产免费看| 国产精品情趣视频| 91农村精品一区二区在线|