- Thinkpad trackpoint keyboard専用のパーサを実装したサンプル
- 自分で用意したパーサを使用するにはconfig.hへのオプション追加とkeymap.cへの関数の実装が必要です
- 下記のオプションを追加
// Use user parser #undef QUANTIZER_REPORT_PARSER #define QUANTIZER_REPORT_PARSER REPORT_PARSER_USER
-
void report_descriptor_parser_user(uint8_t interface, uint8_t const* desc, uint16_t len)
- 受信したレポートディスクリプタを解析する
- サンプルでは特定のキーボードの種類を想定しているのでレポートディスクリプタは解析不要のため、空の関数
-
void on_disconnect_device_user(uint8_t device)
- Quantizerからデバイスを抜いたときに実行する関数
- サンプルではキーが押しっぱなしにならないように受信したデータをクリアしている
-
bool report_parser_user(uint8_t const* buf, uint16_t len, matrix_row_t* current_matrix)
- 受信したレポートを解析しキーマトリクスを更新する。戻り値はマトリクスの更新の有無
- サンプルではVID:PIDがトラックポイントキーボードと一致した場合は専用の関数を、それ以外では6KROキーボード用の関数を呼び出している
-
defaultキーマップを書き込む必要があります
-
defaultキーマップの書き込み
make keyboard_quantizer/rev3:default:flash
- すべてのキーマップでデバッグ機能が有効化済みです
- TeraTermなどでシリアルポートを開く(ボーレートは1200bps以外)
- シリアルポートから
d
を送信- デバッグプリントが表示される
d Enable dprint matrix scan frequency: 3762
- キーを押したりマウスを操作したときのレポートを確認
- 先頭10バイトはホストICが付加したヘッダ
- サンプルの場合以下の三種類
# Aキーを押したとき Receive: device:0, ep:1 08 00 04 06 00 01 EF 17 47 60 00 00 04 00 00 00 00 00 #<------ header ----->|<-------report--------> # カーソルを動かしたとき Receive: device:1, ep:2 06 00 04 02 01 02 EF 17 47 60 01 00 00 02 00 00 #<------ header ----->|<----report-----> # 横スクロールしたとき Receive: device:1, ep:2 03 00 04 02 01 02 EF 17 47 60 16 FF 00 #<------ header ----->|<report>
- device0はキーボード
- device1のID0はマウス(横スクロールは除く、xyは8bit)、ID0x16は横スクロール