Mercurial > games > semicongine
diff fuhtark_test/include/ddk/ntddsnd.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fuhtark_test/include/ddk/ntddsnd.h Wed Nov 26 21:36:48 2025 +0700 @@ -0,0 +1,302 @@ +/* + 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
