[DXSDK]
[reactos.git] / reactos / dll / directx / bdaplgin / devicecontrol.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/classfactory.cpp
5 * PURPOSE: ClassFactory interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
8 */
9
10 #include "precomp.h"
11
12 const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
13 const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
14
15 class CBDADeviceControl : public IBDA_DeviceControl,
16 public IBDA_Topology
17 {
18 public:
19 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
20
21 STDMETHODIMP_(ULONG) AddRef()
22 {
23 InterlockedIncrement(&m_Ref);
24 return m_Ref;
25 }
26 STDMETHODIMP_(ULONG) Release()
27 {
28 InterlockedDecrement(&m_Ref);
29
30 if (!m_Ref)
31 {
32 delete this;
33 return 0;
34 }
35 return m_Ref;
36 }
37
38 // IBDA_DeviceControl methods
39 HRESULT STDMETHODCALLTYPE StartChanges( void);
40 HRESULT STDMETHODCALLTYPE CheckChanges( void);
41 HRESULT STDMETHODCALLTYPE CommitChanges( void);
42 HRESULT STDMETHODCALLTYPE GetChangeState(ULONG *pState);
43
44 // IBDA_Topology methods
45 HRESULT STDMETHODCALLTYPE GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes);
46 HRESULT STDMETHODCALLTYPE GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors);
47 HRESULT STDMETHODCALLTYPE GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces);
48 HRESULT STDMETHODCALLTYPE GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes);
49 HRESULT STDMETHODCALLTYPE GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections);
50 HRESULT STDMETHODCALLTYPE CreatePin(ULONG ulPinType, ULONG *pulPinId);
51 HRESULT STDMETHODCALLTYPE DeletePin(ULONG ulPinId);
52 HRESULT STDMETHODCALLTYPE SetMediaType(ULONG ulPinId, AM_MEDIA_TYPE *pMediaType);
53 HRESULT STDMETHODCALLTYPE SetMedium(ULONG ulPinId, REGPINMEDIUM *pMedium);
54 HRESULT STDMETHODCALLTYPE CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId);
55 HRESULT STDMETHODCALLTYPE GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode);
56
57 CBDADeviceControl(HANDLE hFile) : m_Ref(0), m_Handle(hFile){};
58 virtual ~CBDADeviceControl(){};
59
60 protected:
61 LONG m_Ref;
62 HANDLE m_Handle;
63 };
64
65 HRESULT
66 STDMETHODCALLTYPE
67 CBDADeviceControl::QueryInterface(
68 IN REFIID refiid,
69 OUT PVOID* Output)
70 {
71 WCHAR Buffer[MAX_PATH];
72 LPOLESTR lpstr;
73
74 *Output = NULL;
75
76 if (IsEqualGUID(refiid, IID_IUnknown))
77 {
78 *Output = PVOID(this);
79 reinterpret_cast<IUnknown*>(*Output)->AddRef();
80 return NOERROR;
81 }
82 if (IsEqualGUID(refiid, IID_IBDA_DeviceControl))
83 {
84 *Output = (IBDA_DeviceControl*)(this);
85 reinterpret_cast<IBDA_DeviceControl*>(*Output)->AddRef();
86 return NOERROR;
87 }
88
89 if (IsEqualGUID(refiid, IID_IBDA_Topology))
90 {
91 *Output = (IBDA_Topology*)(this);
92 reinterpret_cast<IBDA_Topology*>(*Output)->AddRef();
93 return NOERROR;
94 }
95
96 StringFromCLSID(refiid, &lpstr);
97 swprintf(Buffer, L"CBDADeviceControl::QueryInterface: NoInterface for %s", lpstr);
98 OutputDebugStringW(Buffer);
99 CoTaskMemFree(lpstr);
100
101 return E_NOINTERFACE;
102 }
103
104
105 //-------------------------------------------------------------------
106 // IBDA_DeviceControl methods
107 //
108 HRESULT
109 STDMETHODCALLTYPE
110 CBDADeviceControl::StartChanges( void)
111 {
112 OutputDebugStringW(L"CBDADeviceControl::StartChanges: NotImplemented\n");
113 return E_NOTIMPL;
114 }
115
116
117 HRESULT
118 STDMETHODCALLTYPE
119 CBDADeviceControl::CheckChanges( void)
120 {
121 OutputDebugStringW(L"CBDADeviceControl::CheckChanges: NotImplemented\n");
122 return E_NOTIMPL;
123 }
124
125
126 HRESULT
127 STDMETHODCALLTYPE
128 CBDADeviceControl::CommitChanges( void)
129 {
130 OutputDebugStringW(L"CBDADeviceControl::CommitChanges: NotImplemented\n");
131 return E_NOTIMPL;
132 }
133
134 HRESULT
135 STDMETHODCALLTYPE
136 CBDADeviceControl::GetChangeState(ULONG *pState)
137 {
138 OutputDebugStringW(L"CBDADeviceControl::GetChangeState: NotImplemented\n");
139 return E_NOTIMPL;
140 }
141
142 //-------------------------------------------------------------------
143 // IBDA_Topology methods
144 //
145 HRESULT
146 STDMETHODCALLTYPE
147 CBDADeviceControl::GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes)
148 {
149 OutputDebugStringW(L"CBDADeviceControl::GetNodeTypes: NotImplemented\n");
150 return E_NOTIMPL;
151 }
152
153 HRESULT
154 STDMETHODCALLTYPE
155 CBDADeviceControl::GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors)
156 {
157 OutputDebugStringW(L"CBDADeviceControl::GetNodeDescriptors: NotImplemented\n");
158 return E_NOTIMPL;
159 }
160
161 HRESULT
162 STDMETHODCALLTYPE
163 CBDADeviceControl::GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces)
164 {
165 OutputDebugStringW(L"CBDADeviceControl::GetNodeInterfaces: NotImplemented\n");
166 return E_NOTIMPL;
167 }
168
169 HRESULT
170 STDMETHODCALLTYPE
171 CBDADeviceControl::GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes)
172 {
173 OutputDebugStringW(L"CBDADeviceControl::GetPinTypes: NotImplemented\n");
174 return E_NOTIMPL;
175 }
176
177 HRESULT
178 STDMETHODCALLTYPE
179 CBDADeviceControl::GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections)
180 {
181 OutputDebugStringW(L"CBDADeviceControl::GetTemplateConnections: NotImplemented\n");
182 return E_NOTIMPL;
183 }
184
185 HRESULT
186 STDMETHODCALLTYPE
187 CBDADeviceControl::CreatePin(ULONG ulPinType, ULONG *pulPinId)
188 {
189 OutputDebugStringW(L"CBDADeviceControl::CreatePin: NotImplemented\n");
190 return E_NOTIMPL;
191 }
192
193 HRESULT
194 STDMETHODCALLTYPE
195 CBDADeviceControl::DeletePin(ULONG ulPinId)
196 {
197 OutputDebugStringW(L"CBDADeviceControl::DeletePin: NotImplemented\n");
198 return E_NOTIMPL;
199 }
200
201 HRESULT
202 STDMETHODCALLTYPE
203 CBDADeviceControl::SetMediaType(ULONG ulPinId, AM_MEDIA_TYPE *pMediaType)
204 {
205 OutputDebugStringW(L"CBDADeviceControl::SetMediaType: NotImplemented\n");
206 return E_NOTIMPL;
207 }
208
209 HRESULT
210 STDMETHODCALLTYPE
211 CBDADeviceControl::SetMedium(ULONG ulPinId, REGPINMEDIUM *pMedium)
212 {
213 OutputDebugStringW(L"CBDADeviceControl::SetMedium: NotImplemented\n");
214 return E_NOTIMPL;
215 }
216
217 HRESULT
218 STDMETHODCALLTYPE
219 CBDADeviceControl::CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId){
220 OutputDebugStringW(L"CBDADeviceControl::CreateTopology: NotImplemented\n");
221 return E_NOTIMPL;
222 }
223
224
225 HRESULT
226 STDMETHODCALLTYPE
227 CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode)
228 {
229 OutputDebugStringW(L"CBDADeviceControl::GetControlNode: NotImplemented\n");
230 return E_NOTIMPL;
231 }
232
233 HRESULT
234 WINAPI
235 CBDADeviceControl_fnConstructor(
236 IUnknown * pUnkOuter,
237 REFIID riid,
238 LPVOID * ppv)
239 {
240 CBDADeviceControl * handler = new CBDADeviceControl(NULL);
241
242 OutputDebugStringW(L"CBDADeviceControl_fnConstructor\n");
243
244 if (!handler)
245 return E_OUTOFMEMORY;
246
247 if (FAILED(handler->QueryInterface(riid, ppv)))
248 {
249 /* not supported */
250 delete handler;
251 return E_NOINTERFACE;
252 }
253
254 return NOERROR;
255 }