- Rewrite Wave API to enumerate wave out / in devices at startup
[reactos.git] / reactos / drivers / wdm / audio / legacy / wdmaud / wdmaud.h
1 #ifndef WDMAUD_H__
2 #define WDMAUD_H__
3
4 #include <pseh/pseh2.h>
5 #include <ntddk.h>
6 #include <portcls.h>
7 #include <ks.h>
8 #define NDEBUG
9 #include <debug.h>
10 #include <ksmedia.h>
11 #include <mmreg.h>
12 #include <mmsystem.h>
13 #include <stdlib.h>
14 #include <stdio.h>
15 #include <wchar.h>
16
17 #include "interface.h"
18
19 typedef struct
20 {
21 HANDLE Handle;
22 SOUND_DEVICE_TYPE Type;
23 ULONG FilterId;
24 ULONG PinId;
25 }WDMAUD_HANDLE, *PWDMAUD_HANDLE;
26
27
28 typedef struct
29 {
30 HANDLE hProcess;
31 ULONG NumPins;
32 WDMAUD_HANDLE * hPins;
33
34 }WDMAUD_CLIENT, *PWDMAUD_CLIENT;
35
36 typedef struct
37 {
38 LIST_ENTRY Entry;
39 ULONG PinId;
40 ULONG DeviceIndex;
41 MIXERLINEW Line;
42 LPMIXERCONTROLW LineControls;
43 PULONG NodeIds;
44 }MIXERLINE_EXT, *LPMIXERLINE_EXT;
45
46
47 typedef struct
48 {
49 MIXERCAPSW MixCaps;
50
51 LIST_ENTRY LineList;
52 ULONG ControlId;
53 }MIXER_INFO, *LPMIXER_INFO;
54
55
56 typedef struct
57 {
58 LIST_ENTRY Entry;
59 ULONG FilterId;
60 ULONG PinId;
61 ULONG bInput;
62 union
63 {
64 WAVEOUTCAPSW OutCaps;
65 WAVEINCAPSW InCaps;
66 }u;
67 }WAVE_INFO, *LPWAVE_INFO;
68
69
70 typedef struct
71 {
72 LIST_ENTRY Entry;
73 UNICODE_STRING SymbolicLink;
74 }SYSAUDIO_ENTRY, *PSYSAUDIO_ENTRY;
75
76 typedef struct
77 {
78 KSDEVICE_HEADER DeviceHeader;
79 PVOID SysAudioNotification;
80
81 BOOL DeviceInterfaceSupport;
82
83 KSPIN_LOCK Lock;
84 ULONG NumSysAudioDevices;
85 LIST_ENTRY SysAudioDeviceList;
86 HANDLE hSysAudio;
87 PFILE_OBJECT FileObject;
88
89 ULONG MixerInfoCount;
90 LPMIXER_INFO MixerInfo;
91
92 ULONG WaveInDeviceCount;
93 LIST_ENTRY WaveInList;
94
95 ULONG WaveOutDeviceCount;
96 LIST_ENTRY WaveOutList;
97
98
99 }WDMAUD_DEVICE_EXTENSION, *PWDMAUD_DEVICE_EXTENSION;
100
101 typedef struct
102 {
103 KSSTREAM_HEADER Header;
104 PIRP Irp;
105 }CONTEXT_WRITE, *PCONTEXT_WRITE;
106
107 NTSTATUS
108 NTAPI
109 OpenWavePin(
110 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension,
111 IN ULONG FilterId,
112 IN ULONG PinId,
113 IN LPWAVEFORMATEX WaveFormatEx,
114 IN ACCESS_MASK DesiredAccess,
115 OUT PHANDLE PinHandle);
116
117 NTSTATUS
118 WdmAudRegisterDeviceInterface(
119 IN PDEVICE_OBJECT PhysicalDeviceObject,
120 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
121
122 NTSTATUS
123 WdmAudOpenSysAudioDevices(
124 IN PDEVICE_OBJECT DeviceObject,
125 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
126
127 NTSTATUS
128 WdmAudOpenSysaudio(
129 IN PDEVICE_OBJECT DeviceObject,
130 IN PWDMAUD_CLIENT *pClient);
131
132 NTSTATUS
133 NTAPI
134 WdmAudDeviceControl(
135 IN PDEVICE_OBJECT DeviceObject,
136 IN PIRP Irp);
137
138 NTSTATUS
139 NTAPI
140 WdmAudWrite(
141 IN PDEVICE_OBJECT DeviceObject,
142 IN PIRP Irp);
143
144 NTSTATUS
145 WdmAudControlOpenMixer(
146 IN PDEVICE_OBJECT DeviceObject,
147 IN PIRP Irp,
148 IN PWDMAUD_DEVICE_INFO DeviceInfo,
149 IN PWDMAUD_CLIENT ClientInfo);
150
151 NTSTATUS
152 WdmAudControlOpenWave(
153 IN PDEVICE_OBJECT DeviceObject,
154 IN PIRP Irp,
155 IN PWDMAUD_DEVICE_INFO DeviceInfo,
156 IN PWDMAUD_CLIENT ClientInfo);
157
158
159 ULONG
160 GetNumOfMixerDevices(
161 IN PDEVICE_OBJECT DeviceObject);
162
163 NTSTATUS
164 SetIrpIoStatus(
165 IN PIRP Irp,
166 IN NTSTATUS Status,
167 IN ULONG Length);
168
169 NTSTATUS
170 WdmAudOpenSysAudioDevice(
171 IN LPWSTR DeviceName,
172 OUT PHANDLE Handle);
173
174 NTSTATUS
175 FindProductName(
176 IN LPWSTR PnpName,
177 IN ULONG ProductNameSize,
178 OUT LPWSTR ProductName);
179
180 NTSTATUS
181 WdmAudMixerCapabilities(
182 IN PDEVICE_OBJECT DeviceObject,
183 IN PWDMAUD_DEVICE_INFO DeviceInfo,
184 IN PWDMAUD_CLIENT ClientInfo,
185 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
186
187 NTSTATUS
188 WdmAudWaveCapabilities(
189 IN PDEVICE_OBJECT DeviceObject,
190 IN PWDMAUD_DEVICE_INFO DeviceInfo,
191 IN PWDMAUD_CLIENT ClientInfo,
192 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
193
194 NTSTATUS
195 NTAPI
196 WdmAudFrameSize(
197 IN PDEVICE_OBJECT DeviceObject,
198 IN PIRP Irp,
199 IN PWDMAUD_DEVICE_INFO DeviceInfo,
200 IN PWDMAUD_CLIENT ClientInfo);
201
202 NTSTATUS
203 NTAPI
204 WdmAudGetLineInfo(
205 IN PDEVICE_OBJECT DeviceObject,
206 IN PIRP Irp,
207 IN PWDMAUD_DEVICE_INFO DeviceInfo,
208 IN PWDMAUD_CLIENT ClientInfo);
209
210 NTSTATUS
211 NTAPI
212 WdmAudGetLineControls(
213 IN PDEVICE_OBJECT DeviceObject,
214 IN PIRP Irp,
215 IN PWDMAUD_DEVICE_INFO DeviceInfo,
216 IN PWDMAUD_CLIENT ClientInfo);
217
218 NTSTATUS
219 NTAPI
220 WdmAudSetControlDetails(
221 IN PDEVICE_OBJECT DeviceObject,
222 IN PIRP Irp,
223 IN PWDMAUD_DEVICE_INFO DeviceInfo,
224 IN PWDMAUD_CLIENT ClientInfo);
225
226 NTSTATUS
227 NTAPI
228 WdmAudGetControlDetails(
229 IN PDEVICE_OBJECT DeviceObject,
230 IN PIRP Irp,
231 IN PWDMAUD_DEVICE_INFO DeviceInfo,
232 IN PWDMAUD_CLIENT ClientInfo);
233
234 NTSTATUS
235 WdmAudMixerInitialize(
236 IN PDEVICE_OBJECT DeviceObject);
237
238 NTSTATUS
239 NTAPI
240 WdmAudWaveInitialize(
241 IN PDEVICE_OBJECT DeviceObject);
242
243 NTSTATUS
244 ClosePin(
245 IN PWDMAUD_CLIENT ClientInfo,
246 IN ULONG FilterId,
247 IN ULONG PinId,
248 IN SOUND_DEVICE_TYPE DeviceType);
249
250 NTSTATUS
251 InsertPinHandle(
252 IN PWDMAUD_CLIENT ClientInfo,
253 IN ULONG FilterId,
254 IN ULONG PinId,
255 IN SOUND_DEVICE_TYPE DeviceType,
256 IN HANDLE PinHandle,
257 IN ULONG FreeIndex);
258
259
260 #endif