■
tmk_keyboardを使う
tmk_keyboard を使ったコンバータ作成の続きです。
コンバータの構造は、キーボードそのものを初期化した後、
キー入力(スキャンコード) → コンバータ内のテーブル参照 → USB HID UsageID送信
を繰り返し行います。原理的にはキーボードのスキャンコードが分かれば、コンバータ内のテーブル (keymaps[]配列)にマップ可能なので、巷に出回っているキーボードの殆どがUSB HIDキーボード化可能となります。 5576-001, 5576-002もスキャンコードセットが0x82と分かっているので、該当するコードセットをテーブルに設定すれば、 USBキーボード化できるはず・・・と思ったものの、肝心のコードセット82hの資料が見当たらず。 自力でキーコードを調査した、という事を前回書きました。
この調査で判明したのは、コードセット82hというのは、
- 基本的にはUSキーボードのコードセット2である
- 0x80以上のキーコードはF7キーを除き、E0, E1のプリフィックス付きである
- キーコードに対応するUSB HID UsageIDが一部のキーについては無い
ということ。更に厄介なのが、矢印キーの上にあるキー6つが、5576-001と5576-002とでは異なる事です。スキャンコードが 違うため、同じプログラムで両方のキーボードをサポートするのは難しそうです。
別々に作成するか?と考えたのですが、キーボードは固有のキーボードIDを持っているので、これをトリガーとして、 初期化時にテーブルを変更するようにしました。テーブルは、
- キーボードID"92ab" → 5576-001用のテーブルを使用
- キーボードID"90ab" → 5576-002用のテーブルを使用
で、tmk_keyboardのレイヤー機能を使用して切り替える事にしました。
USB側の実装は、tmk_keyboardのコードをそのまま使用し、テーブルの変換コードを確認しては直し、を繰り返して、 ようやっとキーキャップ通りの入力が出来るところまで出来ました。機能的に問題が無いようだったら、 hasuさんにプルリクを出そうかと思います。