Linux,Java和USB

时间:2014-05-20 21:12:11

标签: java linux usb libusb usb4java

this问题的后续问题,我能够:

找到我正在使用的设备,断开它与内核的连接,并声明(单个)接口。 。 。就我所能得到的而言。

当我尝试写入设备(这是一个自定义无线收发器,而不是我自己的设计)时,我得到(当使用LibUsb.bulkTransfer与端点0x00时):

LibUsb.bulkTransfer(handle, (byte)0x00, bb, transfered, 5000);

输入/输出错误,以及(当使用端点为0x81的LibUsb.bulkTransfer时):

LibUsb.bulkTransfer(handle, (byte)0x81, bb, transfered, 5000);

TimeOut错误。

我很确定我完全不知道我在这里做了什么(这对我的职位没有帮助),这比我习惯于沟通更深入使用较低级别的设备(我所做的最多是与.Net互操作)。

我已经看过lsusb命令并执行了它并获得了很多东西,我可以识别其中的一些,但大部分都是我迷失了并且希望有人握着我的手,或者指着我... USB for Dummies指南,可以帮我弄清楚我需要做什么。

最终结果(理想情况下)将是一个Java包,它允许与设备进行跨平台通信而不代表最终用户进行任何修改(并且通过跨平台我的意思是,windows,linux和mac,这就是我使用java4usb java库的原因。

我现在的位置是,使用lsusb命令的输出,我希望能够将命令从收发器发送到与之通信的外部设备。 (基本上它将命令发送到连接到LED的设备,该设备可以打开和关闭LED,并使其闪烁,它也可以从该设备接收命令并相应地响应它们,但宝贝步骤)。

你可以找到here的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?

我需要填写这些字段的所有方向,这将是一个很大的帮助,非常感谢。

0 个答案:

没有答案