USBキーボードModifierキーのコード

ガジェット製作

Google Readerを操作する場合、commandキーも入力できた方が便利になるので、フットキーボードでcommandキープラス何かのキーを入力できるようにするのはどうするのか、調べてみました。

USB HID Report Descriptor

USBキーボードとしてホスト(Mac)に送るデータは、PICマイコンを使う場合、

if(Switch3IsPressed())
{
	//Load the HID buffer
    hid_report_in[0] = 0;
    hid_report_in[1] = 0;
    hid_report_in[2] = key++;
    hid_report_in[3] = 0;
    hid_report_in[4] = 0;
    hid_report_in[5] = 0;
    hid_report_in[6] = 0;
    hid_report_in[7] = 0;
    //Send the 8 byte packet over USB to the host.
    lastINTransmission = HIDTxPacket(HID_EP, (BYTE*)hid_report_in, 0x08);

    if(key == 40)
    {
        key = 4;
    }
}

という感じで設定できるようです。このhid_report_in[]はReport Descriptorと呼ばれていて、配列の[0]にModifierキーのコード(shiftキーとかcontrolキーのコード)を入れて、[2]にキーコードを入れるみたいです。

それでいろいろと調べてみました。

まずUSBの本家サイトを確認してみたところ、USB HID(Human Interface Devices)のドキュメントがありました。

USB HID Usage Tables

このドキュメントの53ページからキーボードのことが書いてあります。53ページから始まっているテーブルは、hid_report_in[2]に入れる、キーボードの値で、[0]に入れるModifierキーの情報は書かれていませんでした。

その後いろいろとネットで調べたのですが、なかなか情報がないため、実際に動かして調べました。

Modifierキーは組み合わせが可能なため、hid_report_in[0]の各ビットを一つずつ1にして8個分調べてみました。

hid_report_in[0]設定値 対応キー
0x01 Control key
0x02 Shift key
0x04 Option key
0x08 Command key
0x10 Control key
0x20 Shift key
0x40 Option key
0x80 Command key

各キー、2つのビットに対応していますが、これはおそらく右と左のキーを区別するのだと思います。なんか、調べる手段がなくてよくわかりませんでした。例えばウィンドウを閉じるショートカットの、command + wキーのReport Descriptorは

hid_report_in[0] = 0x08;    //commandキー
hid_report_in[1] = 0;
hid_report_in[2] = 0x1a;    //wキー
hid_report_in[3] = 0;
hid_report_in[4] = 0;
hid_report_in[5] = 0;
hid_report_in[6] = 0;
hid_report_in[7] = 0;

てな感じで設定すればうごきそうです。

 

Google Readerに必要なキー

これであとはキーを追加して、プログラムをちょっと追加すればフットキーボードの当初の目的は達成できそうな気がしてきました。

Google Readerを操作するのに欲しいキー操作は以下です。

キー 動作
Space 下にスクロールする
Shift keyPlus mark Space 上にスクロールする
V key 元記事を別タブで開く
Command keyPlus markW key タブを閉じる
S key スターをつける/消す

ということで、すでにスイッチを2個つけてありますので、あと3個追加してこれらのキー割り当て、動作するか確認してみます。

 

変更履歴

 

日付 変更内容
2013.3.9 初版

« »

  • voyager

    こちらのPDF P.66-67 (中ではP.56-57)に記載されております. http://www.usb.org/developers/devclass_docs/HID1_11.pdf

    • claynets

      voyagerさん、

      おお、このドキュメントはみてたんですが、ちゃんと記載されているんですね。気付きませんでした。貴重な情報どうもありがとうございました。まだまだ自分、読み込みが足りませんね。

      今、フットキーボードのハードウエアをPIC18F14K50など手に入りやすいPICマイコンに置き換えしようとしています。でもMicrochip社のライブラリが一新されてて、なんかビルド通らなくなっちゃったんです。また何かわかったら記事にしようと思ってます。