Android USB 主机 : asynchronous interrupt transfer

标签 android asynchronous usb interrupt host

我正在尝试连接一个 USB 设备(自己构建)以与我的开发板 (ODROID-X) 通信 不幸的是,就异步通信而言,示例非常少。我在中断驱动的数据交换方面遇到了一些问题——如何使用异步中断模式建立连接? 在一个方向上,传输是可能的……但在两个方向上都不起作用。有没有这样的例子:

  • 发送一个带有 endpoint_OUT 的 ByteBuffer
  • 从 endpoint_IN 上的设备获取消息

都处于中断模式。

非常感谢您的支持。

哈代

最佳答案

也许我误解了这里的问题。 作为 API 包的一部分的示例导弹发射器应用程序从 12 级开始使用 queue()requestWait() 方法来处理中断类型端点。 请求是 In 还是 Out,取决于 EndPoint 的方向。

一个漂亮的点头请求->回复的代码看起来像这样。您可能希望以不同的方式构建实际代码,但这为您提供了需要发生的事情的要点(我希望)

public void run() {
    int bufferMaxLength=mEndpointOut.getMaxPacketSize();
    ByteBuffer buffer = ByteBuffer.allocate(bufferMaxLength);
    UsbRequest request = new UsbRequest(); // create an URB
    request.initialize(mConnection, mEndpointOut);
    buffer.put(/* your payload here */;

    // queue the outbound request
    boolean retval = request.queue(buffer, 1); 
        if (mConnection.requestWait() == request) { 
             // wait for confirmation (request was sent)
             UsbRequest inRequest = new UsbRequest(); 
             // URB for the incoming data
             inRequest.initialize(mConnection, mEndpointIn); 
             // the direction is dictated by this initialisation to the incoming endpoint.
             if(inRequest.queue(buffer, bufferMaxLength) == true){
                  mConnection.requestWait(); 
                  // wait for this request to be completed
                  // at this point buffer contains the data received
             }
        }
}

如果您实际上正在寻找一种方法以异步方式运行此 IO 而无需绑定(bind)线程,那么我认为您需要考虑使用 DeviceConnection.getFilehandle() 方法返回一个标准文件句柄,理论上您可以像使用任何其他文件类型资源一样使用它。但是我会注意到我还没有尝试过这个。

如果这些都不能解决问题,请修改问题以阐明您正在努力寻找示例的内容。 我希望这会有所帮助。

关于Android USB 主机 : asynchronous interrupt transfer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345953/

相关文章:

javascript - Node.js 和 postgres 听

xcode - 使用 cocoa 通过 USB 发送信号?

android - 使用多个可点击按钮在 ListView 中获取精确点击的按钮

android - 编译时遇到错误 - IncompatibleClassChangeError : Class com. google.firebase.auth.FirebaseAuth

c# - 在同步调用的异步代码中捕获异常

linux - 在 Linux (libusb-1.0) 上访问 USB 设备?

windows - MOUNTVOL.EXE 的编程接口(interface)

android - 备份/恢复由 ORMLite 管理的 Android 应用程序数据库

Android:在 Canvas 上用一些颜色绘制透明位图

mongodb - mongo shell 的同步/异步属性是什么?