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)
38 #define DEFINE_KSPROPERTY_ITEM_AUDIO_VOLUME(Handler)\
39 DEFINE_KSPROPERTY_ITEM(\
40 KSPROPERTY_AUDIO_VOLUMELEVEL,\
42 sizeof(KSNODEPROPERTY_AUDIO_CHANNEL),\
44 (Handler), NULL, 0, NULL, NULL, 0)
47 #define DEFINE_KSPROPERTY_TABLE_AUDIO_VOLUME(TopologySet, Handler)\
48 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
49 DEFINE_KSPROPERTY_ITEM_AUDIO_VOLUME(Handler)\
52 #define DEFINE_KSPROPERTY_ITEM_AUDIO_MUTE(Handler)\
53 DEFINE_KSPROPERTY_ITEM(\
54 KSPROPERTY_AUDIO_MUTE,\
56 sizeof(KSNODEPROPERTY_AUDIO_CHANNEL),\
58 (Handler), NULL, 0, NULL, NULL, 0)
60 #define DEFINE_KSPROPERTY_TABLE_AUDIO_MUTE(TopologySet, Handler)\
61 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
62 DEFINE_KSPROPERTY_ITEM_AUDIO_MUTE(Handler)\
72 UCHAR bDescriptorType
;
73 UCHAR bDescriptorSubtype
;
78 }USB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR
;
83 UCHAR bDescriptorType
;
84 UCHAR bDescriptorSubtype
;
90 }USB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR
;
96 UCHAR bDescriptorType
;
97 UCHAR bDescriptorSubtype
;
100 UCHAR bAssocTerminal
;
102 USHORT wChannelConfig
;
105 }USB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR
;
110 UCHAR bDescriptorType
;
111 UCHAR bDescriptorSubtype
;
115 UCHAR bmaControls
[1];
117 }USB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR
;
122 UCHAR bDescriptorType
;
123 UCHAR bDescriptorSubtype
;
128 USHORT wChannelConfig
;
132 }USB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR
, *PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR
;
138 UCHAR bDescriptorType
;
139 UCHAR bDescriptorSubtype
;
143 }USB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR
, *PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR
;
148 UCHAR bDescriptorType
;
149 UCHAR bDescriptorSubtype
;
153 UCHAR bBitResolution
;
156 }USB_AUDIO_STREAMING_FORMAT_TYPE_DESCRIPTOR
, *PUSB_AUDIO_STREAMING_FORMAT_TYPE_DESCRIPTOR
;
162 PUSB_COMMON_DESCRIPTOR Descriptor
;
165 }NODE_CONTEXT
, *PNODE_CONTEXT
;
167 typedef struct __DEVICE_EXTENSION__
169 PDEVICE_OBJECT LowerDevice
; /* lower device*/
170 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
; /* usb configuration descriptor */
171 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
; /* usb device descriptor */
172 PUSBD_INTERFACE_INFORMATION InterfaceInfo
; /* interface information */
173 USBD_CONFIGURATION_HANDLE ConfigurationHandle
; /* configuration handle */
174 PNODE_CONTEXT NodeContext
; /* node context */
175 ULONG NodeContextCount
; /* node context count */
176 }DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
180 PDEVICE_EXTENSION DeviceExtension
; /* device extension */
181 PDEVICE_OBJECT LowerDevice
; /* lower device*/
183 }FILTER_CONTEXT
, *PFILTER_CONTEXT
;
187 PDEVICE_EXTENSION DeviceExtension
; /* device extension */
188 PDEVICE_OBJECT LowerDevice
; /* lower device*/
189 LIST_ENTRY IrpListHead
; /* irp list*/
190 LIST_ENTRY DoneIrpListHead
; /* irp done list head */
191 KSPIN_LOCK IrpListLock
; /* irp list lock*/
192 PUCHAR Buffer
; /* iso buffer*/
193 ULONG BufferSize
; /* iso buffer size */
194 PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
; /* interface descriptor */
195 WORK_QUEUE_ITEM CaptureWorkItem
; /* work item */
196 PKSWORKER CaptureWorker
; /* capture worker */
197 WORK_QUEUE_ITEM StarvationWorkItem
; /* work item */
198 PKSWORKER StarvationWorker
; /* capture worker */
199 }PIN_CONTEXT
, *PPIN_CONTEXT
;
205 USBAudioCreateFilterContext(
222 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
,
223 OUT PULONG NonStreamingTerminalDescriptorCount
,
224 OUT PULONG TotalTerminalDescriptorCount
);
230 IN PDEVICE_OBJECT Device
,
236 _In_ PKSDEVICE Device
242 _In_ PKSDEVICE Device
,
244 _In_opt_ PCM_RESOURCE_LIST TranslatedResourceList
,
245 _In_opt_ PCM_RESOURCE_LIST UntranslatedResourceList
250 USBAudioPnPQueryStop(
251 _In_ PKSDEVICE Device
,
257 USBAudioPnPCancelStop(
258 _In_ PKSDEVICE Device
,
265 _In_ PKSDEVICE Device
,
271 USBAudioPnPQueryRemove(
272 _In_ PKSDEVICE Device
,
278 USBAudioPnPCancelRemove(
279 _In_ PKSDEVICE Device
,
286 _In_ PKSDEVICE Device
,
292 USBAudioPnPQueryCapabilities(
293 _In_ PKSDEVICE Device
,
295 _Inout_ PDEVICE_CAPABILITIES Capabilities
300 USBAudioPnPSurpriseRemoval(
301 _In_ PKSDEVICE Device
,
307 USBAudioPnPQueryPower(
308 _In_ PKSDEVICE Device
,
310 _In_ DEVICE_POWER_STATE DeviceTo
,
311 _In_ DEVICE_POWER_STATE DeviceFrom
,
312 _In_ SYSTEM_POWER_STATE SystemTo
,
313 _In_ SYSTEM_POWER_STATE SystemFrom
,
314 _In_ POWER_ACTION Action
320 _In_ PKSDEVICE Device
,
322 _In_ DEVICE_POWER_STATE To
,
323 _In_ DEVICE_POWER_STATE From
330 UsbAudioPinDataIntersect(
334 _In_ PKSDATARANGE DataRange
,
335 _In_ PKSDATARANGE MatchingDataRange
,
336 _In_ ULONG DataBufferSize
,
338 _Out_ PULONG DataSize
);
342 UsbAudioCaptureComplete(
343 IN PDEVICE_OBJECT DeviceObject
,
371 USBAudioPinSetDataFormat(
373 _In_opt_ PKSDATAFORMAT OldFormat
,
374 _In_opt_ PKSMULTIPLE_ITEM OldAttributeList
,
375 _In_
const KSDATARANGE
* DataRange
,
376 _In_opt_
const KSATTRIBUTE_LIST
* AttributeRange
);
380 USBAudioPinSetDeviceState(
382 _In_ KSSTATE ToState
,
383 _In_ KSSTATE FromState
);