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

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

?? mass_storage.c

?? 君正早期ucos系統(tǒng)(只有早期的才不沒有打包成庫),MPLAYER,文件系統(tǒng),圖片解碼,瀏覽,電子書,錄音,想學ucos,識貨的人就下吧 russblock fmradio explore set
?? C
?? 第 1 頁 / 共 3 頁
字號:
		break;	default:		pBus->StartTransfer(handle,pipe[0].ep, (unsigned char *)&confDesc, sizeof(confDesc));		break;	}}static inline void get_dev_qualify_descitptor(unsigned int handle,USB_DeviceRequest *dreq){    PUDC_BUS pBus = (PUDC_BUS)handle;    pBus->StartTransfer(handle,pipe[0].ep, (unsigned char *)&devQualifyDesc, sizeof(devQualifyDesc));	}static inline unsigned int usbHandleClassDevReq(unsigned int handle,unsigned char *buf){	u8 scsiLUN = 0;	PUDC_BUS pBus = (PUDC_BUS)handle;	switch (buf[1]) {	case 0xfe:		scsiLUN = curLunCount - 1;		dprintf("Get max lun %d %x\n",scsiLUN,handle,pipe[0].ep);		if (buf[0] == 0xa1)			pBus->StartTransfer(handle,pipe[0].ep, (unsigned char *)&scsiLUN, 1);		break;	case 0xff:		dprintf("Mass storage reset\n");		break;	}	return 1;	}static inline void get_dev_descriptor_string(unsigned int handle,USB_DeviceRequest *dreq){	int size = dreq->wLength;	PUDC_BUS pBus = (PUDC_BUS)handle;	static u16 str_ret[] = {		0x0336,    //0x1a=26 byte		'F',		'i',		'l',		'e',		'-',		'b',		'a',		'c',		'k',		'e',		'd',		'S',		't',		'o',		'r',		'a',		'g',		'e',		'G',		'a',		'd',		'g',		'e',		't'	};	static u16 str_lang[] = {		0x0304,		0x0409	};	static u16 str_isernum[] = {		0x031a,		'3',		'2',		'3',		'8',		'2',		'0',		'4',		'7',		'4',		'0',		'7',		'7'	};	printf("send_dev_desc_string size = %d type %d \r\n",size,dreq->wValue & 0xff);	switch ( dreq->wValue & 0xff )	{	case 0:       //land ids		if ( size > sizeof(str_lang) )			pBus->StartTransfer(handle,pipe[0].ep,(unsigned char *)str_lang,sizeof(str_lang));		else			pBus->StartTransfer(handle,pipe[0].ep,(unsigned char *)str_lang,size);		return;		break;	case 1:       //iserialnumber		if(size >= sizeof(str_isernum))			size = sizeof(str_isernum);		pBus->StartTransfer(handle,pipe[0].ep,(unsigned char *)str_isernum,size);		break;	case 2:       //iproduct		if(size >= 36)			size = 36;		str_ret[0] = (0x0300 | size);		pBus->StartTransfer(handle,pipe[0].ep,(unsigned char *)str_ret,size);		break;	case 3:       //iserialnumber		if(size >= sizeof(str_isernum))			size = sizeof(str_isernum);		pBus->StartTransfer(handle,pipe[0].ep,(unsigned char *)str_isernum,size);		break;	case 0xee:    //microsoft OS!		str_isernum[0] = (0x0300 | size);		pBus->StartTransfer(handle,pipe[0].ep,(unsigned char *)str_isernum,size);		break;	}}static unsigned int udc_setup_handle(unsigned int handle,unsigned int stat,unsigned char *bufaddr,unsigned int len){	PUDC_BUS pBus = (PUDC_BUS)handle;	USB_DeviceRequest *dreq = (USB_DeviceRequest *)bufaddr;	if(len != 8)		return 0;	if(dreq->bmRequestType == 0xa1)	{		if(dreq->bRequest == 0xfe)		{			return usbHandleClassDevReq(handle,bufaddr);					}		return;					}	if(dreq->bmRequestType == 0x21)	{		if(dreq->bRequest == 0xff)		{			return usbHandleClassDevReq(handle,bufaddr);		}			}		switch (dreq->bRequest) {	case GET_DESCRIPTOR:		if (dreq->bmRequestType == 0x80)	/* Dev2Host */			switch(dreq->wValue >> 8) 			{			case DEVICE_DESCRIPTOR:				dprintf("get device!\n");				get_dev_descriptor(handle,dreq);				break;			case CONFIGURATION_DESCRIPTOR:				dprintf("get config!\n");				get_dev_configuration(handle,dreq);				break;			case STRING_DESCRIPTOR:				dprintf("get string!\n");				get_dev_descriptor_string(handle,dreq);				break;			case DEVICE_QUALIFIER_DESCRIPTOR:				dprintf("get qualify!\n");				get_dev_qualify_descitptor(handle,dreq);				break;							}				break;	case SET_ADDRESS:		dprintf("\nSET_ADDRESS!");		pBus->SetAddress(handle,dreq->wValue);		break;			case GET_STATUS:		switch (dreq->bmRequestType) {		case 80:	/* device */		  mass_get_state = 0x1;			pBus->StartTransfer(handle,pipe[0].ep,(u8*)&mass_get_state,2);						break;		case 81:	/* interface */		case 82:	/* ep */			mass_get_state = 0;			pBus->StartTransfer(handle,pipe[0].ep,(u8*)&mass_get_state,2);						break;		}		break;   	case CLEAR_FEATURE:		printf("CLEAR_FEATURE!\r\n");		break;			case SET_CONFIGURATION:		printf("SET_CONFIGURATION!\r\n");//		pBus->StartTransfer(handle,pipe[0].ep,massbuf,0);					break;			case SET_INTERFACE:		printf("SET_INTERFACE!\r\n");		break;	case SET_FEATURE:		printf("SET_FEATURE!\r\n");		break;	default:	        printf("protal isn't surporst\r\n");			}	return 1;}static unsigned int handle_receive_data(unsigned handle,unsigned char *buf,unsigned int len){	PUDC_LUN pdev = pDev[cbw.bCBWLUN]; 	PUDC_BUS pBus = (PUDC_BUS)handle;	unsigned int ret;	unsigned int sectors = len / g_sector_size;   //	ret = pdev->WriteDevSector((unsigned int)pdev,buf,g_start_sector,sectors);#ifndef MUTI_THREAD	ret = pdev->WriteDevSector((unsigned int)pdev,buf,g_start_sector,sectors);#else	if ( udc_trigger == 1 )	{		udc_trigger = 0;		OSSemPost(sem_buf1);	}	else 	{		udc_trigger = 1;		OSSemPost(sem_buf0);	}		OSSemPend(sem_device, 0, &err);    //lock device!	ssector = g_start_sector;	nsector = sectors;	OSSemPost(sem_mass);                //wake mass task#endif	g_start_sector += sectors;	g_nr_sectors -= sectors;	if(g_nr_sectors)	{		sectors = g_nr_sectors * g_sector_size;#ifdef MUTI_THREAD		if ( udc_trigger == 1 )		{			massbuf = (unsigned char *)((unsigned int)massBuf1 | 0xa0000000);			OSSemPend(sem_buf1, 0, &err);		}		else 		{			massbuf = (unsigned char *)((unsigned int)massBuf0 | 0xa0000000);			OSSemPend(sem_buf0, 0, &err);		}#endif		if(sectors > UDC_FRAME_SIZE)			pBus->StartTransfer(handle,pipe[2].ep,massbuf_ptr,UDC_FRAME_SIZE);		else			pBus->StartTransfer(handle,pipe[2].ep,massbuf_ptr,sectors);			}else	{		mass_state = SENDED_CSW;		//send csw data		Handle_CSW(handle);					}	return ret;}static unsigned int handle_receive(unsigned handle,unsigned char *buf,unsigned int len){	//printf("mass_state = %d,RECEIVE_CBW = %d\n",mass_state,RECEIVE_CBW);		if(mass_state == RECEIVE_CBW)	{		return USB_HandleCBW(handle);			}	if(mass_state == RECEIVE_DATA) 	{		return handle_receive_data(handle,buf,len);	}		return 1;}static unsigned int handle_send_data(unsigned handle,unsigned char *buf,unsigned int len){	PUDC_LUN pdev = pDev[cbw.bCBWLUN]; 	PUDC_BUS pBus = (PUDC_BUS)handle;	unsigned short sectors = UDC_FRAME_SIZE / g_sector_size;	if(g_nr_sectors)	{				if(sectors > g_nr_sectors)			sectors = g_nr_sectors;						pdev->ReadDevSector((unsigned int)pdev,massbuf_ptr,g_start_sector,sectors);		pBus->StartTransfer(handle,pipe[1].ep, (unsigned char *)massbuf_ptr,							sectors * g_sector_size);		g_start_sector += sectors;			g_nr_sectors -= sectors;		}else	{		mass_state = SENDED_CSW;		//send csw data		Handle_CSW(handle);				}		return 1;}static unsigned int handle_send(unsigned handle,unsigned char *buf,unsigned int len){	PUDC_BUS pBus = (PUDC_BUS)handle;	if(mass_state == SEND_DATA)	{		return handle_send_data(handle,buf,len);			}	if(mass_state == SENDING_CSW)	{		mass_state = SENDED_CSW;		Handle_CSW(handle);			}		if(mass_state == SENDED_CSW)	{		mass_state = RECEIVE_CBW;		pBus->StartTransfer(handle,pipe[2].ep,(unsigned char *)&cbw,sizeof(cbw));	}		return 1;}static unsigned int notify(unsigned int handle,unsigned int stat,unsigned char *bufaddr,unsigned int len){//	printf("Bus notify stat :%x \n",stat);		if((stat < 0x200) && (stat >=0x100))	   return mass_detect(handle,stat);	if(stat == UDC_RESET)		return mass_reset(handle);	if(stat == UDC_SUSPEND)		return mass_suspend(handle);	if((stat >= UDC_FULLSPEED) && (stat <= UDC_HIGHSPEED))		return set_udc_speed(stat);	if(stat == UDC_SETUP_PKG_FINISH)		return udc_setup_handle(handle,stat,bufaddr,len);	if(stat == UDC_PROTAL_RECEIVE_FINISH)		return handle_receive(handle,bufaddr,len);	if(stat == UDC_PROTAL_SEND_FINISH)		return handle_send(handle,bufaddr,len);	return 0;}#ifdef MUTI_THREADstatic void mass_task(void *arg){	PUDC_LUN pdev ; //	MASS_ARGS *p ;	u8 *Massbuf;	u8 err;	while (1) {		OSSemPend(sem_mass, 0, &err);		pdev = pDev[cbw.bCBWLUN]; 		if ( mass_trigger == 0)		{			Massbuf = (unsigned char *)((unsigned int)massBuf0 | 0xa0000000);			OSSemPend(sem_buf0, 0, &err);			pdev->WriteDevSector((unsigned int)pdev,Massbuf,ssector,nsector);			mass_trigger = 1;			OSSemPost(sem_buf0);		}		else		{			Massbuf = (unsigned char *)((unsigned int)massBuf1 | 0xa0000000);			OSSemPend(sem_buf1, 0, &err);			pdev->WriteDevSector((unsigned int)pdev,Massbuf,ssector,nsector);			mass_trigger = 0;			OSSemPost(sem_buf1);		}		OSSemPost(sem_device);	}	}#endifstatic unsigned char FInitThread = 0;static void init_thread(){	if(FInitThread == 0)	{		#ifdef MUTI_THREAD		udc_mass_alloc();		sem_buf0 = OSSemCreate(1);		sem_buf1 = OSSemCreate(1);		sem_mass = OSSemCreate(0);		sem_device = OSSemCreate(1);		    		OSTaskCreate(mass_task, (void *)0,			     (void *)&MassTaskStack[MASS_TASK_STK_SIZE - 1],			     MASS_TASK_PRIO);		#else    udc_mass_alloc();    #endif	}	FInitThread = 1;	}static void deinit_thread(){	if(FInitThread)	{		#ifdef MUTI_THREAD		unsigned char err;		OSTaskDel(MASS_TASK_PRIO);		OSSemDel(sem_buf0,OS_DEL_ALWAYS,&err);		sem_buf0 = NULL;		OSSemDel(sem_buf1,OS_DEL_ALWAYS,&err);		sem_buf1 = NULL;		OSSemDel(sem_mass,OS_DEL_ALWAYS,&err);		sem_mass = NULL;		OSSemDel(sem_device,OS_DEL_ALWAYS,&err);		sem_device = NULL;		udc_mass_free();		#else		udc_mass_free();		#endif			}	FInitThread = 0;}static unsigned char InitMassStorage = 0;void init_mass_storage(){	if(InitMassStorage == 0)	{		CreateDevice(notify);	}	InitMassStorage = 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区在线观看| 91精品国模一区二区三区| 欧美日韩在线三区| 欧美精品一区二区精品网| 日韩伦理电影网| 国内外成人在线| 欧美日韩日日骚| 中文字幕一区二区三| 美女任你摸久久| 欧美亚洲一区二区在线| 中文字幕在线观看不卡视频| 狂野欧美性猛交blacked| 欧美丝袜第三区| 亚洲色图色小说| 成人免费福利片| 欧美极品xxx| 国产麻豆精品在线| 久久亚洲精品小早川怜子| 日韩制服丝袜av| 欧美日韩高清一区二区| 一区二区理论电影在线观看| 成人午夜视频在线| 久久在线观看免费| 国产一区二区三区黄视频| 日韩免费观看高清完整版| 奇米综合一区二区三区精品视频| 欧美影视一区二区三区| 一区二区三区视频在线看| 91香蕉视频在线| 亚洲三级在线免费| 日本韩国欧美在线| 亚洲伊人伊色伊影伊综合网| 91在线精品秘密一区二区| 国产精品日日摸夜夜摸av| 国产成人8x视频一区二区| 久久久国产精品麻豆| 久久99精品久久久久婷婷| 欧美电视剧在线观看完整版| 麻豆免费精品视频| 久久综合一区二区| 成人网在线免费视频| 中文字幕第一页久久| 成人毛片老司机大片| 亚洲精品高清在线| 欧美日韩专区在线| 日本v片在线高清不卡在线观看| 欧美一区二视频| 精久久久久久久久久久| 久久亚洲欧美国产精品乐播 | 99久久婷婷国产精品综合| 亚洲国产精品二十页| 91蜜桃传媒精品久久久一区二区| 亚洲精品久久7777| 欧美日韩午夜在线| 精东粉嫩av免费一区二区三区| 久久影院午夜片一区| 成人av在线播放网站| 亚洲大片精品永久免费| 精品处破学生在线二十三| 99综合影院在线| 日本视频中文字幕一区二区三区| 精品国产一区二区精华| av动漫一区二区| 日韩精品一区第一页| 久久麻豆一区二区| 欧美曰成人黄网| 伦理电影国产精品| 国产精品乱人伦中文| 欧美精品亚洲一区二区在线播放| 国内精品伊人久久久久av一坑 | 欧美大片一区二区| 成人精品电影在线观看| 五月天国产精品| 国产视频一区二区在线| 欧美性大战久久久久久久蜜臀| 极品少妇一区二区三区精品视频| 亚洲欧美自拍偷拍色图| 日韩欧美视频在线| 91在线国内视频| 国产剧情一区在线| 偷拍日韩校园综合在线| 国产精品久久久久三级| 日韩一区二区免费高清| 91污片在线观看| 国产综合色在线视频区| 亚洲第一主播视频| 国产精品日产欧美久久久久| 日韩欧美精品在线视频| 在线视频你懂得一区二区三区| 国产精品一区二区不卡| 亚洲香蕉伊在人在线观| 国产精品久久久久久亚洲毛片| www国产成人| 欧美一级二级在线观看| 色欧美88888久久久久久影院| 国产麻豆精品95视频| 蜜桃传媒麻豆第一区在线观看| 亚洲免费观看高清在线观看| 国产精品区一区二区三| xf在线a精品一区二区视频网站| 91麻豆精品国产自产在线| 在线视频欧美精品| 色激情天天射综合网| 97久久精品人人做人人爽50路| 国产伦精品一区二区三区免费迷 | 在线免费不卡视频| 99热精品一区二区| 国产99精品国产| 国产91高潮流白浆在线麻豆 | 婷婷亚洲久悠悠色悠在线播放| 一区二区在线观看免费| 亚洲欧洲av一区二区三区久久| 国产欧美精品一区二区三区四区| 精品乱码亚洲一区二区不卡| 日韩一级欧美一级| 精品美女在线播放| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 成人av网在线| av在线一区二区| 色综合久久天天| 日本高清不卡视频| 欧美日精品一区视频| 欧美视频一区二区在线观看| 欧美系列日韩一区| 欧美精品三级日韩久久| 欧美一区二区三区在线观看| 欧美mv日韩mv国产| 久久久久国色av免费看影院| 国产精品美女一区二区| 自拍偷拍欧美精品| 亚洲午夜精品久久久久久久久| 亚洲va国产va欧美va观看| 日韩电影在线免费看| 麻豆成人久久精品二区三区小说| 国产一区二区视频在线| bt7086福利一区国产| 日本韩国欧美三级| 制服.丝袜.亚洲.另类.中文| 久久日韩精品一区二区五区| 国产欧美视频一区二区三区| 亚洲视频一区二区免费在线观看| 亚洲女人的天堂| 日韩精品电影一区亚洲| 国产精品12区| 91黄色免费观看| 欧美va亚洲va国产综合| 国产精品久久久久久久久晋中| 亚洲精品免费在线| 美国欧美日韩国产在线播放| 成人av片在线观看| 在线成人小视频| 国产调教视频一区| 婷婷久久综合九色综合绿巨人| 国产在线观看免费一区| 在线欧美小视频| 久久久精品tv| 天堂成人国产精品一区| 成人性视频免费网站| 欧美福利一区二区| 国产精品卡一卡二卡三| 日韩高清电影一区| 99精品热视频| 精品国产凹凸成av人网站| 一区二区三区久久| 国产成人日日夜夜| 91精品国产综合久久蜜臀| 中文在线一区二区 | av电影在线观看一区| 欧美不卡视频一区| 亚洲一区二区欧美日韩| 国产成人精品免费一区二区| 欧美精选一区二区| 日韩毛片在线免费观看| 国产成人欧美日韩在线电影| 91麻豆精品国产综合久久久久久| 亚洲欧洲另类国产综合| 国产激情91久久精品导航| 91精品婷婷国产综合久久性色| 亚洲精品菠萝久久久久久久| 国产乱妇无码大片在线观看| 欧美videos大乳护士334| 丝袜诱惑亚洲看片| 在线观看亚洲成人| 亚洲激情中文1区| 91麻豆国产自产在线观看| 国产精品青草综合久久久久99| 国产激情一区二区三区四区| 欧美成人猛片aaaaaaa| 麻豆精品在线看| 日韩美女视频一区二区在线观看| 亚洲国产日产av| 欧美日韩日日摸| 天堂精品中文字幕在线| 欧美日韩国产免费一区二区 | 一区二区国产视频| 91在线观看高清| 日韩美女视频一区| 色婷婷综合久久久久中文| 亚洲色图欧美在线| 欧美亚洲日本一区|