Linux、Java和USB

Linux、Java和USB,java,linux,usb,libusb,usb4java,Java,Linux,Usb,Libusb,Usb4java,作为问题的后续,我能够: 找到我正在使用的设备,断开它与内核的连接,并声明单一接口。这大概是我能做到的 当我尝试写入自定义无线收发器(不是我自己设计的)设备时,使用端点0x00的LibUsb.bulkTransfer时,我会得到: LibUsb.bulkTransfer(handle, (byte)0x00, bb, transfered, 5000); 输入/输出错误,在端点0x81上使用LibUsb.bulkTransfer时: LibUsb.bulkTransfer(handle, (b

作为问题的后续,我能够:

找到我正在使用的设备,断开它与内核的连接,并声明单一接口。这大概是我能做到的

当我尝试写入自定义无线收发器(不是我自己设计的)设备时,使用端点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的傻瓜指南,可能会帮助我找出我需要做什么

理想情况下,最终结果将是一个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?

如果您想进行真正的跨平台通信,您不能将自己局限于Linux/Mac/WindowsOK,那么我将选择伪跨平台通信。还有,谁给了-1,你能解释一下吗?如果我是你,我会瞄准POSIX平台+windows。那就更好了我甚至不能假装知道那是什么。我在任何实用性级别上做的最底层开发都是C++。POSIX是一个常见的API,许多UNIX类系统OSX、Linux、*BSD等等都实现了。像open2、read2等东西就是从那里来的。libusb是在此基础上实现的。我主要是想让你不要认为linux是唯一的*nix