【问题标题】:Establish communication between Android host and USB Device在 Android 主机和 USB 设备之间建立通信
【发布时间】:2012-11-07 23:55:11
【问题描述】:

我正在尝试实现 android 主机和 USB 设备之间的双向通信,当然我使用的是 Google 提供的 USB Host API。 USB 设备包含一个固件,它会响应它接收到的任何字符。用户只需在 EditText 中插入一个字符并按下按钮即可发送该字符。这是代码

public void sendData(View v){
    final String character = request.getText().toString() + "\n\r";
    log.setText(log.getText() + "\n" + "Sending...");
    if(character != null){          
        Thread t = new Thread(new Runnable() {              
                @Override
                public void run() {                     
                    byte[] array = character.getBytes();
                    Log.d("USB", "Sending Data...");
                    mDeviceConnection.bulkTransfer(mEndpointOut, array, array.length, 100);                 
                    ByteBuffer output_buffer = ByteBuffer.allocate(array.length);
                    Log.d("USB", "Creating Buffer");
                    UsbRequest req = new UsbRequest();
                    req.initialize(mDeviceConnection, mEndpointIn);
                    req.queue(output_buffer, array.length);                             
                    if(mDeviceConnection.requestWait() == req){
                        Log.d("USB", output_buffer.getChar(0) + "");                            
                        Message m = new Message();
                        m.obj = output_buffer.array();
                        handler.sendMessage(m);
                        output_buffer.clear();                      
                    } else{
                        Log.d("USB", "No USBRequest received");
                    }
                }
            });
        t.start();
    } 

}

变量 request 是 EditText,log 是对 TextView 的引用,因此我可以显示一些调试信息。首先我使用 bulkTransfer 方法发送字符,然后我使用 USBRequest 排队请求以读取 in 端点上的数据,显然它正确发送了字符,但是当我显示接收到的字符时,它显示了一些奇怪的符号,比如汉字或内部带有问号的菱形(几乎总是这是响应)。我想知道我用于此通信的代码是否正确,如果正确,那我为什么会收到那些奇怪的字符?

非常感谢您的帮助

PD:对不起我的英语。

【问题讨论】:

    标签: java android usb communication


    【解决方案1】:

    我对这个问题有点不清楚。但如果您使用一些 minicom/putty 类型的终端应用程序来显示显示,我建议正确设置波特率。 如果这不是问题,您能否澄清一下您说接收到的字符 - 它是指在 Android 主机设备上接收到的字符还是意味着 USB 设备?

    【讨论】:

    • 感谢您的回复,是的,收到的字符在android主机上(我不确定问题是android-to-device还是device-to-android的通信问题),我会尝试设置适当的波特率并告诉您结果。
    • 你可以参考这个link's的答案,可以帮助你实施
    • 感谢 Arpan,我检查了那个链接,但它仍然不起作用,它收到了一些奇怪的字符,我会继续搜索。
    【解决方案2】:

    如果你发送字节数组,你也会得到字节数组。

    所以使用get(index of byte)的方法,而不是使用getChar(index)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多