So-net無料ブログ作成

USB プロジェクト - マウスのReportDescriptorを見てみよう [USB]このエントリーを含むはてなブックマーク#

キーボード・デバイスのフリができたので、次はマウス・デバイスに挑戦します。 ハードウェアを作る前に、マウス向けReportDescriptorについて調べます。

HID Descriptor Toolにおまかせ

USB.orgで見つけた"HID Descriptor Tool"のサンプル・デスクリプタを見ながら、 考えます。

    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,                    // USAGE (Mouse)
    0xa1, 0x01,                    // COLLECTION (Application)

最初は、このデバイスの種類(マウス)を宣言します。 ここから、マウス・デバイスとしてのデータ構造が始まります。

    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)

PhysicalタイプのPointer COLLECTIONが宣言されます。 Physicalが何を意味するのか、今のところ不明です。

    0x05, 0x09,                    //     USAGE_PAGE (Button)
    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
    0x95, 0x03,                    //     REPORT_COUNT (3)
    0x75, 0x01,                    //     REPORT_SIZE (1)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)

マウス・デバイスからPCに送られる1バイト目の下3ビットの構造です。 三つのビットがそれぞれボタン1から3に相当しています。

    0x95, 0x01,                    //     REPORT_COUNT (1)
    0x75, 0x05,                    //     REPORT_SIZE (5)
    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)

1バイト目の残りの5ビットには、定数データ"0"が入ります。

    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //     REPORT_SIZE (8)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x06,                    //     INPUT (Data,Var,Rel)

2バイト目と3バイト目には、(X,Y)座標データが入ります。 それぞれ符号付8ビットの表現になっていて、 しかも相対値の値になるとされています。

    0xc0,                          //   END_COLLECTION
    0xc0                           // END_COLLECTION

最後にPointerとMouseの二つのCOLLECTIONを閉じておしまいです。

なんだか、キーボード・デバイスに比べて簡単に見えます。 扱うデータも3バイトの片方向通信です。 HIDのサンプル・プログラムを使うと、あっという間にできるかも。


nice!(0)  コメント(1)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 1

noritan

【速報】
マウス・デバイスの実験に成功しました。
X方向だけですが、スイッチで移動が出来るマウスができました。

同じIDを持ったまま、キーボード・デバイスをマウス・デバイスに換装するときには、デバイスドライバの更新をしなくてはならないようです。

今夜は、これでおしまい。
by noritan (2008-02-08 23:12) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。