2013-06-28 5 views
5

Я работаю над проектом, который использует RXTX и protobuf для связи с приложением на доске разработки, и я столкнулся с проблемами, которые подразумевают, что я, вероятно, делаю неправильный путь. Вот что я в настоящее время для написания запроса на доске (код чтения аналогично):Как использовать Google 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

Действительно ли ваше оборудование действительно соответствует оригинальному формату protobuf? – bmargulies

ответ

1

Protocol Buffer Значения: encoded с использованием бай-иновского порядка байтов на проводе. Обычно это irrelevant, когда протокольные буферы используются на обоих концах, но в этом контексте может возникнуть проблема. Если это так, вы можете использовать java.nio.ByteBuffer для осуществления преобразования, как предложено here.