我正在开发一个使用RXTX和protobuf与开发板上的应用程序进行通信的项目,我遇到了一些问题,这些问题意味着我可能正在做的事情错误道。这是我目前用于将请求写入电路板的内容(读取代码类似):
public void write(CableCommandRequest request, OutputStream out) {
CodedOutputStream outStream = CodedOutputStream.newInstance(out);
request.writeTo(outStreatm);
outStream.flush();
}
以下是用于准备RXTX串行连接的设置,该设置又支持OutputStream
命令使用的write
:
// The baud rate to use when connecting to the development board
private final static int BAUD_RATE = 115200;
// The timeout to use for the serial port
private final static int CONNECTION_TIMEOUT = 50;
// The serial break for the development board, 100
private final static int SERIAL_BREAK = 100;
// <SNIP> ...
SerialPort serialPort = (SerialPort)port.open(appName, CONNECTION_TIMEOUT);
serialPort.setSerialPortParams(BAUD_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
serialPort.sendBreak(SERIAL_BREAK);
使用的OutputStream
由RXTX准备,开发板似乎表明正在接收数据,但它正在变得乱码或者没有被理解。
到目前为止,所有常见的嫌疑人(例如,未建立串联连接,通信问题等)都已被删除,因此问题在于如何通过对writeTo
的通信进行通信串行连接成功。
关于在串行连接上使用protobuf的文档似乎很少,所以我假设通过OutputStream
就足够了。这实际上是否正确,或者这是通过串行连接发送响应的错误方式?
答案 0 :(得分:2)
Protocol Buffer值为encoded,在线路上使用little-endian字节顺序。当协议缓冲区在两端都使用时,这通常是irrelevant,但在这种情况下可能会出现问题。如果是这样,您可以使用java.nio.ByteBuffer
按照建议here进行转化。