|
分類:[VB.NET/VB2005 以降]
VisualStudio 2010 ExpressにてHIDに対応したUSBデバイスから1ms毎に送られてくるデータを取得しようとしております。
Do While BlnIsLoop=True ReadFile(HidHandle, BufBytes, InputReportByteLength, ref BytesRead, OVERLAPPED ) Array.Copy(BufBytes, 0, OutBytes, offset, 64) Loop
のような形で USBデバイスからは、1ms毎に64bytesのデータが送られてきており、必要なデータが取得できたらLoopを抜けるようにしています。 Loopの回数は、今のところ200程度です。 Loopを抜けてから埋まっている取得した配列をチェックし正しく受信できていないデータは、無視するようにしています。 データの中身には0ffsetが含まれており、offsetを確認すると10回に1度必要なデータが抜けているのが確認されています。 データが抜けているときは、Errorが発生しておりますので、データ取得に間に合っていないか?逆に早いかだと思われます。
データが抜けていたときにUSBのプロトコルアナライザーでは、ただしく送られてきておりますので、PC側で取りこぼしています。 受信に関しては、上述ReadFileで取得しているだけです。
考え方として @データを受け取ったなにがしらイベントを取得してReadFileをするか? A正確に時間を取得して(1ms以下の精度で)1ms毎にReadFileされるようにする しかないように思われます。 そこで質問は、 1ms毎にデータを取りこぼしなく取得するには、どのようにすればいいのか教えていただきたくよろしくお願いいたします。 質問内容が漠然としているので申し訳ありません。 上述@やAのコードの記述の仕方がわからないためキーワード等を教えていただけましたら 調べて試してみたいと思います。
|