⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbviewdlg.cpp

📁 使用visual c++实现的usbview
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -