ReactOS  0.4.15-dev-489-g75a0787
ntddsnd.h
Go to the documentation of this file.
1 /*
2  ReactOS Sound System
3  NT4 Multimedia Audio Support (ntddsnd.h)
4 
5  This file is in the public domain.
6 
7  Author:
8  Andrew Greenwood (andrew.greenwood@silverblade.co.uk)
9 
10  History:
11  24 May 2008 - Created
12  2 July 2008 - Added device names as seen from user-mode
13  5 July 2008 - Added macros for checking device type
14  14 Feb 2009 - Added base control codes for nonstandard extensions
15 
16  This file contains definitions and structures for Windows NT4 style
17  multimedia drivers. The NT4 DDK has these split across multiple header
18  files: NTDDSND.H, NTDDWAVE.H, NTDDMIDI.H, NTDDMIX.H and NTDDAUX.H
19 
20  Should you have an unstoppable urge to build an NT4 multimedia driver
21  against these headers, just create the other files listed above and make
22  them #include this one.
23 
24  There are also a number of additional enhancements within this file
25  not found in the originals (such as DOS device name strings and device
26  type IDs).
27 */
28 
29 #ifndef NTDDSND_H
30 #define NTDDSND_H
31 
32 #define SOUND_MAX_DEVICES 100
33 #define SOUND_MAX_DEVICE_NAME 80
34 
35 /*
36  Base control codes
37 */
38 
39 #define IOCTL_SOUND_BASE FILE_DEVICE_SOUND
40 #define IOCTL_WAVE_BASE 0x0000
41 #define IOCTL_MIDI_BASE 0x0080
42 #define IOCTL_AUX_BASE 0x0100
43 #define IOCTL_MIX_BASE 0x0180
44 
45 /*
46  Helper macros for defining control codes
47 */
48 
49 #define WAVE_CTL_CODE(subcode, iomethod, access) \
50  CTL_CODE(FILE_DEVICE_SOUND, IOCTL_WAVE_BASE + subcode, iomethod, access)
51 
52 #define MIDI_CTL_CODE(subcode, iomethod, access) \
53  CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIDI_BASE + subcode, iomethod, access)
54 
55 #define MIX_CTL_CODE(subcode, iomethod, access) \
56  CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIX_BASE + subcode, iomethod, access)
57 
58 #define AUX_CTL_CODE(subcode, iomethod, access) \
59  CTL_CODE(FILE_DEVICE_SOUND, IOCTL_AUX_BASE + subcode, iomethod, access)
60 
61 /*
62  Wave device control codes
63 */
64 
65 #define IOCTL_WAVE_QUERY_FORMAT \
66  WAVE_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
67 
68 #define IOCTL_WAVE_SET_FORMAT \
69  WAVE_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
70 
71 #define IOCTL_WAVE_GET_CAPABILITIES \
72  WAVE_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
73 
74 #define IOCTL_WAVE_SET_STATE \
75  WAVE_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS)
76 
77 #define IOCTL_WAVE_GET_STATE \
78  WAVE_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS)
79 
80 #define IOCTL_WAVE_GET_POSITION \
81  WAVE_CTL_CODE(0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)
82 
83 #define IOCTL_WAVE_SET_VOLUME \
84  WAVE_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
85 
86 #define IOCTL_WAVE_GET_VOLUME \
87  WAVE_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
88 
89 #define IOCTL_WAVE_SET_PITCH \
90  WAVE_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
91 
92 #define IOCTL_WAVE_GET_PITCH \
93  WAVE_CTL_CODE(0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS)
94 
95 #define IOCTL_WAVE_SET_PLAYBACK_RATE \
96  WAVE_CTL_CODE(0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS)
97 
98 #define IOCTL_WAVE_GET_PLAYBACK_RATE \
99  WAVE_CTL_CODE(0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS)
100 
101 #define IOCTL_WAVE_PLAY \
102  WAVE_CTL_CODE(0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS)
103 
104 #define IOCTL_WAVE_RECORD \
105  WAVE_CTL_CODE(0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS)
106 
107 #define IOCTL_WAVE_BREAK_LOOP \
108  WAVE_CTL_CODE(0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS)
109 
110 #define IOCTL_WAVE_SET_LOW_PRIORITY \
111  WAVE_CTL_CODE(0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS)
112 
113 #if DBG
114 /* Debug-only control code */
115 #define IOCTL_WAVE_SET_DEBUG_LEVEL \
116  WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS)
117 #endif
118 
119 
120 /*
121  MIDI device control codes
122 */
123 
124 #define IOCTL_MIDI_GET_CAPABILITIES \
125  MIDI_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
126 
127 #define IOCTL_MIDI_SET_STATE \
128  MIDI_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
129 
130 #define IOCTL_MIDI_GET_STATE \
131  MIDI_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS)
132 
133 #define IOCTL_MIDI_SET_VOLUME \
134  MIDI_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
135 
136 #define IOCTL_MIDI_GET_VOLUME \
137  MIDI_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
138 
139 #define IOCTL_MIDI_PLAY \
140  MIDI_CTL_CODE(0x0006, METHOD_NEITHER, FILE_WRITE_ACCESS)
141 
142 #define IOCTL_MIDI_RECORD \
143  MIDI_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS)
144 
145 #define IOCTL_MIDI_CACHE_PATCHES \
146  MIDI_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS)
147 
148 #define IOCTL_MIDI_CACHE_DRUM_PATCHES \
149  MIDI_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
150 
151 #if DBG
152 /* Debug-only control code */
153 #define IOCTL_MIDI_SET_DEBUG_LEVEL \
154  WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS)
155 #endif
156 
157 /*
158  Mixer device control codes
159 */
160 
161 #define IOCTL_MIX_GET_CONFIGURATION \
162  MIX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
163 
164 #define IOCTL_MIX_GET_CONTROL_DATA \
165  MIX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
166 
167 #define IOCTL_MIX_GET_LINE_DATA \
168  MIX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
169 
170 #define IOCTL_MIX_REQUEST_NOTIFY \
171  MIX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
172 
173 /*
174  Auxiliary device control codes
175 */
176 
177 #define IOCTL_AUX_GET_CAPABILITIES \
178  AUX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
179 
180 #define IOCTL_AUX_SET_VOLUME \
181  AUX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
182 
183 #define IOCTL_AUX_GET_VOLUME \
184  AUX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
185 
186 #define IOCTL_SOUND_GET_CHANGED_VOLUME \
187  AUX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
188 
189 /*
190  Wave structures & states
191 */
192 
193 #define WAVE_DD_MAX_VOLUME 0xFFFFFFFF
194 
195 typedef struct _WAVE_DD_VOLUME {
196  ULONG Left;
197  ULONG Right;
199 
200 typedef struct _WAVE_DD_PITCH {
203 
204 typedef struct _WAVE_DD_PLAYBACK_RATE {
207 
208 /* IOCTL_WAVE_SET_STATE commands */
209 #define WAVE_DD_STOP 0x0001
210 #define WAVE_DD_PLAY 0x0002
211 #define WAVE_DD_RECORD 0x0003
212 #define WAVE_DD_RESET 0x0004
213 
214 /* IOCTL_WAVE_GET_STATE responses */
215 #define WAVE_DD_IDLE 0x0000
216 #define WAVE_DD_STOPPED 0x0001
217 #define WAVE_DD_PLAYING 0x0002
218 #define WAVE_DD_RECORDING 0x0003
219 
220 /*
221  MIDI structures & states
222 */
223 
224 typedef struct _MIDI_DD_INPUT_DATA {
226  UCHAR Data[sizeof(ULONG)];
228 
229 typedef struct _MIDI_DD_VOLUME {
233 
234 typedef struct _MIDI_DD_CACHE_PATCHES {
239 
245 
246 /* IOCTL_MIDI_SET_STATE commands */
247 #define MIDI_DD_STOP 0x0001
248 #define MIDI_DD_PLAY 0x0002
249 #define MIDI_DD_RECORD 0x0003
250 #define MIDI_DD_RESET 0x0004
251 
252 /* IOCTL_MIDI_GET_STATE responses */
253 #define MIDI_DD_IDLE 0x0000
254 #define MIDI_DD_STOPPED 0x0001
255 #define MIDI_DD_PLAYING 0x0002
256 #define MIDI_DD_RECORDING 0x0003
257 
258 /*
259  Mixer structures
260  TODO: This is incomplete (see NTDDMIX.H in NT4 DDK)
261 */
262 
263 typedef struct _MIXER_DD_READ_DATA {
266 
267 typedef struct _MIXER_DD_LINE_DATA {
270 
271 /*
272  Auxiliary structures
273 */
274 
275 #define AUX_DD_MAX_VOLUME 0xFFFFFFFF
276 
277 typedef struct _AUX_DD_VOLUME {
278  ULONG Left;
279  ULONG Right;
281 
282 
283 #endif /* NTDDSND_H */
ULONG Left
Definition: wave.h:91
struct _WAVE_DD_PLAYBACK_RATE * PWAVE_DD_PLAYBACK_RATE
struct _MIDI_DD_CACHE_PATCHES * PMIDI_DD_CACHE_PATCHES
struct _MIDI_DD_VOLUME MIDI_DD_VOLUME
struct _WAVE_DD_VOLUME WAVE_DD_VOLUME
struct _WAVE_DD_VOLUME * PWAVE_DD_VOLUME
struct _MIXER_DD_READ_DATA * PMIXER_DD_READ_DATA
struct _MIDI_DD_CACHE_PATCHES MIDI_DD_CACHE_PATCHES
struct _WAVE_DD_PITCH * PWAVE_DD_PITCH
struct _MIXER_DD_LINE_DATA MIXER_DD_LINE_DATA
ULONG Patches[128]
Definition: ntddsnd.h:237
struct _MIXER_DD_READ_DATA MIXER_DD_READ_DATA
struct _MIDI_DD_INPUT_DATA * PMIDI_DD_INPUT_DATA
struct _AUX_DD_VOLUME * PAUX_DD_VOLUME
struct _MIDI_DD_VOLUME * PMIDI_DD_VOLUME
ULONG Left
Definition: wave.h:5
struct _AUX_DD_VOLUME AUX_DD_VOLUME
ULONG Right
Definition: wave.h:6
unsigned char UCHAR
Definition: xmlstorage.h:181
struct _MIDI_DD_INPUT_DATA MIDI_DD_INPUT_DATA
struct _WAVE_DD_PITCH WAVE_DD_PITCH
struct _MIDI_DD_CACHE_DRUM_PATCHES * PMIDI_DD_CACHE_DRUM_PATCHES
ULONG Pitch
Definition: ntddsnd.h:201
struct _WAVE_DD_PLAYBACK_RATE WAVE_DD_PLAYBACK_RATE
ULONG Right
Definition: wave.h:92
unsigned int ULONG
Definition: retypes.h:1
struct _MIXER_DD_LINE_DATA * PMIXER_DD_LINE_DATA
LARGE_INTEGER Time
Definition: ntddsnd.h:225
struct _MIDI_DD_CACHE_DRUM_PATCHES MIDI_DD_CACHE_DRUM_PATCHES