2013-02-01 48 views
-1

我在libusbjava库下面this教程。但是,当我尝试运行它时,会引发以下错误。与USB加密狗通讯,没有发现USB端点错误

ch.ntb.usb.USBException: No USB endpoints found. Check the device configuration 

下面是相关的部分从节目

public static void testDevice(){ 



    //Vendor ID, Product ID 
    Device dev = USB.getDevice((short) 0x0bda, (short) 0x2838); 


    try{ 
     //Data to write to device 
     byte[] data = new byte[]{0,1,2,3}; 
     //Data to read from device 
     byte[] readData = new byte[data.length]; 


     dev.open(1, 0, -1); 

     dev.writeInterrupt(0x81, data, data.length, 2000, false); 

     dev.readBulk(0x81, readData, readData.length, 2000, false); 

     logData(readData); 

     dev.close(); 


    } 
    catch(USBException e){ 
     e.printStackTrace(); 
    } 
} 

这里从设备从USB查看信息

Device Descriptor: 
bcdUSB:    0x0200 
bDeviceClass:   0x00 
bDeviceSubClass:  0x00 
bDeviceProtocol:  0x00 
bMaxPacketSize0:  0x40 (64) 
idVendor:   0x0BDA 
idProduct:   0x2838 
bcdDevice:   0x0100 
iManufacturer:  0x01 
iProduct:    0x02 
iSerialNumber:  0x03 
bNumConfigurations: 0x01 

ConnectionStatus: DeviceConnected 
Current Config Value: 0x01 
Device Bus Speed:  Full 
Device Address:  0x02 
Open Pipes:    1 

Endpoint Descriptor: 
bEndpointAddress:  0x81 
Transfer Type:  Bulk 
wMaxPacketSize:  0x0200 (512) 
bInterval:   0x00 
+0

接口描述符如何? –

+0

我不知道从哪里得到这些信息。我可以通过USB View访问它吗? – Wnt2bsleepin

回答

1

你的设备有一个bulk IN端点类型 - 这只能以批量模式向主机发送数据。 但是你试图写它:

dev.writeInterrupt(0x81, data, data.length, 2000, false);

这可不行,你就需要为一个interrupt OUT类型的端点。它也会有不同的端点地址。

+0

似乎有一个writebulk方法,但抛出错误的部分是dev.open(1,0,-1) – Wnt2bsleepin

+0

奇怪的是,我只是再次运行它,发现没有USB端点错误消失。但是,现在它说端点0x81是无效的。我不知道为什么它开始工作。 – Wnt2bsleepin