📄 dispaud.c
字号:
/*++
Copyright (c) 1997-1998 Microsoft Corporation
Module Name:
DISPAUD.C
Abstract:
This source file contains routines which update the edit control
to display information about USB Audio descriptors.
Environment:
user mode
Revision History:
03-07-1998 : created
--*/
//*****************************************************************************
// I N C L U D E S
//*****************************************************************************
#include <windows.h>
#include <basetyps.h>
#include "usbview.h"
//*****************************************************************************
// D E F I N E S
//*****************************************************************************
//*****************************************************************************
// T Y P E D E F S
//*****************************************************************************
typedef struct _TERMTYPE
{
USHORT TermTypeCode;
PCHAR TermTypeName;
} TERMTYPE, *PTERMTYPE;
typedef struct _FORMATTYPE
{
USHORT FormatTypeCode;
PCHAR FormatTypeName;
} FORMATTYPE, *PFORMATTYPE;
//*****************************************************************************
// G L O B A L S P R I V A T E T O T H I S F I L E
//*****************************************************************************
//
// USB Device Class Definition for Terminal Types 0.9 Draft Revision
//
TERMTYPE TermTypes[] =
{
//
// 2.1 USB Terminal Types
//
{0x0100, "USB Undefined"},
{0x0101, "USB streaming"},
{0x01FF, "USB vendor specific"},
//
// 2.2 Input Terminal Types
//
{0x0200, "Input Undefined"},
{0x0201, "Microphone"},
{0x0202, "Desktop microphone"},
{0x0203, "Personal microphone"},
{0x0204, "Omni-directional microphone"},
{0x0205, "Microphone array"},
{0x0206, "Processing microphone array"},
//
// 2.3 Output Terminal Types
//
{0x0300, "Output Undefined"},
{0x0301, "Speaker"},
{0x0302, "Headphones"},
{0x0303, "Head Mounted Display Audio"},
{0x0304, "Desktop speaker"},
{0x0305, "Room speaker"},
{0x0306, "Communication speaker"},
{0x0307, "Low frequency effects speaker"},
//
// 2.4 Bi-directional Terminal Types
//
{0x0400, "Bi-directional Undefined"},
{0x0401, "Handset"},
{0x0402, "Headset"},
{0x0403, "Speakerphone, no echo reduction"},
{0x0404, "Echo-suppressing speakerphone"},
{0x0405, "Echo-canceling speakerphone"},
//
// 2.5 Telephony Terminal Types
//
{0x0500, "Telephony Undefined"},
{0x0501, "Phone line"},
{0x0502, "Telephone"},
{0x0503, "Down Line Phone"},
//
// 2.6 External Terminal Types
//
{0x0600, "External Undefined"},
{0x0601, "Analog connector"},
{0x0602, "Digital audio interface"},
{0x0603, "Line connector"},
{0x0604, "Legacy audio connector"},
{0x0605, "S/PDIF interface"},
{0x0606, "1394 DA stream"},
{0x0607, "1394 DV stream soundtrack"},
//
// Embedded Function Terminal Types
//
{0x0700, "Embedded Undefined"},
{0x0701, "Level Calibration Noise Source"},
{0x0702, "Equalization Noise"},
{0x0703, "CD player"},
{0x0704, "DAT"},
{0x0705, "DCC"},
{0x0706, "MiniDisk"},
{0x0707, "Analog Tape"},
{0x0708, "Phonograph"},
{0x0709, "VCR Audio"},
{0x070A, "Video Disc Audio"},
{0x070B, "DVD Audio"},
{0x070C, "TV Tuner Audio"},
{0x070D, "Satellite Receiver Audio"},
{0x070E, "Cable Tuner Audio"},
{0x070F, "DSS Audio"},
{0x0710, "Radio Receiver"},
{0x0711, "Radio Transmitter"},
{0x0712, "Multi-track Recorder"},
{0x0713, "Synthesizer"},
//
// Terminate List
//
{0xFFFF, NULL}
};
//
// USB Device Class Definition for Audio Data Formats 0.9 Draft Revision
//
FORMATTYPE FormatTypes[] =
{
//
// A.1.1 Audio Data Format Type I Codes
//
{0x0000, "TYPE_I_UNDEFINED"},
{0x0001, "PCM"},
{0x0002, "PCM8"},
{0x0003, "IEEE_FLOAT"},
{0x0004, "ALAW"},
{0x0005, "MULAW"},
//
// A.1.2 Audio Data Format Type II Codes
//
{0x1000, "TYPE_II_UNDEFINED"},
{0x1001, "MPEG"},
{0x1002, "AC-3"},
//
// A.1.3 Audio Data Format Type III Codes
//
{0x2000, "TYPE_III_UNDEFINED"},
{0x2001, "IEC1937_AC-3"},
{0x2002, "IEC1937_MPEG-1_Layer1"},
{0x2003, "IEC1937_MPEG-1_Layer2/3 or IEC1937_MPEG-2_NOEXT"},
{0x2004, "IEC1937_MPEG-2_EXT"},
{0x2005, "IEC1937_MPEG-2_Layer1_LS"},
{0x2006, "IEC1937_MPEG-2_Layer2/3_LS"},
//
// Terminate List
//
{0xFFFF, NULL}
};
//*****************************************************************************
// L O C A L F U N C T I O N P R O T O T Y P E S
//*****************************************************************************
BOOL
DisplayACHeader (
PUSB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR HeaderDesc
);
BOOL
DisplayACInputTerminal (
PUSB_AUDIO_INPUT_TERMINAL_DESCRIPTOR ITDesc
);
BOOL
DisplayACOutputTerminal (
PUSB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR OTDesc
);
BOOL
DisplayACMixerUnit (
PUSB_AUDIO_MIXER_UNIT_DESCRIPTOR MixerDesc
);
BOOL
DisplayACSelectorUnit (
PUSB_AUDIO_SELECTOR_UNIT_DESCRIPTOR SelectorDesc
);
BOOL
DisplayACFeatureUnit (
PUSB_AUDIO_FEATURE_UNIT_DESCRIPTOR FeatureDesc
);
BOOL
DisplayACProcessingUnit (
PUSB_AUDIO_PROCESSING_UNIT_DESCRIPTOR ProcessingDesc
);
BOOL
DisplayACExtensionUnit (
PUSB_AUDIO_EXTENSION_UNIT_DESCRIPTOR ExtensionDesc
);
BOOL
DisplayASGeneral (
PUSB_AUDIO_GENERAL_DESCRIPTOR GeneralDesc
);
BOOL
DisplayCSEndpoint (
PUSB_AUDIO_ENDPOINT_DESCRIPTOR EndpointDesc
);
BOOL
DisplayASFormatType (
PUSB_AUDIO_COMMON_FORMAT_DESCRIPTOR FormatDesc
);
BOOL
DisplayASFormatSpecific (
PUSB_AUDIO_COMMON_DESCRIPTOR CommonDesc
);
VOID
DisplayBytes (
PUCHAR Data,
USHORT Len
);
PCHAR
TermTypeCodeToName (
USHORT TermTypeCode
);
PCHAR
FormatTypeCodeToName (
USHORT FormatTypeCode
);
//*****************************************************************************
// L O C A L F U N C T I O N S
//*****************************************************************************
//*****************************************************************************
//
// DisplayAudioDescriptor()
//
// CommonDesc - An Audio Class Descriptor
//
// bInterfaceSubClass - The SubClass of the Interface containing the descriptor
//
//*****************************************************************************
BOOL
DisplayAudioDescriptor (
PUSB_AUDIO_COMMON_DESCRIPTOR CommonDesc,
UCHAR bInterfaceSubClass
)
{
switch (CommonDesc->bDescriptorType)
{
case USB_AUDIO_CS_INTERFACE:
switch (bInterfaceSubClass)
{
case USB_AUDIO_SUBCLASS_AUDIOCONTROL:
switch (CommonDesc->bDescriptorSubtype)
{
case USB_AUDIO_AC_HEADER:
return DisplayACHeader((PUSB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AC_INPUT_TERMINAL:
return DisplayACInputTerminal((PUSB_AUDIO_INPUT_TERMINAL_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AC_OUTPUT_TERMINAL:
return DisplayACOutputTerminal((PUSB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AC_MIXER_UNIT:
return DisplayACMixerUnit((PUSB_AUDIO_MIXER_UNIT_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AC_SELECTOR_UNIT:
return DisplayACSelectorUnit((PUSB_AUDIO_SELECTOR_UNIT_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AC_FEATURE_UNIT:
return DisplayACFeatureUnit((PUSB_AUDIO_FEATURE_UNIT_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AC_PROCESSING_UNIT:
return DisplayACProcessingUnit((PUSB_AUDIO_PROCESSING_UNIT_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AC_EXTENSION_UNIT:
return DisplayACExtensionUnit((PUSB_AUDIO_EXTENSION_UNIT_DESCRIPTOR)CommonDesc);
default:
break;
}
break;
case USB_AUDIO_SUBCLASS_AUDIOSTREAMING:
switch (CommonDesc->bDescriptorSubtype)
{
case USB_AUDIO_AS_GENERAL:
return DisplayASGeneral((PUSB_AUDIO_GENERAL_DESCRIPTOR)CommonDesc);
case USB_AUDIO_AS_FORMAT_TYPE:
return DisplayASFormatType((PUSB_AUDIO_COMMON_FORMAT_DESCRIPTOR)CommonDesc);
break;
case USB_AUDIO_AS_FORMAT_SPECIFIC:
return DisplayASFormatSpecific(CommonDesc);
default:
break;
}
break;
default:
break;
}
break;
case USB_AUDIO_CS_ENDPOINT:
return DisplayCSEndpoint((PUSB_AUDIO_ENDPOINT_DESCRIPTOR)CommonDesc);
default:
break;
}
return FALSE;
}
//*****************************************************************************
//
// DisplayACHeader()
//
//*****************************************************************************
BOOL
DisplayACHeader (
PUSB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR HeaderDesc
)
{
UINT i;
if (HeaderDesc->bLength < sizeof(USB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Interface Header Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
HeaderDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
HeaderDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
HeaderDesc->bDescriptorSubtype);
AppendTextBuffer("bcdADC: 0x%04X\r\n",
HeaderDesc->bcdADC);
AppendTextBuffer("wTotalLength: 0x%04X\r\n",
HeaderDesc->wTotalLength);
AppendTextBuffer("bInCollection: 0x%02X\r\n",
HeaderDesc->bInCollection);
for (i=0; i<HeaderDesc->bInCollection; i++)
{
AppendTextBuffer("baInterfaceNr[%d]: 0x%02X\r\n",
i+1,
HeaderDesc->baInterfaceNr[i]);
}
return TRUE;
}
//*****************************************************************************
//
// DisplayACInputTerminal()
//
//*****************************************************************************
BOOL
DisplayACInputTerminal (
PUSB_AUDIO_INPUT_TERMINAL_DESCRIPTOR ITDesc
)
{
PCHAR pStr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -