自作キーボードでVIA対応のファームフェア作ってみた。

日本語配列のキーボードが欲しい、このキーキャップが使いたいとわがままを言っていた結果、自分でキーボードを作ることになりました。それが以前に記事にしたTH60JPです。

実際に基板は発注し完成(一部ミスもありましたが…)したので、ファームフェアを作成し、動作するようにすることもできました。私の始めてのフルサイズ自作キーボードはYMDK60で作った日本語配列のキーボードで、これはVIA・QMKに対応したもので、VIAしか使ったことが無かったのですが、QMKと比較してVIAはとても便利だと感じています。そこで、VIA対応のファームフェアを作ってみようとなったわけです。

VIA対応のファームフェアを作ろうと思った理由は、他にも色々あるのですが主なものだと、GUIで操作がしやすいこと、キー割り当ての試行錯誤が簡単であること、頒布する場合に初心者の方が使いやすい方が良いと思ったからです。

というわけで実際にVIA対応のファームフェアを作ってみることにしたのですが、日本語で細かく解説しているサイトがこちらのサイト様しかありません。

VIA対応ファームフェアの作成方法の記述があるサイト

英語であれば公式サイトのリファレンスもあります。

VIAの公式ドキュメント
https://www.caniusevia.com/docs/layouts

この二つの資料を参考にしつつ、VIA対応を行っていきますが、わかりにくい点があったのでその点だけ記録として残しておきます。

目次

基本的な流れ

基本的な手順はこちらのサイト通りにVIA対応を行えば可能です。

VIA対応ファームフェアの作成方法の記述があるサイト

おおまかな流れは以下のようになっています。

  1. 動作するQMKファームウェアを作成する
  2. 関連付けるためのファイルを作成する
  3. QMKファームフェアにVIA用の設定を記述する(簡単)

という流れになっています。そのため、大前提として正しく動作するQMKファームフェアが必要ということがわかります。

なので、VIA対応をするために、専用ファームフェアを別で作成するほど大掛かりな対応が必要なわけではなく、完成したQMKファームフェアに少しだけ追加する程度の対応で可能なわけです(設定ファイルを作るのが少し面倒かも)。

この流れを上記のサイトでは細かく解説してくれていますが、少しわかりにくいと感じた部分を以下に残していきます。

デフォルトのキーマップ

VIA対応のファームウェアも結局のところはQMKなのでデフォルトのキーマップを設定しておく必要があります。このときのデフォルトキーマップは全てのキーが反応するように作成しておきましょう。

試してはいませんが、VIAで書き換えられる範囲はおそらくQMKで認識できる部分なのでデフォルトのキーマップがキー数が少ないものを設定してしまうと、マルチレイアウトの場合に正しく変更が反映されない可能性があります。なので、私は最も多いキーをデフォルトキーマップとして設定しています。

VIDとPIDについて

公式みてくださいと書いていて不明瞭なのですが、この部分は最終的に読み込むjsonファイルと合わせていれば問題ありません。

  "vendorId": "0xFEED",
  "productId": "0x0000",

これはQMKのデフォルトの値ですが、これを使う場合はVIAで読み込むjsonファイルに上記のように記述をすれば良いだけです。

では、この値が何なのかという話なのですが、これはVIAで認識した際に自動的にファームフェアを読み込むのに必要になります。逆に言えば、QMK単体ではこの設定は大きな意味を持ちません。

しかし、この「VIAが自動的に読み込むということ」は、VIA側に対応を行ってもらう必要があるため、最終的にVIAにマージしなければなりません。マージについては先ほどの解説サイトに記載があります。

試作の段階でマージするなど比較的面倒な作業をするのは気が引けるかと思います。そういった理由かはわかりませんが、VIAには設定ファイルを読み込む機能があるため、それを利用すればVIAにキーボードを認識させることが可能です。

プロトタイプでも認識できる

このVIDとPIDはVIAで自動で認識する場合は大切なのであって、試作であったり、個人で作成する場合、つまり手動でファームフェアを読み込む場合は設定ファイルと合わせれば大丈夫です。

キーレイアウトの作成

キーレイアウトをKeyboar layout Editorで作っていきます。これも基本的には解説のサイトを見ていけば良いと思うのですが、マルチレイアウトに対応する場合に気になったことがあったので、それをいくつか紹介しておきます。

まずマルチレイアウトの場合、一部キーが複数パターンに変更できる場合かつ、その行のレイアウト自体も複数ある場合があると思います。例えば今回私が作成しているキーボードの場合は以下のレイアウトの実現を目指しています。

TH60JPのレイアウト

例えば一番下列だと、スペースバーが分割されるか以外にその横のキーにも別パターンがあったり、そもそも列自体の配列が大きく変更できたりします。

しかし、VIAで設定できるのは簡単な分岐処理のみです。具体的にはON/OFFか、プルダウンリストからどれかを選ぶぐらいしかできません。

設定できるのは簡単な設定のみ

例えば。その列が複数パターンに分岐できて、さらにその先で分岐処理を行うということができません。簡単に言えばレイアウトの設定では書く設定で1回しか分岐できません。言葉だと書きにくいですね。

正直その意味は見てもらった方が良いと思うので実例で示します。先ほどの私のキーボードの配列をVIAで設定できるようにする場合、Keyboard Layout Editor上ではここまで大量に書かないといけません。元のレイアウトを一見すると単純そうな気がしますが、それを1回の分岐処理で実現するのはこうするしかありません。

分岐1回で実現する場合

このように1回分岐させて後は全て選択肢として用意する必要があるので非常に個数が増えます。しかも、これを全て手で打ち込むので面倒なことこの上ありません。真ん中に空きがあるのは、作成したファイルの都合なので意味はありません。

このようになっており、解説サイトには書いておりませんが複数分岐ができないので、実際にマルチレイアウトを作成するのは面倒だというのが一つ目。

もう一つが、VIA上で色がついて表示されるモディファイアキーや変更できるレイアウトの部分の色についてです。

この部分は色を変える必要があるかのように書いていますが、色は指定しなくてもレイアウトを変更することが可能です。上の冗長なVIA用の設定ファイルを使って読み込むと問題なくレイアウトを変更することが可能です。そのため、キーの色を強調できるモディファイアキーをマルチレイアウトの中に入れることも可能です。上の画像の場合はEnterキーがそうなっています。

VIAのレイアウト設定にバグがある

これを仕様だと言い切られると困りますが、VIAにはバグと思われる部分があります。

それがマルチレイアウトの選択肢を作る場合です。例えばバックスペースを分割できる設定をON/OFFのスイッチで実装したとしましょう。

デフォルトでOFFの状態で、VIAでONに設定をしたとします。その後VIAを再起動するか、キーボードを再接続すると、設定が保存されていないものがあったりします。

ON/OFFの設定をしても再起動すると保存されないことが…

これが全てのボタンで起こればわかりやすいのですが、上の画像のような場合だと三つのうち上二つは設定が保存されず、一番下のボタンだけ設定が保存されます。何が原因かはわかりませんが、他のキーボードでも再現性があるので、何かしらバグなり、使えない文字や予約語みたいなものがあるのかもしれませんが、明文化されていないため不明です。これはプルダウンメニューで設定した場合でも起こります。

ちなみ、キーマップ自体は保存されているので、実用上の問題はありません。

私が気になった部分はこれくらいで、他の部分は解説サイトの通りで問題ありませんでした。サリチル酸様、素晴らしい記事をありがとうございます。

まとめ

VIA対応のファームフェアを作成し、使えるようにしました。おおむね解説サイトの通りでできますが、少々不明瞭な点があったので、その部分だけ残しておきました。

また、VIAに仕様かバグかわからない問題があることがわかりました。これは解決方法が見つかれば良いのですが、何かご存じの方がいればご一報ください。

以上です。お読みいただきありがとうございました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です