建立Android主机和USB设备之间的通信

时间:2012-11-07 23:55:12

标签: java android usb communication

我正在尝试在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();
    } 

}

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

非常感谢你的帮助

PD:抱歉我的英文。

2 个答案:

答案 0 :(得分:0)

我对这个问题有点不清楚。但是如果你使用一些minicom / putty类型的终端应用来显示显示,我建议你正确设置波特率。 如果那不是问题,你可以澄清你说收到的角色 - 它是指在Android主机设备上收到的字符还是USB设备?

答案 1 :(得分:0)

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

因此,请使用方法get(index of byte),而不要使用getChar(index)

相关问题