2013-06-28 8 views
5

私はRXTXprotobufを使用して開発ボード上のアプリケーションと通信するプロジェクトに取り組んでいます。私は間違ったやり方をしている可能性があることを意味する問題に取り組んでいます。ここで私は現在、ボードに要求を書き込むために持っているものだ(読み取りコードも同様です):以下Googleのprotobufを使ってシリアルポート経由で通信するにはどうすればよいですか?

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

が順番にで使用されるOutputStreamをsuplies 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により調製され、開発ボードは、データが受信されていることを示しているようだが、それは文字化けになっているか、そうでなければ理解されていません。

これまでのところ、シリアル接続が確立されていない、通信の問題などのすべての問題が解消されているため、シリアル接続による通信がどのように行われているかが問題であるようです。成功した。

シリアル接続でのprotobufの使用に関するドキュメントはほとんどないようですので、OutputStreamを渡すだけで十分であるはずです。これは実際に正しいのですか、これがシリアル接続を介して応答を送信する間違った方法ですか?

+0

ハードウェアがprotobufの特殊な形式を本当に理解していますか? – bmargulies

答えて

1

Protocol Bufferの値は、ワイヤ上でリトルエンディアンのバイトオーダーを使用してencodedです。プロトコルバッファが両端で使用されている場合、これは通常irrelevantですが、このコンテキストでは問題が発生する可能性があります。その場合は、java.nio.ByteBufferを使用して変換を行います(hereなど)。

関連する問題