ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ntddsnd.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.