3

Windows 8.1 ではLibUsb.getDeviceList(null,connectedDevices)、次のコードを使用して、PC に接続されたすべての 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」が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)、同じエラーコードで同様に失敗します...

を使用して、17 台中 2 台のデバイスのメーカーと製品の文字列を取得することに成功し、とLibUsb.getStringDescriptor(handle,deviceDescriptor...)に null 以外の値が返されました。他のものが取得されなかった理由は 127 バイトの制限に関連していると思いましたが、1000 バイトのサイズのバッファーで を使用するのは良くありません。iManufactureriProductgetStringDescriptorAscii(handle,deviceDesriptor...,buffer)

私は何が欠けていますか?

4

1 に答える 1