- Implement setting / getting volume level
[reactos.git] / reactos / drivers / wdm / audio / legacy / wdmaud / wdmaud.h
index b3c59a2..0b91e15 100644 (file)
@@ -5,70 +5,87 @@
 #include <ntddk.h>
 #include <portcls.h>
 #include <ks.h>
-#define YDEBUG
+#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"
 
-#ifndef MAXPNAMELEN
-#define MAXPNAMELEN      32
-#endif
+typedef struct
+{
+    HANDLE Handle;
+    SOUND_DEVICE_TYPE Type;
+    ULONG FilterId;
+    ULONG PinId;
+}WDMAUD_HANDLE, *PWDMAUD_HANDLE;
 
-#ifndef WAVEOUTCAPS
 
 typedef struct
 {
-    USHORT      wMid;
-    USHORT      wPid;
-    ULONG vDriverVersion;
-    WCHAR     szPname[MAXPNAMELEN];
-    ULONG     dwFormats;
-    USHORT      wChannels;
-    USHORT      wReserved1;
-    ULONG     dwSupport;
-} WAVEOUTCAPS;
+    HANDLE hProcess;
+    ULONG NumPins;
+    WDMAUD_HANDLE * hPins;
 
-#endif
+}WDMAUD_CLIENT, *PWDMAUD_CLIENT;
 
-#ifndef AUXCAPS
+typedef struct
+{
+    LIST_ENTRY Entry;
+    ULONG dwControlID;
+}MIXERCONTROL_DATA, *LPMIXERCONTROL_DATA;
 
-typedef struct { 
-    USHORT      wMid; 
-    USHORT      wPid; 
-    ULONG vDriverVersion; 
-    WCHAR     szPname[MAXPNAMELEN]; 
-    USHORT      wTechnology; 
-    USHORT      wReserved1; 
-    ULONG     dwSupport; 
-} AUXCAPS;
+typedef struct
+{
+    MIXERCONTROL_DATA Header;
+    LONG SignedMinimum;
+    LONG SignedMaximum;
+    LONG SteppingDelta;
+    ULONG InputSteppingDelta;
+    ULONG ValuesCount;
+    PLONG Values;
+}MIXERVOLUME_DATA, *LPMIXERVOLUME_DATA;
 
-#endif
 
-#ifndef WAVEINCAPS
 
-typedef struct 
+typedef struct
 {
-    USHORT      wMid;
-    USHORT      wPid;
-    ULONG vDriverVersion;
-    WCHAR     szPname[MAXPNAMELEN];
-    ULONG     dwFormats;
-    USHORT      wChannels;
-    USHORT      wReserved1;
-} WAVEINCAPS; 
-#endif
+    LIST_ENTRY Entry;
+    ULONG PinId;
+    ULONG DeviceIndex;
+    MIXERLINEW Line;
+    LPMIXERCONTROLW LineControls;
+    PULONG          NodeIds;
+    LIST_ENTRY LineControlsExtraData;
+}MIXERLINE_EXT, *LPMIXERLINE_EXT;
 
-#include "interface.h"
 
 typedef struct
 {
-    HANDLE hProcess;
-    HANDLE hSysAudio;
-    PFILE_OBJECT FileObject;
-    ULONG NumPins;
-    HANDLE * hPins;
+    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;
 
-}WDMAUD_CLIENT, *PWDMAUD_CLIENT;
 
 typedef struct
 {
@@ -86,16 +103,36 @@ typedef struct
     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;
-    IO_STATUS_BLOCK StatusBlock;
-    ULONG Length;
-}WRITE_CONTEXT, *PWRITE_CONTEXT;
+}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(
@@ -118,4 +155,126 @@ 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