***本記事にはプロモーションが含まれています。***
シリアルのメモ
シリアルのパラメータはいろいろあってよくわからない。ダイアログが出せるみたいなので、とりあえず使うことにした。RTS/CTSフロー制御を使うのが一般的なのかな。
ClearCommError()で、cbInQueにたまっているデータの数が入っているので、それでReadFileするとバッファからデータを読むことができる。
WaitCommEvent()でイベント待ちにして、WaitForMultipleObjects()/WaitForSingleObject()でシグナル状態になるのを待って、ReadFileする。
GetOverlappedResult( , FALSE)にすると完了を待たずに、抜ける。TRUEにすると、完了を待つ。
ReadFile/WriteFileは、デバイスドライバの送信/受信バッファに読み書きすること。データが届いたかどうかはわからない。
マルチスレッドにすれば、待ち受け関数をINFINITEで待つことができるけど、データの受け渡しにCriticalSectionを使ったりしないといけなく、バッファの取り扱いが面倒。
まず、マルチスレッドを使わずに動作を確認しようと思った。ReadFile/WriteFileは同期にすると問題があるそうなので、OVERLAPPEDを使った非同期にすることにした。
作ってみたけど、どうもうまく動かない。どうやらWaitForSingleObjectでイベント待ちにしてSleepしたところで何もいわずに落ちてしまう。テストプログラムだと大丈夫なんだけど。仕方ないので、WaitCommEventを使わないことにした。