01537b0a29806057056bd624dde2f57057ed9a05
[reactos.git] / reactos / drivers / wdm / audio / sysaudio / sysaudio.h
1 #pragma once
2
3 #include <ntifs.h>
4 #include <ntddk.h>
5 #include <portcls.h>
6 #include <ks.h>
7 #include <ksmedia.h>
8 #include <math.h>
9 #define NDEBUG
10 #include <debug.h>
11 #include <stdio.h>
12
13 typedef struct
14 {
15 HANDLE PinHandle; // handle to audio irp pin
16 ULONG References; // number of clients having a reference to this audio irp pin
17 }PIN_INFO;
18
19 typedef struct
20 {
21 LIST_ENTRY Entry; // device entry for KsAudioDeviceList
22 UNICODE_STRING DeviceName; // symbolic link of audio device
23
24 HANDLE Handle; // handle to audio device
25 PFILE_OBJECT FileObject; // file objecto to audio device
26
27 PIN_INFO * Pins; // array of PIN_INFO
28 ULONG PinDescriptorsCount; // number of pin descriptors
29 KSPIN_DESCRIPTOR *PinDescriptors; // pin descriptors array
30 }KSAUDIO_DEVICE_ENTRY, *PKSAUDIO_DEVICE_ENTRY;
31
32 typedef struct
33 {
34 KSDEVICE_HEADER KsDeviceHeader; // ks streaming header - must always be first item in device extension
35 PDEVICE_OBJECT PhysicalDeviceObject; // pdo
36 PDEVICE_OBJECT NextDeviceObject; // lower device object
37 ULONG NumberOfKsAudioDevices; // number of audio devices
38
39 LIST_ENTRY KsAudioDeviceList; // audio device list
40 PVOID KsAudioNotificationEntry; // ks audio notification hook
41 PVOID EchoCancelNotificationEntry; // ks echo cancel notification hook
42 KSPIN_LOCK Lock; // audio device list mutex
43
44 PFILE_OBJECT KMixerFileObject; // mixer file object
45 HANDLE KMixerHandle; // mixer file handle
46
47 }SYSAUDIODEVEXT, *PSYSAUDIODEVEXT;
48
49 // struct DISPATCH_CONTEXT
50 //
51 // This structure is used to dispatch read / write / device io requests
52 // It is stored in the file object FsContext2 member
53 // Note: FsContext member is reserved for ks object header
54
55 typedef struct
56 {
57 KSOBJECT_HEADER ObjectHeader; // pin object header
58 HANDLE Handle; // audio irp pin handle
59 ULONG PinId; // pin id of device
60 PKSAUDIO_DEVICE_ENTRY AudioEntry; // pointer to audio device entry
61
62 HANDLE hMixerPin; // handle to mixer pin
63 }DISPATCH_CONTEXT, *PDISPATCH_CONTEXT;
64
65 typedef struct
66 {
67 PIO_WORKITEM WorkItem;
68 PKSAUDIO_DEVICE_ENTRY DeviceEntry;
69 }FILTER_WORKER_CONTEXT, *PFILTER_WORKER_CONTEXT;
70
71 typedef struct
72 {
73 PIRP Irp;
74 IO_STATUS_BLOCK StatusBlock;
75 }COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
76
77
78
79 NTSTATUS
80 SysAudioAllocateDeviceHeader(
81 IN SYSAUDIODEVEXT *DeviceExtension);
82
83 NTSTATUS
84 SysAudioRegisterDeviceInterfaces(
85 IN PDEVICE_OBJECT DeviceObject);
86
87 NTSTATUS
88 SysAudioRegisterNotifications(
89 IN PDRIVER_OBJECT DriverObject,
90 IN PDEVICE_OBJECT DeviceObject);
91
92 NTSTATUS
93 SysAudioHandleProperty(
94 PDEVICE_OBJECT DeviceObject,
95 PIRP Irp);
96
97 NTSTATUS
98 SysAudioOpenKMixer(
99 IN SYSAUDIODEVEXT *DeviceExtension);
100
101 NTSTATUS
102 OpenDevice(
103 IN PUNICODE_STRING DeviceName,
104 IN PHANDLE HandleOut,
105 IN PFILE_OBJECT * FileObjectOut);
106
107 PKSAUDIO_DEVICE_ENTRY
108 GetListEntry(
109 IN PLIST_ENTRY Head,
110 IN ULONG Index);
111
112 NTSTATUS
113 NTAPI
114 DispatchCreateSysAudioPin(
115 IN PDEVICE_OBJECT DeviceObject,
116 IN PIRP Irp);
117
118 ULONG
119 GetDeviceCount(
120 PSYSAUDIODEVEXT DeviceExtension,
121 BOOL WaveIn);
122
123 NTSTATUS
124 GetPinInstanceCount(
125 PKSAUDIO_DEVICE_ENTRY Entry,
126 PKSPIN_CINSTANCES PinInstances,
127 PKSPIN_CONNECT PinConnect);
128
129 NTSTATUS
130 ComputeCompatibleFormat(
131 IN PKSAUDIO_DEVICE_ENTRY Entry,
132 IN ULONG PinId,
133 IN PKSDATAFORMAT_WAVEFORMATEX ClientFormat,
134 OUT PKSDATAFORMAT_WAVEFORMATEX MixerFormat);