2013-06-28 5 views
5

Sto lavorando a un progetto che utilizza RXTX e protobuf per comunicare con un'applicazione su una scheda di sviluppo e ho riscontrato problemi che implicano che probabilmente sto facendo le cose nel modo sbagliato. Ecco quello che ho attualmente per scrivere la richiesta al consiglio (il codice di lettura è simile):Come si usa Google protobuf per comunicare su una porta seriale?

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

Quello che segue è l'impostazione che vengono utilizzati per preparare il collegamento seriale RXTX che a sua volta suplies il OutputStream utilizzato dal write comando:

// 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); 

il OutputStream che viene utilizzato è preparato RXTX e la scheda di sviluppo sembra indicare che i dati vengono ricevuti, ma è sempre confusa o è altrimenti non essere capito.

Finora tutti i soliti sospetti (ad esempio, connessione seriale non viene stabilita, problemi di comunicazione, etc.) sono stati eliminati così sembra che il problema è nel modo in cui la chiamata a writeTo viene effettuata in quanto le comunicazioni tramite la connessione seriale sono riuscito.

Sembra esserci poca documentazione sull'utilizzo di protobuf su una connessione seriale, quindi suppongo che il passaggio dello OutputStream dovrebbe essere sufficiente. È corretto questo, o è questo il modo sbagliato di inviare la risposta sulla connessione seriale?

+0

Il tuo hardware comprende davvero il formato particolare di protobuf? – bmargulies

risposta

1

Protocol Buffer valori sono encoded utilizzando byte byte little-endian sul filo. Questo è normalmente irrelevant quando i Protocolli Buffer sono utilizzati su entrambe le estremità, ma potrebbe costituire un problema in questo contesto. In tal caso, potrebbe essere possibile utilizzare java.nio.ByteBuffer per effettuare la conversione, come suggerito here.

Problemi correlati