ニンテンドーワイヤレスキーボードをアンドロイド携帯で使ってみた。

(2011.5.8色々追記)
HTC Desire + Cyanogenmod 7.0.2.1 でニンテンドーワイヤレスキーボードポケモンタイピングDS付属のキーボードね)を利用してます。
そのままではUSキーボードとして認識されます。また、端末を横にして使うと、カーソルキーの方向が90度ズレちゃう。使い勝手が良くないので、1.日本語キーボードとして認識させる 2.横画面でのカーソルキーの向きを正しくする の2点を改善してみました。
HTC desire(+Bluetooth HID プロファイル対応のROM)で使ってるけど、ほかのアンドロイド携帯でも、root化済みで、キーボードが認識さえすれば以下の方法でできるはず。

(手始めにスキャンコードを調べてみたら↓こんなかんじ。赤文字の下段はFn同時押し時。Fnと数字キー・Control・Altの同時押しにも機能が割り振れますな。)

https://groups.google.com/group/android-group-japan/browse_thread/thread/35eec4f1e19c898f?hl=ja
http://www.kandroid.org/android_pdk/keymaps_keyboard_input.html
http://developer.android.com/reference/android/view/KeyEvent.html
を参考にして、Key Layout Mapファイル(Nintendo_Wireless_Keyboard.kl)を作成し、各キーに機能を割り振ります。中身はUTF-8なテキストファイルですんで、↓のように自分好みの設定をエディタでちまちまと書いてやればよろしい。

key 41    SWITCH_CHARSET
key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 12    MINUS
key 13    EQUALS
key 124   BACKSLASH
key 14    DEL

key 15    TAB
key 16    Q
key 17    W
key 18    E
key 19    R
key 20    T
key 21    Y
key 22    U
key 23    I
key 24    O
key 25    P
key 26    AT
key 27    LEFT_BRACKET

key 28    ENTER

#key 58    CAPS_LOCK
key 30    A
key 31    S
key 32    D
key 33    F
key 34    G
key 35    H
key 36    J
key 37    K
key 38    L
key 39    SEMICOLON
key 40    STAR
key 43    RIGHT_BRACKET

key 42    SHIFT_LEFT
key 44    Z
key 45    X
key 46    C
key 47    V
key 48    B
key 49    N
key 50    M
key 51    COMMA
key 52    PERIOD
key 53    SLASH
key 89    APOSTROPHE
key 54    SHIFT_RIGHT

#key 29    CTRL_LEFT
key 29    MENU              WAKE_DROPPED
key 125   HOME              WAKE
key 56    ALT_LEFT
key 57    SPACE

# landscape
key 103   DPAD_RIGHT        WAKE_DROPPED
key 105   DPAD_UP           WAKE_DROPPED
key 106   DPAD_DOWN         WAKE_DROPPED
key 108   DPAD_LEFT         WAKE_DROPPED

# portrait
#key 103   DPAD_UP          WAKE_DROPPED
#key 105   DPAD_LEFT        WAKE_DROPPED
#key 106   DPAD_RIGHT       WAKE_DROPPED
#key 108   DPAD_DOWN        WAKE_DROPPED



# with Fn key

#key 1     ESCAPE
#key 59    F1
#key 60    F2
#key 61    F3
key 61    SEARCH
#key 62    F4
#key 63    F5
#key 64    F6
#key 65    F7
#key 66    F8
#key 67    F9
#key 68    F10
#key 111   FORWARD_DEL

key 114   VOLUME_DOWN
key 115   VOLUME_UP

#key 102   MOVE_HOME
key 104   PAGE_UP
key 109   PAGE_DOWN
#key 107   MOVE_END

ほぼキートップの刻印どおりのキー配置だけど、Gingerbreadで非対応の機能があるからそんなキーは無効にしてます。
「半角全角」キーはSWITCH_CHARSET(文字種切替?)を割り振っているけどIMEが対応してないからいまんとこ無意味。
「CapsLock」キーは無効に(でもAndroidってShiftキー二度押しでCapslockされるらしいよ)。
「Control」キーはMenuキーを割り振り。
「家」キーはHOMEキーに(MENUでもいいかもって悩み中)。
「Esc」は無効にしてる(BACKにしようかな)。
Fn+数字は、Fn+3に検索キーを割り振ってる以外は無効化(MEDIA_NEXTやPLAY_PAUSEで音楽をコントロールしようかな)。
Fn+Controlで音量小、Fn+Altで音量大。
「Delete」「Home」「End」は無効。


http://www.binzume.net/diary/2010-12-26
からKey Character Mapファイル(QWERTY.kcm.bin)をお借りしてNintendo_Wireless_Keyboard.kcm.binにリネーム。(Shift+0で左括弧が入力されちゃうから暇なときに修正する予定)
それぞれ/system/usr/keylayoutと/system/usr/keycharsにコピー、パーミッションを適切に変更。
(詳細は上の各リンクを参考にしてくださいな)

これでアンドロイド携帯で日本語キーボードとして認識される。
カーソルキーは横画面で使うばあいに合わせてる。縦画面メインで使うならば、上記Key Layout Mapファイルの# landscapeより下の4行の頭に#を付け、#portraitより下の4行から#を取ってやればいいっすよ。

あとは日本語入力ソフトが物理キーにきちんと対応するのを待つばかり。Shiftキーでの範囲選択・Menu+Cでのコピー等・半角全角キーでの文字種切り替え・Tabキーで予測変換、などが揃って使えるようになるといいなあ。
openWnnがいまんとこベストかなー。BlueKeyboard JPも悪くなかったです(Pro版買いました)。