Android usb主机:异步中断传输

问题描述 投票:11回答:1

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

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

两者都处于中断模式。

非常感谢您的支持。

哈迪

android asynchronous usb interrupt host
1个回答
20
投票

也许我在这里误解了这个问题。从12级开始,作为API包一部分的示例导弹lanucher应用程序使用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而无需将线程绑定到它的方法,那么我认为您需要考虑使用DeviceConnection.getFilehandle()方法返回标准文件句柄,理论上您可以使用它,就好像它一样是任何其他文件类型资源。但我会注意到我没试过这个。

如果这些都没有解决问题,请修改问题以澄清您正在努力寻找的例子。我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.