[ros-diffs] [janderwald] 73150: [USBAUDIO] - partly implement GetDataRangeIndexForFormat
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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);