[USBAUDIO]
[reactos.git] / reactos / drivers / usb / usbaudio / usbaudio.h
1 #pragma once
2
3 #include <ntddk.h>
4 #include <portcls.h>
5 #include <ksmedia.h>
6 #include <hubbusif.h>
7 #include <usbbusif.h>
8 #include <usbioctl.h>
9 #include <usb.h>
10 #include <usbdlib.h>
11 #include <debug.h>
12
13 #define USBAUDIO_TAG 'AbsU'
14 #define USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE (0x24)
15
16 /* Universal Serial Bus Device Class Definition for Terminal Types Section 2.2 */
17 #define USB_AUDIO_STREAMING_TERMINAL_TYPE (0x0101)
18
19 #define USB_AUDIO_MICROPHONE_TERMINAL_TYPE (0x0201)
20 #define USB_AUDIO_DESKTOP_MICROPHONE_TERMINAL_TYPE (0x0202)
21 #define USB_AUDIO_PERSONAL_MICROPHONE_TERMINAL_TYPE (0x0203)
22 #define USB_AUDIO_OMMNI_MICROPHONE_TERMINAL_TYPE (0x0204)
23 #define USB_AUDIO_ARRAY_MICROPHONE_TERMINAL_TYPE (0x0205)
24 #define USB_AUDIO_ARRAY_PROCESSING_MICROPHONE_TERMINAL_TYPE (0x0206)
25
26 #define USB_AUDIO_SPEAKER_TERMINAL_TYPE (0x0301)
27 #define USB_HEADPHONES_SPEAKER_TERMINAL_TYPE (0x0302)
28 #define USB_AUDIO_HMDA_TERMINAL_TYPE (0x0303)
29 #define USB_AUDIO_DESKTOP_SPEAKER_TERMINAL_TYPE (0x0304)
30 #define USB_AUDIO_ROOM_SPEAKER_TERMINAL_TYPE (0x0305)
31 #define USB_AUDIO_COMMUNICATION_SPEAKER_TERMINAL_TYPE (0x0306)
32 #define USB_AUDIO_SUBWOOFER_TERMINAL_TYPE (0x0307)
33 #define USB_AUDIO_UNDEFINED_TERMINAL_TYPE (0xFFFF)
34
35 #define USB_AUDIO_INPUT_TERMINAL (0x02)
36 #define USB_AUDIO_OUTPUT_TERMINAL (0x03)
37
38 #include <pshpack1.h>
39
40 typedef struct
41 {
42 UCHAR bLength;
43 UCHAR bDescriptorType;
44 UCHAR bDescriptorSubtype;
45 USHORT bcdADC;
46 USHORT wTotalLength;
47 UCHAR bInCollection;
48 UCHAR baInterfaceNr;
49 }USB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR, *PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR;
50
51 typedef struct
52 {
53 UCHAR bLength;
54 UCHAR bDescriptorType;
55 UCHAR bDescriptorSubtype;
56 UCHAR bTerminalID;
57 USHORT wTerminalType;
58 UCHAR bAssocTerminal;
59 UCHAR bSourceID;
60 UCHAR iTerminal;
61 }USB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR, *PUSB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR;
62
63
64 typedef struct
65 {
66 UCHAR bLength;
67 UCHAR bDescriptorType;
68 UCHAR bDescriptorSubtype;
69 UCHAR bTerminalID;
70 USHORT wTerminalType;
71 UCHAR bAssocTerminal;
72 UCHAR bNrChannels;
73 USHORT wChannelConfig;
74 UCHAR iChannelNames;
75 UCHAR iTerminal;
76 }USB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR, *PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR;
77 #include <poppack.h>
78
79 typedef struct __DEVICE_EXTENSION__
80 {
81 PDEVICE_OBJECT LowerDevice; /* lower device*/
82 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; /* usb configuration descriptor */
83 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; /* usb device descriptor */
84 PUSBD_INTERFACE_INFORMATION InterfaceInfo; /* interface information */
85 USBD_CONFIGURATION_HANDLE ConfigurationHandle; /* configuration handle */
86
87 }DEVICE_EXTENSION, *PDEVICE_EXTENSION;
88
89 /* filter.c */
90
91 NTSTATUS
92 NTAPI
93 USBAudioCreateFilterContext(
94 PKSDEVICE Device);
95
96 /* pool.c */
97 PVOID
98 NTAPI
99 AllocFunction(
100 IN ULONG ItemSize);
101
102 VOID
103 NTAPI
104 FreeFunction(
105 IN PVOID Item);
106
107 /* usbaudio.c */
108
109 NTSTATUS
110 NTAPI
111 USBAudioAddDevice(
112 _In_ PKSDEVICE Device
113 );
114
115 NTSTATUS
116 NTAPI
117 USBAudioPnPStart(
118 _In_ PKSDEVICE Device,
119 _In_ PIRP Irp,
120 _In_opt_ PCM_RESOURCE_LIST TranslatedResourceList,
121 _In_opt_ PCM_RESOURCE_LIST UntranslatedResourceList
122 );
123
124 NTSTATUS
125 NTAPI
126 USBAudioPnPQueryStop(
127 _In_ PKSDEVICE Device,
128 _In_ PIRP Irp
129 );
130
131 VOID
132 NTAPI
133 USBAudioPnPCancelStop(
134 _In_ PKSDEVICE Device,
135 _In_ PIRP Irp
136 );
137
138 VOID
139 NTAPI
140 USBAudioPnPStop(
141 _In_ PKSDEVICE Device,
142 _In_ PIRP Irp
143 );
144
145 NTSTATUS
146 NTAPI
147 USBAudioPnPQueryRemove(
148 _In_ PKSDEVICE Device,
149 _In_ PIRP Irp
150 );
151
152 VOID
153 NTAPI
154 USBAudioPnPCancelRemove(
155 _In_ PKSDEVICE Device,
156 _In_ PIRP Irp
157 );
158
159 VOID
160 NTAPI
161 USBAudioPnPRemove(
162 _In_ PKSDEVICE Device,
163 _In_ PIRP Irp
164 );
165
166 NTSTATUS
167 NTAPI
168 USBAudioPnPQueryCapabilities(
169 _In_ PKSDEVICE Device,
170 _In_ PIRP Irp,
171 _Inout_ PDEVICE_CAPABILITIES Capabilities
172 );
173
174 VOID
175 NTAPI
176 USBAudioPnPSurpriseRemoval(
177 _In_ PKSDEVICE Device,
178 _In_ PIRP Irp
179 );
180
181 NTSTATUS
182 NTAPI
183 USBAudioPnPQueryPower(
184 _In_ PKSDEVICE Device,
185 _In_ PIRP Irp,
186 _In_ DEVICE_POWER_STATE DeviceTo,
187 _In_ DEVICE_POWER_STATE DeviceFrom,
188 _In_ SYSTEM_POWER_STATE SystemTo,
189 _In_ SYSTEM_POWER_STATE SystemFrom,
190 _In_ POWER_ACTION Action
191 );
192
193 VOID
194 NTAPI
195 USBAudioPnPSetPower(
196 _In_ PKSDEVICE Device,
197 _In_ PIRP Irp,
198 _In_ DEVICE_POWER_STATE To,
199 _In_ DEVICE_POWER_STATE From
200 );