From: Johannes Anderwald Date: Sat, 24 Sep 2016 11:24:07 +0000 (+0000) Subject: [LIBUSBAUDIO] X-Git-Tag: ReactOS-0.4.3~264 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=23829f32f67aae5976340ffbba7a3aa37bef3480 [LIBUSBAUDIO] - delete unused code svn path=/trunk/; revision=72791 --- diff --git a/reactos/sdk/lib/drivers/sound/libusbaudio/CMakeLists.txt b/reactos/sdk/lib/drivers/sound/libusbaudio/CMakeLists.txt deleted file mode 100644 index b3cea42ab13..00000000000 --- a/reactos/sdk/lib/drivers/sound/libusbaudio/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ - -add_definitions( - -DUNICODE -D_UNICODE - -DNDEBUG=1) - -list(APPEND SOURCE - libusbaudio.c - parser.c - format.c) - -add_library(libusbaudio ${SOURCE}) -add_dependencies(libusbaudio bugcodes xdk) diff --git a/reactos/sdk/lib/drivers/sound/libusbaudio/format.c b/reactos/sdk/lib/drivers/sound/libusbaudio/format.c deleted file mode 100644 index 729113ed7dc..00000000000 --- a/reactos/sdk/lib/drivers/sound/libusbaudio/format.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Kernel Streaming - * FILE: lib/drivers/sound/libusbaudio/format.c - * PURPOSE: USB AUDIO Parser - * PROGRAMMER: Johannes Anderwald - */ - -#include "priv.h" - -KSDATARANGE StandardDataRange = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - {STATIC_KSDATAFORMAT_TYPE_AUDIO}, - {STATIC_KSDATAFORMAT_SUBTYPE_ANALOG}, - {STATIC_KSDATAFORMAT_SPECIFIER_NONE} - } -}; - -GUID DataFormatTypeAudio = {STATIC_KSDATAFORMAT_TYPE_AUDIO}; -GUID DataFormatSubTypePCM = {STATIC_KSDATAFORMAT_SUBTYPE_PCM}; -GUID DataFormatSpecifierWaveFormat = {STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX}; - -USBAUDIO_STATUS -UsbAudio_AssignDataRanges( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorSize, - IN PKSFILTER_DESCRIPTOR FilterDescriptor, - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG InterfaceCount, - IN ULONG InterfaceIndex, - IN PULONG TerminalIds) -{ - ULONG Count, Index; - USBAUDIO_STATUS Status; - PUSB_COMMON_DESCRIPTOR * Descriptors; - PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR HeaderDescriptor; - PKSDATAFORMAT_WAVEFORMATEX WaveFormat; - PKSDATARANGE *DataRanges; - PKSPIN_DESCRIPTOR PinDescriptor; - PUSB_AUDIO_STREAMING_FORMAT_TYPE_1 FormatType; - - /* count audio descriptors */ - Status = UsbAudio_CountAudioDescriptors(ConfigurationDescriptor, ConfigurationDescriptorSize, InterfaceDescriptors, InterfaceCount, InterfaceIndex, &Count); - if (Status != UA_STATUS_SUCCESS || Count < 2) - { - /* ignore failure */ - DPRINT1("[LIBUSBAUDIO] Failed to count descriptors with %x Count %lx for InterfaceIndex %lx InterfaceCount %lx\n", Status, Count, InterfaceIndex, InterfaceCount); - return UA_STATUS_SUCCESS; - } - - /* create descriptor array */ - Status = UsbAudio_CreateAudioDescriptorArray(Context, ConfigurationDescriptor, ConfigurationDescriptorSize, InterfaceDescriptors, InterfaceCount, InterfaceIndex, Count, &Descriptors); - if (Status != UA_STATUS_SUCCESS) - { - /* ignore failure */ - DPRINT1("[LIBUSBAUDIO] Failed to create audio descriptor array Count %lx Status %x\n", Count, Status); - return UA_STATUS_SUCCESS; - } - - /* get header */ - HeaderDescriptor = (PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR)Descriptors[0]; - if (!HeaderDescriptor || HeaderDescriptor->bDescriptorType != USB_AUDIO_STREAMING_INTERFACE_INTERFACE_DESCRIPTOR_TYPE || - HeaderDescriptor->bDescriptorSubtype != 0x01) - { - /* header missing or mis-aligned */ - DPRINT1("[LIBUSBAUDIO] Failed to retrieve audio header %p\n", HeaderDescriptor); - return UA_STATUS_SUCCESS; - } - - /* FIXME: only PCM is supported */ - if (HeaderDescriptor->wFormatTag != WAVE_FORMAT_PCM) - { - /* not supported */ - DPRINT1("[LIBUSBAUDIO] Only PCM is currenly supported wFormatTag %x\n", HTONS(HeaderDescriptor->wFormatTag)); - return UA_STATUS_SUCCESS; - } - - /* check format descriptor */ - FormatType = (PUSB_AUDIO_STREAMING_FORMAT_TYPE_1)Descriptors[1]; - if (!FormatType || FormatType->bDescriptorType != USB_AUDIO_STREAMING_INTERFACE_INTERFACE_DESCRIPTOR_TYPE || - FormatType->bDescriptorSubtype != 0x02 || FormatType->bFormatType != 0x01 || FormatType->bSamFreqType != 1) - { - /* unexpected format descriptor */ - DPRINT1("[LIBUSBAUDIO] Unexpected format descriptor %p bDescriptorType %x bDescriptorSubtype %x bFormatType %x bSamFreqType %x\n", FormatType, - FormatType->bDescriptorType, FormatType->bDescriptorSubtype, FormatType->bFormatType, FormatType->bSamFreqType); - return UA_STATUS_SUCCESS; - } - - - /* now search pin position */ - for(Index = 0; Index < FilterDescriptor->PinDescriptorsCount; Index++) - { - //DPRINT("bTerminalLink %x Ids %lx\n", HeaderDescriptor->bTerminalLink, TerminalIds[Index]); - if (HeaderDescriptor->bTerminalLink == TerminalIds[Index]) - { - /* alloc wave format */ - WaveFormat = (PKSDATAFORMAT_WAVEFORMATEX)Context->Alloc(sizeof(KSDATAFORMAT_WAVEFORMATEX)); - if (!WaveFormat) - return UA_STATUS_NO_MEMORY; - - /* init wave format */ - WaveFormat->WaveFormatEx.cbSize = sizeof(WAVEFORMATEX); - WaveFormat->WaveFormatEx.wFormatTag = WAVE_FORMAT_PCM; - WaveFormat->WaveFormatEx.nChannels = FormatType->bNrChannels; - WaveFormat->WaveFormatEx.wBitsPerSample = FormatType->bBitResolution; - WaveFormat->WaveFormatEx.nSamplesPerSec = ((FormatType->tSamFreq[2] & 0xFF) << 16) | ((FormatType->tSamFreq[1] & 0xFF)<< 8) | (FormatType->tSamFreq[0] & 0xFF); - WaveFormat->WaveFormatEx.nBlockAlign = (WaveFormat->WaveFormatEx.nChannels * WaveFormat->WaveFormatEx.wBitsPerSample) / 8; - WaveFormat->WaveFormatEx.nAvgBytesPerSec = WaveFormat->WaveFormatEx.nSamplesPerSec * WaveFormat->WaveFormatEx.nBlockAlign; - - /* FIXME apply padding */ - WaveFormat->DataFormat.FormatSize = sizeof(KSDATAFORMAT_WAVEFORMATEX); - Context->Copy(&WaveFormat->DataFormat.MajorFormat, &DataFormatTypeAudio, sizeof(GUID)); - Context->Copy(&WaveFormat->DataFormat.SubFormat, &DataFormatSubTypePCM, sizeof(GUID)); - Context->Copy(&WaveFormat->DataFormat.Specifier, &DataFormatSpecifierWaveFormat, sizeof(GUID)); - - //C_ASSERT(sizeof(WAVEFORMATEX) + sizeof(KSDATAFORMAT) == 82); - - /* get corresponding pin descriptor */ - PinDescriptor = (PKSPIN_DESCRIPTOR)&FilterDescriptor->PinDescriptors[Index].PinDescriptor; - - /* alloc data range */ - DataRanges = (PKSDATARANGE*)Context->Alloc(sizeof(PKSDATARANGE) * (PinDescriptor->DataRangesCount+1)); - if (!DataRanges) - { - Context->Free(WaveFormat); - return UA_STATUS_NO_MEMORY; - } - - if (PinDescriptor->DataRangesCount) - { - /* copy old range */ - Context->Copy(DataRanges, (PVOID)PinDescriptor->DataRanges, sizeof(PKSDATARANGE) * PinDescriptor->DataRangesCount); - - /* free old range */ - Context->Free((PVOID)PinDescriptor->DataRanges); - } - - /* assign new range */ - PinDescriptor->DataRanges = DataRanges; - DataRanges[PinDescriptor->DataRangesCount] = (PKSDATARANGE)WaveFormat; - PinDescriptor->DataRangesCount++; - return UA_STATUS_SUCCESS; - } - - } - return UA_STATUS_SUCCESS; -} - - diff --git a/reactos/sdk/lib/drivers/sound/libusbaudio/libusbaudio.c b/reactos/sdk/lib/drivers/sound/libusbaudio/libusbaudio.c deleted file mode 100644 index 92ace8bf47e..00000000000 --- a/reactos/sdk/lib/drivers/sound/libusbaudio/libusbaudio.c +++ /dev/null @@ -1,364 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Kernel Streaming - * FILE: lib/drivers/sound/libusbaudio/libusbaudio.c - * PURPOSE: USB AUDIO Parser - * PROGRAMMER: Johannes Anderwald - */ -#include "priv.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}; - - -KSPIN_INTERFACE StandardPinInterface = -{ - {STATIC_KSINTERFACESETID_Standard}, - KSINTERFACE_STANDARD_STREAMING, - 0 -}; - -KSPIN_MEDIUM StandardPinMedium = -{ - {STATIC_KSMEDIUMSETID_Standard}, - KSMEDIUM_TYPE_ANYINSTANCE, - 0 -}; - -USBAUDIO_STATUS -UsbAudio_InitializeContext( - IN PUSBAUDIO_CONTEXT Context, - IN PUSBAUDIO_ALLOC Alloc, - IN PUSBAUDIO_FREE Free, - IN PUSBAUDIO_COPY Copy) -{ - - /* verify parameters */ - if (!Context || !Alloc || !Free || !Copy) - { - /* invalid parameter */ - return UA_STATUS_INVALID_PARAMETER; - } - - /* initialize context */ - Context->Size = sizeof(USBAUDIO_CONTEXT); - Context->Alloc = Alloc; - Context->Free = Free; - Context->Copy = Copy; - - /* done */ - return UA_STATUS_SUCCESS; -} - -LPGUID -UsbAudio_GetPinCategoryFromTerminalDescriptor( - 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->wTerminalType == USB_HEADPHONES_SPEAKER_TERMINAL_TYPE) - return &NodeTypeHeadphonesSpeaker; - else if (TerminalDescriptor->wTerminalType == USB_AUDIO_HMDA_TERMINAL_TYPE) - return &NodeTypeHMDA; - else if (TerminalDescriptor->wTerminalType == USB_AUDIO_DESKTOP_SPEAKER_TERMINAL_TYPE) - return &NodeTypeDesktopSpeaker; - else if (TerminalDescriptor->wTerminalType == USB_AUDIO_ROOM_SPEAKER_TERMINAL_TYPE) - return &NodeTypeRoomSpeaker; - else if (TerminalDescriptor->wTerminalType == USB_AUDIO_COMMUNICATION_SPEAKER_TERMINAL_TYPE) - return &NodeTypeCommunicationSpeaker; - else if (TerminalDescriptor->wTerminalType == USB_AUDIO_SUBWOOFER_TERMINAL_TYPE) - return &NodeTypeSubwoofer; - - if (TerminalDescriptor->wTerminalType == USB_AUDIO_STREAMING_TERMINAL_TYPE) - { - if (TerminalDescriptor->bDescriptorSubtype == USB_AUDIO_OUTPUT_TERMINAL) - return &NodeTypeCapture; - else if (TerminalDescriptor->bDescriptorSubtype == USB_AUDIO_INPUT_TERMINAL) - return &NodeTypePlayback; - - } - return NULL; -} - -USBAUDIO_STATUS -UsbAudio_InitPinDescriptor( - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN PKSPIN_DESCRIPTOR_EX PinDescriptor, - IN ULONG TerminalCount, - IN PUSB_COMMON_DESCRIPTOR * Descriptors, - IN ULONG TerminalId) -{ - PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR TerminalDescriptor; - - TerminalDescriptor = UsbAudio_GetTerminalDescriptorById(Descriptors, TerminalCount, TerminalId); - if (!TerminalDescriptor) - { - /* failed to find terminal descriptor */ - return UA_STATUS_UNSUCCESSFUL; - } - - /* init pin descriptor */ - PinDescriptor->PinDescriptor.InterfacesCount = 1; - PinDescriptor->PinDescriptor.Interfaces = &StandardPinInterface; - PinDescriptor->PinDescriptor.MediumsCount = 1; - PinDescriptor->PinDescriptor.Mediums = &StandardPinMedium; - PinDescriptor->PinDescriptor.Category = UsbAudio_GetPinCategoryFromTerminalDescriptor(TerminalDescriptor); - - if (TerminalDescriptor->wTerminalType == USB_AUDIO_STREAMING_TERMINAL_TYPE) - { - if (TerminalDescriptor->bDescriptorSubtype == USB_AUDIO_OUTPUT_TERMINAL) - { - PinDescriptor->PinDescriptor.Communication = KSPIN_COMMUNICATION_SINK; - PinDescriptor->PinDescriptor.DataFlow = KSPIN_DATAFLOW_OUT; - } - else if (TerminalDescriptor->bDescriptorSubtype == USB_AUDIO_INPUT_TERMINAL) - { - PinDescriptor->PinDescriptor.Communication = KSPIN_COMMUNICATION_SINK; - PinDescriptor->PinDescriptor.DataFlow = KSPIN_DATAFLOW_IN; - } - - /* irp sinks / sources can be instantiated */ - PinDescriptor->InstancesPossible = 1; - - } - else if (TerminalDescriptor->bDescriptorSubtype == USB_AUDIO_INPUT_TERMINAL) - { - PinDescriptor->PinDescriptor.Communication = KSPIN_COMMUNICATION_BRIDGE; - PinDescriptor->PinDescriptor.DataFlow = KSPIN_DATAFLOW_IN; - } - else if (TerminalDescriptor->bDescriptorSubtype == USB_AUDIO_OUTPUT_TERMINAL) - { - PinDescriptor->PinDescriptor.Communication = KSPIN_COMMUNICATION_BRIDGE; - PinDescriptor->PinDescriptor.DataFlow = KSPIN_DATAFLOW_OUT; - } - - return UA_STATUS_SUCCESS; -} - -USBAUDIO_STATUS -UsbAudio_ParseConfigurationDescriptor( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorSize) -{ - USBAUDIO_STATUS Status; - PKSFILTER_DESCRIPTOR FilterDescriptor; - PUSB_COMMON_DESCRIPTOR * Descriptors; - PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors; - PULONG TerminalIds; - ULONG Index, AudioControlInterfaceIndex; - ULONG InterfaceCount, DescriptorCount, NewDescriptorCount; - PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; - - - if (!Context || !ConfigurationDescriptor || !ConfigurationDescriptorSize) - { - /* invalid parameter */ - return UA_STATUS_INVALID_PARAMETER; - } - - /* count usb interface descriptors */ - Status = UsbAudio_CountInterfaceDescriptors(ConfigurationDescriptor, ConfigurationDescriptorSize, &InterfaceCount); - if (Status != UA_STATUS_SUCCESS || InterfaceCount == 0) - { - /* invalid parameter */ - return UA_STATUS_INVALID_PARAMETER; - } - - /* construct interface array */ - Status = UsbAudio_CreateInterfaceDescriptorsArray(Context, ConfigurationDescriptor, ConfigurationDescriptorSize, InterfaceCount, &InterfaceDescriptors); - if (Status != UA_STATUS_SUCCESS) - { - /* invalid parameter */ - return UA_STATUS_INVALID_PARAMETER; - } - - /* get audio control interface index */ - AudioControlInterfaceIndex = UsbAudio_GetAudioControlInterfaceIndex(InterfaceDescriptors, InterfaceCount); - if (AudioControlInterfaceIndex == MAXULONG) - { - /* invalid configuration descriptor */ - Context->Free(InterfaceDescriptors); - return UA_STATUS_INVALID_PARAMETER; - } - - /* count audio terminal descriptors */ - Status = UsbAudio_CountAudioDescriptors(ConfigurationDescriptor, ConfigurationDescriptorSize, InterfaceDescriptors, InterfaceCount, AudioControlInterfaceIndex, &DescriptorCount); - if (Status != UA_STATUS_SUCCESS || DescriptorCount == 0) - { - /* invalid parameter */ - Context->Free(InterfaceDescriptors); - return UA_STATUS_INVALID_PARAMETER; - } - - /* construct terminal descriptor array */ - Status = UsbAudio_CreateAudioDescriptorArray(Context, ConfigurationDescriptor, ConfigurationDescriptorSize, InterfaceDescriptors, InterfaceCount, AudioControlInterfaceIndex, DescriptorCount, &Descriptors); - if (Status != UA_STATUS_SUCCESS) - { - /* no memory */ - Context->Free(InterfaceDescriptors); - //DPRINT("[LIBUSBAUDIO] Failed to create descriptor array with %x\n", Status); - return Status; - } - - /* construct filter */ - FilterDescriptor = (PKSFILTER_DESCRIPTOR)Context->Alloc(sizeof(KSFILTER_DESCRIPTOR)); - if (!FilterDescriptor) - { - /* no memory */ - Context->Free(InterfaceDescriptors); - Context->Free(Descriptors); - return UA_STATUS_NO_MEMORY; - } - - - /* construct pin id array */ - TerminalIds = (PULONG)Context->Alloc(sizeof(ULONG) * DescriptorCount); - if (!TerminalIds) - { - /* no memory */ - Context->Free(InterfaceDescriptors); - Context->Free(FilterDescriptor); - Context->Free(Descriptors); - return UA_STATUS_NO_MEMORY; - } - - /* now assign terminal ids */ - Status = UsbAudio_AssignTerminalIds(Context, DescriptorCount, Descriptors, TerminalIds, &NewDescriptorCount); - if(Status != UA_STATUS_SUCCESS || NewDescriptorCount == 0) - { - /* failed to initialize */ - Context->Free(InterfaceDescriptors); - Context->Free(FilterDescriptor); - Context->Free(Descriptors); - Context->Free(TerminalIds); - DPRINT1("[LIBUSBAUDIO] Failed to assign terminal ids with %x DescriptorCount %lx\n", Status, DescriptorCount); - return UA_STATUS_UNSUCCESSFUL; - } - - - /* init filter */ - FilterDescriptor->Version = KSFILTER_DESCRIPTOR_VERSION; - FilterDescriptor->Flags = 0; /* FIXME */ - FilterDescriptor->PinDescriptorsCount = NewDescriptorCount; - FilterDescriptor->PinDescriptorSize = sizeof(KSPIN_DESCRIPTOR_EX); - FilterDescriptor->PinDescriptors = Context->Alloc(sizeof(KSPIN_DESCRIPTOR_EX) * FilterDescriptor->PinDescriptorsCount); - if (!FilterDescriptor->PinDescriptors) - { - /* no memory */ - Context->Free(InterfaceDescriptors); - Context->Free(FilterDescriptor); - Context->Free(Descriptors); - Context->Free(TerminalIds); - return UA_STATUS_NO_MEMORY; - } - - /* now init pin properties */ - for(Index = 0; Index < FilterDescriptor->PinDescriptorsCount; Index++) - { - /* now init every pin descriptor */ - Status = UsbAudio_InitPinDescriptor(ConfigurationDescriptor, ConfigurationDescriptorSize, (PKSPIN_DESCRIPTOR_EX)&FilterDescriptor->PinDescriptors[Index], DescriptorCount, Descriptors, TerminalIds[Index]); - if (Status != UA_STATUS_SUCCESS) - break; - } - - if (Status != UA_STATUS_SUCCESS) - { - /* failed to init pin descriptor */ - Context->Free(InterfaceDescriptors); - Context->Free((PVOID)FilterDescriptor->PinDescriptors); - Context->Free(FilterDescriptor); - Context->Free(Descriptors); - Context->Free(TerminalIds); - DPRINT1("[LIBUSBAUDIO] Failed to init pin with %x\n", Status); - return Status; - } - - - /* now assign data ranges to the pins */ - for(Index = 0; Index < InterfaceCount; Index++) - { - /* get descriptor */ - InterfaceDescriptor = (PUSB_INTERFACE_DESCRIPTOR)InterfaceDescriptors[Index]; - - /* sanity check */ - ASSERT(InterfaceDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE); - DPRINT1("InterfaceNumber %d bInterfaceClass %x bInterfaceSubClass %x\n", InterfaceDescriptor->bInterfaceNumber, InterfaceDescriptor->bInterfaceClass, InterfaceDescriptor->bInterfaceSubClass); - - if (InterfaceDescriptor->bInterfaceClass != 0x01 && InterfaceDescriptor->bInterfaceSubClass != 0x02) - continue; - - /* assign data ranges */ - Status = UsbAudio_AssignDataRanges(Context, ConfigurationDescriptor, ConfigurationDescriptorSize, FilterDescriptor, InterfaceDescriptors, InterfaceCount, Index, TerminalIds); - if (Status != UA_STATUS_SUCCESS) - break; - } - - if (Status != UA_STATUS_SUCCESS) - { - /* failed to init pin descriptor */ - Context->Free(InterfaceDescriptors); - Context->Free((PVOID)FilterDescriptor->PinDescriptors); - Context->Free(FilterDescriptor); - Context->Free(Descriptors); - Context->Free(TerminalIds); - return Status; - } - - - - if (Status != UA_STATUS_SUCCESS) - { - /* failed to init pin descriptor */ - Context->Free(InterfaceDescriptors); - Context->Free((PVOID)FilterDescriptor->PinDescriptors); - Context->Free(FilterDescriptor); - Context->Free(Descriptors); - Context->Free(TerminalIds); - return Status; - } - - Context->Context = FilterDescriptor; - return Status; - -} - -USBAUDIO_STATUS -UsbAudio_GetFilter( - IN PUSBAUDIO_CONTEXT Context, - OUT PVOID * OutFilterDescriptor) -{ - if (!OutFilterDescriptor) - return UA_STATUS_INVALID_PARAMETER; - - *OutFilterDescriptor = Context->Context; - return UA_STATUS_SUCCESS; -} \ No newline at end of file diff --git a/reactos/sdk/lib/drivers/sound/libusbaudio/libusbaudio.h b/reactos/sdk/lib/drivers/sound/libusbaudio/libusbaudio.h deleted file mode 100644 index 5d48c9f9466..00000000000 --- a/reactos/sdk/lib/drivers/sound/libusbaudio/libusbaudio.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -typedef enum -{ - UA_STATUS_SUCCESS = 0, - UA_STATUS_NOTINITIALIZED, - UA_STATUS_NOT_IMPLEMENTED, - UA_STATUS_NO_MORE_DEVICES, - UA_STATUS_MORE_ENTRIES, - UA_STATUS_INVALID_PARAMETER, - UA_STATUS_UNSUCCESSFUL, - UA_STATUS_NO_MEMORY -}USBAUDIO_STATUS; - -typedef PVOID (*PUSBAUDIO_ALLOC)( - IN ULONG NumberOfBytes); - -typedef VOID (*PUSBAUDIO_FREE)( - IN PVOID Block); - -typedef VOID (*PUSBAUDIO_COPY)( - IN PVOID Dst, - IN PVOID Src, - IN ULONG Length); - -typedef struct -{ - ULONG Size; - PVOID Context; - - PUSBAUDIO_ALLOC Alloc; - PUSBAUDIO_FREE Free; - PUSBAUDIO_COPY Copy; - - -}USBAUDIO_CONTEXT, *PUSBAUDIO_CONTEXT; - -USBAUDIO_STATUS -UsbAudio_InitializeContext( - IN PUSBAUDIO_CONTEXT Context, - IN PUSBAUDIO_ALLOC Alloc, - IN PUSBAUDIO_FREE Free, - IN PUSBAUDIO_COPY Copy); - - -USBAUDIO_STATUS -UsbAudio_ParseConfigurationDescriptor( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorSize); - -USBAUDIO_STATUS -UsbAudio_GetFilter( - IN PUSBAUDIO_CONTEXT Context, - OUT PVOID * OutFilterDescriptor); - diff --git a/reactos/sdk/lib/drivers/sound/libusbaudio/parser.c b/reactos/sdk/lib/drivers/sound/libusbaudio/parser.c deleted file mode 100644 index 0684b96a4e5..00000000000 --- a/reactos/sdk/lib/drivers/sound/libusbaudio/parser.c +++ /dev/null @@ -1,390 +0,0 @@ -/* -* COPYRIGHT: See COPYING in the top level directory -* PROJECT: ReactOS Kernel Streaming -* FILE: lib/drivers/sound/libusbaudio/libusbaudio.c -* PURPOSE: USB AUDIO Parser -* PROGRAMMER: Johannes Anderwald -*/ - -#include "priv.h" - -USBAUDIO_STATUS -UsbAudio_CountDescriptors( - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN UCHAR DescriptorType, - IN PUSB_COMMON_DESCRIPTOR StartPosition, - IN PUSB_COMMON_DESCRIPTOR EndPosition, - OUT PULONG DescriptorCount) -{ - PUSB_COMMON_DESCRIPTOR Descriptor; - ULONG Count = 0; - - /* init result */ - *DescriptorCount = 0; - - /* enumerate descriptors */ - Descriptor = StartPosition; - if (Descriptor == NULL) - Descriptor = (PUSB_COMMON_DESCRIPTOR)ConfigurationDescriptor; - - if (EndPosition == NULL) - EndPosition = (PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)ConfigurationDescriptor + ConfigurationDescriptorLength); - - - while((ULONG_PTR)Descriptor < ((ULONG_PTR)EndPosition)) - { - if (!Descriptor->bLength || !Descriptor->bDescriptorType) - { - /* bogus descriptor */ - return UA_STATUS_UNSUCCESSFUL; - } - - if (Descriptor->bDescriptorType == DescriptorType) - { - /* found descriptor */ - Count++; - } - - /* move to next descriptor */ - Descriptor = (PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)Descriptor + Descriptor->bLength); - - } - - /* store result */ - *DescriptorCount = Count; - return UA_STATUS_SUCCESS; -} - -USBAUDIO_STATUS -UsbAudio_GetDescriptors( - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN UCHAR DescriptorType, - IN ULONG DescriptorCount, - IN PUSB_COMMON_DESCRIPTOR StartPosition, - IN PUSB_COMMON_DESCRIPTOR EndPosition, - OUT PUSB_COMMON_DESCRIPTOR *Descriptors) -{ - PUSB_COMMON_DESCRIPTOR Descriptor; - ULONG Count = 0; - - /* enumerate descriptors */ - Descriptor = StartPosition; - if (Descriptor == NULL) - Descriptor = (PUSB_COMMON_DESCRIPTOR)ConfigurationDescriptor; - - if (EndPosition == NULL) - EndPosition = (PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)ConfigurationDescriptor + ConfigurationDescriptorLength); - - while((ULONG_PTR)Descriptor < ((ULONG_PTR)EndPosition)) - { - if (!Descriptor->bLength || !Descriptor->bDescriptorType) - { - /* bogus descriptor */ - return UA_STATUS_UNSUCCESSFUL; - } - - if (Descriptor->bDescriptorType == DescriptorType) - { - /* found descriptor */ - if (Count >= DescriptorCount) - break; - - /* store result */ - Descriptors[Count] = Descriptor; - Count++; - } - - /* move to next descriptor */ - Descriptor = (PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)Descriptor + Descriptor->bLength); - } - - /* done */ - return UA_STATUS_SUCCESS; -} - -USBAUDIO_STATUS -UsbAudio_CountInterfaceDescriptors( - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - OUT PULONG DescriptorCount) -{ - return UsbAudio_CountDescriptors(ConfigurationDescriptor, ConfigurationDescriptorLength, USB_INTERFACE_DESCRIPTOR_TYPE, NULL, NULL, DescriptorCount); -} - -USBAUDIO_STATUS -UsbAudio_CreateDescriptorArray( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN ULONG ArrayLength, - IN ULONG DescriptorType, - IN PUSB_COMMON_DESCRIPTOR StartPosition, - IN PUSB_COMMON_DESCRIPTOR EndPosition, - OUT PUSB_COMMON_DESCRIPTOR ** Array) -{ - USBAUDIO_STATUS Status; - PUSB_COMMON_DESCRIPTOR * Descriptors; - - /* zero result */ - *Array = NULL; - - /* first allocate descriptor array */ - Descriptors = (PUSB_COMMON_DESCRIPTOR*)Context->Alloc(sizeof(PUSB_COMMON_DESCRIPTOR) * ArrayLength); - if (!Descriptors) - { - /* no memory */ - return UA_STATUS_NO_MEMORY; - } - - /* extract control terminal descriptors */ - Status = UsbAudio_GetDescriptors(ConfigurationDescriptor, ConfigurationDescriptorLength, DescriptorType, ArrayLength, StartPosition, EndPosition, Descriptors); - if (Status != UA_STATUS_SUCCESS) - { - /* failed */ - Context->Free(Descriptors); - return Status; - } - - /* store result */ - *Array = Descriptors; - return UA_STATUS_SUCCESS; -} - -USBAUDIO_STATUS -UsbAudio_CountAudioDescriptors( - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG InterfaceDescriptorCount, - IN ULONG InterfaceDescriptorIndex, - OUT PULONG DescriptorCount) -{ - if (InterfaceDescriptorIndex + 1 == InterfaceDescriptorCount) - return UsbAudio_CountDescriptors(ConfigurationDescriptor, ConfigurationDescriptorLength, USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE, InterfaceDescriptors[InterfaceDescriptorIndex], NULL, DescriptorCount); - else - return UsbAudio_CountDescriptors(ConfigurationDescriptor, ConfigurationDescriptorLength, USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE, InterfaceDescriptors[InterfaceDescriptorIndex], InterfaceDescriptors[InterfaceDescriptorIndex + 1], DescriptorCount); -} - -USBAUDIO_STATUS -UsbAudio_CreateInterfaceDescriptorsArray( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN ULONG ArrayLength, - OUT PUSB_COMMON_DESCRIPTOR ** Array) -{ - return UsbAudio_CreateDescriptorArray(Context, ConfigurationDescriptor, ConfigurationDescriptorLength, ArrayLength, USB_INTERFACE_DESCRIPTOR_TYPE, NULL, NULL, Array); -} - -USBAUDIO_STATUS -UsbAudio_CreateAudioDescriptorArray( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG InterfaceDescriptorCount, - IN ULONG InterfaceDescriptorIndex, - IN ULONG ArrayLength, - OUT PUSB_COMMON_DESCRIPTOR ** Array) -{ - if (InterfaceDescriptorIndex + 1 == InterfaceDescriptorCount) - return UsbAudio_CreateDescriptorArray(Context, ConfigurationDescriptor, ConfigurationDescriptorLength, ArrayLength, USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE, InterfaceDescriptors[InterfaceDescriptorIndex], NULL, Array); - else - return UsbAudio_CreateDescriptorArray(Context, ConfigurationDescriptor, ConfigurationDescriptorLength, ArrayLength, USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE, - InterfaceDescriptors[InterfaceDescriptorIndex], InterfaceDescriptors[InterfaceDescriptorIndex + 1], Array); -} - -PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR -UsbAudio_GetTerminalDescriptorById( - IN PUSB_COMMON_DESCRIPTOR *Descriptors, - IN ULONG DescriptorCount, - IN ULONG TerminalId) -{ - ULONG Index; - PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR Descriptor; - - for(Index = 0; Index < DescriptorCount; Index++) - { - /* get descriptor */ - Descriptor = (PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)Descriptors[Index]; - - /* is it an input / output terminal */ - DPRINT("Descriptor %p Type %x SubType %x TerminalID %x\n", Descriptor, Descriptor->bDescriptorType, Descriptor->bDescriptorSubtype, Descriptor->bTerminalID); - if (Descriptor->bDescriptorSubtype != USB_AUDIO_INPUT_TERMINAL && Descriptor->bDescriptorSubtype != USB_AUDIO_OUTPUT_TERMINAL) - continue; - - if (Descriptor->bTerminalID == TerminalId) - return Descriptor; - } - return NULL; -} - -ULONG -UsbAudio_GetAudioControlInterfaceIndex( - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG DescriptorCount) -{ - ULONG Index; - PUSB_INTERFACE_DESCRIPTOR Descriptor; - - - for(Index = 0; Index < DescriptorCount; Index++) - { - /* get descriptor */ - Descriptor = (PUSB_INTERFACE_DESCRIPTOR)InterfaceDescriptors[Index]; - ASSERT(Descriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE); - ASSERT(Descriptor->bLength == sizeof(USB_INTERFACE_DESCRIPTOR)); - - /* compare interface class */ - if (Descriptor->bInterfaceClass == 0x01 && Descriptor->bInterfaceSubClass == 0x01) - { - /* found audio control class */ - return Index; - } - } - - /* not found */ - return MAXULONG; -} - - -USBAUDIO_STATUS -UsbAudio_FindTerminalDescriptorAtIndexWithSubtypeAndTerminalType( - IN ULONG DescriptorCount, - IN PUSB_COMMON_DESCRIPTOR *Descriptors, - IN ULONG DescriptorIndex, - IN UCHAR Subtype, - IN USHORT TerminalType, - OUT PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR * OutDescriptor, - OUT PULONG OutDescriptorIndex) -{ - ULONG Index; - ULONG Count = 0; - PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR CurrentDescriptor; - - for(Index = 0; Index < DescriptorCount; Index++) - { - /* get current descriptor */ - CurrentDescriptor = (PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR)Descriptors[Index]; - ASSERT(CurrentDescriptor->bDescriptorType == USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE); - - if (CurrentDescriptor->bDescriptorSubtype == Subtype && - (TerminalType == USB_AUDIO_UNDEFINED_TERMINAL_TYPE || CurrentDescriptor->wTerminalType == TerminalType)) - { - /* found descriptor */ - if (Count == DescriptorIndex) - { - /* store result */ - *OutDescriptor = CurrentDescriptor; - *OutDescriptorIndex = Index; - return UA_STATUS_SUCCESS; - } - - Count++; - } - } - - /* not found */ - return UA_STATUS_UNSUCCESSFUL; -} - -USBAUDIO_STATUS -UsbAudio_AssignTerminalIds( - IN PUSBAUDIO_CONTEXT Context, - IN ULONG TerminalIdsLength, - IN PUSB_COMMON_DESCRIPTOR * TerminalIds, - OUT PULONG PinArray, - OUT PULONG PinArrayCount) -{ - ULONG Consumed = 0; - ULONG PinIndex = 0; - ULONG Index, DescriptorIndex; - PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR Descriptor; - USBAUDIO_STATUS Status; - - /* FIXME: support more than 32 terminals */ - ASSERT(TerminalIdsLength <= 32); - - /* first search for an output terminal with streaming type */ - Status = UsbAudio_FindTerminalDescriptorAtIndexWithSubtypeAndTerminalType(TerminalIdsLength, TerminalIds, 0, USB_AUDIO_OUTPUT_TERMINAL, USB_AUDIO_STREAMING_TERMINAL_TYPE, &Descriptor, &DescriptorIndex); - if (Status == UA_STATUS_SUCCESS) - { - /* found output terminal */ - PinArray[PinIndex] = Descriptor->bTerminalID; - Consumed |= 1 << DescriptorIndex; - DPRINT("Assigned TerminalId %x to PinIndex %lx Consumed %lx DescriptorIndex %lx\n", Descriptor->bTerminalID, PinIndex, Consumed, DescriptorIndex); - PinIndex++; - } - - /* now search for an input terminal with streaming type */ - Status = UsbAudio_FindTerminalDescriptorAtIndexWithSubtypeAndTerminalType(TerminalIdsLength, TerminalIds, 0, USB_AUDIO_INPUT_TERMINAL, USB_AUDIO_STREAMING_TERMINAL_TYPE, &Descriptor, &DescriptorIndex); - if (Status == UA_STATUS_SUCCESS) - { - /* found output terminal */ - PinArray[PinIndex] = Descriptor->bTerminalID; - Consumed |= 1 << DescriptorIndex; - PinIndex++; - } - - /* now assign all other input terminals */ - Index = 0; - do - { - /* find an input terminal */ - Status = UsbAudio_FindTerminalDescriptorAtIndexWithSubtypeAndTerminalType(TerminalIdsLength, TerminalIds, Index, USB_AUDIO_INPUT_TERMINAL, USB_AUDIO_UNDEFINED_TERMINAL_TYPE, &Descriptor, &DescriptorIndex); - if (Status != UA_STATUS_SUCCESS) - { - /* no more items */ - break; - } - - if (Consumed & (1 << DescriptorIndex)) - { - /* terminal has already been assigned to an pin */ - Index++; - continue; - } - - /* assign terminal */ - PinArray[PinIndex] = Descriptor->bTerminalID; - Consumed |= 1 << DescriptorIndex; - PinIndex++; - Index++; - - }while(Status == UA_STATUS_SUCCESS); - - - /* now assign all other output terminals */ - Index = 0; - do - { - /* find an input terminal */ - Status = UsbAudio_FindTerminalDescriptorAtIndexWithSubtypeAndTerminalType(TerminalIdsLength, TerminalIds, Index, USB_AUDIO_OUTPUT_TERMINAL, USB_AUDIO_UNDEFINED_TERMINAL_TYPE, &Descriptor, &DescriptorIndex); - if (Status != UA_STATUS_SUCCESS) - { - /* no more items */ - break; - } - - if (Consumed & (1 << DescriptorIndex)) - { - /* terminal has already been assigned to an pin */ - Index++; - continue; - } - - /* assign terminal */ - PinArray[PinIndex] = Descriptor->bTerminalID; - Consumed |= 1 << DescriptorIndex; - PinIndex++; - Index++; - - }while(Status == UA_STATUS_SUCCESS); - - /* store pin count */ - DPRINT("Consumed %lx PinIndex %lu\n", Consumed, PinIndex); - *PinArrayCount = PinIndex; - return UA_STATUS_SUCCESS; -} diff --git a/reactos/sdk/lib/drivers/sound/libusbaudio/priv.h b/reactos/sdk/lib/drivers/sound/libusbaudio/priv.h deleted file mode 100644 index 4c90c3852fe..00000000000 --- a/reactos/sdk/lib/drivers/sound/libusbaudio/priv.h +++ /dev/null @@ -1,182 +0,0 @@ -#pragma once - -#include -#include - -#include -#define NOBITMAP -#include -#include -#include -#include -#include -#include "Usb100.h" -#include - -#include "libusbaudio.h" - -#define USB_AUDIO_CONTROL_TERMINAL_DESCRIPTOR_TYPE (0x24) -#define USB_AUDIO_STREAMING_INTERFACE_INTERFACE_DESCRIPTOR_TYPE (0x24) - -#define USB_AUDIO_INPUT_TERMINAL (0x02) -#define USB_AUDIO_OUTPUT_TERMINAL (0x03) - -/* Universal Serial Bus Device Class Definition for Terminal Types Section A 1.1 */ -#define USB_AUDIO_PCM_DATA_FORMAT (0x01) -#define USB_AUDIO_PCM8_DATA_FORMAT (0x02) -#define USB_AUDIO_IEEE_FLOAT_DATA_FORMAT (0x03) -#define USB_AUDIO_ALAW_DATA_FORMAT (0x04) -#define USB_AUDIO_MULAW_DATA_FORMAT (0x05) - -/* Universal Serial Bus Device Class Definition for Terminal Types Section A 1.1 */ -#define USB_AUDIO_DATA_FORMAT_TYPE_1 (0x01) -#define USB_AUDIO_DATA_FORMAT_TYPE_2 (0x02) -#define USB_AUDIO_DATA_FORMAT_TYPE_3 (0x03) - - - -/* Universal Serial Bus Device Class Definition for Terminal Types Section 2.2 */ -#define USB_AUDIO_STREAMING_TERMINAL_TYPE (0x0101) - -#define USB_AUDIO_MICROPHONE_TERMINAL_TYPE (0x0201) -#define USB_AUDIO_DESKTOP_MICROPHONE_TERMINAL_TYPE (0x0202) -#define USB_AUDIO_PERSONAL_MICROPHONE_TERMINAL_TYPE (0x0203) -#define USB_AUDIO_OMMNI_MICROPHONE_TERMINAL_TYPE (0x0204) -#define USB_AUDIO_ARRAY_MICROPHONE_TERMINAL_TYPE (0x0205) -#define USB_AUDIO_ARRAY_PROCESSING_MICROPHONE_TERMINAL_TYPE (0x0206) - -#define USB_AUDIO_SPEAKER_TERMINAL_TYPE (0x0301) -#define USB_HEADPHONES_SPEAKER_TERMINAL_TYPE (0x0302) -#define USB_AUDIO_HMDA_TERMINAL_TYPE (0x0303) -#define USB_AUDIO_DESKTOP_SPEAKER_TERMINAL_TYPE (0x0304) -#define USB_AUDIO_ROOM_SPEAKER_TERMINAL_TYPE (0x0305) -#define USB_AUDIO_COMMUNICATION_SPEAKER_TERMINAL_TYPE (0x0306) -#define USB_AUDIO_SUBWOOFER_TERMINAL_TYPE (0x0307) -#define USB_AUDIO_UNDEFINED_TERMINAL_TYPE (0xFFFF) - -#define HTONS(x) ( ( (((unsigned short)(x)) >>8) & 0xff) | \ - ((((unsigned short)(x)) & 0xff)<<8) ) - -#include - -typedef struct -{ - UCHAR bLength; - UCHAR bDescriptorType; - UCHAR bDescriptorSubtype; - UCHAR bTerminalID; - USHORT wTerminalType; - UCHAR bAssocTerminal; - UCHAR bSourceID; - UCHAR iTerminal; -}USB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR, *PUSB_AUDIO_CONTROL_OUTPUT_TERMINAL_DESCRIPTOR; - - -typedef struct -{ - UCHAR bLength; - UCHAR bDescriptorType; - UCHAR bDescriptorSubtype; - UCHAR bTerminalID; - USHORT wTerminalType; - UCHAR bAssocTerminal; - UCHAR bNrChannels; - USHORT wChannelConfig; - UCHAR iChannelNames; - UCHAR iTerminal; -}USB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR, *PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR; - -typedef struct -{ - UCHAR bLength; - UCHAR bDescriptorType; - UCHAR bDescriptorSubtype; - UCHAR bTerminalLink; - UCHAR bDelay; - USHORT wFormatTag; -}USB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR, *PUSB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR; -C_ASSERT(sizeof(USB_AUDIO_STREAMING_INTERFACE_DESCRIPTOR) == 0x07); - -typedef struct -{ - UCHAR bLength; - UCHAR bDescriptorType; - UCHAR bDescriptorSubtype; - UCHAR bFormatType; - UCHAR bNrChannels; - UCHAR bSubframeSize; - UCHAR bBitResolution; - UCHAR bSamFreqType; - UCHAR tSamFreq[3]; -}USB_AUDIO_STREAMING_FORMAT_TYPE_1, *PUSB_AUDIO_STREAMING_FORMAT_TYPE_1; -C_ASSERT(sizeof(USB_AUDIO_STREAMING_FORMAT_TYPE_1) == 0x0B); - -/* format.c */ - -USBAUDIO_STATUS -UsbAudio_AssignDataRanges( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorSize, - IN PKSFILTER_DESCRIPTOR FilterDescriptor, - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG InterfaceCount, - IN ULONG InterfaceIndex, - IN PULONG TerminalIds); - - -/* parser.c */ - -USBAUDIO_STATUS -UsbAudio_CountInterfaceDescriptors( - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - OUT PULONG DescriptorCount); - -USBAUDIO_STATUS -UsbAudio_CreateInterfaceDescriptorsArray( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN ULONG ArrayLength, - OUT PUSB_COMMON_DESCRIPTOR ** Array); - -ULONG -UsbAudio_GetAudioControlInterfaceIndex( - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG DescriptorCount); - -USBAUDIO_STATUS -UsbAudio_CountAudioDescriptors( - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG InterfaceDescriptorCount, - IN ULONG InterfaceDescriptorIndex, - OUT PULONG DescriptorCount); - -USBAUDIO_STATUS -UsbAudio_CreateAudioDescriptorArray( - IN PUSBAUDIO_CONTEXT Context, - IN PUCHAR ConfigurationDescriptor, - IN ULONG ConfigurationDescriptorLength, - IN PUSB_COMMON_DESCRIPTOR * InterfaceDescriptors, - IN ULONG InterfaceDescriptorCount, - IN ULONG InterfaceDescriptorIndex, - IN ULONG ArrayLength, - OUT PUSB_COMMON_DESCRIPTOR ** Array); - -USBAUDIO_STATUS -UsbAudio_AssignTerminalIds( - IN PUSBAUDIO_CONTEXT Context, - IN ULONG TerminalIdsLength, - IN PUSB_COMMON_DESCRIPTOR * TerminalIds, - OUT PULONG PinArray, - OUT PULONG PinArrayCount); - -PUSB_AUDIO_CONTROL_INPUT_TERMINAL_DESCRIPTOR -UsbAudio_GetTerminalDescriptorById( - IN PUSB_COMMON_DESCRIPTOR *Descriptors, - IN ULONG DescriptorCount, - IN ULONG TerminalId); -