#define USB_AUDIO_INPUT_TERMINAL (0x02)
#define USB_AUDIO_OUTPUT_TERMINAL (0x03)
+#define DEFINE_KSPROPERTY_ITEM_AUDIO_VOLUME(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_AUDIO_VOLUMELEVEL,\
+ (Handler),\
+ sizeof(KSNODEPROPERTY_AUDIO_CHANNEL),\
+ sizeof(LONG),\
+ (Handler), NULL, 0, NULL, NULL, 0)
+
+
+#define DEFINE_KSPROPERTY_TABLE_AUDIO_VOLUME(TopologySet, Handler)\
+DEFINE_KSPROPERTY_TABLE(TopologySet) {\
+ DEFINE_KSPROPERTY_ITEM_AUDIO_VOLUME(Handler)\
+}
+
+#define DEFINE_KSPROPERTY_ITEM_AUDIO_MUTE(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_AUDIO_MUTE,\
+ (Handler),\
+ sizeof(KSNODEPROPERTY_AUDIO_CHANNEL),\
+ sizeof(BOOL),\
+ (Handler), NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_TABLE_AUDIO_MUTE(TopologySet, Handler)\
+DEFINE_KSPROPERTY_TABLE(TopologySet) {\
+ DEFINE_KSPROPERTY_ITEM_AUDIO_MUTE(Handler)\
+}
+
+
+
#include <pshpack1.h>
typedef struct
UCHAR iTerminal;
}USB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR, *PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR;
+typedef struct
+{
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDescriptorSubtype;
+ UCHAR bUnitID;
+ UCHAR bSourceID;
+ UCHAR bControlSize;
+ UCHAR bmaControls[1];
+ UCHAR iFeature;
+}USB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR, *PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR;
+
+typedef struct
+{
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDescriptorSubtype;
+ UCHAR bUnitID;
+ UCHAR bNrInPins;
+ UCHAR baSourceID[1];
+ UCHAR bNrChannels;
+ USHORT wChannelConfig;
+ UCHAR iChannelNames;
+ UCHAR bmControls;
+ UCHAR iMixer;
+}USB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR, *PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR;
+
+
typedef struct
{
UCHAR bLength;
#include <poppack.h>
+typedef struct
+{
+ PUSB_COMMON_DESCRIPTOR Descriptor;
+ ULONG NodeCount;
+ ULONG Nodes[20];
+}NODE_CONTEXT, *PNODE_CONTEXT;
+
typedef struct __DEVICE_EXTENSION__
{
PDEVICE_OBJECT LowerDevice; /* lower device*/
PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; /* usb device descriptor */
PUSBD_INTERFACE_INFORMATION InterfaceInfo; /* interface information */
USBD_CONFIGURATION_HANDLE ConfigurationHandle; /* configuration handle */
-
+ PNODE_CONTEXT NodeContext; /* node context */
+ ULONG NodeContextCount; /* node context count */
}DEVICE_EXTENSION, *PDEVICE_EXTENSION;
typedef struct
PUCHAR Buffer; /* iso buffer*/
ULONG BufferSize; /* iso buffer size */
PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; /* interface descriptor */
- WORK_QUEUE_ITEM CaptureWorkItem; /* work item */
- PKSWORKER CaptureWorker; /* capture worker */
- WORK_QUEUE_ITEM StarvationWorkItem; /* work item */
- PKSWORKER StarvationWorker; /* capture worker */
+ WORK_QUEUE_ITEM CaptureWorkItem; /* work item */
+ PKSWORKER CaptureWorker; /* capture worker */
+ WORK_QUEUE_ITEM StarvationWorkItem; /* work item */
+ PKSWORKER StarvationWorker; /* capture worker */
}PIN_CONTEXT, *PPIN_CONTEXT;
/* filter.c */
FreeFunction(
IN PVOID Item);
+VOID
+NTAPI
+CountTerminalUnits(
+ IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+ OUT PULONG NonStreamingTerminalDescriptorCount,
+ OUT PULONG TotalTerminalDescriptorCount);
+
/* usbaudio.c */
NTSTATUS
/* pin.c*/
+NTSTATUS
+NTAPI
+UsbAudioPinDataIntersect(
+ _In_ PVOID Context,
+ _In_ PIRP Irp,
+ _In_ PKSP_PIN Pin,
+ _In_ PKSDATARANGE DataRange,
+ _In_ PKSDATARANGE MatchingDataRange,
+ _In_ ULONG DataBufferSize,
+ _Out_ PVOID Data,
+ _Out_ PULONG DataSize);
+
NTSTATUS
NTAPI
UsbAudioCaptureComplete(