Author: janderwald
Date: Wed Feb 24 19:37:07 2010
New Revision: 45680
URL:
http://svn.reactos.org/svn/reactos?rev=45680&view=rev
Log:
[BDAPLGIN]
- Implement IBDA_Topology::GetNodeTypes, IBDA_Topology::GetNodeDescriptors,
IBDA_Topology::GetNodeInterfaces, IBDA_Topology::GetPinTypes,
IBDA_Topology::CreateTopology, IBDA_Topology::GetControlNode
- Implement stub interfaces for control node, IBDA_DigitalDemodulator,
IBDA_FrequencyFilter, IBDA_LNBInfo, IBDA_SignalStatistics
Added:
trunk/reactos/dll/directx/bdaplgin/controlnode.cpp (with props)
trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp (with props)
trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp (with props)
trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp (with props)
trunk/reactos/dll/directx/bdaplgin/signalstatistics.cpp (with props)
Modified:
trunk/reactos/dll/directx/bdaplgin/bdaplgin.cpp
trunk/reactos/dll/directx/bdaplgin/bdaplgin.rbuild
trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp
trunk/reactos/dll/directx/bdaplgin/pincontrol.cpp
trunk/reactos/dll/directx/bdaplgin/precomp.h
Modified: trunk/reactos/dll/directx/bdaplgin/bdaplgin.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/bdapl…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/bdaplgin.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/bdaplgin.cpp [iso-8859-1] Wed Feb 24 19:37:07 2010
@@ -31,6 +31,7 @@
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
+ CoInitialize(NULL);
OutputDebugStringW(L"BDAPLGIN::DllMain()\n");
DisableThreadLibraryCalls(hInstDLL);
break;
Modified: trunk/reactos/dll/directx/bdaplgin/bdaplgin.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/bdapl…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/bdaplgin.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/bdaplgin.rbuild [iso-8859-1] Wed Feb 24 19:37:07
2010
@@ -10,6 +10,7 @@
<library>ole32</library>
<library>advapi32</library>
<library>msvcrt</library>
+ <library>ksproxy</library>
<group compilerset="gcc">
<compilerflag compiler="cxx">-fno-exceptions</compilerflag>
<compilerflag compiler="cxx">-fno-rtti</compilerflag>
@@ -21,7 +22,12 @@
<file>bdaplgin.cpp</file>
<file>bdaplgin.rc</file>
<file>classfactory.cpp</file>
+ <file>controlnode.cpp</file>
<file>devicecontrol.cpp</file>
+ <file>digitaldemo.cpp</file>
+ <file>frequencyfilter.cpp</file>
+ <file>lnbinfo.cpp</file>
<file>pincontrol.cpp</file>
+ <file>signalstatistics.cpp</file>
</module>
</group>
Added: trunk/reactos/dll/directx/bdaplgin/controlnode.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/contr…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/controlnode.cpp (added)
+++ trunk/reactos/dll/directx/bdaplgin/controlnode.cpp [iso-8859-1] Wed Feb 24 19:37:07
2010
@@ -1,0 +1,118 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/controlnode.cpp
+ * PURPOSE: ControlNode interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald(a)reactos.org)
+ */
+
+#include "precomp.h"
+
+class CControlNode : public IUnknown
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ CControlNode(IUnknown * pUnkOuter, ULONG NodeType, ULONG PinId) : m_Ref(0),
m_pUnkOuter(pUnkOuter), m_NodeType(NodeType), m_PinId(PinId){};
+ virtual ~CControlNode(){};
+
+protected:
+ LONG m_Ref;
+ IUnknown * m_pUnkOuter;
+ ULONG m_NodeType;
+ ULONG m_PinId;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CControlNode::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast<IUnknown*>(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
+ {
+ return CBDAFrequencyFilter_fnConstructor(m_pUnkOuter, refiid, Output);
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
+ {
+ return CBDASignalStatistics_fnConstructor(m_pUnkOuter, refiid, Output);
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_LNBInfo))
+ {
+ return CBDALNBInfo_fnConstructor(m_pUnkOuter, refiid, Output);
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
+ {
+ return CBDADigitalDemodulator_fnConstructor(m_pUnkOuter, refiid, Output);
+ }
+
+
+
+
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s",
lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+
+HRESULT
+WINAPI
+CControlNode_fnConstructor(
+ IUnknown * pUnkOuter,
+ ULONG NodeType,
+ ULONG PinId,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // sanity check
+ assert(pUnkOuter);
+
+ // construct device control
+ CControlNode * handler = new CControlNode(pUnkOuter, NodeType, PinId);
+
+ OutputDebugStringW(L"CControlNode_fnConstructor\n");
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
Propchange: trunk/reactos/dll/directx/bdaplgin/controlnode.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/devic…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp [iso-8859-1] Wed Feb 24 19:37:07
2010
@@ -9,8 +9,18 @@
#include "precomp.h"
+const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5,
0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
+const GUID IID_IAC3Filter = {0xe4539501, 0xc609, 0x46ea, {0xad, 0x2a, 0x0e, 0x97,
0x00, 0x24, 0x56, 0x83}};
+const GUID IID_IAsyncReader = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20,
0xAF, 0x0B, 0xA7, 0x70}};
+const GUID IID_IMatrixMixer = {0xafc57835, 0x2fd1, 0x4541, {0xa6, 0xd9, 0x0d, 0xb7,
0x18, 0x56, 0xe5, 0x89}};
+const GUID IID_IBDA_NetworkProvider = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00,
0xaa, 0x00, 0x57, 0x7d, 0xa2}};
+const GUID IID_IAMOpenProgress = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80,
0xC7, 0x44, 0x52, 0x8D}};
+const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20,
0xaf, 0x0b, 0xa7, 0x70}};
const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0,
0x4F, 0x79, 0x71, 0xE0}};
const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD,
0x3C, 0x78, 0x49, 0xBE}};
+const GUID IID_IKsObject = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00,
0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0,
0x4f, 0x79, 0x71, 0xe0}};
+const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c,
0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
class CBDADeviceControl : public IBDA_DeviceControl,
public IBDA_Topology
@@ -54,11 +64,12 @@
HRESULT STDMETHODCALLTYPE CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId);
HRESULT STDMETHODCALLTYPE GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId,
ULONG ulNodeType, IUnknown **ppControlNode);
- CBDADeviceControl(HANDLE hFile) : m_Ref(0), m_Handle(hFile){};
+ CBDADeviceControl(IUnknown * pUnkOuter, HANDLE hFile) : m_Ref(0),
m_pUnkOuter(pUnkOuter), m_Handle(hFile){};
virtual ~CBDADeviceControl(){};
protected:
LONG m_Ref;
+ IUnknown * m_pUnkOuter;
HANDLE m_Handle;
};
@@ -92,6 +103,45 @@
reinterpret_cast<IBDA_Topology*>(*Output)->AddRef();
return NOERROR;
}
+#if 0
+ if (IsEqualIID(refiid, IID_IDistributorNotify))
+ {
+ OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No
IDistributorNotify interface\n");
+ return E_NOINTERFACE;
+ }
+
+ if (IsEqualGUID(refiid, IID_IAMOpenProgress))
+ {
+ OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IAMOpenProgress
interface\n");
+ return E_NOINTERFACE;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider))
+ {
+ HRESULT hr = CoCreateInstance(CLSID_DVBTNetworkProvider, 0, CLSCTX_INPROC,
IID_IBDA_NetworkProvider, (void**)Output);
+ swprintf(Buffer, L"CBDADeviceControl::QueryInterface: failed to construct
IID_IBDA_NetworkProvider interface with %lx", hr);
+ OutputDebugStringW(Buffer);
+ return hr;
+ }
+
+ if (IsEqualGUID(refiid, IID_IMatrixMixer))
+ {
+ OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IID_IMatrixMixer
interface\n");
+ return E_NOINTERFACE;
+ }
+
+ if (IsEqualGUID(refiid, IID_IAsyncReader))
+ {
+ OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IID_IAsyncReader
interface\n");
+ return E_NOINTERFACE;
+ }
+
+ if (IsEqualGUID(refiid, IID_IAC3Filter))
+ {
+ OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IID_IAC3Filter
interface\n");
+ return E_NOINTERFACE;
+ }
+#endif
StringFromCLSID(refiid, &lpstr);
swprintf(Buffer, L"CBDADeviceControl::QueryInterface: NoInterface for %s",
lpstr);
@@ -146,32 +196,102 @@
STDMETHODCALLTYPE
CBDADeviceControl::GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG *
rgulNodeTypes)
{
- OutputDebugStringW(L"CBDADeviceControl::GetNodeTypes: NotImplemented\n");
- return E_NOTIMPL;
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+ WCHAR Buffer[100];
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaTopology;
+ Property.Id = KSPROPERTY_BDA_NODE_TYPES;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property,
sizeof(KSPROPERTY), rgulNodeTypes, sizeof(ULONG) * ulcNodeTypesMax, &BytesReturned);
+
+ *pulcNodeTypes = (BytesReturned / sizeof(ULONG));
+
+ swprintf(Buffer, L"CBDADeviceControl::GetNodeTypes: hr %lx, BytesReturned
%lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ return hr;
}
HRESULT
STDMETHODCALLTYPE
CBDADeviceControl::GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG
ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors)
{
- OutputDebugStringW(L"CBDADeviceControl::GetNodeDescriptors:
NotImplemented\n");
- return E_NOTIMPL;
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+ WCHAR Buffer[100];
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaTopology;
+ Property.Id = KSPROPERTY_BDA_NODE_DESCRIPTORS;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property,
sizeof(KSPROPERTY), rgNodeDescriptors, sizeof(BDANODE_DESCRIPTOR) * ulcNodeDescriptorsMax,
&BytesReturned);
+
+ *ulcNodeDescriptors = (BytesReturned / sizeof(BDANODE_DESCRIPTOR));
+
+ swprintf(Buffer, L"CBDADeviceControl::GetNodeDescriptors: hr %lx, BytesReturned
%lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ return hr;
}
HRESULT
STDMETHODCALLTYPE
CBDADeviceControl::GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG
ulcInterfacesMax, GUID * rgguidInterfaces)
{
- OutputDebugStringW(L"CBDADeviceControl::GetNodeInterfaces:
NotImplemented\n");
- return E_NOTIMPL;
+ KSP_NODE Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+ WCHAR Buffer[100];
+
+ // setup request
+ Property.Property.Set = KSPROPSETID_BdaTopology;
+ Property.Property.Id = KSPROPERTY_BDA_NODE_PROPERTIES;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.NodeId = ulNodeType;
+ Property.Reserved = 0;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property,
sizeof(KSP_NODE), rgguidInterfaces, sizeof(GUID) * ulcInterfacesMax, &BytesReturned);
+
+ *pulcInterfaces = (BytesReturned / sizeof(GUID));
+
+ swprintf(Buffer, L"CBDADeviceControl::GetNodeInterfaces: hr %lx, BytesReturned
%lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ return hr;
}
HRESULT
STDMETHODCALLTYPE
CBDADeviceControl::GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG
*rgulPinTypes)
{
- OutputDebugStringW(L"CBDADeviceControl::GetPinTypes: NotImplemented\n");
- return E_NOTIMPL;
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+ WCHAR Buffer[100];
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaTopology;
+ Property.Id = KSPROPERTY_BDA_PIN_TYPES;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property,
sizeof(KSPROPERTY), rgulPinTypes, sizeof(ULONG) * ulcPinTypesMax, &BytesReturned);
+
+ *pulcPinTypes = (BytesReturned / sizeof(ULONG));
+
+ swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: hr %lx, BytesReturned
%lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ return hr;
}
HRESULT
@@ -216,18 +336,60 @@
HRESULT
STDMETHODCALLTYPE
-CBDADeviceControl::CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId){
- OutputDebugStringW(L"CBDADeviceControl::CreateTopology:
NotImplemented\n");
- return E_NOTIMPL;
-}
-
+CBDADeviceControl::CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId)
+{
+ KSM_BDA_PIN_PAIR Method;
+ WCHAR Buffer[100];
+ HRESULT hr;
+ ULONG BytesReturned = 0;
+
+ Method.Method.Flags = 0;
+ Method.Method.Id = KSMETHOD_BDA_CREATE_TOPOLOGY;
+ Method.Method.Set = KSMETHODSETID_BdaDeviceConfiguration;
+ Method.InputPinId = ulInputPinId;
+ Method.OutputPinId = ulOutputPinId;
+
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_METHOD, (PVOID)&Method,
sizeof(KSM_BDA_PIN_PAIR), NULL, 0, &BytesReturned);
+
+ swprintf(Buffer, L"CBDADeviceControl::CreateTopology: hr %lx, BytesReturned
%lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ return hr;
+}
HRESULT
STDMETHODCALLTYPE
CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG
ulNodeType, IUnknown **ppControlNode)
{
- OutputDebugStringW(L"CBDADeviceControl::GetControlNode:
NotImplemented\n");
- return E_NOTIMPL;
+ KSP_BDA_NODE_PIN Property;
+ ULONG Dummy = 0;
+ HRESULT hr;
+ ULONG PinId = 0;
+ ULONG BytesReturned;
+ WCHAR Buffer[100];
+
+ //setup request
+ Property.Property.Set = KSPROPSETID_BdaTopology;
+ Property.Property.Id = KSPROPERTY_BDA_CONTROLLING_PIN_ID;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.ulInputPinId = ulInputPinId;
+ Property.ulOutputPinId = ulOutputPinId;
+ Property.ulNodeType = ulNodeType;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property,
sizeof(KSP_BDA_NODE_PIN) + sizeof(ULONG), &PinId, sizeof(ULONG), &BytesReturned);
+
+ swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx, BytesReturned %lu
PinId %lu Dummy %lu\n", hr, BytesReturned, PinId, Dummy);
+ OutputDebugStringW(Buffer);
+
+ if (FAILED(hr))
+ return hr;
+
+ hr = CControlNode_fnConstructor(m_pUnkOuter, ulNodeType, PinId, IID_IUnknown,
(LPVOID*)ppControlNode);
+
+ swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ return hr;
}
HRESULT
@@ -237,7 +399,33 @@
REFIID riid,
LPVOID * ppv)
{
- CBDADeviceControl * handler = new CBDADeviceControl(NULL);
+ HRESULT hr;
+ IKsObject *pObject = NULL;
+ HANDLE hFile;
+
+ // sanity check
+ assert(pUnkOuter);
+
+ // query for IKsObject
+ hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ // sanity check
+ assert(hr == NOERROR);
+
+ // another sanity check
+ assert(pObject != NULL);
+
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+
+ // one more sanity check
+ assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
+
+ // release IKsObject interface
+ pObject->Release();
+
+ // construct device control
+ CBDADeviceControl * handler = new CBDADeviceControl(pUnkOuter, hFile);
OutputDebugStringW(L"CBDADeviceControl_fnConstructor\n");
Added: trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/digit…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp (added)
+++ trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp [iso-8859-1] Wed Feb 24 19:37:07
2010
@@ -1,0 +1,254 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/digitaldemo.cpp
+ * PURPOSE: IBDA_DigitalDemodulator interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald(a)reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_DigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7,
0x9d, 0x5e, 0x04, 0xe1, 0xe0}};
+
+class CBDADigitalDemodulator : public IBDA_DigitalDemodulator
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+ //IBDA_DigitalDemodulator methods
+ HRESULT STDMETHODCALLTYPE put_ModulationType(ModulationType *pModulationType);
+ HRESULT STDMETHODCALLTYPE get_ModulationType(ModulationType *pModulationType);
+ HRESULT STDMETHODCALLTYPE put_InnerFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE get_InnerFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE get_InnerFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE put_OuterFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE get_OuterFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE get_OuterFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE put_SymbolRate(ULONG *pSymbolRate);
+ HRESULT STDMETHODCALLTYPE get_SymbolRate(ULONG *pSymbolRate);
+ HRESULT STDMETHODCALLTYPE put_SpectralInversion(SpectralInversion
*pSpectralInversion);
+ HRESULT STDMETHODCALLTYPE get_SpectralInversion(SpectralInversion
*pSpectralInversion);
+
+ CBDADigitalDemodulator(HANDLE hFile) : m_Ref(0), m_hFile(hFile){};
+ ~CBDADigitalDemodulator(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast<IUnknown*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
+ {
+ *Output = (IBDA_DigitalDemodulator*)(this);
+ reinterpret_cast<IBDA_DigitalDemodulator*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for
%s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_ModulationType(ModulationType *pModulationType)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::put_ModulationType
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_ModulationType(ModulationType *pModulationType)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::get_ModulationType
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_InnerFECMethod(FECMethod *pFECMethod)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::put_InnerFECMethod
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_InnerFECMethod(FECMethod *pFECMethod)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::get_InnerFECMethod
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::put_InnerFECRate
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::get_InnerFECRate
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_OuterFECMethod(FECMethod *pFECMethod)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::put_OuterFECMethod
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE CBDADigitalDemodulator::get_OuterFECMethod(FECMethod *pFECMethod)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::get_OuterFECMethod
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::put_OuterFECRate
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::get_OuterFECRate
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_SymbolRate(ULONG *pSymbolRate)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::put_SymbolRate
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_SymbolRate(ULONG *pSymbolRate)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::get_SymbolRate
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_SpectralInversion(SpectralInversion *pSpectralInversion)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::put_SpectralInversion
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_SpectralInversion(SpectralInversion *pSpectralInversion)
+{
+ OutputDebugStringW(L"CBDADigitalDemodulator::get_SpectralInversion
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+WINAPI
+CBDADigitalDemodulator_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ IKsObject *pObject = NULL;
+ HANDLE hFile;
+
+ // sanity check
+ assert(pUnkOuter);
+
+ // query for IKsObject
+ hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ // sanity check
+ assert(hr == NOERROR);
+
+ // another sanity check
+ assert(pObject != NULL);
+
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+
+ // one more sanity check
+ assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
+
+ // release IKsObject interface
+ pObject->Release();
+
+ // construct device control
+ CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile);
+
+ OutputDebugStringW(L"CBDADigitalDemodulator_fnConstructor\n");
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
Propchange: trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/frequ…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp (added)
+++ trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp [iso-8859-1] Wed Feb 24
19:37:07 2010
@@ -1,0 +1,233 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/frequencyfilter.cpp
+ * PURPOSE: IBDA_FrequencyFilter interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald(a)reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_FrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x00,
0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+
+class CBDAFrequencyFilter : public IBDA_FrequencyFilter
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT STDMETHODCALLTYPE put_Autotune(ULONG ulTransponder);
+ HRESULT STDMETHODCALLTYPE get_Autotune(ULONG *pulTransponder);
+ HRESULT STDMETHODCALLTYPE put_Frequency(ULONG ulFrequency);
+ HRESULT STDMETHODCALLTYPE get_Frequency(ULONG *pulFrequency);
+ HRESULT STDMETHODCALLTYPE put_Polarity(Polarisation Polarity);
+ HRESULT STDMETHODCALLTYPE get_Polarity(Polarisation *pPolarity);
+ HRESULT STDMETHODCALLTYPE put_Range(ULONG ulRange);
+ HRESULT STDMETHODCALLTYPE get_Range(ULONG *pulRange);
+ HRESULT STDMETHODCALLTYPE put_Bandwidth(ULONG ulBandwidth);
+ HRESULT STDMETHODCALLTYPE get_Bandwidth(ULONG *pulBandwidth);
+ HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(ULONG ulMultiplier);
+ HRESULT STDMETHODCALLTYPE get_FrequencyMultiplier(ULONG *pulMultiplier);
+
+ CBDAFrequencyFilter(HANDLE hFile) : m_Ref(0), m_hFile(hFile){};
+ virtual ~CBDAFrequencyFilter(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast<IUnknown*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
+ {
+ *Output = (IBDA_FrequencyFilter*)(this);
+ reinterpret_cast<IBDA_FrequencyFilter*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s",
lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Autotune(ULONG ulTransponder)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::put_Autotune:
NotImplemented\n");
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Autotune(ULONG *pulTransponder)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::get_Autotune\n");
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Frequency(ULONG ulFrequency)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::put_Frequency:
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Frequency(ULONG *pulFrequency)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::get_Frequency\n");
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Polarity(Polarisation Polarity)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::put_Polarity:
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Polarity(Polarisation *pPolarity)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::get_Polarity\n");
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Range(ULONG ulRange)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::put_Range: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Range(ULONG *pulRange)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::get_Range\n");
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Bandwidth(ULONG ulBandwidth)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::put_Bandwidth:
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Bandwidth(ULONG *pulBandwidth)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::get_Bandwidth\n");
+ return E_NOINTERFACE;
+}
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_FrequencyMultiplier(ULONG ulMultiplier)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::put_FrequencyMultiplier:
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG *pulMultiplier)
+{
+ OutputDebugStringW(L"CBDAFrequencyFilter::get_FrequencyMultiplier\n");
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CBDAFrequencyFilter_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ IKsObject *pObject = NULL;
+ HANDLE hFile;
+
+ // sanity check
+ assert(pUnkOuter);
+
+ // query for IKsObject
+ hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ // sanity check
+ assert(hr == NOERROR);
+
+ // another sanity check
+ assert(pObject != NULL);
+
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+
+ // one more sanity check
+ assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
+
+ // release IKsObject interface
+ pObject->Release();
+
+ // construct device control
+ CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(hFile);
+
+ OutputDebugStringW(L"CBDAFrequencyFilter_fnConstructor\n");
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
Propchange: trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/lnbin…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp (added)
+++ trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp [iso-8859-1] Wed Feb 24 19:37:07 2010
@@ -1,0 +1,181 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/lnbinfo.cpp
+ * PURPOSE: IBDA_LNBInfo interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald(a)reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_LNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2,
0x3e, 0x24, 0x08, 0xf4}};
+
+class CBDALNBInfo : public IBDA_LNBInfo
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //IBDA_LNBInfo methods
+ HRESULT STDMETHODCALLTYPE put_LocalOscilatorFrequencyLowBand(ULONG ulLOFLow);
+ HRESULT STDMETHODCALLTYPE get_LocalOscilatorFrequencyLowBand(ULONG *pulLOFLow);
+ HRESULT STDMETHODCALLTYPE put_LocalOscilatorFrequencyHighBand(ULONG ulLOFHigh);
+ HRESULT STDMETHODCALLTYPE get_LocalOscilatorFrequencyHighBand(ULONG *pulLOFHigh);
+ HRESULT STDMETHODCALLTYPE put_HighLowSwitchFrequency(ULONG ulSwitchFrequency);
+ HRESULT STDMETHODCALLTYPE get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency);
+
+ CBDALNBInfo(HANDLE hFile) : m_Ref(0), m_hFile(hFile){};
+ ~CBDALNBInfo(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast<IUnknown*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_LNBInfo))
+ {
+ *Output = (IBDA_LNBInfo*)(this);
+ reinterpret_cast<IBDA_LNBInfo*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDALNBInfo::QueryInterface: NoInterface for %s",
lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::put_LocalOscilatorFrequencyLowBand(ULONG ulLOFLow)
+{
+ OutputDebugStringW(L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::get_LocalOscilatorFrequencyLowBand(ULONG *pulLOFLow)
+{
+ OutputDebugStringW(L"CBDALNBInfo::get_LocalOscilatorFrequencyLowBand
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::put_LocalOscilatorFrequencyHighBand(ULONG ulLOFHigh)
+{
+ OutputDebugStringW(L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::get_LocalOscilatorFrequencyHighBand(ULONG *pulLOFHigh)
+{
+ OutputDebugStringW(L"CBDALNBInfo::get_LocalOscilatorFrequencyHighBand
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::put_HighLowSwitchFrequency(ULONG ulSwitchFrequency)
+{
+ OutputDebugStringW(L"CBDALNBInfo::put_HighLowSwitchFrequency
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency)
+{
+ OutputDebugStringW(L"CBDALNBInfo::get_HighLowSwitchFrequency
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CBDALNBInfo_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ IKsObject *pObject = NULL;
+ HANDLE hFile;
+
+ // sanity check
+ assert(pUnkOuter);
+
+ // query for IKsObject
+ hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ // sanity check
+ assert(hr == NOERROR);
+
+ // another sanity check
+ assert(pObject != NULL);
+
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+
+ // one more sanity check
+ assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
+
+ // release IKsObject interface
+ pObject->Release();
+
+ // construct device control
+ CBDALNBInfo * handler = new CBDALNBInfo(hFile);
+
+ OutputDebugStringW(L"CBDALNBInfo_fnConstructor\n");
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
Propchange: trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/directx/bdaplgin/pincontrol.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/pinco…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/pincontrol.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/pincontrol.cpp [iso-8859-1] Wed Feb 24 19:37:07
2010
@@ -53,6 +53,9 @@
IN REFIID refiid,
OUT PVOID* Output)
{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
if (IsEqualGUID(refiid, IID_IUnknown))
{
*Output = PVOID(this);
@@ -65,7 +68,11 @@
reinterpret_cast<IBDA_PinControl*>(*Output)->AddRef();
return NOERROR;
}
- OutputDebugStringW(L"CBDAPinControl::QueryInterface: NoInterface!!!\n");
+
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDADeviceControl::QueryInterface: NoInterface for %s",
lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
return E_NOINTERFACE;
}
//-------------------------------------------------------------------
Modified: trunk/reactos/dll/directx/bdaplgin/precomp.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/preco…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/precomp.h [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/precomp.h [iso-8859-1] Wed Feb 24 19:37:07 2010
@@ -12,8 +12,10 @@
#include <wchar.h>
#include <tchar.h>
#include <uuids.h>
+#include <bdatypes.h>
#include <bdaiface.h>
#include <bdamedia.h>
+#include <assert.h>
typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID*
ppvObject);
@@ -47,5 +49,50 @@
REFIID riid,
LPVOID * ppv);
+/* controlnode.cpp */
+
+HRESULT
+WINAPI
+CControlNode_fnConstructor(
+ IUnknown * pUnkOuter,
+ ULONG NodeType,
+ ULONG PinId,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* frequencyfilter.cpp */
+
+HRESULT
+WINAPI
+CBDAFrequencyFilter_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* signalstatistics.cpp */
+
+HRESULT
+WINAPI
+CBDASignalStatistics_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* lnbinfo.cpp */
+
+HRESULT
+WINAPI
+CBDALNBInfo_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* digitaldemo.cpp */
+HRESULT
+WINAPI
+CBDADigitalDemodulator_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
#endif
Added: trunk/reactos/dll/directx/bdaplgin/signalstatistics.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/signa…
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/signalstatistics.cpp (added)
+++ trunk/reactos/dll/directx/bdaplgin/signalstatistics.cpp [iso-8859-1] Wed Feb 24
19:37:07 2010
@@ -1,0 +1,217 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/frequencyfilter.cpp
+ * PURPOSE: IBDA_FrequencyFilter interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald(a)reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_SignalStatistics = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac,
0x0d, 0x9a, 0x2a, 0x43, 0x38}};
+
+class CBDASignalStatistics : public IBDA_SignalStatistics
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IBDA_SignalStatistics methods
+ HRESULT STDMETHODCALLTYPE put_SignalStrength(LONG lDbStrength);
+ HRESULT STDMETHODCALLTYPE get_SignalStrength(LONG *plDbStrength);
+ HRESULT STDMETHODCALLTYPE put_SignalQuality(LONG lPercentQuality);
+ HRESULT STDMETHODCALLTYPE get_SignalQuality(LONG *plPercentQuality);
+ HRESULT STDMETHODCALLTYPE put_SignalPresent(BOOLEAN fPresent);
+ HRESULT STDMETHODCALLTYPE get_SignalPresent(BOOLEAN *pfPresent);
+ HRESULT STDMETHODCALLTYPE put_SignalLocked(BOOLEAN fLocked);
+ HRESULT STDMETHODCALLTYPE get_SignalLocked(BOOLEAN *pfLocked);
+ HRESULT STDMETHODCALLTYPE put_SampleTime(LONG lmsSampleTime);
+ HRESULT STDMETHODCALLTYPE get_SampleTime(LONG *plmsSampleTime);
+
+ CBDASignalStatistics(HANDLE hFile) : m_Ref(0), m_hFile(hFile){};
+ ~CBDASignalStatistics(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast<IUnknown*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
+ {
+ *Output = (IBDA_SignalStatistics*)(this);
+ reinterpret_cast<IBDA_SignalStatistics*>(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDASignalStatistics::QueryInterface: NoInterface for
%s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalStrength(LONG lDbStrength)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::put_SignalStrength
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalStrength(LONG *plDbStrength)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::get_SignalStrength
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalQuality(LONG lPercentQuality)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::put_SignalQuality
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalQuality(LONG *plPercentQuality)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::get_SignalQuality
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalPresent(BOOLEAN fPresent)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::put_SignalPresent
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalPresent(BOOLEAN *pfPresent)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::get_SignalPresent
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalLocked(BOOLEAN fLocked)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::put_SignalLocked
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalLocked(BOOLEAN *pfLocked)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::get_SignalLocked
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SampleTime(LONG lmsSampleTime)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::put_SampleTime
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
+{
+ OutputDebugStringW(L"CBDASignalStatistics::get_SampleTime
NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CBDASignalStatistics_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ IKsObject *pObject = NULL;
+ HANDLE hFile;
+
+ // sanity check
+ assert(pUnkOuter);
+
+ // query for IKsObject
+ hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ // sanity check
+ assert(hr == NOERROR);
+
+ // another sanity check
+ assert(pObject != NULL);
+
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+
+ // one more sanity check
+ assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
+
+ // release IKsObject interface
+ pObject->Release();
+
+ // construct device control
+ CBDASignalStatistics * handler = new CBDASignalStatistics(hFile);
+
+ OutputDebugStringW(L"CBDASignalStatistics_fnConstructor\n");
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
Propchange: trunk/reactos/dll/directx/bdaplgin/signalstatistics.cpp
------------------------------------------------------------------------------
svn:eol-style = native