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)のドキュメントがありました。
このドキュメントの53ページからキーボードのことが書いてあります。53ページから始まっているテーブルは、hid_report_in[2]に入れる、キーボードの値で、[0]に入れるModifierキーの情報は書かれていませんでした。
その後いろいろとネットで調べたのですが、なかなか情報がないため、実際に動かして調べました。
Modifierキーは組み合わせが可能なため、hid_report_in[0]の各ビットを一つずつ1にして8個分調べてみました。
hid_report_in[0]設定値 | 対応キー |
---|---|
0x01 | |
0x02 | |
0x04 | |
0x08 | |
0x10 | |
0x20 | |
0x40 | |
0x80 |
各キー、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を操作するのに欲しいキー操作は以下です。
キー | 動作 |
---|---|
下にスクロールする | |
上にスクロールする | |
元記事を別タブで開く | |
タブを閉じる | |
スターをつける/消す |
ということで、すでにスイッチを2個つけてありますので、あと3個追加してこれらのキー割り当て、動作するか確認してみます。
変更履歴
日付 | 変更内容 |
---|---|
2013.3.9 | 初版 |
こちらのPDF P.66-67 (中ではP.56-57)に記載されております. http://www.usb.org/developers/devclass_docs/HID1_11.pdf
voyagerさん、
おお、このドキュメントはみてたんですが、ちゃんと記載されているんですね。気付きませんでした。貴重な情報どうもありがとうございました。まだまだ自分、読み込みが足りませんね。
今、フットキーボードのハードウエアをPIC18F14K50など手に入りやすいPICマイコンに置き換えしようとしています。でもMicrochip社のライブラリが一新されてて、なんかビルド通らなくなっちゃったんです。また何かわかったら記事にしようと思ってます。