Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284/* ReactOS Sound System NT4 Multimedia Audio Support (ntddsnd.h)
This file is in the public domain.
Author: Andrew Greenwood (andrew.greenwood@silverblade.co.uk)
History: 24 May 2008 - Created 2 July 2008 - Added device names as seen from user-mode 5 July 2008 - Added macros for checking device type 14 Feb 2009 - Added base control codes for nonstandard extensions
This file contains definitions and structures for Windows NT4 style multimedia drivers. The NT4 DDK has these split across multiple header files: NTDDSND.H, NTDDWAVE.H, NTDDMIDI.H, NTDDMIX.H and NTDDAUX.H
Should you have an unstoppable urge to build an NT4 multimedia driver against these headers, just create the other files listed above and make them #include this one.
There are also a number of additional enhancements within this file not found in the originals (such as DOS device name strings and device type IDs).*/
#ifndef NTDDSND_H#define NTDDSND_H
#define SOUND_MAX_DEVICES 100#define SOUND_MAX_DEVICE_NAME 80
/* Base control codes*/
#define IOCTL_SOUND_BASE FILE_DEVICE_SOUND#define IOCTL_WAVE_BASE 0x0000#define IOCTL_MIDI_BASE 0x0080#define IOCTL_AUX_BASE 0x0100#define IOCTL_MIX_BASE 0x0180
/* Helper macros for defining control codes*/
#define WAVE_CTL_CODE(subcode, iomethod, access) \ CTL_CODE(FILE_DEVICE_SOUND, IOCTL_WAVE_BASE + subcode, iomethod, access)
#define MIDI_CTL_CODE(subcode, iomethod, access) \ CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIDI_BASE + subcode, iomethod, access)
#define MIX_CTL_CODE(subcode, iomethod, access) \ CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIX_BASE + subcode, iomethod, access)
#define AUX_CTL_CODE(subcode, iomethod, access) \ CTL_CODE(FILE_DEVICE_SOUND, IOCTL_AUX_BASE + subcode, iomethod, access)
/* Wave device control codes*/
#define IOCTL_WAVE_QUERY_FORMAT \ WAVE_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_WAVE_SET_FORMAT \ WAVE_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_GET_CAPABILITIES \ WAVE_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_WAVE_SET_STATE \ WAVE_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_GET_STATE \ WAVE_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_GET_POSITION \ WAVE_CTL_CODE(0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_SET_VOLUME \ WAVE_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_WAVE_GET_VOLUME \ WAVE_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_WAVE_SET_PITCH \ WAVE_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_GET_PITCH \ WAVE_CTL_CODE(0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_SET_PLAYBACK_RATE \ WAVE_CTL_CODE(0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_GET_PLAYBACK_RATE \ WAVE_CTL_CODE(0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_PLAY \ WAVE_CTL_CODE(0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_RECORD \ WAVE_CTL_CODE(0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_BREAK_LOOP \ WAVE_CTL_CODE(0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_WAVE_SET_LOW_PRIORITY \ WAVE_CTL_CODE(0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#if DBG/* Debug-only control code */#define IOCTL_WAVE_SET_DEBUG_LEVEL \ WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS)#endif
/* MIDI device control codes*/
#define IOCTL_MIDI_GET_CAPABILITIES \ MIDI_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_MIDI_SET_STATE \ MIDI_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_MIDI_GET_STATE \ MIDI_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_MIDI_SET_VOLUME \ MIDI_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_MIDI_GET_VOLUME \ MIDI_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_MIDI_PLAY \ MIDI_CTL_CODE(0x0006, METHOD_NEITHER, FILE_WRITE_ACCESS)
#define IOCTL_MIDI_RECORD \ MIDI_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_MIDI_CACHE_PATCHES \ MIDI_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_MIDI_CACHE_DRUM_PATCHES \ MIDI_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#if DBG/* Debug-only control code */#define IOCTL_MIDI_SET_DEBUG_LEVEL \ WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS)#endif
/* Mixer device control codes*/
#define IOCTL_MIX_GET_CONFIGURATION \ MIX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_MIX_GET_CONTROL_DATA \ MIX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_MIX_GET_LINE_DATA \ MIX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_MIX_REQUEST_NOTIFY \ MIX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
/* Auxiliary device control codes*/
#define IOCTL_AUX_GET_CAPABILITIES \ AUX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AUX_SET_VOLUME \ AUX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AUX_GET_VOLUME \ AUX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_SOUND_GET_CHANGED_VOLUME \ AUX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
/* Wave structures & states*/
#define WAVE_DD_MAX_VOLUME 0xFFFFFFFF
typedef struct _WAVE_DD_VOLUME { ULONG Left; ULONG Right;} WAVE_DD_VOLUME, *PWAVE_DD_VOLUME;
typedef struct _WAVE_DD_PITCH { ULONG Pitch;} WAVE_DD_PITCH, *PWAVE_DD_PITCH;
typedef struct _WAVE_DD_PLAYBACK_RATE { ULONG Rate;} WAVE_DD_PLAYBACK_RATE, *PWAVE_DD_PLAYBACK_RATE;
/* IOCTL_WAVE_SET_STATE commands */#define WAVE_DD_STOP 0x0001#define WAVE_DD_PLAY 0x0002#define WAVE_DD_RECORD 0x0003#define WAVE_DD_RESET 0x0004
/* IOCTL_WAVE_GET_STATE responses */#define WAVE_DD_IDLE 0x0000#define WAVE_DD_STOPPED 0x0001#define WAVE_DD_PLAYING 0x0002#define WAVE_DD_RECORDING 0x0003
/* MIDI structures & states*/
typedef struct _MIDI_DD_INPUT_DATA { LARGE_INTEGER Time; UCHAR Data[sizeof(ULONG)];} MIDI_DD_INPUT_DATA, *PMIDI_DD_INPUT_DATA;
typedef struct _MIDI_DD_VOLUME { ULONG Left; ULONG Right;} MIDI_DD_VOLUME, *PMIDI_DD_VOLUME;
typedef struct _MIDI_DD_CACHE_PATCHES { ULONG Bank; ULONG Flags; ULONG Patches[128];} MIDI_DD_CACHE_PATCHES, *PMIDI_DD_CACHE_PATCHES;
typedef struct _MIDI_DD_CACHE_DRUM_PATCHES { ULONG Patch; ULONG Flags; ULONG DrumPatches[128];} MIDI_DD_CACHE_DRUM_PATCHES, *PMIDI_DD_CACHE_DRUM_PATCHES;
/* IOCTL_MIDI_SET_STATE commands */#define MIDI_DD_STOP 0x0001#define MIDI_DD_PLAY 0x0002#define MIDI_DD_RECORD 0x0003#define MIDI_DD_RESET 0x0004
/* IOCTL_MIDI_GET_STATE responses */#define MIDI_DD_IDLE 0x0000#define MIDI_DD_STOPPED 0x0001#define MIDI_DD_PLAYING 0x0002#define MIDI_DD_RECORDING 0x0003
/* Mixer structures TODO: This is incomplete (see NTDDMIX.H in NT4 DDK)*/
typedef struct _MIXER_DD_READ_DATA { ULONG Id;} MIXER_DD_READ_DATA, *PMIXER_DD_READ_DATA;
typedef struct _MIXER_DD_LINE_DATA { ULONG fdwLine;} MIXER_DD_LINE_DATA, *PMIXER_DD_LINE_DATA;
/* Auxiliary structures*/
#define AUX_DD_MAX_VOLUME 0xFFFFFFFF
typedef struct _AUX_DD_VOLUME { ULONG Left; ULONG Right;} AUX_DD_VOLUME, *PAUX_DD_VOLUME;
#endif /* NTDDSND_H */