我正在尝试在Android主机和USB设备之间实现双向通信,当然我正在使用Google提供的USB主机API。USB设备包含一个固件,该固件呼应其接收到的任何字符。用户只需将字符插入EditText中,然后按按钮发送字符。这是代码
public void sendData(View v){
final String character = request.getText().toString() + "nr";
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();
}
}
变量请求是deDittext,日志是对文本视图的引用,因此我可以显示一些debbug信息。首先,我使用bulktransfer方法发送字符,然后使用USBREQUEST排队读取有关端点的数据的请求,显然是正确地发送字符,但是当我显示收到的字符时,它显示了一些奇怪的符号,例如汉字,或内部有问题符号的菱形(几乎总是这是回答)。我想知道我用于此通信的代码是否正确,如果是正确的,那么为什么我会收到那个怪异的字符?
非常感谢您的帮助
PD:对不起我的英语。
我对这个问题有点不清楚。但是,我建议如果您使用一些微型/腻子的终端应用程序来显示显示器,请正确设置波特率。如果这不是问题,您可以在说收到字符时澄清一下吗?这意味着在Android主机设备上收到的char还是表示USB设备?
如果发送字节数组,您还会获得字节数组。
因此,请使用方法get(index of byte)
而不是使用getChar(index)
!