- Fix function declaration
[reactos.git] / include / ddk / dmusicks.h
1 #ifndef _DMUSICKS_
2 #define _DMUSICKS_
3
4 #include <dmusprop.h>
5
6 #define DONT_HOLD_FOR_SEQUENCING 0x8000000000000000
7
8 #ifndef REFERENCE_TIME
9 typedef LONGLONG REFERENCE_TIME;
10 #endif
11
12 typedef struct _DMUS_KERNEL_EVENT {
13 BYTE bReserved;
14 BYTE cbStruct;
15 USHORT cbEvent;
16 USHORT usChannelGroup;
17 USHORT usFlags;
18 REFERENCE_TIME ullPresTime100ns;
19 ULONGLONG ullBytePosition;
20 struct _DMUS_KERNEL_EVENT *pNextEvt;
21 union {
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 DMUS_STREAM_MIDI_INVALID = -1,
30 DMUS_STREAM_MIDI_RENDER = 0,
31 DMUS_STREAM_MIDI_CAPTURE,
32 DMUS_STREAM_WAVE_SINK
33 } DMUS_STREAM_TYPE;
34
35 DEFINE_GUID(CLSID_MiniportDriverDMusUART, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
36 DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
37
38 /* ===============================================================
39 IMasterClock Interface
40 */
41
42 #undef INTERFACE
43 #define INTERFACE IMasterClock
44
45 DECLARE_INTERFACE_(IMasterClock,IUnknown) {
46 DEFINE_ABSTRACT_UNKNOWN()
47
48 STDMETHOD_(NTSTATUS,GetTime)( THIS_
49 OUT REFERENCE_TIME *pTime
50 ) PURE;
51 };
52
53 typedef IMasterClock *PMASTERCLOCK;
54
55 #define IMP_IMasterClock \
56 STDMETHODIMP_(NTSTATUS) GetTime( \
57 OUT REFERENCE_TIME *pTime \
58 )
59
60 /* ===============================================================
61 IMXF Interface
62 */
63
64 #undef INTERFACE
65 #define INTERFACE IMXF
66
67 struct IMXF;
68 typedef struct IMXF *PMXF;
69
70 #define DEFINE_ABSTRACT_IMXF() \
71 STDMETHOD_(NTSTATUS,SetState)(THIS_ \
72 IN KSSTATE State \
73 ) PURE; \
74 STDMETHOD_(NTSTATUS,PutMessage)(THIS_ \
75 IN PDMUS_KERNEL_EVENT pDMKEvt \
76 ) PURE; \
77 STDMETHOD_(NTSTATUS,ConnectOutput)(THIS_ \
78 IN PMXF sinkMXF \
79 ) PURE; \
80 STDMETHOD_(NTSTATUS,DisconnectOutput)(THIS_ \
81 IN PMXF sinkMXF \
82 ) PURE;
83
84 #define IMP_IMXF \
85 STDMETHODIMP_(NTSTATUS) SetState ( \
86 IN KSSTATE State); \
87 STDMETHODIMP_(NTSTATUS) PutMessage (THIS_ \
88 IN PDMUS_KERNEL_EVENT pDMKEvt); \
89 STDMETHODIMP_(NTSTATUS) ConnectOutput (THIS_ \
90 IN PMXF sinkMXF); \
91 STDMETHODIMP_(NTSTATUS) DisconnectOutput (THIS_ \
92 IN PMXF sinkMXF)
93
94 DECLARE_INTERFACE_(IMXF,IUnknown) {
95 DEFINE_ABSTRACT_UNKNOWN()
96 DEFINE_ABSTRACT_IMXF()
97 };
98
99 /* ===============================================================
100 IAllocatorMXF Interface
101 */
102
103 #undef INTERFACE
104 #define INTERFACE IAllocatorMXF
105
106 struct IAllocatorMXF;
107 typedef struct IAllocatorMXF *PAllocatorMXF;
108
109 #define STATIC_IID_IAllocatorMXF\
110 0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1
111 DEFINE_GUIDSTRUCT("a5f0d62c-b30f-11d2-b7a3-0060083316c1", IID_IAllocatorMXF);
112 #define IID_IAllocatorMXF DEFINE_GUIDNAMED(IID_IAllocatorMXF)
113
114
115 DECLARE_INTERFACE_(IAllocatorMXF, IMXF) {
116 DEFINE_ABSTRACT_UNKNOWN()
117
118 DEFINE_ABSTRACT_IMXF()
119
120 STDMETHOD_(NTSTATUS,GetMessage)(THIS_
121 OUT PDMUS_KERNEL_EVENT *ppDMKEvt
122 ) PURE;
123
124 STDMETHOD_(USHORT,GetBufferSize)(THIS) PURE;
125
126 STDMETHOD_(NTSTATUS,GetBuffer)(THIS_
127 OUT PBYTE *ppBuffer
128 )PURE;
129
130 STDMETHOD_(NTSTATUS,PutBuffer)(THIS_
131 IN PBYTE pBuffer
132 ) PURE;
133 };
134
135 #define IMP_IAllocatorMXF \
136 IMP_IMXF; \
137 STDMETHODIMP_(NTSTATUS) GetMessage( \
138 OUT PDMUS_KERNEL_EVENT *ppDMKEvt); \
139 \
140 STDMETHODIMP_(USHORT) GetBufferSize(void); \
141 \
142 STDMETHODIMP_(NTSTATUS) GetBuffer( \
143 OUT PBYTE *ppBuffer); \
144 \
145 STDMETHODIMP_(NTSTATUS) PutBuffer( \
146 IN PBYTE pBuffer)
147
148 #undef INTERFACE
149 #define INTERFACE IPortDMus
150
151 DEFINE_GUID(IID_IPortDMus, 0xc096df9c, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
152 DEFINE_GUID(CLSID_PortDMus, 0xb7902fe9, 0xfb0a, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
153
154 DECLARE_INTERFACE_(IPortDMus, IPort) {
155 DEFINE_ABSTRACT_UNKNOWN()
156
157 DEFINE_ABSTRACT_PORT()
158
159 STDMETHOD_(void,Notify)(THIS_
160 IN PSERVICEGROUP ServiceGroup OPTIONAL
161 ) PURE;
162
163 STDMETHOD_(void,RegisterServiceGroup)(THIS_
164 IN PSERVICEGROUP ServiceGroup
165 ) PURE;
166 };
167 typedef IPortDMus *PPORTDMUS;
168
169 #define IMP_IPortDMus \
170 IMP_IPort; \
171 STDMETHODIMP_(void) Notify( \
172 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
173 \
174 STDMETHODIMP_(void) RegisterServiceGroup( \
175 IN PSERVICEGROUP ServiceGroup)
176
177 #undef INTERFACE
178 #define INTERFACE IMiniportDMus
179
180 DEFINE_GUID(IID_IMiniportDMus, 0xc096df9d, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
181
182 DECLARE_INTERFACE_(IMiniportDMus, IMiniport) {
183 DEFINE_ABSTRACT_UNKNOWN()
184
185 DEFINE_ABSTRACT_MINIPORT()
186
187 STDMETHOD_(NTSTATUS,Init)(THIS_
188 IN PUNKNOWN UnknownAdapter,
189 IN PRESOURCELIST ResourceList,
190 IN PPORTDMUS Port,
191 OUT PSERVICEGROUP *ServiceGroup
192 ) PURE;
193
194 STDMETHOD_(void,Service)(THIS) PURE;
195
196 STDMETHOD_(NTSTATUS,NewStream)(THIS_
197 OUT PMXF *MXF,
198 IN PUNKNOWN OuterUnknown OPTIONAL,
199 IN POOL_TYPE PoolType,
200 IN ULONG PinID,
201 IN DMUS_STREAM_TYPE StreamType,
202 IN PKSDATAFORMAT DataFormat,
203 OUT PSERVICEGROUP *ServiceGroup,
204 IN PAllocatorMXF AllocatorMXF,
205 IN PMASTERCLOCK MasterClock,
206 OUT PULONGLONG SchedulePreFetch
207 ) PURE;
208 };
209
210 typedef IMiniportDMus *PMINIPORTDMUS;
211 #undef INTERFACE
212
213 #define IMP_IMiniportDMus \
214 IMP_IMiniport; \
215 STDMETHODIMP_(NTSTATUS) Init( \
216 IN PUNKNOWN UnknownAdapter, \
217 IN PRESOURCELIST ResourceList, \
218 IN PPORTDMUS Port, \
219 OUT PSERVICEGROUP *ServiceGroup); \
220 \
221 STDMETHODIMP_(void) Service(THIS); \
222 \
223 STDMETHODIMP_(NTSTATUS) NewStream( \
224 OUT PMXF *MXF, \
225 IN PUNKNOWN OuterUnknown, \
226 IN POOL_TYPE PoolType, \
227 IN ULONG PinID, \
228 IN DMUS_STREAM_TYPE StreamType, \
229 IN PKSDATAFORMAT DataFormat, \
230 OUT PSERVICEGROUP *ServiceGroup, \
231 IN PAllocatorMXF AllocatorMXF, \
232 IN PMASTERCLOCK MasterClock, \
233 OUT PULONGLONG SchedulePreFetch)
234
235
236 #define STATIC_KSAUDFNAME_DMUSIC_MPU_OUT\
237 0xA4DF0EB5, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}
238 DEFINE_GUIDSTRUCT("A4DF0EB5-BAC9-11d2-B7A8-0060083316C1", KSAUDFNAME_DMUSIC_MPU_OUT);
239 #define KSAUDFNAME_DMUSIC_MPU_OUT DEFINE_GUIDNAMED(KSAUDFNAME_DMUSIC_MPU_OUT)
240
241 #define STATIC_KSAUDFNAME_DMUSIC_MPU_IN\
242 0xB2EC0A7D, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}
243 DEFINE_GUIDSTRUCT("B2EC0A7D-BAC9-11d2-B7A8-0060083316C1", KSAUDFNAME_DMUSIC_MPU_IN);
244 #define KSAUDFNAME_DMUSIC_MPU_IN DEFINE_GUIDNAMED(KSAUDFNAME_DMUSIC_MPU_IN)
245
246 #define STATIC_IID_IMXF\
247 0xc096df9e, 0xfb09, 0x11d1, {0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}
248 DEFINE_GUIDSTRUCT("c096df9e-fb09-11d1-81b0-0060083316c1", IID_IMXF);
249 #define IID_IMXF DEFINE_GUIDNAMED(IID_IMXF)
250
251 #define DMUS_KEF_EVENT_COMPLETE 0x0000
252 #define DMUS_KEF_EVENT_INCOMPLETE 0x0001
253 #define DMUS_KEF_PACKAGE_EVENT 0x0002
254 #define kBytePositionNone (~(ULONGLONG)0)
255
256 #define SHORT_EVT(evt) ((evt)->cbEvent <= sizeof(PBYTE))
257 #define PACKAGE_EVT(evt) ((evt)->usFlags & DMUS_KEF_PACKAGE_EVENT)
258 #define INCOMPLETE_EVT(evt) ((evt)->usFlags & DMUS_KEF_EVENT_INCOMPLETE)
259 #define COMPLETE_EVT(evt) (((evt)->usFlags & DMUS_KEF_EVENT_INCOMPLETE) == 0)
260
261 #define SET_INCOMPLETE_EVT(evt) ((evt)->usFlags |= DMUS_KEF_EVENT_INCOMPLETE)
262 #define SET_COMPLETE_EVT(evt) ((evt)->usFlags &= (~DMUS_KEF_EVENT_INCOMPLETE))
263 #define SET_PACKAGE_EVT(evt) ((evt)->usFlags |= DMUS_KEF_PACKAGE_EVENT)
264 #define CLEAR_PACKAGE_EVT(evt) ((evt)->usFlags &= (~DMUS_KEF_PACKAGE_EVENT))
265
266 #endif /* _DMUSICKS_ */