ArduinoボードからPCのJavaアプリケーションにJSONオブジェクトをUSBシリアル接続で送信しています。 Javaアプリケーションは、シリアルイベントリスナーのシリアルポートから「チャンク」を受信します。シリアルイベントリスナーを使用してJSONオブジェクトを受け取る方法は?
これは、リスナーの体である:
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
int available = input.available();
byte chunk[] = new byte[available];
input.read(chunk, 0, available);
// buffering of bytes must happen here to
// ultimately de-serialize into JSON object
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
私が持っている問題は、JSONオブジェクトの末尾が受信されたとき、それは明確ではないということです。私が調査したところから、シリアルポートから-1を返そうとする何らかのイベントが必要です。問題は、このモデルでは、読み込み可能なデータがある場合にのみリスナーに入ることです。
input.readの呼び出しの戻り値をチェックするためのコードを追加しました。利用可能なバイト数と同じ値を返しているようですが、他のイベントもテストされています。
シリアル送信の終了を検出するためにこれを簡単に修正する方法がない限り、シリアル入力のこのモデルはJSONオブジェクトのようなものを受信するためには機能しません。
シリアルポートへの「readline」呼び出しをブロックする別のスレッドを作成するデザインに移行する必要がありますか?
私は困惑しています。
ちょっと... * *私は**入力していました!:)(+1) –
同じことがここにあります。私は温度測定のストリームを送信しています。だから私は改行文字の存在について各チャンクをテストする必要がありますか? – ColonelPackage
"readline"呼び出しをブロックする別のスレッドを作成する私の代わりのアプローチについて、あなたの意見は何ですか?それでも改行文字を追加する必要はありますか?私はそう思っている。 – ColonelPackage