[USBAUDIO]
[reactos.git] / reactos / drivers / usb / usbaudio / usbaudio.h
index 41daede..6050806 100644 (file)
 #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
@@ -75,6 +104,34 @@ 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;
@@ -100,6 +157,13 @@ typedef struct
 
 #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*/
@@ -107,7 +171,8 @@ typedef struct __DEVICE_EXTENSION__
     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
@@ -122,10 +187,15 @@ typedef struct
     PDEVICE_EXTENSION DeviceExtension;                           /* device extension */
     PDEVICE_OBJECT LowerDevice;                                  /* lower device*/
     LIST_ENTRY IrpListHead;                                      /* irp list*/
+    LIST_ENTRY DoneIrpListHead;                                  /* irp done list head */
+    KSPIN_LOCK IrpListLock;                                      /* irp list lock*/
     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 */
 }PIN_CONTEXT, *PPIN_CONTEXT;
 
 /* filter.c */
@@ -146,6 +216,13 @@ NTAPI
 FreeFunction(
     IN PVOID Item);
 
+VOID
+NTAPI
+CountTerminalUnits(
+    IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+    OUT PULONG NonStreamingTerminalDescriptorCount,
+    OUT PULONG TotalTerminalDescriptorCount);
+
 /* usbaudio.c */
 
 NTSTATUS
@@ -248,6 +325,25 @@ USBAudioPnPSetPower(
 
 /* 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(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp,
+       IN PVOID Context);
+
 NTSTATUS
 NTAPI
 USBAudioPinCreate(