获取USB设备的字符串描述符

时间:2016-08-28 07:39:10

标签: java usb libusb usb4java

在Windows 8.1下,使用LibUsb.getDeviceList(null,connectedDevices),我使用以下代码成功地将每台USB设备连接到我的电脑:

connectedDevices= new DeviceList();
if(LibUsb.getDeviceList(null,connectedDevices){
    selectedDevices= new LinkedList<Device>();
    deviceDescriptor= new DeviceDescriptor();
    pos=connectedDevices.iterator();
    while(pos.hasNext()){
        device=pos.next();
        if(LibUsb.getDeviceDescriptor(device,deviceDescriptor)==LibUsb.SUCCESS){
            selectedDevices.add(device);
            LibUsb.refDevice(device);
        }
    }
}
LibUsb.freeDeviceList(connectedDevices,false);

但是当我想为特定设备检索字符串描述符时,#i; iManufacturer&#34;对于以下内容不为null:

StringBuffer buffer=new StringBuffer(1000);
device=selectedDevices.getFirst();
LibUsb.getDeviceDescriptor(device, deviceDescriptor);
handle=new DeviceHandle();
if (LibUsb.open(device,handle)==LibUsb.SUCCESS) {   
    LibUsb.getStringDescriptorAscii(handle,deviceDescriptor.iManufacturer(),buffer);            
    manufacturerDescription=buffer.toString();                  
    LibUsb.close(handle);
}

我要么得到LIBUSB.ERROR_NO_DEVICE错误代码以回复open函数,我发现只有几毫秒才发现的设备或LIBSUSB.ERROR_INVALID_PARAM错误代码返回getDescriptor。使用LibUsb.getStringDescriptor(handle,deviceDescriptor.iManufacturer(),(short)0x409,buffer)失败并使用相同的错误代码...

使用LibUsb.getStringDescriptor(handle,deviceDescriptor...),我成功获取制造商的字符串以及17个设备中的两个设备的产品,这些设备返回iManufactureriProduct的非空值。我认为其他人没有检索到的原因与127字节限制有关,但是使用getStringDescriptorAscii(handle,deviceDesriptor...,buffer),缓冲区大小为1000字节,并不是更好。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我认为你的方法有误。使用getStringDescriptor代替修复它。但我不知道语言ID为1000.然而,短信的字节应该是一个死的赠品。 ;)