Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenntddsnd.h
Go to the documentation of this file.
00001 /* 00002 ReactOS Sound System 00003 NT4 Multimedia Audio Support (ntddsnd.h) 00004 00005 This file is in the public domain. 00006 00007 Author: 00008 Andrew Greenwood (andrew.greenwood@silverblade.co.uk) 00009 00010 History: 00011 24 May 2008 - Created 00012 2 July 2008 - Added device names as seen from user-mode 00013 5 July 2008 - Added macros for checking device type 00014 14 Feb 2009 - Added base control codes for nonstandard extensions 00015 00016 This file contains definitions and structures for Windows NT4 style 00017 multimedia drivers. The NT4 DDK has these split across multiple header 00018 files: NTDDSND.H, NTDDWAVE.H, NTDDMIDI.H, NTDDMIX.H and NTDDAUX.H 00019 00020 Should you have an unstoppable urge to build an NT4 multimedia driver 00021 against these headers, just create the other files listed above and make 00022 them #include this one. 00023 00024 There are also a number of additional enhancements within this file 00025 not found in the originals (such as DOS device name strings and device 00026 type IDs). 00027 */ 00028 00029 #ifndef NTDDSND_H 00030 #define NTDDSND_H 00031 00032 #define SOUND_MAX_DEVICES 100 00033 #define SOUND_MAX_DEVICE_NAME 80 00034 00035 /* 00036 Base control codes 00037 */ 00038 00039 #define IOCTL_SOUND_BASE FILE_DEVICE_SOUND 00040 #define IOCTL_WAVE_BASE 0x0000 00041 #define IOCTL_MIDI_BASE 0x0080 00042 #define IOCTL_AUX_BASE 0x0100 00043 #define IOCTL_MIX_BASE 0x0180 00044 00045 /* 00046 Helper macros for defining control codes 00047 */ 00048 00049 #define WAVE_CTL_CODE(subcode, iomethod, access) \ 00050 CTL_CODE(FILE_DEVICE_SOUND, IOCTL_WAVE_BASE + subcode, iomethod, access) 00051 00052 #define MIDI_CTL_CODE(subcode, iomethod, access) \ 00053 CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIDI_BASE + subcode, iomethod, access) 00054 00055 #define MIX_CTL_CODE(subcode, iomethod, access) \ 00056 CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIX_BASE + subcode, iomethod, access) 00057 00058 #define AUX_CTL_CODE(subcode, iomethod, access) \ 00059 CTL_CODE(FILE_DEVICE_SOUND, IOCTL_AUX_BASE + subcode, iomethod, access) 00060 00061 /* 00062 Wave device control codes 00063 */ 00064 00065 #define IOCTL_WAVE_QUERY_FORMAT \ 00066 WAVE_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00067 00068 #define IOCTL_WAVE_SET_FORMAT \ 00069 WAVE_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00070 00071 #define IOCTL_WAVE_GET_CAPABILITIES \ 00072 WAVE_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) 00073 00074 #define IOCTL_WAVE_SET_STATE \ 00075 WAVE_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00076 00077 #define IOCTL_WAVE_GET_STATE \ 00078 WAVE_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00079 00080 #define IOCTL_WAVE_GET_POSITION \ 00081 WAVE_CTL_CODE(0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00082 00083 #define IOCTL_WAVE_SET_VOLUME \ 00084 WAVE_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) 00085 00086 #define IOCTL_WAVE_GET_VOLUME \ 00087 WAVE_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) 00088 00089 #define IOCTL_WAVE_SET_PITCH \ 00090 WAVE_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00091 00092 #define IOCTL_WAVE_GET_PITCH \ 00093 WAVE_CTL_CODE(0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00094 00095 #define IOCTL_WAVE_SET_PLAYBACK_RATE \ 00096 WAVE_CTL_CODE(0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00097 00098 #define IOCTL_WAVE_GET_PLAYBACK_RATE \ 00099 WAVE_CTL_CODE(0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00100 00101 #define IOCTL_WAVE_PLAY \ 00102 WAVE_CTL_CODE(0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS) 00103 00104 #define IOCTL_WAVE_RECORD \ 00105 WAVE_CTL_CODE(0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS) 00106 00107 #define IOCTL_WAVE_BREAK_LOOP \ 00108 WAVE_CTL_CODE(0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00109 00110 #define IOCTL_WAVE_SET_LOW_PRIORITY \ 00111 WAVE_CTL_CODE(0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00112 00113 #if DBG 00114 /* Debug-only control code */ 00115 #define IOCTL_WAVE_SET_DEBUG_LEVEL \ 00116 WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS) 00117 #endif 00118 00119 00120 /* 00121 MIDI device control codes 00122 */ 00123 00124 #define IOCTL_MIDI_GET_CAPABILITIES \ 00125 MIDI_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00126 00127 #define IOCTL_MIDI_SET_STATE \ 00128 MIDI_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00129 00130 #define IOCTL_MIDI_GET_STATE \ 00131 MIDI_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00132 00133 #define IOCTL_MIDI_SET_VOLUME \ 00134 MIDI_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) 00135 00136 #define IOCTL_MIDI_GET_VOLUME \ 00137 MIDI_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) 00138 00139 #define IOCTL_MIDI_PLAY \ 00140 MIDI_CTL_CODE(0x0006, METHOD_NEITHER, FILE_WRITE_ACCESS) 00141 00142 #define IOCTL_MIDI_RECORD \ 00143 MIDI_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00144 00145 #define IOCTL_MIDI_CACHE_PATCHES \ 00146 MIDI_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00147 00148 #define IOCTL_MIDI_CACHE_DRUM_PATCHES \ 00149 MIDI_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00150 00151 #if DBG 00152 /* Debug-only control code */ 00153 #define IOCTL_MIDI_SET_DEBUG_LEVEL \ 00154 WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS) 00155 #endif 00156 00157 /* 00158 Mixer device control codes 00159 */ 00160 00161 #define IOCTL_MIX_GET_CONFIGURATION \ 00162 MIX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00163 00164 #define IOCTL_MIX_GET_CONTROL_DATA \ 00165 MIX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) 00166 00167 #define IOCTL_MIX_GET_LINE_DATA \ 00168 MIX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) 00169 00170 #define IOCTL_MIX_REQUEST_NOTIFY \ 00171 MIX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) 00172 00173 /* 00174 Auxiliary device control codes 00175 */ 00176 00177 #define IOCTL_AUX_GET_CAPABILITIES \ 00178 AUX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00179 00180 #define IOCTL_AUX_SET_VOLUME \ 00181 AUX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) 00182 00183 #define IOCTL_AUX_GET_VOLUME \ 00184 AUX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) 00185 00186 #define IOCTL_SOUND_GET_CHANGED_VOLUME \ 00187 AUX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) 00188 00189 /* 00190 Wave structures & states 00191 */ 00192 00193 #define WAVE_DD_MAX_VOLUME 0xFFFFFFFF 00194 00195 typedef struct _WAVE_DD_VOLUME { 00196 ULONG Left; 00197 ULONG Right; 00198 } WAVE_DD_VOLUME, *PWAVE_DD_VOLUME; 00199 00200 typedef struct _WAVE_DD_PITCH { 00201 ULONG Pitch; 00202 } WAVE_DD_PITCH, *PWAVE_DD_PITCH; 00203 00204 typedef struct _WAVE_DD_PLAYBACK_RATE { 00205 ULONG Rate; 00206 } WAVE_DD_PLAYBACK_RATE, *PWAVE_DD_PLAYBACK_RATE; 00207 00208 /* IOCTL_WAVE_SET_STATE commands */ 00209 #define WAVE_DD_STOP 0x0001 00210 #define WAVE_DD_PLAY 0x0002 00211 #define WAVE_DD_RECORD 0x0003 00212 #define WAVE_DD_RESET 0x0004 00213 00214 /* IOCTL_WAVE_GET_STATE responses */ 00215 #define WAVE_DD_IDLE 0x0000 00216 #define WAVE_DD_STOPPED 0x0001 00217 #define WAVE_DD_PLAYING 0x0002 00218 #define WAVE_DD_RECORDING 0x0003 00219 00220 /* 00221 MIDI structures & states 00222 */ 00223 00224 typedef struct _MIDI_DD_INPUT_DATA { 00225 LARGE_INTEGER Time; 00226 UCHAR Data[sizeof(ULONG)]; 00227 } MIDI_DD_INPUT_DATA, *PMIDI_DD_INPUT_DATA; 00228 00229 typedef struct _MIDI_DD_VOLUME { 00230 ULONG Left; 00231 ULONG Right; 00232 } MIDI_DD_VOLUME, *PMIDI_DD_VOLUME; 00233 00234 typedef struct _MIDI_DD_CACHE_PATCHES { 00235 ULONG Bank; 00236 ULONG Flags; 00237 ULONG Patches[128]; 00238 } MIDI_DD_CACHE_PATCHES, *PMIDI_DD_CACHE_PATCHES; 00239 00240 typedef struct _MIDI_DD_CACHE_DRUM_PATCHES { 00241 ULONG Patch; 00242 ULONG Flags; 00243 ULONG DrumPatches[128]; 00244 } MIDI_DD_CACHE_DRUM_PATCHES, *PMIDI_DD_CACHE_DRUM_PATCHES; 00245 00246 /* IOCTL_MIDI_SET_STATE commands */ 00247 #define MIDI_DD_STOP 0x0001 00248 #define MIDI_DD_PLAY 0x0002 00249 #define MIDI_DD_RECORD 0x0003 00250 #define MIDI_DD_RESET 0x0004 00251 00252 /* IOCTL_MIDI_GET_STATE responses */ 00253 #define MIDI_DD_IDLE 0x0000 00254 #define MIDI_DD_STOPPED 0x0001 00255 #define MIDI_DD_PLAYING 0x0002 00256 #define MIDI_DD_RECORDING 0x0003 00257 00258 /* 00259 Mixer structures 00260 TODO: This is incomplete (see NTDDMIX.H in NT4 DDK) 00261 */ 00262 00263 typedef struct _MIXER_DD_READ_DATA { 00264 ULONG Id; 00265 } MIXER_DD_READ_DATA, *PMIXER_DD_READ_DATA; 00266 00267 typedef struct _MIXER_DD_LINE_DATA { 00268 ULONG fdwLine; 00269 } MIXER_DD_LINE_DATA, *PMIXER_DD_LINE_DATA; 00270 00271 /* 00272 Auxiliary structures 00273 */ 00274 00275 #define AUX_DD_MAX_VOLUME 0xFFFFFFFF 00276 00277 typedef struct _AUX_DD_VOLUME { 00278 ULONG Left; 00279 ULONG Right; 00280 } AUX_DD_VOLUME, *PAUX_DD_VOLUME; 00281 00282 00283 #endif /* NTDDSND_H */ Generated on Sun May 27 2012 04:30:09 for ReactOS by
1.7.6.1
|