📄 usbviewdlg.cpp
字号:
case 0x03:
AppendTextBuffer("Transfer Type: Interrupt\r\n");
break;
}
AppendTextBuffer("wMaxPacketSize: 0x%04X (%d)\r\n",
EndpointDesc->wMaxPacketSize,
EndpointDesc->wMaxPacketSize);
if (EndpointDesc->bLength == sizeof(USB_ENDPOINT_DESCRIPTOR))
AppendTextBuffer("bInterval: 0x%02X\r\n",
EndpointDesc->bInterval);
else
{
PUSB_ENDPOINT_DESCRIPTOR2 endpointDesc2;
endpointDesc2 = (PUSB_ENDPOINT_DESCRIPTOR2)EndpointDesc;
AppendTextBuffer("wInterval: 0x%04X\r\n",
endpointDesc2->wInterval);
AppendTextBuffer("bSyncAddress: 0x%02X\r\n",
endpointDesc2->bSyncAddress);
}
return;
}
VOID CUsbviewDlg::DisplayConfigDesc(
PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc,
PSTRING_DESCRIPTOR_NODE StringDescs)
{
PUCHAR descEnd;
PUSB_COMMON_DESCRIPTOR commonDesc;
UCHAR bInterfaceClass;
UCHAR bInterfaceSubClass;
BOOL displayUnknown;
bInterfaceClass = 0;
descEnd = (PUCHAR)ConfigDesc + ConfigDesc->wTotalLength;
commonDesc = (PUSB_COMMON_DESCRIPTOR)ConfigDesc;
while ((PUCHAR)commonDesc + sizeof(USB_COMMON_DESCRIPTOR) < descEnd &&
(PUCHAR)commonDesc + commonDesc->bLength <= descEnd)
{
displayUnknown = FALSE;
switch (commonDesc->bDescriptorType)
{
case USB_CONFIGURATION_DESCRIPTOR_TYPE:
if (commonDesc->bLength != sizeof(USB_CONFIGURATION_DESCRIPTOR))
{
displayUnknown = TRUE;
break;
}
DisplayConfigurationDescriptor((PUSB_CONFIGURATION_DESCRIPTOR)commonDesc,
StringDescs);
break;
case USB_INTERFACE_DESCRIPTOR_TYPE:
if ((commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR)) &&
(commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR2)))
{
displayUnknown = TRUE;
break;
}
bInterfaceClass = ((PUSB_INTERFACE_DESCRIPTOR)commonDesc)->bInterfaceClass;
bInterfaceSubClass = ((PUSB_INTERFACE_DESCRIPTOR)commonDesc)->bInterfaceSubClass;
DisplayInterfaceDescriptor((PUSB_INTERFACE_DESCRIPTOR)commonDesc,
StringDescs);
break;
case USB_ENDPOINT_DESCRIPTOR_TYPE:
if ((commonDesc->bLength != sizeof(USB_ENDPOINT_DESCRIPTOR)) &&
(commonDesc->bLength != sizeof(USB_ENDPOINT_DESCRIPTOR2)))
{
displayUnknown = TRUE;
break;
}
DisplayEndpointDescriptor((PUSB_ENDPOINT_DESCRIPTOR)commonDesc);
break;
case USB_HID_DESCRIPTOR_TYPE:
if (commonDesc->bLength < sizeof(USB_HID_DESCRIPTOR))
{
displayUnknown = TRUE;
break;
}
DisplayHidDescriptor((PUSB_HID_DESCRIPTOR)commonDesc);
break;
default:
switch (bInterfaceClass)
{
case USB_DEVICE_CLASS_AUDIO:
displayUnknown = !DisplayAudioDescriptor(
(PUSB_AUDIO_COMMON_DESCRIPTOR)commonDesc,
bInterfaceSubClass);
break;
default:
displayUnknown = TRUE;
break;
}
break;
}
if (displayUnknown)
DisplayUnknownDescriptor(commonDesc);
commonDesc=commonDesc+commonDesc->bLength;
// (PUCHAR)commonDesc += commonDesc->bLength; //stam
}
}
VOID CUsbviewDlg::DisplayConfigurationDescriptor(
PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc,
PSTRING_DESCRIPTOR_NODE StringDescs)
{
AppendTextBuffer("\r\nConfiguration Descriptor:\r\n");
AppendTextBuffer("wTotalLength: 0x%04X\r\n",ConfigDesc->wTotalLength);
AppendTextBuffer("bNumInterfaces: 0x%02X\r\n",ConfigDesc->bNumInterfaces);
AppendTextBuffer("bConfigurationValue: 0x%02X\r\n",
ConfigDesc->bConfigurationValue);
AppendTextBuffer("iConfiguration: 0x%02X\r\n",ConfigDesc->iConfiguration);
if (ConfigDesc->iConfiguration)
DisplayStringDescriptor(ConfigDesc->iConfiguration,StringDescs);
AppendTextBuffer("bmAttributes: 0x%02X (",ConfigDesc->bmAttributes);
if (ConfigDesc->bmAttributes & 0x80)
AppendTextBuffer("Bus Powered ");
if (ConfigDesc->bmAttributes & 0x40)
AppendTextBuffer("Self Powered ");
if (ConfigDesc->bmAttributes & 0x20)
AppendTextBuffer("Remote Wakeup");
AppendTextBuffer(")\r\n");
AppendTextBuffer("MaxPower: 0x%02X (%d Ma)\r\n",
ConfigDesc->MaxPower,ConfigDesc->MaxPower * 2);
return;
}
VOID CUsbviewDlg::DisplayInterfaceDescriptor(
PUSB_INTERFACE_DESCRIPTOR InterfaceDesc,
PSTRING_DESCRIPTOR_NODE StringDescs)
{
PCHAR pStr;
AppendTextBuffer("\r\nInterface Descriptor:\r\n");
AppendTextBuffer("bInterfaceNumber: 0x%02X\r\n",
InterfaceDesc->bInterfaceNumber);
AppendTextBuffer("bAlternateSetting: 0x%02X\r\n",
InterfaceDesc->bAlternateSetting);
AppendTextBuffer("bNumEndpoints: 0x%02X\r\n",
InterfaceDesc->bNumEndpoints);
AppendTextBuffer("bInterfaceClass: 0x%02X",
InterfaceDesc->bInterfaceClass);
pStr = "\r\n";
switch (InterfaceDesc->bInterfaceClass)
{
case USB_DEVICE_CLASS_AUDIO:
pStr = " (Audio)\r\n";
break;
case USB_DEVICE_CLASS_HUMAN_INTERFACE:
pStr = " (HID)\r\n";
break;
case USB_DEVICE_CLASS_HUB:
pStr = " (Hub)\r\n";
break;
default:
break;
}
AppendTextBuffer(pStr);
AppendTextBuffer("bInterfaceSubClass: 0x%02X",
InterfaceDesc->bInterfaceSubClass);
pStr = "\r\n";
switch (InterfaceDesc->bInterfaceClass)
{
case USB_DEVICE_CLASS_AUDIO:
switch (InterfaceDesc->bInterfaceSubClass)
{
case USB_AUDIO_SUBCLASS_AUDIOCONTROL:
pStr = " (Audio Control)\r\n";
break;
case USB_AUDIO_SUBCLASS_AUDIOSTREAMING:
pStr = " (Audio Streaming)\r\n";
break;
case USB_AUDIO_SUBCLASS_MIDISTREAMING:
pStr = " (MIDI Streaming)\r\n";
break;
default:
break;
}
break;
default:
break;
}
AppendTextBuffer(pStr);
AppendTextBuffer("bInterfaceProtocol: 0x%02X\r\n",
InterfaceDesc->bInterfaceProtocol);
AppendTextBuffer("iInterface: 0x%02X\r\n",
InterfaceDesc->iInterface);
if (InterfaceDesc->iInterface)
DisplayStringDescriptor(InterfaceDesc->iInterface,StringDescs);
if (InterfaceDesc->bLength == sizeof(USB_INTERFACE_DESCRIPTOR2))
{
PUSB_INTERFACE_DESCRIPTOR2 interfaceDesc2;
interfaceDesc2 = (PUSB_INTERFACE_DESCRIPTOR2)InterfaceDesc;
AppendTextBuffer("wNumClasses: 0x%04X\r\n",interfaceDesc2->wNumClasses);
}
return;
}
VOID CUsbviewDlg::DisplayHidDescriptor(PUSB_HID_DESCRIPTOR HidDesc)
{
UCHAR i;
AppendTextBuffer("\r\nHID Descriptor:\r\n");
AppendTextBuffer("bcdHID: 0x%04X\r\n",HidDesc->bcdHID);
AppendTextBuffer("bCountryCode: 0x%02X\r\n",HidDesc->bCountryCode);
AppendTextBuffer("bNumDescriptors: 0x%02X\r\n",HidDesc->bNumDescriptors);
for (i=0; i<HidDesc->bNumDescriptors; i++)
{
AppendTextBuffer("bDescriptorType: 0x%02X\r\n",
HidDesc->OptionalDescriptors[i].bDescriptorType);
AppendTextBuffer("wDescriptorLength: 0x%04X\r\n",
HidDesc->OptionalDescriptors[i].wDescriptorLength);
}
return;
}
////////////audio////////////
BOOL CUsbviewDlg::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;
}
BOOL CUsbviewDlg::DisplayACHeader (
PUSB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR HeaderDesc)
{
UINT i;
if (HeaderDesc->bLength < sizeof(USB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR))
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;
}
BOOL CUsbviewDlg::DisplayACInputTerminal (
PUSB_AUDIO_INPUT_TERMINAL_DESCRIPTOR ITDesc)
{
PCHAR pStr;
if (ITDesc->bLength != sizeof(USB_AUDIO_INPUT_TERMINAL_DESCRIPTOR))
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;
}
BOOL CUsbviewDlg::DisplayACOutputTerminal (
PUSB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR OTDesc)
{
PCHAR pStr;
if (OTDesc->bLength != sizeof(USB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR))
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;
}
BOOL CUsbviewDlg::DisplayACMixerUnit (
PUSB_AUDIO_MIXER_UNIT_DESCRIPTOR MixerDesc)
{
UCHAR i;
PUCHAR data;
if (MixerDesc->bLength < 10)
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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -