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

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

?? host_811.c

?? 基于Embest開發(fā)環(huán)境
?? C
?? 第 1 頁 / 共 3 頁
字號:
{   

	return VendorCmd(usbaddr, 0, SET_CONFIG, wVal, 0, 0, NULL);
	
}

//*****************************************************************************************
// Get Device Descriptor : Device, Configuration, String
//*****************************************************************************************
		//~~device:wIndex應(yīng)該為0,wValue應(yīng)該是0x10;
		//~~configuration:wIndex應(yīng)該為0,wValue應(yīng)該為0x20
		//~~string:wIndex應(yīng)該為與字符串有關(guān)的語言id,wValue為0x30
int GetDesc(BYTE usbaddr, WORD wValue, 	WORD wIndex, WORD wLen, BYTE *desc)
{ 
	return VendorCmd(usbaddr, 0x80, GET_DESCRIPTOR, wValue, wIndex, wLen, desc);
}

//*****************************************************************************************
// USB Device Enumeration Process
// Support 1 confguration and interface #0 and alternate setting #0 only
// Support up to 1 control endpoint + 4 data endpoint only
//*****************************************************************************************
int EnumUsbDev(BYTE usbaddr)
{  
	int i;											// always reset USB transfer address 
	BYTE  uAddr = 0;			// for enumeration to Address #0//~~獲取地址前用此地址通信
	BYTE  epLen;
	WORD  strLang;

	//------------------------------------------------
	// Reset only Slave device attached directly
	//------------------------------------------------
	uDev[0].wPayLoad[0] = 64;						// default 64-byte payload of Endpoint 0, address #0
	if(usbaddr == 1)			//~~為什么要判斷? bus reset for the device attached to SL811HS only
		USBReset();									// that will always have the USB address = 0x01 (for a hub)
    	USB_Delay(25);

	//------------------------------------------------
	// Get USB Device Descriptors on EP0 & Addr 0
	// with default 64-byte payload
	//------------------------------------------------
	pDev =(pDevDesc)DBUF;							// ask for 64 bytes on Addr #0
	if (!GetDesc(uAddr,DEVICE,0,18,DBUF))			// and determine the wPayload size
													//~~device描述符長度18,先用uaddr=0地址來通信
		return FALSE;								// get correct wPayload of Endpoint 0
	
	uDev[usbaddr].wPayLoad[0]=pDev->bMaxPacketSize0;// on current non-zero USB address

	//------------------------------------------------
	// Set Slave USB Device Address
	//------------------------------------------------
	if (!SetAddress(usbaddr)) 						// set to specific USB address
		return FALSE;								//
	uAddr = usbaddr;								// transfer using this new address

	//------------------------------------------------
	// Get USB Device Descriptors on EP0 & Addr X//~~為什么又要讀device descriptors
	//------------------------------------------------
	if (!GetDesc(uAddr,DEVICE,0,(pDev->bLength),DBUF)) 	
		return FALSE;								// For this current device:
	uDev[usbaddr].wVID 	 = pDev->idVendor;			// save VID
	uDev[usbaddr].wPID 	 = pDev->idProduct;			// save PID
	uDev[usbaddr].iMfg 	 = pDev->iManufacturer;		// save Mfg Index
	uDev[usbaddr].iPdt 	 = pDev->iProduct;			// save Product Index
   
	//------------------------------------------------
	// Get String Descriptors
	//------------------------------------------------
	pStr = (pStrDesc)DBUF;	
	if (!GetDesc(uAddr,STRING,0,4,DBUF)) 			// Get string language
		return FALSE;								
	strLang = pStr->wLang;							// get iManufacturer String length
	
	if (!GetDesc(uAddr,(0x00ff&(WORD)(uDev[usbaddr].iMfg))|STRING,strLang,4,DBUF))
		return FALSE;								// get iManufacturer String descriptors
if (!GetDesc(uAddr,(0x00ff&(WORD)(uDev[usbaddr].iMfg))|STRING,strLang,pStr->bLength,DBUF)) 		
		return FALSE;			

	//------------------------------------------------
	// Get Slave USB Configuration Descriptors
	//------------------------------------------------
	pCfg = (pCfgDesc)DBUF;									
	if (!GetDesc(uAddr,CONFIGURATION,0,8,DBUF)) 		
		return FALSE;			
		//Uart_Printf("%x\n",pCfg->wLength);
		if (!GetDesc(uAddr,CONFIGURATION,0,pCfg->wLength,DBUF))							
		return FALSE;		
        
	pIfc = (pIntfDesc)(DBUF + 9);					// point to Interface Descp
	uDev[usbaddr].bClass 	= pIfc->iClass;			// update to class type
	uDev[usbaddr].bNumOfEPs = (pIfc->bEndPoints <= MAX_EP) ? pIfc->bEndPoints : MAX_EP;
	//------------------------------------------------
	// Set configuration (except for HUB device)
	//------------------------------------------------
	if (uDev[usbaddr].bClass!=HUBCLASS)				// enumerating a FS/LS non-hub device
		if (!Set_Configuration(uAddr,DEVICE))		// connected directly to SL811HS
				return FALSE;

	//------------------------------------------------
	// For each slave endpoints, get its attributes
	// Excluding endpoint0, only data endpoints
	//------------------------------------------------
	epLen = 0;
	for (i=1; i<=uDev[usbaddr].bNumOfEPs; i++)				// For each data endpoint
	{  
		pEnp = (pEPDesc)(DBUF + 9 + 9 + epLen);	   			// point to Endpoint Descp(non-HID)
		uDev[usbaddr].bEPAddr[i]  	= pEnp->bEPAdd;			// Ep address and direction
		uDev[usbaddr].bAttr[i]		= pEnp->bAttr;			// Attribute of Endpoint
			if(i==2)
				uDev[usbaddr].wPayLoad[2] 	=0x40;
			else	uDev[usbaddr].wPayLoad[i] 	= pEnp->wPayLoad;		// Payload of Endpoint
		uDev[usbaddr].bInterval[i] 	= pEnp->bInterval;		// Polling interval
	    uDev[usbaddr].bData1[i] = 0;			            // init data toggle
		epLen += 7;

	}
	return TRUE;
}


//*****************************************************************************************
// Full-speed and low-speed detect - Device atttached directly to SL811HS
//*****************************************************************************************
int speed_detect() 
{
	SLAVE_FOUND	= FALSE;				// Clear USB device found flag
	FULL_SPEED  = TRUE;					// Assume full speed device
	DATA_STOP	= FALSE;				//
 
	SL811Write(cSOFcnt,0xAE);      		// Set SOF high counter, no change D+/D-, host mode
	SL811Write(CtrlReg,0x08);      		// Reset USB engine, full-speed setup, suspend disable
	USB_Delay(10);					// Delay for HW stablize
	SL811Write(CtrlReg,0x00);      		// Set to normal operation
	SL811Write(IntEna,0x61);      		// USB-A, Insert/Remove, USB_Resume.
	SL811Write(IntStatus,INT_CLEAR);	// Clear Interrupt enable status
	USB_Delay(10);					// Delay for HW stablize

	if(SL811Read(IntStatus)&USB_RESET)
	{									// test for USB reset
		SL811Write(IntStatus,INT_CLEAR);// Clear Interrupt enable status
		USB_Delay(30);				// Blink LED - waiting for slave USB plug-in
		return 0;						// exit speed_detect()
	}

	if((SL811Read(IntStatus)&USB_DPLUS)==0)	// Checking full or low speed	
	{									// ** Low Speed is detected ** //
		SL811Write(cSOFcnt,0xEE);   	// Set up host and low speed direct and SOF cnt
		SL811Write(cDATASet,0xE0); 		// SOF Counter Low = 0xE0; 1ms interval
		SL811Write(CtrlReg,0x21);  		// Setup 6MHz and EOP enable         
		FULL_SPEED = FALSE;				// low speed device flag
	}
	else	
	{									// ** Full Speed is detected ** //
		SL811Write(cSOFcnt,0xAE);   	// Set up host & full speed direct and SOF cnt
		SL811Write(cDATASet,0xE0);  	// SOF Counter Low = 0xE0; 1ms interval
		SL811Write(CtrlReg,0x05);   	// Setup 48MHz and SOF enable
	}

	SLAVE_FOUND = TRUE;					// Set USB device found flag
	SLAVE_ENUMERATED = FALSE;			// no slave device enumeration

	SL811Write(EP0Status,0x50);   		// Setup SOF Token, EP0
	SL811Write(EP0Counter,0x00);		// reset to zero count
	SL811Write(EP0Control,0x01);   		// start generate SOF or EOP

	USB_Delay(25);					// Hub required approx. 24.1mS
	SL811Write(IntStatus,INT_CLEAR);	// Clear Interrupt status
	return 0;    						// exit speed_detect();
}


//*****************************************************************************************
// Detect USB Device  檢測USB  設(shè)備
//*****************************************************************************************
int slave_detect(void)
{
	//-------------------------------------------------------------------------
	// Wait for SL811HS enumeration 枚舉過程返回
	//-------------------------------------------------------------------------
	if(!SLAVE_ENUMERATED)					// only if slave is not configured
	{
		speed_detect();				// wait for an USB device to be inserted to 
		if(SLAVE_FOUND)						// the SL811HST host
		{
	  		if(EnumUsbDev(1))	// enumerate USB device, assign USB address = #1
			{
			   	SLAVE_ENUMERATED = TRUE;	// Set slave USB device enumerated flag
			}	
		}
	}
	
	return 0;
}
/*
*****************************************************************************************
 Slave_Detach
*****************************************************************************************
int Slave_Detach(void)
{
	if( (SL811Read(IntStatus)&INSERT_REMOVE) || (SL811Read(IntStatus)&USB_RESET) )
	{												// Test USB detached?
		SLAVE_ENUMERATED = FALSE;					// return to un-enumeration
		SL811Write(IntStatus,INT_CLEAR); 			// clear interrupt status
		return TRUE;								// exit now !!!
	}
	return FALSE;
}
*/
//*****************************************************************************************
// SL811H variables initialization
//*****************************************************************************************

void sl811h_init(void)
{	
	SL811H_DATA = 0x00;
	SL811H_ADDR = 0x00;

	FULL_SPEED = TRUE;	
	SLAVE_FOUND = FALSE;
	SLAVE_ENUMERATED = FALSE;
	//set up Master and low Speed direct and SOF cnt high=0x2e
    	SL811Write(cSOFcnt,0x2e);
    	//SOF Counter Low=0xe0; 1ms interval
    	SL811Write(cDATASet,0xe0);
    	//setup 48MHz and EOP enable
    	SL811Write(CtrlReg, 0x05);

    	SL811Write(EP0Status, 0x50);    //Setup SOF token
    	SL811Write(EP0Counter, 0x00);     //
    	SL811Write(EP0Control, 0x01);     //start generate SOF or EOP
    	
    	USB_Delay(25);       //Hub required approx. 24.1ms
		RESET(0);//rPDATC&=(0<<12);
    	USB_Delay(5);
    	RESET(1);//rPDATC|=(1<<12);      //GPC12
}


void USB_Delay(WORD ms_time)		//~~從arm程序中copy過來的
{
	LWORD i;
	for( i = 0 ; i < 1000*ms_time ; i++ )
		;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青娱乐精品视频| 无码av免费一区二区三区试看| 国产精品亚洲а∨天堂免在线| 精品va天堂亚洲国产| 狠狠色伊人亚洲综合成人| 久久久综合精品| 国产成人av电影在线观看| 国产亚洲精品资源在线26u| 国产99一区视频免费| 亚洲日本电影在线| 欧美日韩国产美女| 久久精品久久综合| 国产精品免费av| 色综合天天综合| 三级精品在线观看| 久久久www成人免费无遮挡大片| 国产成a人无v码亚洲福利| 亚洲免费观看高清完整版在线观看熊 | 欧美一区二区三区在线观看视频 | 国产又黄又大久久| 亚洲天堂av一区| 91精品国产91久久久久久一区二区 | 韩日精品视频一区| 国产精品久久久久久久第一福利 | 91香蕉视频在线| 婷婷综合另类小说色区| 中文一区二区在线观看| 精品视频在线看| 国产精品18久久久久久久网站| 亚洲男同1069视频| 日韩精品一区二区三区四区| 91一区二区三区在线播放| 日本不卡视频在线| 亚洲另类中文字| 2021中文字幕一区亚洲| 91官网在线免费观看| 久久99久国产精品黄毛片色诱| 亚洲私人影院在线观看| 精品久久久久一区| 欧美亚洲免费在线一区| 国产成人av电影在线播放| 日韩黄色免费电影| 最新久久zyz资源站| 精品久久久久久最新网址| 欧美日韩一区二区三区高清 | 2024国产精品| 欧美美女bb生活片| 99精品视频在线观看免费| 九色porny丨国产精品| 亚洲国产欧美在线| 国产精品久久久久久久久动漫| 精品精品国产高清一毛片一天堂| 欧美又粗又大又爽| 99久久免费国产| 国产黄人亚洲片| 久久精品99国产精品日本| 亚洲午夜久久久久久久久电影院 | 国产成人综合精品三级| 麻豆成人91精品二区三区| 亚洲综合激情另类小说区| 久久久久久久一区| 欧美一区二区二区| 欧美日韩高清一区二区三区| 91免费版在线看| av高清久久久| 99视频有精品| www.欧美精品一二区| 高清视频一区二区| 成人妖精视频yjsp地址| 国产麻豆精品视频| 国内成人免费视频| 久久91精品国产91久久小草| 捆绑变态av一区二区三区| 麻豆91小视频| 麻豆视频观看网址久久| 免播放器亚洲一区| 美腿丝袜一区二区三区| 久久国产精品99久久久久久老狼| 麻豆成人久久精品二区三区红 | 日韩欧美一二三| 欧美变态口味重另类| 日韩欧美成人午夜| 精品国产乱码久久久久久图片| 日韩精品资源二区在线| 精品少妇一区二区三区在线播放| 精品国产髙清在线看国产毛片| 精品久久人人做人人爰| 国产欧美一区二区三区沐欲| 国产精品女同一区二区三区| 日韩伦理免费电影| 亚洲国产精品麻豆| 日韩av一级电影| 狠狠色综合播放一区二区| 成人国产精品视频| 欧美亚洲免费在线一区| 日韩欧美专区在线| 久久精品免视看| 亚洲视频每日更新| 日韩中文字幕91| 久久99国内精品| 9i看片成人免费高清| 欧美日韩精品专区| 久久久噜噜噜久久中文字幕色伊伊| 国产精品无圣光一区二区| 亚洲一区在线电影| 久久99精品国产麻豆不卡| 成人精品国产一区二区4080| 欧美这里有精品| 精品日韩成人av| 成人欧美一区二区三区| 五月天视频一区| 成人黄页在线观看| 欧美伦理影视网| 国产精品妹子av| 日日摸夜夜添夜夜添国产精品 | 久久久青草青青国产亚洲免观| 亚洲同性同志一二三专区| 久久激五月天综合精品| www.欧美精品一二区| 日韩精品在线一区二区| 亚洲欧美韩国综合色| 久久不见久久见中文字幕免费| 99精品久久久久久| 欧美成人三级在线| 亚洲高清免费在线| 激情综合色播五月| 欧美在线色视频| 欧美国产精品劲爆| 久久99精品久久久久婷婷| 在线免费观看一区| 欧美极品少妇xxxxⅹ高跟鞋| 天天综合色天天综合| 99re这里都是精品| 久久久久久麻豆| 蜜乳av一区二区| 欧美日韩国产首页| 亚洲日本青草视频在线怡红院| 狠狠色狠狠色综合系列| 4438x成人网最大色成网站| 亚洲欧洲av在线| 国产成人一区在线| 欧美成人猛片aaaaaaa| 午夜视频久久久久久| 色综合久久88色综合天天免费| 国产日韩在线不卡| 麻豆精品在线看| 欧美剧在线免费观看网站| 亚洲日本在线视频观看| 成人国产在线观看| 中文字幕不卡的av| 国产夫妻精品视频| 久久免费的精品国产v∧| 久久国产尿小便嘘嘘| 日韩欧美美女一区二区三区| 日av在线不卡| 91精品国产91综合久久蜜臀| 婷婷国产v国产偷v亚洲高清| 欧美自拍偷拍一区| 亚洲国产成人av网| 欧美另类久久久品| 亚洲bt欧美bt精品777| 欧美影片第一页| 亚洲国产精品久久一线不卡| 欧美视频自拍偷拍| 午夜精品福利久久久| 欧美久久久久免费| 日韩经典中文字幕一区| 91精品视频网| 久久国产精品区| 精品福利视频一区二区三区| 精品亚洲成av人在线观看| 精品粉嫩超白一线天av| 国产精品99久久不卡二区| 国产日产欧美一区二区视频| 成人av小说网| 一区二区三区av电影 | 色婷婷av一区二区三区大白胸| 亚洲免费资源在线播放| 欧美日韩黄色一区二区| 日韩av在线播放中文字幕| 2020国产精品| 成人网男人的天堂| 亚洲日本在线天堂| 欧美日韩高清在线播放| 精品一区二区免费| 国产精品色呦呦| 欧美手机在线视频| 精品一区二区免费| 亚洲欧美影音先锋| 欧美在线小视频| 久久se精品一区二区| 国产精品久久福利| 欧美视频一区在线观看| 老司机午夜精品| 成人欧美一区二区三区白人| 欧美精品v国产精品v日韩精品| 狠狠色狠狠色综合系列| 亚洲免费av高清| 精品国产一区二区三区av性色| hitomi一区二区三区精品|