ADBキーボードをUSB接続に変換する

とある日、Twitterのタイムラインを見ていると、知人の絵描きさんがApple Adjustable Keyboardを処分しようとしていたので、図々しくも譲って頂けないかお声掛けしたところ、どうぞと譲って頂くこととなりました。実は、英語配列版を持っているのですが本体部分しか無く、テンキーユニットもパームレストも無く不完全体でした。譲って頂いたことによって、10年越しぐらいでやっと完全体にすることが出来ました。

AAK

さて、せっかくなので動かしてみようと持っていたADB-USB変換器でWindows PCへ接続すると、変換器をUSBデバイスとして認識はしているのに、キー入力には無反応。調べると、内蔵電池が切れると動かなくなるとの情報を入手。えー!というわけで、市場価格が高すぎるiMateもそれは同じらしいので代替手段を探したところ、マイコンボードにプログラムを書き込んで変換アダプタにするというblog記事を発見。

ADB to USB Converter ( Da Vinci ) を作ってみた – ahiru studio

ADB to USB converter on Da Vinci(1/3) – エチュードの頃

そして、お二人の元ネタとなったサイトも発見。

ADB to USB keyboard converter

詳しくはお二人のサイトを見て頂くとして、そちらを読んでそのまま実行した結果「ハマった」ポイントがあったため、ここではその部分について書いてみます。

ADB-USB

  • 購入するマイコンボードは「Da Vinci 32U」
    お二人の記事中では「Da Vinci 32U with Arduino Bootloader」という製品を購入していますが、これを購入してしまうとコンパイル済プログラムを書き込むことはほぼ不可能で(タイミングによって書き込めたとありますが、自分の環境では一回も成功しませんでした)、今回の用途ではDa Vinci 32Uが正しい選択でした。なお、ストロベリー・リナックスさんは日曜日も発送してくれたりして大変対応が早いです。アキバでは見つかりませんでしたので、素直に通販した方が良いです。
  • Da Vinci 32UのWindowsドライバはFLIPに含まれている
    Da Vinci 32UはWindowsからUSBデバイスとして見えますが、その時に必要なドライバは「FLIP」というプログラム転送・消去ツールのインストールフォルダ内に用意されていて、デバイスマネージャーを使用し手動でドライバを当てる必要があります。その手順はこちらのサイトが詳しいです。
  • 初回書込み時はジャンパピン+リセットは不要
    購入直後はプログラムは入っていないので、プログラム転送モード(ジャンパピンを付けてリセットボタンを押す)にする必要はありません。繋いでドライバを当てたらFLIPを起動し、接続デバイス(ATMEGA32U4)を選択、接続先としてUSBを選択すると書き込めるようになります。
  • ADBデータラインのボード側接続先
    Da Vinci 32UからADBのデータラインへ出力するポートは書き込むプログラムのソースファイル群にある「config.h」にて指定されています。そこでは「ADB_PORT」が「PORTD」となっていますので、Da Vinci 32UのPD0にADBデータラインを接続しないとADB側からの信号が入力となりません
  • 日本語キーボードはスキャンコードテーブルをいじる必要がある
    譲って頂いたApple Adjust Keyboardは日本語配列だったのでたまたまわかったのですが、日本語キーボードの場合はコンパイル前にキーテーブルファイルを変更しておく必要があるようです。

マイコンボードの価格も安く、ADBキーボードを末永く使いたいようでしたらこの手法は「有り」かと思います。

HIDキーボードデバイスのキー配列を変更する

概要:
WindowsにUSBキーボードを接続すると「HIDキーボード」扱いになるが、この時英語配列キーボードなのに日本語配列になったり、日本語配列なのに英語配列になったりとキー配列が実際のキーボードと合わない場合が多々発生する。
PS/2キーボードであればキー配列を変更できるが、HIDキーボードの場合は変更ができない。
環境:
Windows98~WindowsVista(HIDキーボードに対応しているWindows?)
解決:
regeditを起動する

HKEY_LOCAL_MACHINE¥SYSTEM¥
CurrentControlSet¥Services¥i8042prt ¥Parameters
を開く。

LayerDriver JPNのデータを確認。
英語配列の場合→kbd101.dll
日本語配列の場合→kbd106.dll
に変更する。

変更後、Windowsを再起動しテスト入力を行う。
追記(2008/09/24)
Windows Vista Wikiさんにも記述がありました
この問題って昔から引きずっていて解決しないですねぇ・・・・