USB(HID)のReadFileデータ欠けについて

[戻る]
ちか 2008/10/24(金) 15:26:55
こちらで質問するのは場違いかもしれないのですが、
調べつくして原因がわからなかったので、皆様のお力を貸してください。

開発環境:WindowsXP・VisualStudio2005

以下のサイトの「Usbhidio_vc6」のサンプルを元に、
USB(HID)からデータを受け取るソフトを作成しています。
http://www.lvr.com/hidpage.htm

CreateFileを行ったあとにスレッドを開始し、
スレッドの中でReadFileを行っています。

ここで、受信するデータが、デバイス側から出しているものになりません。
USBデバイスからは36バイトのInputレポートデータを出し、
ホスト側のReadFileは、サイズ分正常に終了しているように見えます。
ただし、受信したデータの中を見ると先頭の5バイト分は正しいのですが、
そのあとのデータが正しく受信されません。

SnoopyProというパケットを見ることができるソフトでは、送信したデータ通りの確認が
できています。

以下のサイトのコメント欄の内容で気になったのですが
http://noritan-micon.blog.so-net.ne.jp/2008-03-14
『ホストPCではデバイスドライバがパケットをつなげてトランスファを再構成し、
ReadFile に渡します。』

HIDデバイスドライバがうまく動いていないのでしょうか・・。

それとも、初期設定のようなことが必要なのでしょうか。
(もしくは、Windows環境などの設定??)

ちなみに、Usbhidio_vc6 のアプリでも同様の現象となります。

どなたかアドバイスをお願い致します。

tetrapod 2008/10/24(金) 16:36:19
俺の作った HID 装置は Windows 標準 HID*.SYS で PnP 認識されるし、
俺の作ったアプリケーションソフトは ReadFile で予定通りのレポートが読めるよ
overlap は使ってないけど

Usbhidio の中まで読んでないけど、それで当該 HID が正しく制御できるのか
確認済みである?

Transaction と Transfer の違いは USB の基礎なので、これがわかっていない
レベルでは掲示板での質疑応答など無駄っぽい気がする。

ちか 2008/10/24(金) 16:53:14
tetrapodさん

>Usbhidio の中まで読んでないけど、それで当該 HID が正しく制御できるのか
>確認済みである?

Usbhidioでもデータ欠け(USBデバイスから出したデータの5バイト以降がおかしい)
となります。

先日まで、デバイス側の開発をしており、急きょホストアプリも作成しなければいけな
くなりました。
そこで、サンプル(Usbhidio)を参考に動作させてみたのですが、サンプル自体でも
うまくデータが取れずに質問をさせていただきました。

パケットとしては正しく流れているため、
USBデバイス→ホストマシン  まではデータは正常であり
ホストマシン→アプリ    でのReadFileでデータ欠けが起こるのではと思いまし
た。

その他、参考になるようなことがあればお願い致します。

ITO 2008/10/25(土) 13:23:20
> 先日まで、デバイス側の開発をしており、
デバイス側の開発をしているならば、「USBディスクリプタ定義」で
HIDか,USBSTORか。。。。。。。。を設定することはわかりますよね。
確認ですが、「インタラプト伝送」を設定していますね。

HIDを決めれば、usbケーブル接続時に「HIDUSB.SYS」をインストールするはずです。
出来ないとなると「USBディスクリプタ定義」の設定が間違っている可能性が
ありますね。

ITO 2008/10/25(土) 13:27:56
修正
>HIDを決めれば
「設定すれば」ですね。

ちか 2008/10/25(土) 16:08:50
ITOさん

ディスクリプタですか・・
ここは確かに、大変苦労して、ようやくSnoopyProで確認でパケットが確認できたところ
です。
再度 見直しをしてみようと思います。
ありがとうございました。

ちか 2008/10/28(火) 16:46:17
[[解決]]
ポーリングデータでのReadFileによる受信を使わずに、
GetReportリクエストにより取得するよう変更しました。

原因はまだ不明ですが、ひとまず解決として
時間のあるときに、原因調査を行うことにします。

アドバイスいただいた皆様、ありがとうございました。

古いスレッドには追加発言できません。