mint60を組み立ててから数日、REMAPを使っていろいろキー配置を換えてみた。が、その程度の変更では全然物足りない事がわかってきて。とうとうファームウェアのビルドに手を出すことになった。思ったより早かった。
TL;DR
実現したいこと
ファームウェアのビルドで実現したいことは、今のところこんな感じ
- VIA対応ファームウェアのビルド
- Win/Mac両対応でIME ONとIME OFFを別のキーで行える様に
ソースコード取得&環境構築
今回は開発環境はMacに構築する前提で進める。最初にソースコードを取得〜環境構築まで。今回はforkしてきたリポジトリを指定してる。
次に環境構築するスクリプトを実行する。homebrewで構築されるので、あらかじめインストールしておく。
$ git clone https://github.com/demuyan/qmk_firmware.git
$ cd qmk_firmware
$ ./util/qmk_install.sh
VIA対応ファームウェアをビルド
QMKとVIAの関係がいまいち理解してなかったのだけど、QMKがVIAをサポートしている、という関係性らしい。
日本語で書かれた開発関連の資料は(設計者向け)VIA対応のファームウェアを作ろう - 自作キーボード温泉街の歩き方が詳しいので、そちらをよんでいけばOK。詳しいことは本家のドキュメントを読むしかない。
で先の資料をもとにmint60のVIA対応に変更したコミットはこちら
ビルドはqmk_firmwareディレクトリにてmakeコマンドを実行する。
$ make mint60:via
実行するとmint60_via.hexというファイルができているはず。あとは、pro microに書き込めば良い。
LANG1、LANG2のWin/Mac対応
実現したいことは、「IME ON/OFFをWin/Macのどちらでも同じく使えるようにしたい」。Macはいいとしても、WinだとIME ON/OFFはトグルなので。トグルではなくMacみたいにIME ON/OFFを直接指定したい!という希望がある。
ただ、OSによってIME ON/OFFで扱うキーコードが異なるのでキーコードの割り当てだけでは実現は難しい。例えばMacで使われているLANG1、LANG2というキーコード、Winでは取れないといった具合に*1。なので、QMK Firmware で英字配列のまま Windows と macOS 両対応の IME のオンオフキーを作る - Qiitaを参考に対応した。
対応したコミットはこちら。
ちょっとだけ解説
LANG1、LANG2を指定したキーはWin/Macで送信するキーコードを切り替えている。出力しているキーコードは次の表の通り。
LANG1 | LANG2 | |
---|---|---|
Win | Shift + F11 | Shift + F12 |
Mac | LANG1 | LANG2 |
Win/Macの判別は、右側のALTとWin/Cmdの入替フラグをみている(右側のALTキー、Winキーは使ってないので)。理想で言えばOSの情報を判別する方法があればよかったのだけど、無さそうなので。
実装方法は、先の記事のまんまとなっている。左シフトを押したままF11キーを押して、F11キーを離して左シフトキーを離す、といった流れをコードで書いているだけ。
register_code(KC_LSFT);
register_code(KC_F11);
unregister_code(KC_F11);
unregister_code(KC_LSFT);
今回の場合、キーコード出力は1度の出力でよい(リピートして出力しなくてよい)ので、この実装方法で問題ない。これがキーリピートの対応が必要な場合はもうちょっといろいろする必要があるぽい。
さて次は
次はレイヤーごとのLEDの色切り替えだな。
*1:正確には新しめのWin10のMSIMEだと取れる。ただ私はATOKユーザなので実質使えない。