2

libhid を使用して、PIC マイクロコントローラーで開発中のカスタム HID デバイスにアクセスすることに興味があります。test_libhid コードを正常に実行できました。このライブラリを使用してデバイスを読み書きするための指示は、test_libhid コードのコメントとして提供されます。

文書化された読み取りと書き込みの手法に従おうとしましたが、これまでのところ、デバイスの読み取りまたは書き込みに成功していません。その理由は、デバイスのレポート記述子が、入力データ レポートと出力データ レポートの両方に 64 バイト配列を指定しているためではないかと考えています。

usb.org の HID セクションのデバイス クラス定義に含まれる詳細を読みました。記述子が一般的にどのように機能し、どのように HID パスに変換されるかを理解していると思いますが、デバイスに対してデータを読み書きしようとすると、失敗した。

デバイスが Windows で動作することを確認したので、問題は Linux 側にあるようです。それは問題ではないと思いますが、現在、Ubuntu 8.04 サーバーを搭載した VMWare 仮想マシンで作業していることに注意してください。

次のレポート記述子 (lsusb –vvv から生成) の HID パスを指定する方法について、誰かがガイダンスを提供できますか?

Report Descriptor: (length is 29)
    Item(Global): Usage Page, data= [ 0x00 0xff ] 65280 
                        (null)
    Item(Local ): Usage, data= [ 0x01 ] 1
                        (null)
    Item(Main  ): Collection, data= [ 0x01 ] 1
                        Application
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Global): Logical Minimum, data= [ 0x00 ] 0
    Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
    Item(Global): Report Size, data= [ 0x08 ] 8
    Item(Global): Report Count, data= [ 0x40 ] 64
    Item(Main  ): Input, data= [ 0x02 ] 2
                  Data Variable Absolute No_Wrap Linear
                  Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Main  ): Output, data= [ 0x02 ] 2
                        Data Variable Absolute No_Wrap Linear
                        Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Main  ): End Collection, data=none

また、test_libhid プログラムを実行すると、次のような 64 個の同一のエントリとして解析ツリーがダンプされます。

path: 0xff000001.0x00000000; type: 0x80

これらはおそらく入力です。このリストの後に、次のような別の 64 のエントリが続きます。

path: 0xff000001.0x00000000; type: 0x90

私は libhid メーリング リストに投稿しましたが、最近あまり活動がなかったので、ここに質問を持ち込もうと思いました。この入力および出力レポートの HID パスを指定する方法について誰かがガイダンスを提供できる場合は、非常に役立ちます。

ありがとう。

4

1 に答える 1

2

多くの試行錯誤の末、ターゲット デバイスのレポート記述子で libhid を動作させることができませんでした。HID デバイス インターフェイス (hiddev) は非常にうまく機能し、実際には非常に理解しやすいことがわかりました。私が強くお勧めするhiddevの優れたPDFリファレンスがあります。また、/usr/include/linux にあるインクルード ファイル hiddev.h も非常に役立ちました。Ubuntu 8.04 では、追加の構成を必要とせずに、hiddev インターフェイスが「箱から出して」動作しました。

HID デバイスを Linux ホストに接続する際に問題を抱えている次の人にとって、これが何らかの助けになることを願っています。

注: 上記の .PDF ファイルに指定したリンクが表示されなくなったようです。ここに .PDF ファイルのコピーを投稿しました。無料のファイル共有サービスなので、ダウンロードするにはいくつかの広告に耐える必要があります。

于 2009-07-06T21:32:37.730 に答える