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

📄 rwbulk.c

📁 USB通讯控件,Bulk通讯方式,可以直接从USB设备中读取数据保存为文件,或者把文件发送给USB设备,用于三星2410相关开发.
💻 C
📖 第 1 页 / 共 2 页
字号:
#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,	//IOCTL_INTERNAL_USB_CYCLE_PORT 
		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;
	
}

void reset_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];
	
    siz = sizeof(buf);
	
    if (hDEV == INVALID_HANDLE_VALUE) {
		//NOISY(("DEV not open"));
		return;
    }
    
    success = DeviceIoControl(hDEV,
		IOCTL_BULKUSB_RESET_DEVICE, 
		buf,
		siz,
		buf,
		siz,
		&nBytes,
		NULL);

    
    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 + -