В Windows 8.1, с LibUsb.getDeviceList(null,connectedDevices)
, я успешно получить каждый USB устройство подключено к компьютеру с помощью следующего кода:Получение строки дескриптор для устройства 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);
, но когда я хочу, чтобы получить строку дескриптор для конкретного устройства, чей «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)
терпит неудачу, а с тем же кодом ошибки ...
С LibUsb.getStringDescriptor(handle,deviceDescriptor...)
, мне удается получать строку для производителя и продукт для двух из семнадцати устройств, который возвращает ненулевое значение для iManufacturer
и iProduct
, Я думал, что причина, по которой другие не были получены, была связана с ограничением в 127 байтов, но с использованием getStringDescriptorAscii(handle,deviceDesriptor...,buffer)
с буфером размером 1000 байт не лучше.
Что мне не хватает?
Сравнение может быть путем? 'LibUsb.open (devicedescriptor, handle) .equals (LibUsb.SUCCESS)' –
Я так не думаю. Функция 'open' возвращает простой' int' ... – Zelig63
Можете ли вы показать часть кода, которую вы называете 'LibUsb.getDeviceList'? Возможно, это дело, которое вы называете «LibUsb.freeDeviceList (connectedDevices, true)» перед попыткой открыть устройство? – dryman