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

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

?? usbdev.c

?? samsung 最新芯片2450 的測試程序.
?? C
?? 第 1 頁 / 共 4 頁
字號:
//	DbgUsb(("EP_INT_EN_REG : %x \n", Temp));

	Outp32(SYS_CON_REG, 0x4023);		// error interrupt enable, 16bit bus, Little format, suspend&reset enable
	Outp32(EP0_CON_REG, 0x0000);


	// EP1 OUT Max Packet size settings
	Outp32(INDEX_REG, EP1);
	Outp32(EP_CON_REG, 0x0080); // dual enable

	// EP2 IN Max Packet size settings
	Outp32(INDEX_REG, EP3);
	Outp32(EP_CON_REG, 0x0080);    		// dual enable
	Outp32(INDEX_REG, EP0);
}


void HandleEvent(void)
{
	U32 uStatus;
	U32 Temp,k;
	U16 ep_int_status, ep_int;

	Inp32(SYS_STATUS_REG, uStatus); // System status read
	DbgUsb(("SYS_STATUS_REG : %x \n", uStatus));

	if (uStatus & INT_REG_VBUS)
	{
		Outp32(SYS_STATUS_REG, INT_REG_VBUS); // Interrupt Clear
		DbgUsb(("\n [USB_Diag_Log]  :  INT_REG_VBUS\n"));
	}

	if (uStatus & 0xfc00) 	 // Error interrupt check
	{
		
		Inp32(SYS_STATUS_REG , Temp);
		Outp32(SYS_STATUS_REG, INT_ERR); // Interrupt Clear
		
	}

	if (uStatus & INT_REG_SUSPEND)
	{
		Outp32(SYS_STATUS_REG, INT_REG_SUSPEND); // Interrupt Clear
		DbgUsb(("\n [USB_Diag_Log]  : Suspend Mode"));
		
	}

	if (uStatus & INT_REG_RESUME)
	{
		Outp32(SYS_STATUS_REG, INT_REG_RESUME); // Host software send ClearPortFeature. Interrupt Clear
		DbgUsb(("\n [USB_Diag_Log]  : Resume Mode \n"));
		
	}

	if (uStatus & INT_REG_RESET) // Reset interrupt
	{
		Outp32(SYS_STATUS_REG, INT_REG_RESET); // Interrupt Clear
		SetEndpoint();
		g_uEp0State = EP0_STATE_INIT;
		DbgUsb(("\n [USB_Diag_Log]  : Reset Mode \n"));
		
	
		
	}

	if (uStatus & INT_REG_SDE) // Device Speed Detection interrupt
	{
		Outp32(SYS_STATUS_REG, INT_REG_SDE); // Interrupt Clear
		DbgUsb(("\n [USB_Diag_Log]  : Speed Detection interrupt \n"));

		if (uStatus & INT_REG_HSP) // Set if Device is High speed or Full speed
		{
			Outp32(SYS_STATUS_REG, INT_REG_HSP); // High Speed Device Interrupt Clear?? may be not.
			DbgUsb(("\n [USB_Diag_Log]  : High Speed Detection\n"));
			SetMaxPktSizes(USB_HIGH);
			SetDescriptorTable();
		}
		else
		{
			SetMaxPktSizes(USB_FULL);
			SetDescriptorTable();
		}
	}

	
    
	Inp32(TEST_REG, Temp); // EP interrrupt status read
	DbgUsb(("TEST_REG : %x \n", Temp));
	  
	Inp32(EP_STATUS_REG, ep_int_status); // EP interrrupt status read
	DbgUsb(("EP_STATUS_REG : %x \n", ep_int_status));
	
	Inp32(EP_INT_REG, ep_int);
	DbgUsb(("EP_INT_REG : %x \n", ep_int));

	if (ep_int & INT_REG_EP0)
	{
 		DbgUsb(("\n [USB_Diag_Log]  :  Control Transfer Interrupt \n"));
		Outp32(EP_INT_REG, INT_REG_EP0); // Interrupt Clear
		HandleEvent_EP0();
	    
	}

	// Endpoint1 bulkIn
	else if (ep_int & INT_REG_EP1)
	{
		Outp32(EP_INT_REG, INT_REG_EP1); // Interrupt Clear
		HandleEvent_BulkIn();
	
		DbgUsb(("\n [USB_Diag_Log]  :  Ep1 Interrupt  \n"));
	}

	// Endpoint3 bulkOut
	else if (ep_int & INT_REG_EP3)
	{
		Outp32(EP_INT_REG, INT_REG_EP3); // Interrupt Clear
		HandleEvent_BulkOut();
		DbgUsb(("\n [USB_Diag_Log]  :  Bulk Out Transfer Interrupt  \n"));
	
	}

}

// ======================================================================
// endpointZeroFunction()
//
// This is function for Control Transfer.
// If it occurs endpoint0 interrupt, this function is called.
// This function check Device Request for Control Transfer type and
// call each other functions.
// ======================================================================

void HandleEvent_EP0(void)
{
	//U32 DeviceRequestLength,Temp,k;
	U32 Temp,k;
	U16 ep0csr;
	U16 ReadCnt, i;
	U16 ReadBuf[64]={0x0000, };
	U8  setaddress;
	U32  uRemoteWakeUp;
	U32 tmp;

	
	#define TEST_PKT_SIZE 53
	#define TEST_ARR_SIZE 54
	
	
	
	U8 ahwTestPkt [TEST_ARR_SIZE] = {

		0x00,0x00, 0x00,0x00, 0x00,0x00,
	    0x00,0xAA, 0xAA,0xAA, 0xAA,0xAA, 0xAA,0xAA,
		0xAA,0xEE, 0xEE,0xEE, 0xEE,0xEE, 0xEE,0xEE,
		0xEE,0xFE, 0xFF,0xFF, 0xFF,0xFF, 0xFF,0xFF,
		0xFF,0xFF, 0xFF,0xFF, 0xFF,0x7F, 0xBF,0xDF,
		0xEF,0xF7, 0xFB,0xFD, 0xFC,0x7E, 0xBF,0xDF,
		0xEF,0xF7, 0xFB,0xFD, 0x7E,0x00, 0x00,0x00
	};

	Outp32(INDEX_REG, EP0);
	Inp32(EP0_STATUS_REG, ep0csr);


	//	DbgUsb((" Endpoint0 CSR Register = %x \n", ep0csr));
	// EP0 CSR register status check

	if (ep0csr & EP0_SENT_STALL) // SENT STALL : protocol stall.
	{
		DbgUsb((" Sent Stall \n"));
		Outp32(EP0_STATUS_REG, EP0_SENT_STALL);
		if (ep0csr & EP0_RX_SUCCESS)
			Outp32(EP0_STATUS_REG, EP0_RX_SUCCESS);
		
		g_uEp0State = EP0_STATE_INIT;
		return;
	}

	if (ep0csr & EP0_TX_SUCCESS)
	{
		DbgUsb((" EP0_TX_SUCCESS \n"));
		Outp32(EP0_STATUS_REG, EP0_TX_SUCCESS);

		return;
	}

	//	DbgUsb((" g_uEp0State = %x \n", g_uEp0State));
	if(ep0csr & EP0_RX_SUCCESS)
	{
		if (g_uEp0State == EP0_STATE_INIT)
		{
			Inp32(BYTE_READ_CNT_REG, ReadCnt);
			for(i=0;i<4;i++) Inp32(EP0_FIFO, ReadBuf[i]);

			Outp32(EP0_STATUS_REG, EP0_RX_SUCCESS);

			g_poDeviceRequest->bmRequestType=ReadBuf[0];
			g_poDeviceRequest->bRequest=ReadBuf[0]>>8;
			g_poDeviceRequest->wValue_L=ReadBuf[1];
			g_poDeviceRequest->wValue_H=ReadBuf[1]>>8;
			g_poDeviceRequest->wIndex_L=ReadBuf[2];
			g_poDeviceRequest->wIndex_H=ReadBuf[2]>>8;
			g_poDeviceRequest->wLength_L=ReadBuf[3];
			g_poDeviceRequest->wLength_H=ReadBuf[3]>>8;

			PrintEp0Pkt((U8 *)g_poDeviceRequest, 8);

			switch (g_poDeviceRequest->bRequest)
			{
				case STANDARD_SET_ADDRESS:
					setaddress = (g_poDeviceRequest->wValue_L); // Set Address Update bit
			//		DbgUsb(("Func_ADDR_Setaddr : %d \n", setaddress));
					
					Inp32(FUNC_ADDR_REG, tmp);
					g_uEp0State = EP0_STATE_INIT;
					break;

				case STANDARD_SET_DESCRIPTOR:
			//		DbgUsb(("\n MCU >> Set Descriptor \n"));
					break;

				case STANDARD_SET_CONFIGURATION:
			//		DbgUsb(("\n MCU >> Set Configuration \n"));
					usConfig = g_poDeviceRequest->wValue_L; // Configuration value in configuration descriptor
					g_uEnumerationDone = 1;
				/*	
					if(g_uBulkInCount!=0)
					{
						g_uBulkInCount+=g_uEp1MaxPktSize;
						PrepareEp1Fifo(g_uBulkInAddr-g_uEp1MaxPktSize);
					}
					*/
					break;

				case STANDARD_GET_CONFIGURATION:
					// Uart_Printf("\n MCU >> Get Configruation \n");
					Outp32(BYTE_WRITE_CNT_REG, 1);
					Outp32(EP0_FIFO, usConfig);
					break;

				case STANDARD_GET_DESCRIPTOR:
					DeviceRequestLength = (U32)((g_poDeviceRequest->wLength_H << 8) |
								g_poDeviceRequest->wLength_L);
				
					switch (g_poDeviceRequest->wValue_H)
					{
					
						case DEVICE_DESCRIPTOR:
				//			DbgUsb(("\n MCU >> Get Device Descriptor \n"));
							
							DeviceRequestLength = (U32)((g_poDeviceRequest->wLength_H << 8) |
								g_poDeviceRequest->wLength_L);
								g_uEp0State = EP0_STATE_GD_DEV_0_0;
							break;
						
						case CONFIGURATION_DESCRIPTOR:
							

							DeviceRequestLength = (U32)((g_poDeviceRequest->wLength_H << 8) |
								g_poDeviceRequest->wLength_L);
								
				//			DbgUsb(("\n MCU >> Get Configuration Descriptor = %x\n",DeviceRequestLength));
							if (DeviceRequestLength > CONFIG_DESC_SIZE){
							// === GET_DESCRIPTOR:CONFIGURATION+INTERFACE+ENDPOINT0+ENDPOINT1 ===
							// Windows98 gets these 4 descriptors all together by issuing only a request.
							// Windows2000 gets each descriptor seperately.
								g_uEp0State = EP0_STATE_GD_CFG_0;
							}
							else
								g_uEp0State = EP0_STATE_GD_CFG_ONLY_0; // for win2k
							break;

						case STRING_DESCRIPTOR :
						    DeviceRequestLength = (U32)((g_poDeviceRequest->wLength_H << 8) |
								g_poDeviceRequest->wLength_L);
								
							switch(g_poDeviceRequest->wValue_L)
							{
								case 0:
									g_uEp0State = EP0_STATE_GD_STR_I0;
									break;
								case 1:
									g_uEp0State = EP0_STATE_GD_STR_I1;
									break;
								case 2:
									g_uEp0State = EP0_STATE_GD_STR_I2;
									break;
								default:
										break;
							}
							break;
						case ENDPOINT_DESCRIPTOR:
							switch(g_poDeviceRequest->wValue_L&0xf)
							{
							case 0:
								g_uEp0State=EP0_STATE_GD_EP0_ONLY_0;
								break;
							case 1:
								g_uEp0State=EP0_STATE_GD_EP1_ONLY_0;
								break;
							default:
								break;
							}
							break;

						case DEVICE_QUALIFIER:
							DeviceRequestLength = (U32)((g_poDeviceRequest->wLength_H << 8) |
							g_poDeviceRequest->wLength_L);
						//	printf("devicequalify = %d\n",DeviceRequestLength);
							if (DeviceRequestLength ==4)
								g_uEp0State=EP0_STATE_GD_DEV_QUALIFIER;
							else if (DeviceRequestLength ==10) 
								g_uEp0State=EP0_STATE_GD_DEV_QUALIFIER_1;
													
							break;
							
					   	case OTHER_SPEED_CONFIGURATION :
							DbgUsb(("\n MCU >> Get OTHER_SPEED_CONFIGURATION \n"));
							DeviceRequestLength = (U32)((g_poDeviceRequest->wLength_H << 8) |
							g_poDeviceRequest->wLength_L);
							g_uEp0State = EP0_STATE_GD_DEV_OTHER_SPEED;
							break;
						default:
							break;
				
					}
					break;

				case STANDARD_CLEAR_FEATURE:
			//		DbgUsb(("\n MCU >> Clear Feature \n"));
					switch (g_poDeviceRequest->bmRequestType)
					{
						case DEVICE_RECIPIENT:
							if (g_poDeviceRequest->wValue_L == 1)
								uRemoteWakeUp = FALSE;
							break;

						case ENDPOINT_RECIPIENT:
							if (g_poDeviceRequest->wValue_L == 0)
							{
								if ((g_poDeviceRequest->wIndex_L & 0x7f) == 0x00)
									g_poStatusGet->Endpoint0= 0;

								if ((g_poDeviceRequest->wIndex_L & 0x8f) == 0x81) // IN  Endpoint 1
									g_poStatusGet->Endpoint1= 0;

								if ((g_poDeviceRequest->wIndex_L & 0x8f) == 0x03) // OUT Endpoint 3
									g_poStatusGet->Endpoint3= 0;
							}
							break;

						default:
							break;
					}
					g_uEp0State = EP0_STATE_INIT;
					break;

				case STANDARD_SET_FEATURE:
				    
					
			//		DbgUsb(("\n MCU >> Set Feature \n"));
					switch (g_poDeviceRequest->bmRequestType)
					{
						case DEVICE_RECIPIENT:
							if (g_poDeviceRequest->wValue_L == 1)
								uRemoteWakeUp = TRUE;
								break;

						case ENDPOINT_RECIPIENT:
							if (g_poDeviceRequest->wValue_L == 0)
							{
								if ((g_poDeviceRequest->wIndex_L & 0x7f) == 0x00)
									g_poStatusGet->Endpoint0= 1;

								if ((g_poDeviceRequest->wIndex_L & 0x8f) == 0x81)
									g_poStatusGet->Endpoint1= 1;

								if ((g_poDeviceRequest->wIndex_L & 0x8f) == 0x03)
									g_poStatusGet->Endpoint3= 1;
							}
							break;

						default:
							break;
					}
					//=======================================================
					
					switch (g_poDeviceRequest->wValue_L) {

						case EP_STALL:

							// TBD: addnl processing if reqd
							break;

						case TEST_MODE:						
							if ((0 != g_poDeviceRequest->wIndex_L ) ||(0 != g_poDeviceRequest->bmRequestType)) 
							break;
							
							// Set TEST MODE
								 	Inp32(TEST_REG,tmp);
									tmp|=TR_TMD;
							
							Outp32(TEST_REG,TR_TMD);
							
							switch( g_poDeviceRequest->wIndex_H)
							{
							
								case TEST_J:

									//Set Test J
									Inp32(TEST_REG,tmp);
									tmp|=TR_TJS;
									Outp32(TEST_REG,tmp);
									break;

								case TEST_K:

									//Set Test K
									Inp32(TEST_REG,tmp);
									tmp|=TR_TKS;
									Outp32(TEST_REG,tmp);
														
									break;

								case TEST_SE0_NAK:

									//Set Test SE0NAK
									Inp32(TEST_REG,tmp);
									tmp|=TR_TSNS;
									Outp32(TEST_REG,tmp);
									
									break;

								case TEST_PACKET:
									printf ("Test_packet\n");
									Outp32(BYTE_WRITE_CNT_REG, TEST_PKT_SIZE);
									WrPktEp0(ahwTestPkt, TEST_PKT_SIZE);
								 	Inp32(TEST_REG,tmp);
									tmp|=TR_TPS;
									Outp32(TEST_REG,tmp);
									printf ("tr=%0X\n", tmp);					 	
								 	

									break;
								}

							break;

						default:
							break;
					}
					//=======================================================
					
					g_uEp0State = EP0_STATE_INIT;
					break;

				case STANDARD_GET_STATUS:
					switch(g_poDeviceRequest->bmRequestType)
					{
						case  (0x80):
							g_poStatusGet->Device=((U8)uRemoteWakeUp<<1)|0x1;		// SelfPowered
							g_uEp0State = EP0_GET_STATUS0;
							break;

						case  (0x81):
							g_poStatusGet->Interface=0;
							g_uEp0State = EP0_GET_STATUS1;
							break;

						case  (0x82):
							if ((g_poDeviceRequest->wIndex_L & 0x7f) == 0x00)
								g_uEp0State = EP0_GET_STATUS2;

							if ((g_poDeviceRequest->wIndex_L & 0x8f) == 0x81)
								g_uEp0State = EP0_GET_STATUS3;

							if ((g_poDeviceRequest->wIndex_L & 0x8f) == 0x03)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品日产欧美久久久久| www.欧美.com| 亚洲永久精品国产| 日韩毛片精品高清免费| 国产午夜精品一区二区三区嫩草| 欧美一区二区在线免费播放| 91精品国产麻豆国产自产在线| 777奇米四色成人影色区| 欧美丰满高潮xxxx喷水动漫| 7777精品伊人久久久大香线蕉的 | 亚洲一区二区在线免费观看视频| 日韩精品一区在线| 精品国产91乱码一区二区三区| 精品福利二区三区| 国产三级精品在线| 中文字幕日韩欧美一区二区三区| 亚洲啪啪综合av一区二区三区| 一区二区理论电影在线观看| 三级精品在线观看| 国产在线播放一区二区三区| 成人做爰69片免费看网站| www.色精品| 欧美日韩精品一区二区天天拍小说| 91麻豆精品91久久久久久清纯| 欧美大白屁股肥臀xxxxxx| 久久欧美一区二区| 亚洲女爱视频在线| 日本中文在线一区| 丰满放荡岳乱妇91ww| 91官网在线观看| 欧美一区二区高清| 国产精品毛片大码女人| 亚洲国产美国国产综合一区二区| 蜜桃精品在线观看| 成人精品一区二区三区中文字幕| 精品视频在线看| 久久精品一区四区| 亚洲午夜精品在线| 国产成人一区在线| 欧美日韩综合不卡| 欧美国产精品一区二区三区| 亚洲地区一二三色| 成人免费观看男女羞羞视频| 欧美日韩和欧美的一区二区| 欧美精品一区二区三区四区 | 激情伊人五月天久久综合| av成人老司机| 精品欧美一区二区三区精品久久| 亚洲欧美乱综合| 国产成人8x视频一区二区 | 亚洲va国产天堂va久久en| 久久精品国产精品亚洲综合| 色综合天天综合| 久久久久久一二三区| 天天免费综合色| 91免费版在线看| 久久久www免费人成精品| 日日夜夜精品视频免费| 色综合天天综合网天天狠天天| 久久综合狠狠综合久久综合88| 亚洲国产精品综合小说图片区| 成人免费福利片| 久久久精品国产99久久精品芒果 | 国产精品亚洲午夜一区二区三区 | 日本精品一级二级| 亚洲国产高清aⅴ视频| 久久er精品视频| 欧美精品在线视频| 午夜久久久影院| 欧美三级乱人伦电影| 一区二区三区在线不卡| 99精品欧美一区二区蜜桃免费 | 亚洲欧美韩国综合色| 国产精品18久久久久久久久久久久| 欧美精品在线视频| 日韩电影一区二区三区四区| 在线看一区二区| 尤物在线观看一区| 在线日韩国产精品| 亚洲一区二区欧美日韩| 一本色道**综合亚洲精品蜜桃冫| 国产精品嫩草99a| 成人av在线一区二区| 国产精品久久久久久久午夜片| 成人听书哪个软件好| 国产精品久久久久久久岛一牛影视 | 久久久精品影视| 国产精品一二三区在线| 国产欧美精品一区二区三区四区| 国产精品亚洲一区二区三区在线| 国产日产欧美一区二区三区| 成人av在线资源网站| 亚洲精品网站在线观看| 欧美丝袜丝交足nylons| 亚洲日本成人在线观看| 欧美少妇一区二区| 另类小说图片综合网| 久久久三级国产网站| 成人精品一区二区三区四区| 中文字幕综合网| 欧美日韩国产另类不卡| 麻豆专区一区二区三区四区五区| 精品国产91久久久久久久妲己 | 奇米精品一区二区三区在线观看| 日韩一级免费一区| 国产综合久久久久影院| 一区在线观看免费| 在线观看日韩精品| 久久99精品久久久久| 中文字幕在线一区免费| 欧美日韩综合一区| 国产精品99久久久久久久vr| 亚洲精品乱码久久久久久黑人| 91精品欧美一区二区三区综合在 | 亚洲成a人在线观看| 久久婷婷色综合| 日本精品一区二区三区高清 | 一本大道av一区二区在线播放| 亚洲va欧美va天堂v国产综合| 久久女同性恋中文字幕| 欧美亚男人的天堂| 国产成人av电影免费在线观看| 亚洲一区在线视频观看| 精品免费日韩av| 欧洲一区在线电影| 狠狠色丁香婷综合久久| 一区二区成人在线视频| 日韩欧美在线综合网| 99久久久久久| 久久电影网站中文字幕| 亚洲精品老司机| 国产欧美日本一区视频| 日韩欧美视频一区| 在线观看三级视频欧美| 成人av在线影院| 国内成人精品2018免费看| 夜夜嗨av一区二区三区中文字幕| 久久亚洲精华国产精华液| 51精品久久久久久久蜜臀| 成人h动漫精品| 国产精品88888| 久久福利资源站| 三级影片在线观看欧美日韩一区二区 | 亚洲欧美一区二区三区久本道91| 91.com视频| 欧美片网站yy| 色哟哟精品一区| 不卡一二三区首页| 成人免费视频视频在线观看免费 | 亚洲午夜精品在线| 亚洲视频在线一区二区| 久久久综合网站| 欧美成人精品3d动漫h| 欧美午夜精品免费| 色先锋aa成人| 色综合婷婷久久| 一本色道久久综合狠狠躁的推荐| jiyouzz国产精品久久| www.亚洲国产| 色综合视频在线观看| 成人性生交大片免费| 国产成人亚洲综合a∨婷婷| 久久99精品一区二区三区 | 亚洲精品高清视频在线观看| 最新热久久免费视频| 中文字幕中文乱码欧美一区二区| 日本一区二区视频在线| 中日韩av电影| 国产精品久久久久四虎| 亚洲视频免费在线| 亚洲免费在线电影| 亚洲国产乱码最新视频| 午夜精品在线视频一区| 日韩电影在线免费观看| 精品一区二区久久久| 韩国精品久久久| 国产99久久久国产精品潘金| 国产精品一二三四区| 99视频在线精品| 欧美性受极品xxxx喷水| 91精品国产色综合久久不卡蜜臀| 这里只有精品视频在线观看| 精品久久久久久久久久久院品网| 久久综合久久综合九色| 欧美激情一区在线观看| 亚洲人精品午夜| 午夜精品福利一区二区三区av | 蜜臀99久久精品久久久久久软件| 另类欧美日韩国产在线| 国内成+人亚洲+欧美+综合在线| 成人午夜av在线| 欧美三级电影在线观看| 欧美精品一区二区蜜臀亚洲| 中文字幕亚洲成人| 亚洲电影一区二区三区| 国产资源在线一区| 在线视频亚洲一区| 国产精品理论片| 一区二区国产视频| 国产一区 二区 三区一级|