13 #define USBAUDIO_TAG 'AbsU'
14 #define USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE (0x24)
16 /* Universal Serial Bus Device Class Definition for Terminal Types Section 2.2 */
17 #define USB_AUDIO_STREAMING_TERMINAL_TYPE (0x0101)
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)
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)
35 #define USB_AUDIO_INPUT_TERMINAL (0x02)
36 #define USB_AUDIO_OUTPUT_TERMINAL (0x03)
43 UCHAR bDescriptorType
;
44 UCHAR bDescriptorSubtype
;
49 }USB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR
;
54 UCHAR bDescriptorType
;
55 UCHAR bDescriptorSubtype
;
61 }USB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR
;
67 UCHAR bDescriptorType
;
68 UCHAR bDescriptorSubtype
;
73 USHORT wChannelConfig
;
76 }USB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR
;
81 UCHAR bDescriptorType
;
82 UCHAR bDescriptorSubtype
;
88 }USB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR
;
93 UCHAR bDescriptorType
;
94 UCHAR bDescriptorSubtype
;
99 USHORT wChannelConfig
;
103 }USB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR
;
109 UCHAR bDescriptorType
;
110 UCHAR bDescriptorSubtype
;
114 }USB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR
, *PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR
;
119 UCHAR bDescriptorType
;
120 UCHAR bDescriptorSubtype
;
124 UCHAR bBitResolution
;
127 }USB_AUDIO_STREAMING_FORMAT_TYPE_DESCRIPTOR
, *PUSB_AUDIO_STREAMING_FORMAT_TYPE_DESCRIPTOR
;
131 typedef struct __DEVICE_EXTENSION__
133 PDEVICE_OBJECT LowerDevice
; /* lower device*/
134 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
; /* usb configuration descriptor */
135 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
; /* usb device descriptor */
136 PUSBD_INTERFACE_INFORMATION InterfaceInfo
; /* interface information */
137 USBD_CONFIGURATION_HANDLE ConfigurationHandle
; /* configuration handle */
139 }DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
143 PDEVICE_EXTENSION DeviceExtension
; /* device extension */
144 PDEVICE_OBJECT LowerDevice
; /* lower device*/
146 }FILTER_CONTEXT
, *PFILTER_CONTEXT
;
150 PDEVICE_EXTENSION DeviceExtension
; /* device extension */
151 PDEVICE_OBJECT LowerDevice
; /* lower device*/
152 LIST_ENTRY IrpListHead
; /* irp list*/
153 LIST_ENTRY DoneIrpListHead
; /* irp done list head */
154 KSPIN_LOCK IrpListLock
; /* irp list lock*/
155 PUCHAR Buffer
; /* iso buffer*/
156 ULONG BufferSize
; /* iso buffer size */
157 PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
; /* interface descriptor */
158 WORK_QUEUE_ITEM CaptureWorkItem
; /* work item */
159 PKSWORKER CaptureWorker
; /* capture worker */
160 WORK_QUEUE_ITEM StarvationWorkItem
; /* work item */
161 PKSWORKER StarvationWorker
; /* capture worker */
162 }PIN_CONTEXT
, *PPIN_CONTEXT
;
166 PUSB_COMMON_DESCRIPTOR Descriptor
;
169 }NODE_CONTEXT
, *PNODE_CONTEXT
;
176 USBAudioCreateFilterContext(
193 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
,
194 OUT PULONG NonStreamingTerminalDescriptorCount
,
195 OUT PULONG TotalTerminalDescriptorCount
);
201 IN PDEVICE_OBJECT Device
,
207 _In_ PKSDEVICE Device
213 _In_ PKSDEVICE Device
,
215 _In_opt_ PCM_RESOURCE_LIST TranslatedResourceList
,
216 _In_opt_ PCM_RESOURCE_LIST UntranslatedResourceList
221 USBAudioPnPQueryStop(
222 _In_ PKSDEVICE Device
,
228 USBAudioPnPCancelStop(
229 _In_ PKSDEVICE Device
,
236 _In_ PKSDEVICE Device
,
242 USBAudioPnPQueryRemove(
243 _In_ PKSDEVICE Device
,
249 USBAudioPnPCancelRemove(
250 _In_ PKSDEVICE Device
,
257 _In_ PKSDEVICE Device
,
263 USBAudioPnPQueryCapabilities(
264 _In_ PKSDEVICE Device
,
266 _Inout_ PDEVICE_CAPABILITIES Capabilities
271 USBAudioPnPSurpriseRemoval(
272 _In_ PKSDEVICE Device
,
278 USBAudioPnPQueryPower(
279 _In_ PKSDEVICE Device
,
281 _In_ DEVICE_POWER_STATE DeviceTo
,
282 _In_ DEVICE_POWER_STATE DeviceFrom
,
283 _In_ SYSTEM_POWER_STATE SystemTo
,
284 _In_ SYSTEM_POWER_STATE SystemFrom
,
285 _In_ POWER_ACTION Action
291 _In_ PKSDEVICE Device
,
293 _In_ DEVICE_POWER_STATE To
,
294 _In_ DEVICE_POWER_STATE From
301 UsbAudioPinDataIntersect(
305 _In_ PKSDATARANGE DataRange
,
306 _In_ PKSDATARANGE MatchingDataRange
,
307 _In_ ULONG DataBufferSize
,
309 _Out_ PULONG DataSize
);
313 UsbAudioCaptureComplete(
314 IN PDEVICE_OBJECT DeviceObject
,
342 USBAudioPinSetDataFormat(
344 _In_opt_ PKSDATAFORMAT OldFormat
,
345 _In_opt_ PKSMULTIPLE_ITEM OldAttributeList
,
346 _In_
const KSDATARANGE
* DataRange
,
347 _In_opt_
const KSATTRIBUTE_LIST
* AttributeRange
);
351 USBAudioPinSetDeviceState(
353 _In_ KSSTATE ToState
,
354 _In_ KSSTATE FromState
);