📄 dispaud.c
字号:
if (ITDesc->bLength != sizeof(USB_AUDIO_INPUT_TERMINAL_DESCRIPTOR))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Input Terminal Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
ITDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
ITDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
ITDesc->bDescriptorSubtype);
AppendTextBuffer("bTerminalID: 0x%02X\r\n",
ITDesc->bTerminalID);
AppendTextBuffer("wTerminalType: 0x%04X",
ITDesc->wTerminalType);
pStr = TermTypeCodeToName(ITDesc->wTerminalType);
if (pStr)
{
AppendTextBuffer(" (%s)\r\n",
pStr);
}
else
{
AppendTextBuffer("\r\n");
}
AppendTextBuffer("bAssocTerminal: 0x%02X\r\n",
ITDesc->bAssocTerminal);
AppendTextBuffer("bNrChannels: 0x%02X\r\n",
ITDesc->bNrChannels);
AppendTextBuffer("wChannelConfig: 0x%04X\r\n",
ITDesc->wChannelConfig);
AppendTextBuffer("iChannelNames: 0x%02X\r\n",
ITDesc->iChannelNames);
AppendTextBuffer("iTerminal: 0x%02X\r\n",
ITDesc->iTerminal);
return TRUE;
}
//*****************************************************************************
//
// DisplayACOutputTerminal()
//
//*****************************************************************************
BOOL
DisplayACOutputTerminal (
PUSB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR OTDesc
)
{
PCHAR pStr;
if (OTDesc->bLength != sizeof(USB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Output Terminal Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
OTDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
OTDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
OTDesc->bDescriptorSubtype);
AppendTextBuffer("bTerminalID: 0x%02X\r\n",
OTDesc->bTerminalID);
AppendTextBuffer("wTerminalType: 0x%04X",
OTDesc->wTerminalType);
pStr = TermTypeCodeToName(OTDesc->wTerminalType);
if (pStr)
{
AppendTextBuffer(" (%s)\r\n",
pStr);
}
else
{
AppendTextBuffer("\r\n");
}
AppendTextBuffer("bAssocTerminal: 0x%02X\r\n",
OTDesc->bAssocTerminal);
AppendTextBuffer("bSoruceID: 0x%02X\r\n",
OTDesc->bSoruceID);
AppendTextBuffer("iTerminal: 0x%02X\r\n",
OTDesc->iTerminal);
return TRUE;
}
//*****************************************************************************
//
// DisplayACMixerUnit()
//
//*****************************************************************************
BOOL
DisplayACMixerUnit (
PUSB_AUDIO_MIXER_UNIT_DESCRIPTOR MixerDesc
)
{
UCHAR i;
PUCHAR data;
if (MixerDesc->bLength < 10)
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Mixer Unit Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
MixerDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
MixerDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
MixerDesc->bDescriptorSubtype);
AppendTextBuffer("bUnitID: 0x%02X\r\n",
MixerDesc->bUnitID);
AppendTextBuffer("bNrInPins: 0x%02X\r\n",
MixerDesc->bNrInPins);
for (i=0; i<MixerDesc->bNrInPins; i++)
{
AppendTextBuffer("baSourceID[%d]: 0x%02X\r\n",
i+1,
MixerDesc->baSourceID[i]);
}
data = &MixerDesc->baSourceID[MixerDesc->bNrInPins];
AppendTextBuffer("bNrChannels: 0x%02X\r\n",
*data++);
AppendTextBuffer("wChannelConfig: 0x%04X\r\n",
*((PUSHORT)data)++);
AppendTextBuffer("iChannelNames: 0x%02X\r\n",
*data++);
AppendTextBuffer("bmControls:\r\n");
i = MixerDesc->bLength - 10 - MixerDesc->bNrInPins;
DisplayBytes(data, i);
data += i;
AppendTextBuffer("iMixer: 0x%02X\r\n",
*data);
return TRUE;
}
//*****************************************************************************
//
// DisplayACSelectorUnit()
//
//*****************************************************************************
BOOL
DisplayACSelectorUnit (
PUSB_AUDIO_SELECTOR_UNIT_DESCRIPTOR SelectorDesc
)
{
UCHAR i;
PUCHAR data;
if (SelectorDesc->bLength < 6)
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Selector Unit Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
SelectorDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
SelectorDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
SelectorDesc->bDescriptorSubtype);
AppendTextBuffer("bUnitID: 0x%02X\r\n",
SelectorDesc->bUnitID);
AppendTextBuffer("bNrInPins: 0x%02X\r\n",
SelectorDesc->bNrInPins);
for (i=0; i<SelectorDesc->bNrInPins; i++)
{
AppendTextBuffer("baSourceID[%d]: 0x%02X\r\n",
i+1,
SelectorDesc->baSourceID[i]);
}
data = &SelectorDesc->baSourceID[SelectorDesc->bNrInPins];
AppendTextBuffer("iSelector: 0x%02X\r\n",
*data);
return TRUE;
}
//*****************************************************************************
//
// DisplayACFeatureUnit()
//
//*****************************************************************************
BOOL
DisplayACFeatureUnit (
PUSB_AUDIO_FEATURE_UNIT_DESCRIPTOR FeatureDesc
)
{
UCHAR i, n, ch;
PUCHAR data;
if (FeatureDesc->bLength < 7)
{
OOPS();
return FALSE;
}
n = FeatureDesc->bControlSize;
ch = ((FeatureDesc->bLength - 7) / n) - 1;
if (FeatureDesc->bLength != (7 + (ch + 1) * n))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Feature Unit Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
FeatureDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
FeatureDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
FeatureDesc->bDescriptorSubtype);
AppendTextBuffer("bUnitID: 0x%02X\r\n",
FeatureDesc->bUnitID);
AppendTextBuffer("bSourceID: 0x%02X\r\n",
FeatureDesc->bSourceID);
AppendTextBuffer("bControlSize: 0x%02X\r\n",
FeatureDesc->bControlSize);
data = &FeatureDesc->bmaControls[0];
for (i=0; i<=ch; i++)
{
AppendTextBuffer("bmaControls[%d]:\r\n",
i);
DisplayBytes(data, n);
data += n;
}
AppendTextBuffer("iFeature: 0x%02X\r\n",
*data);
return TRUE;
}
//*****************************************************************************
//
// DisplayACProcessingUnit()
//
//*****************************************************************************
BOOL
DisplayACProcessingUnit (
PUSB_AUDIO_PROCESSING_UNIT_DESCRIPTOR ProcessingDesc
)
{
UCHAR i;
PUCHAR data;
if (ProcessingDesc->bLength < sizeof(USB_AUDIO_PROCESSING_UNIT_DESCRIPTOR))
{
OOPS();
return FALSE;
}
AppendTextBuffer("\r\nAudio Control Processing Unit Descriptor:\r\n");
AppendTextBuffer("bLength: 0x%02X\r\n",
ProcessingDesc->bLength);
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
ProcessingDesc->bDescriptorType);
AppendTextBuffer("bDescriptorSubtype: 0x%02X\r\n",
ProcessingDesc->bDescriptorSubtype);
AppendTextBuffer("bUnitID: 0x%02X\r\n",
ProcessingDesc->bUnitID);
AppendTextBuffer("wProcessType: 0x%04X",
ProcessingDesc->wProcessType);
switch (ProcessingDesc->wProcessType)
{
case USB_AUDIO_PROCESS_UNDEFINED:
AppendTextBuffer("(Undefined Process)\r\n");
break;
case USB_AUDIO_PROCESS_UPDOWNMIX:
AppendTextBuffer("(Up / Down Mix Process)\r\n");
break;
case USB_AUDIO_PROCESS_DOLBYPROLOGIC:
AppendTextBuffer("(Dolby Prologic Process)\r\n");
break;
case USB_AUDIO_PROCESS_3DSTEREOEXTENDER:
AppendTextBuffer("(3D-Stereo Extender Process)\r\n");
break;
case USB_AUDIO_PROCESS_REVERBERATION:
AppendTextBuffer("(Reverberation Process)\r\n");
break;
case USB_AUDIO_PROCESS_CHORUS:
AppendTextBuffer("(Chorus Process)\r\n");
break;
case USB_AUDIO_PROCESS_DYNRANGECOMP:
AppendTextBuffer("(Dynamic Range Compressor Process)\r\n");
break;
default:
AppendTextBuffer("\r\n");
break;
}
AppendTextBuffer("bNrInPins: 0x%02X\r\n",
ProcessingDesc->bNrInPins);
for (i=0; i<ProcessingDesc->bNrInPins; i++)
{
AppendTextBuffer("baSourceID[%d]: 0x%02X\r\n",
i+1,
ProcessingDesc->baSourceID[i]);
}
data = &ProcessingDesc->baSourceID[ProcessingDesc->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("iProcessing: 0x%02X\r\n",
*data++);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -