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

📄 rwbulk.c

📁 三星开发工具源码(DNW).zip 串口与usb调试工具
💻 C
📖 第 1 页 / 共 2 页
字号:
	return "USB_CONFIGURATION_DESCRIPTOR_TYPE";
	

    case USB_STRING_DESCRIPTOR_TYPE:
	return "USB_STRING_DESCRIPTOR_TYPE";
	

    case USB_INTERFACE_DESCRIPTOR_TYPE:
	return "USB_INTERFACE_DESCRIPTOR_TYPE";
	

    case USB_ENDPOINT_DESCRIPTOR_TYPE:
	return "USB_ENDPOINT_DESCRIPTOR_TYPE";
	

#ifdef USB_POWER_DESCRIPTOR_TYPE // this is the older definintion which is actually obsolete
    // workaround for temporary bug in 98ddk, older USB100.h file
    case USB_POWER_DESCRIPTOR_TYPE:
	return "USB_POWER_DESCRIPTOR_TYPE";
#endif
	
#ifdef USB_RESERVED_DESCRIPTOR_TYPE  // this is the current version of USB100.h as in NT5DDK

    case USB_RESERVED_DESCRIPTOR_TYPE:
	return "USB_RESERVED_DESCRIPTOR_TYPE";

    case USB_CONFIG_POWER_DESCRIPTOR_TYPE:
	return "USB_CONFIG_POWER_DESCRIPTOR_TYPE";

    case USB_INTERFACE_POWER_DESCRIPTOR_TYPE:
	return "USB_INTERFACE_POWER_DESCRIPTOR_TYPE";
#endif // for current nt5ddk version of USB100.h

    default:
	return "??? UNKNOWN!!"; 
    }
}


char
*usbEndPointTypeString(UCHAR bmAttributes)
/*++
Routine Description:

    Called to get ascii string of endpt descriptor type

Arguments:

    PUSB_ENDPOINT_DESCRIPTOR->bmAttributes

Return Value:

    ptr to string

--*/
{
    UINT typ = bmAttributes & USB_ENDPOINT_TYPE_MASK;


    switch( typ) {
    case USB_ENDPOINT_TYPE_INTERRUPT:
	return "USB_ENDPOINT_TYPE_INTERRUPT";

    case USB_ENDPOINT_TYPE_BULK:
	return "USB_ENDPOINT_TYPE_BULK";    

    case USB_ENDPOINT_TYPE_ISOCHRONOUS:
	return "USB_ENDPOINT_TYPE_ISOCHRONOUS"; 
	
    case USB_ENDPOINT_TYPE_CONTROL:
	return "USB_ENDPOINT_TYPE_CONTROL"; 
	
    default:
	return "??? UNKNOWN!!"; 
    }
}


char
*usbConfigAttributesString(UCHAR bmAttributes)
/*++
Routine Description:

    Called to get ascii string of USB_CONFIGURATION_DESCRIPTOR attributes

Arguments:

    PUSB_CONFIGURATION_DESCRIPTOR->bmAttributes

Return Value:

    ptr to string

--*/
{
    UINT typ = bmAttributes & USB_CONFIG_POWERED_MASK;


    switch( typ) {

    case USB_CONFIG_BUS_POWERED:
	return "USB_CONFIG_BUS_POWERED";

    case USB_CONFIG_SELF_POWERED:
	return "USB_CONFIG_SELF_POWERED";
	
    case USB_CONFIG_REMOTE_WAKEUP:
	return "USB_CONFIG_REMOTE_WAKEUP";

	
    default:
	return "??? UNKNOWN!!"; 
    }
}


void
print_USB_CONFIGURATION_DESCRIPTOR(PUSB_CONFIGURATION_DESCRIPTOR cd)
/*++
Routine Description:

    Called to do formatted ascii dump to console of a USB config descriptor

Arguments:

    ptr to USB configuration descriptor

Return Value:

    none

--*/
{              
    EB_Printf("===== USB DEVICE STATUS =====\nUSB_CONFIGURATION_DESCRIPTOR\n");

    EB_Printf(
    "bLength = 0x%x, decimal %d\n", cd->bLength, cd->bLength
    );

    EB_Printf(
    "bDescriptorType = 0x%x ( %s )\n", cd->bDescriptorType, usbDescriptorTypeString( cd->bDescriptorType )
    );

    EB_Printf(
    "wTotalLength = 0x%x, decimal %d\n", cd->wTotalLength, cd->wTotalLength
    );

    EB_Printf(
    "bNumInterfaces = 0x%x, decimal %d\n", cd->bNumInterfaces, cd->bNumInterfaces
    );

    EB_Printf(
    "bConfigurationValue = 0x%x, decimal %d\n", cd->bConfigurationValue, cd->bConfigurationValue
    );

    EB_Printf(
    "iConfiguration = 0x%x, decimal %d\n", cd->iConfiguration, cd->iConfiguration
    );

    EB_Printf(
    "bmAttributes = 0x%x ( %s )\n", cd->bmAttributes, usbConfigAttributesString( cd->bmAttributes )
    );

    EB_Printf(
    "MaxPower = 0x%x, decimal %d\n", cd->MaxPower, cd->MaxPower
    );
    EB_Printf("-----------------------------\n");
}


void
print_USB_INTERFACE_DESCRIPTOR(PUSB_INTERFACE_DESCRIPTOR id, UINT ix)
/*++
Routine Description:

    Called to do formatted ascii dump to console of a USB interface descriptor

Arguments:

    ptr to USB interface descriptor

Return Value:

    none

--*/
{
    EB_Printf("USB_INTERFACE_DESCRIPTOR #%d\n", ix);


    EB_Printf(
    "bLength = 0x%x\n", id->bLength
    );


    EB_Printf(
    "bDescriptorType = 0x%x ( %s )\n", id->bDescriptorType, usbDescriptorTypeString( id->bDescriptorType )
    );


    EB_Printf(
    "bInterfaceNumber = 0x%x\n", id->bInterfaceNumber
    );
    EB_Printf(
    "bAlternateSetting = 0x%x\n", id->bAlternateSetting
    );
    EB_Printf(
    "bNumEndpoints = 0x%x\n", id->bNumEndpoints
    );
    EB_Printf(
    "bInterfaceClass = 0x%x\n", id->bInterfaceClass
    );
    EB_Printf(
    "bInterfaceSubClass = 0x%x\n", id->bInterfaceSubClass
    );
    EB_Printf(
    "bInterfaceProtocol = 0x%x\n", id->bInterfaceProtocol
    );
    EB_Printf(
    "bInterface = 0x%x\n", id->iInterface
    );
    EB_Printf("-----------------------------\n");
}


void
print_USB_ENDPOINT_DESCRIPTOR(PUSB_ENDPOINT_DESCRIPTOR ed, int i)
/*++
Routine Description:

    Called to do formatted ascii dump to console of a USB endpoint descriptor

Arguments:

    ptr to USB endpoint descriptor,
    index of this endpt in interface desc

Return Value:

    none

--*/
{
    EB_Printf(
    "USB_ENDPOINT_DESCRIPTOR for Pipe%02d\n", i
    );

    EB_Printf(
    "bLength = 0x%x\n", ed->bLength
    );

    EB_Printf(
    "bDescriptorType = 0x%x ( %s )\n", ed->bDescriptorType, usbDescriptorTypeString( ed->bDescriptorType )
    );


    if ( USB_ENDPOINT_DIRECTION_IN( ed->bEndpointAddress ) ) {
	EB_Printf(
	"bEndpointAddress= 0x%x ( INPUT )\n", ed->bEndpointAddress
	);
    } else {
	EB_Printf(
	"bEndpointAddress= 0x%x ( OUTPUT )\n", ed->bEndpointAddress
	);
    }

    EB_Printf(
    "bmAttributes= 0x%x ( %s )\n", ed->bmAttributes, usbEndPointTypeString ( ed->bmAttributes )
    );


    EB_Printf(
    "wMaxPacketSize= 0x%x, decimal %d\n", ed->wMaxPacketSize, ed->wMaxPacketSize
    );
    EB_Printf(
    "bInterval = 0x%x, decimal %d\n", ed->bInterval, ed->bInterval
    );
    EB_Printf("-----------------------------\n");
}

void
rw_dev( HANDLE hDEV )
/*++
Routine Description:

    Called to do formatted ascii dump to console of  USB
    configuration, interface, and endpoint descriptors
    (Cmdline "rwbulk -u" )

Arguments:

    handle to device

Return Value:

    none

--*/
{
    UINT success;
    int siz, nBytes;
    char buf[256];
    PUSB_CONFIGURATION_DESCRIPTOR cd;
    PUSB_INTERFACE_DESCRIPTOR id;
    PUSB_ENDPOINT_DESCRIPTOR ed;

    siz = sizeof(buf);

    if (hDEV == INVALID_HANDLE_VALUE) {
	//NOISY(("DEV not open"));
	return;
    }
    
    success = DeviceIoControl(hDEV,
	    IOCTL_BULKUSB_GET_CONFIG_DESCRIPTOR,
	    buf,
	    siz,
	    buf,
	    siz,
	    &nBytes,
	    NULL);

    //NOISY(("request complete, success = %d nBytes = %d\n", success, nBytes));
    
    if (success) {
	ULONG i;
	UINT  j, n;
	char *pch;

	pch = buf;
	n = 0;

	cd = (PUSB_CONFIGURATION_DESCRIPTOR) pch;

	print_USB_CONFIGURATION_DESCRIPTOR( cd );

	pch += cd->bLength;

	do {

	    id = (PUSB_INTERFACE_DESCRIPTOR) pch;

	    print_USB_INTERFACE_DESCRIPTOR(id, n++);

	    pch += id->bLength;
	    for (j=0; j<id->bNumEndpoints; j++) {

		ed = (PUSB_ENDPOINT_DESCRIPTOR) pch;

		print_USB_ENDPOINT_DESCRIPTOR(ed,j);

		pch += ed->bLength;
	    }
	    i = (ULONG)(pch - buf);
	} while (i<cd->wTotalLength);

    }
    
    return;

}


int  dumpUsbConfig()
/*++
Routine Description:

    Called to do formatted ascii dump to console of  USB
    configuration, interface, and endpoint descriptors
    (Cmdline "rwbulk -u" )

Arguments:

    none

Return Value:

    none

--*/
{

    HANDLE hDEV = open_dev();

    if ( hDEV )
    {
	rw_dev( hDEV );
	CloseHandle(hDEV);
    }

    return 0;
}
//  End, routines for USB configuration and pipe info dump  (Cmdline "rwbulk -u" )



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -