2017-09-30 5 views
-1

私が取り組んでいるプロジェクトは、Netduino 3 WIFI(C#.NETマイクロフレームワーク)とPCアプリケーション(C#.NET Framework)とのインターフェイスになります。シリアルTTLカメラはNetduinoのCOMポートの1つに接続され、PCアプリは別のCOMポートに接続します。すべて8ビットUARTで通信します。私は、コマンドを送信して確認する目的のために、PC、Netduino、およびCameraの間でbyte []を送受信するのに成功しています。主な目的は、カメラに「画像取り込み」コマンドを送信し、.JEPGバイト[]が戻ってくるようにすることです。データ受信イベントが発生すると、データの受信を開始したいと考えています。私は多くの情報をオンラインで見つけることはできませんが、私が読んだことから、serialport.basestreamプロパティ、またはビットマップコンストラクタ(ストリーム)を使用する必要があるかもしれません。私はストリームのコンセプトにあまり慣れていないだけで、誰かが私に何らかの情報を教えてもらうか、これを設定する方法の例を与えることを願っています。シリアルポート経由で.JPEGストリームを受信し、保存して再送信

+0

シリアルポートは8ビットパリティなしに設定する必要があります。 jpegを送信するときは、バイナリデータの前に4(または8ビット)の長さを付けます。その後、データをバイトとして送信します。受信側は、データの先頭から長さを取り除き、バイト(バイナリデータ)を読み取る必要があります。 – jdweng

答えて

0

ポートReadTimeoutをゼロに設定し、DataReceivedイベントにハンドラをインストールすることをお勧めします。これにより、データを送信する前に適切なヘッダーを送信すると、データをキャプチャして正しい次元のバイト配列に直接バッファすることができます(単純なチェックサムはおそらく間違っていません)。ハンドラは処理されるデータにチャンクで対処する必要がありますが、一度受け取ったら、バイト配列を処理してjpgを再構築して破棄することができます。 DataReceivedイベントは各バイトごとに発生しないので、そこに入ると、ハンドラを終了する前にゼロバイトを返すまでポートでReadを発行し続ける必要があります。

関連する問題