🔄
cocot46plusのロータリーエンコーダーへのキーコード割り当て
cocot46plus に搭載されたロータリーエンコーダーの操作、つまみを押す、反時計回りに回す、時計回りに回すのそれぞれへのキーコードの割り当て方法。
つまみを押した時の動作
つまみを押した時の動作はkeymap.cのkeymap配列でデフォルトでKC_MS_BTN3になっている所で指定できる。
make aki27/cocot46plus:default
でファームをビルドして QMK Toolbox などで書き込むと反映される。
なお、その項目の左右にある KC_PGUP, KC_PGDN の所は飾りです。そこを変えてもつまみを回したときの動作は変わりません。
つまみを回した時の動作
そもそもデフォルトだと PageUp, PageDown ではなく音量のUp, Down の動作をしていて、keymap.cにはそんな指定をしている箇所はない。この動作は quantum/encoder.c で指定されている。
keymap.c で制御するには、rules.mk に ENCODER_MAP_ENABLE = yes
と書いた上でencoder_map配列中の ENCODER_CCW_CW に反時計回り(counter-clockwise)、時計回り(clockwise)のキーコードを指定する。
手元では、 ENCODER_MAP_ENABLE = yes
としてファームウェアをビルドすると、サイズが大きくなり、
$ make aki27/cocot46plus:default
...
Creating load file for flashing: .build/aki27_cocot46plus_default.hex [OK]
Copying aki27_cocot46plus_default.hex to qmk_firmware folder [OK]
Checking file size of aki27_cocot46plus_default.hex
* The firmware is too large! 28862/28672 (190 bytes over)
[ERRORS]
make[1]: *** [check-size] Error 1
make: Make finished with errors
*** [aki27/cocot46plus:default] Error 1
のようにサイズ超過のエラーになってしまったので、ひとまず VIA_ENABLE = no
とすることで回避した。
お試し中の encoder_map:
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(MS_WHLU, MS_WHLD) },
[2] = { ENCODER_CCW_CW(MS_WHLR, MS_WHLL) },
[3] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
[4] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
[5] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX) },
[6] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX) },
};
(追記)ファームウェアサイズの縮小
KoRoNさんの記事
を参考にしてOLEDの処理からsnprintfを外したら、他の機能を無効化せずともファームウェアビルドできるようになりました。
Discussion