2013-06-28 102 views
5

我正在開發一個項目,該項目使用RXTXprotobuf與開發板上的應用程序進行通信,並且我遇到了一些問題,這意味着我可能會以錯誤的方式進行操作。這是我目前有書面請求董事會(讀取的代碼是相似的):如何使用Google protobuf通過串口進行通信?

public void write(CableCommandRequest request, OutputStream out) { 
    CodedOutputStream outStream = CodedOutputStream.newInstance(out); 
    request.writeTo(outStreatm); 
    outStream.flush(); 
} 

下面是用來準備這又suplies被使用的OutputStream的RXTX串行連接的設置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

您的硬件是否真的瞭解protobuf的獨特格式? – bmargulies

回答

1

Protocol Buffer值是encoded在線上使用little-endian字節順序。當兩端使用協議緩衝區時,這通常是irrelevant,但在這種情況下可能會造成問題。如果是這樣,您可以使用java.nio.ByteBuffer進行轉換,如建議here

相關問題