見出し画像

Keyball61カスタムログ レイヤー切り替え

目的

前回、Keyballの回路関連を修正して、普段遣いできるまでにもっていった。
ただ、このKeyballはその特徴から片手でマウス(トラックボール)操作を行いたいため、レイヤーをトグルする操作が多くなった、
その結果としてレイヤーを認識できずに誤操作する事故が多くなったため、これを軽減すべくファームウェアのカスタムを行った。

環境

自分のメインマシンはWindowsなので、コンパイル環境はQMK Toolboxを利用した。

手順

ファームウェアコンパイルまで

keyball自体のファームウェアと、

それをコンパイルするための環境が必要になります。

それぞれのリンクを辿って適切にセットアップします。Windowsの自分の場合はQMK MSYSを使いました。

設定デフォルトでインストールすればユーザフォルダ直下にqmk_firmwareフォルダができているのでその中のkeyboardsフォルダ内にkeyballの方のqmk_firmwareの中をコピーすれば準備完了。

ただ、編集のしやすさを考えると、一旦qmkの方のkeyballフォルダは空にしてからコピーしたほうがよさそうだった。

コンパイル対象の選定

まだ使い始めたばかりであることから、キーマップをReMapで変更できるようにしておきたい。
そのため今回はviaのキーマップをベースに改良する。デフォルトのキーマップはRemap非対応なので注意。

OLED(液晶ディスプレイ)の機能追加

まずは比較的理解しやすそうな液晶ディスプレイの機能追加から行った。ソースコードをある程度無理やり読み込んでいて気が付いたが、どうやらカスタマイズに使いたくなる機能は大体ドキュメント化されているようだった。

液晶ディスプレイに現在有効になっているレイヤーを表示したい場合、現在の最上位レイヤーの取得とディスプレイへの書き込みの2つができれば良い

現在の最上位レイヤーの取得はlayerについてのドキュメントでは「action_layer.hを見て」って書かれていたが、ソースコードと定義からget_highest_layer(state)にて取得できることがわかった。

QMKのOLEDのページをもとにキーマップフォルダ内のkeymap.cが編集対象で、そこにすでにあったoledkit_render_info_user関数の中をたどることによってkeyball/lib/keyball/keyball.cに関数を追加する(ヘッダファイルへの書き込みも忘れずに行うこと)ようにして対応すれば良さそうだという結論に達した。
ソースコードにするとたった6行だが、下調べが大変だった。

void keyball_oled_render_layerinfo(void){
#ifdef OLED_ENABLE
    oled_write_P(PSTR("Layr: "), false);
    oled_write_char(to_1x(get_highest_layer(layer_state)), false);
#endif
}

レイヤー切り替え時のLEDの色変更

これはそのものずばりな解説がリファレンスに存在している

ただ、個人的にはプリプロセッサで作られている色が眩しすぎに感じたため、輝度を4分の1に落として対応している。定義はqmk_firmware/quantum/color.hに定義されているため、リファレンスと照らし合わせて色を指定しよう。

また、この機能を有効化するとコンパイルサイズを消費し、コンパイル後にプログラムサイズの警告が出た。

キーマップのconfig.hで色のパターンの使用・不使用が定義されているため、使わなさそうなパターンの定義を取り消すことで対応した。

結果

実際に動作させたときの動きがこれ。黄色くなっていれば右手がマウスモードになっている。

また、参考用に変更したファームウェアもgithubにアップロードしておいた。
リポジトリは下記リンクから。


この記事が気に入ったらサポートをしてみませんか?