2014-10-10 5 views
0

저는 영남 대학교 컴퓨터 공학과 학생입니다.iserialnumber에서 USB 장치 일련 번호를 얻으려면 어떻게합니까?

첫째, 불쌍한 영어 실력에 대해 사과드립니다.

도움이 필요합니다.

Java 용 USB API를 찾았습니다.

프로젝트 (대용량 저장 장치)별로 각 USB 장치를 식별해야하기 때문에 USB 장치의 PID, VID 및 고유 일련 번호가 필요합니다.

아래 예제 코드를 사용합니다. (이것은 usb4java API 예제 코드입니다.) 이 코드는 USB HUD, 연결된 장치에 대한 정보를 보여줍니다.

package org.usb4java.javax.examples; 
import java.io.UnsupportedEncodingException; 
import java.util.List; 
import javax.usb.UsbConfiguration; 
import javax.usb.UsbDevice; 
import javax.usb.UsbDisconnectedException; 
import javax.usb.UsbEndpoint; 
import javax.usb.UsbException; 
import javax.usb.UsbHostManager; 
import javax.usb.UsbHub; 
import javax.usb.UsbInterface; 
import javax.usb.UsbPort; 
import javax.usb.UsbServices; 
/** 
* Dumps all devices by using the javax-usb API. 
* 
* @author Klaus Reimer <[email protected]> 
*/ 
public class DumpDevices 
{ 
/** 
* Dumps the specified USB device to stdout. 
* 
* @param device 
*   The USB device to dump. 
*/ 
private static void dumpDevice(final UsbDevice device) 
{ 
    // Dump information about the device itself 
    System.out.println(device); 
    final UsbPort port = device.getParentUsbPort(); 
    if (port != null) 
    { 
     System.out.println("Connected to port: " + port.getPortNumber()); 
     System.out.println("Parent: " + port.getUsbHub()); 
    } 

    // Dump device descriptor 
     System.out.println(device.getUsbDeviceDescriptor()); 

    // Process all configurations 
    for (UsbConfiguration configuration: (List<UsbConfiguration>) device 
     .getUsbConfigurations()) 
    { 
     // Dump configuration descriptor 
     System.out.println(configuration.getUsbConfigurationDescriptor()); 

     // Process all interfaces 
     for (UsbInterface iface: (List<UsbInterface>) configuration 
      .getUsbInterfaces()) 
     { 
      // Dump the interface descriptor 
      System.out.println(iface.getUsbInterfaceDescriptor()); 

      // Process all endpoints 
      for (UsbEndpoint endpoint: (List<UsbEndpoint>) iface 
       .getUsbEndpoints()) 
      { 
       // Dump the endpoint descriptor 
       System.out.println(endpoint.getUsbEndpointDescriptor()); 
      } 
     } 
    } 

    System.out.println(); 

    // Dump child devices if device is a hub 
    if (device.isUsbHub()) 
    { 
     final UsbHub hub = (UsbHub) device; 
     for (UsbDevice child: (List<UsbDevice>) hub.getAttachedUsbDevices()) 
     { 
      dumpDevice(child); 
     } 

    } 
} 

/** 
* Main method. 
* 
* @param args 
*   Command-line arguments (Ignored) 
* @throws UsbException 
*    When an USB error was reported which wasn't handled by this 
*    program itself. 
*/ 
public static void main(final String[] args) throws UsbException 
{ 
    // Get the USB services and dump information about them 
    final UsbServices services = UsbHostManager.getUsbServices(); 
    System.out.println("USB Service Implementation: " 
     + services.getImpDescription()); 
    System.out.println("Implementation version: " 
     + services.getImpVersion()); 
    System.out.println("Service API version: " + services.getApiVersion()); 
    System.out.println(); 

    // Dump the root USB hub 
    dumpDevice(services.getRootUsbHub()); 
} 
} 

이 같은 코드 결과 : 코드 결과에


USB Service Implementation: usb4java 
Implementation version: 1.2.0 
Service API version: 1.0.2 

usb4java root hub 1.0.0 
Device Descriptor: 
    bLength     18 
    bDescriptorType   1 
    bcdUSB    1.01 
    bDeviceClass    9 Hub 
    bDeviceSubClass   0 
    bDeviceProtocol   0 
    bMaxPacketSize0   8 
    idVendor   0xffff 
    idProduct   0xffff 
    bcdDevice    0.00 
    iManufacturer   1 
    iProduct     2 
    iSerial     3 
    bNumConfigurations  1 

Configuration Descriptor: 
    bLength     9 
    bDescriptorType   2 
    wTotalLength   18 
    bNumInterfaces   1 
    bConfigurationValue  1 
    iConfiguration   0 
    bmAttributes   0x80 
    (Bus Powered) 
    bMaxPower    0mA 

Interface Descriptor: 
    bLength     9 
    bDescriptorType   4 
    bInterfaceNumber   0 
    bAlternateSetting  0 
    bNumEndpoints   0 
    bInterfaceClass   9 Hub 
    bInterfaceSubClass  0 
    bInterfaceProtocol  0 
    iInterface    0 


Bus 002 Device 007: ID 203a:fffa 
Connected to port: 1 
Parent: usb4java root hub 1.0.0 
Device Descriptor: 
    bLength     18 
    bDescriptorType   1 
    bcdUSB    2.00 
    bDeviceClass    0 Per Interface 
    bDeviceSubClass   0 
    bDeviceProtocol   0 
    bMaxPacketSize0   64 
    idVendor   0x203a 
    idProduct   0xfffa 
    bcdDevice    1.00 
    iManufacturer   1 
    iProduct     2 
    iSerial     3 
    bNumConfigurations  1 

Configuration Descriptor: 
    bLength     9 
    bDescriptorType   2 
    wTotalLength   25 
    bNumInterfaces   1 
    bConfigurationValue  1 
    iConfiguration   1 
    bmAttributes   0xc0 
    Self Powered 
    bMaxPower    0mA 

Interface Descriptor: 
    bLength     9 
    bDescriptorType   4 
    bInterfaceNumber   0 
    bAlternateSetting  0 
    bNumEndpoints   1 
    bInterfaceClass   7 Printer 
    bInterfaceSubClass  1 
    bInterfaceProtocol  1 
    iInterface    4 

Endpoint Descriptor: 
    bLength     7 
    bDescriptorType   5 
bEndpointAddress  0x01 EP 1 OUT 
    bmAttributes    2 
    Transfer Type    Bulk 
    Synch Type    None 
    Usage Type    Data 
    wMaxPacketSize   512 
    bInterval    0 
. 
. 
. 
. 
Bus 002 Device 003: ID 152d:2329 
Connected to port: 3 
Parent: usb4java root hub 1.0.0 
Device Descriptor: 
    bLength     18 
    bDescriptorType   1 
    bcdUSB    2.00 
    bDeviceClass    0 Per Interface 
    bDeviceSubClass   0 
    bDeviceProtocol   0 
    bMaxPacketSize0   64 
    idVendor   0x152d 
    idProduct   0x2329 
    bcdDevice    1.00 
    iManufacturer   1 
    iProduct     2 
    iSerial     5 
    bNumConfigurations  1 

Configuration Descriptor: 
    bLength     9 
    bDescriptorType   2 
    wTotalLength   32 
    bNumInterfaces   1 
    bConfigurationValue  1 
    iConfiguration   4 
    bmAttributes   0xc0 
    Self Powered 
    bMaxPower    2mA 

Interface Descriptor: 
    bLength     9 
    bDescriptorType   4 
    bInterfaceNumber   0 
    bAlternateSetting  0 
    bNumEndpoints   2 
    bInterfaceClass   8 Mass Storage 
    bInterfaceSubClass  6 
    bInterfaceProtocol  80 
    iInterface    6 
. 
. 
. 
. 
Endpoint Descriptor: 
    bLength     7 
    bDescriptorType   5 
    bEndpointAddress  0x02 EP 2 OUT 
    bmAttributes    2 
    Transfer Type    Bulk 
    Synch Type    None 
    Usage Type    Data 
    wMaxPacketSize   512 
    bInterval    0 

Endpoint Descriptor: 
    bLength     7 
    bDescriptorType   5 
    bEndpointAddress  0x81 EP 1 IN 
    bmAttributes    2 
    Transfer Type    Bulk 
    Synch Type    None 
    Usage Type    Data 
    wMaxPacketSize   512 
    bInterval    0 


Endpoint Descriptor: 
    bLength     7 
    bDescriptorType   5 
    bEndpointAddress  0x01 EP 1 OUT 
    bmAttributes    2 
    Transfer Type    Bulk 
    Synch Type    None 
    Usage Type    Data 
    wMaxPacketSize   512 
     bInterval    0 

대용량 저장소가 나는 PID와 VID를 볼 수 있지만 iserialnumber 시리얼 번호 (인덱스가 in device descriptor)를 사용합니다.

각 USB 대용량 저장 장치를 식별하려면 PID, VID, S/N의 조합이 필요하다고 생각합니다.

일련 번호는 어떻게 얻을 수 있습니까?

Usb4Java, Javax.usb, libusb에서 이러한 API는 'getSerialnumber()'와 같은 메소드를 포함하지 않습니다.

도와주세요.

답변

1

"iSerial"은 장치의 문자열 테이블에있는 버전 문자열의 인덱스입니다. 장치의 getString(byte) 메서드를 사용하여 해당 문자열을 검색 할 수 있습니다. "iManufacturer"와 "iProduct"도 마찬가지입니다.

모든 기기에 고유 한 일련 번호가있는 것은 아닙니다.

+0

고맙습니다! 나는 그것을 시도 할 것이다! –

+0

안녕하세요 duskwuff, 'getString (byte)'메서드를 시도했지만 정확하게 작동하지 않습니다. 첫째, 그것은 try/catch와 함께 서라운드가 필요하다는 것을 보여주기 때문에 그렇게했습니다. 그때 그것은 '이 플랫폼에서 지원되지 않거나 구현되지 않은 작업'메시지를 표시합니다. Windows를 지원하지 않는 방법입니까? –

+0

LibUSB 또는 LibUSB-Win32 드라이버를 사용하는 장치에서만 지원됩니다. –

관련 문제