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