[ros-diffs] [janderwald] 73150: [USBAUDIO] - partly implement GetDataRangeIndexForFormat

2016-11-06 Thread janderwald
Author: janderwald
Date: Sun Nov  6 13:59:39 2016
New Revision: 73150

URL: http://svn.reactos.org/svn/reactos?rev=73150&view=rev
Log:
[USBAUDIO]
- partly implement GetDataRangeIndexForFormat

Modified:
trunk/reactos/drivers/usb/usbaudio/pin.c

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=73150&r1=73149&r2=73150&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Sun Nov  6 
13:59:39 2016
@@ -694,6 +694,71 @@
 return STATUS_SUCCESS;
 }
 
+ULONG
+GetDataRangeIndexForFormat(
+IN PKSDATARANGE ConnectionFormat,
+IN PKSDATARANGE * DataRanges,
+IN ULONG DataRangesCount)
+{
+ULONG Index;
+PKSDATARANGE CurrentDataRange;
+PKSDATARANGE_AUDIO CurrentAudioDataRange;
+PKSDATAFORMAT_WAVEFORMATEX ConnectionDataFormat;
+
+if (ConnectionFormat->FormatSize != sizeof(KSDATAFORMAT) + 
sizeof(WAVEFORMATEX))
+{
+/* unsupported connection format */
+DPRINT1("GetDataRangeIndexForFormat expected KSDATARANGE_AUDIO\n");
+return MAXULONG;
+}
+
+/* cast to right type */
+ConnectionDataFormat = (PKSDATAFORMAT_WAVEFORMATEX)ConnectionFormat;
+
+for (Index = 0; Index < DataRangesCount; Index++)
+{
+ /* get current data range */
+ CurrentDataRange = DataRanges[Index];
+
+ /* compare guids */
+ if (!IsEqualGUIDAligned(&CurrentDataRange->MajorFormat, 
&ConnectionFormat->MajorFormat) ||
+ !IsEqualGUIDAligned(&CurrentDataRange->SubFormat, 
&ConnectionFormat->SubFormat) ||
+ !IsEqualGUIDAligned(&CurrentDataRange->Specifier, 
&ConnectionFormat->Specifier))
+ {
+ /* no match */
+ continue;
+ }
+
+ /* all pin data ranges are KSDATARANGE_AUDIO */
+ CurrentAudioDataRange = (PKSDATARANGE_AUDIO)CurrentDataRange;
+
+ /* check if number of channel match */
+ if (CurrentAudioDataRange->MaximumChannels != 
ConnectionDataFormat->WaveFormatEx.nChannels)
+ {
+ /* number of channels mismatch */
+ continue;
+ }
+
+ if (CurrentAudioDataRange->MinimumSampleFrequency > 
ConnectionDataFormat->WaveFormatEx.nSamplesPerSec)
+ {
+ /* channel frequency too low */
+ continue;
+ }
+
+ if (CurrentAudioDataRange->MaximumSampleFrequency < 
ConnectionDataFormat->WaveFormatEx.nSamplesPerSec)
+ {
+ /* channel frequency too high */
+ continue;
+ }
+
+ /* FIXME add checks for bitrate / sample size etc */
+ return Index;
+}
+
+/* no datarange found */
+return MAXULONG;
+}
+
 NTSTATUS
 NTAPI
 USBAudioPinCreate(
@@ -704,6 +769,7 @@
 PFILTER_CONTEXT FilterContext;
 PPIN_CONTEXT PinContext;
 NTSTATUS Status;
+ULONG FormatIndex;
 
 Filter = KsPinGetParentFilter(Pin);
 if (Filter == NULL)
@@ -741,9 +807,16 @@
 ASSERT(Status == STATUS_SUCCESS);
 }
 
+/* choose correct dataformat */
+FormatIndex = GetDataRangeIndexForFormat(Pin->ConnectionFormat, 
Pin->Descriptor->PinDescriptor.DataRanges, 
Pin->Descriptor->PinDescriptor.DataRangesCount);
+if (FormatIndex == MAXULONG)
+{
+/* no format match */
+return STATUS_NO_MATCH;
+}
+
 /* select streaming interface */
-/* FIXME choose correct dataformat */
-Status = USBAudioSelectAudioStreamingInterface(Pin, PinContext, 
PinContext->DeviceExtension, 
PinContext->DeviceExtension->ConfigurationDescriptor, 0);
+Status = USBAudioSelectAudioStreamingInterface(Pin, PinContext, 
PinContext->DeviceExtension, 
PinContext->DeviceExtension->ConfigurationDescriptor, FormatIndex);
 if (!NT_SUCCESS(Status))
 {
 /* failed */
@@ -980,7 +1053,7 @@
 /* calculate offset*/
 Offset = TotalPacketSize - PinContext->BufferLength;
 
-if (PinContext->BufferOffset + Offset >= PinContext->BufferSize)
+if (PinContext->BufferOffset + TotalPacketSize >= 
PinContext->BufferSize)
 {
 RtlMoveMemory(PinContext->Buffer, 
&PinContext->Buffer[PinContext->BufferOffset - PinContext->BufferLength], 
PinContext->BufferLength);
 PinContext->BufferOffset = PinContext->BufferLength;
@@ -1025,7 +1098,7 @@
 PinContext->BufferLength = CloneStreamPointer->OffsetIn.Remaining 
- ((PacketCount * TotalPacketSize) + Offset);
 
 /* check for overflow */
-if (PinContext->BufferOffset + Offset >= PinContext->BufferSize)
+if (PinContext->BufferOffset + TotalPacketSize >= 
PinContext->BufferSize)
 {
 /* reset buffer offset*/
 PinContext->BufferOffset = 0;




[ros-diffs] [janderwald] 73138: [USBAUDIO] - store remaining audio bytes in a common buffer, which will be sent on next request - fixes some of audio distortion issues

2016-11-05 Thread janderwald
Author: janderwald
Date: Sat Nov  5 16:38:59 2016
New Revision: 73138

URL: http://svn.reactos.org/svn/reactos?rev=73138&view=rev
Log:
[USBAUDIO]
- store remaining audio bytes in a common buffer, which will be sent on next 
request
- fixes some of audio distortion issues

Modified:
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=73138&r1=73137&r2=73138&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Sat Nov  5 
16:38:59 2016
@@ -308,7 +308,73 @@
 } while (Count);
 }
 
-
+NTSTATUS
+RenderInitializeUrbAndIrp(
+IN PKSPIN Pin,
+IN PPIN_CONTEXT PinContext,
+IN OUT PIRP Irp,
+IN PVOID TransferBuffer,
+IN ULONG TransferBufferSize,
+IN ULONG PacketSize)
+{
+ULONG Index, PacketCount;
+PURB Urb;
+PIO_STACK_LOCATION IoStack;
+
+/* initialize irp */
+IoInitializeIrp(Irp, 
IoSizeOfIrp(PinContext->DeviceExtension->LowerDevice->StackSize), 
PinContext->DeviceExtension->LowerDevice->StackSize);
+
+/* set irp members */
+Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
+Irp->IoStatus.Information = 0;
+Irp->Flags = 0;
+Irp->UserBuffer = NULL;
+
+/* init stack location */
+IoStack = IoGetNextIrpStackLocation(Irp);
+IoStack->DeviceObject = PinContext->DeviceExtension->LowerDevice;
+IoStack->Parameters.Others.Argument2 = NULL;
+IoStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
+IoStack->Parameters.DeviceIoControl.IoControlCode = 
IOCTL_INTERNAL_USB_SUBMIT_URB;
+
+/* set completion routine */
+IoSetCompletionRoutine(Irp, UsbAudioRenderComplete, Pin, TRUE, TRUE, TRUE);
+
+/* calculate packet count */
+PacketCount = TransferBufferSize / PacketSize;
+ASSERT(TransferBufferSize % PacketSize == 0);
+
+/* lets allocate urb */
+Urb = (PURB)AllocFunction(GET_ISO_URB_SIZE(PacketCount));
+if (!Urb)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* init urb */
+Urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;
+Urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(PacketCount);
+Urb->UrbIsochronousTransfer.PipeHandle = 
PinContext->DeviceExtension->InterfaceInfo->Pipes[0].PipeHandle;
+Urb->UrbIsochronousTransfer.TransferFlags = USBD_TRANSFER_DIRECTION_OUT | 
USBD_START_ISO_TRANSFER_ASAP;
+Urb->UrbIsochronousTransfer.TransferBufferLength = TransferBufferSize;
+Urb->UrbIsochronousTransfer.TransferBuffer = TransferBuffer;
+Urb->UrbIsochronousTransfer.NumberOfPackets = PacketCount;
+Urb->UrbIsochronousTransfer.StartFrame = 0;
+
+for (Index = 0; Index < PacketCount; Index++)
+{
+Urb->UrbIsochronousTransfer.IsoPacket[Index].Offset = Index * 
PacketSize;
+}
+
+/* store urb */
+IoStack->Parameters.Others.Argument1 = Urb;
+Irp->Tail.Overlay.DriverContext[0] = Urb;
+
+
+/* done */
+return STATUS_SUCCESS;
+}
 
 VOID
 CaptureInitializeUrbAndIrp(
@@ -567,12 +633,27 @@
 ULONG Index;
 PIRP Irp;
 PPIN_CONTEXT PinContext;
+PKSDATAFORMAT_WAVEFORMATEX WaveFormatEx;
 PIO_STACK_LOCATION IoStack;
 
 DPRINT1("InitStreamPin\n");
 
 /* get pin context */
 PinContext = Pin->Context;
+
+/* allocate 1 sec buffer */
+WaveFormatEx = (PKSDATAFORMAT_WAVEFORMATEX)Pin->ConnectionFormat;
+PinContext->Buffer = 
AllocFunction(WaveFormatEx->WaveFormatEx.nAvgBytesPerSec);
+if (!PinContext->Buffer)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* init buffer size*/
+PinContext->BufferSize = WaveFormatEx->WaveFormatEx.nAvgBytesPerSec;
+PinContext->BufferOffset = 0;
+PinContext->BufferLength = 0;
 
 /* init irps */
 for (Index = 0; Index < 12; Index++)
@@ -706,7 +787,8 @@
 KIRQL OldLevel;
 PKSSTREAM_POINTER StreamPointerClone;
 NTSTATUS Status;
- 
+PURB Urb;
+
 /* get pin context */
 Pin = Context;
 PinContext = Pin->Context;
@@ -717,6 +799,12 @@
 /* get streampointer */
 StreamPointerClone = Irp->Tail.Overlay.DriverContext[1];
 
+/* get urb */
+Urb = Irp->Tail.Overlay.DriverContext[0];
+
+/* and free it */
+FreeFunction(Urb);
+
 /* acquire lock */
 KeAcquireSpinLock(&PinContext->IrpListLock, &OldLevel);
 
@@ -726,15 +814,18 @@
 /* release lock */
 KeReleaseSpinLock(&PinContext->IrpListLock, OldLevel);
 
-if (!NT_SUCCESS(Status))
+if (!NT_SUCC

[ros-diffs] [janderwald] 73127: [SDK] - fix build - thanks learn_more

2016-11-04 Thread janderwald
Author: janderwald
Date: Fri Nov  4 18:38:07 2016
New Revision: 73127

URL: http://svn.reactos.org/svn/reactos?rev=73127&view=rev
Log:
[SDK]
- fix build
- thanks learn_more

Modified:
trunk/reactos/sdk/include/psdk/ks.h

Modified: trunk/reactos/sdk/include/psdk/ks.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/ks.h?rev=73127&r1=73126&r2=73127&view=diff
==
--- trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] Fri Nov  4 18:38:07 2016
@@ -4220,7 +4220,7 @@
   _In_ PDRIVER_OBJECT DriverObject,
   _In_ ULONG MajorFunction);
 
-__checkReturn
+_Check_return_
 _IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
@@ -4256,7 +4256,7 @@
   _In_ ULONG OutUsed,
   _In_ BOOLEAN   Eject);
 
-__checkReturn
+_Check_return_
 _IRQL_requires_max_(DISPATCH_LEVEL)
 KSDDKAPI
 NTSTATUS




[ros-diffs] [janderwald] 73126: [SDK] - add newline

2016-11-04 Thread janderwald
Author: janderwald
Date: Fri Nov  4 18:14:40 2016
New Revision: 73126

URL: http://svn.reactos.org/svn/reactos?rev=73126&view=rev
Log:
[SDK]
- add newline

Modified:
trunk/reactos/sdk/include/psdk/ks.h

Modified: trunk/reactos/sdk/include/psdk/ks.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/ks.h?rev=73126&r1=73125&r2=73126&view=diff
==
--- trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] Fri Nov  4 18:14:40 2016
@@ -4219,6 +4219,7 @@
 KsSetMajorFunctionHandler(
   _In_ PDRIVER_OBJECT DriverObject,
   _In_ ULONG MajorFunction);
+
 __checkReturn
 _IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI




[ros-diffs] [janderwald] 73125: [SDK] - add prototypes

2016-11-04 Thread janderwald
Author: janderwald
Date: Fri Nov  4 18:12:00 2016
New Revision: 73125

URL: http://svn.reactos.org/svn/reactos?rev=73125&view=rev
Log:
[SDK]
- add prototypes

Modified:
trunk/reactos/sdk/include/psdk/ks.h

Modified: trunk/reactos/sdk/include/psdk/ks.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/ks.h?rev=73125&r1=73124&r2=73125&view=diff
==
--- trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] Fri Nov  4 18:12:00 2016
@@ -3851,6 +3851,35 @@
   _In_ PKSPIN Pin,
   _In_ KSSTREAM_POINTER_STATE State);
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
+KsStreamPointerSetStatusCode(
+_In_ PKSSTREAM_POINTER StreamPointer,
+_In_ NTSTATUS Status
+);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+void
+NTAPI
+KsStreamPointerDelete(
+_In_ PKSSTREAM_POINTER StreamPointer
+);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
+KsStreamPointerClone(
+_In_ PKSSTREAM_POINTER StreamPointer,
+_In_opt_ PFNKSSTREAMPOINTER CancelCallback,
+_In_ ULONG ContextSize,
+_Out_ PKSSTREAM_POINTER* CloneStreamPointer
+);
+
+
 /* Does this belong here? */
 
 _IRQL_requires_max_(PASSIVE_LEVEL)
@@ -4190,7 +4219,7 @@
 KsSetMajorFunctionHandler(
   _In_ PDRIVER_OBJECT DriverObject,
   _In_ ULONG MajorFunction);
-
+__checkReturn
 _IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
@@ -4225,6 +4254,14 @@
   _In_ ULONG InUsed,
   _In_ ULONG OutUsed,
   _In_ BOOLEAN   Eject);
+
+__checkReturn
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
+KsStreamPointerAdvance(
+  _In_ PKSSTREAM_POINTER StreamPointer);
 
 _IRQL_requires_max_(DISPATCH_LEVEL)
 KSDDKAPI




[ros-diffs] [janderwald] 73124: [USBAUDIO] - fix buffer calculation for usb headsets - usb headsets now partially work with usbaudio in win2k3

2016-11-04 Thread janderwald
Author: janderwald
Date: Fri Nov  4 18:07:44 2016
New Revision: 73124

URL: http://svn.reactos.org/svn/reactos?rev=73124&view=rev
Log:
[USBAUDIO]
- fix buffer calculation for usb headsets
- usb headsets now partially work with usbaudio in win2k3

Modified:
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=73124&r1=73123&r2=73124&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Fri Nov  4 
18:07:44 2016
@@ -874,6 +874,7 @@
 IoSetCompletionRoutine(Irp, UsbAudioRenderComplete, Pin, TRUE, TRUE, TRUE);
 
 /* calculate packet count */
+/* FIXME support various sample rates */
 WaveFormatEx = (PKSDATAFORMAT_WAVEFORMATEX)Pin->ConnectionFormat;
 TotalPacketSize = WaveFormatEx->WaveFormatEx.nAvgBytesPerSec / 1000;
 ASSERT(TotalPacketSize <= 
PinContext->DeviceExtension->InterfaceInfo->Pipes[0].MaximumPacketSize);
@@ -882,8 +883,6 @@
 PacketCount = CloneStreamPointer->OffsetIn.Remaining / TotalPacketSize;
 
 ASSERT(PacketCount < 255);
-
-//DPRINT1("PinRenderProcess Irp %p TotalPacketSize %lu MaximumPacketSize 
%lu PacketCount %lu Count %lu Data %p\n", Irp, TotalPacketSize, 
PinContext->DeviceExtension->InterfaceInfo->Pipes[0].MaximumPacketSize, 
PacketCount, CloneStreamPointer->OffsetIn.Count, 
CloneStreamPointer->OffsetIn.Data);
 
 Urb = (PURB)AllocFunction(GET_ISO_URB_SIZE(PacketCount));
 ASSERT(Urb);
@@ -893,8 +892,8 @@
 Urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(PacketCount);
 Urb->UrbIsochronousTransfer.PipeHandle = 
PinContext->DeviceExtension->InterfaceInfo->Pipes[0].PipeHandle;
 Urb->UrbIsochronousTransfer.TransferFlags = USBD_TRANSFER_DIRECTION_OUT | 
USBD_START_ISO_TRANSFER_ASAP;
-Urb->UrbIsochronousTransfer.TransferBufferLength = 
CloneStreamPointer->OffsetIn.Remaining;
-Urb->UrbIsochronousTransfer.TransferBuffer = 
CloneStreamPointer->OffsetIn.Data;
+Urb->UrbIsochronousTransfer.TransferBufferLength = PacketCount * 
TotalPacketSize;
+Urb->UrbIsochronousTransfer.TransferBuffer = 
CloneStreamPointer->StreamHeader->Data;
 Urb->UrbIsochronousTransfer.NumberOfPackets = PacketCount;
 Urb->UrbIsochronousTransfer.StartFrame = 0;
 

Modified: trunk/reactos/drivers/usb/usbaudio/usbaudio.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/usbaudio.h?rev=73124&r1=73123&r2=73124&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/usbaudio.h   [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/usbaudio.h   [iso-8859-1] Fri Nov  4 
18:07:44 2016
@@ -205,6 +205,7 @@
 PKSWORKERCaptureWorker;  /* capture 
worker */
 WORK_QUEUE_ITEM  StarvationWorkItem;/* work 
item */
 PKSWORKERStarvationWorker;  /* capture 
worker */
+   ULONG BufferOffset;
 }PIN_CONTEXT, *PPIN_CONTEXT;
 
 /* filter.c */




[ros-diffs] [janderwald] 73107: [USBAUDIO] - frequencies may appear unsorted, handle that

2016-11-03 Thread janderwald
Author: janderwald
Date: Thu Nov  3 13:44:01 2016
New Revision: 73107

URL: http://svn.reactos.org/svn/reactos?rev=73107&view=rev
Log:
[USBAUDIO]
- frequencies may appear unsorted, handle that

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73107&r1=73106&r2=73107&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Thu Nov  3 
13:44:01 2016
@@ -1164,7 +1164,7 @@
 PUSB_INTERFACE_DESCRIPTOR Descriptor;
 PKSDATARANGE_AUDIO DataRangeAudio;
 PKSDATARANGE *DataRangeAudioArray;
-ULONG NumFrequency, DataRangeCount, DataRangeIndex;
+ULONG NumFrequency, DataRangeCount, DataRangeIndex, Index;
 
 /* count all data ranges */
 DataRangeCount = 0;
@@ -1229,10 +1229,14 @@
 DataRangeAudio->MaximumChannels = 
StreamingFormatDescriptor->bNrChannels;
 DataRangeAudio->MinimumBitsPerSample = 
StreamingFormatDescriptor->bBitResolution;
 DataRangeAudio->MaximumBitsPerSample = 
StreamingFormatDescriptor->bBitResolution;
-NumFrequency = StreamingFormatDescriptor->bSamFreqType - 1;
-DataRangeAudio->MinimumSampleFrequency = 
StreamingFormatDescriptor->tSamFreq[0] | StreamingFormatDescriptor->tSamFreq[1] 
<< 8 | StreamingFormatDescriptor->tSamFreq[2] << 16;
-DataRangeAudio->MaximumSampleFrequency = 
StreamingFormatDescriptor->tSamFreq[NumFrequency*3] | 
StreamingFormatDescriptor->tSamFreq[NumFrequency * 3+1] << 8 | 
StreamingFormatDescriptor->tSamFreq[NumFrequency * 3+2]<<16;
-
+NumFrequency = StreamingFormatDescriptor->bSamFreqType;
+DataRangeAudio->MinimumSampleFrequency = MAXULONG;
+DataRangeAudio->MaximumSampleFrequency = 0;
+for (Index = 0; Index < NumFrequency; Index++)
+{
+DataRangeAudio->MinimumSampleFrequency = 
min(StreamingFormatDescriptor->tSamFreq[Index * 3] | 
StreamingFormatDescriptor->tSamFreq[(Index * 3) + 1] << 8 | 
StreamingFormatDescriptor->tSamFreq[(Index * 3) + 2] << 16, 
DataRangeAudio->MinimumSampleFrequency);
+DataRangeAudio->MaximumSampleFrequency = 
max(StreamingFormatDescriptor->tSamFreq[Index * 3] | 
StreamingFormatDescriptor->tSamFreq[(Index * 3) + 1] << 8 | 
StreamingFormatDescriptor->tSamFreq[(Index * 3) + 2] << 16, 
DataRangeAudio->MaximumSampleFrequency);
+}
 DataRangeAudioArray[DataRangeIndex] = 
(PKSDATARANGE)DataRangeAudio;
 DataRangeIndex++;
 }




[ros-diffs] [janderwald] 73106: [USBAUDIO] - include controls from logical channels - process selector unit descriptors - automatic gain is KSNODETYPE_AGC

2016-11-03 Thread janderwald
Author: janderwald
Date: Thu Nov  3 13:26:45 2016
New Revision: 73106

URL: http://svn.reactos.org/svn/reactos?rev=73106&view=rev
Log:
[USBAUDIO]
- include controls from logical channels
- process selector unit descriptors
- automatic gain is KSNODETYPE_AGC

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/guid.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73106&r1=73105&r2=73106&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Thu Nov  3 
13:26:45 2016
@@ -326,7 +326,8 @@
 PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR InputTerminalDescriptor;
 PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR FeatureUnitDescriptor;
 PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR MixerUnitDescriptor;
-ULONG NodeCount = 0;
+PUSB_AUDIO_CONTROL_SELECTOR_UNIT_DESCRIPTOR SelectorUnitDescriptor;
+ULONG NodeCount = 0, Length, Index;
 ULONG DescriptorCount = 0;
 UCHAR Value;
 
@@ -352,7 +353,15 @@
 {
 FeatureUnitDescriptor = 
(PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR)InputTerminalDescriptor;
 DescriptorCount++;
-Value = FeatureUnitDescriptor->bmaControls[0];
+
+/* get controls from all channels*/
+Value = 0;
+Length = FeatureUnitDescriptor->bLength - 7;
+for (Index = 0; Index < Length; Index++)
+{
+Value |= FeatureUnitDescriptor->bmaControls[Index];
+}
+
 if (Value & 0x01) /* MUTE*/
 NodeCount++;
 if (Value & 0x02) /* VOLUME */
@@ -369,14 +378,18 @@
 NodeCount++;
 if (Value & 0x80) /* DELAY */
 NodeCount++;
-
-/* FIXME handle logical channels too */
 }
 else if (InputTerminalDescriptor->bDescriptorSubtype == 
0x04 /* MIXER_UNIT */)
 {
 MixerUnitDescriptor = 
(PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR)InputTerminalDescriptor;
 DescriptorCount++;
 NodeCount += MixerUnitDescriptor->bNrInPins + 1; /* 
KSNODETYPE_SUPERMIX for each source pin and KSNODETYPE_SUM for target */
+}
+else if (InputTerminalDescriptor->bDescriptorSubtype == 
0x05 /* SELECTOR_UNIT */)
+{
+SelectorUnitDescriptor = 
(PUSB_AUDIO_CONTROL_SELECTOR_UNIT_DESCRIPTOR)InputTerminalDescriptor;
+DescriptorCount++;
+NodeCount++;
 }
 else
 {
@@ -417,7 +430,7 @@
 PKSFILTER_DESCRIPTOR FilterDescriptor)
 {
 PDEVICE_EXTENSION DeviceExtension;
-ULONG NodeCount, Index, DescriptorCount, StreamingTerminalIndex, 
NonStreamingTerminalDescriptorCount, TotalTerminalDescriptorCount, 
StreamingTerminalPinOffset, ControlDescriptorCount;
+ULONG NodeCount, Index, DescriptorCount, StreamingTerminalIndex, 
NonStreamingTerminalDescriptorCount, TotalTerminalDescriptorCount, 
StreamingTerminalPinOffset, ControlDescriptorCount, Length;
 UCHAR Value;
 PUSB_INTERFACE_DESCRIPTOR Descriptor;
 PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR InterfaceHeaderDescriptor;
@@ -426,6 +439,7 @@
 PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR FeatureUnitDescriptor;
 PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR MixerUnitDescriptor;
 PUSB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR OutputTerminalDescriptor;
+PUSB_AUDIO_CONTROL_SELECTOR_UNIT_DESCRIPTOR SelectorUnitDescriptor;
 PKSNODE_DESCRIPTOR NodeDescriptors;
 PNODE_CONTEXT NodeContext, PreviousNodeContext;
 PKSTOPOLOGY_CONNECTION Connections;
@@ -558,7 +572,16 @@
 else if (InputTerminalDescriptor->bDescriptorSubtype == 
0x06 /* FEATURE_UNIT*/)
 {
 FeatureUnitDescriptor = 
(PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR)CommonDescriptor;
-Value = FeatureUnitDescriptor->bmaControls[0];
+
+/* get controls from all channels*/
+Value = 0;
+Length = FeatureUnitDescriptor->bLength - 7;
+for (Index = 0; Index < Length; Index++)
+{
+

[ros-diffs] [janderwald] 73094: [USBAUDIO] - remove setting InstancesNecessary as it causes problems with KsStudio - start implementing support for usb headsets - use endpoint address in UsbAudioSetFo

2016-11-02 Thread janderwald
Author: janderwald
Date: Wed Nov  2 09:55:18 2016
New Revision: 73094

URL: http://svn.reactos.org/svn/reactos?rev=73094&view=rev
Log:
[USBAUDIO]
- remove setting InstancesNecessary as it causes problems with KsStudio
- start implementing support for usb headsets
- use endpoint address in UsbAudioSetFormat
- rewrite USBAudioSelectAudioStreamingInterface to select the interface based 
on the format index chosen

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73094&r1=73093&r2=73094&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Wed Nov  2 
09:55:18 2016
@@ -1258,7 +1258,6 @@
 
 /* irp sinks / sources can be instantiated */
 Pins[Index].InstancesPossible = 1;
-Pins[Index].InstancesNecessary = 1;
 }
 else
 {

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=73094&r1=73093&r2=73094&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Wed Nov  2 
09:55:18 2016
@@ -136,6 +136,9 @@
 return STATUS_INSUFFICIENT_RESOURCES;
 }
 
+/* get pin context */
+PinContext = Pin->Context;
+
 /* FIXME: determine controls and format urb */
 UsbBuildVendorRequest(Urb,
 URB_FUNCTION_CLASS_ENDPOINT,
@@ -144,14 +147,13 @@
 0,
 0x01, // SET_CUR
 0x100,
-0x81, //FIXME bEndpointAddress
+PinContext->DeviceExtension->InterfaceInfo->Pipes[0].EndpointAddress,
 SampleRateBuffer,
 NULL,
 3,
 NULL);
 
-/* get pin context */
-PinContext = Pin->Context;
+
 
 /* submit urb */
 Status = SubmitUrbSync(PinContext->LowerDevice, Urb);
@@ -164,13 +166,23 @@
 
 NTSTATUS
 USBAudioSelectAudioStreamingInterface(
+IN PKSPIN Pin,
 IN PPIN_CONTEXT PinContext,
 IN PDEVICE_EXTENSION DeviceExtension,
-IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
+IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+IN ULONG FormatDescriptorIndex)
 {
 PURB Urb;
 PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
 NTSTATUS Status;
+ULONG Found, Index;
+
+PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR StreamingInterfaceDescriptor;
+PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR TerminalDescriptor = NULL;
+
+/* search for terminal descriptor of that irp sink / irp source */
+TerminalDescriptor = 
UsbAudioGetStreamingTerminalDescriptorByIndex(DeviceExtension->ConfigurationDescriptor,
 Pin->Id);
+ASSERT(TerminalDescriptor != NULL);
 
 /* grab interface descriptor */
 InterfaceDescriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
ConfigurationDescriptor, -1, -1, USB_DEVICE_CLASS_AUDIO, -1, -1);
@@ -180,19 +192,37 @@
 return STATUS_INVALID_PARAMETER;
 }
 
-/* FIXME selects the first interface with audio streaming and non zero num 
of endpoints */
+Found = FALSE;
+Index = 0;
+
+/* selects the interface which has an audio streaming interface descriptor 
associated to the input / output terminal at the given format index */
 while (InterfaceDescriptor != NULL)
 {
 if (InterfaceDescriptor->bInterfaceSubClass == 0x02 /* AUDIO_STREAMING 
*/ && InterfaceDescriptor->bNumEndpoints > 0) 
 {
-break;
+StreamingInterfaceDescriptor = 
(PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR)USBD_ParseDescriptors(ConfigurationDescriptor,
 ConfigurationDescriptor->wTotalLength, InterfaceDescriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+if (StreamingInterfaceDescriptor != NULL)
+{
+ASSERT(StreamingInterfaceDescriptor->bDescriptorSubtype == 
0x01);
+ASSERT(StreamingInterfaceDescriptor->wFormatTag == 
WAVE_FORMAT_PCM);
+if (StreamingInterfaceDescriptor->bTerminalLink == 
TerminalDescriptor->bTerminalID)
+{
+if (FormatDescriptorIndex == Index)
+{
+Found = TRUE;
+break;
+}
+Index++;
+}
+}
 }
 InterfaceDescriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
(PVOID)((ULONG_PTR)InterfaceDescriptor + InterfaceDescriptor->bLength), -1

[ros-diffs] [janderwald] 73090: [USBAUDIO] - initialize pin with correct flags - enumerate all dataranges for an input / output terminal

2016-10-31 Thread janderwald
Author: janderwald
Date: Mon Oct 31 20:45:23 2016
New Revision: 73090

URL: http://svn.reactos.org/svn/reactos?rev=73090&view=rev
Log:
[USBAUDIO]
- initialize pin with correct flags
- enumerate all dataranges for an input / output terminal

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73090&r1=73089&r2=73090&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Mon Oct 31 
20:45:23 2016
@@ -1110,8 +1110,39 @@
 PUSB_INTERFACE_DESCRIPTOR Descriptor;
 PKSDATARANGE_AUDIO DataRangeAudio;
 PKSDATARANGE *DataRangeAudioArray;
-ULONG NumFrequency;
-
+ULONG NumFrequency, DataRangeCount, DataRangeIndex;
+
+/* count all data ranges */
+DataRangeCount = 0;
+for (Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
ConfigurationDescriptor, -1, -1, USB_DEVICE_CLASS_AUDIO, -1, -1);
+Descriptor != NULL;
+Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
(PVOID)((ULONG_PTR)Descriptor + Descriptor->bLength), -1, -1, 
USB_DEVICE_CLASS_AUDIO, -1, -1))
+{
+if (Descriptor->bInterfaceSubClass == 0x02) /* AUDIO_STREAMING */
+{
+StreamingInterfaceDescriptor = 
(PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR)USBD_ParseDescriptors(ConfigurationDescriptor,
 ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+if (StreamingInterfaceDescriptor != NULL)
+{
+ASSERT(StreamingInterfaceDescriptor->bDescriptorSubtype == 
0x01);
+ASSERT(StreamingInterfaceDescriptor->wFormatTag == 
WAVE_FORMAT_PCM);
+if (StreamingInterfaceDescriptor->bTerminalLink == bTerminalID)
+{
+DataRangeCount++;
+DPRINT1("StreamingInterfaceDescriptor %p TerminalID %x\n", 
StreamingInterfaceDescriptor, bTerminalID);
+}
+}
+Descriptor = 
(PUSB_INTERFACE_DESCRIPTOR)StreamingInterfaceDescriptor;
+}
+}
+
+DataRangeAudioArray = AllocFunction(sizeof(PVOID) * DataRangeCount);
+if (DataRangeAudioArray == NULL)
+{
+/* no memory */
+return;
+}
+
+DataRangeIndex = 0;
 for (Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
ConfigurationDescriptor, -1, -1, USB_DEVICE_CLASS_AUDIO, -1, -1);
 Descriptor != NULL;
 Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
(PVOID)((ULONG_PTR)Descriptor + Descriptor->bLength), -1, -1, 
USB_DEVICE_CLASS_AUDIO, -1, -1))
@@ -1141,27 +1172,23 @@
 DataRangeAudio->DataRange.MajorFormat = 
KSDATAFORMAT_TYPE_AUDIO;
 DataRangeAudio->DataRange.SubFormat = 
KSDATAFORMAT_SUBTYPE_PCM;
 DataRangeAudio->DataRange.Specifier = 
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
-DataRangeAudio->MaximumChannels = 1;
+DataRangeAudio->MaximumChannels = 
StreamingFormatDescriptor->bNrChannels;
 DataRangeAudio->MinimumBitsPerSample = 
StreamingFormatDescriptor->bBitResolution;
 DataRangeAudio->MaximumBitsPerSample = 
StreamingFormatDescriptor->bBitResolution;
 NumFrequency = StreamingFormatDescriptor->bSamFreqType - 1;
 DataRangeAudio->MinimumSampleFrequency = 
StreamingFormatDescriptor->tSamFreq[0] | StreamingFormatDescriptor->tSamFreq[1] 
<< 8 | StreamingFormatDescriptor->tSamFreq[2] << 16;
 DataRangeAudio->MaximumSampleFrequency = 
StreamingFormatDescriptor->tSamFreq[NumFrequency*3] | 
StreamingFormatDescriptor->tSamFreq[NumFrequency * 3+1] << 8 | 
StreamingFormatDescriptor->tSamFreq[NumFrequency * 3+2]<<16;
-DataRangeAudioArray = 
AllocFunction(sizeof(PKSDATARANGE_AUDIO));
-if (DataRangeAudioArray == NULL)
-{
-/* no memory */
-FreeFunction(DataRangeAudio);
-return;
-}
-DataRangeAudioArray[0] = (PKSDATARANGE)DataRangeAudio;
-*OutDataRanges = DataRangeAudioArray;
-*OutDataRangesCount = 1;
-return;
+
+DataRangeAudioArray[DataRangeIndex] = 
(PKSDATARANGE)DataRangeAudio;
+DataRangeIndex++;
 }
 }
+Descriptor = 
(PUSB_INTERFACE_DESCRIPTOR)StreamingInterfaceDescriptor;
 

[ros-diffs] [janderwald] 73042: [USBAUDIO] - implement audio volume property handler

2016-10-26 Thread janderwald
Author: janderwald
Date: Wed Oct 26 18:09:19 2016
New Revision: 73042

URL: http://svn.reactos.org/svn/reactos?rev=73042&view=rev
Log:
[USBAUDIO]
- implement audio volume property handler

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73042&r1=73041&r2=73042&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Wed Oct 26 
18:09:19 2016
@@ -157,7 +157,6 @@
 /* submit urb */
 Status = SubmitUrbSync(DeviceObject, Urb);
 
-DPRINT1("UsbAudioGetSetProperty Status %x\n", Status);
 FreeFunction(Urb);
 return Status;
 }
@@ -215,12 +214,12 @@
 FeatureUnitDescriptor = 
(PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR)NodeContext->Descriptor;
 if (Property->NodeProperty.Property.Flags & KSPROPERTY_TYPE_GET)
 {
-Status = 
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x81, 
0x100, FeatureUnitDescriptor->bUnitID << 8, Data, 1, 
USBD_TRANSFER_DIRECTION_IN);
+Status = 
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x81, 0x1 
<< 8, FeatureUnitDescriptor->bUnitID << 8, Data, 1, USBD_TRANSFER_DIRECTION_IN);
 Irp->IoStatus.Information = sizeof(BOOL);
 }
 else
 {
-Status = 
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x01, 
0x100, FeatureUnitDescriptor->bUnitID << 8, Data, 1, 
USBD_TRANSFER_DIRECTION_OUT);
+Status = 
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x01, 0x1 
<< 8, FeatureUnitDescriptor->bUnitID << 8, Data, 1, 
USBD_TRANSFER_DIRECTION_OUT);
 }
 }
 }
@@ -234,8 +233,85 @@
 IN PKSIDENTIFIER  Request,
 IN OUT PVOID  Data)
 {
-UNIMPLEMENTED
-return STATUS_SUCCESS;
+PKSNODEPROPERTY_AUDIO_CHANNEL Property;
+PKSFILTER Filter;
+PFILTER_CONTEXT FilterContext;
+PNODE_CONTEXT NodeContext;
+PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR FeatureUnitDescriptor;
+PSHORT TransferBuffer;
+LONG Value;
+NTSTATUS Status = STATUS_INVALID_PARAMETER;
+
+
+/* get filter from irp */
+Filter = KsGetFilterFromIrp(Irp);
+
+if (Filter)
+{
+/* get property */
+Property = (PKSNODEPROPERTY_AUDIO_CHANNEL)Request;
+
+/* get filter context */
+FilterContext = (PFILTER_CONTEXT)Filter->Context;
+
+TransferBuffer = AllocFunction(sizeof(USHORT) * 3);
+ASSERT(TransferBuffer);
+
+Value = *(PLONG)Data;
+
+/* search for node context */
+NodeContext = 
FindNodeContextWithNode(FilterContext->DeviceExtension->NodeContext, 
FilterContext->DeviceExtension->NodeContextCount, 
Property->NodeProperty.NodeId);
+if (NodeContext)
+{
+FeatureUnitDescriptor = 
(PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR)NodeContext->Descriptor;
+if (Property->NodeProperty.Property.Flags & KSPROPERTY_TYPE_GET)
+{
+Status = 
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x81, 0x2 
<< 8, FeatureUnitDescriptor->bUnitID << 8, &TransferBuffer[0], sizeof(USHORT), 
USBD_TRANSFER_DIRECTION_IN);
+Value = (LONG)TransferBuffer[0] * 256;
+
+*(PLONG)Data = Value;
+Irp->IoStatus.Information = sizeof(BOOL);
+}
+else
+{
+/* downscale value */
+Value /= 256;
+
+/* get minimum value */
+
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x82, 0x2 
<< 8, FeatureUnitDescriptor->bUnitID << 8, &TransferBuffer[0], sizeof(USHORT), 
USBD_TRANSFER_DIRECTION_IN);
+
+/* get maximum value */
+
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x83, 0x2 
<< 8, FeatureUnitDescriptor->bUnitID << 8, &TransferBuffer[1], sizeof(USHORT), 
USBD_TRANSFER_DIRECTION_IN);
+
+if (TransferBuffer[0] > Value)
+{
+/* use minimum value */
+Value = TransferBuffer[0];
+}
+
+if (TransferBuffer[1] < Value)
+{
+/* use maximum value */
+Value = TransferBuffer[1];
+}
+
+/* store value */
+   

[ros-diffs] [janderwald] 73033: [USBAUDIO] - implement mute control property handler

2016-10-25 Thread janderwald
Author: janderwald
Date: Tue Oct 25 19:20:09 2016
New Revision: 73033

URL: http://svn.reactos.org/svn/reactos?rev=73033&view=rev
Log:
[USBAUDIO]
- implement mute control property handler

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/guid.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73033&r1=73032&r2=73033&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Tue Oct 25 
19:20:09 2016
@@ -89,6 +89,155 @@
 NULL,
 NULL
 };
+
+NTSTATUS NTAPI FilterAudioVolumeHandler(IN PIRP Irp, IN PKSIDENTIFIER  
Request, IN OUT PVOID  Data);
+NTSTATUS NTAPI FilterAudioMuteHandler(IN PIRP Irp, IN PKSIDENTIFIER  Request, 
IN OUT PVOID  Data);
+
+DEFINE_KSPROPERTY_TABLE_AUDIO_VOLUME(FilterAudioVolumePropertySet, 
FilterAudioVolumeHandler);
+DEFINE_KSPROPERTY_TABLE_AUDIO_MUTE(FilterAudioMutePropertySet, 
FilterAudioMuteHandler);
+
+
+static KSPROPERTY_SET FilterAudioVolumePropertySetArray[] =
+{
+{
+&KSPROPSETID_Audio,
+sizeof(FilterAudioVolumePropertySet) / sizeof(KSPROPERTY_ITEM),
+(const KSPROPERTY_ITEM*)&FilterAudioVolumePropertySet,
+0,
+NULL
+}
+};
+
+static KSPROPERTY_SET FilterAudioMutePropertySetArray[] =
+{
+{
+&KSPROPSETID_Audio,
+sizeof(FilterAudioMutePropertySet) / sizeof(KSPROPERTY_ITEM),
+(const KSPROPERTY_ITEM*)&FilterAudioMutePropertySet,
+0,
+NULL
+}
+};
+
+NTSTATUS
+UsbAudioGetSetProperty(
+IN PDEVICE_OBJECT DeviceObject,
+IN UCHAR Request,
+IN USHORT Value,
+IN USHORT Index,
+IN PVOID TransferBuffer,
+IN ULONG TransferBufferLength,
+IN ULONG TransferFlags)
+{
+PURB Urb;
+NTSTATUS Status;
+
+/* allocate urb */
+Urb = AllocFunction(sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST));
+if (!Urb)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* format urb */
+UsbBuildVendorRequest(Urb,
+URB_FUNCTION_CLASS_INTERFACE,
+sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),
+TransferFlags,
+0,
+Request,
+Value,
+Index,
+TransferBuffer,
+NULL,
+TransferBufferLength,
+NULL);
+
+/* submit urb */
+Status = SubmitUrbSync(DeviceObject, Urb);
+
+DPRINT1("UsbAudioGetSetProperty Status %x\n", Status);
+FreeFunction(Urb);
+return Status;
+}
+
+PNODE_CONTEXT
+FindNodeContextWithNode(
+IN PNODE_CONTEXT NodeContext,
+IN ULONG NodeContextCount,
+IN ULONG NodeId)
+{
+ULONG Index, NodeIndex;
+for (Index = 0; Index < NodeContextCount; Index++)
+{
+for (NodeIndex = 0; NodeIndex < NodeContext[Index].NodeCount; 
NodeIndex++)
+{
+if (NodeContext[Index].Nodes[NodeIndex] == NodeId)
+{
+return &NodeContext[Index];
+}
+}
+}
+return NULL;
+}
+
+
+NTSTATUS
+NTAPI
+FilterAudioMuteHandler(
+IN PIRP Irp,
+IN PKSIDENTIFIER  Request,
+IN OUT PVOID  Data)
+{
+PKSNODEPROPERTY_AUDIO_CHANNEL Property;
+PKSFILTER Filter;
+PFILTER_CONTEXT FilterContext;
+PNODE_CONTEXT NodeContext;
+PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR FeatureUnitDescriptor;
+NTSTATUS Status = STATUS_INVALID_PARAMETER;
+
+/* get filter from irp */
+Filter = KsGetFilterFromIrp(Irp);
+
+if (Filter)
+{
+/* get property */
+Property = (PKSNODEPROPERTY_AUDIO_CHANNEL)Request;
+
+/* get filter context */
+FilterContext = (PFILTER_CONTEXT)Filter->Context;
+
+/* search for node context */
+NodeContext = 
FindNodeContextWithNode(FilterContext->DeviceExtension->NodeContext, 
FilterContext->DeviceExtension->NodeContextCount, 
Property->NodeProperty.NodeId);
+if (NodeContext)
+{
+FeatureUnitDescriptor = 
(PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR)NodeContext->Descriptor;
+if (Property->NodeProperty.Property.Flags & KSPROPERTY_TYPE_GET)
+{
+Status = 
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x81, 
0x100, FeatureUnitDescriptor->bUnitID << 8, Data, 1, 
USBD_TRANSFER_DIRECTION_IN);
+Irp->IoStatus.Information = sizeof(BOOL);
+}
+else
+{
+Status = 
UsbAudioGetSetProperty(FilterContext->DeviceExtension->LowerDevice, 0x01, 
0x100, FeatureUnitDescriptor->bUnitID << 8, Data, 1, 
USBD_TRANSFER_DIRECTION_OUT);
+

[ros-diffs] [janderwald] 73021: [KS] - enable topology property handlers

2016-10-22 Thread janderwald
Author: janderwald
Date: Sat Oct 22 19:52:51 2016
New Revision: 73021

URL: http://svn.reactos.org/svn/reactos?rev=73021&view=rev
Log:
[KS]
- enable topology property handlers

Modified:
trunk/reactos/drivers/ksfilter/ks/filter.c

Modified: trunk/reactos/drivers/ksfilter/ks/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/filter.c?rev=73021&r1=73020&r2=73021&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/filter.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/filter.c  [iso-8859-1] Sat Oct 22 
19:52:51 2016
@@ -1019,7 +1019,8 @@
 UNICODE_STRING GuidString;
 PKSPROPERTY Property;
 ULONG SetCount = 0;
-//PKSP_NODE NodeProperty;
+PKSP_NODE NodeProperty;
+PKSNODE_DESCRIPTOR NodeDescriptor;
 
 /* obtain filter from object header */
 Status = IKsFilter_GetFilterFromIrp(Irp, &Filter);
@@ -1067,21 +1068,21 @@
 {
 const KSPROPERTY_SET *PropertySet = NULL;
 ULONG PropertyItemSize = 0;
-#if 0
+
 /* check if the driver supports method sets */
 if (Property->Flags & KSPROPERTY_TYPE_TOPOLOGY)
 {
+ASSERT(IoStack->Parameters.DeviceIoControl.InputBufferLength >= 
sizeof(KSP_NODE));
 NodeProperty = (PKSP_NODE)Property;
-if 
(FilterInstance->Descriptor->NodeDescriptors[NodeProperty->NodeId].AutomationTable
 != NULL)
+NodeDescriptor = 
(PKSNODE_DESCRIPTOR)((ULONG_PTR)FilterInstance->Descriptor->NodeDescriptors + 
FilterInstance->Descriptor->NodeDescriptorSize * NodeProperty->NodeId);
+if (NodeDescriptor->AutomationTable != NULL)
 {
-SetCount = 
FilterInstance->Descriptor->NodeDescriptors[NodeProperty->NodeId].AutomationTable->PropertySetsCount;
-PropertySet = 
FilterInstance->Descriptor->NodeDescriptors[NodeProperty->NodeId].AutomationTable->PropertySets;
+SetCount = NodeDescriptor->AutomationTable->PropertySetsCount;
+PropertySet = NodeDescriptor->AutomationTable->PropertySets;
 PropertyItemSize = 0;
 }
-
-} else 
-#endif
-if (FilterInstance->Descriptor->AutomationTable->PropertySetsCount)
+}
+else if 
(FilterInstance->Descriptor->AutomationTable->PropertySetsCount)
 {
 SetCount = 
FilterInstance->Descriptor->AutomationTable->PropertySetsCount;
 PropertySet = 
FilterInstance->Descriptor->AutomationTable->PropertySets;




[ros-diffs] [janderwald] 73020: [USBAUDIO] - fix warnings & leaks based on Thomas feedback

2016-10-22 Thread janderwald
Author: janderwald
Date: Sat Oct 22 12:34:03 2016
New Revision: 73020

URL: http://svn.reactos.org/svn/reactos?rev=73020&view=rev
Log:
[USBAUDIO]
- fix warnings & leaks based on Thomas feedback

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73020&r1=73019&r2=73020&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Sat Oct 22 
12:34:03 2016
@@ -1083,6 +1083,11 @@
 /* store result */
 *OutDescriptor = Descriptor;
 }
+else
+{
+/* failed */
+FreeFunction(Descriptor);
+}
 
 /* done */
 return Status;
@@ -1098,7 +1103,6 @@
 OUT PVOID *OutDescriptor)
 {
 NTSTATUS Status;
-PUSB_STRING_DESCRIPTOR StringDescriptor;
 
 /* retrieve descriptor */
 Status = USBAudioGetDescriptor(DeviceObject, USB_STRING_DESCRIPTOR_TYPE, 
DescriptorLength, DescriptorIndex, LanguageId, OutDescriptor);
@@ -1124,14 +1128,14 @@
 RtlInitUnicodeString(&DestinationString, 
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\MediaCategories\\");
 
 /* initialize object attributes */
-InitializeObjectAttributes(&ObjectAttributes, &DestinationString, 
OBJ_CASE_INSENSITIVE | OBJ_OPENIF, NULL, NULL);
+InitializeObjectAttributes(&ObjectAttributes, &DestinationString, 
OBJ_CASE_INSENSITIVE | OBJ_OPENIF | OBJ_KERNEL_HANDLE, NULL, NULL);
 
 /* create the key */
 Status = ZwOpenKey(&Handle, KEY_ALL_ACCESS, &ObjectAttributes);
 if (NT_SUCCESS(Status))
 {
 /* initialize object attributes */
-InitializeObjectAttributes(&ObjectAttributes, Name, 
OBJ_CASE_INSENSITIVE, Handle, NULL);
+InitializeObjectAttributes(&ObjectAttributes, Name, 
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, Handle, NULL);
 
 Status = ZwCreateKey(OutHandle, KEY_ALL_ACCESS, &ObjectAttributes, 0, 
NULL, 0, NULL);
 ZwClose(Handle);
@@ -1228,8 +1232,8 @@
 if (!NT_SUCCESS(Status))
 {
 /* failed*/
-//FreeFunction(ComponentId);
-//return Status;
+FreeFunction(ComponentId);
+return Status;
 }
 FilterDescriptor->ComponentId = ComponentId;
 
@@ -1247,8 +1251,8 @@
 if (!NT_SUCCESS(Status))
 {
 /* failed*/
-//FreeFunction(ComponentId);
-//return Status;
+FreeFunction(ComponentId);
+return Status;
 }
 
 /* lets create the filter */

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=73020&r1=73019&r2=73020&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Sat Oct 22 
12:34:03 2016
@@ -789,7 +789,6 @@
 PPIN_CONTEXT PinContext;
 PLIST_ENTRY CurEntry;
 PIRP Irp;
-PIO_STACK_LOCATION IoStack;
 PURB Urb;
 PUCHAR TransferBuffer, OutBuffer;
 ULONG Offset, Length;
@@ -827,7 +826,6 @@
 Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
 
 /* get urb from irp */
-IoStack = IoGetNextIrpStackLocation(Irp);
 Urb = (PURB)Irp->Tail.Overlay.DriverContext[0];
 ASSERT(Urb);
 
@@ -882,6 +880,7 @@
 else
 {
 Status = KsStreamPointerAdvanceOffsets(LeadingStreamPointer, 0, 
Length, FALSE);
+NT_ASSERT(NT_SUCCESS(Status));
 ASSERT(Length == Urb->UrbIsochronousTransfer.TransferBufferLength 
- Offset);
 }
 
@@ -1102,7 +1101,7 @@
 }
 
 /* get pin descriptor */
-PinDescriptor = &Filter->Descriptor->PinDescriptors[Pin->PinId];
+PinDescriptor = 
(PKSPIN_DESCRIPTOR_EX)&Filter->Descriptor->PinDescriptors[Pin->PinId];
 
 *DataSize = sizeof(KSDATAFORMAT_WAVEFORMATEX);
 if (DataBufferSize == 0)




[ros-diffs] [janderwald] 73017: - implement MMixerGetDeviceNameWithComponentId, which retrieves the device name via component id - start implement MMixerHandleTopologyFilter, does not yet fully work

2016-10-21 Thread janderwald
Author: janderwald
Date: Fri Oct 21 21:26:12 2016
New Revision: 73017

URL: http://svn.reactos.org/svn/reactos?rev=73017&view=rev
Log:
- implement MMixerGetDeviceNameWithComponentId, which retrieves the device name 
via component id
- start implement MMixerHandleTopologyFilter, does not yet fully work

Modified:
trunk/reactos/sdk/lib/drivers/sound/mmixer/controls.c
trunk/reactos/sdk/lib/drivers/sound/mmixer/precomp.h
trunk/reactos/sdk/lib/drivers/sound/mmixer/sup.c

Modified: trunk/reactos/sdk/lib/drivers/sound/mmixer/controls.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/drivers/sound/mmixer/controls.c?rev=73017&r1=73016&r2=73017&view=diff
==
--- trunk/reactos/sdk/lib/drivers/sound/mmixer/controls.c   [iso-8859-1] 
(original)
+++ trunk/reactos/sdk/lib/drivers/sound/mmixer/controls.c   [iso-8859-1] 
Fri Oct 21 21:26:12 2016
@@ -1269,6 +1269,110 @@
 }
 
 MIXER_STATUS
+MMixerHandleTopologyFilter(
+IN PMIXER_CONTEXT MixerContext,
+IN PMIXER_LIST MixerList,
+IN LPMIXER_DATA MixerData,
+IN OUT LPMIXER_INFO MixerInfo,
+IN ULONG bInput,
+IN ULONG Pin)
+{
+MIXER_STATUS Status;
+ULONG PinsCount, LineTerminator, DestinationLineID;
+PULONG Pins;
+PTOPOLOGY Topology;
+
+/* re-use existing topology */
+Topology = MixerData->Topology;
+
+if (!bInput)
+{
+/* allocate pin index array which will hold all referenced pins */
+Status = MMixerAllocateTopologyPinArray(MixerContext, Topology, &Pins);
+if (Status != MM_STATUS_SUCCESS)
+{
+/* failed to create topology */
+return Status;
+}
+
+/* the mixer is an output mixer
+* find end pin of the node path
+*/
+PinsCount = 0;
+Status = MMixerGetAllUpOrDownstreamPinsFromPinIndex(MixerContext, 
Topology, Pin, FALSE, &PinsCount, Pins);
+
+/* check for success */
+if (Status != MM_STATUS_SUCCESS)
+{
+/* failed to get end pin */
+MixerContext->Free(Pins);
+//MMixerFreeTopology(Topology);
+
+/* return error code */
+return Status;
+}
+/* HACK:
+* some topologies do not have strict boundaries
+* WorkArround: remove all pin ids which have a physical connection
+* because bridge pins may belong to different render paths
+*/
+MMixerApplyOutputFilterHack(MixerContext, MixerData, 
MixerData->hDevice, &PinsCount, Pins);
+
+/* sanity checks */
+ASSERT(PinsCount != 0);
+if (PinsCount != 1)
+{
+DPRINT1("MMixerHandlePhysicalConnection Expected 1 pin but got 
%lu\n", PinsCount);
+}
+
+/* create destination line */
+Status = MMixerBuildMixerDestinationLine(MixerContext, MixerInfo, 
MixerData->hDevice, Pins[0], bInput);
+
+/* calculate destination line id */
+DestinationLineID = (DESTINATION_LINE + 
MixerInfo->MixCaps.cDestinations - 1);
+
+if (Status != MM_STATUS_SUCCESS)
+{
+/* failed to build destination line */
+MixerContext->Free(Pins);
+
+/* return error code */
+return Status;
+}
+
+/* add mixer controls to destination line */
+Status = MMixerAddMixerControlsToDestinationLine(MixerContext, 
MixerInfo, MixerData->hDevice, Topology, Pins[0], bInput, DestinationLineID, 
&LineTerminator);
+
+if (Status == MM_STATUS_SUCCESS)
+{
+/* now add the rest of the source lines */
+Status = MMixerAddMixerSourceLines(MixerContext, MixerInfo, 
MixerData->hDevice, Topology, DestinationLineID, LineTerminator);
+}
+
+/* mark pin as consumed */
+MMixerSetTopologyPinReserved(Topology, Pins[0]);
+
+/* free topology pin array */
+MixerContext->Free(Pins);
+}
+else
+{
+/* calculate destination line id */
+DestinationLineID = (DESTINATION_LINE + 
MixerInfo->MixCaps.cDestinations - 1);
+
+/* add mixer controls */
+Status = MMixerAddMixerControlsToDestinationLine(MixerContext, 
MixerInfo, MixerData->hDevice, Topology, Pin, bInput, DestinationLineID, 
&LineTerminator);
+
+if (Status == MM_STATUS_SUCCESS)
+{
+/* now add the rest of the source lines */
+Status = MMixerAddMixerSourceLines(MixerContext, MixerInfo, 
MixerData->hDevice, Topology, DestinationLineID, LineTerminator);
+}
+}
+return Status;
+}
+
+MIXER_STATUS
 MMixerHandlePhysicalConnection(
 IN PMIXER_CONTEXT MixerContext,
 IN PMIXER_LIST MixerList,
@@ -1450,7 +1554,12 @@
 MixerInfo->MixCaps.cDestinations = 0;
 
 /* get mixer name */
-MMixerGetDeviceName(MixerContext, MixerInfo->MixCaps.szPna

[ros-diffs] [janderwald] 73016: [USBAUDIO] - implement retrieving string descriptor of product and store it in registry.

2016-10-21 Thread janderwald
Author: janderwald
Date: Fri Oct 21 21:15:01 2016
New Revision: 73016

URL: http://svn.reactos.org/svn/reactos?rev=73016&view=rev
Log:
[USBAUDIO]
- implement retrieving string descriptor of product and store it in registry.

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/guid.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=73016&r1=73015&r2=73016&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Oct 21 
21:15:01 2016
@@ -1024,21 +1024,171 @@
 }
 
 NTSTATUS
+NTAPI
+USBAudioGetDescriptor(
+IN PDEVICE_OBJECT DeviceObject,
+IN UCHAR DescriptorType,
+IN ULONG DescriptorLength,
+IN UCHAR DescriptorIndex,
+IN LANGID LanguageId,
+OUT PVOID *OutDescriptor)
+{
+PURB Urb;
+NTSTATUS Status;
+PVOID Descriptor;
+
+/* sanity checks */
+ASSERT(DeviceObject);
+ASSERT(OutDescriptor);
+ASSERT(DescriptorLength);
+
+//
+// first allocate descriptor buffer
+//
+Descriptor = AllocFunction(DescriptorLength);
+if (!Descriptor)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* allocate urb */
+Urb = (PURB)AllocFunction(sizeof(URB));
+if (!Urb)
+{
+/* no memory */
+FreeFunction(Descriptor);
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* initialize urb */
+UsbBuildGetDescriptorRequest(Urb,
+sizeof(Urb->UrbControlDescriptorRequest),
+DescriptorType,
+DescriptorIndex,
+LanguageId,
+Descriptor,
+NULL,
+DescriptorLength,
+NULL);
+
+/* submit urb */
+Status = SubmitUrbSync(DeviceObject, Urb);
+
+/* free urb */
+FreeFunction(Urb);
+
+if (NT_SUCCESS(Status))
+{
+/* store result */
+*OutDescriptor = Descriptor;
+}
+
+/* done */
+return Status;
+}
+
+NTSTATUS
+NTAPI
+USBAudioGetStringDescriptor(
+IN PDEVICE_OBJECT DeviceObject,
+IN ULONG DescriptorLength,
+IN UCHAR DescriptorIndex,
+IN LANGID LanguageId,
+OUT PVOID *OutDescriptor)
+{
+NTSTATUS Status;
+PUSB_STRING_DESCRIPTOR StringDescriptor;
+
+/* retrieve descriptor */
+Status = USBAudioGetDescriptor(DeviceObject, USB_STRING_DESCRIPTOR_TYPE, 
DescriptorLength, DescriptorIndex, LanguageId, OutDescriptor);
+if (!NT_SUCCESS(Status))
+{
+// failed
+return Status;
+}
+return STATUS_SUCCESS;
+}
+
+NTSTATUS
+USBAudioRegCreateMediaCategoriesKey(
+IN PUNICODE_STRING Name, 
+OUT PHANDLE OutHandle)
+{
+NTSTATUS Status;
+OBJECT_ATTRIBUTES ObjectAttributes;
+UNICODE_STRING DestinationString;
+HANDLE Handle;
+
+/* initialize root name*/
+RtlInitUnicodeString(&DestinationString, 
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\MediaCategories\\");
+
+/* initialize object attributes */
+InitializeObjectAttributes(&ObjectAttributes, &DestinationString, 
OBJ_CASE_INSENSITIVE | OBJ_OPENIF, NULL, NULL);
+
+/* create the key */
+Status = ZwOpenKey(&Handle, KEY_ALL_ACCESS, &ObjectAttributes);
+if (NT_SUCCESS(Status))
+{
+/* initialize object attributes */
+InitializeObjectAttributes(&ObjectAttributes, Name, 
OBJ_CASE_INSENSITIVE, Handle, NULL);
+
+Status = ZwCreateKey(OutHandle, KEY_ALL_ACCESS, &ObjectAttributes, 0, 
NULL, 0, NULL);
+ZwClose(Handle);
+
+}
+return Status;
+}
+
+
+NTSTATUS
 USBAudioInitComponentId(
 PKSDEVICE Device,
 IN PKSCOMPONENTID ComponentId)
 {
 PDEVICE_EXTENSION DeviceExtension;
+NTSTATUS Status;
+LPWSTR DescriptionBuffer;
+UNICODE_STRING GuidString;
+UNICODE_STRING Name;
+HANDLE hKey;
+GUID TempGuid;
 
 /* get device extension */
 DeviceExtension = Device->Context;
 
+/* init component id */
+ComponentId->Component = KSCOMPONENTID_USBAUDIO;
+ComponentId->Version = 
HIBYTE(DeviceExtension->DeviceDescriptor->bcdDevice);
+ComponentId->Revision = 
LOBYTE(DeviceExtension->DeviceDescriptor->bcdDevice);
+
 INIT_USBAUDIO_MID(&ComponentId->Manufacturer, 
DeviceExtension->DeviceDescriptor->idVendor);
 INIT_USBAUDIO_PID(&ComponentId->Product, 
DeviceExtension->DeviceDescriptor->idProduct);
-
-//ComponentId->Component = KSCOMPONENTID_USBAUDIO;
-UNIMPLEMENTED
-return STATUS_NOT_IMPLEMENTED;
+INIT_USBAUDIO_PRODUCT_NAME(&TempGuid, 
DeviceExtension->DeviceDescriptor->idVendor, 
DeviceExtension->DeviceDescriptor->idProduct, 0);
+
+if (DeviceExtension->DeviceDescriptor->iProduct)
+{
+Status = USBAudio

[ros-diffs] [janderwald] 73014: [USBCCGP] - fix invalid device descriptor for composite usb devices

2016-10-21 Thread janderwald
Author: janderwald
Date: Fri Oct 21 20:52:40 2016
New Revision: 73014

URL: http://svn.reactos.org/svn/reactos?rev=73014&view=rev
Log:
[USBCCGP]
- fix invalid device descriptor for composite usb devices

Modified:
trunk/reactos/drivers/usb/usbccgp/fdo.c

Modified: trunk/reactos/drivers/usb/usbccgp/fdo.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbccgp/fdo.c?rev=73014&r1=73013&r2=73014&view=diff
==
--- trunk/reactos/drivers/usb/usbccgp/fdo.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbccgp/fdo.c [iso-8859-1] Fri Oct 21 
20:52:40 2016
@@ -223,7 +223,7 @@
 PDODeviceExtension->ConfigurationHandle = 
FDODeviceExtension->ConfigurationHandle;
 PDODeviceExtension->ConfigurationDescriptor = 
FDODeviceExtension->ConfigurationDescriptor;
 RtlCopyMemory(&PDODeviceExtension->Capabilities, 
&FDODeviceExtension->Capabilities, sizeof(DEVICE_CAPABILITIES));
-RtlCopyMemory(&PDODeviceExtension->DeviceDescriptor, 
&FDODeviceExtension->DeviceDescriptor, sizeof(USB_DEVICE_DESCRIPTOR));
+RtlCopyMemory(&PDODeviceExtension->DeviceDescriptor, 
FDODeviceExtension->DeviceDescriptor, sizeof(USB_DEVICE_DESCRIPTOR));
 
 /* Patch the stack size */
 PDODeviceObject->StackSize = DeviceObject->StackSize + 1;




[ros-diffs] [janderwald] 73000: [PSDK] - add missing definition

2016-10-20 Thread janderwald
Author: janderwald
Date: Thu Oct 20 20:29:30 2016
New Revision: 73000

URL: http://svn.reactos.org/svn/reactos?rev=73000&view=rev
Log:
[PSDK]
- add missing definition

Modified:
trunk/reactos/sdk/include/psdk/ks.h

Modified: trunk/reactos/sdk/include/psdk/ks.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/ks.h?rev=73000&r1=72999&r2=73000&view=diff
==
--- trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] Thu Oct 20 20:29:30 2016
@@ -1499,6 +1499,14 @@
   ULONG Revision;
 } KSCOMPONENTID, *PKSCOMPONENTID;
 
+#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)\
+DEFINE_KSPROPERTY_ITEM(\
+KSPROPERTY_GENERAL_COMPONENTID,\
+(Handler),\
+sizeof(KSPROPERTY),\
+sizeof(KSCOMPONENTID),\
+NULL, NULL, 0, NULL, NULL, 0)
+
 /* ===
 Properties
 */
@@ -2795,6 +2803,14 @@
 
 #ifndef _NTOS_
 
+__drv_maxIRQL(DISPATCH_LEVEL)
+KSDDKAPI
+PKSGATE
+NTAPI
+KsPinGetAndGate(
+   __in PKSPIN Pin
+);
+
 _IRQL_requires_max_(HIGH_LEVEL)
 static
 __inline
@@ -4745,6 +4761,31 @@
 KsDispatchSetSecurity(
   _In_ PDEVICE_OBJECT DeviceObject,
   _In_ PIRP Irp);
+
+__drv_maxIRQL(DISPATCH_LEVEL)
+KSDDKAPI
+void
+NTAPI
+KsPinAttemptProcessing(
+   __in PKSPIN Pin,
+   __in BOOLEAN Asynchronous
+   );
+
+__drv_maxIRQL(PASSIVE_LEVEL)
+KSDDKAPI
+void
+NTAPI
+KsPinAcquireProcessingMutex(
+   __in PKSPIN Pin
+   );
+
+__drv_maxIRQL(PASSIVE_LEVEL)
+KSDDKAPI
+void
+NTAPI
+KsPinReleaseProcessingMutex(
+   __in PKSPIN Pin
+   );
 
 _IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI




[ros-diffs] [janderwald] 72999: [KS] - implement support for KSPROPSETID_General

2016-10-20 Thread janderwald
Author: janderwald
Date: Thu Oct 20 20:02:43 2016
New Revision: 72999

URL: http://svn.reactos.org/svn/reactos?rev=72999&view=rev
Log:
[KS]
- implement support for KSPROPSETID_General

Modified:
trunk/reactos/drivers/ksfilter/ks/filter.c
trunk/reactos/drivers/ksfilter/ks/pin.c
trunk/reactos/drivers/ksfilter/ks/precomp.h
trunk/reactos/drivers/ksfilter/ks/property.c

Modified: trunk/reactos/drivers/ksfilter/ks/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/filter.c?rev=72999&r1=72998&r2=72999&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/filter.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/filter.c  [iso-8859-1] Thu Oct 20 
20:02:43 2016
@@ -45,6 +45,7 @@
 const GUID IID_IKsFilter  = {0x3ef6ee44L, 0x0D41, 0x11d2, {0xbe, 0xDA, 0x00, 
0xc0, 0x4f, 0x8e, 0xF4, 0x57}};
 const GUID KSPROPSETID_Topology= {0x720D4AC0L, 0x7533, 0x11D0, 
{0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
 const GUID KSPROPSETID_Pin = {0x8C134960L, 0x51AD, 0x11CF, 
{0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}};
+const GUID KSPROPSETID_General = {0x1464EDA5L, 0x6A8F, 0x11D1, 
{0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
 
 VOID
 IKsFilter_RemoveFilterFromFilterFactory(
@@ -53,10 +54,11 @@
 
 NTSTATUS NTAPI FilterTopologyPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER  
Request, IN OUT PVOID  Data);
 NTSTATUS NTAPI FilterPinPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER  
Request, IN OUT PVOID  Data);
-
+NTSTATUS NTAPI FilterGeneralComponentIdHandler(IN PIRP Irp, IN PKSIDENTIFIER  
Request, IN OUT PVOID  Data);
 
 DEFINE_KSPROPERTY_TOPOLOGYSET(IKsFilterTopologySet, 
FilterTopologyPropertyHandler);
 DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(IKsFilterPinSet, 
FilterPinPropertyHandler, FilterPinPropertyHandler, FilterPinPropertyHandler);
+DEFINE_KSPROPERTY_GENEREAL_COMPONENTID(IKsFilterGeneralSet, 
FilterGeneralComponentIdHandler);
 
 KSPROPERTY_SET FilterPropertySet[] =
 {
@@ -71,6 +73,13 @@
 &KSPROPSETID_Pin,
 sizeof(IKsFilterPinSet) / sizeof(KSPROPERTY_ITEM),
 (const KSPROPERTY_ITEM*)&IKsFilterPinSet,
+0,
+NULL
+},
+{
+&KSPROPSETID_General,
+sizeof(IKsFilterGeneralSet) / sizeof(KSPROPERTY_ITEM),
+(const KSPROPERTY_ITEM*)&IKsFilterGeneralSet,
 0,
 NULL
 }
@@ -906,6 +915,39 @@
 
 }
 
+NTSTATUS
+NTAPI
+FilterGeneralComponentIdHandler(
+IN PIRP Irp,
+IN PKSIDENTIFIER  Request,
+IN OUT PVOID  Data)
+{
+PIO_STACK_LOCATION IoStack;
+IKsFilterImpl * This;
+
+/* get filter implementation */
+This = (IKsFilterImpl*)KSPROPERTY_ITEM_IRP_STORAGE(Irp);
+
+/* sanity check */
+ASSERT(This);
+
+/* get current stack location */
+IoStack = IoGetCurrentIrpStackLocation(Irp);
+ASSERT(IoStack->Parameters.DeviceIoControl.OutputBufferLength >= 
sizeof(KSCOMPONENTID));
+
+if (This->Filter.Descriptor->ComponentId != NULL)
+{
+RtlMoveMemory(Data, This->Filter.Descriptor->ComponentId, 
sizeof(KSCOMPONENTID));
+Irp->IoStatus.Information = sizeof(KSCOMPONENTID);
+return STATUS_SUCCESS;
+}
+else
+{
+/* not valid */
+return STATUS_NOT_FOUND;
+}
+
+}
 
 NTSTATUS
 NTAPI
@@ -977,6 +1019,7 @@
 UNICODE_STRING GuidString;
 PKSPROPERTY Property;
 ULONG SetCount = 0;
+//PKSP_NODE NodeProperty;
 
 /* obtain filter from object header */
 Status = IKsFilter_GetFilterFromIrp(Irp, &Filter);
@@ -1024,8 +1067,20 @@
 {
 const KSPROPERTY_SET *PropertySet = NULL;
 ULONG PropertyItemSize = 0;
-
+#if 0
 /* check if the driver supports method sets */
+if (Property->Flags & KSPROPERTY_TYPE_TOPOLOGY)
+{
+NodeProperty = (PKSP_NODE)Property;
+if 
(FilterInstance->Descriptor->NodeDescriptors[NodeProperty->NodeId].AutomationTable
 != NULL)
+{
+SetCount = 
FilterInstance->Descriptor->NodeDescriptors[NodeProperty->NodeId].AutomationTable->PropertySetsCount;
+PropertySet = 
FilterInstance->Descriptor->NodeDescriptors[NodeProperty->NodeId].AutomationTable->PropertySets;
+PropertyItemSize = 0;
+}
+
+} else 
+#endif
 if (FilterInstance->Descriptor->AutomationTable->PropertySetsCount)
 {
 SetCount = 
FilterInstance->Descriptor->AutomationTable->PropertySetsCount;
@@ -1267,7 +1322,7 @@
 
 /* setup filter property sets */
 AutomationTable.PropertyItemSize = sizeof(KSPROPERTY_ITEM);
-AutomationTable.PropertySetsCount = 2;
+AutomationTable.PropertySetsCount = 3;
 AutomationTable.PropertySets = FilterPropertySet;
 
 /* merge filter automation table *

[ros-diffs] [janderwald] 72979: [WDMAUD] - fix a bug in WdmAudControlDeviceType - clear handle value when opening device interface key fails

2016-10-17 Thread janderwald
Author: janderwald
Date: Mon Oct 17 19:03:01 2016
New Revision: 72979

URL: http://svn.reactos.org/svn/reactos?rev=72979&view=rev
Log:
[WDMAUD]
- fix a bug in WdmAudControlDeviceType
- clear handle value when opening device interface key fails

Modified:
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/control.c
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/mmixer.c

Modified: trunk/reactos/drivers/wdm/audio/legacy/wdmaud/control.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/legacy/wdmaud/control.c?rev=72979&r1=72978&r2=72979&view=diff
==
--- trunk/reactos/drivers/wdm/audio/legacy/wdmaud/control.c [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/legacy/wdmaud/control.c [iso-8859-1] 
Mon Oct 17 19:03:01 2016
@@ -55,11 +55,11 @@
 }
 else if (DeviceInfo->DeviceType == WAVE_OUT_DEVICE_TYPE)
 {
+Result = WdmAudGetWaveOutDeviceCount();
+}
+else if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE)
+{
 Result = WdmAudGetWaveInDeviceCount();
-}
-else if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE)
-{
-Result = WdmAudGetWaveOutDeviceCount();
 }
 else if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE)
 {

Modified: trunk/reactos/drivers/wdm/audio/legacy/wdmaud/mmixer.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/legacy/wdmaud/mmixer.c?rev=72979&r1=72978&r2=72979&view=diff
==
--- trunk/reactos/drivers/wdm/audio/legacy/wdmaud/mmixer.c  [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/legacy/wdmaud/mmixer.c  [iso-8859-1] 
Mon Oct 17 19:03:01 2016
@@ -271,6 +271,12 @@
 
 /* open device interface key */
 Status = IoOpenDeviceInterfaceRegistryKey(&KeyName, GENERIC_READ | 
GENERIC_WRITE, OutKey);
+
+if (!NT_SUCCESS(Status))
+{
+*OutKey = NULL;
+}
+
 #if 0
 if (!NT_SUCCESS(Status))
 {




[ros-diffs] [janderwald] 72973: [USBAUDIO] - implement building topology connections

2016-10-15 Thread janderwald
Author: janderwald
Date: Sat Oct 15 17:56:44 2016
New Revision: 72973

URL: http://svn.reactos.org/svn/reactos?rev=72973&view=rev
Log:
[USBAUDIO]
- implement building topology connections

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72973&r1=72972&r2=72973&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Sat Oct 15 
17:56:44 2016
@@ -92,7 +92,8 @@
 
 ULONG
 CountTopologyComponents(
-IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
+IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+OUT PULONG OutDescriptorCount)
 {
 PUSB_INTERFACE_DESCRIPTOR Descriptor;
 PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR InterfaceHeaderDescriptor;
@@ -101,6 +102,7 @@
 PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR FeatureUnitDescriptor;
 PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR MixerUnitDescriptor;
 ULONG NodeCount = 0;
+ULONG DescriptorCount = 0;
 UCHAR Value;
 
 for (Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
ConfigurationDescriptor, -1, -1, USB_DEVICE_CLASS_AUDIO, -1, -1);
@@ -119,10 +121,12 @@
 if (InputTerminalDescriptor->bDescriptorSubtype == 0x02 /* 
INPUT TERMINAL*/ || InputTerminalDescriptor->bDescriptorSubtype == 0x03 /* 
OUTPUT_TERMINAL*/)
 {
 NodeCount++;
+DescriptorCount++;
 }
 else if (InputTerminalDescriptor->bDescriptorSubtype == 
0x06 /* FEATURE_UNIT*/)
 {
 FeatureUnitDescriptor = 
(PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR)InputTerminalDescriptor;
+DescriptorCount++;
 Value = FeatureUnitDescriptor->bmaControls[0];
 if (Value & 0x01) /* MUTE*/
 NodeCount++;
@@ -146,6 +150,7 @@
 else if (InputTerminalDescriptor->bDescriptorSubtype == 
0x04 /* MIXER_UNIT */)
 {
 MixerUnitDescriptor = 
(PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR)InputTerminalDescriptor;
+DescriptorCount++;
 NodeCount += MixerUnitDescriptor->bNrInPins + 1; /* 
KSNODETYPE_SUPERMIX for each source pin and KSNODETYPE_SUM for target */
 }
 else
@@ -159,10 +164,27 @@
 }
 }
 }
+*OutDescriptorCount = DescriptorCount;
 return NodeCount;
 }
 
-
+PNODE_CONTEXT
+FindNodeContextWithId(
+IN PNODE_CONTEXT NodeContext,
+IN ULONG NodeContextCount,
+IN UCHAR TerminalId)
+{
+ULONG Index;
+PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR TerminalDescriptor;
+
+for (Index = 0; Index < NodeContextCount; Index++)
+{
+TerminalDescriptor = 
(PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)NodeContext[Index].Descriptor;
+if (TerminalDescriptor->bTerminalID == TerminalId)
+return &NodeContext[Index];
+}
+return NULL;
+}
 
 NTSTATUS
 BuildUSBAudioFilterTopology(
@@ -170,7 +192,7 @@
 PKSFILTER_DESCRIPTOR FilterDescriptor)
 {
 PDEVICE_EXTENSION DeviceExtension;
-ULONG NodeCount, Index;
+ULONG NodeCount, Index, DescriptorCount, StreamingTerminalIndex, 
NonStreamingTerminalDescriptorCount, TotalTerminalDescriptorCount, 
StreamingTerminalPinOffset, ControlDescriptorCount;
 UCHAR Value;
 PUSB_INTERFACE_DESCRIPTOR Descriptor;
 PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR InterfaceHeaderDescriptor;
@@ -178,13 +200,16 @@
 PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR InputTerminalDescriptor;
 PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR FeatureUnitDescriptor;
 PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR MixerUnitDescriptor;
+   PUSB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR OutputTerminalDescriptor;
 PKSNODE_DESCRIPTOR NodeDescriptors;
+PNODE_CONTEXT NodeContext, PreviousNodeContext;
+PKSTOPOLOGY_CONNECTION Connections;
 
 /* get device extension */
 DeviceExtension = Device->Context;
 
 /* count topology nodes */
-NodeCount = 
CountTopologyComponents(DeviceExtension->ConfigurationDescriptor);
+NodeCount = 
CountTopologyComponents(DeviceExtension->ConfigurationDescriptor, 
&ControlDescriptorCount);
 
 /* init node descriptors*/
 FilterDescriptor->NodeDescriptors = NodeDescriptors = 
AllocFunction(NodeCount * sizeof(KSNODE_DESCRIPTOR));
@@ -195,6 +220,15 @@
 }
 FilterDescriptor->NodeDescriptorSize = sizeof(KSNODE_DESCRIPTOR);
 
+NodeContext = AllocFunction(si

[ros-diffs] [janderwald] 72971: [USBAUDIO] - partly implement BuildUSBAudioFilterTopology

2016-10-14 Thread janderwald
Author: janderwald
Date: Fri Oct 14 22:08:28 2016
New Revision: 72971

URL: http://svn.reactos.org/svn/reactos?rev=72971&view=rev
Log:
[USBAUDIO]
- partly implement BuildUSBAudioFilterTopology

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/guid.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72971&r1=72970&r2=72971&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Oct 14 
22:08:28 2016
@@ -90,13 +90,270 @@
 NULL
 };
 
+ULONG
+CountTopologyComponents(
+IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
+{
+PUSB_INTERFACE_DESCRIPTOR Descriptor;
+PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR InterfaceHeaderDescriptor;
+PUSB_COMMON_DESCRIPTOR CommonDescriptor;
+PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR InputTerminalDescriptor;
+PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR FeatureUnitDescriptor;
+PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR MixerUnitDescriptor;
+ULONG NodeCount = 0;
+UCHAR Value;
+
+for (Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
ConfigurationDescriptor, -1, -1, USB_DEVICE_CLASS_AUDIO, -1, -1);
+Descriptor != NULL;
+Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
(PVOID)((ULONG_PTR)Descriptor + Descriptor->bLength), -1, -1, 
USB_DEVICE_CLASS_AUDIO, -1, -1))
+{
+if (Descriptor->bInterfaceSubClass == 0x01) /* AUDIO_CONTROL */
+{
+InterfaceHeaderDescriptor = 
(PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR)USBD_ParseDescriptors(ConfigurationDescriptor,
 ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+if (InterfaceHeaderDescriptor != NULL)
+{
+CommonDescriptor = 
USBD_ParseDescriptors(InterfaceHeaderDescriptor, 
InterfaceHeaderDescriptor->wTotalLength, 
(PVOID)((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->bLength), 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+while (CommonDescriptor)
+{
+InputTerminalDescriptor = 
(PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)CommonDescriptor;
+if (InputTerminalDescriptor->bDescriptorSubtype == 0x02 /* 
INPUT TERMINAL*/ || InputTerminalDescriptor->bDescriptorSubtype == 0x03 /* 
OUTPUT_TERMINAL*/)
+{
+NodeCount++;
+}
+else if (InputTerminalDescriptor->bDescriptorSubtype == 
0x06 /* FEATURE_UNIT*/)
+{
+FeatureUnitDescriptor = 
(PUSB_AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR)InputTerminalDescriptor;
+Value = FeatureUnitDescriptor->bmaControls[0];
+if (Value & 0x01) /* MUTE*/
+NodeCount++;
+if (Value & 0x02) /* VOLUME */
+NodeCount++;
+if (Value & 0x04) /* BASS */
+NodeCount++;
+if (Value & 0x08) /* MID */
+NodeCount++;
+if (Value & 0x10) /* TREBLE */
+NodeCount++;
+if (Value & 0x20) /* GRAPHIC EQUALIZER */
+NodeCount++;
+if (Value & 0x40) /* AUTOMATIC GAIN */
+NodeCount++;
+if (Value & 0x80) /* DELAY */
+NodeCount++;
+
+/* FIXME handle logical channels too */
+}
+else if (InputTerminalDescriptor->bDescriptorSubtype == 
0x04 /* MIXER_UNIT */)
+{
+MixerUnitDescriptor = 
(PUSB_AUDIO_CONTROL_MIXER_UNIT_DESCRIPTOR)InputTerminalDescriptor;
+NodeCount += MixerUnitDescriptor->bNrInPins + 1; /* 
KSNODETYPE_SUPERMIX for each source pin and KSNODETYPE_SUM for target */
+}
+else
+{
+UNIMPLEMENTED
+}
+CommonDescriptor = 
(PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)CommonDescriptor + 
CommonDescriptor->bLength);
+if ((ULONG_PTR)CommonDescriptor >= 
((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->wTotalLength))
+break;
+}
+}
+}
+}
+return NodeCount;
+}
+
+
 
 NTSTATUS
 BuildUSBAudioFilte

[ros-diffs] [janderwald] 72970: [USBAUDIO] - partly implement UsbAudioPinDataIntersect

2016-10-14 Thread janderwald
Author: janderwald
Date: Fri Oct 14 13:26:22 2016
New Revision: 72970

URL: http://svn.reactos.org/svn/reactos?rev=72970&view=rev
Log:
[USBAUDIO]
- partly implement UsbAudioPinDataIntersect

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72970&r1=72969&r2=72970&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Oct 14 
13:26:22 2016
@@ -448,7 +448,10 @@
 Pins[Index].PinDescriptor.DataFlow = KSPIN_DATAFLOW_IN;
 }
 
-
+/* data intersect handler */
+Pins[Index].IntersectHandler = UsbAudioPinDataIntersect;
+
+/* pin flags */
 Pins[Index].Flags = KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY | 
KSFILTER_FLAG_CRITICAL_PROCESSING;
 
 /* irp sinks / sources can be instantiated */

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72970&r1=72969&r2=72970&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Fri Oct 14 
13:26:22 2016
@@ -1074,3 +1074,65 @@
 
 return Status;
 }
+
+
+NTSTATUS
+NTAPI
+UsbAudioPinDataIntersect(
+_In_  PVOIDContext,
+_In_  PIRP Irp,
+_In_  PKSP_PIN Pin,
+_In_  PKSDATARANGE DataRange,
+_In_  PKSDATARANGE MatchingDataRange,
+_In_  ULONGDataBufferSize,
+_Out_ PVOIDData,
+_Out_ PULONG   DataSize)
+{
+PKSFILTER Filter;
+PKSPIN_DESCRIPTOR_EX PinDescriptor;
+PKSDATAFORMAT_WAVEFORMATEX DataFormat;
+PKSDATARANGE_AUDIO DataRangeAudio;
+
+/* get filter from irp*/
+Filter = KsGetFilterFromIrp(Irp);
+if (!Filter)
+{
+/* no match*/
+return STATUS_NO_MATCH;
+}
+
+/* get pin descriptor */
+PinDescriptor = &Filter->Descriptor->PinDescriptors[Pin->PinId];
+
+*DataSize = sizeof(KSDATAFORMAT_WAVEFORMATEX);
+if (DataBufferSize == 0)
+{
+/* buffer too small */
+return STATUS_BUFFER_OVERFLOW;
+}
+
+/* sanity checks*/
+ASSERT(PinDescriptor->PinDescriptor.DataRangesCount >= 0);
+ASSERT(PinDescriptor->PinDescriptor.DataRanges[0]->FormatSize == 
sizeof(KSDATARANGE_AUDIO));
+
+DataRangeAudio = 
(PKSDATARANGE_AUDIO)PinDescriptor->PinDescriptor.DataRanges[0];
+
+DataFormat = Data;
+DataFormat->WaveFormatEx.wFormatTag = WAVE_FORMAT_PCM;
+DataFormat->WaveFormatEx.nChannels = DataRangeAudio->MaximumChannels;
+DataFormat->WaveFormatEx.nSamplesPerSec = 
DataRangeAudio->MaximumSampleFrequency;
+DataFormat->WaveFormatEx.nAvgBytesPerSec = 
DataRangeAudio->MaximumSampleFrequency * (DataRangeAudio->MaximumBitsPerSample 
/ 8) * DataRangeAudio->MaximumChannels;
+DataFormat->WaveFormatEx.nBlockAlign = 
(DataRangeAudio->MaximumBitsPerSample / 8) * DataRangeAudio->MaximumChannels;
+DataFormat->WaveFormatEx.wBitsPerSample = 
DataRangeAudio->MaximumBitsPerSample;
+DataFormat->WaveFormatEx.cbSize = 0;
+
+DataFormat->DataFormat.FormatSize = sizeof(KSDATAFORMAT) + 
sizeof(WAVEFORMATEX);
+DataFormat->DataFormat.Flags = 0;
+DataFormat->DataFormat.Reserved = 0;
+DataFormat->DataFormat.MajorFormat = KSDATAFORMAT_TYPE_AUDIO;
+DataFormat->DataFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+DataFormat->DataFormat.Specifier = KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
+DataFormat->DataFormat.SampleSize = (DataRangeAudio->MaximumBitsPerSample 
/ 8) * DataRangeAudio->MaximumChannels;
+
+return STATUS_SUCCESS;
+}

Modified: trunk/reactos/drivers/usb/usbaudio/usbaudio.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/usbaudio.h?rev=72970&r1=72969&r2=72970&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/usbaudio.h   [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/usbaudio.h   [iso-8859-1] Fri Oct 14 
13:26:22 2016
@@ -255,6 +255,18 @@
 
 NTSTATUS
 NTAPI
+UsbAudioPinDataIntersect(
+_In_  PVOIDContext,
+_In_  PIRP Irp,
+_In_  PKSP_PIN Pin,
+_In_  PKSDATARANGE DataRange,
+_In_  PKSDATARANGE MatchingDataRange,
+_In_  ULONGDataBufferSize,
+_Out_ PVOIDData,
+_Out_ PULONG   DataSize);
+
+NTSTATUS
+NTAPI
 UsbAudioCaptureComplete(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,




[ros-diffs] [janderwald] 72969: [USBAUDIO] - specify processings flags in filter descriptor - implement processing workers - move code for initializing irp & urb into single function - usbaudio now su

2016-10-14 Thread janderwald
Author: janderwald
Date: Fri Oct 14 10:35:19 2016
New Revision: 72969

URL: http://svn.reactos.org/svn/reactos?rev=72969&view=rev
Log:
[USBAUDIO]
- specify processings flags in filter descriptor
- implement processing workers
- move code for initializing irp & urb into single function
- usbaudio now successfully captures audio in win2k3.

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72969&r1=72968&r2=72969&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Oct 14 
10:35:19 2016
@@ -448,6 +448,9 @@
 Pins[Index].PinDescriptor.DataFlow = KSPIN_DATAFLOW_IN;
 }
 
+
+Pins[Index].Flags = KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY | 
KSFILTER_FLAG_CRITICAL_PROCESSING;
+
 /* irp sinks / sources can be instantiated */
 Pins[Index].InstancesPossible = 1;
 Pins[Index].InstancesNecessary = 1;

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72969&r1=72968&r2=72969&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Fri Oct 14 
10:35:19 2016
@@ -8,7 +8,9 @@
 */
 
 #include "usbaudio.h"
-#include 
+
+#define PACKET_COUNT 10
+
 
 NTSTATUS
 GetMaxPacketSizeForInterface(
@@ -55,15 +57,11 @@
 OUT PURB * OutUrb)
 {
 PURB Urb;
-ULONG PacketCount;
 ULONG UrbSize;
 ULONG Index;
 
-/* calculate packet count */
-PacketCount = BufferLength / MaxPacketSize;
-
 /* calculate urb size*/
-UrbSize = GET_ISO_URB_SIZE(PacketCount);
+UrbSize = GET_ISO_URB_SIZE(PACKET_COUNT);
 
 /* allocate urb */
 Urb = AllocFunction(UrbSize);
@@ -80,9 +78,9 @@
 Urb->UrbIsochronousTransfer.TransferFlags = USBD_TRANSFER_DIRECTION_IN | 
USBD_START_ISO_TRANSFER_ASAP;
 Urb->UrbIsochronousTransfer.TransferBufferLength = BufferLength;
 Urb->UrbIsochronousTransfer.TransferBuffer = Buffer;
-Urb->UrbIsochronousTransfer.NumberOfPackets = PacketCount;
-
-for (Index = 0; Index < PacketCount; Index++)
+Urb->UrbIsochronousTransfer.NumberOfPackets = PACKET_COUNT;
+
+for (Index = 0; Index < PACKET_COUNT; Index++)
 {
 Urb->UrbIsochronousTransfer.IsoPacket[Index].Offset = Index * 
MaxPacketSize;
 }
@@ -92,7 +90,112 @@
 
 }
 
-
+NTSTATUS
+UsbAudioSetMuteOff(
+IN PKSPIN Pin)
+{
+PURB Urb;
+PVOID SampleRateBuffer;
+PPIN_CONTEXT PinContext;
+NTSTATUS Status;
+
+/* allocate sample rate buffer */
+SampleRateBuffer = AllocFunction(sizeof(ULONG));
+if (!SampleRateBuffer)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* allocate urb */
+Urb = AllocFunction(sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST));
+if (!Urb)
+{
+/* no memory */
+FreeFunction(SampleRateBuffer);
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* FIXME: determine controls and format urb */
+UsbBuildVendorRequest(Urb,
+URB_FUNCTION_CLASS_INTERFACE,
+sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),
+USBD_TRANSFER_DIRECTION_OUT,
+0,
+0x01,
+0x100,
+0x300,
+SampleRateBuffer,
+NULL,
+1,
+NULL);
+
+/* get pin context */
+PinContext = Pin->Context;
+
+/* submit urb */
+Status = SubmitUrbSync(PinContext->LowerDevice, Urb);
+
+DPRINT1("UsbAudioSetMuteOff Pin %p Status %x\n", Pin, Status);
+FreeFunction(Urb);
+FreeFunction(SampleRateBuffer);
+return Status;
+}
+
+NTSTATUS
+UsbAudioSetVolume(
+IN PKSPIN Pin)
+{
+PURB Urb;
+PUCHAR SampleRateBuffer;
+PPIN_CONTEXT PinContext;
+NTSTATUS Status;
+
+/* allocate sample rate buffer */
+SampleRateBuffer = AllocFunction(sizeof(ULONG));
+if (!SampleRateBuffer)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* allocate urb */
+Urb = AllocFunction(sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST));
+if (!Urb)
+{
+/* no memory */
+FreeFunction(SampleRateBuffer);
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* FIXME: determine controls and format urb */
+UsbBuildVendorRequest(Urb,
+URB_FUNCTION_CLASS_INTERFACE,
+sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),
+USBD

[ros-diffs] [janderwald] 72925: [USBAUDIO] - use IoInitializeIrp over IoAllocateIrp - reinitialize irp and urb when resubmitting it - usbaudio now successfully transfers stream irps (not yet fully wor

2016-10-07 Thread janderwald
Author: janderwald
Date: Fri Oct  7 17:30:27 2016
New Revision: 72925

URL: http://svn.reactos.org/svn/reactos?rev=72925&view=rev
Log:
[USBAUDIO]
- use IoInitializeIrp over IoAllocateIrp
- reinitialize irp and urb when resubmitting it
- usbaudio now successfully transfers stream irps (not yet fully working)

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72925&r1=72924&r2=72925&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Oct  7 
17:30:27 2016
@@ -450,6 +450,7 @@
 
 /* irp sinks / sources can be instantiated */
 Pins[Index].InstancesPossible = 1;
+Pins[Index].InstancesNecessary = 1;
 }
 else
 {

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72925&r1=72924&r2=72925&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Fri Oct  7 
17:30:27 2016
@@ -8,6 +8,7 @@
 */
 
 #include "usbaudio.h"
+#include 
 
 NTSTATUS
 GetMaxPacketSizeForInterface(
@@ -283,6 +284,7 @@
 BufferSize = 8 * 10 * MaximumPacketSize;
 
 /* allocate pin capture buffer */
+PinContext->BufferSize = BufferSize;
 PinContext->Buffer = AllocFunction(BufferSize);
 if (!PinContext->Buffer)
 {
@@ -295,13 +297,28 @@
 for (Index = 0; Index < 8; Index++)
 {
 /* allocate irp */
-Irp = 
IoAllocateIrp(PinContext->DeviceExtension->LowerDevice->StackSize, FALSE);
+Irp = 
AllocFunction(IoSizeOfIrp(PinContext->DeviceExtension->LowerDevice->StackSize));
 if (!Irp)
 {
 /* no memory */
 return STATUS_INSUFFICIENT_RESOURCES;
 }
 
+/* initialize irp */
+IoInitializeIrp(Irp, 
IoSizeOfIrp(PinContext->DeviceExtension->LowerDevice->StackSize), 
PinContext->DeviceExtension->LowerDevice->StackSize);
+
+Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
+Irp->IoStatus.Information = 0;
+Irp->Flags = 0;
+Irp->UserBuffer = NULL;
+
+IoStack = IoGetNextIrpStackLocation(Irp);
+IoStack->DeviceObject = PinContext->DeviceExtension->LowerDevice;
+IoStack->Parameters.Others.Argument2 = NULL;
+IoStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
+IoStack->Parameters.DeviceIoControl.IoControlCode = 
IOCTL_INTERNAL_USB_SUBMIT_URB;
+
+
 DPRINT1("InitCapturePin Irp %p\n", Irp);
 /* insert into irp list */
 InsertTailList(&PinContext->IrpListHead, &Irp->Tail.Overlay.ListEntry);
@@ -433,11 +450,22 @@
 PKSPIN Pin;
 PPIN_CONTEXT PinContext;
 KIRQL OldLevel;
+PURB Urb;
+PIO_STACK_LOCATION IoStack;
+
 
 /* get pin context */
 Pin = Context;
 PinContext = Pin->Context;
 
+/* get stack location */
+IoStack = IoGetNextIrpStackLocation(Irp);
+
+/* get urb */
+Urb = Irp->Tail.Overlay.DriverContext[0];
+
+//DPRINT("UsbAudioCaptureComplete Irp %p Urb %p\n", Irp, Urb);
+
 /* acquire lock */
 KeAcquireSpinLock(&PinContext->IrpListLock, &OldLevel);
 
@@ -446,8 +474,6 @@
 
 /* release lock */
 KeReleaseSpinLock(&PinContext->IrpListLock, OldLevel);
-
-DPRINT1("UsbAudioCaptureComplete Irp %p\n", Irp);
 
 /* done */
 return STATUS_MORE_PROCESSING_REQUIRED;
@@ -464,8 +490,10 @@
 PIRP Irp;
 PIO_STACK_LOCATION IoStack;
 PURB Urb;
-PUCHAR TransferBuffer;
-ULONG Index, Offset;
+PUCHAR TransferBuffer, OutBuffer;
+ULONG Index, Offset, MaximumPacketSize, Length;
+NTSTATUS Status;
+//PUSHORT SoundBuffer;
 
 LeadingStreamPointer = KsPinGetLeadingEdgeStreamPointer(Pin, 
KSSTREAM_POINTER_STATE_LOCKED);
 if (LeadingStreamPointer == NULL)
@@ -502,83 +530,104 @@
 /* get transfer buffer */
 TransferBuffer = Urb->UrbIsochronousTransfer.TransferBuffer;
 
-/* copy data */
-if (LeadingStreamPointer->OffsetOut.Remaining >= 
Urb->UrbIsochronousTransfer.IsoPacket[Index].Length)
-{ 
-/* copy buffer */
-RtlCopyMemory((PUCHAR)LeadingStreamPointer->OffsetOut.Data, 
&TransferBuffer[Offset], Urb->UrbIsochronousTransfer.IsoPacket[Index].Length);
-}
-else
-{

[ros-diffs] [janderwald] 72890: [USBAUDIO] - edit allocator framing struct to match endpoint requirements - implement partly PinCaptureProcess, not yet working

2016-10-02 Thread janderwald
Author: janderwald
Date: Sun Oct  2 13:08:23 2016
New Revision: 72890

URL: http://svn.reactos.org/svn/reactos?rev=72890&view=rev
Log:
[USBAUDIO]
- edit allocator framing struct to match endpoint requirements
- implement partly PinCaptureProcess, not yet working

Modified:
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72890&r1=72889&r2=72890&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Sun Oct  2 
13:08:23 2016
@@ -255,6 +255,7 @@
 PURB Urb;
 PPIN_CONTEXT PinContext;
 PIO_STACK_LOCATION IoStack;
+PKSALLOCATOR_FRAMING_EX Framing;
 
 /* set sample rate */
 Status = UsbAudioSetFormat(Pin);
@@ -267,7 +268,16 @@
 /* get pin context */
 PinContext = Pin->Context;
 
+/* lets get maximum packet size */
 MaximumPacketSize = 
GetMaxPacketSizeForInterface(PinContext->DeviceExtension->ConfigurationDescriptor,
 PinContext->InterfaceDescriptor, Pin->DataFlow);
+
+/* lets edit framing struct */
+Framing = (PKSALLOCATOR_FRAMING_EX)Pin->Descriptor->AllocatorFraming;
+Framing->FramingItem[0].PhysicalRange.MinFrameSize =
+Framing->FramingItem[0].PhysicalRange.MaxFrameSize =
+Framing->FramingItem[0].FramingRange.Range.MinFrameSize =
+Framing->FramingItem[0].FramingRange.Range.MaxFrameSize =
+MaximumPacketSize;
 
 /* calculate buffer size 8 irps * 10 iso packets * max packet size */
 BufferSize = 8 * 10 * MaximumPacketSize;
@@ -292,6 +302,7 @@
 return STATUS_INSUFFICIENT_RESOURCES;
 }
 
+DPRINT1("InitCapturePin Irp %p\n", Irp);
 /* insert into irp list */
 InsertTailList(&PinContext->IrpListHead, &Irp->Tail.Overlay.ListEntry);
 
@@ -312,6 +323,7 @@
 
 /* store urb */
 IoStack->Parameters.Others.Argument1 = Urb;
+Irp->Tail.Overlay.DriverContext[0] = Urb;
 }
 else
 {
@@ -364,9 +376,20 @@
 PinContext->DeviceExtension = FilterContext->DeviceExtension;
 PinContext->LowerDevice = FilterContext->LowerDevice;
 InitializeListHead(&PinContext->IrpListHead);
+InitializeListHead(&PinContext->DoneIrpListHead);
+KeInitializeSpinLock(&PinContext->IrpListLock);
 
 /* store pin context*/
 Pin->Context = PinContext;
+
+/* lets edit allocator framing struct */
+Status = _KsEdit(Pin->Bag, &Pin->Descriptor, sizeof(KSPIN_DESCRIPTOR_EX), 
sizeof(KSPIN_DESCRIPTOR_EX), USBAUDIO_TAG);
+if (NT_SUCCESS(Status))
+{
+Status = _KsEdit(Pin->Bag, &Pin->Descriptor->AllocatorFraming, 
sizeof(KSALLOCATOR_FRAMING_EX), sizeof(KSALLOCATOR_FRAMING_EX), USBAUDIO_TAG);
+ASSERT(Status == STATUS_SUCCESS);
+}
+
 
 /* select streaming interface */
 Status = USBAudioSelectAudioStreamingInterface(PinContext, 
PinContext->DeviceExtension, 
PinContext->DeviceExtension->ConfigurationDescriptor);
@@ -400,13 +423,197 @@
 return STATUS_NOT_IMPLEMENTED;
 }
 
+NTSTATUS
+NTAPI
+UsbAudioCaptureComplete(
+IN PDEVICE_OBJECT DeviceObject,
+IN PIRP Irp,
+IN PVOID Context)
+{
+PKSPIN Pin;
+PPIN_CONTEXT PinContext;
+KIRQL OldLevel;
+
+/* get pin context */
+Pin = Context;
+PinContext = Pin->Context;
+
+/* acquire lock */
+KeAcquireSpinLock(&PinContext->IrpListLock, &OldLevel);
+
+/* insert entry into done list */
+InsertTailList(&PinContext->DoneIrpListHead, &Irp->Tail.Overlay.ListEntry);
+
+/* release lock */
+KeReleaseSpinLock(&PinContext->IrpListLock, OldLevel);
+
+DPRINT1("UsbAudioCaptureComplete Irp %p\n", Irp);
+
+/* done */
+return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+NTSTATUS
+PinCaptureProcess(
+IN PKSPIN Pin)
+{
+PKSSTREAM_POINTER LeadingStreamPointer;
+KIRQL OldLevel;
+PPIN_CONTEXT PinContext;
+PLIST_ENTRY CurEntry;
+PIRP Irp;
+PIO_STACK_LOCATION IoStack;
+PURB Urb;
+PUCHAR TransferBuffer;
+ULONG Index, Offset;
+
+LeadingStreamPointer = KsPinGetLeadingEdgeStreamPointer(Pin, 
KSSTREAM_POINTER_STATE_LOCKED);
+if (LeadingStreamPointer == NULL)
+return STATUS_SUCCESS;
+
+/* get pin context */
+PinContext = Pin->Context;
+
+/* acquire spin lock */
+KeAcquireSpinLock(&PinContext->IrpListLock, &OldLevel);
+
+while (!IsListEmpty(&PinContext->DoneIrpListHead))
+{
+/* remove entry from list */
+CurEntry = RemoveHeadList(&PinContext->DoneIrpListHead);
+
+/* release lock */
+

[ros-diffs] [janderwald] 72889: [SDK] - add missing definitions

2016-10-02 Thread janderwald
Author: janderwald
Date: Sun Oct  2 09:15:13 2016
New Revision: 72889

URL: http://svn.reactos.org/svn/reactos?rev=72889&view=rev
Log:
[SDK]
- add missing definitions

Modified:
trunk/reactos/sdk/include/psdk/ks.h

Modified: trunk/reactos/sdk/include/psdk/ks.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/ks.h?rev=72889&r1=72888&r2=72889&view=diff
==
--- trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/include/psdk/ks.h [iso-8859-1] Sun Oct  2 09:15:13 2016
@@ -4196,6 +4196,28 @@
   _In_ PKSSTREAM_POINTER StreamPointer,
   _In_ BOOLEAN Eject);
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
+KsStreamPointerAdvanceOffsets(
+  _In_ PKSSTREAM_POINTER StreamPointer,
+  _In_ ULONG InUsed,
+  _In_ ULONG OutUsed,
+  _In_ BOOLEAN   Eject);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
+KsStreamPointerAdvanceOffsetsAndUnlock(
+   _In_ PKSSTREAM_POINTER StreamPointer,
+   _In_ ULONG InUsed,
+   _In_ ULONG OutUsed,
+   _In_ BOOLEAN   Eject
+   );
+
+
 _IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS




[ros-diffs] [janderwald] 72866: - fix bugs in USBAudioSelectAudioStreamingInterface

2016-09-30 Thread janderwald
Author: janderwald
Date: Fri Sep 30 09:57:42 2016
New Revision: 72866

URL: http://svn.reactos.org/svn/reactos?rev=72866&view=rev
Log:
- fix bugs in USBAudioSelectAudioStreamingInterface

Modified:
trunk/reactos/drivers/usb/usbaudio/pin.c

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72866&r1=72865&r2=72866&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Fri Sep 30 
09:57:42 2016
@@ -209,9 +209,6 @@
  /* now prepare interface urb */
  UsbBuildSelectInterfaceRequest(Urb, 
GET_SELECT_INTERFACE_REQUEST_SIZE(InterfaceDescriptor->bNumEndpoints), 
DeviceExtension->ConfigurationHandle, InterfaceDescriptor->bInterfaceNumber, 
InterfaceDescriptor->bAlternateSetting);
 
- /* copy interface information */
- RtlCopyMemory(&Urb->UrbSelectInterface.Interface, 
DeviceExtension->InterfaceInfo, DeviceExtension->InterfaceInfo->Length);
-
  /* now select the interface */
  Status = SubmitUrbSync(DeviceExtension->LowerDevice, Urb);
 
@@ -220,8 +217,23 @@
  /* did it succeeed */
  if (NT_SUCCESS(Status))
  {
- /* update configuration info */
- ASSERT(Urb->UrbSelectInterface.Interface.Length == 
DeviceExtension->InterfaceInfo->Length);
+ /* free old interface info */
+ if (DeviceExtension->InterfaceInfo)
+ {
+ /* free old info */
+ FreeFunction(DeviceExtension->InterfaceInfo);
+ }
+
+ /* alloc interface info */
+ DeviceExtension->InterfaceInfo = 
AllocFunction(Urb->UrbSelectInterface.Interface.Length);
+ if (DeviceExtension->InterfaceInfo == NULL)
+ {
+ /* no memory */
+ FreeFunction(Urb);
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
+
+ /* copy interface info */
  RtlCopyMemory(DeviceExtension->InterfaceInfo, 
&Urb->UrbSelectInterface.Interface, Urb->UrbSelectInterface.Interface.Length);
  PinContext->InterfaceDescriptor = InterfaceDescriptor;
  }
@@ -254,7 +266,7 @@
 
 /* get pin context */
 PinContext = Pin->Context;
-   DbgBreakPoint();
+
 MaximumPacketSize = 
GetMaxPacketSizeForInterface(PinContext->DeviceExtension->ConfigurationDescriptor,
 PinContext->InterfaceDescriptor, Pin->DataFlow);
 
 /* calculate buffer size 8 irps * 10 iso packets * max packet size */
@@ -286,6 +298,7 @@
 /* add to object bag*/
 KsAddItemToObjectBag(Pin->Bag, Irp, IoFreeIrp);
 
+/* FIXME select correct pipe handle */
 Status = 
UsbAudioAllocCaptureUrbIso(PinContext->DeviceExtension->InterfaceInfo->Pipes[0].PipeHandle,
 
 MaximumPacketSize,
 
&PinContext->Buffer[MaximumPacketSize * 10 * Index], 




[ros-diffs] [janderwald] 72865: [USBAUDIO] - implement GetMaxPacketSizeForInterface, UsbAudioAllocCaptureUrbIso, InitCapturePin

2016-09-29 Thread janderwald
Author: janderwald
Date: Thu Sep 29 22:19:34 2016
New Revision: 72865

URL: http://svn.reactos.org/svn/reactos?rev=72865&view=rev
Log:
[USBAUDIO]
- implement GetMaxPacketSizeForInterface, UsbAudioAllocCaptureUrbIso, 
InitCapturePin

Modified:
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72865&r1=72864&r2=72865&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Thu Sep 29 
22:19:34 2016
@@ -8,6 +8,90 @@
 */
 
 #include "usbaudio.h"
+
+NTSTATUS
+GetMaxPacketSizeForInterface(
+IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+IN PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor,
+KSPIN_DATAFLOW DataFlow)
+{
+PUSB_COMMON_DESCRIPTOR CommonDescriptor;
+PUSB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
+
+/* loop descriptors */
+CommonDescriptor = (PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)InterfaceDescriptor 
+ InterfaceDescriptor->bLength);
+ASSERT(InterfaceDescriptor->bNumEndpoints > 0);
+while (CommonDescriptor)
+{
+if (CommonDescriptor->bDescriptorType == USB_ENDPOINT_DESCRIPTOR_TYPE)
+{
+EndpointDescriptor = (PUSB_ENDPOINT_DESCRIPTOR)CommonDescriptor;
+return EndpointDescriptor->wMaxPacketSize;
+}
+
+if (CommonDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE)
+{
+/* reached next interface descriptor */
+break;
+}
+
+if ((ULONG_PTR)CommonDescriptor + CommonDescriptor->bLength >= 
((ULONG_PTR)ConfigurationDescriptor + ConfigurationDescriptor->wTotalLength))
+break;
+
+CommonDescriptor = 
(PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)CommonDescriptor + 
CommonDescriptor->bLength);
+}
+
+/* default to 100 */
+return 100;
+}
+
+NTSTATUS
+UsbAudioAllocCaptureUrbIso(
+IN USBD_PIPE_HANDLE PipeHandle,
+IN ULONG MaxPacketSize,
+IN PVOID Buffer,
+IN ULONG BufferLength,
+OUT PURB * OutUrb)
+{
+PURB Urb;
+ULONG PacketCount;
+ULONG UrbSize;
+ULONG Index;
+
+/* calculate packet count */
+PacketCount = BufferLength / MaxPacketSize;
+
+/* calculate urb size*/
+UrbSize = GET_ISO_URB_SIZE(PacketCount);
+
+/* allocate urb */
+Urb = AllocFunction(UrbSize);
+if (!Urb)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* init urb */
+Urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;
+Urb->UrbIsochronousTransfer.Hdr.Length = UrbSize;
+Urb->UrbIsochronousTransfer.PipeHandle = PipeHandle;
+Urb->UrbIsochronousTransfer.TransferFlags = USBD_TRANSFER_DIRECTION_IN | 
USBD_START_ISO_TRANSFER_ASAP;
+Urb->UrbIsochronousTransfer.TransferBufferLength = BufferLength;
+Urb->UrbIsochronousTransfer.TransferBuffer = Buffer;
+Urb->UrbIsochronousTransfer.NumberOfPackets = PacketCount;
+
+for (Index = 0; Index < PacketCount; Index++)
+{
+Urb->UrbIsochronousTransfer.IsoPacket[Index].Offset = Index * 
MaxPacketSize;
+}
+
+*OutUrb = Urb;
+return STATUS_SUCCESS;
+
+}
+
+
 
 NTSTATUS
 UsbAudioSetFormat(
@@ -83,6 +167,7 @@
 
 NTSTATUS
 USBAudioSelectAudioStreamingInterface(
+IN PPIN_CONTEXT PinContext,
 IN PDEVICE_EXTENSION DeviceExtension,
 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
 {
@@ -98,7 +183,7 @@
 return STATUS_INVALID_PARAMETER;
 }
 
-/* select the first interface with audio streaming and non zero num of 
endpoints */
+/* FIXME selects the first interface with audio streaming and non zero num 
of endpoints */
 while (InterfaceDescriptor != NULL)
 {
 if (InterfaceDescriptor->bInterfaceSubClass == 0x02 /* AUDIO_STREAMING 
*/ && InterfaceDescriptor->bNumEndpoints > 0) 
@@ -126,9 +211,6 @@
 
  /* copy interface information */
  RtlCopyMemory(&Urb->UrbSelectInterface.Interface, 
DeviceExtension->InterfaceInfo, DeviceExtension->InterfaceInfo->Length);
-
- /* set configuration handle */
- Urb->UrbSelectInterface.ConfigurationHandle = 
DeviceExtension->ConfigurationHandle;
 
  /* now select the interface */
  Status = SubmitUrbSync(DeviceExtension->LowerDevice, Urb);
@@ -141,6 +223,7 @@
  /* update configuration info */
  ASSERT(Urb->UrbSelectInterface.Interface.Length == 
DeviceExtension->InterfaceInfo->Length);
  RtlCopyMemory(DeviceExtension->InterfaceInfo, 
&Urb->UrbSelectInterface.Interface, Urb->UrbSelectInterface.Interface.Length);
+ PinContext->InterfaceDescriptor = Interfac

[ros-diffs] [janderwald] 72857: [USBAUDIO] - fix bug in UsbAudioSetFormat

2016-09-29 Thread janderwald
Author: janderwald
Date: Thu Sep 29 19:25:31 2016
New Revision: 72857

URL: http://svn.reactos.org/svn/reactos?rev=72857&view=rev
Log:
[USBAUDIO]
- fix bug in UsbAudioSetFormat

Modified:
trunk/reactos/drivers/usb/usbaudio/pin.c

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72857&r1=72856&r2=72857&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Thu Sep 29 
19:25:31 2016
@@ -32,9 +32,9 @@
 IsEqualGUIDAligned(&Pin->ConnectionFormat->Specifier, 
&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX))
 {
 WaveFormatEx = (PKSDATAFORMAT_WAVEFORMATEX)Pin->ConnectionFormat;
-SampleRateBuffer[0] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 
16) & 0xFF;
+SampleRateBuffer[2] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 
16) & 0xFF;
 SampleRateBuffer[1] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 8) 
& 0xFF;
-SampleRateBuffer[2] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 0) 
& 0xFF;
+SampleRateBuffer[0] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 0) 
& 0xFF;
 
 /* TODO: verify connection format */
 }
@@ -58,7 +58,7 @@
 /* format urb */
 UsbBuildVendorRequest(Urb,
 URB_FUNCTION_CLASS_ENDPOINT,
-sizeof(URB),
+sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),
 USBD_TRANSFER_DIRECTION_OUT,
 0,
 0x01,
@@ -71,7 +71,7 @@
 
 /* get pin context */
 PinContext = Pin->Context;
-DbgBreakPoint();
+
 /* submit urb */
 Status = SubmitUrbSync(PinContext->LowerDevice, Urb);
 




[ros-diffs] [janderwald] 72843: [USBAUDIO] - implement USBAudioSelectAudioStreamingInterface

2016-09-28 Thread janderwald
Author: janderwald
Date: Wed Sep 28 20:31:32 2016
New Revision: 72843

URL: http://svn.reactos.org/svn/reactos?rev=72843&view=rev
Log:
[USBAUDIO]
- implement USBAudioSelectAudioStreamingInterface

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72843&r1=72842&r2=72843&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Wed Sep 28 
20:31:32 2016
@@ -136,6 +136,7 @@
 FilterContext->LowerDevice = Device->NextDeviceObject;
 Filter->Context = FilterContext;
 
+DPRINT("USBAudioFilterCreate FilterContext %p LowerDevice %p 
DeviceExtension %p\n", FilterContext, FilterContext->LowerDevice, 
FilterContext->DeviceExtension);
 KsAddItemToObjectBag(Filter->Bag, FilterContext, ExFreePool);
 return STATUS_SUCCESS;
 }

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72843&r1=72842&r2=72843&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Wed Sep 28 
20:31:32 2016
@@ -10,80 +10,8 @@
 #include "usbaudio.h"
 
 NTSTATUS
-NTAPI
-USBAudioPinCreate(
-_In_ PKSPIN Pin,
-_In_ PIRP Irp)
-{
-PKSFILTER Filter;
-PFILTER_CONTEXT FilterContext;
-PPIN_CONTEXT PinContext;
-
-Filter = KsPinGetParentFilter(Pin);
-if (Filter == NULL)
-{
-/* invalid parameter */
-return STATUS_INVALID_PARAMETER;
-}
-
-/* get filter context */
-FilterContext = Filter->Context;
-
-/* allocate pin context */
-PinContext = AllocFunction(sizeof(PIN_CONTEXT));
-if (!PinContext)
-{
-/* no memory*/
-return STATUS_INSUFFICIENT_RESOURCES;
-}
-
-/* init pin context */
-PinContext->DeviceExtension = FilterContext->DeviceExtension;
-PinContext->LowerDevice = FilterContext->LowerDevice;
-
-/* store pin context*/
-Pin->Context = PinContext;
-
-return STATUS_SUCCESS;
-}
-
-NTSTATUS
-NTAPI
-USBAudioPinClose(
-_In_ PKSPIN Pin,
-_In_ PIRP Irp)
-{
-UNIMPLEMENTED
-return STATUS_NOT_IMPLEMENTED;
-}
-
-
-NTSTATUS
-NTAPI
-USBAudioPinProcess(
-_In_ PKSPIN Pin)
-{
-UNIMPLEMENTED
-return STATUS_SUCCESS;
-}
-
-
-VOID
-NTAPI
-USBAudioPinReset(
-_In_ PKSPIN Pin)
-{
-UNIMPLEMENTED
-}
-
-NTSTATUS
-NTAPI
-USBAudioPinSetDataFormat(
-_In_ PKSPIN Pin,
-_In_opt_ PKSDATAFORMAT OldFormat,
-_In_opt_ PKSMULTIPLE_ITEM OldAttributeList,
-_In_ const KSDATARANGE* DataRange,
-_In_opt_ const KSATTRIBUTE_LIST* AttributeRange)
+UsbAudioSetFormat(
+IN PKSPIN Pin)
 {
 PURB Urb;
 PUCHAR SampleRateBuffer;
@@ -99,14 +27,16 @@
 return STATUS_INSUFFICIENT_RESOURCES;
 }
 
-if (IsEqualGUIDAligned(&Pin->ConnectionFormat->MajorFormat, 
&KSDATAFORMAT_TYPE_AUDIO) && 
-IsEqualGUIDAligned(&Pin->ConnectionFormat->SubFormat,  
&KSDATAFORMAT_SUBTYPE_PCM) &&
+if (IsEqualGUIDAligned(&Pin->ConnectionFormat->MajorFormat, 
&KSDATAFORMAT_TYPE_AUDIO) &&
+IsEqualGUIDAligned(&Pin->ConnectionFormat->SubFormat, 
&KSDATAFORMAT_SUBTYPE_PCM) &&
 IsEqualGUIDAligned(&Pin->ConnectionFormat->Specifier, 
&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX))
 {
 WaveFormatEx = (PKSDATAFORMAT_WAVEFORMATEX)Pin->ConnectionFormat;
 SampleRateBuffer[0] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 
16) & 0xFF;
 SampleRateBuffer[1] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 8) 
& 0xFF;
 SampleRateBuffer[2] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 0) 
& 0xFF;
+
+/* TODO: verify connection format */
 }
 else
 {
@@ -127,17 +57,17 @@
 
 /* format urb */
 UsbBuildVendorRequest(Urb,
-  URB_FUNCTION_CLASS_ENDPOINT,
-  sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),
-  USBD_TRANSFER_DIRECTION_OUT,
-  0,
-  0x01,
-  0x100,
-  0x81, //bEndpointAddress
-  SampleRateBuffer,
-  NULL,
-  3,
-  NULL);
+URB_FUNCTION_CLASS_ENDPOINT,
+sizeof(URB),
+USBD_TRANSFER_DIRECTION_OUT,
+  

[ros-diffs] [janderwald] 72833: [USBAUDIO] - improve guid mess a bit - thanks amine

2016-09-27 Thread janderwald
Author: janderwald
Date: Tue Sep 27 19:56:54 2016
New Revision: 72833

URL: http://svn.reactos.org/svn/reactos?rev=72833&view=rev
Log:
[USBAUDIO]
- improve guid mess a bit
- thanks amine 

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/guid.c
trunk/reactos/drivers/usb/usbaudio/pin.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72833&r1=72832&r2=72833&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Tue Sep 27 
19:56:54 2016
@@ -25,9 +25,7 @@
 GUID NodeTypeCapture = { STATIC_PINNAME_CAPTURE };
 GUID NodeTypePlayback = { STATIC_KSCATEGORY_AUDIO };
 GUID GUID_KSCATEGORY_AUDIO = { STATIC_KSCATEGORY_AUDIO };
-GUID GUID_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO };
-GUID GUID_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM };
-GUID GUID_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = { 
STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX };
+
 KSPIN_INTERFACE StandardPinInterface =
 {
  {STATIC_KSINTERFACESETID_Standard},
@@ -367,9 +365,9 @@
 }
 
 DataRangeAudio->DataRange.FormatSize = 
sizeof(KSDATARANGE_AUDIO);
-DataRangeAudio->DataRange.MajorFormat = 
GUID_KSDATAFORMAT_TYPE_AUDIO;
-DataRangeAudio->DataRange.SubFormat = 
GUID_KSDATAFORMAT_SUBTYPE_PCM;
-DataRangeAudio->DataRange.Specifier = 
GUID_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
+DataRangeAudio->DataRange.MajorFormat = 
KSDATAFORMAT_TYPE_AUDIO;
+DataRangeAudio->DataRange.SubFormat = 
KSDATAFORMAT_SUBTYPE_PCM;
+DataRangeAudio->DataRange.Specifier = 
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;
 DataRangeAudio->MaximumChannels = 1;
 DataRangeAudio->MinimumBitsPerSample = 
StreamingFormatDescriptor->bBitResolution;
 DataRangeAudio->MaximumBitsPerSample = 
StreamingFormatDescriptor->bBitResolution;

Modified: trunk/reactos/drivers/usb/usbaudio/guid.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/guid.c?rev=72833&r1=72832&r2=72833&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/guid.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/guid.c   [iso-8859-1] Tue Sep 27 
19:56:54 2016
@@ -1,14 +1,11 @@
 /* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */
 
-//#include 
 #include 
-#include 
-#include 
-#include 
-#include 
-#include 
 
 /* FIXME */
 DEFINE_GUID(KSNAME_Filter, 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 
0x20, 0xaf, 0xd1, 0x56, 0xe4);
+DEFINE_GUID(KSDATAFORMAT_TYPE_AUDIO, 0x73647561L, 0x, 0x0010, 0x80, 0x00, 
0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_PCM, 0x0001L, 0x, 0x0010, 0x80, 0x00, 
0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, 0x05589f81L, 0xc356, 0x11ce, 
0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a);
 
 /* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72833&r1=72832&r2=72833&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Tue Sep 27 
19:56:54 2016
@@ -8,10 +8,6 @@
 */
 
 #include "usbaudio.h"
-
-GUID GUID2_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO };
-GUID GUID2_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM };
-GUID GUID2_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = { 
STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX };
 
 NTSTATUS
 NTAPI
@@ -103,9 +99,9 @@
 return STATUS_INSUFFICIENT_RESOURCES;
 }
 
-if (IsEqualGUIDAligned(&Pin->ConnectionFormat->MajorFormat, 
&GUID2_KSDATAFORMAT_TYPE_AUDIO) && 
-IsEqualGUIDAligned(&Pin->ConnectionFormat->SubFormat,  
&GUID2_KSDATAFORMAT_SUBTYPE_PCM) &&
-IsEqualGUIDAligned(&Pin->ConnectionFormat->Specifier, 
&GUID2_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX))
+if (IsEqualGUIDAligned(&Pin->ConnectionFormat->MajorFormat, 
&KSDATAFORMAT_TYPE_AUDIO) && 
+IsEqualGUIDAligned(&Pin->ConnectionFormat->SubFormat,  
&KSDATAFORMAT_SUBTYPE_PCM) &&
+IsEqualGUIDAligned(&Pin->ConnectionFormat->Specifier, 
&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX))
 {
 WaveFormatEx = (PKSDATAFORMAT_WAVEFORMATEX)Pin->ConnectionFormat;
 SampleRateBuffer[0] = (WaveFormatEx->WaveFormatEx.nSamplesPerSec >> 
16) & 0xFF;




[ros-diffs] [janderwald] 72832: [USBAUDIO] - implement USBAudioFilterCreate - partly implement USBAudioPinCreate, USBAudioPinSetDataFormat

2016-09-27 Thread janderwald
Author: janderwald
Date: Tue Sep 27 19:20:00 2016
New Revision: 72832

URL: http://svn.reactos.org/svn/reactos?rev=72832&view=rev
Log:
[USBAUDIO]
- implement USBAudioFilterCreate
- partly implement USBAudioPinCreate, USBAudioPinSetDataFormat

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/guid.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72832&r1=72831&r2=72832&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Tue Sep 27 
19:20:00 2016
@@ -107,7 +107,38 @@
 PKSFILTER Filter,
 PIRP Irp)
 {
-UNIMPLEMENTED
+PKSFILTERFACTORY FilterFactory;
+PKSDEVICE Device;
+PFILTER_CONTEXT FilterContext;
+
+FilterFactory = KsGetParent(Filter);
+if (FilterFactory == NULL)
+{
+/* invalid parameter */
+return STATUS_INVALID_PARAMETER;
+}
+
+Device = KsGetParent(FilterFactory);
+if (Device == NULL)
+{
+/* invalid parameter */
+return STATUS_INVALID_PARAMETER;
+}
+
+/* alloc filter context */
+FilterContext = AllocFunction(sizeof(FILTER_CONTEXT));
+if (FilterContext == NULL)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* init context */
+FilterContext->DeviceExtension = Device->Context;
+FilterContext->LowerDevice = Device->NextDeviceObject;
+Filter->Context = FilterContext;
+
+KsAddItemToObjectBag(Filter->Bag, FilterContext, ExFreePool);
 return STATUS_SUCCESS;
 }
 

Modified: trunk/reactos/drivers/usb/usbaudio/guid.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/guid.c?rev=72832&r1=72831&r2=72832&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/guid.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/guid.c   [iso-8859-1] Tue Sep 27 
19:20:00 2016
@@ -1,9 +1,8 @@
 /* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */
 
 //#include 
+#include 
 #include 
-
-#include 
 #include 
 #include 
 #include 

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72832&r1=72831&r2=72832&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Tue Sep 27 
19:20:00 2016
@@ -9,13 +9,45 @@
 
 #include "usbaudio.h"
 
+GUID GUID2_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO };
+GUID GUID2_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM };
+GUID GUID2_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = { 
STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX };
+
 NTSTATUS
 NTAPI
 USBAudioPinCreate(
 _In_ PKSPIN Pin,
 _In_ PIRP Irp)
 {
-UNIMPLEMENTED
+PKSFILTER Filter;
+PFILTER_CONTEXT FilterContext;
+PPIN_CONTEXT PinContext;
+
+Filter = KsPinGetParentFilter(Pin);
+if (Filter == NULL)
+{
+/* invalid parameter */
+return STATUS_INVALID_PARAMETER;
+}
+
+/* get filter context */
+FilterContext = Filter->Context;
+
+/* allocate pin context */
+PinContext = AllocFunction(sizeof(PIN_CONTEXT));
+if (!PinContext)
+{
+/* no memory*/
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+/* init pin context */
+PinContext->DeviceExtension = FilterContext->DeviceExtension;
+PinContext->LowerDevice = FilterContext->LowerDevice;
+
+/* store pin context*/
+Pin->Context = PinContext;
+
 return STATUS_SUCCESS;
 }
 
@@ -57,10 +89,71 @@
 _In_ const KSDATARANGE* DataRange,
 _In_opt_ const KSATTRIBUTE_LIST* AttributeRange)
 {
-UNIMPLEMENTED
-return STATUS_SUCCESS;
+PURB Urb;
+PUCHAR SampleRateBuffer;
+PPIN_CONTEXT PinContext;
+NTSTATUS Status;
+PKSDATAFORMAT_WAVEFORMATEX WaveFormatEx;
+
+/* allocate sample rate buffer */
+SampleRateBuffer = AllocFunction(sizeof(ULONG));
+if (!SampleRateBuffer)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+if (IsEqualGUIDAligned(&Pin->ConnectionFormat->MajorFormat, 
&GUID2_KSDATAFORMAT_TYPE_AUDIO) && 
+IsEqualGUIDAligned(&Pin->ConnectionFormat->SubFormat,  
&GUID2_KSDATAFORMAT_SUBTYPE_PCM) &&
+IsEqualGUIDAligned(&Pin->ConnectionFormat->Specifier, 
&GUID2_KSDATAFORMAT_SPECIFI

[ros-diffs] [janderwald] 72791: [LIBUSBAUDIO] - delete unused code

2016-09-24 Thread janderwald
Author: janderwald
Date: Sat Sep 24 11:24:07 2016
New Revision: 72791

URL: http://svn.reactos.org/svn/reactos?rev=72791&view=rev
Log:
[LIBUSBAUDIO]
- delete unused code

Removed:
trunk/reactos/sdk/lib/drivers/sound/libusbaudio/




[ros-diffs] [janderwald] 72790: [USBAUDIO] - allocate filter descriptor - fixes hang in win2k3

2016-09-24 Thread janderwald
Author: janderwald
Date: Sat Sep 24 11:17:32 2016
New Revision: 72790

URL: http://svn.reactos.org/svn/reactos?rev=72790&view=rev
Log:
[USBAUDIO]
- allocate filter descriptor
- fixes hang in win2k3

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72790&r1=72789&r2=72790&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Sat Sep 24 
11:17:32 2016
@@ -477,20 +477,25 @@
 USBAudioCreateFilterContext(
 PKSDEVICE Device)
 {
-KSFILTER_DESCRIPTOR FilterDescriptor;
+PKSFILTER_DESCRIPTOR FilterDescriptor;
 PKSCOMPONENTID ComponentId;
 NTSTATUS Status;
 
-/* clear filter descriptor */
-RtlZeroMemory(&FilterDescriptor, sizeof(KSFILTER_DESCRIPTOR));
+/* allocate descriptor */
+FilterDescriptor = AllocFunction(sizeof(KSFILTER_DESCRIPTOR));
+if (!FilterDescriptor)
+{
+/* no memory */
+return USBD_STATUS_INSUFFICIENT_RESOURCES;
+}
 
 /* init filter descriptor*/
-FilterDescriptor.Version = KSFILTER_DESCRIPTOR_VERSION;
-FilterDescriptor.Flags = 0;
-FilterDescriptor.ReferenceGuid = &KSNAME_Filter;
-FilterDescriptor.Dispatch = &USBAudioFilterDispatch;
-FilterDescriptor.CategoriesCount = 1;
-FilterDescriptor.Categories = &GUID_KSCATEGORY_AUDIO;
+FilterDescriptor->Version = KSFILTER_DESCRIPTOR_VERSION;
+FilterDescriptor->Flags = 0;
+FilterDescriptor->ReferenceGuid = &KSNAME_Filter;
+FilterDescriptor->Dispatch = &USBAudioFilterDispatch;
+FilterDescriptor->CategoriesCount = 1;
+FilterDescriptor->Categories = &GUID_KSCATEGORY_AUDIO;
 
 /* init component id*/
 ComponentId = AllocFunction(sizeof(KSCOMPONENTID));
@@ -506,10 +511,10 @@
 //FreeFunction(ComponentId);
 //return Status;
 }
-FilterDescriptor.ComponentId = ComponentId;
+FilterDescriptor->ComponentId = ComponentId;
 
 /* build pin descriptors */
-Status = USBAudioPinBuildDescriptors(Device, (PKSPIN_DESCRIPTOR_EX 
*)&FilterDescriptor.PinDescriptors, &FilterDescriptor.PinDescriptorsCount, 
&FilterDescriptor.PinDescriptorSize);
+Status = USBAudioPinBuildDescriptors(Device, (PKSPIN_DESCRIPTOR_EX 
*)&FilterDescriptor->PinDescriptors, &FilterDescriptor->PinDescriptorsCount, 
&FilterDescriptor->PinDescriptorSize);
 if (!NT_SUCCESS(Status))
 {
 /* failed*/
@@ -527,7 +532,7 @@
 }
 
 /* lets create the filter */
-Status = KsCreateFilterFactory(Device->FunctionalDeviceObject, 
&FilterDescriptor, ReferenceString, NULL, KSCREATE_ITEM_FREEONSTOP, NULL, NULL, 
NULL);
+Status = KsCreateFilterFactory(Device->FunctionalDeviceObject, 
FilterDescriptor, ReferenceString, NULL, KSCREATE_ITEM_FREEONSTOP, NULL, NULL, 
NULL);
 DPRINT1("KsCreateFilterFactory: %x\n", Status);
 
 return Status;




[ros-diffs] [janderwald] 72785: [USBAUDIO] - add pin dispatch routines

2016-09-24 Thread janderwald
Author: janderwald
Date: Sat Sep 24 08:35:25 2016
New Revision: 72785

URL: http://svn.reactos.org/svn/reactos?rev=72785&view=rev
Log:
[USBAUDIO]
- add pin dispatch routines

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/pin.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72785&r1=72784&r2=72785&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Sat Sep 24 
08:35:25 2016
@@ -77,6 +77,21 @@
 NULL,
 NULL
 };
+
+static KSPIN_DISPATCH UsbAudioPinDispatch =
+{
+USBAudioPinCreate,
+USBAudioPinClose,
+USBAudioPinProcess,
+USBAudioPinReset,
+USBAudioPinSetDataFormat,
+USBAudioPinSetDeviceState,
+NULL,
+NULL,
+NULL,
+NULL
+};
+
 
 NTSTATUS
 BuildUSBAudioFilterTopology(
@@ -382,6 +397,9 @@
 {
 /* irp sink pins*/
 TerminalDescriptor = 
UsbAudioGetStreamingTerminalDescriptorByIndex(DeviceExtension->ConfigurationDescriptor,
 Index);
+ASSERT(TerminalDescriptor != NULL);
+
+Pins[Index].Dispatch = &UsbAudioPinDispatch;
 Pins[Index].PinDescriptor.InterfacesCount = 1;
 Pins[Index].PinDescriptor.Interfaces = &StandardPinInterface;
 Pins[Index].PinDescriptor.MediumsCount = 1;
@@ -499,7 +517,6 @@
 return Status;
 }
 
-DbgBreakPoint();
 /* build topology */
 Status = BuildUSBAudioFilterTopology(Device);
 if (!NT_SUCCESS(Status))

Modified: trunk/reactos/drivers/usb/usbaudio/pin.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/pin.c?rev=72785&r1=72784&r2=72785&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/pin.c[iso-8859-1] Sat Sep 24 
08:35:25 2016
@@ -9,3 +9,66 @@
 
 #include "usbaudio.h"
 
+NTSTATUS
+NTAPI
+USBAudioPinCreate(
+_In_ PKSPIN Pin,
+_In_ PIRP Irp)
+{
+UNIMPLEMENTED
+return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+USBAudioPinClose(
+_In_ PKSPIN Pin,
+_In_ PIRP Irp)
+{
+UNIMPLEMENTED
+return STATUS_NOT_IMPLEMENTED;
+}
+
+
+NTSTATUS
+NTAPI
+USBAudioPinProcess(
+_In_ PKSPIN Pin)
+{
+UNIMPLEMENTED
+return STATUS_SUCCESS;
+}
+
+
+VOID
+NTAPI
+USBAudioPinReset(
+_In_ PKSPIN Pin)
+{
+UNIMPLEMENTED
+}
+
+NTSTATUS
+NTAPI
+USBAudioPinSetDataFormat(
+_In_ PKSPIN Pin,
+_In_opt_ PKSDATAFORMAT OldFormat,
+_In_opt_ PKSMULTIPLE_ITEM OldAttributeList,
+_In_ const KSDATARANGE* DataRange,
+_In_opt_ const KSATTRIBUTE_LIST* AttributeRange)
+{
+UNIMPLEMENTED
+return STATUS_SUCCESS;
+}
+
+
+NTSTATUS
+NTAPI
+USBAudioPinSetDeviceState(
+_In_ PKSPIN Pin,
+_In_ KSSTATE ToState,
+_In_ KSSTATE FromState)
+{
+UNIMPLEMENTED
+return STATUS_SUCCESS;
+}

Modified: trunk/reactos/drivers/usb/usbaudio/usbaudio.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/usbaudio.h?rev=72785&r1=72784&r2=72785&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/usbaudio.h   [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/usbaudio.h   [iso-8859-1] Sat Sep 24 
08:35:25 2016
@@ -222,3 +222,44 @@
   _In_ DEVICE_POWER_STATE To,
   _In_ DEVICE_POWER_STATE From
 );
+
+/* pin.c*/
+
+NTSTATUS
+NTAPI
+USBAudioPinCreate(
+_In_ PKSPIN Pin,
+_In_ PIRP Irp);
+
+NTSTATUS
+NTAPI
+USBAudioPinClose(
+_In_ PKSPIN Pin,
+_In_ PIRP Irp);
+
+NTSTATUS
+NTAPI
+USBAudioPinProcess(
+_In_ PKSPIN Pin);
+
+VOID
+NTAPI
+USBAudioPinReset(
+_In_ PKSPIN Pin);
+
+NTSTATUS
+NTAPI
+USBAudioPinSetDataFormat(
+_In_ PKSPIN Pin,
+_In_opt_ PKSDATAFORMAT OldFormat,
+_In_opt_ PKSMULTIPLE_ITEM OldAttributeList,
+_In_ const KSDATARANGE* DataRange,
+_In_opt_ const KSATTRIBUTE_LIST* AttributeRange);
+
+NTSTATUS
+NTAPI
+USBAudioPinSetDeviceState(
+_In_ PKSPIN Pin,
+_In_ KSSTATE ToState,
+_In_ KSSTATE FromState);
+




[ros-diffs] [janderwald] 72783: [USBAUDIO] - fix build with gcc

2016-09-23 Thread janderwald
Author: janderwald
Date: Fri Sep 23 22:14:21 2016
New Revision: 72783

URL: http://svn.reactos.org/svn/reactos?rev=72783&view=rev
Log:
[USBAUDIO]
- fix build with gcc

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72783&r1=72782&r2=72783&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Sep 23 
22:14:21 2016
@@ -45,13 +45,15 @@
 KSDATARANGE BridgePinAudioFormat[] =
 {
 {
-sizeof(KSDATAFORMAT),
-0,
-0,
-0,
-{STATIC_KSDATAFORMAT_TYPE_AUDIO},
-{STATIC_KSDATAFORMAT_SUBTYPE_ANALOG},
-{STATIC_KSDATAFORMAT_SPECIFIER_NONE}
+{
+sizeof(KSDATAFORMAT),
+0,
+0,
+0,
+{STATIC_KSDATAFORMAT_TYPE_AUDIO},
+{STATIC_KSDATAFORMAT_SUBTYPE_ANALOG},
+{STATIC_KSDATAFORMAT_SPECIFIER_NONE}
+}
 }
 };
 
@@ -458,7 +460,6 @@
 PKSDEVICE Device)
 {
 KSFILTER_DESCRIPTOR FilterDescriptor;
-PDEVICE_EXTENSION DeviceExtension;
 PKSCOMPONENTID ComponentId;
 NTSTATUS Status;
 
@@ -509,7 +510,6 @@
 }
 
 /* lets create the filter */
-DeviceExtension = Device->Context;
 Status = KsCreateFilterFactory(Device->FunctionalDeviceObject, 
&FilterDescriptor, ReferenceString, NULL, KSCREATE_ITEM_FREEONSTOP, NULL, NULL, 
NULL);
 DPRINT1("KsCreateFilterFactory: %x\n", Status);
 




[ros-diffs] [janderwald] 72782: [USBAUDIO] - fix warnings - implement UsbAudioGetDataRanges for filter descriptor

2016-09-23 Thread janderwald
Author: janderwald
Date: Fri Sep 23 22:07:24 2016
New Revision: 72782

URL: http://svn.reactos.org/svn/reactos?rev=72782&view=rev
Log:
[USBAUDIO]
- fix warnings
- implement UsbAudioGetDataRanges for filter descriptor

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72782&r1=72781&r2=72782&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Sep 23 
22:07:24 2016
@@ -25,7 +25,9 @@
 GUID NodeTypeCapture = { STATIC_PINNAME_CAPTURE };
 GUID NodeTypePlayback = { STATIC_KSCATEGORY_AUDIO };
 GUID GUID_KSCATEGORY_AUDIO = { STATIC_KSCATEGORY_AUDIO };
-
+GUID GUID_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO };
+GUID GUID_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM };
+GUID GUID_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = { 
STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX };
 KSPIN_INTERFACE StandardPinInterface =
 {
  {STATIC_KSINTERFACESETID_Standard},
@@ -112,7 +114,7 @@
 {
 if (Descriptor->bInterfaceSubClass == 0x01) /* AUDIO_CONTROL */
 {
-InterfaceHeaderDescriptor = 
USBD_ParseDescriptors(ConfigurationDescriptor, 
ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+InterfaceHeaderDescriptor = 
(PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR)USBD_ParseDescriptors(ConfigurationDescriptor,
 ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
 if (InterfaceHeaderDescriptor != NULL)
 {
 CommonDescriptor = 
USBD_ParseDescriptors(InterfaceHeaderDescriptor, 
InterfaceHeaderDescriptor->wTotalLength, 
(PVOID)((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->bLength), 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
@@ -127,7 +129,7 @@
 }
 TotalTerminalCount++;
 }
-CommonDescriptor = 
(PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)((ULONG_PTR)CommonDescriptor + 
CommonDescriptor->bLength);
+CommonDescriptor = 
(PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)CommonDescriptor + 
CommonDescriptor->bLength);
 if ((ULONG_PTR)CommonDescriptor >= 
((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->wTotalLength))
 break;
 }
@@ -203,7 +205,7 @@
 {
 if (Descriptor->bInterfaceSubClass == 0x01) /* AUDIO_CONTROL */
 {
-InterfaceHeaderDescriptor = 
USBD_ParseDescriptors(ConfigurationDescriptor, 
ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+InterfaceHeaderDescriptor = 
(PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR)USBD_ParseDescriptors(ConfigurationDescriptor,
 ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
 if (InterfaceHeaderDescriptor != NULL)
 {
 CommonDescriptor = 
USBD_ParseDescriptors(InterfaceHeaderDescriptor, 
InterfaceHeaderDescriptor->wTotalLength, 
(PVOID)((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->bLength), 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
@@ -221,7 +223,7 @@
 TerminalCount++;
 }
 }
-CommonDescriptor = 
(PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)((ULONG_PTR)CommonDescriptor + 
CommonDescriptor->bLength);
+CommonDescriptor = 
(PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)CommonDescriptor + 
CommonDescriptor->bLength);
 if ((ULONG_PTR)CommonDescriptor >= 
((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->wTotalLength))
 break;
 }
@@ -249,7 +251,7 @@
 {
 if (Descriptor->bInterfaceSubClass == 0x01) /* AUDIO_CONTROL */
 {
-InterfaceHeaderDescriptor = 
USBD_ParseDescriptors(ConfigurationDescriptor, 
ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+InterfaceHeaderDescriptor = 
(PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR)USBD_ParseDescriptors(ConfigurationDescriptor,
 ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
 if (InterfaceHeaderDescriptor != NULL)
 {
 CommonDescriptor = 
USBD_ParseDescriptors(InterfaceHeaderDescriptor, 
InterfaceHeaderDescriptor->wTotalLength, 
(PVOID)((ULONG_PTR)InterfaceHeaderDescriptor +

[ros-diffs] [janderwald] 72781: [USBAUDIO] - start implementing USBAudioPinBuildDescriptors

2016-09-23 Thread janderwald
Author: janderwald
Date: Fri Sep 23 19:53:19 2016
New Revision: 72781

URL: http://svn.reactos.org/svn/reactos?rev=72781&view=rev
Log:
[USBAUDIO]
- start implementing USBAudioPinBuildDescriptors

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/guid.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72781&r1=72780&r2=72781&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Fri Sep 23 
19:53:19 2016
@@ -9,6 +9,71 @@
 
 #include "usbaudio.h"
 
+GUID NodeTypeMicrophone = { STATIC_KSNODETYPE_MICROPHONE };
+GUID NodeTypeDesktopMicrophone = { STATIC_KSNODETYPE_DESKTOP_MICROPHONE };
+GUID NodeTypePersonalMicrophone = { STATIC_KSNODETYPE_PERSONAL_MICROPHONE };
+GUID NodeTypeOmmniMicrophone = { STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE 
};
+GUID NodeTypeArrayMicrophone = { STATIC_KSNODETYPE_MICROPHONE_ARRAY };
+GUID NodeTypeProcessingArrayMicrophone = { 
STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY };
+GUID NodeTypeSpeaker = { STATIC_KSNODETYPE_SPEAKER };
+GUID NodeTypeHeadphonesSpeaker = { STATIC_KSNODETYPE_HEADPHONES };
+GUID NodeTypeHMDA = { STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO };
+GUID NodeTypeDesktopSpeaker = { STATIC_KSNODETYPE_DESKTOP_SPEAKER };
+GUID NodeTypeRoomSpeaker = { STATIC_KSNODETYPE_ROOM_SPEAKER };
+GUID NodeTypeCommunicationSpeaker = { STATIC_KSNODETYPE_COMMUNICATION_SPEAKER 
};
+GUID NodeTypeSubwoofer = { STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER };
+GUID NodeTypeCapture = { STATIC_PINNAME_CAPTURE };
+GUID NodeTypePlayback = { STATIC_KSCATEGORY_AUDIO };
+GUID GUID_KSCATEGORY_AUDIO = { STATIC_KSCATEGORY_AUDIO };
+
+KSPIN_INTERFACE StandardPinInterface =
+{
+ {STATIC_KSINTERFACESETID_Standard},
+ KSINTERFACE_STANDARD_STREAMING,
+ 0
+};
+
+KSPIN_MEDIUM StandardPinMedium =
+{
+ {STATIC_KSMEDIUMSETID_Standard},
+ KSMEDIUM_TYPE_ANYINSTANCE,
+ 0
+};
+
+KSDATARANGE BridgePinAudioFormat[] =
+{
+{
+sizeof(KSDATAFORMAT),
+0,
+0,
+0,
+{STATIC_KSDATAFORMAT_TYPE_AUDIO},
+{STATIC_KSDATAFORMAT_SUBTYPE_ANALOG},
+{STATIC_KSDATAFORMAT_SPECIFIER_NONE}
+}
+};
+
+static PKSDATARANGE BridgePinAudioFormats[] =
+{
+&BridgePinAudioFormat[0]
+};
+
+static LPWSTR ReferenceString = L"global";
+
+NTSTATUS
+NTAPI
+USBAudioFilterCreate(
+PKSFILTER Filter,
+PIRP Irp);
+
+static KSFILTER_DISPATCH USBAudioFilterDispatch = 
+{
+USBAudioFilterCreate,
+NULL,
+NULL,
+NULL
+};
+
 NTSTATUS
 BuildUSBAudioFilterTopology(
 PKSDEVICE Device)
@@ -16,6 +81,17 @@
 UNIMPLEMENTED
 return STATUS_NOT_IMPLEMENTED;
 }
+
+NTSTATUS
+NTAPI
+USBAudioFilterCreate(
+PKSFILTER Filter,
+PIRP Irp)
+{
+UNIMPLEMENTED
+return STATUS_SUCCESS;
+}
+
 
 VOID
 CountTerminalUnits(
@@ -51,6 +127,9 @@
 }
 TotalTerminalCount++;
 }
+CommonDescriptor = 
(PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)((ULONG_PTR)CommonDescriptor + 
CommonDescriptor->bLength);
+if ((ULONG_PTR)CommonDescriptor >= 
((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->wTotalLength))
+break;
 }
 }
 }
@@ -61,8 +140,144 @@
 }
 *NonStreamingTerminalDescriptorCount = NonStreamingTerminalCount;
 *TotalTerminalDescriptorCount = TotalTerminalCount;
-
-}
+}
+
+LPGUID
+UsbAudioGetPinCategoryFromTerminalDescriptor(
+IN PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR TerminalDescriptor)
+{
+if (TerminalDescriptor->wTerminalType == 
USB_AUDIO_MICROPHONE_TERMINAL_TYPE)
+return &NodeTypeMicrophone;
+else if (TerminalDescriptor->wTerminalType == 
USB_AUDIO_DESKTOP_MICROPHONE_TERMINAL_TYPE)
+return &NodeTypeDesktopMicrophone;
+else if (TerminalDescriptor->wTerminalType == 
USB_AUDIO_PERSONAL_MICROPHONE_TERMINAL_TYPE)
+return &NodeTypePersonalMicrophone;
+else if (TerminalDescriptor->wTerminalType == 
USB_AUDIO_OMMNI_MICROPHONE_TERMINAL_TYPE)
+return &NodeTypeOmmniMicrophone;
+else if (TerminalDescriptor->wTerminalType == 
USB_AUDIO_ARRAY_MICROPHONE_TERMINAL_TYPE)
+return &NodeTypeArrayMicrophone;
+else if (TerminalDescriptor->wTerminalType == 
USB_AUDIO_ARRAY_PROCESSING_MICROPHONE_TERMINAL_TYPE)
+return &NodeTypeProcessingArrayMicrophone;
+
+/* playback types */
+if (TerminalDescriptor->wTerminalType == USB_AUDIO_SPEAKER_TERMINAL_TYPE)
+return &NodeTypeSpeaker;
+else if (TerminalDescriptor->wTerminalTy

[ros-diffs] [janderwald] 72780: [KS] - fix gcc build

2016-09-23 Thread janderwald
Author: janderwald
Date: Fri Sep 23 19:10:44 2016
New Revision: 72780

URL: http://svn.reactos.org/svn/reactos?rev=72780&view=rev
Log:
[KS]
- fix gcc build

Modified:
trunk/reactos/drivers/ksfilter/ks/filterfactory.c

Modified: trunk/reactos/drivers/ksfilter/ks/filterfactory.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/filterfactory.c?rev=72780&r1=72779&r2=72780&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/filterfactory.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/filterfactory.c   [iso-8859-1] Fri Sep 23 
19:10:44 2016
@@ -250,7 +250,7 @@
 DPRINT("out of memory");
 return STATUS_INSUFFICIENT_RESOURCES;
 }
-RtlMoveMemory(This->FilterFactory.FilterDescriptor, Descriptor, 
sizeof(KSFILTER_DESCRIPTOR));
+RtlMoveMemory((PVOID)This->FilterFactory.FilterDescriptor, 
(PVOID)Descriptor, sizeof(KSFILTER_DESCRIPTOR));
 
 /* initialize filter factory control mutex */
 This->Header.ControlMutex = &This->ControlMutex;




[ros-diffs] [janderwald] 72779: [KS] - make a copy of KSFILTER_DESCRIPTOR as it might have been allocated from the stack - always initialize object bag in filter factory

2016-09-23 Thread janderwald
Author: janderwald
Date: Fri Sep 23 18:35:15 2016
New Revision: 72779

URL: http://svn.reactos.org/svn/reactos?rev=72779&view=rev
Log:
[KS]
- make a copy of KSFILTER_DESCRIPTOR as it might have been allocated from the 
stack
- always initialize object bag in filter factory 

Modified:
trunk/reactos/drivers/ksfilter/ks/filterfactory.c

Modified: trunk/reactos/drivers/ksfilter/ks/filterfactory.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/filterfactory.c?rev=72779&r1=72778&r2=72779&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/filterfactory.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/filterfactory.c   [iso-8859-1] Fri Sep 23 
18:35:15 2016
@@ -238,11 +238,19 @@
 /* initialize filterfactory */
 This->SleepCallback = SleepCallback;
 This->WakeCallback = WakeCallback;
-This->FilterFactory.FilterDescriptor = Descriptor;
 This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
 This->Header.Type = KsObjectTypeFilterFactory;
 This->Header.Parent.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
 This->DeviceHeader = DeviceExtension->DeviceHeader;
+
+/* copy descriptor */
+This->FilterFactory.FilterDescriptor = AllocateItem(NonPagedPool, 
sizeof(KSFILTER_DESCRIPTOR));
+if (!This->FilterFactory.FilterDescriptor)
+{
+DPRINT("out of memory");
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+RtlMoveMemory(This->FilterFactory.FilterDescriptor, Descriptor, 
sizeof(KSFILTER_DESCRIPTOR));
 
 /* initialize filter factory control mutex */
 This->Header.ControlMutex = &This->ControlMutex;
@@ -313,19 +321,19 @@
 RtlFreeUnicodeString(&ReferenceString);
 }
 
+/* create a object bag for the filter factory */
+This->FilterFactory.Bag = AllocateItem(NonPagedPool, 
sizeof(KSIOBJECT_BAG));
+if (This->FilterFactory.Bag)
+{
+/* initialize object bag */
+KsDevice = 
(IKsDevice*)&DeviceExtension->DeviceHeader->BasicHeader.OuterUnknown;
+KsDevice->lpVtbl->InitializeObjectBag(KsDevice, 
(PKSIOBJECT_BAG)This->FilterFactory.Bag, NULL);
+}
+
 if (FilterFactory)
 {
 /* return filterfactory */
 *FilterFactory = &This->FilterFactory;
-
-/* create a object bag for the filter factory */
-This->FilterFactory.Bag = AllocateItem(NonPagedPool, 
sizeof(KSIOBJECT_BAG));
-if (This->FilterFactory.Bag)
-{
-/* initialize object bag */
-KsDevice = 
(IKsDevice*)&DeviceExtension->DeviceHeader->BasicHeader.OuterUnknown;
-KsDevice->lpVtbl->InitializeObjectBag(KsDevice, 
(PKSIOBJECT_BAG)This->FilterFactory.Bag, NULL);
-}
 }
 
 /* attach filterfactory to device header */




[ros-diffs] [janderwald] 72744: [USBAUDIO] - fix minor bugs - start implementing filter context

2016-09-19 Thread janderwald
Author: janderwald
Date: Mon Sep 19 18:40:44 2016
New Revision: 72744

URL: http://svn.reactos.org/svn/reactos?rev=72744&view=rev
Log:
[USBAUDIO]
- fix minor bugs
- start implementing filter context

Modified:
trunk/reactos/drivers/usb/usbaudio/filter.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.c
trunk/reactos/drivers/usb/usbaudio/usbaudio.h

Modified: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72744&r1=72743&r2=72744&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Mon Sep 19 
18:40:44 2016
@@ -15,6 +15,53 @@
 {
 UNIMPLEMENTED
 return STATUS_NOT_IMPLEMENTED;
+}
+
+VOID
+CountTerminalUnits(
+IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+OUT PULONG NonStreamingTerminalDescriptorCount,
+OUT PULONG TotalTerminalDescriptorCount)
+{
+PUSB_INTERFACE_DESCRIPTOR Descriptor;
+PUSB_AUDIO_CONTROL_INTERFACE_HEADER_DESCRIPTOR InterfaceHeaderDescriptor;
+PUSB_COMMON_DESCRIPTOR CommonDescriptor;
+PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR InputTerminalDescriptor;
+ULONG NonStreamingTerminalCount = 0;
+ULONG TotalTerminalCount = 0;
+
+for(Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
ConfigurationDescriptor, -1, -1, USB_DEVICE_CLASS_AUDIO, -1, -1);
+Descriptor != NULL;
+Descriptor = 
USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, 
(PVOID)((ULONG_PTR)Descriptor + Descriptor->bLength), -1, -1, 
USB_DEVICE_CLASS_AUDIO, -1, -1))
+{
+if (Descriptor->bInterfaceSubClass == 0x01) /* AUDIO_CONTROL */
+{
+InterfaceHeaderDescriptor = 
USBD_ParseDescriptors(ConfigurationDescriptor, 
ConfigurationDescriptor->wTotalLength, Descriptor, 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+if (InterfaceHeaderDescriptor != NULL)
+{
+CommonDescriptor = 
USBD_ParseDescriptors(InterfaceHeaderDescriptor, 
InterfaceHeaderDescriptor->wTotalLength, 
(PVOID)((ULONG_PTR)InterfaceHeaderDescriptor + 
InterfaceHeaderDescriptor->bLength), 
USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE);
+while (CommonDescriptor)
+{
+InputTerminalDescriptor = 
(PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)CommonDescriptor;
+if (InputTerminalDescriptor->bDescriptorSubtype == 0x02 /* 
INPUT TERMINAL*/ || InputTerminalDescriptor->bDescriptorSubtype == 0x03 /* 
OUTPUT_TERMINAL*/)
+{
+if (InputTerminalDescriptor->wTerminalType != 
USB_AUDIO_STREAMING_TERMINAL_TYPE)
+{
+NonStreamingTerminalCount++;
+}
+TotalTerminalCount++;
+}
+}
+}
+}
+else if (Descriptor->bInterfaceSubClass == 0x03) /* MIDI_STREAMING */
+{
+UNIMPLEMENTED
+}
+}
+*NonStreamingTerminalDescriptorCount = NonStreamingTerminalCount;
+*TotalTerminalDescriptorCount = TotalTerminalCount;
+
 }
 
 NTSTATUS
@@ -41,6 +88,7 @@
 INIT_USBAUDIO_MID(&ComponentId->Manufacturer, 
DeviceExtension->DeviceDescriptor->idVendor);
 INIT_USBAUDIO_PID(&ComponentId->Product, 
DeviceExtension->DeviceDescriptor->idProduct);
 
+UNIMPLEMENTED
 return STATUS_NOT_IMPLEMENTED;
 }
 
@@ -66,14 +114,14 @@
 if (!ComponentId)
 {
 /* no memory */
-return USBD_STATUS_INSUFFICIENT_RESOURCES;
+return STATUS_INSUFFICIENT_RESOURCES;
 }
 Status = USBAudioInitComponentId(Device, ComponentId);
 if (!NT_SUCCESS(Status))
 {
 /* failed*/
-FreeFunction(ComponentId);
-return Status;
+//FreeFunction(ComponentId);
+//return Status;
 }
 FilterDescriptor.ComponentId = ComponentId;
 

Modified: trunk/reactos/drivers/usb/usbaudio/usbaudio.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/usbaudio.c?rev=72744&r1=72743&r2=72744&view=diff
==
--- trunk/reactos/drivers/usb/usbaudio/usbaudio.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbaudio/usbaudio.c   [iso-8859-1] Mon Sep 19 
18:40:44 2016
@@ -246,7 +246,7 @@
 }
 
 /* build descriptor request */
-UsbBuildGetDescriptorRequest(Urb, sizeof(struct 
_URB_CONTROL_DESCRIPTOR_REQUEST), USB_DEVICE_DESCRIPTOR_TYPE, 0, 0, 
ConfigurationDescriptor, NULL, sizeof(USB_CONFIGURATION_DESCRIPTOR), NULL);
+UsbBuildGetDescriptorRequest(Urb, sizeof(struct 
_URB_CONTROL_DESCRIPTOR_REQUEST), USB_CONFIGURATION_DESCRIPTOR_TYPE, 0, 0, 
Configurati

[ros-diffs] [janderwald] 72725: [USBAUDIO] - start implementing init routines - not yet added to build

2016-09-18 Thread janderwald
Author: janderwald
Date: Sun Sep 18 14:24:21 2016
New Revision: 72725

URL: http://svn.reactos.org/svn/reactos?rev=72725&view=rev
Log:
[USBAUDIO]
- start implementing init routines
- not yet added to build

Added:
trunk/reactos/drivers/usb/usbaudio/   (with props)
trunk/reactos/drivers/usb/usbaudio/CMakeLists.txt   (with props)
trunk/reactos/drivers/usb/usbaudio/filter.c   (with props)
trunk/reactos/drivers/usb/usbaudio/guid.c   (with props)
trunk/reactos/drivers/usb/usbaudio/pin.c   (with props)
trunk/reactos/drivers/usb/usbaudio/pool.c   (with props)
trunk/reactos/drivers/usb/usbaudio/usbaudio.c   (with props)
trunk/reactos/drivers/usb/usbaudio/usbaudio.h   (with props)
trunk/reactos/drivers/usb/usbaudio/usbaudio.rc   (with props)

Propchange: trunk/reactos/drivers/usb/usbaudio/
--
--- bugtraq:logregex(added)
+++ bugtraq:logregexSun Sep 18 14:24:21 2016
@@ -0,0 +1 @@
+((CORE|ROSTESTS|ROSAPPS)-\d+)(,? ?((CORE|ROSTESTS|ROSAPPS)-\d+))*(,? ?(and |or 
)?((CORE|ROSTESTS|ROSAPPS)-\d+))?

Propchange: trunk/reactos/drivers/usb/usbaudio/
--
bugtraq:message = See issue %BUGID% for more details.

Propchange: trunk/reactos/drivers/usb/usbaudio/
--
bugtraq:url = https://jira.reactos.org/browse/%BUGID%

Propchange: trunk/reactos/drivers/usb/usbaudio/
--
tsvn:logminsize = 10

Added: trunk/reactos/drivers/usb/usbaudio/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/CMakeLists.txt?rev=72725
==
--- trunk/reactos/drivers/usb/usbaudio/CMakeLists.txt   (added)
+++ trunk/reactos/drivers/usb/usbaudio/CMakeLists.txt   [iso-8859-1] Sun Sep 18 
14:24:21 2016
@@ -0,0 +1,25 @@
+
+set_cpp()
+
+remove_definitions(-D_WIN32_WINNT=0x502)
+add_definitions(-D_WIN32_WINNT=0x600)
+
+list(APPEND SOURCE
+usbaudio.c
+pool.c
+filter.c
+pin.c
+guid.c)
+
+add_library(usbaudio SHARED
+${SOURCE}
+usbaudio.rc)
+
+target_link_libraries(usbaudio
+libcntpr
+${PSEH_LIB})
+
+set_module_type(usbaudio kernelmodedriver)
+add_importlibs(usbaudio ntoskrnl hal usbd ks)
+
+add_cd_file(TARGET usbaudio DESTINATION reactos/system32/drivers NO_CAB FOR 
all)

Propchange: trunk/reactos/drivers/usb/usbaudio/CMakeLists.txt
--
svn:eol-style = native

Added: trunk/reactos/drivers/usb/usbaudio/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbaudio/filter.c?rev=72725
==
--- trunk/reactos/drivers/usb/usbaudio/filter.c (added)
+++ trunk/reactos/drivers/usb/usbaudio/filter.c [iso-8859-1] Sun Sep 18 
14:24:21 2016
@@ -0,0 +1,101 @@
+/*
+* PROJECT: ReactOS Universal Audio Class Driver
+* LICENSE: GPL - See COPYING in the top level directory
+* FILE:drivers/usb/usbaudio/filter.c
+* PURPOSE: USB Audio device driver.
+* PROGRAMMERS:
+*  Johannes Anderwald (johannes.anderw...@reactos.org)
+*/
+
+#include "usbaudio.h"
+
+NTSTATUS
+BuildUSBAudioFilterTopology(
+PKSDEVICE Device)
+{
+UNIMPLEMENTED
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+USBAudioPinBuildDescriptors(
+PKSDEVICE Device,
+PKSPIN_DESCRIPTOR_EX *PinDescriptors,
+PULONG PinDescriptorsCount,
+PULONG PinDescriptorSize)
+{
+UNIMPLEMENTED
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+USBAudioInitComponentId(
+PKSDEVICE Device,
+IN PKSCOMPONENTID ComponentId)
+{
+PDEVICE_EXTENSION DeviceExtension;
+
+/* get device extension */
+DeviceExtension = Device->Context;
+
+INIT_USBAUDIO_MID(&ComponentId->Manufacturer, 
DeviceExtension->DeviceDescriptor->idVendor);
+INIT_USBAUDIO_PID(&ComponentId->Product, 
DeviceExtension->DeviceDescriptor->idProduct);
+
+return STATUS_NOT_IMPLEMENTED;
+}
+
+
+NTSTATUS
+NTAPI
+USBAudioCreateFilterContext(
+PKSDEVICE Device)
+{
+KSFILTER_DESCRIPTOR FilterDescriptor;
+PKSCOMPONENTID ComponentId;
+NTSTATUS Status;
+
+/* clear filter descriptor */
+RtlZeroMemory(&FilterDescriptor, sizeof(KSFILTER_DESCRIPTOR));
+
+/* init filter descriptor*/
+FilterDescriptor.Version = KSFILTER_DESCRIPTOR_VERSION;
+FilterDescriptor.ReferenceGuid = &KSNAME_Filter;
+
+/* init component id*/
+ComponentId = AllocFunction(sizeof(KSCOMPONENTID));
+if (!ComponentId)
+{
+/* no memory */
+return USBD_STATUS_INSUFFICIENT_RESOURCES;
+}
+Status = USBAudioInitComponentId(Device, ComponentId);
+   

[ros-diffs] [janderwald] 72724: try fix build

2016-09-18 Thread janderwald
Author: janderwald
Date: Sun Sep 18 14:11:47 2016
New Revision: 72724

URL: http://svn.reactos.org/svn/reactos?rev=72724&view=rev
Log:
try fix build

Modified:
trunk/reactos/sdk/include/psdk/ksmedia.h

Modified: trunk/reactos/sdk/include/psdk/ksmedia.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/ksmedia.h?rev=72724&r1=72723&r2=72724&view=diff
==
--- trunk/reactos/sdk/include/psdk/ksmedia.h[iso-8859-1] (original)
+++ trunk/reactos/sdk/include/psdk/ksmedia.h[iso-8859-1] Sun Sep 18 
14:11:47 2016
@@ -116,7 +116,7 @@
 
 // USB Component ID
 #define STATIC_KSCOMPONENTID_USBAUDIO \
-0x8F1275F0, 0x26E9, 0x4264, 0xBA, 0x4D, 0x39, 0xFF, 0xF0, 0x1D, 0x94, 0xAA
+0x8F1275F0, 0x26E9, 0x4264, {0xBA, 0x4D, 0x39, 0xFF, 0xF0, 0x1D, 0x94, 
0xAA}
 DEFINE_GUIDSTRUCT("8F1275F0-26E9-4264-BA4D-39FFF01D94AA", 
KSCOMPONENTID_USBAUDIO);
 #define KSCOMPONENTID_USBAUDIO DEFINE_GUIDNAMED(KSCOMPONENTID_USBAUDIO)
 




[ros-diffs] [janderwald] 72723: [PSDK] - add missing definitions

2016-09-18 Thread janderwald
Author: janderwald
Date: Sun Sep 18 14:02:22 2016
New Revision: 72723

URL: http://svn.reactos.org/svn/reactos?rev=72723&view=rev
Log:
[PSDK]
- add missing definitions

Modified:
trunk/reactos/sdk/include/psdk/ksmedia.h

Modified: trunk/reactos/sdk/include/psdk/ksmedia.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/psdk/ksmedia.h?rev=72723&r1=72722&r2=72723&view=diff
==
--- trunk/reactos/sdk/include/psdk/ksmedia.h[iso-8859-1] (original)
+++ trunk/reactos/sdk/include/psdk/ksmedia.h[iso-8859-1] Sun Sep 18 
14:02:22 2016
@@ -15,6 +15,112 @@
 */
 
 typedef LONGLONG REFERENCE_TIME;
+
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+#if !defined(INIT_USBAUDIO_MID)
+#define INIT_USBAUDIO_MID(guid, id)\
+{\
+(guid)->Data1 = 0x4e1cecd2 + (USHORT)(id);\
+(guid)->Data2 = 0x1679;\
+(guid)->Data3 = 0x463b;\
+(guid)->Data4[0] = 0xa7;\
+(guid)->Data4[1] = 0x2f;\
+(guid)->Data4[2] = 0xa5;\
+(guid)->Data4[3] = 0xbf;\
+(guid)->Data4[4] = 0x64;\
+(guid)->Data4[5] = 0xc8;\
+(guid)->Data4[6] = 0x6e;\
+(guid)->Data4[7] = 0xba;\
+}
+#define EXTRACT_USBAUDIO_MID(guid)\
+(USHORT)((guid)->Data1 - 0x4e1cecd2)
+#define DEFINE_USBAUDIO_MID_GUID(id)\
+0x4e1cecd2+(USHORT)(id), 0x1679, 0x463b, 0xa7, 0x2f, 0xa5, 0xbf, 0x64, 
0xc8, 0x6e, 0xba
+
+#define INIT_EXBUS_MANUFACTURER_ID INIT_USBAUDIO_MID
+
+#define IS_COMPATIBLE_USBAUDIO_MID(guid)\
+(((guid)->Data1 >= 0x4e1cecd2) &&\
+((guid)->Data1 < 0x4e1cecd2 + 0x) &&\
+((guid)->Data2 == 0x1679) &&\
+((guid)->Data3 == 0x463b) &&\
+((guid)->Data4[0] == 0xa7) &&\
+((guid)->Data4[1] == 0x2f) &&\
+((guid)->Data4[2] == 0xa5) &&\
+((guid)->Data4[3] == 0xbf) &&\
+((guid)->Data4[4] == 0x64) &&\
+((guid)->Data4[5] == 0xc8) &&\
+((guid)->Data4[6] == 0x6e) &&\
+((guid)->Data4[7] == 0xba))
+#endif // !defined(INIT_USBAUDIO_MID)
+
+#if !defined(INIT_USBAUDIO_PID)
+#define INIT_USBAUDIO_PID(guid, id)\
+{\
+(guid)->Data1 = 0xabcc5a5e + (USHORT)(id);\
+(guid)->Data2 = 0xc263;\
+(guid)->Data3 = 0x463b;\
+(guid)->Data4[0] = 0xa7;\
+(guid)->Data4[1] = 0x2f;\
+(guid)->Data4[2] = 0xa5;\
+(guid)->Data4[3] = 0xbf;\
+(guid)->Data4[4] = 0x64;\
+(guid)->Data4[5] = 0xc8;\
+(guid)->Data4[6] = 0x6e;\
+(guid)->Data4[7] = 0xba;\
+}
+#define EXTRACT_USBAUDIO_PID(guid)\
+(USHORT)((guid)->Data1 - 0xabcc5a5e)
+#define DEFINE_USBAUDIO_PID_GUID(id)\
+0xabcc5a5e+(USHORT)(id), 0xc263, 0x463b, 0xa7, 0x2f, 0xa5, 0xbf, 0x64, 
0xc8, 0x6e, 0xba
+
+#define INIT_EXBUS_PRODUCT_ID INIT_USBAUDIO_PID
+
+#define IS_COMPATIBLE_USBAUDIO_PID(guid)\
+(((guid)->Data1 >= 0xabcc5a5e) &&\
+((guid)->Data1 < 0xabcc5a5e + 0x) &&\
+((guid)->Data2 == 0xc263) &&\
+((guid)->Data3 == 0x463b) &&\
+((guid)->Data4[0] == 0xa7) &&\
+((guid)->Data4[1] == 0x2f) &&\
+((guid)->Data4[2] == 0xa5) &&\
+((guid)->Data4[3] == 0xbf) &&\
+((guid)->Data4[4] == 0x64) &&\
+((guid)->Data4[5] == 0xc8) &&\
+((guid)->Data4[6] == 0x6e) &&\
+((guid)->Data4[7] == 0xba))
+#endif // !defined(INIT_USBAUDIO_PID)
+
+#if !defined(INIT_USBAUDIO_PRODUCT_NAME)
+#define INIT_USBAUDIO_PRODUCT_NAME(guid, vid, pid, strIndex)\
+{\
+(guid)->Data1 = 0XFC575048 + (USHORT)(vid);\
+(guid)->Data2 = 0x2E08 + (USHORT)(pid);\
+(guid)->Data3 = 0x463B + (USHORT)(strIndex);\
+(guid)->Data4[0] = 0xA7;\
+(guid)->Data4[1] = 0x2F;\
+(guid)->Data4[2] = 0xA5;\
+(guid)->Data4[3] = 0xBF;\
+(guid)->Data4[4] = 0x64;\
+(guid)->Data4[5] = 0xC8;\
+(guid)->Data4[6] = 0x6E;\
+(guid)->Data4[7] = 0xBA;\
+}
+#define DEFINE_USBAUDIO_PRODUCT_NAME(vid, pid, strIndex)\
+0xFC575048+(USHORT)(vid), 0x2E08+(USHORT)(pid), 0x463B+(USHORT)(strIndex), 
0xA7, 0x2F, 0xA5, 0xBF, 0x64, 0xC8, 0x6E, 0xBA
+#endif
+
+#define INIT_EXBUS_PRODUCT_NAME INIT_USBAUDIO_PRODUCT_NAME
+
+// USB Component ID
+#define STATIC_KSCOMPONENTID_USBAUDIO \
+0x8F1275F0, 0x26E9, 0x4264, 0xBA, 0x4D, 0x39, 0xFF, 0xF0, 0x1D, 0x94, 0xAA
+DEFINE_GUIDSTRUCT("8F1275F0-26E9-4264-BA4D-39FFF01D94AA", 
KSCOMPONENTID_USBAUDIO);
+#define KSCOMPONENTID_USBAUDIO DEFINE_GUIDNAMED(KSCOMPONENTID_USBAUDIO)
+
+#endif // (NTDDI_VERSION >= NTDDI_WINXP)
 
 #define EXTRACT_WAVEFORMATEX_ID(Guid)\
 (USHORT)((Guid)->Data1)




[ros-diffs] [janderwald] 68332: [DDK] - add missing PcUnregisterAdapterPowerManagement

2015-07-02 Thread janderwald
Author: janderwald
Date: Thu Jul  2 15:40:49 2015
New Revision: 68332

URL: http://svn.reactos.org/svn/reactos?rev=68332&view=rev
Log:
[DDK]
- add missing PcUnregisterAdapterPowerManagement

Modified:
trunk/reactos/include/ddk/portcls.h

Modified: trunk/reactos/include/ddk/portcls.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/portcls.h?rev=68332&r1=68331&r2=68332&view=diff
==
--- trunk/reactos/include/ddk/portcls.h [iso-8859-1] (original)
+++ trunk/reactos/include/ddk/portcls.h [iso-8859-1] Thu Jul  2 15:40:49 2015
@@ -2348,6 +2348,10 @@
   IN PVOID pvContext1);
 
 PORTCLASSAPI NTSTATUS NTAPI
+PcUnregisterAdapterPowerManagement(
+  IN PDEVICE_OBJECT DeviceObject);
+
+PORTCLASSAPI NTSTATUS NTAPI
 PcRequestNewPowerState(
   IN PDEVICE_OBJECT pDeviceObject,
   IN DEVICE_POWER_STATE RequestedNewState);




[ros-diffs] [janderwald] 68331: [PORTCLS] - implement & export PcUnregisterAdapterPowerManagement

2015-07-02 Thread janderwald
Author: janderwald
Date: Thu Jul  2 15:35:19 2015
New Revision: 68331

URL: http://svn.reactos.org/svn/reactos?rev=68331&view=rev
Log:
[PORTCLS]
- implement & export PcUnregisterAdapterPowerManagement

Modified:
trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.spec
trunk/reactos/drivers/wdm/audio/backpln/portcls/power.cpp

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.spec
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.spec?rev=68331&r1=68330&r2=68331&view=diff
==
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.spec
[iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.spec
[iso-8859-1] Thu Jul  2 15:35:19 2015
@@ -41,6 +41,7 @@
 ; Power Management
 @ stdcall PcRegisterAdapterPowerManagement(ptr ptr)
 @ stdcall PcRequestNewPowerState(ptr long)
+@ stdcall PcUnregisterAdapterPowerManagement(ptr)
 
 ; Properties
 @ stdcall PcCompletePendingPropertyRequest(ptr long)

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/power.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/power.cpp?rev=68331&r1=68330&r2=68331&view=diff
==
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/power.cpp   [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/power.cpp   [iso-8859-1] 
Thu Jul  2 15:35:19 2015
@@ -48,6 +48,30 @@
 return STATUS_SUCCESS;
 }
 
+NTSTATUS
+NTAPI
+PcUnregisterAdapterPowerManagement(
+IN PDEVICE_OBJECT DeviceObject)
+{
+PPCLASS_DEVICE_EXTENSION DeviceExt;
+
+DPRINT("PcUnregisterAdapterPowerManagement pUnknown %p pvContext %p\n", 
DeviceObject);
+PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
+
+if (!DeviceObject)
+return STATUS_INVALID_PARAMETER;
+
+DeviceExt = (PPCLASS_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+if (DeviceExt->AdapterPowerManagement)
+{
+DeviceExt->AdapterPowerManagement->Release();
+}
+DeviceExt->AdapterPowerManagement = NULL;
+return STATUS_SUCCESS;
+}
+
+
 
 static
 VOID




[ros-diffs] [janderwald] 68330: [HDAUDBUS] - partly implement HDA_TransferCodecVerbs - stubplement HDAUDIO_BUS_INTERFACE_V2 - silence traces

2015-07-02 Thread janderwald
Author: janderwald
Date: Thu Jul  2 11:07:39 2015
New Revision: 68330

URL: http://svn.reactos.org/svn/reactos?rev=68330&view=rev
Log:
[HDAUDBUS]
- partly implement HDA_TransferCodecVerbs
- stubplement HDAUDIO_BUS_INTERFACE_V2
- silence traces

Modified:
trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp
trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.h

Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp?rev=68330&r1=68329&r2=68330&view=diff
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp   [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp   [iso-8859-1] 
Thu Jul  2 11:07:39 2015
@@ -27,15 +27,37 @@
 NTSTATUS
 NTAPI
 HDA_TransferCodecVerbs(
-IN PVOID _context,
-IN ULONG Count,
-IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer,
-IN PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback,
-IN PVOID Context)
-{
-UNIMPLEMENTED;
-ASSERT(FALSE);
-return STATUS_NOT_IMPLEMENTED;
+IN PVOID _context,
+IN ULONG Count,
+IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer,
+IN PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback,
+IN PVOID Context)
+{
+ULONG Verbs[MAX_CODEC_RESPONSES], Responses[MAX_CODEC_RESPONSES];
+ULONG Index;
+PHDA_PDO_DEVICE_EXTENSION DeviceExtension;
+
+DPRINT1("HDA_TransferCodecVerbs Coun %lu CodecTransfer %p Callback %p 
Context %p\n", Count, CodecTransfer, Callback, Context);
+
+/* get device extension */
+DeviceExtension = (PHDA_PDO_DEVICE_EXTENSION)_context;
+ASSERT(DeviceExtension->IsFDO == FALSE);
+
+/* FIXME handle callback*/
+ASSERT(Callback == NULL);
+
+for (Index = 0; Index < Count; Index++)
+{
+Verbs[Index] = CodecTransfer[Index].Output.Command;
+}
+
+HDA_SendVerbs(DeviceExtension->FDO, DeviceExtension->Codec, Verbs, 
Responses, Count);
+
+for (Index = 0; Index < DeviceExtension->Codec->ResponseCount; Index++)
+{
+CodecTransfer[Index].Input.Response = 
DeviceExtension->Codec->Responses[Index];
+}
+return STATUS_SUCCESS;
 }
 
 NTSTATUS
@@ -216,12 +238,70 @@
 }
 
 NTSTATUS
+NTAPI
+HDA_AllocateDmaBufferWithNotification(
+IN PVOID _context,
+   IN HANDLE Handle,
+   IN ULONG NotificationCount,
+   IN SIZE_T RequestedBufferSize,
+   OUT PMDL *BufferMdl,
+   OUT PSIZE_T AllocatedBufferSize,
+   OUT PSIZE_T OffsetFromFirstPage,
+   OUT PUCHAR StreamId,
+   OUT PULONG FifoSize)
+{
+   UNIMPLEMENTED;
+   ASSERT(FALSE);
+   return STATUS_NOT_IMPLEMENTED;
+
+}
+NTSTATUS
+NTAPI
+HDA_FreeDmaBufferWithNotification(
+IN PVOID _context,
+   IN HANDLE Handle,
+   IN PMDL BufferMdl,
+   IN SIZE_T BufferSize)
+{
+   UNIMPLEMENTED;
+   ASSERT(FALSE);
+   return STATUS_NOT_IMPLEMENTED;
+
+}
+
+NTSTATUS
+NTAPI
+HDA_RegisterNotificationEvent(
+PVOID _context,
+HANDLE Handle,
+IN PKEVENT NotificationEvent)
+{
+   UNIMPLEMENTED;
+   ASSERT(FALSE);
+   return STATUS_NOT_IMPLEMENTED;
+
+}
+
+NTSTATUS
+NTAPI
+HDA_UnregisterNotificationEvent(
+IN PVOID _context,
+IN HANDLE Handle,
+IN PKEVENT NotificationEvent)
+{
+   UNIMPLEMENTED;
+   ASSERT(FALSE);
+   return STATUS_NOT_IMPLEMENTED;
+}
+
+
+NTSTATUS
 HDA_PDOHandleQueryInterface(
 IN PDEVICE_OBJECT DeviceObject,
 IN PIRP Irp)
 {
 PIO_STACK_LOCATION IoStack;
-PHDAUDIO_BUS_INTERFACE InterfaceHDA;
+PHDAUDIO_BUS_INTERFACE_V2 InterfaceHDA;
 PHDA_PDO_DEVICE_EXTENSION DeviceExtension;
 
 /* get device extension */
@@ -232,10 +312,12 @@
 
 if (IsEqualGUIDAligned(*IoStack->Parameters.QueryInterface.InterfaceType, 
GUID_HDAUDIO_BUS_INTERFACE))
 {
-InterfaceHDA = 
(PHDAUDIO_BUS_INTERFACE)IoStack->Parameters.QueryInterface.Interface;
+InterfaceHDA = 
(PHDAUDIO_BUS_INTERFACE_V2)IoStack->Parameters.QueryInterface.Interface;
 InterfaceHDA->Version = IoStack->Parameters.QueryInterface.Version;
-InterfaceHDA->Size = IoStack->Parameters.QueryInterface.Size;
+InterfaceHDA->Size = sizeof(HDAUDIO_BUS_INTERFACE);
 InterfaceHDA->Context = DeviceExtension;
+InterfaceHDA->InterfaceReference = HDA_InterfaceReference;
+InterfaceHDA->InterfaceDereference = HDA_InterfaceDereference;
 
 InterfaceHDA->TransferCodecVerbs = HDA_TransferCodecVerbs;
 InterfaceHDA->AllocateCaptureDmaEngine = HDA_AllocateCaptureDmaEngine;
@@ -251,11 +333,40 @@
 InterfaceHDA->UnregisterEventCallback = HDA_UnregisterEventCallback;
 InterfaceHDA->GetDeviceInformation = HDA_GetDeviceInformation;
 I

[ros-diffs] [janderwald] 68328: [PORTCLS] - check if there are enough irp stack locations

2015-07-01 Thread janderwald
Author: janderwald
Date: Wed Jul  1 07:39:35 2015
New Revision: 68328

URL: http://svn.reactos.org/svn/reactos?rev=68328&view=rev
Log:
[PORTCLS]
- check if there are enough irp stack locations

Modified:
trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.cpp

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.cpp?rev=68328&r1=68327&r2=68328&view=diff
==
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.cpp [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.cpp [iso-8859-1] 
Wed Jul  1 07:39:35 2015
@@ -548,7 +548,11 @@
 // initialize the notification event
 KeInitializeEvent(&Event, NotificationEvent, FALSE);
 
-IoCopyCurrentIrpStackLocationToNext(Irp);
+// are there enough irp stack locations
+if (Irp->CurrentLocation < Irp->StackCount + 1)
+{
+IoCopyCurrentIrpStackLocationToNext(Irp);
+}
 
 IoSetCompletionRoutine(Irp, CompletionRoutine, (PVOID)&Event, TRUE, TRUE, 
TRUE);
 




[ros-diffs] [janderwald] 68325: [HDAUDBUS] - fix small bug

2015-06-30 Thread janderwald
Author: janderwald
Date: Tue Jun 30 19:06:36 2015
New Revision: 68325

URL: http://svn.reactos.org/svn/reactos?rev=68325&view=rev
Log:
[HDAUDBUS]
- fix small bug

Modified:
trunk/reactos/drivers/wdm/audio/hdaudbus/pdo.cpp

Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/pdo.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/pdo.cpp?rev=68325&r1=68324&r2=68325&view=diff
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/pdo.cpp[iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/pdo.cpp[iso-8859-1] Tue Jun 30 
19:06:36 2015
@@ -100,7 +100,7 @@
 Length = swprintf(DeviceName, 
L"HDAUDIO\\FUNC_%02X&VEN_%04X&DEV_%04X&REV_%04X", 
DeviceExtension->AudioGroup->FunctionGroup, DeviceExtension->Codec->VendorId, 
DeviceExtension->Codec->ProductId, DeviceExtension->Codec->Major << 12 | 
DeviceExtension->Codec->Minor << 8 | DeviceExtension->Codec->Revision) + 1;
 Length += swprintf(&DeviceName[Length], 
L"HDAUDIO\\FUNC_%02X&VEN_%04X&DEV_%04X", 
DeviceExtension->AudioGroup->FunctionGroup, DeviceExtension->Codec->VendorId, 
DeviceExtension->Codec->ProductId) + 1;
 Length += swprintf(&DeviceName[Length], 
L"HDAUDIO\\FUNC_%02X&VEN_%04X", DeviceExtension->AudioGroup->FunctionGroup, 
DeviceExtension->Codec->VendorId) + 1;
-Length += swprintf(&DeviceName[Length], 
L"HDAUDIO\\FUNC_%02X&VEN_%04X", DeviceExtension->AudioGroup->FunctionGroup) + 2;
+Length += swprintf(&DeviceName[Length], L"HDAUDIO\\FUNC_%02X", 
DeviceExtension->AudioGroup->FunctionGroup) + 2;
 
 /* allocate result buffer*/
 Device = (LPWSTR)AllocateItem(PagedPool, Length * sizeof(WCHAR));




[ros-diffs] [janderwald] 68321: [HDAUDBUS] - interface stub

2015-06-30 Thread janderwald
Author: janderwald
Date: Tue Jun 30 12:37:39 2015
New Revision: 68321

URL: http://svn.reactos.org/svn/reactos?rev=68321&view=rev
Log:
[HDAUDBUS]
- interface stub

Modified:
trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp

Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp?rev=68321&r1=68320&r2=68321&view=diff
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp   [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp   [iso-8859-1] 
Tue Jun 30 12:37:39 2015
@@ -7,17 +7,255 @@
 */
 #include "hdaudbus.h"
 
+
+VOID
+NTAPI
+HDA_InterfaceReference(
+PVOID BusContext)
+{
+DPRINT1("HDA_InterfaceReference\n");
+}
+
+VOID
+NTAPI
+HDA_InterfaceDereference(
+PVOID BusContext)
+{
+DPRINT1("HDA_InterfaceDereference\n");
+}
+
+NTSTATUS
+NTAPI
+HDA_TransferCodecVerbs(
+IN PVOID _context,
+IN ULONG Count,
+IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer,
+IN PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback,
+IN PVOID Context)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI 
+HDA_AllocateCaptureDmaEngine(
+IN PVOID _context,
+IN UCHAR CodecAddress,
+IN PHDAUDIO_STREAM_FORMAT StreamFormat,
+OUT PHANDLE Handle,
+OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_AllocateRenderDmaEngine(
+IN PVOID _context,
+IN PHDAUDIO_STREAM_FORMAT StreamFormat,
+IN BOOLEAN Stripe,
+OUT PHANDLE Handle,
+OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_ChangeBandwidthAllocation(
+IN PVOID _context,
+IN HANDLE Handle,
+IN PHDAUDIO_STREAM_FORMAT StreamFormat,
+OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_AllocateDmaBuffer(
+IN PVOID _context,
+IN HANDLE Handle,
+IN SIZE_T RequestedBufferSize,
+OUT PMDL *BufferMdl,
+OUT PSIZE_T AllocatedBufferSize,
+OUT PUCHAR StreamId,
+OUT PULONG FifoSize)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_FreeDmaBuffer(
+IN PVOID _context,
+IN HANDLE Handle)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_FreeDmaEngine(
+IN PVOID _context,
+IN HANDLE Handle)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_SetDmaEngineState(
+IN PVOID _context,
+IN HDAUDIO_STREAM_STATE StreamState,
+IN ULONG NumberOfHandles,
+IN PHANDLE Handles)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+VOID
+NTAPI
+HDA_GetWallClockRegister(
+IN PVOID _context,
+OUT PULONG *Wallclock)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+}
+
+NTSTATUS
+NTAPI
+HDA_GetLinkPositionRegister(
+IN PVOID _context,
+IN HANDLE Handle,
+OUT PULONG *Position)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_RegisterEventCallback(
+IN PVOID _context,
+IN PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK Routine,
+IN PVOID Context,
+OUT PUCHAR Tag)
+{
+UNIMPLEMENTED;
+   *Tag = 1;
+return STATUS_SUCCESS;
+}
+
+
+NTSTATUS
+NTAPI
+HDA_UnregisterEventCallback(
+IN PVOID _context,
+IN UCHAR Tag)
+{
+UNIMPLEMENTED;
+ASSERT(FALSE);
+return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+HDA_GetDeviceInformation(
+IN PVOID _context,
+OUT PHDAUDIO_DEVICE_INFORMATION DeviceInformation)
+{
+PHDA_PDO_DEVICE_EXTENSION DeviceExtension;
+
+DeviceExtension = (PHDA_PDO_DEVICE_EXTENSION)_context;
+
+DPRINT1("HDA_GetDeviceInformation\n");
+
+DeviceInformation->Size = sizeof(HDAUDIO_DEVICE_INFORMATION);
+DeviceInformation->CodecsDetected = 1;  // FIXME
+DeviceInformation->DeviceVersion = DeviceExtension->Codec->Major << 8 | 
DeviceExtension->Codec->Minor;
+DeviceInformation->DriverVersion = DeviceExtension->Codec->Major << 8 | 
DeviceExtension->Codec->Minor;
+DeviceInformation->IsStripingSupported = FALSE;
+
+return STATUS_SUCCESS;
+}
+
+VOID
+NTAPI
+HDA_GetResourceInformation(
+IN PVOID _context,
+OUT PUCHAR CodecAddress,
+OUT PUCHAR FunctionGroupStartNode)
+{
+PHDA_PDO_DEVICE_EXTENSION DeviceExtension;
+
+DeviceExtension = (PHDA_PDO_DEVICE_EXTENSION)_context;
+
+DPRINT1("HDA_GetResourceInformation Addr %x NodeId %x\n", 
DeviceExtension->Codec->Ad

[ros-diffs] [janderwald] 68320: [HDAUDBUS] - move code - set FILE_AUTOGENERATED_DEVICE_NAME for pdos. Hint by ThFabba - driver now gets further

2015-06-30 Thread janderwald
Author: janderwald
Date: Tue Jun 30 11:36:52 2015
New Revision: 68320

URL: http://svn.reactos.org/svn/reactos?rev=68320&view=rev
Log:
[HDAUDBUS]
- move code
- set FILE_AUTOGENERATED_DEVICE_NAME for pdos. Hint by ThFabba
- driver now gets further

Added:
trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp   (with props)
trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp   (with props)
trunk/reactos/drivers/wdm/audio/hdaudbus/pdo.cpp   (with props)
Modified:
trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.h

Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt?rev=68320&r1=68319&r2=68320&view=diff
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt [iso-8859-1] 
Tue Jun 30 11:36:52 2015
@@ -5,7 +5,10 @@
 add_definitions(-D_WIN32_WINNT=0x600)
 
 list(APPEND SOURCE
-hdaudbus.cpp)
+hdaudbus.cpp
+fdo.cpp
+pdo.cpp
+businterface.cpp)
 
 add_library(hdaudbus SHARED ${SOURCE})
 set_module_type(hdaudbus kernelmodedriver)

Added: trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp?rev=68320
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp   (added)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp   [iso-8859-1] 
Tue Jun 30 11:36:52 2015
@@ -0,0 +1,23 @@
+/*
+* COPYRIGHT:   See COPYING in the top level directory
+* PROJECT: ReactOS Kernel Streaming
+* FILE:drivers/wdm/audio/hdaudbus/hdaudbus.cpp
+* PURPOSE: HDA Driver Entry
+* PROGRAMMER:  Johannes Anderwald
+*/
+#include "hdaudbus.h"
+
+NTSTATUS
+HDA_PDOHandleQueryInterface(
+IN PDEVICE_OBJECT DeviceObject,
+IN PIRP Irp)
+{
+PIO_STACK_LOCATION IoStack;
+UNICODE_STRING GuidString;
+
+IoStack = IoGetCurrentIrpStackLocation(Irp);
+RtlStringFromGUID(*IoStack->Parameters.QueryInterface.InterfaceType, 
&GuidString);
+
+DPRINT1("hda: requesting interface %wZ Version %u Size %u", &GuidString, 
IoStack->Parameters.QueryInterface.Version, 
IoStack->Parameters.QueryInterface.Size);
+return STATUS_NOT_IMPLEMENTED;
+}

Propchange: trunk/reactos/drivers/wdm/audio/hdaudbus/businterface.cpp
--
svn:eol-style = native

Added: trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp?rev=68320
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp(added)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/fdo.cpp[iso-8859-1] Tue Jun 30 
11:36:52 2015
@@ -0,0 +1,688 @@
+/*
+* COPYRIGHT:   See COPYING in the top level directory
+* PROJECT: ReactOS Kernel Streaming
+* FILE:drivers/wdm/audio/hdaudbus/fdo.cpp
+* PURPOSE: HDA Driver Entry
+* PROGRAMMER:  Johannes Anderwald
+*/
+#include "hdaudbus.h"
+
+BOOLEAN
+NTAPI
+HDA_InterruptService(
+IN PKINTERRUPT  Interrupt,
+IN PVOID  ServiceContext)
+{
+PHDA_FDO_DEVICE_EXTENSION DeviceExtension;
+ULONG InterruptStatus, Response, ResponseFlags, Cad;
+UCHAR RirbStatus, CorbStatus;
+USHORT WritePos;
+PHDA_CODEC_ENTRY Codec;
+
+/* get device extension */
+DeviceExtension = (PHDA_FDO_DEVICE_EXTENSION)ServiceContext;
+ASSERT(DeviceExtension->IsFDO == TRUE);
+
+// Check if this interrupt is ours
+InterruptStatus = READ_REGISTER_ULONG((PULONG)(DeviceExtension->RegBase + 
HDAC_INTR_STATUS));
+
+DPRINT1("HDA_InterruptService %lx\n", InterruptStatus);
+if ((InterruptStatus & INTR_STATUS_GLOBAL) == 0)
+return FALSE;
+
+// Controller or stream related?
+if (InterruptStatus & INTR_STATUS_CONTROLLER) {
+RirbStatus = READ_REGISTER_UCHAR(DeviceExtension->RegBase + 
HDAC_RIRB_STATUS);
+CorbStatus = READ_REGISTER_UCHAR(DeviceExtension->RegBase + 
HDAC_CORB_STATUS);
+
+// Check for incoming responses
+if (RirbStatus) {
+WRITE_REGISTER_UCHAR(DeviceExtension->RegBase + HDAC_RIRB_STATUS, 
RirbStatus);
+
+if (DeviceExtension->RirbLength == 0)
+{
+/* HACK: spurious interrupt */
+return FALSE;
+}
+
+if ((RirbStatus & RIRB_STATUS_RESPONSE) != 0) {
+WritePos = 
(READ_REGISTE

[ros-diffs] [janderwald] 68317: [HDAUDBUS] - forward start device irp to lower device. Hint by ThFabba - implement BusQueryCompatibleIDs

2015-06-30 Thread janderwald
Author: janderwald
Date: Tue Jun 30 10:16:41 2015
New Revision: 68317

URL: http://svn.reactos.org/svn/reactos?rev=68317&view=rev
Log:
[HDAUDBUS]
- forward start device irp to lower device. Hint by ThFabba
- implement BusQueryCompatibleIDs

Modified:
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp

Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp?rev=68317&r1=68316&r2=68317&view=diff
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp   [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp   [iso-8859-1] 
Tue Jun 30 10:16:41 2015
@@ -30,6 +30,61 @@
 ExFreePool(Item);
 }
 
+NTSTATUS
+NTAPI
+HDA_SyncForwardIrpCompletionRoutine(
+IN PDEVICE_OBJECT DeviceObject,
+IN PIRP Irp,
+IN PVOID Context)
+{
+if (Irp->PendingReturned)
+{
+KeSetEvent((PKEVENT)Context, IO_NO_INCREMENT, FALSE);
+}
+return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+NTSTATUS
+NTAPI
+HDA_SyncForwardIrp(
+IN PDEVICE_OBJECT DeviceObject,
+IN PIRP Irp)
+{
+KEVENT Event;
+NTSTATUS Status;
+
+/* Initialize event */
+KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+/* Copy irp stack location */
+IoCopyCurrentIrpStackLocationToNext(Irp);
+
+/* Set completion routine */
+IoSetCompletionRoutine(Irp,
+HDA_SyncForwardIrpCompletionRoutine,
+&Event,
+TRUE,
+TRUE,
+TRUE);
+
+/* Call driver */
+Status = IoCallDriver(DeviceObject, Irp);
+
+/* Check if pending */
+if (Status == STATUS_PENDING)
+{
+/* Wait for the request to finish */
+KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
+
+/* Copy status code */
+Status = Irp->IoStatus.Status;
+}
+
+/* Done */
+return Status;
+}
+
+
 BOOLEAN
 NTAPI
 HDA_InterruptService(
@@ -60,6 +115,12 @@
 // Check for incoming responses
 if (RirbStatus) {
 WRITE_REGISTER_UCHAR(DeviceExtension->RegBase + HDAC_RIRB_STATUS, 
RirbStatus);
+
+if (DeviceExtension->RirbLength == 0)
+{
+/* HACK: spurious interrupt */
+return FALSE;
+}
 
 if ((RirbStatus & RIRB_STATUS_RESPONSE) != 0) {
 WritePos = 
(READ_REGISTER_USHORT((PUSHORT)(DeviceExtension->RegBase + 
HDAC_RIRB_WRITE_POS)) + 1) % DeviceExtension->RirbLength;
@@ -337,12 +398,14 @@
 /* init corb */
 HighestPhysicalAddress.QuadPart = 0x;
 DeviceExtension->CorbBase = (PULONG)MmAllocateContiguousMemory(PAGE_SIZE * 
3, HighestPhysicalAddress);
+ASSERT(DeviceExtension->CorbBase != NULL);
 
 // FIXME align rirb 128bytes
 ASSERT(DeviceExtension->CorbLength == 256);
 ASSERT(DeviceExtension->RirbLength == 256);
 
 CorbPhysicalAddress = MmGetPhysicalAddress(DeviceExtension->CorbBase);
+ASSERT(CorbPhysicalAddress.QuadPart != 0LL);
 
 // Program CORB/RIRB for these locations
 WRITE_REGISTER_ULONG((PULONG)(DeviceExtension->RegBase + 
HDAC_CORB_BASE_LOWER), CorbPhysicalAddress.LowPart);
@@ -585,7 +648,27 @@
 if (!Device)
 return STATUS_INSUFFICIENT_RESOURCES;
 
-swprintf(Device, L"HDAUDIO\\FUNC_%02X&VEN_%04X&DEV_%04X&SUBSYS_%08X", 
DeviceExtension->AudioGroup->FunctionGroup, DeviceExtension->Codec->VendorId, 
DeviceExtension->Codec->ProductId, DeviceExtension->Codec->VendorId << 16 | 
DeviceExtension->Codec->ProductId);
+wcscpy(Device, DeviceName);
+
+DPRINT1("ID: %S\n", Device);
+/* store result */
+Irp->IoStatus.Information = (ULONG_PTR)Device;
+return STATUS_SUCCESS;
+}
+else if (IoStack->Parameters.QueryId.IdType == BusQueryCompatibleIDs)
+{
+RtlZeroMemory(DeviceName, sizeof(DeviceName));
+Length = swprintf(DeviceName, 
L"HDAUDIO\\FUNC_%02X&VEN_%04X&DEV_%04X&REV_%04X", 
DeviceExtension->AudioGroup->FunctionGroup, DeviceExtension->Codec->VendorId, 
DeviceExtension->Codec->ProductId, DeviceExtension->Codec->Major << 12 | 
DeviceExtension->Codec->Minor << 8 | DeviceExtension->Codec->Revision) + 1;
+Length += swprintf(&DeviceName[Length], 
L"HDAUDIO\\FUNC_%02X&VEN_%04X&DEV_%04X", 
DeviceExtension->AudioGroup->FunctionGroup, DeviceExtension->Codec->VendorId, 
DeviceExtension->Codec->ProductId) + 1;
+Length += swprintf(&DeviceName[Length], 
L"HDAUDIO\\FUNC_%02X&VEN_%04X", DeviceExtension->AudioGroup->FunctionGroup, 
DeviceExtension->Codec->VendorId) + 1;
+Len

[ros-diffs] [janderwald] 68312: [HDAUDBUS] - add driver inf - fix build for gcc builds

2015-06-29 Thread janderwald
Author: janderwald
Date: Mon Jun 29 17:10:04 2015
New Revision: 68312

URL: http://svn.reactos.org/svn/reactos?rev=68312&view=rev
Log:
[HDAUDBUS]
- add driver inf
- fix build for gcc builds

Added:
trunk/reactos/media/inf/hdaudbus.inf   (with props)
Modified:
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp
trunk/reactos/media/inf/CMakeLists.txt

Modified: trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp?rev=68312&r1=68311&r2=68312&view=diff
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp   [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp   [iso-8859-1] 
Mon Jun 29 17:10:04 2015
@@ -877,10 +877,10 @@
 PIO_STACK_LOCATION IoStack;
 PDEVICE_RELATIONS DeviceRelation;
 PHDA_FDO_DEVICE_EXTENSION FDODeviceExtension;
-PHDA_PDO_DEVICE_EXTENSION ChildDeviceExtension;
+//PHDA_PDO_DEVICE_EXTENSION ChildDeviceExtension;
 
 FDODeviceExtension = 
(PHDA_FDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-ChildDeviceExtension = 
(PHDA_PDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+//ChildDeviceExtension = 
(PHDA_PDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
 
 IoStack = IoGetCurrentIrpStackLocation(Irp);
 DPRINT1("HDA_Pnp Minor: %u IsFDO%d\n", IoStack->MinorFunction, 
FDODeviceExtension->IsFDO);

Modified: trunk/reactos/media/inf/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/CMakeLists.txt?rev=68312&r1=68311&r2=68312&view=diff
==
--- trunk/reactos/media/inf/CMakeLists.txt  [iso-8859-1] (original)
+++ trunk/reactos/media/inf/CMakeLists.txt  [iso-8859-1] Mon Jun 29 
17:10:04 2015
@@ -13,6 +13,7 @@
 fdc.inf
 flpydisk.inf
 hal.inf
+hdaudbus.inf
 hdc.inf
 input.inf
 keyboard.inf

Added: trunk/reactos/media/inf/hdaudbus.inf
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/hdaudbus.inf?rev=68312
==
Binary file - no diff available.

Propchange: trunk/reactos/media/inf/hdaudbus.inf
--
svn:mime-type = application/octet-stream




[ros-diffs] [janderwald] 68311: [HDAUDBUS] - start implementing HDAUDIO Bus driver - based heavily on Haiku exellent driver

2015-06-29 Thread janderwald
Author: janderwald
Date: Mon Jun 29 17:03:33 2015
New Revision: 68311

URL: http://svn.reactos.org/svn/reactos?rev=68311&view=rev
Log:
[HDAUDBUS]
- start implementing HDAUDIO Bus driver 
- based heavily on Haiku exellent driver 

Added:
trunk/reactos/drivers/wdm/audio/hdaudbus/
trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt   (with props)
trunk/reactos/drivers/wdm/audio/hdaudbus/driver.h   (with props)
trunk/reactos/drivers/wdm/audio/hdaudbus/hda_codec_defs.h   (with props)
trunk/reactos/drivers/wdm/audio/hdaudbus/hda_controller_defs.h   (with 
props)
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.cpp   (with props)
trunk/reactos/drivers/wdm/audio/hdaudbus/hdaudbus.h   (with props)
Modified:
trunk/reactos/drivers/wdm/audio/CMakeLists.txt

Modified: trunk/reactos/drivers/wdm/audio/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/CMakeLists.txt?rev=68311&r1=68310&r2=68311&view=diff
==
--- trunk/reactos/drivers/wdm/audio/CMakeLists.txt  [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/CMakeLists.txt  [iso-8859-1] Mon Jun 29 
17:03:33 2015
@@ -3,5 +3,6 @@
 add_subdirectory(drivers)
 add_subdirectory(drm)
 add_subdirectory(filters)
+add_subdirectory(hdaudbus)
 add_subdirectory(legacy)
 add_subdirectory(sysaudio)

Added: trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt?rev=68311
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt (added)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt [iso-8859-1] 
Mon Jun 29 17:03:33 2015
@@ -0,0 +1,14 @@
+
+set_cpp()
+
+remove_definitions(-D_WIN32_WINNT=0x502)
+add_definitions(-D_WIN32_WINNT=0x600)
+
+list(APPEND SOURCE
+hdaudbus.cpp)
+
+add_library(hdaudbus SHARED ${SOURCE})
+set_module_type(hdaudbus kernelmodedriver)
+target_link_libraries(hdaudbus libcntpr ${PSEH_LIB})
+add_importlibs(hdaudbus ntoskrnl hal)
+add_cd_file(TARGET hdaudbus DESTINATION reactos/system32/drivers FOR all)

Propchange: trunk/reactos/drivers/wdm/audio/hdaudbus/CMakeLists.txt
--
svn:eol-style = native

Added: trunk/reactos/drivers/wdm/audio/hdaudbus/driver.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/hdaudbus/driver.h?rev=68311
==
--- trunk/reactos/drivers/wdm/audio/hdaudbus/driver.h   (added)
+++ trunk/reactos/drivers/wdm/audio/hdaudbus/driver.h   [iso-8859-1] Mon Jun 29 
17:03:33 2015
@@ -0,0 +1,402 @@
+/*
+ * Copyright 2007-2012, Haiku, Inc. All Rights Reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * Authors:
+ * Ithamar Adema, ithamar AT unet DOT nl
+ * Axel Dörfler, ax...@pinc-software.de
+ */
+#ifndef _HDA_H_
+#define _HDA_H_
+
+#ifndef __REACTOS__
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#ifndef HAIKU_TARGET_PLATFORM_HAIKU
+#  define DEVFS_PATH_FORMAT"audio/multi/hda/%lu"
+#  include 
+#else
+#  define DEVFS_PATH_FORMAT"audio/hmulti/hda/%lu"
+#  include 
+#endif
+#endif
+
+#include "hda_controller_defs.h"
+#include "hda_codec_defs.h"
+
+#define MAX_CARDS  4
+
+/* values for the class_sub field for class_base = 0x04 (multimedia device) */
+#ifndef __HAIKU__
+#  define PCI_hd_audio 3
+#endif
+
+#define HDA_MAX_AUDIO_GROUPS   15
+#define HDA_MAX_CODECS 15
+#define HDA_MAX_STREAMS16
+#define MAX_CODEC_RESPONSES16
+#define MAX_CODEC_UNSOL_RESPONSES 16
+#define MAX_INPUTS 32
+#define MAX_IO_WIDGETS 8
+#define MAX_ASSOCIATIONS   16
+#define MAX_ASSOCIATION_PINS   16
+
+#define STREAM_MAX_BUFFERS 10
+#define STREAM_MIN_BUFFERS 2
+
+
+enum {
+   STREAM_PLAYBACK,
+   STREAM_RECORD
+};
+
+struct hda_codec;
+struct hda_stream;
+struct hda_multi;
+
+/*!This structure describes a single HDA compliant
+   controller. It contains a list of available streams
+   for use by the codecs contained, and the messaging queue
+   (verb/response) buffers for communication.
+*/
+#ifndef __REACTOS__
+struct hda_controller {
+   struct pci_info pci_info;
+   int32   opened;
+   const char* devfs_path;
+
+   area_id regs_area;
+   vuint8* regs;
+   uint32  irq;
+   boolmsi;
+   booldma_snooping;
+
+   uint16  codec_status;
+   u

[ros-diffs] [janderwald] 68276: [DDK] - add hdaudio.h

2015-06-26 Thread janderwald
Author: janderwald
Date: Fri Jun 26 14:42:09 2015
New Revision: 68276

URL: http://svn.reactos.org/svn/reactos?rev=68276&view=rev
Log:
[DDK]
- add hdaudio.h

Added:
trunk/reactos/include/ddk/hdaudio.h   (with props)

Added: trunk/reactos/include/ddk/hdaudio.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/hdaudio.h?rev=68276
==
--- trunk/reactos/include/ddk/hdaudio.h (added)
+++ trunk/reactos/include/ddk/hdaudio.h [iso-8859-1] Fri Jun 26 14:42:09 2015
@@ -0,0 +1,253 @@
+#ifndef _HDAUDIO_H_
+#define _HDAUDIO_H_
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201)
+#pragma warning(disable:4214)
+#endif
+
+DEFINE_GUID (GUID_HDAUDIO_BUS_INTERFACE, 0xd2eaf88b, 0xab18, 0x41a8, 0xb6, 
0x64, 0x8d, 0x59, 0x21, 0x67, 0x67, 0x1b);
+DEFINE_GUID(GUID_HDAUDIO_BUS_INTERFACE_BDL, 0xb4d65397, 0x5634, 0x40b0, 0xb0, 
0x68, 0xf5, 0xb9, 0xf8, 0xb9, 0x67, 0xa5);
+DEFINE_GUID (GUID_HDAUDIO_BUS_INTERFACE_V2, 0xb52af5fb, 0x424b, 0x4bb9, 0xa1, 
0x60, 0x5b, 0x38, 0xbe, 0x94, 0xe5, 0x68);
+DEFINE_GUID (GUID_HDAUDIO_BUS_CLASS, 0xbbd1a745, 0xadd6, 0x4575, 0x9c, 0x2e, 
0x9b, 0x42, 0x8d, 0x1c, 0x32, 0x66);
+
+#ifndef _HDAUDIO_CODEC_TRANSFER_
+#define _HDAUDIO_CODEC_TRANSFER_
+
+typedef struct _HDAUDIO_CODEC_COMMAND
+{
+  union
+  {
+struct
+{
+  ULONG Data: 8;
+  ULONG VerbId  : 12;
+  ULONG Node: 8;
+  ULONG CodecAddress : 4;
+} Verb8;
+struct
+{
+  ULONG Data: 16;
+  ULONG VerbId  : 4;
+  ULONG Node: 8;
+  ULONG CodecAddress : 4;
+} Verb16;
+ULONG Command;
+  };
+} HDAUDIO_CODEC_COMMAND, *PHDAUDIO_CODEC_COMMAND;
+
+typedef struct _HDAUDIO_CODEC_RESPONSE
+{
+  union
+  {
+struct
+{
+  union
+  {
+struct
+{
+  ULONG Response : 26;
+  ULONG Tag : 6;
+} Unsolicited;
+ULONG Response;
+  };
+  ULONG SDataIn : 4;
+  ULONG IsUnsolicitedResponse : 1;
+  ULONG :25;
+  ULONG HasFifoOverrun : 1;
+  ULONG IsValid : 1;
+};
+ULONGLONG CompleteResponse;
+  };
+} HDAUDIO_CODEC_RESPONSE, *PHDAUDIO_CODEC_RESPONSE;
+
+typedef struct _HDAUDIO_CODEC_TRANSFER
+{
+  HDAUDIO_CODEC_COMMAND  Output;
+  HDAUDIO_CODEC_RESPONSE Input;
+} HDAUDIO_CODEC_TRANSFER, *PHDAUDIO_CODEC_TRANSFER;
+#endif
+
+typedef struct _HDAUDIO_STREAM_FORMAT
+{
+  ULONG   SampleRate;
+  USHORT  ValidBitsPerSample;
+  USHORT  ContainerSize;
+  USHORT  NumberOfChannels;
+} HDAUDIO_STREAM_FORMAT, *PHDAUDIO_STREAM_FORMAT;
+
+typedef struct _HDAUDIO_CONVERTER_FORMAT
+{
+  union
+  {
+struct
+{
+  USHORT NumberOfChannels : 4;
+  USHORT BitsPerSample : 3;
+  USHORT : 1;
+  USHORT SampleRate : 7;
+  USHORT StreamType : 1;
+};
+USHORT  ConverterFormat;
+  };
+} HDAUDIO_CONVERTER_FORMAT, *PHDAUDIO_CONVERTER_FORMAT;
+
+typedef enum _HDAUDIO_STREAM_STATE
+{
+  ResetState = 0,
+  StopState  = 1,
+  PauseState = 1,
+  RunState   = 2
+} HDAUDIO_STREAM_STATE, *PHDAUDIO_STREAM_STATE;
+
+typedef VOID (*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)(HDAUDIO_CODEC_TRANSFER *, 
PVOID);
+
+typedef VOID (*PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK)(HDAUDIO_CODEC_RESPONSE, 
PVOID);
+
+typedef struct _HDAUDIO_DEVICE_INFORMATION
+{
+  USHORT  Size; // size of this structure
+  USHORT  DeviceVersion;// maj.min (maj is high byte, min is low byte)
+  USHORT  DriverVersion;// maj.min (maj is high byte, min is low byte)
+  USHORT  CodecsDetected;   // mask of codecs present. Bit number == SDI 
line number
+  BOOLEAN IsStripingSupported;  // TRUE if striping (2 SDO lines) is supported
+} HDAUDIO_DEVICE_INFORMATION, *PHDAUDIO_DEVICE_INFORMATION;
+
+typedef struct _HDAUDIO_BUFFER_DESCRIPTOR
+{
+  PHYSICAL_ADDRESS  Address;
+  ULONG Length;
+  ULONG InterruptOnCompletion;
+} HDAUDIO_BUFFER_DESCRIPTOR, *PHDAUDIO_BUFFER_DESCRIPTOR;
+
+
+typedef NTSTATUS (*PTRANSFER_CODEC_VERBS) (IN PVOID _context, IN ULONG Count, 
IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer, IN 
PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback, IN PVOID Context);
+typedef NTSTATUS (*PALLOCATE_CAPTURE_DMA_ENGINE) (IN PVOID _context, IN UCHAR 
CodecAddress, IN PHDAUDIO_STREAM_FORMAT StreamFormat, OUT PHANDLE Handle, OUT 
PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
+typedef NTSTATUS (*PALLOCATE_RENDER_DMA_ENGINE) (IN PVOID _context, IN 
PHDAUDIO_STREAM_FORMAT StreamFormat, IN BOOLEAN Stripe, OUT PHANDLE Handle, OUT 
PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
+typedef NTSTATUS (*PCHANGE_BANDWIDTH_ALLOCATION) (IN PVOID _context, IN HANDLE 
Handle, IN PHDAUDIO_STREAM_FORMAT StreamFormat, OUT PHDAUDIO_CONVERTER_FORMAT 
ConverterFormat);
+typedef NTSTATUS (*PALLOCATE_DMA_BUFFER) (IN PVOID _context, IN HANDLE Handle, 
IN SIZE_T RequestedBufferSize, OUT PMDL *BufferMdl, OUT PSIZE_T 
AllocatedBufferSize, OUT PUCHAR StreamId, OUT PULONG FifoSize);
+typedef NTSTATUS (*PFREE_DMA_BUFFER) (IN PVOID _context, IN HANDLE Ha

[ros-diffs] [janderwald] 68249: [HIDCLASS] - fix a bug

2015-06-24 Thread janderwald
Author: janderwald
Date: Wed Jun 24 10:13:15 2015
New Revision: 68249

URL: http://svn.reactos.org/svn/reactos?rev=68249&view=rev
Log:
[HIDCLASS]
- fix a bug

Modified:
trunk/reactos/drivers/hid/hidclass/pdo.c

Modified: trunk/reactos/drivers/hid/hidclass/pdo.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/hid/hidclass/pdo.c?rev=68249&r1=68248&r2=68249&view=diff
==
--- trunk/reactos/drivers/hid/hidclass/pdo.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/hid/hidclass/pdo.c[iso-8859-1] Wed Jun 24 
10:13:15 2015
@@ -636,7 +636,7 @@
 OUT PDEVICE_RELATIONS *OutDeviceRelations)
 {
 PHIDCLASS_FDO_EXTENSION FDODeviceExtension;
-NTSTATUS Status;
+NTSTATUS Status = STATUS_SUCCESS;
 PDEVICE_OBJECT PDODeviceObject;
 PHIDCLASS_PDO_DEVICE_EXTENSION PDODeviceExtension;
 ULONG Index;
@@ -671,9 +671,9 @@
 // let's create a PDO for top level collection
 //
 Index = 0;
-do
-{
-//
+   while (Index < 
FDODeviceExtension->Common.DeviceDescription.CollectionDescLength)
+{
+   //
 // let's create the device object
 //
 Status = 
IoCreateDevice(FDODeviceExtension->Common.DriverExtension->DriverObject,
@@ -742,7 +742,7 @@
 //
 Index++;
 
-} while(Index < 
FDODeviceExtension->Common.DeviceDescription.CollectionDescLength);
+}
 
 
 //




[ros-diffs] [janderwald] 67952: [SNDVOL32] - revert 67251 as it breaks the dynamic user interface [KS] - fix bugs to return pin / topology node names

2015-05-29 Thread janderwald
Author: janderwald
Date: Fri May 29 15:01:34 2015
New Revision: 67952

URL: http://svn.reactos.org/svn/reactos?rev=67952&view=rev
Log:
[SNDVOL32]
- revert 67251 as it breaks the dynamic user interface
[KS]
- fix bugs to return pin / topology node names

Modified:
trunk/reactos/base/applications/sndvol32/lang/bg-BG.rc
trunk/reactos/base/applications/sndvol32/lang/cs-CZ.rc
trunk/reactos/base/applications/sndvol32/lang/de-DE.rc
trunk/reactos/base/applications/sndvol32/lang/el-GR.rc
trunk/reactos/base/applications/sndvol32/lang/en-US.rc
trunk/reactos/base/applications/sndvol32/lang/es-ES.rc
trunk/reactos/base/applications/sndvol32/lang/fr-FR.rc
trunk/reactos/base/applications/sndvol32/lang/he-IL.rc
trunk/reactos/base/applications/sndvol32/lang/hu-HU.rc
trunk/reactos/base/applications/sndvol32/lang/id-ID.rc
trunk/reactos/base/applications/sndvol32/lang/it-IT.rc
trunk/reactos/base/applications/sndvol32/lang/ja-JP.rc
trunk/reactos/base/applications/sndvol32/lang/ko-KR.rc
trunk/reactos/base/applications/sndvol32/lang/lt-LT.rc
trunk/reactos/base/applications/sndvol32/lang/nl-NL.rc
trunk/reactos/base/applications/sndvol32/lang/no-NO.rc
trunk/reactos/base/applications/sndvol32/lang/pl-PL.rc
trunk/reactos/base/applications/sndvol32/lang/pt-BR.rc
trunk/reactos/base/applications/sndvol32/lang/ro-RO.rc
trunk/reactos/base/applications/sndvol32/lang/ru-RU.rc
trunk/reactos/base/applications/sndvol32/lang/sk-SK.rc
trunk/reactos/base/applications/sndvol32/lang/sq-AL.rc
trunk/reactos/base/applications/sndvol32/lang/sv-SE.rc
trunk/reactos/base/applications/sndvol32/lang/th-TH.rc
trunk/reactos/base/applications/sndvol32/lang/tr-TR.rc
trunk/reactos/base/applications/sndvol32/lang/uk-UA.rc
trunk/reactos/base/applications/sndvol32/lang/zh-CN.rc
trunk/reactos/base/applications/sndvol32/lang/zh-TW.rc
trunk/reactos/drivers/ksfilter/ks/connectivity.c
trunk/reactos/drivers/ksfilter/ks/topology.c

Modified: trunk/reactos/base/applications/sndvol32/lang/bg-BG.rc
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/sndvol32/lang/bg-BG.rc?rev=67952&r1=67951&r2=67952&view=diff
==
--- trunk/reactos/base/applications/sndvol32/lang/bg-BG.rc  [iso-8859-1] 
(original)
+++ trunk/reactos/base/applications/sndvol32/lang/bg-BG.rc  [iso-8859-1] 
Fri May 29 15:01:34 2015
@@ -45,8 +45,8 @@
 PUSHBUTTON "Отказ", IDCANCEL, 168, 226, 50, 14
 END
 
-IDD_VOLUME_CTRL DIALOGEX 0, 0, 90, 150
-STYLE DS_SHELLFONT | WS_POPUP | WS_BORDER
+IDD_VOLUME_CTRL DIALOG 0, 0, 90, 150
+STYLE WS_POPUP | WS_BORDER
 FONT 8, "MS Shell Dlg"
 BEGIN
 LTEXT "Обща", IDC_LINE_NAME, 4, 7, 100, 15

Modified: trunk/reactos/base/applications/sndvol32/lang/cs-CZ.rc
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/sndvol32/lang/cs-CZ.rc?rev=67952&r1=67951&r2=67952&view=diff
==
--- trunk/reactos/base/applications/sndvol32/lang/cs-CZ.rc  [iso-8859-1] 
(original)
+++ trunk/reactos/base/applications/sndvol32/lang/cs-CZ.rc  [iso-8859-1] 
Fri May 29 15:01:34 2015
@@ -47,8 +47,8 @@
 PUSHBUTTON "Storno", IDCANCEL, 168, 226, 50, 14
 END
 
-IDD_VOLUME_CTRL DIALOGEX 0, 0, 90, 150
-STYLE DS_SHELLFONT | WS_POPUP | WS_BORDER
+IDD_VOLUME_CTRL DIALOG 0, 0, 90, 150
+STYLE WS_POPUP | WS_BORDER
 FONT 8, "MS Shell Dlg"
 BEGIN
 LTEXT "Celková hlasitost", IDC_LINE_NAME, 4, 7, 100, 15

Modified: trunk/reactos/base/applications/sndvol32/lang/de-DE.rc
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/sndvol32/lang/de-DE.rc?rev=67952&r1=67951&r2=67952&view=diff
==
--- trunk/reactos/base/applications/sndvol32/lang/de-DE.rc  [iso-8859-1] 
(original)
+++ trunk/reactos/base/applications/sndvol32/lang/de-DE.rc  [iso-8859-1] 
Fri May 29 15:01:34 2015
@@ -41,8 +41,8 @@
 PUSHBUTTON "Abbrechen", IDCANCEL, 168, 226, 50, 14
 END
 
-IDD_VOLUME_CTRL DIALOGEX 0, 0, 90, 150
-STYLE DS_SHELLFONT | WS_POPUP | WS_BORDER
+IDD_VOLUME_CTRL DIALOG 0, 0, 90, 150
+STYLE WS_POPUP | WS_BORDER
 FONT 8, "MS Shell Dlg"
 BEGIN
 LTEXT "Master", IDC_LINE_NAME, 4, 7, 100, 15

Modified: trunk/reactos/base/applications/sndvol32/lang/el-GR.rc
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/sndvol32/lang/el-GR.rc?rev=67952&r1=67951&r2=67952&view=diff
==
--- trunk/reactos/base/applications/sndvol32/lang/el-GR.rc  [iso-8859-1] 
(original)
+++ trunk/reactos/base/applications/sndvol32/lang/el-GR.rc  [iso-8859-1] 
Fri May 29 15:01:34 2015

[ros-diffs] [janderwald] 66967: - silence traces

2015-03-29 Thread janderwald
Author: janderwald
Date: Sun Mar 29 16:08:14 2015
New Revision: 66967

URL: http://svn.reactos.org/svn/reactos?rev=66967&view=rev
Log:
- silence traces

Modified:
trunk/reactos/drivers/ksfilter/ks/swenum.c

Modified: trunk/reactos/drivers/ksfilter/ks/swenum.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/swenum.c?rev=66967&r1=66966&r2=66967&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] Sun Mar 29 
16:08:14 2015
@@ -122,7 +122,7 @@
 return Status;
 }
 
-DPRINT1("Registered DeviceInterface %wZ\n", 
&BusInstanceEntry->SymbolicLink);
+DPRINT("Registered DeviceInterface %wZ\n", 
&BusInstanceEntry->SymbolicLink);
 
 
 /* done */
@@ -276,8 +276,8 @@
 
 /* check if the device is already present */
 Entry = DeviceEntry->DeviceInterfaceList.Flink;
-DPRINT1("KspCreateDeviceAssociation ReferenceString %S\n", 
ReferenceString);
-DPRINT1("KspCreateDeviceAssociation InterfaceString %S\n", 
InterfaceString);
+DPRINT("KspCreateDeviceAssociation ReferenceString %S\n", ReferenceString);
+DPRINT("KspCreateDeviceAssociation InterfaceString %S\n", InterfaceString);
 
 while(Entry != &DeviceEntry->DeviceInterfaceList)
 {
@@ -649,7 +649,7 @@
 {
 /* get bus instance entry */
 InstanceEntry = (PBUS_INSTANCE_ENTRY)CONTAINING_RECORD(Entry, 
BUS_INSTANCE_ENTRY, Entry);
-DPRINT1("Enabling %u %wZ Irql %u\n", bEnable, 
&InstanceEntry->SymbolicLink, KeGetCurrentIrql());
+DPRINT("Enabling %u %wZ Irql %u\n", bEnable, 
&InstanceEntry->SymbolicLink, KeGetCurrentIrql());
 
 /* set interface state */
 Status = IoSetDeviceInterfaceState(&InstanceEntry->SymbolicLink, 
bEnable);
@@ -746,7 +746,7 @@
 /* store result code */
 Irp->IoStatus.Status = Status;
 
-DPRINT1("Completing IRP %p Status %x\n", Irp, Status);
+DPRINT("Completing IRP %p Status %x\n", Irp, Status);
 
 /* complete the request */
 CompleteRequest(Irp, IO_NO_INCREMENT);
@@ -1402,7 +1402,7 @@
 NTSTATUS Status;
 LPWSTR Buffer;
 
-DPRINT1("KsGetBusEnumIdentifier\n");
+DPRINT("KsGetBusEnumIdentifier\n");
 
 /* get stack location */
 IoStack = IoGetCurrentIrpStackLocation(Irp);
@@ -1484,7 +1484,7 @@
 {
 PDEV_EXTENSION DeviceExtension;
 
-DPRINT1("KsGetBusEnumParentFDOFromChildPDO\n");
+DPRINT("KsGetBusEnumParentFDOFromChildPDO\n");
 
 /* get device extension */
 DeviceExtension = (PDEV_EXTENSION)DeviceObject->DeviceExtension;
@@ -1547,7 +1547,7 @@
 /* store bus device extension */
 DeviceExtension->Ext = (PCOMMON_DEVICE_EXTENSION)BusDeviceExtension;
 
-DPRINT1("DeviceExtension %p BusDeviceExtension %p\n", DeviceExtension, 
DeviceExtension->Ext);
+DPRINT("DeviceExtension %p BusDeviceExtension %p\n", DeviceExtension, 
DeviceExtension->Ext);
 
 
 /* zero device extension */
@@ -1802,7 +1802,7 @@
 PDEV_EXTENSION DeviceExtension;
 PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension;
 
-DPRINT1("KsInstallBusEnumInterface\n");
+DPRINT("KsInstallBusEnumInterface\n");
 
 /* get current irp stack location */
 IoStack = IoGetCurrentIrpStackLocation(Irp);
@@ -1913,7 +1913,7 @@
 ASSERT(IoStack->FileObject);
 if (IoStack->FileObject->FileName.Buffer == NULL)
 {
- DPRINT1("KsServiceBusEnumCreateRequest PNP Hack\n");
+ DPRINT("KsServiceBusEnumCreateRequest PNP Hack\n");
  Irp->IoStatus.Status = STATUS_SUCCESS;
  return STATUS_SUCCESS;
 }
@@ -1991,7 +1991,7 @@
 DPRINT1("KsServiceBusEnumCreateRequest failed to create PDO with 
%x\n", Status);
 return Status;
 }
-DPRINT1("PENDING CREATE Irp %p %wZ\n", Irp, 
&IoStack->FileObject->FileName);
+DPRINT("PENDING CREATE Irp %p %wZ\n", Irp, 
&IoStack->FileObject->FileName);
 
 /* delay processing until pnp is finished with enumeration */
 IoMarkIrpPending(Irp);
@@ -2208,7 +2208,7 @@
 PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension;
 PIO_STACK_LOCATION IoStack;
 
-DPRINT1("KsRemoveBusEnumInterface\n");
+DPRINT("KsRemoveBusEnumInterface\n");
 
 /* get io stack location */
 IoStack = IoGetCurrentIrpStackLocation(Irp);




[ros-diffs] [janderwald] 66966: - silence traces

2015-03-29 Thread janderwald
Author: janderwald
Date: Sun Mar 29 16:02:40 2015
New Revision: 66966

URL: http://svn.reactos.org/svn/reactos?rev=66966&view=rev
Log:
- silence traces

Modified:
trunk/reactos/drivers/ksfilter/swenum/swenum.c

Modified: trunk/reactos/drivers/ksfilter/swenum/swenum.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/swenum/swenum.c?rev=66966&r1=66965&r2=66966&view=diff
==
--- trunk/reactos/drivers/ksfilter/swenum/swenum.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/swenum/swenum.c  [iso-8859-1] Sun Mar 29 
16:02:40 2015
@@ -311,7 +311,7 @@
 /* check if the device object is a child device */
 Status = KsIsBusEnumChildDevice(DeviceObject, &ChildDevice);
 
-DPRINT1("SwDispatchCreate %x\n", Status);
+DPRINT("SwDispatchCreate %x\n", Status);
 
 /* check for success */
 if (NT_SUCCESS(Status))
@@ -325,7 +325,7 @@
 }
 /* perform the create request */
 Status = KsServiceBusEnumCreateRequest(DeviceObject, Irp);
-DPRINT1("SwDispatchCreate %x\n", Status);
+DPRINT("SwDispatchCreate %x\n", Status);
 }
 
 /* check the irp is pending */




[ros-diffs] [janderwald] 66921: [INF] - properly install kmixer - disable audio category filter until audio stack is ready

2015-03-27 Thread janderwald
Author: janderwald
Date: Fri Mar 27 17:30:05 2015
New Revision: 66921

URL: http://svn.reactos.org/svn/reactos?rev=66921&view=rev
Log:
[INF]
- properly install kmixer 
- disable audio category filter  until audio stack is ready

Modified:
trunk/reactos/drivers/wdm/audio/filters/kmixer/filter.c
trunk/reactos/media/inf/wdmaudio.inf

Modified: trunk/reactos/drivers/wdm/audio/filters/kmixer/filter.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/filters/kmixer/filter.c?rev=66921&r1=66920&r2=66921&view=diff
==
--- trunk/reactos/drivers/wdm/audio/filters/kmixer/filter.c [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/filters/kmixer/filter.c [iso-8859-1] 
Fri Mar 27 17:30:05 2015
@@ -20,6 +20,7 @@
 PIRP Irp)
 {
 UNIMPLEMENTED
+DbgBreakPoint();
 
 Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
 Irp->IoStatus.Information = 0;

Modified: trunk/reactos/media/inf/wdmaudio.inf
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/wdmaudio.inf?rev=66921&r1=66920&r2=66921&view=diff
==
--- trunk/reactos/media/inf/wdmaudio.inf[iso-8859-1] (original)
+++ trunk/reactos/media/inf/wdmaudio.inf[iso-8859-1] Fri Mar 27 
17:30:05 2015
@@ -52,7 +52,7 @@
 [DeviceRegistration]
 ; Kmixer swenum install
 HKLM,%RunOnce%,"WDM_KMIXER0",,"rundll32.exe streamci.dll,StreamingDeviceSetup 
%WDM_KMIXER.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_MIXER%,%17%\WDMAUDIO.inf,WDM_KMIXER.Interface.Install"
-HKLM,%RunOnce%,"WDM_KMIXER1",,"rundll32.exe streamci.dll,StreamingDeviceSetup 
%WDM_KMIXER.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_AUDIO%,%17%\WDMAUDIO.inf,WDM_KMIXER.Interface.Install"
+;HKLM,%RunOnce%,"WDM_KMIXER1",,"rundll32.exe streamci.dll,StreamingDeviceSetup 
%WDM_KMIXER.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_AUDIO%,%17%\WDMAUDIO.inf,WDM_KMIXER.Interface.Install"
 
 ; Sysaudio swenum install
 HKLM,%RunOnce%,"WDM_SYSAUDIO",,"rundll32.exe streamci.dll,StreamingDeviceSetup 
%WDM_SYSAUDIO.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_SYSAUDIO%,%17%\WDMAUDIO.inf,WDM_SYSAUDIO.Interface.Install"
@@ -189,7 +189,8 @@
 PKEY_AudioEngine_OEMFormat = "{E4870E26-3CC5-4CD2-BA46-CA0A9A70ED04},3"
 WDM_WDMAUD.DeviceId   = "{CD171DE3-69E5-11D2-B56D-F8754380}"
 KSCATEGORY_WDMAUD = "{3E227E76-690D-11D2-8161-F8775BF1}"
-
+WDM_KMIXER.DeviceId   = "{B7EAFDC0-A680-11D0-96D8-00AA0051E51D}"
+KSCATEGORY_MIXER  = "{AD809C00-7B88-11D0-A5D6-28DB04C1}"
 
 ;Localizable
 WDM_KMIXER.DeviceDesc = "ReactOS Wave Audio Mixer"




[ros-diffs] [janderwald] 66853: [SYSAUDIO][KMIXER] - convert to pnp software device

2015-03-22 Thread janderwald
Author: janderwald
Date: Sun Mar 22 11:27:52 2015
New Revision: 66853

URL: http://svn.reactos.org/svn/reactos?rev=66853&view=rev
Log:
[SYSAUDIO][KMIXER]
- convert to pnp software device

Modified:
trunk/reactos/drivers/wdm/audio/filters/kmixer/kmixer.c
trunk/reactos/drivers/wdm/audio/sysaudio/main.c
trunk/reactos/media/inf/wdmaudio.inf

Modified: trunk/reactos/drivers/wdm/audio/filters/kmixer/kmixer.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/filters/kmixer/kmixer.c?rev=66853&r1=66852&r2=66853&view=diff
==
--- trunk/reactos/drivers/wdm/audio/filters/kmixer/kmixer.c [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/filters/kmixer/kmixer.c [iso-8859-1] 
Sun Mar 22 11:27:52 2015
@@ -40,13 +40,15 @@
 
 NTSTATUS
 NTAPI
-KMix_InstallDevice(
-IN  PDRIVER_OBJECT  DriverObject)
+KMix_AddDevice(
+IN  PDRIVER_OBJECT  DriverObject,
+IN PDEVICE_OBJECT PhysicalDeviceObject)
 {
 NTSTATUS Status;
 UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\kmixer");
 PDEVICE_OBJECT DeviceObject;
 PKMIXER_DEVICE_EXT DeviceExtension;
+PDEVICE_OBJECT NextDeviceObject;
 
 DPRINT1("KMix_InstallDevice called\n");
 
@@ -80,8 +82,12 @@
 
  /* set io flags */
  DeviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE;
+
  /* clear initializing flag */
  DeviceObject->Flags &= ~ DO_DEVICE_INITIALIZING;
+
+ NextDeviceObject = IoAttachDeviceToDeviceStack(DeviceObject, 
PhysicalDeviceObject);
+ KsSetDevicePnpAndBaseObject(DeviceExtension->KsDeviceHeader, 
NextDeviceObject, DeviceObject);
 
 DPRINT("KMix_InstallDevice result %x\n", Status);
 return STATUS_SUCCESS;
@@ -110,6 +116,7 @@
 DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = KsDefaultForwardIrp;
 DriverObject->MajorFunction[IRP_MJ_PNP] = KMix_Pnp;
 DriverObject->DriverUnload = KMix_Unload;
+DriverObject->DriverExtension->AddDevice = KMix_AddDevice;
 
-return KMix_InstallDevice(DriverObject);
+return STATUS_SUCCESS;
 }

Modified: trunk/reactos/drivers/wdm/audio/sysaudio/main.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/sysaudio/main.c?rev=66853&r1=66852&r2=66853&view=diff
==
--- trunk/reactos/drivers/wdm/audio/sysaudio/main.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/sysaudio/main.c [iso-8859-1] Sun Mar 22 
11:27:52 2015
@@ -131,17 +131,17 @@
 
 NTSTATUS
 NTAPI
-SysAudio_InstallDevice(
-IN  PDRIVER_OBJECT  DriverObject)
+SysAudio_AddDevice(
+IN  PDRIVER_OBJECT DriverObject,
+IN PDEVICE_OBJECT PhysicalDeviceObject)
 {
 NTSTATUS Status;
 UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\sysaudio");
 UNICODE_STRING SymlinkName = 
RTL_CONSTANT_STRING(L"\\DosDevices\\sysaudio");
-PDEVICE_OBJECT DeviceObject;
+   PDEVICE_OBJECT DeviceObject, NextDeviceObject;
 SYSAUDIODEVEXT *DeviceExtension;
 
-
-DPRINT("SysAudio_InstallDevice called\n");
+DPRINT("SysAudio_AddDevice called\n");
 
 /* Create the device */
 Status = IoCreateDevice(DriverObject,
@@ -160,7 +160,7 @@
 }
 
 /* Register device interfaces */
-Status = SysAudioRegisterDeviceInterfaces(DeviceObject);
+Status = SysAudioRegisterDeviceInterfaces(PhysicalDeviceObject);
 if (!NT_SUCCESS(Status))
 {
 /* Failed to register
@@ -215,6 +215,10 @@
  /* clear initializing flag */
  DeviceObject->Flags &= ~ DO_DEVICE_INITIALIZING;
 
+ /* atttach to device stack */
+ NextDeviceObject = IoAttachDeviceToDeviceStack(DeviceObject, 
PhysicalDeviceObject);
+ KsSetDevicePnpAndBaseObject(DeviceExtension->KsDeviceHeader, 
NextDeviceObject, DeviceObject);
+
  /* register shutdown notfication */
  IoRegisterShutdownNotification(DeviceObject);
 
@@ -259,7 +263,8 @@
 /* Sysaudio needs to do work on pnp, so handle it */
 DriverObject->MajorFunction[IRP_MJ_PNP] = SysAudio_Pnp;
 DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = SysAudio_Shutdown;
-
-/* Call our initialization function */
-return SysAudio_InstallDevice(DriverObject);
-}
+DriverObject->DriverExtension->AddDevice = SysAudio_AddDevice;
+
+/* done */
+return STATUS_SUCCESS;
+}

Modified: trunk/reactos/media/inf/wdmaudio.inf
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/wdmaudio.inf?rev=66853&r1=66852&r2=66853&view=diff
==
--- trunk/reactos/media/inf/wdmaudio.inf[iso-8859-1] (original)
+++ trunk/reactos/media/inf/wdmaudio.inf[iso-8859-1] Sun Mar 22 
11:27:52 2015
@@ -25,8 +25,8 @@
 ExcludeFromSelect = WDMAUDIO_CopyFi

[ros-diffs] [janderwald] 66852: [KS] - fix a few bugs

2015-03-22 Thread janderwald
Author: janderwald
Date: Sun Mar 22 10:27:44 2015
New Revision: 66852

URL: http://svn.reactos.org/svn/reactos?rev=66852&view=rev
Log:
[KS]
- fix a few bugs

Modified:
trunk/reactos/drivers/ksfilter/ks/swenum.c

Modified: trunk/reactos/drivers/ksfilter/ks/swenum.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/swenum.c?rev=66852&r1=66851&r2=66852&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] Sun Mar 22 
10:27:44 2015
@@ -73,7 +73,11 @@
 DeviceExtension->DeviceEntry = DeviceEntry;
 DeviceExtension->BusDeviceExtension = BusDeviceExtension;
 
-/* TODO: update last creation time in bus device extension */
+/* not started yet*/
+DeviceEntry->DeviceState = NotStarted;
+
+/* get current time */
+KeQuerySystemTime(&DeviceEntry->TimeCreated);
 
 /* setup flags */
 DeviceObject->Flags |= DO_POWER_PAGABLE;
@@ -1209,10 +1213,10 @@
 
 if (Diff.QuadPart > Int32x32To64(15000, 1))
 {
- //DPRINT1("DeviceID %S  Instance %S TimeCreated %I64u Now 
%I64u Diff %I64u hung\n", DeviceEntry->DeviceName, DeviceEntry->Instance, 
DeviceEntry->TimeCreated.QuadPart, Time.QuadPart, Diff.QuadPart);
-
  /* release spin lock */
  KeReleaseSpinLock(&BusDeviceExtension->Lock, OldLevel);
+
+ DPRINT1("DeviceID %S Instance %S TimeCreated %I64u Now 
%I64u Diff %I64u hung\n", DeviceEntry->DeviceName, DeviceEntry->Instance, 
DeviceEntry->TimeCreated.QuadPart, Time.QuadPart, Diff.QuadPart);
 
  /* deactivate interfaces */
  //KspEnableBusDeviceInterface(DeviceEntry, FALSE);
@@ -1966,10 +1970,8 @@
 InsertTailList(&DeviceEntry->IrpPendingList, 
&Irp->Tail.Overlay.ListEntry);
 
 Time.QuadPart = Int32x32To64(1500, -1);
-DbgPrint("PENDING Irp %p %wZ\n", Irp, &IoStack->FileObject->FileName);
-
-/* query current time */
-KeQuerySystemTime(&DeviceEntry->TimeCreated);
+DbgPrint("PENDING Irp %p %wZ DeviceState %d\n", Irp, 
&IoStack->FileObject->FileName, DeviceEntry->DeviceState);
+
 
 /* set timer */
 KeSetTimer(&BusDeviceExtension->Timer, Time, &BusDeviceExtension->Dpc);
@@ -1996,9 +1998,6 @@
 
 /* insert into irp pending list */
 InsertTailList(&DeviceEntry->IrpPendingList, 
&Irp->Tail.Overlay.ListEntry);
-
-/* get current time */
-KeQuerySystemTime(&DeviceEntry->TimeCreated);
 
 /* invalidate device relations */
 IoInvalidateDeviceRelations(BusDeviceExtension->PhysicalDeviceObject, 
BusRelations);
@@ -2123,6 +2122,11 @@
 {
 /* start bus */
 Status = KspStartBusDevice(DeviceObject, ChildDeviceExtension, 
Irp);
+if (NT_SUCCESS(Status))
+{
+/* complete pending irps*/
+KspCompletePendingIrps(ChildDeviceExtension->DeviceEntry, 
STATUS_REPARSE);
+}
 
 /* set time out */
 Time.QuadPart = Int32x32To64(1500, -1);




[ros-diffs] [janderwald] 66846: [KS] - try fix sound #1

2015-03-21 Thread janderwald
Author: janderwald
Date: Sat Mar 21 09:33:34 2015
New Revision: 66846

URL: http://svn.reactos.org/svn/reactos?rev=66846&view=rev
Log:
[KS]
- try fix sound #1

Modified:
trunk/reactos/drivers/ksfilter/ks/swenum.c

Modified: trunk/reactos/drivers/ksfilter/ks/swenum.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/swenum.c?rev=66846&r1=66845&r2=66846&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] Sat Mar 21 
09:33:34 2015
@@ -690,7 +690,7 @@
 Length += 2;
 
 /* allocate buffer */
-Buffer = AllocateItem(NonPagedPool, Length * sizeof(WCHAR));
+   Buffer = ExAllocatePoolWithTag(NonPagedPool, Length * sizeof(WCHAR), 
'mNoI');
 if (!Buffer)
 {
 /* no resources */
@@ -699,8 +699,9 @@
 
 /* construct buffer */
 swprintf(Buffer, L"%s\\%s", DeviceEntry->PDODeviceName, 
DeviceEntry->Instance);
-// HACK
-//ExFreePool(IoStack->FileObject->FileName.Buffer);
+
+/* free old buffer*/
+ExFreePoolWithTag(IoStack->FileObject->FileName.Buffer, 'mNoI');
 
 /* store new file name */
 RtlInitUnicodeString(&IoStack->FileObject->FileName, Buffer);
@@ -1228,8 +1229,14 @@
 }
 else if (DeviceEntry->DeviceState == Started)
 {
+   /* release spin lock */
+   KeReleaseSpinLock(&BusDeviceExtension->Lock, 
OldLevel);
+
 /* found pending irps */
 KspCompletePendingIrps(DeviceEntry, STATUS_REPARSE);
+
+   /* re-acquire lock */
+   KeAcquireSpinLock(&BusDeviceExtension->Lock, 
&OldLevel);
 }
 }
 




[ros-diffs] [janderwald] 66710: - fix build

2015-03-14 Thread janderwald
Author: janderwald
Date: Sat Mar 14 17:53:52 2015
New Revision: 66710

URL: http://svn.reactos.org/svn/reactos?rev=66710&view=rev
Log:
- fix build

Modified:
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c

Modified: trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c?rev=66710&r1=66709&r2=66710&view=diff
==
--- trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c   [iso-8859-1] 
(original)
+++ trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c   [iso-8859-1] 
Sat Mar 14 17:53:52 2015
@@ -74,7 +74,6 @@
 IN PVOID Context)
 {
 PWDMAUD_DEVICE_EXTENSION DeviceExtension;
-NTSTATUS Status;
 
 /* get device extension */
 DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
@@ -92,8 +91,6 @@
 IN PDRIVER_OBJECT DriverObject,
 IN PDEVICE_OBJECT PhysicalDeviceObject)
 {
-UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\wdmaud");
-UNICODE_STRING SymlinkName = RTL_CONSTANT_STRING(L"\\DosDevices\\wdmaud");
 PDEVICE_OBJECT DeviceObject;
 NTSTATUS Status;
 PWDMAUD_DEVICE_EXTENSION DeviceExtension;




[ros-diffs] [janderwald] 66709: [WDMAUD] - convert wdmaud to a software pnp device - register device interface [WDMAUD.DRV] - open wdmaud via device interface

2015-03-14 Thread janderwald
Author: janderwald
Date: Sat Mar 14 17:50:30 2015
New Revision: 66709

URL: http://svn.reactos.org/svn/reactos?rev=66709&view=rev
Log:
[WDMAUD]
- convert wdmaud to a software pnp device
- register device interface
[WDMAUD.DRV]
- open wdmaud via device interface

Modified:
trunk/reactos/dll/win32/wdmaud.drv/legacy.c
trunk/reactos/dll/win32/wdmaud.drv/wdmaud.h
trunk/reactos/drivers/ksfilter/ks/misc.c
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/control.c
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/deviface.c
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/sup.c
trunk/reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.h
trunk/reactos/media/inf/wdmaudio.inf

Modified: trunk/reactos/dll/win32/wdmaud.drv/legacy.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wdmaud.drv/legacy.c?rev=66709&r1=66708&r2=66709&view=diff
==
--- trunk/reactos/dll/win32/wdmaud.drv/legacy.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/wdmaud.drv/legacy.c [iso-8859-1] Sat Mar 14 
17:50:30 2015
@@ -255,25 +255,64 @@
 IN PSOUND_DEVICE SoundDevice,
 OUT PVOID *Handle)
 {
-/* Only open this if it's not already open */
+HDEVINFO hDevInfo;
+SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
+GUID SWBusGuid = {STATIC_KSCATEGORY_WDMAUD};
+PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData;
+
 if ( KernelHandle == INVALID_HANDLE_VALUE )
 {
-SND_TRACE(L"Opening wdmaud device\n");
-KernelHandle = CreateFileW(KERNEL_DEVICE_NAME,
-  GENERIC_READ | GENERIC_WRITE,
-  0,
-  NULL,
-  OPEN_EXISTING,
-  FILE_FLAG_OVERLAPPED,
-  NULL);
-}
+hDevInfo = SetupDiGetClassDevsW(&SWBusGuid, NULL, NULL,  
DIGCF_DEVICEINTERFACE| DIGCF_PRESENT);
+if (!hDevInfo)
+{
+// failed
+return MMSYSERR_ERROR;
+}
+
+DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+if (!SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &SWBusGuid, 0, 
&DeviceInterfaceData))
+{
+// failed
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return MMSYSERR_ERROR;
+}
+
+DeviceInterfaceDetailData = 
(PSP_DEVICE_INTERFACE_DETAIL_DATA_W)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * 
sizeof(WCHAR) + sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W));
+if (!DeviceInterfaceDetailData)
+{
+// failed
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return MMSYSERR_ERROR;
+}
+
+DeviceInterfaceDetailData->cbSize = 
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
+if (!SetupDiGetDeviceInterfaceDetailW(hDevInfo,  &DeviceInterfaceData, 
DeviceInterfaceDetailData,MAX_PATH * sizeof(WCHAR) + 
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W), NULL, NULL))
+{
+// failed
+HeapFree(GetProcessHeap(), 0, DeviceInterfaceDetailData);
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return MMSYSERR_ERROR;
+}
+SND_TRACE(L"Opening wdmaud device 
'%s'\n",DeviceInterfaceDetailData->DevicePath);
+KernelHandle = CreateFileW(DeviceInterfaceDetailData->DevicePath,
+GENERIC_READ | GENERIC_WRITE,
+0,
+NULL,
+OPEN_EXISTING,
+FILE_FLAG_OVERLAPPED,
+NULL);
+
+HeapFree(GetProcessHeap(), 0, DeviceInterfaceDetailData);
+SetupDiDestroyDeviceInfoList(hDevInfo);
+}
+
 
 if ( KernelHandle == INVALID_HANDLE_VALUE )
 return MMSYSERR_ERROR;
 
 ++ OpenCount;
-
-return MMSYSERR_NOERROR;
+return MMSYSERR_NOERROR;
+
 }
 
 MMRESULT

Modified: trunk/reactos/dll/win32/wdmaud.drv/wdmaud.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wdmaud.drv/wdmaud.h?rev=66709&r1=66708&r2=66709&view=diff
==
--- trunk/reactos/dll/win32/wdmaud.drv/wdmaud.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/wdmaud.drv/wdmaud.h [iso-8859-1] Sat Mar 14 
17:50:30 2015
@@ -8,12 +8,16 @@
 #define COM_NO_WINDOWS_H
 
 #include 
+#include 
+#include 
+
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
+#include 
 
 BOOL
 WdmAudInitUserModeMixer(VOID);

Modified: trunk/reactos/drivers/ksfilter/ks/misc.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/misc.c?rev=66709&r1=66708&r2=66709&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/misc.c[iso-8859-1] (original)
+

[ros-diffs] [janderwald] 66684: [MMSYS] - hardware ids must be terminated by 2 zero bytes [KS] - more fixes to software bus pnp enumerator [MMIXER] - dont assert on buggy topology lines [NTOS] - keys

2015-03-14 Thread janderwald
Author: janderwald
Date: Sat Mar 14 11:12:32 2015
New Revision: 66684

URL: http://svn.reactos.org/svn/reactos?rev=66684&view=rev
Log:
[MMSYS]
- hardware ids must be terminated by 2 zero bytes
[KS]
- more fixes to software bus pnp enumerator
[MMIXER]
- dont assert on buggy topology lines
[NTOS]
- keys must be REG_OPTION_VOLATILE
- allocate file object with correct tag
[INF]
- register wdmaudio as pnp software device (not yet ready)

Modified:
trunk/reactos/dll/cpl/mmsys/mmsys.c
trunk/reactos/drivers/ksfilter/ks/swenum.c
trunk/reactos/drivers/ksfilter/swenum/swenum.c
trunk/reactos/lib/drivers/sound/mmixer/controls.c
trunk/reactos/media/inf/wdmaudio.inf
trunk/reactos/ntoskrnl/io/iomgr/deviface.c
trunk/reactos/ntoskrnl/ob/oblink.c

Modified: trunk/reactos/dll/cpl/mmsys/mmsys.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/mmsys/mmsys.c?rev=66684&r1=66683&r2=66684&view=diff
==
--- trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] Sat Mar 14 11:12:32 2015
@@ -544,7 +544,7 @@
 }
 
 wcscpy(pBuffer, L"inf\\machine.inf");
-InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM");
+InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM\0");
 }
 
 hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);

Modified: trunk/reactos/drivers/ksfilter/ks/swenum.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/swenum.c?rev=66684&r1=66683&r2=66684&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] Sat Mar 14 
11:12:32 2015
@@ -98,7 +98,7 @@
 RtlInitUnicodeString(&ReferenceString, DeviceEntry->DeviceName);
 
 /* register device interface */
-Status = 
IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject, 
&DeviceEntry->DeviceGuid, NULL, &BusInstanceEntry->SymbolicLink);
+Status = 
IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject, 
&BusInstanceEntry->InterfaceGuid, &ReferenceString, 
&BusInstanceEntry->SymbolicLink);
 
 /* check for success */
 if (!NT_SUCCESS(Status))
@@ -255,8 +255,8 @@
 IN PHANDLE hKey,
 IN PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension,
 IN PBUS_DEVICE_ENTRY DeviceEntry,
-IN LPWSTR ReferenceString,
-IN LPWSTR InterfaceString)
+IN LPWSTR InterfaceString,
+IN LPWSTR ReferenceString)
 {
 GUID InterfaceGUID;
 NTSTATUS Status;
@@ -699,8 +699,8 @@
 
 /* construct buffer */
 swprintf(Buffer, L"%s\\%s", DeviceEntry->PDODeviceName, 
DeviceEntry->Instance);
-
-ExFreePool(IoStack->FileObject->FileName.Buffer);
+// HACK
+//ExFreePool(IoStack->FileObject->FileName.Buffer);
 
 /* store new file name */
 RtlInitUnicodeString(&IoStack->FileObject->FileName, Buffer);
@@ -906,7 +906,7 @@
 ASSERT(DeviceEntry->Instance);
 
 /* calculate length */
-Length = wcslen(DeviceEntry->Instance) + 1;
+Length = wcslen(DeviceEntry->Instance) + 2;
 
 /* allocate buffer */
 Name = AllocateItem(PagedPool, Length * sizeof(WCHAR));
@@ -945,11 +945,11 @@
 Length = wcslen(BusDeviceExtension->BusIdentifier);
 Length += wcslen(DeviceEntry->BusId);
 
-/* extra length for '\\' and zero byte */
-Length += 2;
+/* extra length for '\\' and 2 zero bytes */
+Length += 4;
 
 /* allocate buffer */
-Name = ExAllocatePool(PagedPool, Length * sizeof(WCHAR));
+Name = AllocateItem(PagedPool, Length * sizeof(WCHAR));
 if (!Name)
 {
 /* failed to allocate buffer */
@@ -957,7 +957,10 @@
 }
 
 /* construct id */
-swprintf(Name, L"%s\\%s", BusDeviceExtension->BusIdentifier, 
DeviceEntry->BusId);
+wcscpy(Name, BusDeviceExtension->BusIdentifier);
+wcscat(Name, L"\\");
+wcscat(Name, DeviceEntry->BusId);
+//swprintf(Name, L"%s\\%s", BusDeviceExtension->BusIdentifier, 
DeviceEntry->BusId);
 
 /* store result */
 Irp->IoStatus.Information = (ULONG_PTR)Name;
@@ -1205,7 +1208,7 @@
 
 if (Diff.QuadPart > Int32x32To64(15000, 1))
 {
- DPRINT1("DeviceID %S  Instance %S TimeCreated %I64u Now 
%I64u Diff %I64u hung\n", DeviceEntry->DeviceName, DeviceEntry->Instance, 
DeviceEntry->TimeCreated.QuadPart, Time.QuadPart, Diff.QuadPart);
+ //DPRINT1("DeviceID %S  Instance %S TimeCreated %I64u Now 

[ros-diffs] [janderwald] 66606: [MMSYS] - fix build

2015-03-08 Thread janderwald
Author: janderwald
Date: Sun Mar  8 09:37:06 2015
New Revision: 66606

URL: http://svn.reactos.org/svn/reactos?rev=66606&view=rev
Log:
[MMSYS]
- fix build

Modified:
trunk/reactos/dll/cpl/mmsys/mmsys.c

Modified: trunk/reactos/dll/cpl/mmsys/mmsys.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/mmsys/mmsys.c?rev=66606&r1=66605&r2=66606&view=diff
==
--- trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] Sun Mar  8 09:37:06 2015
@@ -345,7 +345,6 @@
 SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
 GUID SWBusGuid = {STATIC_BUSID_SoftwareDeviceEnumerator};
 PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData;
-HANDLE hDevice;
 
 hDevInfo = SetupDiGetClassDevsW(&SWBusGuid, NULL, NULL,  
DIGCF_DEVICEINTERFACE| DIGCF_PRESENT);
 if (!hDevInfo)




[ros-diffs] [janderwald] 66605: [MMSYS] - install software bus pnp enumerator only once

2015-03-08 Thread janderwald
Author: janderwald
Date: Sun Mar  8 08:28:12 2015
New Revision: 66605

URL: http://svn.reactos.org/svn/reactos?rev=66605&view=rev
Log:
[MMSYS]
- install software bus pnp enumerator only once

Modified:
trunk/reactos/dll/cpl/mmsys/mmsys.c

Modified: trunk/reactos/dll/cpl/mmsys/mmsys.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/mmsys/mmsys.c?rev=66605&r1=66604&r2=66605&view=diff
==
--- trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] Sun Mar  8 08:28:12 2015
@@ -15,6 +15,7 @@
 #include 
 #include 
 
+#include 
 #include 
 #include 
 #include 
@@ -335,6 +336,51 @@
 }
 
 RegCloseKey(hKey);
+}
+
+BOOL
+IsSoftwareBusPnpEnumeratorInstalled()
+{
+HDEVINFO hDevInfo;
+SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
+GUID SWBusGuid = {STATIC_BUSID_SoftwareDeviceEnumerator};
+PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData;
+HANDLE hDevice;
+
+hDevInfo = SetupDiGetClassDevsW(&SWBusGuid, NULL, NULL,  
DIGCF_DEVICEINTERFACE| DIGCF_PRESENT);
+if (!hDevInfo)
+{
+// failed
+return FALSE;
+}
+
+DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+if (!SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &SWBusGuid, 0, 
&DeviceInterfaceData))
+{
+// failed
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return FALSE;
+}
+
+DeviceInterfaceDetailData = 
(PSP_DEVICE_INTERFACE_DETAIL_DATA_W)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * 
sizeof(WCHAR) + sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W));
+if (!DeviceInterfaceDetailData)
+{
+// failed
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return FALSE;
+}
+
+DeviceInterfaceDetailData->cbSize = 
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
+if (!SetupDiGetDeviceInterfaceDetailW(hDevInfo,  &DeviceInterfaceData, 
DeviceInterfaceDetailData,MAX_PATH * sizeof(WCHAR) + 
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W), NULL, NULL))
+{
+// failed
+HeapFree(GetProcessHeap(), 0, DeviceInterfaceDetailData);
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return FALSE;
+}
+HeapFree(GetProcessHeap(), 0, DeviceInterfaceDetailData);
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return TRUE;
 }
 
 DWORD
@@ -484,20 +530,23 @@
 SetupTermDefaultQueueCallback(Context);
 SetupCloseInfFile(hInf);
 
-Length = GetWindowsDirectoryW(szBuffer, MAX_PATH);
-if (!Length || Length >= MAX_PATH - 14)
-{
-return ERROR_GEN_FAILURE;
-}
-
-pBuffer = PathAddBackslashW(szBuffer);
-if (!pBuffer)
-{
-return ERROR_GEN_FAILURE;
-}
-
-wcscpy(pBuffer, L"inf\\machine.inf");
-InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM");
+if (!IsSoftwareBusPnpEnumeratorInstalled())
+{
+Length = GetWindowsDirectoryW(szBuffer, MAX_PATH);
+if (!Length || Length >= MAX_PATH - 14)
+{
+return ERROR_GEN_FAILURE;
+}
+
+pBuffer = PathAddBackslashW(szBuffer);
+if (!pBuffer)
+{
+return ERROR_GEN_FAILURE;
+}
+
+wcscpy(pBuffer, L"inf\\machine.inf");
+InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM");
+}
 
 hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
 if (!hSCManager)




[ros-diffs] [janderwald] 66600: [KS] - fix multiple bugs in software bus pnp enumerator [INF] - add wdmaud.sys as a client of the software bus pnp enumerator

2015-03-07 Thread janderwald
Author: janderwald
Date: Sat Mar  7 18:01:03 2015
New Revision: 66600

URL: http://svn.reactos.org/svn/reactos?rev=66600&view=rev
Log:
[KS]
- fix multiple bugs in software bus pnp enumerator 
[INF]
- add wdmaud.sys as a client of the software bus pnp enumerator

Modified:
trunk/reactos/drivers/ksfilter/ks/swenum.c
trunk/reactos/media/inf/wdmaudio.inf

Modified: trunk/reactos/drivers/ksfilter/ks/swenum.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/swenum.c?rev=66600&r1=66599&r2=66600&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] Sat Mar  7 
18:01:03 2015
@@ -98,7 +98,7 @@
 RtlInitUnicodeString(&ReferenceString, DeviceEntry->DeviceName);
 
 /* register device interface */
-Status = 
IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject, 
&BusInstanceEntry->InterfaceGuid, &ReferenceString, 
&BusInstanceEntry->SymbolicLink);
+Status = 
IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject, 
&DeviceEntry->DeviceGuid, NULL, &BusInstanceEntry->SymbolicLink);
 
 /* check for success */
 if (!NT_SUCCESS(Status))
@@ -231,7 +231,7 @@
 if (NT_SUCCESS(Status))
 {
 /* perform callback */
-Status = Callback(hNewKey, BusDeviceExtension, DeviceEntry, 
ReferenceString, KeyInfo->Name);
+Status = Callback(hNewKey, BusDeviceExtension, DeviceEntry, 
KeyInfo->Name, ReferenceString);
 
 /* should enumeration stop */
 if (!NT_SUCCESS(Status))
@@ -272,6 +272,8 @@
 
 /* check if the device is already present */
 Entry = DeviceEntry->DeviceInterfaceList.Flink;
+   DPRINT1("KspCreateDeviceAssociation ReferenceString %S\n", 
ReferenceString);
+   DPRINT1("KspCreateDeviceAssociation InterfaceString %S\n", 
InterfaceString);
 
 while(Entry != &DeviceEntry->DeviceInterfaceList)
 {
@@ -325,8 +327,8 @@
 IN PHANDLE hKey,
 IN PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension,
 IN PBUS_DEVICE_ENTRY DummyEntry,
-IN LPWSTR DeviceCategory,
-IN LPWSTR ReferenceString)
+IN LPWSTR InterfaceId,
+IN LPWSTR DeviceId)
 {
 LPWSTR DeviceName;
 SIZE_T Length;
@@ -338,7 +340,7 @@
 KIRQL OldLevel;
 
 /* first construct device name & reference guid */
-Length = wcslen(DeviceCategory) + wcslen(ReferenceString);
+Length = wcslen(DeviceId) + wcslen(InterfaceId);
 
 /* append '&' and null byte */
 Length += 2;
@@ -353,7 +355,9 @@
 }
 
 /* construct device name */
-swprintf(DeviceName, L"%s&%s", DeviceCategory, ReferenceString);
+wcscpy(DeviceName, DeviceId);
+wcscat(DeviceName, L"&");
+wcscat(DeviceName, InterfaceId);
 
 /* scan list and check if it is already present */
 Entry = BusDeviceExtension->Common.Entry.Flink;
@@ -391,15 +395,15 @@
 InitializeListHead(&DeviceEntry->IrpPendingList);
 
 /* copy device guid */
-RtlInitUnicodeString(&String, DeviceCategory);
+RtlInitUnicodeString(&String, DeviceId);
 RtlGUIDFromString(&String, &DeviceEntry->DeviceGuid);
 
 /* copy device names */
 DeviceEntry->DeviceName = DeviceName;
-DeviceEntry->Instance = (DeviceName + wcslen(DeviceCategory) + 1);
+DeviceEntry->Instance = (DeviceName + wcslen(DeviceId) + 1);
 
 /* copy name */
-DeviceEntry->BusId = AllocateItem(NonPagedPool, 
(wcslen(DeviceCategory) + 1) * sizeof(WCHAR));
+DeviceEntry->BusId = AllocateItem(NonPagedPool, (wcslen(DeviceId) + 1) 
* sizeof(WCHAR));
 if (!DeviceEntry->BusId)
 {
 /* no memory */
@@ -407,11 +411,11 @@
 FreeItem(DeviceEntry);
 return STATUS_INSUFFICIENT_RESOURCES;
 }
-wcscpy(DeviceEntry->BusId, DeviceCategory);
-}
-
-/* now enumerate the devices */
-Status = KspEnumerateBusRegistryKeys(hKey, ReferenceString, 
KspCreateDeviceAssociation, BusDeviceExtension, DeviceEntry);
+wcscpy(DeviceEntry->BusId, DeviceId);
+}
+
+/* now enumerate the interfaces */
+Status = KspEnumerateBusRegistryKeys(hKey, InterfaceId, 
KspCreateDeviceAssociation, BusDeviceExtension, DeviceEntry);
 
 /* check if list is empty */
 if (IsListEmpty(&DeviceEntry->DeviceInterfaceList))
@@ -466,7 +470,7 @@
 IN LPWSTR DeviceCategory,
 IN LPWSTR ReferenceString)
 {
-return KspEnumerateBusRegistryKeys(hKey, ReferenceString, 
KspCreateDeviceReference, BusDeviceExtension, DummyEntry);
+return KspEnumerateBusRegistryKeys(hKey, DeviceCategory, 
KspCreateDeviceReference, BusDeviceExtension, DummyEntry);
 }
 
 
@@ -1015,35 +1

[ros-diffs] [janderwald] 66599: [MMSYS] - install software bus pnp enumerator when an audio device is installed

2015-03-07 Thread janderwald
Author: janderwald
Date: Sat Mar  7 17:33:13 2015
New Revision: 66599

URL: http://svn.reactos.org/svn/reactos?rev=66599&view=rev
Log:
[MMSYS]
- install software bus pnp enumerator when an audio device is installed

Modified:
trunk/reactos/dll/cpl/mmsys/mmsys.c

Modified: trunk/reactos/dll/cpl/mmsys/mmsys.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/mmsys/mmsys.c?rev=66599&r1=66598&r2=66599&view=diff
==
--- trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/mmsys/mmsys.c [iso-8859-1] Sat Mar  7 17:33:13 2015
@@ -15,6 +15,7 @@
 #include 
 #include 
 
+#include 
 #include 
 #include 
 
@@ -87,6 +88,14 @@
UINT uNumberOfGuids,
HWPAGE_DISPLAYMODE DisplayMode);
 
+typedef BOOL (WINAPI *UpdateDriverForPlugAndPlayDevicesProto)(IN OPTIONAL HWND 
hwndParent,
+  IN LPCTSTR 
HardwareId,
+  IN LPCTSTR 
FullInfPath,
+  IN DWORD 
InstallFlags,
+  OUT OPTIONAL 
PBOOL bRebootRequired
+ );
+
+#define UPDATEDRIVERFORPLUGANDPLAYDEVICES "UpdateDriverForPlugAndPlayDevicesW"
 #define NUM_APPLETS(1)
 
 
@@ -328,6 +337,80 @@
 RegCloseKey(hKey);
 }
 
+DWORD
+InstallSoftwareBusPnpEnumerator(LPWSTR InfPath, LPCWSTR HardwareIdList)
+{
+HDEVINFO DeviceInfoSet = INVALID_HANDLE_VALUE;
+SP_DEVINFO_DATA DeviceInfoData;
+GUID ClassGUID;
+TCHAR ClassName[50];
+int Result = 0;
+HMODULE hModule = NULL;
+UpdateDriverForPlugAndPlayDevicesProto UpdateProc;
+BOOL reboot = FALSE;
+DWORD flags = 0;
+
+if 
(!SetupDiGetINFClass(InfPath,&ClassGUID,ClassName,sizeof(ClassName)/sizeof(ClassName[0]),0))
+{
+return -1;
+}
+
+DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID,0);
+if(DeviceInfoSet == INVALID_HANDLE_VALUE)
+{
+return -1;
+}
+
+DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+if (!SetupDiCreateDeviceInfo(DeviceInfoSet, ClassName, &ClassGUID, NULL, 
0, DICD_GENERATE_ID, &DeviceInfoData))
+{
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+return -1;
+}
+
+if(!SetupDiSetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, 
SPDRP_HARDWAREID, (LPBYTE)HardwareIdList, 
(lstrlen(HardwareIdList)+1+1)*sizeof(TCHAR)))
+{
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+return -1;
+}
+
+if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE, DeviceInfoSet, 
&DeviceInfoData))
+{
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+return -1;
+}
+
+if(GetFileAttributes(InfPath)==(DWORD)(-1)) {
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+return -1;
+}
+
+flags |= INSTALLFLAG_FORCE;
+hModule = LoadLibraryW(L"newdev.dll");
+if(!hModule) {
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+return -1;
+}
+
+UpdateProc = 
(UpdateDriverForPlugAndPlayDevicesProto)GetProcAddress(hModule,UPDATEDRIVERFORPLUGANDPLAYDEVICES);
+if(!UpdateProc)
+{
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+FreeLibrary(hModule);
+return -1;
+}
+
+if(!UpdateProc(NULL, HardwareIdList, InfPath, flags, &reboot))
+{
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+FreeLibrary(hModule);
+return -1;
+}
+
+FreeLibrary(hModule);
+SetupDiDestroyDeviceInfoList(DeviceInfoSet);
+return Result;
+}
 
 DWORD
 MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
@@ -401,7 +484,20 @@
 SetupTermDefaultQueueCallback(Context);
 SetupCloseInfFile(hInf);
 
-
+Length = GetWindowsDirectoryW(szBuffer, MAX_PATH);
+if (!Length || Length >= MAX_PATH - 14)
+{
+return ERROR_GEN_FAILURE;
+}
+
+pBuffer = PathAddBackslashW(szBuffer);
+if (!pBuffer)
+{
+return ERROR_GEN_FAILURE;
+}
+
+wcscpy(pBuffer, L"inf\\machine.inf");
+InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM");
 
 hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
 if (!hSCManager)




[ros-diffs] [janderwald] 66559: [KS] - fix multiple bugs in the software bus enumerator

2015-03-03 Thread janderwald
Author: janderwald
Date: Tue Mar  3 21:07:48 2015
New Revision: 66559

URL: http://svn.reactos.org/svn/reactos?rev=66559&view=rev
Log:
[KS]
- fix multiple bugs in the software bus enumerator

Modified:
trunk/reactos/drivers/ksfilter/ks/swenum.c
trunk/reactos/drivers/ksfilter/swenum/swenum.c

Modified: trunk/reactos/drivers/ksfilter/ks/swenum.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/swenum.c?rev=66559&r1=66558&r2=66559&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/swenum.c  [iso-8859-1] Tue Mar  3 
21:07:48 2015
@@ -258,7 +258,7 @@
 IN LPWSTR ReferenceString,
 IN LPWSTR InterfaceString)
 {
-GUID DeviceGuid;
+GUID InterfaceGUID;
 NTSTATUS Status;
 PLIST_ENTRY Entry;
 PBUS_INSTANCE_ENTRY CurEntry;
@@ -268,7 +268,7 @@
 RtlInitUnicodeString(&DeviceName, InterfaceString);
 
 /* first convert device name to guid */
-RtlGUIDFromString(&DeviceName, &DeviceGuid);
+RtlGUIDFromString(&DeviceName, &InterfaceGUID);
 
 /* check if the device is already present */
 Entry = DeviceEntry->DeviceInterfaceList.Flink;
@@ -278,7 +278,7 @@
  /* get offset */
  CurEntry = (PBUS_INSTANCE_ENTRY)CONTAINING_RECORD(Entry, 
BUS_INSTANCE_ENTRY, Entry);
 
- if (IsEqualGUIDAligned(&CurEntry->InterfaceGuid, &DeviceGuid))
+ if (IsEqualGUIDAligned(&CurEntry->InterfaceGuid, &InterfaceGUID))
  {
  /* entry already exists */
  return STATUS_SUCCESS;
@@ -298,7 +298,7 @@
 }
 
 /* store guid */
-RtlMoveMemory(&CurEntry->InterfaceGuid, &DeviceGuid, sizeof(GUID));
+RtlMoveMemory(&CurEntry->InterfaceGuid, &InterfaceGUID, sizeof(GUID));
 
 /* now register the association */
 Status = KspRegisterDeviceAssociation(BusDeviceExtension, DeviceEntry, 
CurEntry);
@@ -391,7 +391,7 @@
 InitializeListHead(&DeviceEntry->IrpPendingList);
 
 /* copy device guid */
-RtlInitUnicodeString(&String, ReferenceString);
+RtlInitUnicodeString(&String, DeviceCategory);
 RtlGUIDFromString(&String, &DeviceEntry->DeviceGuid);
 
 /* copy device names */
@@ -1110,10 +1110,14 @@
 return;
 }
 
+/* now scan the bus */
+KspScanBus(Context->BusDeviceExtension);
+
 /* acquire device entry lock */
 KeAcquireSpinLock(&Context->BusDeviceExtension->Lock, &OldLevel);
 
 /* now iterate all device entries */
+ASSERT(!IsListEmpty(&Context->BusDeviceExtension->Common.Entry));
 Entry = Context->BusDeviceExtension->Common.Entry.Flink;
 while(Entry != &Context->BusDeviceExtension->Common.Entry)
 {
@@ -1514,8 +1518,6 @@
 /* get device extension */
 DeviceExtension = (PDEV_EXTENSION)BusDeviceObject->DeviceExtension;
 
-DPRINT1("DeviceExtension %p BusDeviceExtension %p\n", DeviceExtension, 
DeviceExtension->Ext);
-
 /* store bus device extension */
 DeviceExtension->Ext = (PCOMMON_DEVICE_EXTENSION)BusDeviceExtension;
 
@@ -1567,7 +1569,7 @@
 /* check for success */
 if (!NT_SUCCESS(Status))
 {
-
+DPRINT1("IoRegisterDeviceInterface failed Status %lx\n", Status);
 FreeItem(BusDeviceExtension->ServicePath.Buffer);
 FreeItem(BusDeviceExtension);
 return Status;
@@ -1578,6 +1580,7 @@
 
 if (!NT_SUCCESS(Status))
 {
+DPRINT1("IoSetDeviceInterfaceState failed Status %lx\n", Status);
 FreeItem(BusDeviceExtension->ServicePath.Buffer);
 FreeItem(BusDeviceExtension);
 return Status;
@@ -1618,6 +1621,7 @@
 if (!BusDeviceExtension->PnpDeviceObject)
 {
 /* failed to attach device */
+DPRINT1("IoAttachDeviceToDeviceStack failed with %x\n", Status);
 if (BusDeviceExtension->DeviceInterfaceLink.Buffer)
 {
 
IoSetDeviceInterfaceState(&BusDeviceExtension->DeviceInterfaceLink, FALSE);
@@ -1753,8 +1757,8 @@
 /* perform access check */
 if (!SeSinglePrivilegeCheck(luid, Mode))
 {
-/* insufficient privileges */
-return STATUS_PRIVILEGE_NOT_HELD;
+/* FIXME insufficient privileges */
+//return STATUS_PRIVILEGE_NOT_HELD;
 }
 
 /* get device extension */
@@ -1848,6 +1852,13 @@
 
 /* sanity checks */
 ASSERT(IoStack->FileObject);
+if (IoStack->FileObject->FileName.Buffer == NULL)
+{
+ DPRINT1("KsServiceBusEnumCreateRequest PNP Hack\n");
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ return STATUS_SUCCESS;
+}
+
 ASSERT(IoStack->FileObject

[ros-diffs] [janderwald] 66554: [NTOS] - fix bug

2015-03-03 Thread janderwald
Author: janderwald
Date: Tue Mar  3 16:39:31 2015
New Revision: 66554

URL: http://svn.reactos.org/svn/reactos?rev=66554&view=rev
Log:
[NTOS]
- fix bug

Modified:
trunk/reactos/ntoskrnl/io/iomgr/deviface.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/deviface.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/deviface.c?rev=66554&r1=66553&r2=66554&view=diff
==
--- trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] Tue Mar  3 
16:39:31 2015
@@ -1330,8 +1330,8 @@
 
 /* Symbolic link name is \??\ACPI#PNP0501#1#{GUID}\ReferenceString */
 /* Get GUID from SymbolicLinkName */
-StartPosition = wcsrchr(SymbolicLinkName->Buffer, L'{');
-EndPosition = wcsrchr(SymbolicLinkName->Buffer, L'}');
+StartPosition = wcschr(SymbolicLinkName->Buffer, L'{');
+EndPosition = wcschr(SymbolicLinkName->Buffer, L'}');
 if (!StartPosition ||!EndPosition || StartPosition > EndPosition)
 {
 DPRINT1("IoSetDeviceInterfaceState() returning 
STATUS_INVALID_PARAMETER_1\n");




[ros-diffs] [janderwald] 66545: [NTOS] - use IopGetDeviceObjectFromDeviceInstance to retrieve PDO

2015-03-02 Thread janderwald
Author: janderwald
Date: Mon Mar  2 19:14:16 2015
New Revision: 66545

URL: http://svn.reactos.org/svn/reactos?rev=66545&view=rev
Log:
[NTOS]
- use IopGetDeviceObjectFromDeviceInstance to retrieve PDO

Modified:
trunk/reactos/ntoskrnl/io/iomgr/deviface.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/deviface.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/deviface.c?rev=66545&r1=66544&r2=66545&view=diff
==
--- trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] Mon Mar  2 
19:14:16 2015
@@ -17,6 +17,9 @@
 #include 
 
 /* FUNCTIONS */
+
+PDEVICE_OBJECT
+IopGetDeviceObjectFromDeviceInstance(PUNICODE_STRING DeviceInstance);
 
 static PWCHAR BaseKeyString = 
L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\DeviceClasses\\";
 
@@ -1308,17 +1311,17 @@
   IN BOOLEAN Enable)
 {
 PDEVICE_OBJECT PhysicalDeviceObject;
-PFILE_OBJECT FileObject;
 UNICODE_STRING GuidString;
 PWCHAR StartPosition;
 PWCHAR EndPosition;
 NTSTATUS Status;
 LPCGUID EventGuid;
 HANDLE InstanceHandle, ControlHandle;
-UNICODE_STRING KeyName;
+UNICODE_STRING KeyName, DeviceInstance;
 OBJECT_ATTRIBUTES ObjectAttributes;
-ULONG LinkedValue;
+ULONG LinkedValue, Index;
 GUID DeviceGuid;
+
 
 if (SymbolicLinkName == NULL)
 return STATUS_INVALID_PARAMETER_1;
@@ -1381,23 +1384,38 @@
 return Status;
 }
 
-/* Get pointer to the PDO */
-Status = IoGetDeviceObjectPointer(
-SymbolicLinkName,
-0, /* DesiredAccess */
-&FileObject,
-&PhysicalDeviceObject);
-if (!NT_SUCCESS(Status))
-{
-DPRINT1("IoGetDeviceObjectPointer() failed with status 0x%08lx\n", 
Status);
-return Status;
-}
-
+DeviceInstance.Buffer = ExAllocatePool(PagedPool, (ULONG_PTR)StartPosition 
- (ULONG_PTR)SymbolicLinkName->Buffer);
+if (DeviceInstance.Buffer == NULL)
+{
+/* no memory */
+return STATUS_INSUFFICIENT_RESOURCES;
+}
+
+DeviceInstance.MaximumLength = DeviceInstance.Length = 
((ULONG_PTR)StartPosition - (ULONG_PTR)SymbolicLinkName->Buffer) - 5 * 
sizeof(WCHAR);
+RtlCopyMemory(DeviceInstance.Buffer, &SymbolicLinkName->Buffer[4], 
DeviceInstance.Length);
+for(Index = 0; Index < DeviceInstance.Length / sizeof(WCHAR); Index++)
+{
+if (DeviceInstance.Buffer[Index] == L'#')
+{
+DeviceInstance.Buffer[Index] = L'\\';
+}
+}
+
+PhysicalDeviceObject = 
IopGetDeviceObjectFromDeviceInstance(&DeviceInstance);
+
+if (!PhysicalDeviceObject)
+{
+DPRINT1("IopGetDeviceObjectFromDeviceInstance failed to find status 
%wZ\n", &DeviceInstance);
+ExFreePool(DeviceInstance.Buffer);
+return STATUS_NOT_FOUND;
+}
+
+ExFreePool(DeviceInstance.Buffer);
 Status = RtlGUIDFromString(&GuidString, &DeviceGuid);
 if (!NT_SUCCESS(Status))
 {
 DPRINT1("RtlGUIDFromString() failed with status 0x%08lx\n", Status);
-ObDereferenceObject(FileObject);
+ObDereferenceObject(PhysicalDeviceObject);
 return Status;
 }
 
@@ -1409,7 +1427,7 @@
 &DeviceGuid,
 (PVOID)SymbolicLinkName);
 
-ObDereferenceObject(FileObject);
+ObDereferenceObject(PhysicalDeviceObject);
 DPRINT("Status %x\n", Status);
 return STATUS_SUCCESS;
 }




[ros-diffs] [janderwald] 66546: [HIDCLASS] - remove no longer required pnp hack

2015-03-02 Thread janderwald
Author: janderwald
Date: Mon Mar  2 19:16:45 2015
New Revision: 66546

URL: http://svn.reactos.org/svn/reactos?rev=66546&view=rev
Log:
[HIDCLASS]
- remove no longer required pnp hack

Modified:
trunk/reactos/drivers/hid/hidclass/hidclass.c

Modified: trunk/reactos/drivers/hid/hidclass/hidclass.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/hid/hidclass/hidclass.c?rev=66546&r1=66545&r2=66546&view=diff
==
--- trunk/reactos/drivers/hid/hidclass/hidclass.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/hid/hidclass/hidclass.c   [iso-8859-1] Mon Mar  2 
19:16:45 2015
@@ -146,23 +146,12 @@
 CommonDeviceExtension = DeviceObject->DeviceExtension;
 if (CommonDeviceExtension->IsFDO)
 {
-#ifndef __REACTOS__
-
  //
  // only supported for PDO
  //
  Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
  IoCompleteRequest(Irp, IO_NO_INCREMENT);
  return STATUS_UNSUCCESSFUL;
-#else
- //
- // ReactOS PnP manager [...]
- //
- DPRINT1("[HIDCLASS] PnP HACK\n");
- Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return STATUS_SUCCESS;
-#endif
 }
 
 //




[ros-diffs] [janderwald] 66521: [STREAMCI] - install driver's inf

2015-03-01 Thread janderwald
Author: janderwald
Date: Sun Mar  1 15:26:49 2015
New Revision: 66521

URL: http://svn.reactos.org/svn/reactos?rev=66521&view=rev
Log:
[STREAMCI]
- install driver's inf

Modified:
trunk/reactos/dll/win32/streamci/streamci.c

Modified: trunk/reactos/dll/win32/streamci/streamci.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/streamci/streamci.c?rev=66521&r1=66520&r2=66521&view=diff
==
--- trunk/reactos/dll/win32/streamci/streamci.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/streamci/streamci.c [iso-8859-1] Sun Mar  1 
15:26:49 2015
@@ -130,6 +130,53 @@
 return dwResult;
 }
 
+DWORD
+InstallSoftwareDeviceInterfaceInf(IN LPWSTR InfName,
+  IN LPWSTR SectionName)
+{
+HDEVINFO hDevInfo;
+HINF hInf;
+HKEY hKey;
+SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
+GUID SWBusGuid = {STATIC_BUSID_SoftwareDeviceEnumerator};
+
+hDevInfo = SetupDiGetClassDevsW(&SWBusGuid, NULL, NULL, 0);
+if (!hDevInfo)
+{
+// failed
+return GetLastError();
+}
+
+DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+if (!SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &SWBusGuid, 0, 
&DeviceInterfaceData))
+{
+// failed
+return GetLastError();
+}
+
+hInf = SetupOpenInfFileW(InfName, NULL, INF_STYLE_WIN4, NULL);
+if (hInf == INVALID_HANDLE_VALUE)
+{
+SetupDiDestroyDeviceInfoList(hDevInfo);
+return GetLastError();
+}
+
+//
+// FIXME check if interface is already installed
+//
+
+hKey = SetupDiCreateDeviceInterfaceRegKeyW(hDevInfo, &DeviceInterfaceData, 
0, KEY_ALL_ACCESS, hInf, SectionName);
+
+SetupCloseInfFile(hInf);
+SetupDiDestroyDeviceInfoList(hDevInfo);
+if (hKey != INVALID_HANDLE_VALUE)
+{
+RegCloseKey(hKey);
+}
+return ERROR_SUCCESS;
+}
+
+
 VOID
 WINAPI
 StreamingDeviceSetupW(IN HWND hwnd, 
@@ -137,11 +184,11 @@
  IN LPWSTR lpszCmdLine, 
  IN int nCmdShow)
 {
-DWORD Length;
+DWORD Length, dwResult;
 LPWSTR pCmdLine;
 LPWSTR pStr; 
 GUID Guids[2];
-//WCHAR DevicePath[MAX_PATH];
+WCHAR DevicePath[MAX_PATH];
 HRESULT hResult;
 DWORD Index;
 
@@ -187,10 +234,19 @@
 
 }while(Index < 2);
 
-
-hResult = InstallSoftwareDeviceInterface(&Guids[0], &Guids[1], pStr);
-
-// FIXME
-// install inf section
-
+
+dwResult = InstallSoftwareDeviceInterface(&Guids[0], &Guids[1], pStr);
+if (dwResult == ERROR_SUCCESS)
+{
+pStr = wcstok(NULL, L",\t\"");
+if (pStr != NULL)
+{
+wcscpy(DevicePath, pStr);
+pStr = wcstok(NULL, L",\t\"");
+if (pStr != NULL)
+{
+dwResult = InstallSoftwareDeviceInterfaceInf(DevicePath, pStr);
+}
+}
+}
 }




[ros-diffs] [janderwald] 66519: [NTOS] - plug leak in error case

2015-03-01 Thread janderwald
Author: janderwald
Date: Sun Mar  1 13:53:16 2015
New Revision: 66519

URL: http://svn.reactos.org/svn/reactos?rev=66519&view=rev
Log:
[NTOS]
- plug leak in error case

Modified:
trunk/reactos/ntoskrnl/io/iomgr/deviface.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/deviface.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/deviface.c?rev=66519&r1=66518&r2=66519&view=diff
==
--- trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] Sun Mar  1 
13:53:16 2015
@@ -1397,6 +1397,7 @@
 if (!NT_SUCCESS(Status))
 {
 DPRINT1("RtlGUIDFromString() failed with status 0x%08lx\n", Status);
+ObDereferenceObject(FileObject);
 return Status;
 }
 




[ros-diffs] [janderwald] 66492: [STREAMCI] - minor changes

2015-02-28 Thread janderwald
Author: janderwald
Date: Sat Feb 28 11:28:06 2015
New Revision: 66492

URL: http://svn.reactos.org/svn/reactos?rev=66492&view=rev
Log:
[STREAMCI]
- minor changes

Modified:
trunk/reactos/dll/win32/streamci/streamci.c

Modified: trunk/reactos/dll/win32/streamci/streamci.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/streamci/streamci.c?rev=66492&r1=66491&r2=66492&view=diff
==
--- trunk/reactos/dll/win32/streamci/streamci.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/streamci/streamci.c [iso-8859-1] Sat Feb 28 
11:28:06 2015
@@ -1,3 +1,12 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT: ReactOS Configuration of network devices
+ * FILE:dll/win32/streamci/streamci.c
+ * PURPOSE: Streaming device class installer
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderw...@reactos.org)
+ */
+
 #include "precomp.h"
 
 DWORD
@@ -56,7 +65,7 @@
 PSWENUM_INSTALL_INTERFACE InstallInterface;
 DWORD dwResult;
 
-hDevInfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_SYSTEM, NULL, NULL,  
DIGCF_DEVICEINTERFACE| DIGCF_PRESENT);
+hDevInfo = SetupDiGetClassDevsW(&SWBusGuid, NULL, NULL,  
DIGCF_DEVICEINTERFACE| DIGCF_PRESENT);
 if (!hDevInfo)
 {
 // failed
@@ -79,6 +88,7 @@
 return GetLastError();
 }
 
+DeviceInterfaceDetailData->cbSize = 
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
 if (!SetupDiGetDeviceInterfaceDetailW(hDevInfo,  &DeviceInterfaceData, 
DeviceInterfaceDetailData,MAX_PATH * sizeof(WCHAR) + 
sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W), NULL, NULL))
 {
 // failed
@@ -86,7 +96,6 @@
 SetupDiDestroyDeviceInfoList(hDevInfo);
 return GetLastError();
 }
-
 
 hDevice = CreateFileW(DeviceInterfaceDetailData->DevicePath, GENERIC_READ 
| GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 
FILE_FLAG_OVERLAPPED|FILE_ATTRIBUTE_NORMAL, NULL);
 if (hDevice == INVALID_HANDLE_VALUE)




[ros-diffs] [janderwald] 66483: [USBCCGP] - reset interface count before loop - add extra checks

2015-02-28 Thread janderwald
Author: janderwald
Date: Sat Feb 28 09:48:16 2015
New Revision: 66483

URL: http://svn.reactos.org/svn/reactos?rev=66483&view=rev
Log:
[USBCCGP]
- reset interface count before loop
- add extra checks

Modified:
trunk/reactos/drivers/usb/usbccgp/descriptor.c

Modified: trunk/reactos/drivers/usb/usbccgp/descriptor.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbccgp/descriptor.c?rev=66483&r1=66482&r2=66483&view=diff
==
--- trunk/reactos/drivers/usb/usbccgp/descriptor.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbccgp/descriptor.c  [iso-8859-1] Sat Feb 28 
09:48:16 2015
@@ -326,6 +326,11 @@
 // count all interface descriptors
 //
 DescriptorCount = ConfigurationDescriptor->bNumInterfaces;
+if (DescriptorCount == 0)
+{
+DPRINT1("[USBCCGP] DescriptorCount is zero\n");
+return STATUS_INVALID_PARAMETER;
+}
 
 //
 // allocate array holding the interface descriptors
@@ -338,6 +343,11 @@
 //
 return STATUS_INSUFFICIENT_RESOURCES;
 }
+
+//
+// reset interface list count
+//
+FDODeviceExtension->InterfaceListCount = 0;
 
 do
 {
@@ -350,6 +360,7 @@
 //
 // store in interface list
 //
+ASSERT(FDODeviceExtension->InterfaceListCount < DescriptorCount);
 
FDODeviceExtension->InterfaceList[FDODeviceExtension->InterfaceListCount].InterfaceDescriptor
 = InterfaceDescriptor;
 FDODeviceExtension->InterfaceListCount++;
 }




[ros-diffs] [janderwald] 66413: [NEWDEV] - fix hardcoded leftover spotted by ThFabba

2015-02-22 Thread janderwald
Author: janderwald
Date: Sun Feb 22 17:55:23 2015
New Revision: 66413

URL: http://svn.reactos.org/svn/reactos?rev=66413&view=rev
Log:
[NEWDEV]
- fix hardcoded leftover spotted by ThFabba

Modified:
trunk/reactos/dll/win32/newdev/wizard.c

Modified: trunk/reactos/dll/win32/newdev/wizard.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/newdev/wizard.c?rev=66413&r1=66412&r2=66413&view=diff
==
--- trunk/reactos/dll/win32/newdev/wizard.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/newdev/wizard.c [iso-8859-1] Sun Feb 22 
17:55:23 2015
@@ -1302,7 +1302,7 @@
 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
 psp.pfnDlgProc = NeedRebootDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_NEEDREBOOT);
-ahpsp[IDD_NEEDREBOOT-200] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_NEEDREBOOT-IDD_FIRSTPAGE] = CreatePropertySheetPage(&psp);
 
 /* Create the Finish page */
 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;




[ros-diffs] [janderwald] 66412: [NEWDEV] - fix 'first hardware page' not shown bug

2015-02-22 Thread janderwald
Author: janderwald
Date: Sun Feb 22 17:53:17 2015
New Revision: 66412

URL: http://svn.reactos.org/svn/reactos?rev=66412&view=rev
Log:
[NEWDEV]
- fix 'first hardware page' not shown bug

Modified:
trunk/reactos/dll/win32/newdev/resource.h
trunk/reactos/dll/win32/newdev/wizard.c

Modified: trunk/reactos/dll/win32/newdev/resource.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/newdev/resource.h?rev=66412&r1=66411&r2=66412&view=diff
==
--- trunk/reactos/dll/win32/newdev/resource.h   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/newdev/resource.h   [iso-8859-1] Sun Feb 22 
17:53:17 2015
@@ -18,15 +18,16 @@
 #define IDC_COMBO_PATH   2010
 #define IDC_FINISHTITLE  2011
 
-#define IDD_WELCOMEPAGE   0
-#define IDD_CHSOURCE  1
-#define IDD_SEARCHDRV 2
-#define IDD_INSTALLDRV3
-#define IDD_NODRIVER  4
-#define IDD_INSTALLFAILED 5
-#define IDD_NEEDREBOOT6
-#define IDD_FINISHPAGE7
-#define IDD_MAXIMUMPAGE   IDD_FINISHPAGE
+#define IDD_WELCOMEPAGE   200
+#define IDD_CHSOURCE  201
+#define IDD_SEARCHDRV 202
+#define IDD_INSTALLDRV203
+#define IDD_NODRIVER  204
+#define IDD_INSTALLFAILED 205
+#define IDD_NEEDREBOOT206
+#define IDD_FINISHPAGE207
+#define IDD_FIRSTPAGE IDD_WELCOMEPAGE
+#define IDD_MAXIMUMPAGE   7
 
 #define IDS_INSTALLWIZARDTITLE 1000
 #define IDS_UPDATEWIZARDTITLE  1001

Modified: trunk/reactos/dll/win32/newdev/wizard.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/newdev/wizard.c?rev=66412&r1=66411&r2=66412&view=diff
==
--- trunk/reactos/dll/win32/newdev/wizard.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/newdev/wizard.c [iso-8859-1] Sun Feb 22 
17:53:17 2015
@@ -1251,6 +1251,9 @@
 HPROPSHEETPAGE ahpsp[IDD_MAXIMUMPAGE + 1];
 PROPSHEETPAGE psp;
 
+/* zero based index */
+startPage -= IDD_FIRSTPAGE;
+
 /* Create the Welcome page */
 ZeroMemory(&psp, sizeof(PROPSHEETPAGE));
 psp.dwSize = sizeof(PROPSHEETPAGE);
@@ -1260,52 +1263,52 @@
 psp.pszTitle = MAKEINTRESOURCE(DevInstData->bUpdate ? 
IDS_UPDATEWIZARDTITLE : IDS_INSTALLWIZARDTITLE);
 psp.pfnDlgProc = WelcomeDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_WELCOMEPAGE);
-ahpsp[IDD_WELCOMEPAGE] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_WELCOMEPAGE-IDD_FIRSTPAGE] = CreatePropertySheetPage(&psp);
 
 /* Create the Select Source page */
 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_CHSOURCE_TITLE);
 psp.pfnDlgProc = CHSourceDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_CHSOURCE);
-ahpsp[IDD_CHSOURCE] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_CHSOURCE-IDD_FIRSTPAGE] = CreatePropertySheetPage(&psp);
 
 /* Create the Search driver page */
 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_SEARCHDRV_TITLE);
 psp.pfnDlgProc = SearchDrvDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_SEARCHDRV);
-ahpsp[IDD_SEARCHDRV] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_SEARCHDRV-IDD_FIRSTPAGE] = CreatePropertySheetPage(&psp);
 
 /* Create the Install driver page */
 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_INSTALLDRV_TITLE);
 psp.pfnDlgProc = InstallDrvDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLDRV);
-ahpsp[IDD_INSTALLDRV] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_INSTALLDRV-IDD_FIRSTPAGE] = CreatePropertySheetPage(&psp);
 
 /* Create the No driver page */
 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
 psp.pfnDlgProc = NoDriverDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_NODRIVER);
-ahpsp[IDD_NODRIVER] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_NODRIVER-IDD_FIRSTPAGE] = CreatePropertySheetPage(&psp);
 
 /* Create the Install failed page */
 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
 psp.pfnDlgProc = InstallFailedDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLFAILED);
-ahpsp[IDD_INSTALLFAILED] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_INSTALLFAILED-IDD_FIRSTPAGE] = CreatePropertySheetPage(&psp);
 
 /* Create the Need reboot page */
 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
 psp.pfnDlgProc = NeedRebootDlgProc;
 psp.pszTemplate = MAKEINTRESOURCE(IDD_NEEDREBOOT);
-ahpsp[IDD_NEEDREBOOT] = CreatePropertySheetPage(&psp);
+ahpsp[IDD_NEEDREBOOT-200] = CreatePropertySheetPage(&psp);
 
 /* Create the Finish page */
 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
 psp.pfnDlgProc = FinishDlgProc;
 psp.pszTemplate = MA

[ros-diffs] [janderwald] 66401: [KS] - dont access pin descriptor beyond size - found with special pool

2015-02-22 Thread janderwald
Author: janderwald
Date: Sun Feb 22 10:16:46 2015
New Revision: 66401

URL: http://svn.reactos.org/svn/reactos?rev=66401&view=rev
Log:
[KS]
- dont access pin descriptor beyond size
- found with special pool

Modified:
trunk/reactos/drivers/ksfilter/ks/connectivity.c

Modified: trunk/reactos/drivers/ksfilter/ks/connectivity.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/connectivity.c?rev=66401&r1=66400&r2=66401&view=diff
==
--- trunk/reactos/drivers/ksfilter/ks/connectivity.c[iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/connectivity.c[iso-8859-1] Sun Feb 22 
10:16:46 2015
@@ -350,6 +350,13 @@
 return STATUS_INVALID_PARAMETER;
 }
 }
+else
+{
+(*(PULONG)Buffer) = DescriptorsCount;
+Irp->IoStatus.Information = sizeof(ULONG);
+return STATUS_SUCCESS;
+}
+
 
 if (DescriptorSize == sizeof(KSPIN_DESCRIPTOR))
 {
@@ -364,11 +371,6 @@
 
 switch(Property->Id)
 {
-case KSPROPERTY_PIN_CTYPES:
-(*(PULONG)Buffer) = DescriptorsCount;
-Irp->IoStatus.Information = sizeof(ULONG);
-Status = STATUS_SUCCESS;
-break;
 case KSPROPERTY_PIN_DATAFLOW:
 
 Size = sizeof(KSPIN_DATAFLOW);




[ros-diffs] [janderwald] 66395: [INF] - add swenum to critical device database

2015-02-21 Thread janderwald
Author: janderwald
Date: Sat Feb 21 17:54:42 2015
New Revision: 66395

URL: http://svn.reactos.org/svn/reactos?rev=66395&view=rev
Log:
[INF]
- add swenum to critical device database

Modified:
trunk/reactos/boot/bootdata/hivesys.inf
trunk/reactos/boot/bootdata/txtsetup.sif

Modified: trunk/reactos/boot/bootdata/hivesys.inf
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesys.inf?rev=66395&r1=66394&r2=66395&view=diff
==
--- trunk/reactos/boot/bootdata/hivesys.inf [iso-8859-1] (original)
+++ trunk/reactos/boot/bootdata/hivesys.inf [iso-8859-1] Sat Feb 21 
17:54:42 2015
@@ -97,6 +97,10 @@
 
 
HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F03","Service",0x,"i8042prt"
 
HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F03","ClassGUID",0x,"{4D36E96F-E325-11CE-BFC1-08002BE10318}"
+
+HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\ROOT#SWENUM","Service",0x,"swenum"
+HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\ROOT#SWENUM","ClassGUID",0x,"{4d36e97d-e325-11ce-bfc1-08002be10318}"
+
 
 HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot","AlternateShell",2,"cmd.exe"
 
@@ -1335,6 +1339,13 @@
 
 ; PNP Root device
 HKLM,"SYSTEM\CurrentControlSet\Enum\HTREE\ROOT\0","",0x,""
+
+; SWENUM driver
+HKLM,"SYSTEM\CurrentControlSet\Services\swenum","ErrorControl",0x00010001,0x0001
+HKLM,"SYSTEM\CurrentControlSet\Services\swenum","ImagePath",0x0002,"system32\drivers\swenum.sys"
+HKLM,"SYSTEM\CurrentControlSet\Services\swenum","Start",0x00010001,0x
+HKLM,"SYSTEM\CurrentControlSet\Services\swenum","Type",0x00010001,0x0001
+
 
 ; Afd driver
 
HKLM,"SYSTEM\CurrentControlSet\Services\Afd","ErrorControl",0x00010001,0x0001

Modified: trunk/reactos/boot/bootdata/txtsetup.sif
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/txtsetup.sif?rev=66395&r1=66394&r2=66395&view=diff
==
--- trunk/reactos/boot/bootdata/txtsetup.sif[iso-8859-1] (original)
+++ trunk/reactos/boot/bootdata/txtsetup.sif[iso-8859-1] Sat Feb 21 
17:54:42 2015
@@ -90,6 +90,7 @@
 USB\Class_03 = hidusb
 GENERIC_HID_DEVICE = hidusb
 *PNP0303 = i8042prt
+ROOT\SWENUM = swenum
 
 [BootBusExtenders.Load]
 acpi = acpi.sys




[ros-diffs] [janderwald] 66381: [STREAMCI] - hackfix build #2

2015-02-21 Thread janderwald
Author: janderwald
Date: Sat Feb 21 10:34:13 2015
New Revision: 66381

URL: http://svn.reactos.org/svn/reactos?rev=66381&view=rev
Log:
[STREAMCI]
- hackfix build #2

Modified:
trunk/reactos/dll/win32/streamci/streamci.c

Modified: trunk/reactos/dll/win32/streamci/streamci.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/streamci/streamci.c?rev=66381&r1=66380&r2=66381&view=diff
==
--- trunk/reactos/dll/win32/streamci/streamci.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/streamci/streamci.c [iso-8859-1] Sat Feb 21 
10:34:13 2015
@@ -50,7 +50,7 @@
 {
 HDEVINFO hDevInfo;
 SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
-GUID SWBusGuid = {STATIC_BUSID_SoftwareDeviceEnumerator};
+   // GUID SWBusGuid = {STATIC_BUSID_SoftwareDeviceEnumerator};
 PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData;
 HANDLE hDevice;
 PSWENUM_INSTALL_INTERFACE InstallInterface;
@@ -64,7 +64,7 @@
 }
 
 DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
-if (!SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &SWBusGuid, 0, 
&DeviceInterfaceData))
+if (!SetupDiEnumDeviceInterfaces(hDevInfo, NULL, NULL, 0, 
&DeviceInterfaceData))
 {
 // failed
 SetupDiDestroyDeviceInfoList(hDevInfo);




[ros-diffs] [janderwald] 66380: [PSDK] - fix build

2015-02-21 Thread janderwald
Author: janderwald
Date: Sat Feb 21 10:14:00 2015
New Revision: 66380

URL: http://svn.reactos.org/svn/reactos?rev=66380&view=rev
Log:
[PSDK]
- fix build

Modified:
trunk/reactos/include/ddk/swenum.h

Modified: trunk/reactos/include/ddk/swenum.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/swenum.h?rev=66380&r1=66379&r2=66380&view=diff
==
--- trunk/reactos/include/ddk/swenum.h  [iso-8859-1] (original)
+++ trunk/reactos/include/ddk/swenum.h  [iso-8859-1] Sat Feb 21 10:14:00 2015
@@ -23,7 +23,7 @@
 #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard
 #else
 #define STATIC_BUSID_SoftwareDeviceEnumerator \
-  0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
+0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 
0x00}
 #endif /* _KS_ */
 
 #ifdef _NTDDK_




[ros-diffs] [janderwald] 66379: [STREAMCI] - start implement streaming device class installer

2015-02-21 Thread janderwald
Author: janderwald
Date: Sat Feb 21 10:09:36 2015
New Revision: 66379

URL: http://svn.reactos.org/svn/reactos?rev=66379&view=rev
Log:
[STREAMCI]
- start implement streaming device class installer

Added:
trunk/reactos/dll/win32/streamci/   (with props)
trunk/reactos/dll/win32/streamci/CMakeLists.txt   (with props)
trunk/reactos/dll/win32/streamci/precomp.h   (with props)
trunk/reactos/dll/win32/streamci/streamci.c   (with props)
trunk/reactos/dll/win32/streamci/streamci.rc   (with props)
trunk/reactos/dll/win32/streamci/streamci.spec   (with props)
Modified:
trunk/reactos/dll/win32/CMakeLists.txt

Modified: trunk/reactos/dll/win32/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/CMakeLists.txt?rev=66379&r1=66378&r2=66379&view=diff
==
--- trunk/reactos/dll/win32/CMakeLists.txt  [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/CMakeLists.txt  [iso-8859-1] Sat Feb 21 
10:09:36 2015
@@ -196,6 +196,7 @@
 add_subdirectory(stdole2.tlb)
 add_subdirectory(stdole32.tlb)
 add_subdirectory(sti)
+add_subdirectory(streamci)
 add_subdirectory(sxs)
 add_subdirectory(syssetup)
 add_subdirectory(t2embed)

Propchange: trunk/reactos/dll/win32/streamci/
--
--- bugtraq:logregex(added)
+++ bugtraq:logregexSat Feb 21 10:09:36 2015
@@ -0,0 +1 @@
+((CORE|ROSTESTS|ROSAPPS)-\d+)(,? ?((CORE|ROSTESTS|ROSAPPS)-\d+))*(,? ?(and |or 
)?((CORE|ROSTESTS|ROSAPPS)-\d+))?

Propchange: trunk/reactos/dll/win32/streamci/
--
bugtraq:message = See issue %BUGID% for more details.

Propchange: trunk/reactos/dll/win32/streamci/
--
bugtraq:url = https://jira.reactos.org/browse/%BUGID%

Propchange: trunk/reactos/dll/win32/streamci/
--
tsvn:logminsize = 10

Added: trunk/reactos/dll/win32/streamci/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/streamci/CMakeLists.txt?rev=66379
==
--- trunk/reactos/dll/win32/streamci/CMakeLists.txt (added)
+++ trunk/reactos/dll/win32/streamci/CMakeLists.txt [iso-8859-1] Sat Feb 21 
10:09:36 2015
@@ -0,0 +1,20 @@
+
+remove_definitions(-D_WIN32_WINNT=0x502)
+add_definitions(-D_WIN32_WINNT=0x600)
+
+spec2def(streamci.dll streamci.spec)
+
+list(APPEND SOURCE
+streamci.c
+precomp.h)
+
+add_library(streamci SHARED
+${SOURCE}
+streamci.rc
+${CMAKE_CURRENT_BINARY_DIR}/streamci.def)
+
+set_module_type(streamci win32dll)
+target_link_libraries(streamci uuid wine)
+add_importlibs(streamci rpcrt4 setupapi advapi32 iphlpapi dhcpcsvc ole32 
user32 comctl32 ws2_32 msvcrt kernel32 ntdll)
+add_pch(streamci precomp.h SOURCE)
+add_cd_file(TARGET streamci DESTINATION reactos/system32 FOR all)

Propchange: trunk/reactos/dll/win32/streamci/CMakeLists.txt
--
svn:eol-style = native

Added: trunk/reactos/dll/win32/streamci/precomp.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/streamci/precomp.h?rev=66379
==
--- trunk/reactos/dll/win32/streamci/precomp.h  (added)
+++ trunk/reactos/dll/win32/streamci/precomp.h  [iso-8859-1] Sat Feb 21 
10:09:36 2015
@@ -0,0 +1,28 @@
+#ifndef PRECOMP_H__
+#define PRECOMP_H__
+
+#include 
+
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define COM_NO_WINDOWS_H
+
+#define COBJMACROS
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#endif /* EOF */
+

Propchange: trunk/reactos/dll/win32/streamci/precomp.h
--
svn:eol-style = native

Added: trunk/reactos/dll/win32/streamci/streamci.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/streamci/streamci.c?rev=66379
==
--- trunk/reactos/dll/win32/streamci/streamci.c (added)
+++ trunk/reactos/dll/win32/streamci/streamci.c [iso-8859-1] Sat Feb 21 
10:09:36 2015
@@ -0,0 +1,187 @@
+#include "precomp.h"
+
+DWORD
+PerformIO(IN HANDLE hDevice,
+  IN DWORD dwCtlCode,
+  IN LPVOID lpBufferIn,
+  IN DWORD dwBufferSizeIn,
+  OUT LPVOID lpBufferOut,
+  OUT DWORD dwBufferSizeOut,
+  OUT LPDWORD lpNumberBytes)
+{
+OVERLAPPED overlapped;
+DWORD dwResult;
+
+ZeroMemory(&overlapped, sizeof(OVERLAPPED));
+overlapped.hEvent =

[ros-diffs] [janderwald] 66366: [PSDK] - add dif function codes

2015-02-20 Thread janderwald
Author: janderwald
Date: Fri Feb 20 09:24:47 2015
New Revision: 66366

URL: http://svn.reactos.org/svn/reactos?rev=66366&view=rev
Log:
[PSDK]
- add dif function codes

Modified:
trunk/reactos/include/psdk/setupapi.h

Modified: trunk/reactos/include/psdk/setupapi.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/setupapi.h?rev=66366&r1=66365&r2=66366&view=diff
==
--- trunk/reactos/include/psdk/setupapi.h   [iso-8859-1] (original)
+++ trunk/reactos/include/psdk/setupapi.h   [iso-8859-1] Fri Feb 20 
09:24:47 2015
@@ -155,7 +155,9 @@
 #define DIF_POWERMESSAGEWAKE   39
 #define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED 40
 #define DIF_UPDATEDRIVER_UI41
-#define DIF_RESERVED2  42
+#define DIF_FINISHINSTALL_ACTION   42
+#define DIF_RESERVED2  48
+
 #define DIGCDP_FLAG_BASIC  0x0001
 #define DIGCDP_FLAG_ADVANCED   0x0002
 #if (_SETUPAPI_VER >= 0x0501)




[ros-diffs] [janderwald] 66276: [INF] - add wdmaudio.inf

2015-02-15 Thread janderwald
Author: janderwald
Date: Sun Feb 15 09:03:08 2015
New Revision: 66276

URL: http://svn.reactos.org/svn/reactos?rev=66276&view=rev
Log:
[INF]
- add wdmaudio.inf 

Added:
trunk/reactos/media/inf/wdmaudio.inf   (with props)
Modified:
trunk/reactos/media/inf/CMakeLists.txt

Modified: trunk/reactos/media/inf/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/CMakeLists.txt?rev=66276&r1=66275&r2=66276&view=diff
==
--- trunk/reactos/media/inf/CMakeLists.txt  [iso-8859-1] (original)
+++ trunk/reactos/media/inf/CMakeLists.txt  [iso-8859-1] Sun Feb 15 
09:03:08 2015
@@ -39,6 +39,7 @@
 usb.inf
 usbport.inf
 usbstor.inf
+wdmaudio.inf
 xboxdisp.inf)
 
 foreach(item ${INF_FILES})

Added: trunk/reactos/media/inf/wdmaudio.inf
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/wdmaudio.inf?rev=66276
==
Binary file - no diff available.

Propchange: trunk/reactos/media/inf/wdmaudio.inf
--
svn:mime-type = application/octet-stream




[ros-diffs] [janderwald] 66247: [IPHLPAPI] - hackplement GetExtendedTcpTable class TCP_TABLE_OWNER_PID_ALL - fixes XAMPP control panel startup

2015-02-13 Thread janderwald
Author: janderwald
Date: Fri Feb 13 15:03:45 2015
New Revision: 66247

URL: http://svn.reactos.org/svn/reactos?rev=66247&view=rev
Log:
[IPHLPAPI]
- hackplement GetExtendedTcpTable class TCP_TABLE_OWNER_PID_ALL
- fixes XAMPP control panel startup

Modified:
trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c

Modified: trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c?rev=66247&r1=66246&r2=66247&view=diff
==
--- trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c[iso-8859-1] (original)
+++ trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c[iso-8859-1] Fri Feb 13 
15:03:45 2015
@@ -781,11 +781,24 @@
  *
  * NOTES
  */
+
 DWORD WINAPI GetExtendedTcpTable(PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, 
ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved)
 {
DWORD ret = NO_ERROR;
-   UNIMPLEMENTED;
-   return ret; 
+
+  if (TableClass == TCP_TABLE_OWNER_PID_ALL) {
+if (*pdwSize == 0) {
+  *pdwSize = sizeof(MIB_TCPTABLE_OWNER_PID);
+  return ERROR_INSUFFICIENT_BUFFER; 
+} else {
+  ZeroMemory(pTcpTable, sizeof(MIB_TCPTABLE_OWNER_PID));
+  return NO_ERROR;
+}
+  }
+
+
+UNIMPLEMENTED;
+return ret;
 }
 
 




[ros-diffs] [janderwald] 66246: [PSDK] - add MIB_TCPROW_OWNER_PID, MIB_TCPTABLE_OWNER_PID types

2015-02-13 Thread janderwald
Author: janderwald
Date: Fri Feb 13 14:58:05 2015
New Revision: 66246

URL: http://svn.reactos.org/svn/reactos?rev=66246&view=rev
Log:
[PSDK]
- add MIB_TCPROW_OWNER_PID, MIB_TCPTABLE_OWNER_PID types

Modified:
trunk/reactos/include/psdk/iprtrmib.h

Modified: trunk/reactos/include/psdk/iprtrmib.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/iprtrmib.h?rev=66246&r1=66245&r2=66246&view=diff
==
--- trunk/reactos/include/psdk/iprtrmib.h   [iso-8859-1] (original)
+++ trunk/reactos/include/psdk/iprtrmib.h   [iso-8859-1] Fri Feb 13 
14:58:05 2015
@@ -316,4 +316,19 @@
 TCP_TABLE_OWNER_MODULE_ALL
 } TCP_TABLE_CLASS, *PTCP_TABLE_CLASS;
 
+typedef struct _MIB_TCPROW_OWNER_PID {
+  DWORD dwState;
+  DWORD dwLocalAddr;
+  DWORD dwLocalPort;
+  DWORD dwRemoteAddr;
+  DWORD dwRemotePort;
+  DWORD dwOwningPid;
+} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
+
+typedef struct {
+  DWORDdwNumEntries;
+  MIB_TCPROW_OWNER_PID table[0];
+} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;
+
+
 #endif /* WINE_IPRTRMIB_H__ */




[ros-diffs] [janderwald] 66203: [PORTCLS] - fix crash / assert triggered with cwawdm driver - fix irp leak - CORE 7822

2015-02-08 Thread janderwald
Author: janderwald
Date: Sun Feb  8 08:11:51 2015
New Revision: 66203

URL: http://svn.reactos.org/svn/reactos?rev=66203&view=rev
Log:
[PORTCLS]
- fix crash / assert triggered with cwawdm driver
- fix irp leak
- CORE 7822

Modified:
trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp
trunk/reactos/drivers/wdm/audio/backpln/portcls/port_wavepci.cpp

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp?rev=66203&r1=66202&r2=66203&view=diff
==
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp   
[iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.cpp   
[iso-8859-1] Sun Feb  8 08:11:51 2015
@@ -552,6 +552,7 @@
 {
 // no irp available
 m_OutOfMapping = TRUE;
+DPRINT("GetMappingWithTag no mapping available\n");
 return STATUS_NOT_FOUND;
 }
 
@@ -611,6 +612,7 @@
 StreamData->CurStreamHeader = 
(PKSSTREAM_HEADER)((ULONG_PTR)StreamData->CurStreamHeader + 
StreamData->CurStreamHeader->Size);
 }
 
+DPRINT("GetMappingWithTag Tag %p Buffer %p Flags %lu ByteCount %lx\n", 
Tag, VirtualAddress, *Flags, *ByteCount);
 // done
 return STATUS_SUCCESS;
 }
@@ -654,6 +656,12 @@
 
 // remove irp from used list
 CurEntry = ExInterlockedRemoveHeadList(&m_FreeIrpList, &m_IrpListLock);
+if (CurEntry == NULL)
+{
+// this should not happen
+DPRINT("ReleaseMappingWithTag Tag %p not found\n", Tag);
+return STATUS_NOT_FOUND;
+}
 
 // sanity check
 PC_ASSERT(CurEntry);
@@ -743,6 +751,11 @@
 // complete the request
 IoCompleteRequest(Irp, IO_SOUND_INCREMENT);
 }
+else
+{
+// there are still some headers not consumed
+ExInterlockedInsertHeadList(&m_FreeIrpList, 
&Irp->Tail.Overlay.ListEntry, &m_IrpListLock);
+}
 
 return STATUS_SUCCESS;
 }

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/port_wavepci.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/port_wavepci.cpp?rev=66203&r1=66202&r2=66203&view=diff
==
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/port_wavepci.cpp
[iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/port_wavepci.cpp
[iso-8859-1] Sun Feb  8 08:11:51 2015
@@ -228,7 +228,7 @@
 IN PRESOURCELIST  ResourceList)
 {
 IMiniportWavePci * Miniport;
-PSERVICEGROUP ServiceGroup;
+PSERVICEGROUP ServiceGroup = 0;
 NTSTATUS Status;
 PPINCOUNT PinCount;
 PPOWERNOTIFY PowerNotify;




[ros-diffs] [janderwald] 65338: [NTOS:PNPMGR] - Implement IoGetDeviceInterfaces with PhysicalDeviceObject support

2014-11-09 Thread janderwald
Author: janderwald
Date: Sun Nov  9 08:22:43 2014
New Revision: 65338

URL: http://svn.reactos.org/svn/reactos?rev=65338&view=rev
Log:
[NTOS:PNPMGR]
- Implement IoGetDeviceInterfaces with PhysicalDeviceObject support

Modified:
trunk/reactos/ntoskrnl/io/iomgr/deviface.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/deviface.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/deviface.c?rev=65338&r1=65337&r2=65338&view=diff
==
--- trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/deviface.c  [iso-8859-1] Sun Nov  9 
08:22:43 2014
@@ -462,6 +462,8 @@
 PKEY_BASIC_INFORMATION ReferenceBi = NULL;
 PKEY_VALUE_PARTIAL_INFORMATION bip = NULL;
 PKEY_VALUE_PARTIAL_INFORMATION PartialInfo;
+PEXTENDED_DEVOBJ_EXTENSION DeviceObjectExtension;
+PUNICODE_STRING InstanceDevicePath = NULL;
 UNICODE_STRING KeyName;
 OBJECT_ATTRIBUTES ObjectAttributes;
 BOOLEAN FoundRightPDO = FALSE;
@@ -470,6 +472,29 @@
 NTSTATUS Status;
 
 PAGED_CODE();
+
+if (PhysicalDeviceObject != NULL)
+{
+/* Parameters must pass three border of checks */
+DeviceObjectExtension = 
(PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension;
+
+/* 1st level: Presence of a Device Node */
+if (DeviceObjectExtension->DeviceNode == NULL)
+{
+DPRINT("PhysicalDeviceObject 0x%p doesn't have a DeviceNode\n", 
PhysicalDeviceObject);
+return STATUS_INVALID_DEVICE_REQUEST;
+}
+
+/* 2nd level: Presence of an non-zero length InstancePath */
+if (DeviceObjectExtension->DeviceNode->InstancePath.Length == 0)
+{
+DPRINT("PhysicalDeviceObject 0x%p's DOE has zero-length 
InstancePath\n", PhysicalDeviceObject);
+return STATUS_INVALID_DEVICE_REQUEST;
+}
+
+InstanceDevicePath = &DeviceObjectExtension->DeviceNode->InstancePath;
+}
+
 
 Status = IopOpenInterfaceKey(InterfaceClassGuid, KEY_ENUMERATE_SUB_KEYS, 
&InterfaceKey);
 if (!NT_SUCCESS(Status))
@@ -542,10 +567,46 @@
 /* Check if we are on the right physical device object,
 * by reading the DeviceInstance string
 */
-DPRINT1("PhysicalDeviceObject != NULL. Case not implemented.\n");
-//FoundRightPDO = TRUE;
-Status = STATUS_NOT_IMPLEMENTED;
-goto cleanup;
+RtlInitUnicodeString(&KeyName, L"DeviceInstance");
+Status = ZwQueryValueKey(DeviceKey, &KeyName, 
KeyValuePartialInformation, NULL, 0, &NeededLength);
+if (Status == STATUS_BUFFER_TOO_SMALL)
+{
+ActualLength = NeededLength;
+PartialInfo = ExAllocatePool(NonPagedPool, ActualLength);
+if (!PartialInfo)
+{
+Status = STATUS_INSUFFICIENT_RESOURCES;
+goto cleanup;
+}
+
+Status = ZwQueryValueKey(DeviceKey, &KeyName, 
KeyValuePartialInformation, PartialInfo, ActualLength, &NeededLength);
+if (!NT_SUCCESS(Status))
+{
+DPRINT1("ZwQueryValueKey #2 failed (%x)\n", Status);
+ExFreePool(PartialInfo);
+goto cleanup;
+}
+if (PartialInfo->DataLength == InstanceDevicePath->Length)
+{
+if (RtlCompareMemory(PartialInfo->Data, 
InstanceDevicePath->Buffer, InstanceDevicePath->Length) == 
InstanceDevicePath->Length)
+{
+/* found right pdo */
+FoundRightPDO = TRUE;
+}
+}
+ExFreePool(PartialInfo);
+PartialInfo = NULL;
+if (!FoundRightPDO)
+{
+/* not yet found */
+continue;
+}
+}
+else
+{
+/* error */
+break;
+}
 }
 
 /* Enumerate subkeys (ie the different reference strings) */




[ros-diffs] [janderwald] 65331: [USBHUB] - it makes sense to also activate the device interface

2014-11-08 Thread janderwald
Author: janderwald
Date: Sat Nov  8 21:00:37 2014
New Revision: 65331

URL: http://svn.reactos.org/svn/reactos?rev=65331&view=rev
Log:
[USBHUB]
- it makes sense to also activate the device interface

Modified:
trunk/reactos/drivers/usb/usbhub/pdo.c

Modified: trunk/reactos/drivers/usb/usbhub/pdo.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbhub/pdo.c?rev=65331&r1=65330&r2=65331&view=diff
==
--- trunk/reactos/drivers/usb/usbhub/pdo.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbhub/pdo.c  [iso-8859-1] Sat Nov  8 
21:00:37 2014
@@ -414,6 +414,7 @@
 // register device interface
 //
 IoRegisterDeviceInterface(DeviceObject, &GUID_DEVINTERFACE_USB_DEVICE, 
NULL, &ChildDeviceExtension->SymbolicLinkName);
+IoSetDeviceInterfaceState(&ChildDeviceExtension->SymbolicLinkName, TRUE);
 
 UNIMPLEMENTED
 return STATUS_SUCCESS;




[ros-diffs] [janderwald] 65330: [NTOS] - implement PlugPlayControlGetInterfaceDeviceList class for NtPlugPlayControl

2014-11-08 Thread janderwald
Author: janderwald
Date: Sat Nov  8 20:58:57 2014
New Revision: 65330

URL: http://svn.reactos.org/svn/reactos?rev=65330&view=rev
Log:
[NTOS]
- implement PlugPlayControlGetInterfaceDeviceList class for NtPlugPlayControl

Modified:
trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c

Modified: trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c?rev=65330&r1=65329&r2=65330&view=diff
==
--- trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c [iso-8859-1] Sat Nov  8 
20:58:57 2014
@@ -206,6 +206,70 @@
 _SEH2_END;
 
 return Status;
+}
+
+static NTSTATUS
+IopGetInterfaceDeviceList(PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA 
DeviceList)
+{
+NTSTATUS Status;
+UNICODE_STRING DeviceInstance;
+PDEVICE_OBJECT DeviceObject = NULL;
+ULONG BufferSize = 0;
+GUID FilterGuid;
+PZZWSTR SymbolicLinkList = NULL, LinkList;
+ULONG TotalLength = 0;
+
+_SEH2_TRY
+{
+ProbeForRead(DeviceList->FilterGuid, sizeof(GUID), sizeof(UCHAR));
+RtlCopyMemory(&FilterGuid, DeviceList->FilterGuid, sizeof(GUID));
+
+if (DeviceList->Buffer != NULL && DeviceList->BufferSize != 0)
+{
+BufferSize = DeviceList->BufferSize;
+ProbeForWrite(DeviceList->Buffer, BufferSize, sizeof(UCHAR));
+}
+}
+_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+{
+ExFreePool(DeviceInstance.Buffer);
+_SEH2_YIELD(return _SEH2_GetExceptionCode());
+}
+_SEH2_END;
+
+
+Status = IopCaptureUnicodeString(&DeviceInstance, 
&DeviceList->DeviceInstance);
+if (NT_SUCCESS(Status))
+{
+/* Get the device object */
+DeviceObject = IopGetDeviceObjectFromDeviceInstance(&DeviceInstance);
+ExFreePool(DeviceInstance.Buffer);
+}
+
+Status = IoGetDeviceInterfaces(&FilterGuid, DeviceObject, 
DeviceList->Flags, &SymbolicLinkList);
+ObDereferenceObject(DeviceObject);
+
+if (!NT_SUCCESS(Status))
+{
+/* failed */
+return Status;
+}
+
+LinkList = SymbolicLinkList;
+while (*SymbolicLinkList != UNICODE_NULL)
+{
+TotalLength += (wcslen(SymbolicLinkList) + 1) * sizeof(WCHAR);
+SymbolicLinkList += wcslen(SymbolicLinkList) + (sizeof(UNICODE_NULL) / 
sizeof(WCHAR));
+}
+TotalLength += sizeof(UNICODE_NULL);
+
+if (BufferSize >= TotalLength)
+{
+RtlCopyMemory(DeviceList->Buffer, SymbolicLinkList, TotalLength * 
sizeof(WCHAR));
+}
+DeviceList->BufferSize = TotalLength;
+ExFreePool(LinkList);
+return STATUS_SUCCESS;
 }
 
 static NTSTATUS
@@ -865,6 +929,11 @@
 return STATUS_INVALID_PARAMETER;
 return IopRemovePlugPlayEvent();
 
+case PlugPlayControlGetInterfaceDeviceList:
+if (!Buffer || BufferLength < 
sizeof(PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA))
+return STATUS_INVALID_PARAMETER;
+return 
IopGetInterfaceDeviceList((PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA)Buffer);
+
 case PlugPlayControlProperty:
 if (!Buffer || BufferLength < 
sizeof(PLUGPLAY_CONTROL_PROPERTY_DATA))
 return STATUS_INVALID_PARAMETER;




[ros-diffs] [janderwald] 65329: [UMPNPMGR] - pass flags to NtPlugPlayControl

2014-11-08 Thread janderwald
Author: janderwald
Date: Sat Nov  8 20:54:40 2014
New Revision: 65329

URL: http://svn.reactos.org/svn/reactos?rev=65329&view=rev
Log:
[UMPNPMGR]
- pass flags to NtPlugPlayControl

Modified:
trunk/reactos/base/services/umpnpmgr/umpnpmgr.c

Modified: trunk/reactos/base/services/umpnpmgr/umpnpmgr.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/umpnpmgr/umpnpmgr.c?rev=65329&r1=65328&r2=65329&view=diff
==
--- trunk/reactos/base/services/umpnpmgr/umpnpmgr.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/umpnpmgr/umpnpmgr.c [iso-8859-1] Sat Nov  8 
20:54:40 2014
@@ -1230,11 +1230,11 @@
 DWORD ret = CR_SUCCESS;
 
 UNREFERENCED_PARAMETER(hBinding);
-UNREFERENCED_PARAMETER(ulFlags);
 
 RtlInitUnicodeString(&PlugPlayData.DeviceInstance,
  pszDeviceID);
 
+PlugPlayData.Flags = ulFlags;
 PlugPlayData.FilterGuid = InterfaceGuid;
 PlugPlayData.Buffer = Buffer;
 PlugPlayData.BufferSize = *pulLength;
@@ -1271,7 +1271,6 @@
 DWORD ret = CR_SUCCESS;
 
 UNREFERENCED_PARAMETER(hBinding);
-UNREFERENCED_PARAMETER(ulFlags);
 
 DPRINT("PNP_GetInterfaceDeviceListSize() called\n");
 
@@ -1281,6 +1280,7 @@
 PlugPlayData.FilterGuid = InterfaceGuid;
 PlugPlayData.Buffer = NULL;
 PlugPlayData.BufferSize = 0;
+PlugPlayData.Flags = ulFlags;
 
 Status = NtPlugPlayControl(PlugPlayControlGetInterfaceDeviceList,
(PVOID)&PlugPlayData,




[ros-diffs] [janderwald] 65328: [NDK] - add flags member

2014-11-08 Thread janderwald
Author: janderwald
Date: Sat Nov  8 20:51:57 2014
New Revision: 65328

URL: http://svn.reactos.org/svn/reactos?rev=65328&view=rev
Log:
[NDK]
- add flags member

Modified:
trunk/reactos/include/ndk/cmtypes.h

Modified: trunk/reactos/include/ndk/cmtypes.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/cmtypes.h?rev=65328&r1=65327&r2=65328&view=diff
==
--- trunk/reactos/include/ndk/cmtypes.h [iso-8859-1] (original)
+++ trunk/reactos/include/ndk/cmtypes.h [iso-8859-1] Sat Nov  8 20:51:57 2014
@@ -423,6 +423,7 @@
 {
 UNICODE_STRING DeviceInstance;
 LPGUID FilterGuid;
+ULONG Flags;
 PVOID Buffer;
 ULONG BufferSize;
 } PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA, 
*PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA;




[ros-diffs] [janderwald] 65322: [NDK] - adjust PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA [UMPNPMGR] - implement PNP_GetInterfaceDeviceList, PNP_GetInterfaceDeviceListSize - currently not yet working

2014-11-08 Thread janderwald
Author: janderwald
Date: Sat Nov  8 13:28:01 2014
New Revision: 65322

URL: http://svn.reactos.org/svn/reactos?rev=65322&view=rev
Log:
[NDK]
- adjust PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
[UMPNPMGR]
- implement PNP_GetInterfaceDeviceList, PNP_GetInterfaceDeviceListSize
- currently not yet working PlugPlayControlGetInterfaceDeviceList class in 
NtPlugPlayControl is not implemented

Modified:
trunk/reactos/base/services/umpnpmgr/umpnpmgr.c
trunk/reactos/include/ndk/cmtypes.h

Modified: trunk/reactos/base/services/umpnpmgr/umpnpmgr.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/umpnpmgr/umpnpmgr.c?rev=65322&r1=65321&r2=65322&view=diff
==
--- trunk/reactos/base/services/umpnpmgr/umpnpmgr.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/umpnpmgr/umpnpmgr.c [iso-8859-1] Sat Nov  8 
13:28:01 2014
@@ -169,6 +169,8 @@
 {
 case STATUS_NO_SUCH_DEVICE:
 return CR_NO_SUCH_DEVINST;
+case STATUS_NOT_IMPLEMENTED:
+return CR_CALL_NOT_IMPLEMENTED;
 
 default:
 /* FIXME: add more mappings */
@@ -1223,8 +1225,34 @@
 PNP_RPC_BUFFER_SIZE *pulLength,
 DWORD ulFlags)
 {
-UNIMPLEMENTED;
-return CR_CALL_NOT_IMPLEMENTED;
+NTSTATUS Status;
+PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA PlugPlayData;
+DWORD ret = CR_SUCCESS;
+
+UNREFERENCED_PARAMETER(hBinding);
+UNREFERENCED_PARAMETER(ulFlags);
+
+RtlInitUnicodeString(&PlugPlayData.DeviceInstance,
+ pszDeviceID);
+
+PlugPlayData.FilterGuid = InterfaceGuid;
+PlugPlayData.Buffer = Buffer;
+PlugPlayData.BufferSize = *pulLength;
+
+Status = NtPlugPlayControl(PlugPlayControlGetInterfaceDeviceList,
+   (PVOID)&PlugPlayData,
+   
sizeof(PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA));
+if (NT_SUCCESS(Status))
+{
+*pulLength = PlugPlayData.BufferSize;
+}
+else
+{
+ret = NtStatusToCrError(Status);
+}
+
+DPRINT("PNP_GetInterfaceDeviceListSize() done (returns %lx)\n", ret);
+return ret;
 }
 
 
@@ -1238,8 +1266,36 @@
 LPWSTR pszDeviceID,
 DWORD ulFlags)
 {
-UNIMPLEMENTED;
-return CR_CALL_NOT_IMPLEMENTED;
+NTSTATUS Status;
+PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA PlugPlayData;
+DWORD ret = CR_SUCCESS;
+
+UNREFERENCED_PARAMETER(hBinding);
+UNREFERENCED_PARAMETER(ulFlags);
+
+DPRINT("PNP_GetInterfaceDeviceListSize() called\n");
+
+RtlInitUnicodeString(&PlugPlayData.DeviceInstance,
+ pszDeviceID);
+
+PlugPlayData.FilterGuid = InterfaceGuid;
+PlugPlayData.Buffer = NULL;
+PlugPlayData.BufferSize = 0;
+
+Status = NtPlugPlayControl(PlugPlayControlGetInterfaceDeviceList,
+   (PVOID)&PlugPlayData,
+   
sizeof(PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA));
+if (NT_SUCCESS(Status))
+{
+*pulLen = PlugPlayData.BufferSize;
+}
+else
+{
+ret = NtStatusToCrError(Status);
+}
+
+DPRINT("PNP_GetInterfaceDeviceListSize() done (returns %lx)\n", ret);
+return ret;
 }
 
 

Modified: trunk/reactos/include/ndk/cmtypes.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/cmtypes.h?rev=65322&r1=65321&r2=65322&view=diff
==
--- trunk/reactos/include/ndk/cmtypes.h [iso-8859-1] (original)
+++ trunk/reactos/include/ndk/cmtypes.h [iso-8859-1] Sat Nov  8 13:28:01 2014
@@ -422,7 +422,7 @@
 typedef struct _PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
 {
 UNICODE_STRING DeviceInstance;
-LPWSTR FilterGuid;
+LPGUID FilterGuid;
 PVOID Buffer;
 ULONG BufferSize;
 } PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA, 
*PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA;




[ros-diffs] [janderwald] 65321: [NDK] - add type for retrieving device interface list - please review

2014-11-08 Thread janderwald
Author: janderwald
Date: Sat Nov  8 13:13:03 2014
New Revision: 65321

URL: http://svn.reactos.org/svn/reactos?rev=65321&view=rev
Log:
[NDK]
- add type for retrieving device interface list
- please review

Modified:
trunk/reactos/include/ndk/cmtypes.h

Modified: trunk/reactos/include/ndk/cmtypes.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/cmtypes.h?rev=65321&r1=65320&r2=65321&view=diff
==
--- trunk/reactos/include/ndk/cmtypes.h [iso-8859-1] (original)
+++ trunk/reactos/include/ndk/cmtypes.h [iso-8859-1] Sat Nov  8 13:13:03 2014
@@ -418,6 +418,15 @@
 // Plug and Play Control Classes
 //
 
+//Class 0x09
+typedef struct _PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
+{
+UNICODE_STRING DeviceInstance;
+LPWSTR FilterGuid;
+PVOID Buffer;
+ULONG BufferSize;
+} PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA, 
*PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA;
+
 //Class 0x0A
 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
 {




[ros-diffs] [janderwald] 65314: [USBHUB] - register device interface GUID_DEVINTERFACE_USB_DEVICE for usb devices

2014-11-08 Thread janderwald
Author: janderwald
Date: Sat Nov  8 09:26:21 2014
New Revision: 65314

URL: http://svn.reactos.org/svn/reactos?rev=65314&view=rev
Log:
[USBHUB]
- register device interface GUID_DEVINTERFACE_USB_DEVICE for usb devices

Modified:
trunk/reactos/drivers/usb/usbhub/pdo.c

Modified: trunk/reactos/drivers/usb/usbhub/pdo.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbhub/pdo.c?rev=65314&r1=65313&r2=65314&view=diff
==
--- trunk/reactos/drivers/usb/usbhub/pdo.c  [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbhub/pdo.c  [iso-8859-1] Sat Nov  8 
09:26:21 2014
@@ -17,6 +17,9 @@
 #include 
 
 #define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x0003)
+
+DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,
+   0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 
0x4F, 0xB9, 0x51, 0xED);
 
 NTSTATUS
 NTAPI
@@ -408,8 +411,9 @@
 ASSERT(ChildDeviceExtension->Common.IsFDO == FALSE);
 
 //
-// FIXME: Fow now assume success
-//
+// register device interface
+//
+IoRegisterDeviceInterface(DeviceObject, &GUID_DEVINTERFACE_USB_DEVICE, 
NULL, &ChildDeviceExtension->SymbolicLinkName);
 
 UNIMPLEMENTED
 return STATUS_SUCCESS;




[ros-diffs] [janderwald] 64050: [SHELL32] - rewrite _ILCreateFontItem - fix a buffer overflow

2014-09-06 Thread janderwald
Author: janderwald
Date: Sat Sep  6 12:33:17 2014
New Revision: 64050

URL: http://svn.reactos.org/svn/reactos?rev=64050&view=rev
Log:
[SHELL32]
- rewrite _ILCreateFontItem
- fix a buffer overflow

Modified:
trunk/reactos/dll/win32/shell32/folders/fonts.cpp

Modified: trunk/reactos/dll/win32/shell32/folders/fonts.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/folders/fonts.cpp?rev=64050&r1=64049&r2=64050&view=diff
==
--- trunk/reactos/dll/win32/shell32/folders/fonts.cpp   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/folders/fonts.cpp   [iso-8859-1] Sat Sep  6 
12:33:17 2014
@@ -78,30 +78,28 @@
 
 static LPITEMIDLIST _ILCreateFontItem(LPWSTR pszFont, LPWSTR pszFile)
 {
-PIDLDATA tmp;
 LPITEMIDLIST pidl;
-PIDLFontStruct * p;
-int size0 = (char*)&tmp.u.cfont.szName - (char*)&tmp.u.cfont;
-int size = size0;
-
-tmp.type = 0x00;
-tmp.u.cfont.dummy = 0xFF;
-tmp.u.cfont.offsFile = wcslen(pszFont) + 1;
-
-size += (tmp.u.cfont.offsFile + wcslen(pszFile) + 1) * sizeof(WCHAR);
-
-pidl = (LPITEMIDLIST)SHAlloc(size + 4);
+LPPIDLDATA data;
+int length = wcslen(pszFont) + 1;
+int size = sizeof(PIDLDATA) + sizeof(ITEMIDLIST);
+
+size += length * sizeof(WCHAR);
+size += (wcslen(pszFile) + 1) * sizeof(WCHAR);
+
+pidl = (LPITEMIDLIST)SHAlloc(size + 5);
 if (!pidl)
 return pidl;
 
-pidl->mkid.cb = size + 2;
-memcpy(pidl->mkid.abID, &tmp, 2 + size0);
-
-p = &((PIDLDATA*)pidl->mkid.abID)->u.cfont;
-wcscpy(p->szName, pszFont);
-wcscpy(p->szName + tmp.u.cfont.offsFile, pszFile);
-
-*(WORD*)((char*)pidl + (size + 2)) = 0;
+ZeroMemory(pidl, size + 5);
+pidl->mkid.cb = size + 3;
+
+data = _ILGetDataPointer(pidl);
+data->type = 0x00;
+data->u.cfont.dummy = 0xFF;
+data->u.cfont.offsFile = length;
+wcscpy(data->u.cfont.szName, pszFont);
+wcscpy(&data->u.cfont.szName[length], pszFile);
+
 return pidl;
 }
 
@@ -607,7 +605,7 @@
 {
 if (StrFormatByteSizeW(FileSize.QuadPart, buffer, 
sizeof(buffer) / sizeof(WCHAR)))
 {
-psd->str.pOleStr = 
(LPWSTR)CoTaskMemAlloc(wcslen(buffer) + 1);
+psd->str.pOleStr = 
(LPWSTR)CoTaskMemAlloc((wcslen(buffer) + 1) * sizeof(WCHAR));
 if (!psd->str.pOleStr)
 {
 CloseHandle(hFile);




  1   2   3   4   5   6   7   8   9   10   >