有点像这个问题的后续行动,我已经能够:
找到我正在使用的设备,将其与内核断开连接,然后声明(单一)接口。. . 这就是我所能得到的。
当我尝试写入设备(这是一个定制的无线收发器,不是我自己的设计)时,我得到(当使用带有端点 0x00 的 LibUsb.bulkTransfer 时):
LibUsb.bulkTransfer(handle, (byte)0x00, bb, transfered, 5000);
输入/输出错误,并且(当使用带有端点 0x81 的 LibUsb.bulkTransfer 时):
LibUsb.bulkTransfer(handle, (byte)0x81, bb, transfered, 5000);
超时错误。
我很确定我完全不知道我在这里做什么(这对我的立场没有帮助),这比我习惯于与较低级别的设备通信(最我已经完成了与.Net 的互操作)。
我已经看过 lsusb 命令并执行了它并得到了......很多东西,我可以认出其中的一些,但其中大部分我有点迷失了,希望有人能握住我的手,或者给我指点一种... USB for Dummies 指南,它可能会帮助我弄清楚我需要做什么。
最终结果(理想情况下)将是一个 Java 包,它允许与设备进行跨平台通信,而无需代表最终用户进行任何形式的修补(我的意思是跨平台,windows、linux 和 mac,这就是为什么我正在使用 java4usb java 库)。
我现在的位置是,使用 lsusb 命令的输出,我希望能够将命令从收发器发送到与之通信的外部设备。(基本上,它向连接到 LED 的设备发送命令,该设备可以打开和关闭 LED,并使其闪烁,它还可以接收来自该设备的命令并相应地响应它们,但是小步骤)。
您可以在此处找到 lsusb 输出(它非常冗长,我不想过多地淹没这个问题)。任何帮助或指导将不胜感激。
编辑:更多研究表明(来自 lsusb 输出)0x81 端点是一种中断类型。将 2 和 2 放在一起使我得出的结论是,我既不需要批量传输也不需要控制传输,而是需要中断传输:
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval
LibUsb.interruptTransfer(handle, (byte)0x81, bb, transfered, 1000);
不幸的是,我仍然收到超时错误。
编辑:需要更多信息:
有人建议同步控制(这对我需要做的一半来说很好)我应该使用usb4java.LibUsb controlTransfer方法,这很好但是有几个参数需要填充,我不知道他们需要填写的是什么:
public static int controlTransfer(DeviceHandle handle, //I know this.
byte bmRequestType, //<--- What goes here?
byte bRequest, //<--- What goes here?
short wValue, //<--- What goes here?
short wIndex, //<--- What goes here?
ByteBuffer data, //<--- What goes here?
long timeout) //<--- What goes here?
对于我需要填充这些字段的答案的任何和所有方向都将是一个很大的帮助并非常感谢。