在国外BBS上找到的获取BDA设备信号统计值方法

原文地址:http://forums.dvbowners.com/index.php?showtopic=1111&st=20

 

一开始被这个难住了,还以为要学WDK/DDK呢。。。还好还好,也许用这个可以

 

HRESULT hr2; CComPtr <IBDA_Topology> bdaNetTop; hr2 = m_pTunerDevice.QueryInterface(&bdaNetTop); if (FAILED(hr2)) { ErrorMessageBox(TEXT("Cannot Find IID_IBDA_Topologyn")); } CComPtr <IUnknown> unknown; hr2 = bdaNetTop->GetControlNode(0, 1, 1, &unknown); if (FAILED(hr2)) { ErrorMessageBox(TEXT("Cannot GetControlNoden")); } CComPtr <IBDA_SignalStatistics> pSigStats; hr2 = unknown.QueryInterface(&pSigStats); if (FAILED(hr2)) { ErrorMessageBox(TEXT("Cannot get IBDA_SignalStatisticsn")); } long quality = -1; hr2 = pSigStats->get_SignalQuality(&quality); if (FAILED(hr2)) { ErrorMessageBox(TEXT("Cannot get_SignalQualityn")); } else { char buff[128]; sprintf(buff, "Signal Quality = %d", quality); ErrorMessageBox(TEXT(buff)); }

 

弄了一下午,没搞定。。。。信号质量一直是0.。。苦闷。。。

 

又找了一些代码:

/**** My source code list below Code 1 show that we can't get IBDA_AutoDemodulate from our Demode node, but we have define it in BDA driver. Code 2 show that call get_SignalPresent( ) on Demod node but fail, if we do the same thing on Tuner node , it success. We sure that we define the corresponding function in BDA driver. ****/ //================================================= //Code 1: CComPtr <IBDA_Topology> pITopology; CComPtr <IBDA_AutoDemodulate> m_pIAutoDemod; CComPtr <IBDA_DigitalDemodulator> m_pIDigiDemod; hr = m_pTunerDevice->QueryInterface(IID_IBDA_Topology, reinterpret_cast<void**>(&pITopology) ); ULONG nNodesTypeNum = 0; ULONG NodesType[10]; hr = pITopology->GetNodeTypes(&nNodesTypeNum, 10, NodesType); CComPtr <IUnknown> pIUknow; // NodesType[1] is the Demod node hr = pITopology->GetControlNode(0, 1, NodesType[1], &pIUknow); ULONG nInterfacesNum = 0; GUID InterfacesGUID[10]; // After this call, we sure that InerfacesGUID[0] == IID_IBDA_AutoDemodulate // and InerfacesGUID[1] == IID_IBDA_DigitalDemodulator hr = pITopology->GetNodeInterfaces(NodesType[1], &nInterfacesNum, 10, InerfacesGUID); // Call this fail hr = pIUknow->QueryInterface(IID_IBDA_AutoDemodulate, (void **)&m_pIAutoDemod); // Call this success hr = pIUknow-> QueryInterface(IID_IBDA_DigitalDemodulat or, (void **)&m_pIDigiDemod); //================================================ //Code 2: CComPtr <IBDA_Topology> pITopology; hr = m_pTunerDevice->QueryInterface(IID_IBDA_Topology, reinterpret_cast<void**>(&pITopology) ); ULONG nNodesTypeNum = 0; ULONG NodesType[10]; hr = pITopology->GetNodeTypes(&nNodesTypeNum, 10, NodesType); CComPtr <IUnknown> pIUknow; // NodesType[1] is the Demod node hr = pITopology->GetControlNode(0, 1, NodesType[1], &pIUknow); // success hr = pIUknow-> QueryInterface(IID_IBDA_SignalStatistics , (void **)&m_pIDemodSignal); m_pIDemodSignal->get_SampleTime(&m_SampleTime); //fail m_pIDemodSignal->get_SignalLocked(&m_SignalLocked); //success m_pIDemodSignal->get_SignalPresent(&m_SignalPresent); //fail m_pIDemodSignal->get_SignalQuality(&m_SignalQuality); //success m_pIDemodSignal->get_SignalStrength(&m_SignalStrength);//fail

你可能感兴趣的:(在国外BBS上找到的获取BDA设备信号统计值方法)