代码之家  ›  专栏  ›  技术社区  ›  Gustavo Sgarbi Campos

Libusb Java-从设备异步读取

  •  1
  • Gustavo Sgarbi Campos  · 技术社区  · 10 年前

    我正在使用PIC18F4550通过Libusb Java与正在构建的USB设备进行通信。 我可以异步写入,所以我不需要将变量与设备合并,但我无法使用Java应用程序。我必须不断尝试从中读取信息,引发微控制器中断,这正是我想要避免的。 是否有一种方法可以使用回调或阻塞命令,仅当设备确实有要读取的内容时才尝试从设备读取? 我真的很抱歉,如果我不能让我的问题更清楚,任何疑问都可以问!

    1 回复  |  直到 10 年前
        1
  •  2
  •   David Grayson    10 年前

    不,这是不可能的,因为USB的基本工作方式。USB设备只能在主机询问它是否有什么话要说时与主机通话。负责谈话的主持人。当您有一个IN端点时,主机必须定期轮询您的设备,以检查设备是否有什么要说的。

    我之前对PIC18F4550进行过编程,我知道如果您将IN端点配置为发送NAK,则无需在主机每次从端点请求数据时处理中断。我怀疑您将端点配置为发送零长度数据包,而实际上您应该将其配置为发送NAK。NAK响应可由USB SIE处理,无需固件的任何干预。

    然而,您可以使用阻止命令从USB读取数据。从Java程序的角度来看,它们阻止命令,但在硬件中,它们是使用USB设备的轮询来实现的。我没有使用过“LibusbJava”,但我知道libusb1.0支持 blocking commands 例如 libusb_bulk_transfer .