2013-06-28 21 views
5

Pracuję nad projektem, który używa RXTX i protobuf do komunikowania się z aplikacją na pokładzie programistycznym i miałem problemy, które sugerują, że prawdopodobnie robię rzeczy w niewłaściwy sposób. Oto, co aktualnie mam na piśmie wniosek do rady (kod odczytu jest podobny):Jak używać protokołu Google protobuf do komunikacji przez port szeregowy?

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

Poniżej jest ustawienie, które są używane do przygotowania połączenia szeregowego RxTx co z kolei suplies z OutputStream używany przez write polecenie:

// 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, który jest używany jest przygotowany przez RxTx i rozwój pokładzie wydaje się wskazywać, że dane są odbierane, ale robi się nieczytelny lub w inny sposób nie są zrozumiałe.

Dotychczas wszyscy zwykli podejrzani (np. Brak połączenia szeregowego, problemy z komunikacją itp.) Zostały wyeliminowane, więc wydaje się, że problem polega na tym, w jaki sposób wywołuje się writeTo, ponieważ komunikacja przez połączenie szeregowe jest odnoszący sukcesy.

Wydaje się, że jest mało dokumentacji na temat używania protobuf przez połączenie szeregowe, więc zakładam, że podanie OutputStream powinno wystarczyć. Czy to rzeczywiście jest poprawne, czy też jest to niewłaściwy sposób wysyłania odpowiedzi przez połączenie szeregowe?

+0

Czy Twój sprzęt naprawdę rozumie specyficzny format protobuf? – bmargulies

Odpowiedz

1

Protocol Buffer wartości są encoded przy użyciu kolejności bajtów z małych bajtów na przewodzie. Jest to zazwyczaj irrelevant, gdy bufory protokołów są używane na obu końcach, ale może to stanowić problem w tym kontekście. Jeśli tak, możesz użyć java.nio.ByteBuffer, aby przeprowadzić konwersję zgodnie z sugestią here.