⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgpgconfiguration.cpp

📁 1394测试程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                LocalHostInfo1 = (PGET_LOCAL_HOST_INFO1)&pGetLocalHostInfo->Information;
			} else 
			{
				PrintOut(NL"GetLocalHostInfo(UniqueID) failed"NL);
				PrintError(Status);
			}
			LocalFree(pGetLocalHostInfo);//释放
		}

		if ( m_nEachValue == 1 ) //GET_HOST_CAPABILITIES GET_LOCAL_HOST_INFO2 主机性能标记
		{
			nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO2);
			pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
			pGetLocalHostInfo->Status = 0;
			pGetLocalHostInfo->nLevel = GET_HOST_CAPABILITIES;
			pGetLocalHostInfo->ulBufferSize = nLength;

			// call driver (through class library)
			DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
			if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0  ) 
			{
				// display information	
				PrintOut("get host success"NL);
				PGET_LOCAL_HOST_INFO2   LocalHostInfo2;
                LocalHostInfo2 = (PGET_LOCAL_HOST_INFO2)&pGetLocalHostInfo->Information;
			} else {
				PrintOut(NL"GetLocalHostInfo(Capabilities) failed"NL);
				PrintError(Status);
			}
		}

		if ( m_nEachValue == 2 ) //GET_POWER_SUPPLIED GET_LOCAL_HOST_INFO3 电源
		{
			nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO3);
			pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
			pGetLocalHostInfo->Status = 0;
			pGetLocalHostInfo->nLevel = GET_POWER_SUPPLIED;
			pGetLocalHostInfo->ulBufferSize = nLength;

			// call driver (through class library)
			DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
			if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 ) 
			{
				// display information
				PrintOut("get host success"NL);
				PGET_LOCAL_HOST_INFO3   LocalHostInfo3;
                LocalHostInfo3 = (PGET_LOCAL_HOST_INFO3)&pGetLocalHostInfo->Information;
			} else {
				PrintOut(NL"GetLocalHostInfo(PowerSupplied) failed"NL);
				PrintError(Status);
			}
		}

		if ( m_nEachValue == 3 ) //GET_PHYS_ADDR_ROUTINE GET_LOCAL_HOST_INFO4 
		{
			nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO4);
			pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
			pGetLocalHostInfo->Status = 0;
			pGetLocalHostInfo->nLevel = GET_PHYS_ADDR_ROUTINE;
			pGetLocalHostInfo->ulBufferSize = nLength;
		
			// call driver (through class library)
			DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
			if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 ) 
			{
				// display information	
				PrintOut("get host success"NL);
				PGET_LOCAL_HOST_INFO4   LocalHostInfo4;
                LocalHostInfo4 = (PGET_LOCAL_HOST_INFO4)&pGetLocalHostInfo->Information;
			} else {
				PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
				PrintError(Status);
			}
		}
		
		if ( m_nEachValue == 4 ) //GET_HOST_CONFIG_ROM GET_LOCAL_HOST_INFO5 
		{
			nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO5);
			pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
			pGetLocalHostInfo->Status = 0;
			pGetLocalHostInfo->nLevel = GET_HOST_CONFIG_ROM;
			pGetLocalHostInfo->ulBufferSize = nLength;
			PGET_LOCAL_HOST_INFO5           LocalHostInfo5;
			LocalHostInfo5 = (PGET_LOCAL_HOST_INFO5)&pGetLocalHostInfo->Information;
			
			// call driver (through class library)
			DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
			if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 ) 
			{
				// display information	
				PrintOut("get host success"NL);
			} 
			else if( pGetLocalHostInfo->Status )//分配的缓冲区不够
			{
				// we should have our buffer info.
                ULONG ulConfigRomLength;
                ulConfigRomLength = LocalHostInfo5->ConfigRomLength;

                LocalFree(pGetLocalHostInfo);

                // start over with a big enough buffer
                nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO5) + ulConfigRomLength;
		
                pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
                LocalHostInfo5 = (PGET_LOCAL_HOST_INFO5)&pGetLocalHostInfo->Information;

                pGetLocalHostInfo->nLevel = GET_HOST_CONFIG_ROM;//5
                pGetLocalHostInfo->ulBufferSize = nLength;
                LocalHostInfo5->ConfigRomLength = ulConfigRomLength;
				//分配足够的地址,再次发送IRP
                Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
				if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 ) 
				{
					// display information	
					PrintOut("get host success"NL);
				}
				else
				{
					PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
					PrintError(Status);
				}
			}
			else
			{
				PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
				PrintError(Status);
			}
		}

		if ( m_nEachValue == 5 || m_nEachValue == 6 ) //GET_HOST_CSR_CONTENTS GET_LOCAL_HOST_INFO6 
		{			
			nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO6);
			pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
			pGetLocalHostInfo->nLevel = GET_HOST_CSR_CONTENTS;
			pGetLocalHostInfo->ulBufferSize = nLength;

			PGET_LOCAL_HOST_INFO6           LocalHostInfo6;
			LocalHostInfo6 = (PGET_LOCAL_HOST_INFO6)&pGetLocalHostInfo->Information;
			
			ULONG CsrDataAddress;
			if( m_nEachValue == 5 )
				CsrDataAddress = SPEED_MAP_LOCATION;
			else if( m_nEachValue == 6 )
				CsrDataAddress = TOPOLOGY_MAP_LOCATION;
			
			LocalHostInfo6->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
			LocalHostInfo6->CsrBaseAddress.Off_Low = CsrDataAddress;
			pGetLocalHostInfo->Status = CsrDataAddress;
			// call driver (through class library)
			DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
			
			 if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
			 {
				// display information	
				PrintOut("get host success"NL);
			 }
			 else if( pGetLocalHostInfo->Status )//分配的缓冲区不够
			 {			
                // we should have our buffer info.
                ULONG CsrDataLength;
                CsrDataLength = LocalHostInfo6->CsrDataLength;

                LocalFree(pGetLocalHostInfo);

                // start over with a big enough buffer
                nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO6) + CsrDataLength;
		
                pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
                LocalHostInfo6 = (PGET_LOCAL_HOST_INFO6)&pGetLocalHostInfo->Information;

                pGetLocalHostInfo->nLevel = GET_HOST_CSR_CONTENTS;//6
                pGetLocalHostInfo->ulBufferSize = nLength;

                LocalHostInfo6->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
                LocalHostInfo6->CsrBaseAddress.Off_Low = CsrDataAddress;
                LocalHostInfo6->CsrDataLength = CsrDataLength;
				//分配足够的地址,再次发送IRP
                Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);

				if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
				{
					// display information	
					PrintOut("get host success"NL);			

					if (LocalHostInfo6->CsrBaseAddress.Off_Low == SPEED_MAP_LOCATION)//需要得到node count
					{
						PSPEED_MAP                      SpeedMap;
						PGET_LOCAL_HOST_INFORMATION     pGetTopologyMap;
						PGET_LOCAL_HOST_INFO6           pTopologyInfo;
						PTOPOLOGY_MAP                   TopologyMap;
						ULONG                           NodeCount, i, j;

						SpeedMap = (PSPEED_MAP)&LocalHostInfo6->CsrDataBuffer;

						// get the node count from the topology map
						pGetTopologyMap = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, sizeof(GET_LOCAL_HOST_INFO6) + 4096);

						pGetTopologyMap->ulBufferSize = sizeof(GET_LOCAL_HOST_INFO6) + 4096;
						pGetTopologyMap->nLevel = 6;
						pTopologyInfo = (PGET_LOCAL_HOST_INFO6)&pGetTopologyMap->Information;

						pTopologyInfo->CsrDataLength = 4096; //0x400;
						pTopologyInfo->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
						pTopologyInfo->CsrBaseAddress.Off_Low = TOPOLOGY_MAP_LOCATION;

						Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);

						TopologyMap = (PTOPOLOGY_MAP)&pTopologyInfo->CsrDataBuffer;
						NodeCount = TopologyMap->TOP_Node_Count;

						LocalFree(TopologyMap);
						//得到node count,显示
						
					}
					if (LocalHostInfo6->CsrBaseAddress.Off_Low == TOPOLOGY_MAP_LOCATION) 
					{
					}
				}
				else 
				{	
					PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
					PrintError(Status);
				}
            }
			else 
			{
				PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
				PrintError(Status);
			}
		}
		LocalFree(pGetLocalHostInfo);
	}
}

void CDlgPgConfiguration::OnButtonHcSet() 
{
	/*
	typedef struct _SET_LOCAL_HOST_PROPERTIES 
	{
	  ULONG Type;
	  union 
	  {
		struct 
		{
			ULONG GapCountLowerBound;
		} HCPropGapCountLowerBound;
	  } u;
	} SET_LOCAL_HOST_PROPERTIES,*PSET_LOCAL_HOST_PROPERTIES;
	*/
	SET_LOCAL_HOST_PROPERTIES SetLocalHostPro;
	if ( UpdateData(TRUE)	) 
	{
		if ( m_CheckHCSetGapCount ) 
		{
			SetLocalHostPro.Type = SET_LOCAL_HOST_PROPERTIES_GAP_COUNT;
			SetLocalHostPro.u.HCPropGapCountLowerBound.GapCountLowerBound = m_ValHCGapCount;
			// call driver (through class library)
			DWORD Status = g_CurrentDev.SetLocalHostProperties(&SetLocalHostPro);
			if (Status == STATUS_SUCCESS) 
			{
				PrintOut("New Host Controller Gap Count Bound successfully set"NL);
			}
			else 
			{
				PrintOut(NL"SetLocalHostProperties(GapCountLowerBound) failed"NL);
				PrintError(Status);
			}
			PrintOut(NL);
		}
	}
}


void CDlgPgConfiguration::OnCheckHCGapCount() 
{
	UpdateEditBoxesStates();
}


void CDlgPgConfiguration::UpdateCheckBoxes()
{	
	if ( m_ValUnitDirSize == 0 ) 
	{
		m_ButtonGetUnitDir.EnableWindow(FALSE);
	} else {
		m_ButtonGetUnitDir.EnableWindow(TRUE);
	}

	if ( m_ValUnitDepDirSize == 0 ) 
	{
		m_ButtonGetUnitDepDir.EnableWindow(FALSE);
	} else {
		m_ButtonGetUnitDepDir.EnableWindow(TRUE);
	}

	if ( m_ValVendorLeafSize == 0 ) 
	{
		m_ButtonGetVendorLeaf.EnableWindow(FALSE);
	} else {
		m_ButtonGetVendorLeaf.EnableWindow(TRUE);
	}

	if ( m_ValModelLeafSize == 0 ) 
	{
		m_ButtonGetModelLeaf.EnableWindow(FALSE);
	} else {
		m_ButtonGetModelLeaf.EnableWindow(TRUE);
	}
}


void CDlgPgConfiguration::UpdateEditBoxesStates()
{
	if ( m_ButtonHCSetGapCount.GetCheck()==0 ) 
	{
		// checkbox is unchecked
		m_EditCtrlHCGapCountValue.EnableWindow(FALSE);
	} 
	else 
	{
		m_EditCtrlHCGapCountValue.EnableWindow(TRUE);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -