- Implement setting / getting volume level
[reactos.git] / reactos / drivers / wdm / audio / legacy / wdmaud / wdmaud.h
index ef87e34..0b91e15 100644 (file)
 #ifndef WDMAUD_H__
 #define WDMAUD_H__
 
-#define _NTDDK_
+#include <pseh/pseh2.h>
 #include <ntddk.h>
 #include <portcls.h>
-#define YDEBUG
+#include <ks.h>
+#define NDEBUG
 #include <debug.h>
+#include <ksmedia.h>
+#include <mmreg.h>
+#include <mmsystem.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <wchar.h>
+
+#include "interface.h"
+
+typedef struct
+{
+    HANDLE Handle;
+    SOUND_DEVICE_TYPE Type;
+    ULONG FilterId;
+    ULONG PinId;
+}WDMAUD_HANDLE, *PWDMAUD_HANDLE;
+
+
+typedef struct
+{
+    HANDLE hProcess;
+    ULONG NumPins;
+    WDMAUD_HANDLE * hPins;
+
+}WDMAUD_CLIENT, *PWDMAUD_CLIENT;
+
+typedef struct
+{
+    LIST_ENTRY Entry;
+    ULONG dwControlID;
+}MIXERCONTROL_DATA, *LPMIXERCONTROL_DATA;
+
+typedef struct
+{
+    MIXERCONTROL_DATA Header;
+    LONG SignedMinimum;
+    LONG SignedMaximum;
+    LONG SteppingDelta;
+    ULONG InputSteppingDelta;
+    ULONG ValuesCount;
+    PLONG Values;
+}MIXERVOLUME_DATA, *LPMIXERVOLUME_DATA;
+
+
+
+typedef struct
+{
+    LIST_ENTRY Entry;
+    ULONG PinId;
+    ULONG DeviceIndex;
+    MIXERLINEW Line;
+    LPMIXERCONTROLW LineControls;
+    PULONG          NodeIds;
+    LIST_ENTRY LineControlsExtraData;
+}MIXERLINE_EXT, *LPMIXERLINE_EXT;
+
+
+typedef struct
+{
+    MIXERCAPSW    MixCaps;
+
+    LIST_ENTRY    LineList;
+    ULONG ControlId;
+}MIXER_INFO, *LPMIXER_INFO;
+
+
+typedef struct
+{
+    LIST_ENTRY Entry;
+    ULONG FilterId;
+    ULONG PinId;
+    ULONG bInput;
+    union
+    {
+        WAVEOUTCAPSW OutCaps;
+        WAVEINCAPSW  InCaps;
+    }u;
+}WAVE_INFO, *LPWAVE_INFO;
+
+
+typedef struct
+{
+    LIST_ENTRY Entry;
+    UNICODE_STRING SymbolicLink;
+}SYSAUDIO_ENTRY, *PSYSAUDIO_ENTRY;
 
 typedef struct
 {
     KSDEVICE_HEADER DeviceHeader;
     PVOID SysAudioNotification;
 
+    BOOL DeviceInterfaceSupport;
+
+    KSPIN_LOCK Lock;
+    ULONG NumSysAudioDevices;
+    LIST_ENTRY SysAudioDeviceList;
+    HANDLE hSysAudio;
+    PFILE_OBJECT FileObject;
+
+    ULONG MixerInfoCount;
+    LPMIXER_INFO MixerInfo;
+
+    ULONG WaveInDeviceCount;
+    LIST_ENTRY WaveInList;
+
+    ULONG WaveOutDeviceCount;
+    LIST_ENTRY WaveOutList;
+
+
 }WDMAUD_DEVICE_EXTENSION, *PWDMAUD_DEVICE_EXTENSION;
 
+typedef struct
+{
+    KSSTREAM_HEADER Header;
+    PIRP Irp;
+}CONTEXT_WRITE, *PCONTEXT_WRITE;
+
+NTSTATUS
+NTAPI
+OpenWavePin(
+    IN PWDMAUD_DEVICE_EXTENSION DeviceExtension,
+    IN ULONG FilterId,
+    IN ULONG PinId,
+    IN LPWAVEFORMATEX WaveFormatEx,
+    IN ACCESS_MASK DesiredAccess,
+    OUT PHANDLE PinHandle);
+
+NTSTATUS
+WdmAudRegisterDeviceInterface(
+    IN PDEVICE_OBJECT PhysicalDeviceObject,
+    IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
+
+NTSTATUS
+WdmAudOpenSysAudioDevices(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
+
+NTSTATUS
+WdmAudOpenSysaudio(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PWDMAUD_CLIENT *pClient);
+
+NTSTATUS
+NTAPI
+WdmAudDeviceControl(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp);
+
+NTSTATUS
+NTAPI
+WdmAudWrite(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp);
+
+NTSTATUS
+WdmAudControlOpenMixer(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo);
+
+NTSTATUS
+WdmAudControlOpenWave(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo);
+
+
+ULONG
+GetNumOfMixerDevices(
+    IN  PDEVICE_OBJECT DeviceObject);
+
+NTSTATUS
+SetIrpIoStatus(
+    IN PIRP Irp,
+    IN NTSTATUS Status,
+    IN ULONG Length);
+
+NTSTATUS
+WdmAudOpenSysAudioDevice(
+    IN LPWSTR DeviceName,
+    OUT PHANDLE Handle);
+
+NTSTATUS
+FindProductName(
+    IN LPWSTR PnpName,
+    IN ULONG ProductNameSize,
+    OUT LPWSTR ProductName);
+
+NTSTATUS
+WdmAudMixerCapabilities(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo,
+    IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
+
+NTSTATUS
+WdmAudWaveCapabilities(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo,
+    IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
+
+NTSTATUS
+NTAPI
+WdmAudFrameSize(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo);
 
+NTSTATUS
+NTAPI
+WdmAudGetLineInfo(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo);
 
+NTSTATUS
+NTAPI
+WdmAudGetLineControls(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo);
 
+NTSTATUS
+NTAPI
+WdmAudSetControlDetails(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo);
 
+NTSTATUS
+NTAPI
+WdmAudGetControlDetails(
+    IN  PDEVICE_OBJECT DeviceObject,
+    IN  PIRP Irp,
+    IN  PWDMAUD_DEVICE_INFO DeviceInfo,
+    IN  PWDMAUD_CLIENT ClientInfo);
 
+NTSTATUS
+WdmAudMixerInitialize(
+    IN PDEVICE_OBJECT DeviceObject);
 
+NTSTATUS
+NTAPI
+WdmAudWaveInitialize(
+    IN PDEVICE_OBJECT DeviceObject);
 
+NTSTATUS
+ClosePin(
+    IN  PWDMAUD_CLIENT ClientInfo,
+    IN  ULONG FilterId,
+    IN  ULONG PinId,
+    IN  SOUND_DEVICE_TYPE DeviceType);
 
+NTSTATUS
+InsertPinHandle(
+    IN  PWDMAUD_CLIENT ClientInfo,
+    IN  ULONG FilterId,
+    IN  ULONG PinId,
+    IN  SOUND_DEVICE_TYPE DeviceType,
+    IN  HANDLE PinHandle,
+    IN  ULONG FreeIndex);
 
 
 #endif