📄 dispaud.c
字号:
i = ProcessingDesc->bLength - 13 - ProcessingDesc->bNrInPins - i;
if (i)
{
AppendTextBuffer("Process Specific:\r\n");
DisplayBytes(data, i);
}
return TRUE;
}
//*****************************************************************************
//
// DisplayACExtensionUnit()
//
//*****************************************************************************
BOOL
DisplayACExtensionUnit (
PUSB_AUDIO_EXTENSION_UNIT_DESCRIPTOR ExtensionDesc
)
{
UCHAR i;
PUCHAR data;
if (ExtensionDesc->bLength < 13)
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Extension Unit Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
ExtensionDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
ExtensionDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
ExtensionDesc->bDescriptorSubtype);
AppendTextBuffer("bUnitID: 0x%02X\r\n",
ExtensionDesc->bUnitID);
AppendTextBuffer("wExtensionCode: 0x%04X\r\n",
ExtensionDesc->wExtensionCode);
AppendTextBuffer("bNrInPins: 0x%02X\r\n",
ExtensionDesc->bNrInPins);
for (i=0; i<ExtensionDesc->bNrInPins; i++)
{
AppendTextBuffer("baSourceID[%d]: 0x%02X\r\n",
i+1,
ExtensionDesc->baSourceID[i]);
}
data = &ExtensionDesc->baSourceID[ExtensionDesc->bNrInPins];
AppendTextBuffer("bNrChannels: 0x%02X\r\n",
*data++);
AppendTextBuffer("wChannelConfig: 0x%04X\r\n",
*((PUSHORT)data)++);
AppendTextBuffer("iChannelNames: 0x%02X\r\n",
*data++);
i = *data++;
AppendTextBuffer("bControlSize: 0x%02X\r\n",
i);
AppendTextBuffer("bmControls:\r\n");
DisplayBytes(data, i);
data += i;
AppendTextBuffer("iExtension: 0x%02X\r\n",
*data);
return TRUE;
}
//*****************************************************************************
//
// DisplayASGeneral()
//
//*****************************************************************************
BOOL
DisplayASGeneral (
PUSB_AUDIO_GENERAL_DESCRIPTOR GeneralDesc
)
{
PCHAR pStr;
if (GeneralDesc->bLength != sizeof(USB_AUDIO_GENERAL_DESCRIPTOR))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Streaming Class Specific Interface Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
GeneralDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
GeneralDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
GeneralDesc->bDescriptorSubtype);
AppendTextBuffer("bTerminalLink: 0x%02X\r\n",
GeneralDesc->bTerminalLink);
AppendTextBuffer("bDelay: 0x%02X\r\n",
GeneralDesc->bDelay);
AppendTextBuffer("wFormatTag: 0x%04X",
GeneralDesc->wFormatTag);
pStr = FormatTypeCodeToName(GeneralDesc->wFormatTag);
if (pStr)
{
AppendTextBuffer(" (%s)\r\n",
pStr);
}
else
{
AppendTextBuffer("\r\n");
}
return TRUE;
}
//*****************************************************************************
//
// DisplayCSEndpoint()
//
//*****************************************************************************
BOOL
DisplayCSEndpoint (
PUSB_AUDIO_ENDPOINT_DESCRIPTOR EndpointDesc
)
{
if (EndpointDesc->bLength != sizeof(USB_AUDIO_ENDPOINT_DESCRIPTOR))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Streaming Class Specific Audio Data Endpoint Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
EndpointDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
EndpointDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
EndpointDesc->bDescriptorSubtype);
AppendTextBuffer("bmAttributes: 0x%02X\r\n",
EndpointDesc->bmAttributes);
AppendTextBuffer("bLockDelayUnits: 0x%02X\r\n",
EndpointDesc->bLockDelayUnits);
AppendTextBuffer("wLockDelay: 0x%04X\r\n",
EndpointDesc->wLockDelay);
return TRUE;
}
//*****************************************************************************
//
// DisplayASFormatType()
//
//*****************************************************************************
BOOL
DisplayASFormatType (
PUSB_AUDIO_COMMON_FORMAT_DESCRIPTOR FormatDesc
)
{
UCHAR i, n;
ULONG freq;
PUCHAR data;
if (FormatDesc->bLength < sizeof(USB_AUDIO_COMMON_FORMAT_DESCRIPTOR))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Streaming Format Type Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
FormatDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
FormatDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
FormatDesc->bDescriptorSubtype);
AppendTextBuffer("bFormatType: 0x%02X\r\n",
FormatDesc->bFormatType);
if (FormatDesc->bFormatType == 0x01 ||
FormatDesc->bFormatType == 0x03)
{
PUSB_AUDIO_TYPE_I_OR_III_FORMAT_DESCRIPTOR FormatI_IIIDesc;
FormatI_IIIDesc = (PUSB_AUDIO_TYPE_I_OR_III_FORMAT_DESCRIPTOR)FormatDesc;
AppendTextBuffer("bNrChannels: 0x%02X\r\n",
FormatI_IIIDesc->bNrChannels);
AppendTextBuffer("bSubframeSize: 0x%02X\r\n",
FormatI_IIIDesc->bSubframeSize);
AppendTextBuffer("bBitResolution: 0x%02X\r\n",
FormatI_IIIDesc->bBitResolution);
AppendTextBuffer("bSamFreqType: 0x%02X\r\n",
FormatI_IIIDesc->bSamFreqType);
data = (PUCHAR)(FormatI_IIIDesc + 1);
n = FormatI_IIIDesc->bSamFreqType;
}
else if (FormatDesc->bFormatType == 0x02)
{
PUSB_AUDIO_TYPE_II_FORMAT_DESCRIPTOR FormatIIDesc;
FormatIIDesc = (PUSB_AUDIO_TYPE_II_FORMAT_DESCRIPTOR)FormatDesc;
AppendTextBuffer("wMaxBitRate: 0x%04X\r\n",
FormatIIDesc->wMaxBitRate);
AppendTextBuffer("wSamplesPerFrame: 0x%04X\r\n",
FormatIIDesc->wSamplesPerFrame);
AppendTextBuffer("bSamFreqType: 0x%02X\r\n",
FormatIIDesc->bSamFreqType);
data = (PUCHAR)(FormatIIDesc + 1);
n = FormatIIDesc->bSamFreqType;
}
else
{
data = NULL;
}
if (data != NULL)
{
if (n == 0)
{
freq = (data[0]) + (data[1] << 8) + (data[2] << 16);
data += 3;
AppendTextBuffer("tLowerSamFreq: 0x%06X (%d Hz)\r\n",
freq,
freq);
freq = (data[0]) + (data[1] << 8) + (data[2] << 16);
data += 3;
AppendTextBuffer("tUpperSamFreq: 0x%06X (%d Hz)\r\n",
freq,
freq);
}
else
{
for (i=0; i<n; i++)
{
freq = (data[0]) + (data[1] << 8) + (data[2] << 16);
data += 3;
AppendTextBuffer("tSamFreq[%d]: 0x%06X (%d Hz)\r\n",
i+1,
freq,
freq);
}
}
}
return TRUE;
}
//*****************************************************************************
//
// DisplayASFormatSpecific()
//
//*****************************************************************************
BOOL
DisplayASFormatSpecific (
PUSB_AUDIO_COMMON_DESCRIPTOR CommonDesc
)
{
AppendTextBuffer("\r\nAudio Streaming Format Specific Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
CommonDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
CommonDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
CommonDesc->bDescriptorSubtype);
DisplayBytes((PUCHAR)(CommonDesc + 1),
CommonDesc->bLength);
return TRUE;
}
//*****************************************************************************
//
// DisplayBytes()
//
//*****************************************************************************
VOID
DisplayBytes (
PUCHAR Data,
USHORT Len
)
{
USHORT i;
for (i = 0; i < Len; i++)
{
AppendTextBuffer("%02X ",
Data[i]);
if (i % 16 == 15)
{
AppendTextBuffer("\r\n");
}
}
if (i % 16 != 0)
{
AppendTextBuffer("\r\n");
}
}
//*****************************************************************************
//
// TermTypeCodeToName()
//
//*****************************************************************************
PCHAR
TermTypeCodeToName (
USHORT TermTypeCode
)
{
PTERMTYPE termType;
for (termType=TermTypes; termType->TermTypeName; termType++)
{
if (termType->TermTypeCode == TermTypeCode)
{
break;
}
}
return termType->TermTypeName;
}
//*****************************************************************************
//
// FormatTypeCodeToName()
//
//*****************************************************************************
PCHAR
FormatTypeCodeToName (
USHORT FormatTypeCode
)
{
PFORMATTYPE formatType;
for (formatType=FormatTypes; formatType->FormatTypeName; formatType++)
{
if (formatType->FormatTypeCode == FormatTypeCode)
{
break;
}
}
return formatType->FormatTypeName;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -