Sync trunk head (r41026)
[reactos.git] / reactos / include / ddk / dmusicks.h
1 #ifndef _DMUSICKS_
2 #define _DMUSICKS_
3
4 #define DONT_HOLD_FOR_SEQUENCING 0x8000000000000000
5
6 #ifndef REFERENCE_TIME
7 typedef LONGLONG REFERENCE_TIME;
8 #endif
9
10 typedef struct _DMUS_KERNEL_EVENT
11 {
12 BYTE bReserved;
13 BYTE cbStruct;
14 USHORT cbEvent;
15 USHORT usChannelGroup;
16 USHORT usFlags;
17 REFERENCE_TIME ullPresTime100ns;
18 ULONGLONG ullBytePosition;
19 struct _DMUS_KERNEL_EVENT *pNextEvt;
20 union
21 {
22 BYTE abData[sizeof(PBYTE)];
23 PBYTE pbData;
24 struct _DMUS_KERNEL_EVENT *pPackageEvt;
25 }uData;
26 }DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT;
27
28 typedef enum
29 {
30 DMUS_STREAM_MIDI_INVALID = -1,
31 DMUS_STREAM_MIDI_RENDER = 0,
32 DMUS_STREAM_MIDI_CAPTURE,
33 DMUS_STREAM_WAVE_SINK
34 }DMUS_STREAM_TYPE;
35
36 DEFINE_GUID(CLSID_MiniportDriverDMusUART, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
37 DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
38
39 /* ===============================================================
40 IMasterClock Interface
41 */
42
43 #undef INTERFACE
44 #define INTERFACE IMasterClock
45
46 DECLARE_INTERFACE_(IMasterClock,IUnknown)
47 {
48 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
49 REFIID InterfaceId,
50 PVOID* Interface
51 ) PURE;
52 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
53 STDMETHOD_(ULONG,Release)(THIS) PURE;
54
55 STDMETHOD_(NTSTATUS,GetTime)( THIS_
56 OUT REFERENCE_TIME * pTime
57 ) PURE;
58 };
59
60 typedef IMasterClock *PMASTERCLOCK;
61
62 /* ===============================================================
63 IMXF Interface
64 */
65
66 #undef INTERFACE
67 #define INTERFACE IMXF
68
69 struct IMXF;
70 typedef struct IMXF *PMXF;
71
72 DECLARE_INTERFACE_(IMXF,IUnknown)
73 {
74 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
75 REFIID InterfaceId,
76 PVOID* Interface
77 ) PURE;
78 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
79 STDMETHOD_(ULONG,Release)(THIS) PURE;
80
81 STDMETHOD_(NTSTATUS,SetState)(THIS_
82 IN KSSTATE State
83 ) PURE;
84 STDMETHOD_(NTSTATUS,PutMessage)
85 ( THIS_
86 IN PDMUS_KERNEL_EVENT pDMKEvt
87 ) PURE;
88 STDMETHOD_(NTSTATUS,ConnectOutput)
89 ( THIS_
90 IN PMXF sinkMXF
91 ) PURE;
92 STDMETHOD_(NTSTATUS,DisconnectOutput)
93 ( THIS_
94 IN PMXF sinkMXF
95 ) PURE;
96 };
97
98 /* ===============================================================
99 IAllocatorMXF Interface
100 */
101
102 #undef INTERFACE
103 #define INTERFACE IAllocatorMXF
104
105 struct IAllocatorMXF;
106 typedef struct IAllocatorMXF *PAllocatorMXF;
107
108 DECLARE_INTERFACE_(IAllocatorMXF,IMXF)
109 {
110 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
111 REFIID InterfaceId,
112 PVOID* Interface
113 ) PURE;
114 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
115 STDMETHOD_(ULONG,Release)(THIS) PURE;
116
117 STDMETHOD_(NTSTATUS,SetState)(THIS_
118 IN KSSTATE State
119 ) PURE;
120 STDMETHOD_(NTSTATUS,PutMessage)
121 ( THIS_
122 IN PDMUS_KERNEL_EVENT pDMKEvt
123 ) PURE;
124 STDMETHOD_(NTSTATUS,ConnectOutput)
125 ( THIS_
126 IN PMXF sinkMXF
127 ) PURE;
128 STDMETHOD_(NTSTATUS,DisconnectOutput)
129 ( THIS_
130 IN PMXF sinkMXF
131 ) PURE;
132
133 STDMETHOD_(NTSTATUS,GetMessage)(THIS_
134 OUT PDMUS_KERNEL_EVENT * ppDMKEvt
135 ) PURE;
136
137 STDMETHOD_(USHORT,GetBufferSize)(THIS) PURE;
138
139 STDMETHOD_(NTSTATUS,GetBuffer)(THIS_
140 OUT PBYTE * ppBuffer
141 )PURE;
142
143 STDMETHOD_(NTSTATUS,PutBuffer)(THIS_
144 IN PBYTE pBuffer
145 ) PURE;
146 };
147
148
149 #undef INTERFACE
150 #define INTERFACE IPortDMus
151
152 DEFINE_GUID(IID_IPortDMus, 0xc096df9c, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
153 DEFINE_GUID(CLSID_PortDMus, 0xb7902fe9, 0xfb0a, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
154
155 DECLARE_INTERFACE_(IPortDMus, IPort)
156 {
157 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
158 REFIID InterfaceId,
159 PVOID* Interface
160 ) PURE;
161 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
162 STDMETHOD_(ULONG,Release)(THIS) PURE;
163
164 STDMETHOD_(NTSTATUS,Init)(THIS_
165 IN PDEVICE_OBJECT DeviceObject,
166 IN PIRP Irp,
167 IN PUNKNOWN UnknownMiniport,
168 IN PUNKNOWN UnknownAdapter OPTIONAL,
169 IN PRESOURCELIST ResourceList
170 )PURE;
171 STDMETHOD_(NTSTATUS,GetDeviceProperty)(THIS_
172 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
173 IN ULONG BufferLength,
174 OUT PVOID PropertyBuffer,
175 OUT PULONG ResultLength
176 )PURE;
177 STDMETHOD_(NTSTATUS,NewRegistryKey)(THIS_
178 OUT PREGISTRYKEY * OutRegistryKey,
179 IN PUNKNOWN OuterUnknown,
180 IN ULONG RegistryKeyType,
181 IN ACCESS_MASK DesiredAccess,
182 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
183 IN ULONG CreateOptions OPTIONAL,
184 OUT PULONG Disposition OPTIONAL
185 )PURE;
186 STDMETHOD_(void,Notify)(THIS_
187 IN PSERVICEGROUP ServiceGroup OPTIONAL
188 )PURE;
189
190 STDMETHOD_(void,RegisterServiceGroup)(THIS_
191 IN PSERVICEGROUP ServiceGroup
192 ) PURE;
193 };
194 typedef IPortDMus *PPORTDMUS;
195
196
197
198 #undef INTERFACE
199 #define INTERFACE IMiniportDMus
200
201 DEFINE_GUID(IID_IMiniportDMus, 0xc096df9d, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
202 DECLARE_INTERFACE_(IMiniportDMus, IMiniport)
203 {
204 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
205 REFIID InterfaceId,
206 PVOID* Interface
207 ) PURE;
208 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
209 STDMETHOD_(ULONG,Release)(THIS) PURE;
210
211 STDMETHOD_(NTSTATUS,GetDescription)(THIS_
212 OUT PPCFILTER_DESCRIPTOR * Description
213 ) PURE;
214 STDMETHOD_(NTSTATUS,DataRangeIntersection)(THIS_
215 IN ULONG PinId,
216 IN PKSDATARANGE DataRange,
217 IN PKSDATARANGE MatchingDataRange,
218 IN ULONG OutputBufferLength,
219 OUT PVOID ResultantFormat OPTIONAL,
220 OUT PULONG ResultantFormatLength
221 ) PURE;
222
223 STDMETHOD_(NTSTATUS,Init)(THIS_
224 IN PUNKNOWN UnknownAdapter,
225 IN PRESOURCELIST ResourceList,
226 IN PPORTDMUS Port,
227 OUT PSERVICEGROUP * ServiceGroup
228 ) PURE;
229
230 STDMETHOD_(void,Service)(THIS) PURE;
231
232 STDMETHOD_(NTSTATUS,NewStream)(THIS_
233 OUT PMXF * MXF,
234 IN PUNKNOWN OuterUnknown OPTIONAL,
235 IN POOL_TYPE PoolType,
236 IN ULONG PinID,
237 IN DMUS_STREAM_TYPE StreamType,
238 IN PKSDATAFORMAT DataFormat,
239 OUT PSERVICEGROUP * ServiceGroup,
240 IN PAllocatorMXF AllocatorMXF,
241 IN PMASTERCLOCK MasterClock,
242 OUT PULONGLONG SchedulePreFetch
243 ) PURE;
244 };
245
246 typedef IMiniportDMus *PMINIPORTDMUS;
247 #undef INTERFACE
248
249 #define STATIC_IID_IAllocatorMXF\
250 0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1
251 DEFINE_GUIDSTRUCT("a5f0d62c-b30f-11d2-b7a3-0060083316c1", IID_IAllocatorMXF);
252 #define IID_IAllocatorMXF DEFINE_GUIDNAMED(IID_IAllocatorMXF)
253
254 #endif