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

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

?? hub.c

?? USB接口芯片CH374所有應用源碼,包括CH374中文手冊(一)和中文手冊(二),以及CH374針對各個平臺ARM32,AVR,F2MC8,M16C,MC9S12,MC68,MCS51,MSP430
?? C
?? 第 1 頁 / 共 4 頁
字號:
						count = 0;
						n = 0;
						bPORTchange = 0;
						bMine = 0;
						bChange = 0;
					} 
					else if ( s != USB_INT_SUCCESS ) // 出錯
					{
						if( bAddr != 1 )
						{
							//printf( "ERROR = %02X\n", (UINT16)s );
							;
						}
						else
						{
							//printf("Root hub removed.\n");
							;
						}
						goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
					}
					else // 集線器有響應
					{
						if( bPORTchange != 0 ) // 選中的集線器上有端口發生變化
						{
							if( bChange == FIND_ATTACH ) // 發現設備連接事件
							{
							
								//printf("Hub at address %02x Port %02x find attaching.\n",(UINT16)bAddr,(UINT16)bPORTchange);
								Write374Byte( REG_USB_ADDR, 0x00 ); // 發現了新設備,地址設置0
								if( bMine == LOW_SPEED )
								{
									//HostSetLowSpeed( ); //設置為低速模式
									//s = SetPortFeature( bChange, PORT_LOW_SPEED );
									k = 0;
									while(1) // 找沒用過的地址空間
									{
										if( p_Dev_Addr->Num[k].bAddr == 0 ) break; // 表中有空項就跳出
										k++;
									}
									p_Dev_Addr->Num[count].KUNO.HUB.bSlavePort[(bPORTchange-1)] = k + 1; // 集線器發生連接事件的端點項指向連接設備的地址
									p_Dev_Addr->Num[k].bUpPort = bAddr; // 指向上一級集線器的地址
									bAddr = k + 1; // 自己找到的未用地址
									bDevNum++; // 功能設備加1
									printf( "******** Appoint address %d to attached device  ********\n",(UINT16)bAddr );
									printf("OK\n");

									////// 錄入功能設備信息
									p_Dev_Addr->Num[k].bAddr = bAddr;
									p_Dev_Addr->Num[k].bDevType = FUNCTION_DEV;
								
									p_Dev_Addr->Num[k].KUNO.DEV.bSpeed = bMine;

									
								
								}
								else if( bMine == FULL_SPEED )  
								{
									HostSetFullSpeed( ); // 設置為全速模式
									printf( "GetDeviceDescr: " );
									s = GetDeviceDescr( buf );  // 獲取設備描述符
									if ( s != USB_INT_SUCCESS ) 
									{
										//printf( "ERROR = %02X\n", (UINT16)s );
										goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
									}
									for ( i = 0; i < ( (PUSB_SETUP_REQ)SetupGetDevDescr ) -> wLengthL; i ++ ) printf( "0x%02X ", (UINT16)( buf[i] ) );
									printf( "\n" );

									k = 0;
									while(1) // 找沒用過的地址空間
									{
										if( p_Dev_Addr->Num[k].bAddr == 0 ) break; // 表中有空項就跳出
										k++;
									}
									p_Dev_Addr->Num[count].KUNO.HUB.bSlavePort[(bPORTchange-1)] = k + 1; // 集線器發生連接事件的端點項指向連接設備的地址
									p_Dev_Addr->Num[k].bUpPort = bAddr; // 指向上一級集線器的地址
									bAddr = k + 1; // 自己找到的未用地址

									if( ((PUSB_DEV_DESCR)buf ) -> bDeviceClass == 0x09 ) // 是HUB
									{
										bHubNum++; // 集線器數量加一
								
								
										printf( "******** Appoint address %d to attached hub  ********\n",(UINT16)bAddr );
										s = HubEnum( bAddr ); // 集線器枚舉
										if ( s != USB_INT_SUCCESS ) 
										{
											//printf( "ERROR = %02X\n", (UINT16)s );
											goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
										}
										printf("OK\n");

										//// 錄入集線器信息
										p_Dev_Addr->Num[k].bAddr = bAddr;	
										p_Dev_Addr->Num[k].bDevType = HUB_TYPE;
										p_Dev_Addr->Num[k].bEndpSize = UsbDevEndpSize;
										p_Dev_Addr->Num[k].KUNO.HUB.bNumPort = bNumPort;
										p_Dev_Addr->Num[k].KUNO.HUB.bHUBendp = bHUBendp;
										p_Dev_Addr->Num[k].KUNO.HUB.bInterval = bInterval;
										p_Dev_Addr->Num[k].KUNO.HUB.bSlavePort[0] = 0;
										p_Dev_Addr->Num[k].KUNO.HUB.bSlavePort[1] = 0;
										p_Dev_Addr->Num[k].KUNO.HUB.bSlavePort[2] = 0;
										p_Dev_Addr->Num[k].KUNO.HUB.bSlavePort[3] = 0;
										p_Dev_Addr->Num[k].KUNO.HUB.bSlavePort[4] = 0;
										p_Dev_Addr->Num[k].KUNO.HUB.bSlavePort[5] = 0;
										p_Dev_Addr->Num[k].KUNO.HUB.bSlavePort[6] = 0;

									}
									else // 是設備
									{
										bDevNum++; // 功能設備加1
										printf( "******** Appoint address %d to attached device ********\n",(UINT16)bAddr );
										s = DeviceEnum( bAddr );
										if ( s != USB_INT_SUCCESS ) 
										{
											//printf( "ERROR = %02X\n", (UINT16)s );
											goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
										}
										printf("OK\n");

										////// 錄入功能設備信息
										p_Dev_Addr->Num[k].bAddr = bAddr;
										p_Dev_Addr->Num[k].bDevType = FUNCTION_DEV;
										p_Dev_Addr->Num[k].bEndpSize = UsbDevEndpSize;
										p_Dev_Addr->Num[k].KUNO.DEV.bSpeed = bMine;


									}
								}
								count++; // 查詢下一個集線器
								n++;
									

							}
						
							else if( bChange == FIND_REMOVE ) // 發現設備移除事件
							{
								count = 0; // 回主集線器查詢
								n = 0;
								//printf("Hub at address %02x Port %02x find removed.\n",(UINT16)bAddr,(UINT16)bPORTchange);
								m = p_Dev_Addr->Num[(bAddr-1)].KUNO.HUB.bSlavePort[(bPORTchange-1)]; // 取出該移除設備的地址
								//printf("m %02x\n",(UINT16)m);
								if( m != 0 ) // 被移除的最上層設備的地址,該設備下可能還連接有別的設備
								{
									if( p_Dev_Addr->Num[(m-1)].bDevType == FUNCTION_DEV && p_Dev_Addr->Num[(m-1)].bAddr != 0 ) // 移除的是設備
									{
										printf("######## The removed device's address is %d ########\n",(UINT16)m);
										p_Dev_Addr->Num[(m-1)].bAddr = 0; // 取消被移除的最上層功能設備的表項
										bDevNum--; // 功能設備數量減1

									}
									else if(  p_Dev_Addr->Num[(m-1)].bDevType == HUB_TYPE && p_Dev_Addr->Num[(m-1)].bAddr != 0 ) // 移除的是集線器
									{
								
										printf("######## The removed hub's address is %d ########\n",(UINT16)m);
										p_Dev_Addr->Num[(m-1)].bAddr = 0; // 取消被移除的最上層集線器的表項
										bHubNum--; // 集線器數量減一

										for( k = 0; k< 7; k++ ) // 判斷該移除的最上層集線器的端口上有沒連接設備
										{
											if( p_Dev_Addr->Num[(m-1)].KUNO.HUB.bSlavePort[k] != 0 ) // 移除的最上層集線器的端口上找到連接的次級設備
											{
												m1 = p_Dev_Addr->Num[(m-1)].KUNO.HUB.bSlavePort[k]; // 取出下一級地址
												if( p_Dev_Addr->Num[(m1-1)].bDevType == FUNCTION_DEV && p_Dev_Addr->Num[(m1-1)].bAddr != 0 ) // 移除的是設備
												{
													printf("########  The removed device's address is %d ########\n",(UINT16)m1);
													p_Dev_Addr->Num[(m1-1)].bAddr = 0; // 取消被移除的次最上層功能設備的表項
													bDevNum--; // 功能設備數量減1
												}
												else if(  p_Dev_Addr->Num[(m1-1)].bDevType == HUB_TYPE && p_Dev_Addr->Num[(m-1)].bAddr != 0 ) // 移除的是集線器
												{
													printf("########  The removed hub's address is %d  ########\n",(UINT16)m1);
													p_Dev_Addr->Num[(m1-1)].bAddr = 0; // 取消被移除的次最上層集線器的表項
													bHubNum--; // 集線器數量減一

													for( k1 = 0; k1 < 7; k1 ++ )
													{
														if( p_Dev_Addr->Num[(m1-1)].KUNO.HUB.bSlavePort[k1] != 0 ) // 次級集線器端口上找到次次級設備
														{
															m2 = p_Dev_Addr->Num[(m1-1)].KUNO.HUB.bSlavePort[k1]; // 保留次次級設備地址
															if( p_Dev_Addr->Num[(m2-1)].bDevType == FUNCTION_DEV && p_Dev_Addr->Num[(m2-1)].bAddr != 0 ) // 移除的是設備
															{
																printf("######## The removed device's address is %d ########\n",(UINT16)m2);
																p_Dev_Addr->Num[(m2-1)].bAddr = 0; // 取消被移除的次次最上層功能設備的表項
																bDevNum--; // 功能設備數量減1
															}
															else if( p_Dev_Addr->Num[(m2-1)].bDevType == HUB_TYPE && p_Dev_Addr->Num[(m2-1)].bAddr != 0 ) // 移除的是集線器
															{
																printf("######## The removed hub's address is %d ########\n",(UINT16)m2);
																p_Dev_Addr->Num[(m2-1)].bAddr = 0; // 取消被移除的次次最上層集線器的表項
																bHubNum--; // 集線器數量減一

																for( k2 = 0; k2 < 7; k2++ )
																{
																	if( p_Dev_Addr->Num[(m2-1)].KUNO.HUB.bSlavePort[k2] != 0 ) // 次次級集線器端口上找到次次次級設備
																	{
																		m3 = p_Dev_Addr->Num[(m2-1)].KUNO.HUB.bSlavePort[k2]; //// 保留次次次級設備地址
																		if( p_Dev_Addr->Num[(m3-1)].bDevType == FUNCTION_DEV && p_Dev_Addr->Num[(m3-1)].bAddr != 0 ) // 移除的是設備
																		{
																			printf("######## The removed device's address is %d ########\n",(UINT16)m3);
																			p_Dev_Addr->Num[(m3-1)].bAddr = 0; // 取消被移除的次次次最上層功能設備的表項
																			bDevNum--; // 功能設備數量減1
																		}
																		else if( p_Dev_Addr->Num[(m3-1)].bDevType == HUB_TYPE && p_Dev_Addr->Num[(m3-1)].bAddr != 0 ) // 移除的是集線器
																		{
																			printf("######## The removed hub's address is %d ########\n",(UINT16)m3);
																			p_Dev_Addr->Num[(m3-1)].bAddr = 0; // 取消被移除的次次次最上層集線器的表項
																			bHubNum--; // 集線器數量減一

																			/////到此,只支持最多縱向5級集線器連接

																		}
																	}

																} // 找不到次次次級設備就退出
															}
														}
													} // 找不到次次級設備就退出
												}
											}
										} // 找不到次級設備就退出
								
									
									

									

									}
								
								}
							}
						}
						else // 選中的集線器上沒有發現變化,繼續查看下一個集線器的狀態
						{
							count++;
							n++;
						}
					}
						
					
					
				}
				
				
			}



		}
		else // 第一層連接上來的是功能設備,端口已經用完
		{
			printf( "Function device at address 1, no hub.\n"); 
			kk = 0;
			s = DeviceEnum( 0x01 );
			if ( s != USB_INT_SUCCESS ) {
				//printf( "ERROR = %02X\n", (UINT16)s );
				goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
			}
			
		}
		
		

		
		printf( "USB device ready now\n" );
/* do something, read/write ...
		len = out_endp_size;
		Write374Block( RAM_HOST_TRAN, len, buf );
		Write374Byte( REG_USB_LENGTH, len );
		s = WaitHostTransact374( out_endp_addr, DEF_USB_PID_OUT, FALSE, 1000 );
		s = WaitHostTransact374( in_endp_addr, DEF_USB_PID_IN, FALSE, 1000 );
		len = Read374Byte( REG_USB_LENGTH );
		Read374Block( RAM_HOST_RECV, len, buf );
		len = out_endp_size;
		Write374Block( RAM_HOST_TRAN, len, buf );
		Write374Byte( REG_USB_LENGTH, len );
		s = WaitHostTransact374( out_endp_addr, DEF_USB_PID_OUT, TRUE, 1000 );
		s = WaitHostTransact374( in_endp_addr, DEF_USB_PID_IN, TRUE, 1000 );
		len = Read374Byte( REG_USB_LENGTH );
		Read374Block( RAM_HOST_RECV, len, buf );
*/
		printf( "do something, read / write ......\n" );

WaitDeviceOut:  // 等待USB設備拔出
		for( mm = 0; mm < 700; mm++ ) xbuf[mm] = 0;
		if( kk ) printf("Root hub removed\n");
		else printf( "Wait Device Out\n" );
		kk = 0;
		
		while ( 1 ) {
			if ( Query374Interrupt( ) ) HostDetectInterrupt( );  // 如果有USB主機中斷則處理
			if ( Query374DeviceIn( ) == FALSE ) break;  // 沒有USB設備
		}
		mDelaymS( 100 );  // 等待設備完全斷開,消除插拔抖動
		if ( Query374DeviceIn( ) ) goto WaitDeviceOut;  // 沒有完全斷開
//		HostSetBusFree( );  // 設定USB主機空閑,主要目的是關閉SOF
		for( mm = 0; mm < 700; mm++ ) xbuf[mm] = 0;
		
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品福利在线| 亚洲一区二区五区| 亚洲精品一区二区三区影院| 欧美日韩不卡视频| 欧美性猛交一区二区三区精品| 91在线无精精品入口| 99久久国产综合精品色伊| 99久久久久久| 日本道在线观看一区二区| 91色婷婷久久久久合中文| 色综合中文字幕| 欧美视频一区二| 日韩一区二区三免费高清| 精品精品国产高清a毛片牛牛| 欧美电影免费提供在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 久久夜色精品一区| 中文在线资源观看网站视频免费不卡 | av亚洲产国偷v产偷v自拍| 国产精品白丝jk白祙喷水网站 | youjizz久久| 91亚洲国产成人精品一区二三| 日本黄色一区二区| 欧美日韩一区二区在线观看 | 欧美国产乱子伦| 自拍偷拍亚洲欧美日韩| 亚洲尤物在线视频观看| 蜜桃91丨九色丨蝌蚪91桃色| 韩国av一区二区三区| 丁香啪啪综合成人亚洲小说 | 日韩欧美在线1卡| 国产亚洲精品超碰| 亚洲黄一区二区三区| 免费高清不卡av| 国精产品一区一区三区mba视频| 国产成人啪免费观看软件| 色老汉一区二区三区| 日韩视频永久免费| 国产精品女同一区二区三区| 亚洲电影一区二区| 国产一区二区在线电影| 91福利视频网站| 欧美mv和日韩mv的网站| 综合激情网...| 久久福利资源站| 成人美女视频在线观看18| 欧美伦理电影网| 国产香蕉久久精品综合网| 亚洲综合色丁香婷婷六月图片| 麻豆一区二区三| 99久久婷婷国产精品综合| 欧美一区二区在线免费观看| 国产精品久久一级| 免费观看一级欧美片| 91福利精品视频| 久久蜜桃av一区精品变态类天堂| 亚洲一区二区三区四区在线免费观看 | 麻豆精品一区二区三区| 成人国产精品免费| 91精品国产综合久久精品麻豆| 久久蜜桃一区二区| 亚洲成人精品影院| 国产在线国偷精品免费看| 欧美年轻男男videosbes| 国产精品久久免费看| 毛片av一区二区三区| 欧美在线观看视频在线| 国产精品三级av| 久久99精品久久久久婷婷| 欧美在线视频你懂得| 国产精品亲子乱子伦xxxx裸| 麻豆成人av在线| 欧美日韩色综合| 亚洲女爱视频在线| 国产乱子伦一区二区三区国色天香| 在线观看精品一区| 国产精品乱人伦| 国产精品夜夜爽| 精品黑人一区二区三区久久| 婷婷一区二区三区| 欧美亚洲国产一区在线观看网站| 中文字幕成人av| 国产风韵犹存在线视精品| 欧美一区二区免费| 午夜精品久久久| 色婷婷av一区| 亚洲美女视频一区| www.日韩精品| 国产精品视频九色porn| 国产91精品免费| 久久久久亚洲蜜桃| 国产乱码精品1区2区3区| 制服丝袜日韩国产| 日韩中文字幕不卡| 7777精品伊人久久久大香线蕉的 | www.欧美.com| 国产精品久久久久婷婷| 国产乱人伦偷精品视频免下载 | 亚洲欧美视频在线观看| 日韩国产一二三区| 国产亚洲成av人在线观看导航| 国产精品欧美一级免费| 国产ts人妖一区二区| 国产欧美精品在线观看| 成人性生交大片免费看在线播放 | 久久久久久毛片| 国产黄人亚洲片| 中文久久乱码一区二区| 成人的网站免费观看| 专区另类欧美日韩| 91成人在线免费观看| 午夜精品福利一区二区蜜股av | 国产精品久久久久久亚洲伦| 成人午夜视频福利| 中文字幕在线不卡一区| 色欧美日韩亚洲| 亚洲chinese男男1069| 91精品国产美女浴室洗澡无遮挡| 美女网站在线免费欧美精品| 26uuu色噜噜精品一区二区| 国产精品456| 亚洲色大成网站www久久九九| 色天天综合久久久久综合片| 亚洲二区在线观看| 欧美大肚乱孕交hd孕妇| 国产成人av一区二区三区在线观看| 中文字幕免费在线观看视频一区| 91一区二区三区在线观看| 亚洲妇熟xx妇色黄| 亚洲精品在线观看网站| 99久久婷婷国产综合精品| 亚洲图片欧美色图| 久久这里只精品最新地址| 99精品视频中文字幕| 亚洲国产精品精华液网站| 欧美一区二区精美| av亚洲精华国产精华| 婷婷激情综合网| 国产欧美在线观看一区| 欧美视频一区二区三区在线观看| 久久精品国产一区二区| 中文字幕日韩av资源站| 欧美一区二视频| a亚洲天堂av| 日本怡春院一区二区| 国产亚洲成av人在线观看导航| 在线观看三级视频欧美| 精品综合久久久久久8888| 亚洲欧美色图小说| 欧美变态凌虐bdsm| 色综合久久综合网97色综合 | 91久久线看在观草草青青| 日本一不卡视频| 国产精品国产精品国产专区不片| 欧美日韩中文字幕一区二区| 国模一区二区三区白浆| 一区二区三国产精华液| 久久夜色精品国产欧美乱极品| 色综合欧美在线视频区| 国产一区二区三区日韩| 亚洲一区二区偷拍精品| 欧美国产激情一区二区三区蜜月| 欧美日韩国产另类不卡| 成人免费视频免费观看| 蜜桃精品视频在线| 亚洲综合在线观看视频| 欧美国产97人人爽人人喊| 91精品国产一区二区三区香蕉| av福利精品导航| 国产一区二区三区免费观看| 亚洲国产日韩一级| 18涩涩午夜精品.www| 久久精品亚洲国产奇米99| 欧美日韩1区2区| 日本韩国欧美国产| 成人午夜电影久久影院| 老司机精品视频线观看86 | 91久久香蕉国产日韩欧美9色| 国产精品综合网| 美国av一区二区| 婷婷综合五月天| 亚洲伊人伊色伊影伊综合网| 亚洲国产成人私人影院tom| 26uuu色噜噜精品一区| 日韩一级精品视频在线观看| 欧美色图一区二区三区| 色婷婷激情久久| 色狠狠色狠狠综合| 一本大道av一区二区在线播放| 国产成人精品综合在线观看| 国产曰批免费观看久久久| 日韩高清一区二区| 日韩电影在线观看网站| 五月婷婷欧美视频| 亚洲国产另类av| 亚洲成人av一区二区三区| 一区二区三区四区五区视频在线观看 | 青青草成人在线观看| 亚洲精品乱码久久久久久久久| 中文欧美字幕免费|