Nexus 7でBluetooth英語キーボードを使う(2) – 情報収集・環境調査

まずは情報収集と現在環境の調査。 AndroidでのBluetoothキーボードからの入力の仕組みは、塩田紳二さんのアンドロイドなう連載24回以降に詳しい。 まずは熟読。

ここから先は、Nexus 7のroot取得済で、Windows PCとADBで接続できている前提。

BTキーボードのVendor CodeとDevice Codeの確認

dumpsys input

とすると長いアウトプットが出てくるので、その中から下記のような部分を見つける。

4: Broadcom Bluetooth HID
Classes: 0x80000003
Path: /dev/input/event3
Descriptor: ec96c48a32322700b92b06ebf7f4937877cbf1bc
Location:
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0005, vendor=0x05ac, product=0x0239, version=0x001b
KeyLayoutFile: /system/usr/keylayout/Vendor_05ac_Product_0239.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: true


ここから以下のことが分かる。

  • Vendor Codeは「05ac」、これはアップルのCode。
  • Product Codeは「0239」、これはおそらくWireless KeyboardのCode。
  • 適用されるklファイルは「/system/usr/keylayout/Vendor_05ac_Product_0239.kl」。
  • 適用されるkcmファイルは「/system/usr/keychars/Generic.kcm」。

どうやら、ANKER ウルトラスリム・ミニ Bluetooth 3.0 ワイヤレスキーボードはアップルのキーボードをエミュレートしているらしい。

KLファイルとKCMファイルを手元にコピーしておいて、先にキーボードの各キーを押した時のLKC(Linux Key Code)を調べる。

各キーをおした時のLKCの調査

まずはBTキーボードがどのイベントデバイスに割り当てられているかをチェック。

$ getevent
add device 1: /dev/input/event3
name: “Broadcom Bluetooth HID”
add device 2: /dev/input/event1
name: “lid_input”
add device 3: /dev/input/event0
name: “elan-touchscreen”
add device 4: /dev/input/event2
name: “gpio-keys”

イベントデバイスが「/dev/input/event3」と分かったので、あとは、

$ getevent /dev/input/event3

を実行して、根気よくキーを押してはLKCを記録する。 例えば「a」を押して、離すと、以下の6行が表示されるので「001e」を記録する。

0004 0004 00070004
0001 001e 00000001
0000 0000 00000000
0004 0004 00070004
0001 001e 00000000
0000 0000 00000000

こうやって調べた結果は下図の通り。各キーの上段の青字が16進、下段の赤字が10進でのLKC。最上段のキーは(そのまま押した時)/(「fn」キーと一緒に押した時)の値。

さあ、これでKLファイルとKCMファイルに手を加える準備が整った。

 

タイトルとURLをコピーしました