Kinesis Advantage 360を買った


買った背景

Kinesis Advantage360が発売を開始してから半年以上経過しているのに、入手困難な状況は継続中。通知を常時確認しながらようやく入手できたのは販売から半年経過したつい最近でした。

早速、キーアサインの変更をしてみるものの、当然というか、US配列のみで、日本語配列に拘るオレには使いづらい。どうにか日本語配列に出来無いか、その試行錯誤の記録を残しておきます。

結論から言うと、Kinesis Advantage の日本語配列とほぼ同じキーアサインが設定できました。

職業プログラマーであれば、「US配列にすべし」って言うんだろうけど、US配列のメリットは重々承知の上で、

  • 「:」の位置

  • 「@」の位置

  • Returnキーの大きさ

  • 会社のノートPCが日本語配列

から、気に入った製品の中で日本語配列のあるキーボードを使っています。会社で使っているHHKBも日本語配列です。

普段、慣れている配列から違う配列に変えた場合、タイプミスが増えてコーディングの時間やストレスが増加します。家では一時、初代Kinesis AdvantageのUS配列を使用していましたが、タイプミスに耐えかねてお蔵入りしました(まあ、日本語配列のKinesis Advantage2を買っていれば良かったのですが、あれは結構、後になってから出てきたので)。

有線か無線か

特に有線か無線かのこだわりは無かったのですが、「単純に無線の方が多機能そうだったから」360 Proにしました。これが、ドツボにはまる事になるとは・・・

キーボード配列のカスタマイズ

キー配列のカスタマイズは、github上でレイアウト変更を行い、github Actionでファームウェアをビルドしてダウンロード、更新を行うという方法。ローカルでもDockerを使った環境を作成出来ますが、ローカル環境を用意しなくてもファームウェアのビルドが出来るのは便利。
結局、ローカル環境で色々やりましたけど・・・

キー配列のカスタマイズ方法はKinesisのgithubで説明があります。簡単に言えば、設定用リポジトリをForkして、Web上のレイアウト画面でキーアサインを変更し、commitすれば、後はgithub Actionでビルド、ダウンロードリンクが表示されます。

US配列

最初に設定したレイアウトはこんな感じ。

ESCキーとCtrlキーの位置を移動した以外は、デフォルトのままとしました。

普段使用しているWindows11ではキーボード配列の設定を日本語にしているので、US配列のままだとキーアサインが異なるし、入力できないキーがあるしで使えないので、ULE4JISを使ってキーアサイン通りに入力できるようにしました。

日本語配列

日本語配列については、日本語配列kinesis advantage2のキー配列になるべく近づけた配列にしました。

ただし、現行のファームウェアは入力できないキーがあり、実用的では無いです。

現行のファームウェアでは上記キー配列のうち、US配列には無いINT1~INT5が入力できないため、日本語入力に特化した「変換」「無変換」は入力できなくても何とかなるものの、「¥ |」「\ _」が入力できないというのは致命的で、普通は諦めます。

しかし、オレは諦めが悪いのでw どうにかならないかと、ファームウェアの解析を行う事になりました。

日本語配列を使えるようにするあがきのため、2023年のGWはコード解析で終わってしまいました・・・

ファームウェアの解析

Kinesis Advantage360のファームウェアはZMKというQMKファームウェアの派生プロジェクトを使用しています。ZMKファームウェアはZephyrというリアルタイムOS上で動作するキーボード用のファームウェアで、MITライセンスです(説明のページでライセンスの事を強調していますが、QMKがライセンス上、特定のハードウェアにしか対応出来無いコードが含まれている部分をクリアにしたかったようです)。
このZMKをそのまま使用する訳では無く、一部、修正を行ったバージョンを使用しているようです。

Kinesis Advantage360のファームウェアはローカル環境でのビルドに対応するため、githubのページではDockerfileがあり、クローンしたリポジトリ上でDockerコンテナ内部に環境を構築します。通常のビルドではgithub Actionでビルドしたファームウェアと同じものが生成されます。

INT1からINT5までが入力できない理由

ローカルのDockerコンテナ内にあるZMKのコードに、USB HIDのusage IDが定義されている部分を探します。そして、usage IDの範囲がどのキーからどのキーまでかを調べます。
Usage IDとは、各キーに割り振られた固有のIDであり、USBインターフェースを経由し、OS内部でキーコードであるScan Codeに変換されます。

現行のZMKのコードでは、Usage IDが0x00~0x67までで、INT5(0x8B)は当然認識しないようになっていました。 該当箇所はzmk/app/include/zmk/hid.h

#define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL

この部分をINT5まで認識出来るように書き換えればいけるんじゃ無いかと。

#define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYBOARD_INTERNATIONAL5

でも、そう単純では無かったようです。

原因は、Bluetoothレシーバー?

変更したファームウェアを適用して動作確認をしてみたら、キー入力が一切入らない。原因を調べるために色々と足掻きましたよ・・・

KMK Firmwareの問題についての記事を参考にしたり、

Bluetooth テスト プラットフォームを使ってWiresharkでBluetoothパケットの解析をしたり、

けど、決定打は無く、悶々としている中、「Macだとどうなのか?」と閃き、手持ちのM1 Macbook Airで接続してみると、認識している・・・
え?と思ってノートPC(Windows)で接続をしてみると・・・認識している。
と、なると、メインPCのBluetoothレシーバーが悪いって事になる。

Bluetoothレシーバーを取り替えたら、メインPCでもINT1~INT5まで入力出来ました。どういう事?
一応、Bluetoothの仕様では、送信するデータの中身については検知しない、バージョンによってデータの容量が異なる、という事なので、受信した他データをOS側に渡す部分の問題、Bluetoothレシーバーのファームウェアの問題だと判断しました。これ以上、付き合っても明確な原因が出てきそうにも無いし、GWが潰れてしまったので、追求はここまで。

問題があるBluetooth接続

上記のようなBluetoothレシーバーの問題がありましたが、一応、Kinesis Advantage360を日本語配列kinesis advantage2のキー配列と同じ様に入力出来るようになり、もういいか、と思ったのですが、接続中にPCがスリープに入ると問題が出たり、時々認識しなくなるといった問題があり、必ずしも、Bluetoothレシーバーのみの問題とも言い切れない状況です。
何れ解決されるのでしょうが、ファームウェアの完成度がいまいちなのはちょっとなぁと思っています。

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