2013-06-28 2 views
5

나는 개발 보드의 응용 프로그램과 통신하기 위해 RXTXprotobuf을 사용하는 프로젝트에서 작업하고 있으며 잘못된 방식으로 작업하고 있음을 의미하는 문제를 겪고 있습니다. 저는 여기에 현재 이사회에 요청을 쓰기 위해 가지고 무엇을 (읽기 코드는 비슷합니다) : 다음Google 프로토웨어를 사용하여 직렬 포트를 통해 통신하려면 어떻게해야합니까?

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에 의해 준비와 개발 보드는 데이터가 수신되는 것처럼 보입니다, 그러나 그것은 왜곡지고되거나 이해되지 않고있다.

지금까지 일반적인 의심 (예 : 직렬 연결이 설정되지 않음, 통신 문제 등)이 모두 제거되었으므로 직렬 연결을 통한 통신이 writeTo에 대한 호출 방법에 문제가있는 것처럼 보입니다. 성공한.

직렬 연결을 통해 protobuf를 사용하는 방법에 대한 문서가 거의없는 것 같아서 OutputStream을 전달하는 것으로 충분하다고 가정합니다. 사실 이것이 맞습니까? 아니면 직렬 연결을 통해 응답을 보내는 잘못된 방법입니까?

+0

하드웨어가 protobuf의 고유 한 형식을 실제로 이해합니까? – bmargulies

답변

1

Protocol Buffer 값은 와이어에서 리틀 엔디안 바이트 순서를 사용하여 encoded입니다. 프로토콜 버퍼가 양 끝에서 사용되는 경우 일반적으로 irrelevant이지만이 컨텍스트에서는 문제가 될 수 있습니다. 그렇다면 here과 같이 java.nio.ByteBuffer을 사용하여 변환에 영향을 줄 수 있습니다.

관련 문제