Skip to content

Commit c46114f

Browse files
Add user_parser.md
1 parent 4c979f4 commit c46114f

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

rev3.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@
144144
|-|-|
145145
|default|レポートディスクリプタを使ってレポートを解釈する。<br>ファームの容量が大きくなる代わりにNKROやポインティングデバイス付きのキーボードが動作する可能性がある|
146146
|fixed|6KROのキーボードのみ動作する、以前のファームと同じ動作。ファームの容量が小さい|
147-
|user|keymap.cなどに独自のパーサを実装する|
147+
|user|keymap.cなどに独自のパーサを実装する。[解説](user_parser)|
148148
- デフォルトパーサから変更するにはビルド時にオプションとして`PARSER=<parser>`を追加するか、config.hで指定してください
149149
```bash
150150
make keyboard_quantizer/rev3:default PARSER=fixed

user_parser.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# 自分でレポートパーサを実装する
2+
3+
## サンプル
4+
5+
- Thinkpad trackpoint keyboard専用のパーサを実装した[サンプル](https://github.com/sekigon-gonnoc/qmk_firmware/blob/dev/sekigon/keyboards/keyboard_quantizer/keymaps/user_parser_sample/keymap.c)
6+
7+
## 編集するファイルと関数
8+
- 自分で用意したパーサを使用するにはconfig.hへのオプション追加とkeymap.cへの関数の実装が必要です
9+
### config.h
10+
- 下記のオプションを追加
11+
```c
12+
// Use user parser
13+
#undef QUANTIZER_REPORT_PARSER
14+
#define QUANTIZER_REPORT_PARSER REPORT_PARSER_USER
15+
```
16+
17+
### keymap.c
18+
- `void report_descriptor_parser_user(uint8_t interface, uint8_t const* desc, uint16_t len)`
19+
- 受信したレポートディスクリプタを解析する
20+
- サンプルでは特定のキーボードの種類を想定しているのでレポートディスクリプタは解析不要のため、空の関数
21+
22+
- `void on_disconnect_device_user(uint8_t device)`
23+
- Quantizerからデバイスを抜いたときに実行する関数
24+
- サンプルではキーが押しっぱなしにならないように受信したデータをクリアしている
25+
26+
- `bool report_parser_user(uint8_t const* buf, uint16_t len, matrix_row_t* current_matrix)`
27+
- 受信したレポートを解析しキーマトリクスを更新する。戻り値はマトリクスの更新の有無
28+
- サンプルではVID:PIDがトラックポイントキーボードと一致した場合は専用の関数を、それ以外では6KROキーボード用の関数を呼び出している
29+
30+
## レポートの形式を調べる
31+
defaultキーマップのデバッグ機能を使ってどんなレポートが送られてくるか調べられます
32+
33+
- defaultキーマップの書き込み
34+
- `make keyboard_quantizer/rev3:default:flash`
35+
- TeraTermなどでシリアルポートを開く(ボーレートは1200bps以外)
36+
- シリアルポートから`d`を送信
37+
- デバッグプリントが表示される
38+
```
39+
d
40+
Enable dprint
41+
matrix scan frequency: 3762
42+
```
43+
- キーを押したりマウスを操作したときのレポートを確認
44+
- 先頭10バイトはホストICが付加したヘッダ
45+
- サンプルの場合以下の三種類
46+
```bash
47+
# Aキーを押したとき
48+
Receive: device:0, ep:1
49+
08 00 04 06 00 01 EF 17 47 60 00 00 04 00 00 00 00 00
50+
#<------ header ----->|<-------report-------->
51+
52+
# カーソルを動かしたとき
53+
Receive: device:1, ep:2
54+
06 00 04 02 01 02 EF 17 47 60 01 00 00 02 00 00
55+
#<------ header ----->|<----report----->
56+
57+
# 横スクロールしたとき
58+
Receive: device:1, ep:2
59+
03 00 04 02 01 02 EF 17 47 60 16 FF 00
60+
#<------ header ----->|<report>
61+
```
62+
- device0はキーボード
63+
- device1のID0はマウス(横スクロールは除く、xyは8bit)、ID0x16は横スクロール

0 commit comments

Comments
 (0)