3

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

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);

但是当我想检索“iManufacturer”不为空的特定设备的字符串描述符时:

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)失败以及相同的错误代码......

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

我错过了什么?

4

1 回答 1

0

我觉得你的方法不对。改用getStringDescriptor应该修复它。但我不知道语言 id 为 1000。尽管如此,将短片转换为字节应该是一个死的赠品。;)

于 2016-08-29T08:14:25.333 回答