自作キーボードで主流の搭載ソフトウェアは、オープンソースのQMK Firmwareで、
主流のマイクロコントローラーはProMicro(ATMega32u4)です。
そして、(特に日本では)自作キーボードで左右分割のキーボードが人気があります。
また、マイナーな存在ですが、ジョイスティックを搭載したキーボードも存在します。
以前、質問を受けたテーマ「左右分割の自作キーボードに2本ジョィステックは搭載できるか」
についての、2回目の記事です。
■以前の記事
「左手デバイス(アナログスティック) 【自作】 その15 スティック2本は可能?」 この記事では、左右分割はおいておいて、一体型の自作キーボードまたは片手だけの自作キーボードにジョイステックを2本搭載する方法を説明したものです。
■今回のテーマのポイントは、「左右分割の自作キーボード」の場合に搭載可能かという点です。
質問者の想定は 左側に1本、右側に1本、というものでしょう。
検討した結果は、搭載は可能、です。
実際の実装まではしていませんが、調査した結果の概要を以下にメモとして記載しておきます。
■搭載の前提となるハードウェア
PC ==(USB)==[(L)左手側キーボード(ProMicro)]---(シリアル又はI2C)---[(R)右手キーボード(ProMicro)]
・パターン1:(L)にジョイスティック2本 →これは以前の記事で説明済み
・パターン2:(L)に1本、(R)に1本 →今回の範囲
・パターン3:(R)に2本 →今回の範囲
■ソフトウェア実装のポイント
2021年末にQMK Firmwareに左右通信ライブラリが実装されています。
これに伴い、マウスなどの左右分割搭載のためのライブラリが実装されています。
これは、デバイスの情報(座標やボタン状態など)の構造体を定義しておき、
左右でこの情報の内容を共有することで、デバイスを左右に振り分けて実装しても、
情報を1つにまとめて処理することができるようになっています。
ということで、ジョイスティックについても、このマウスの実装を真似して、
実装することで容易に実現できます。
参考にするべきソースはおもに下記になります。
~\qmk_firmware\quantum\split_common
なおマウスの共有用の情報 report_mouse_tは以下に定義されている。
同じ中に、すでにjoystick用の情報joystick_report_tも定義済み。
~\qmk_firmware\tmk_core\protocol\report.h
実装の注意点は
・キーボード側差分ソースで実装するのが結構面倒。ライブラリ側に実装するのが楽。
実装できたら、標準実装に寄贈して取り入れられれば、以降のメンテナンスが楽になる。
・既存のジョイステックライブラリがあり、これとのレイヤー分けを注意して実装すること。
・マウスなど既存のポインティングデバイスの実装との干渉に注意して実装すること。
・情報をマスター側に集めて、HIDイベントを生成する処理を実装すること
・パターン2だけに限定すると実装の汎用性が低いので、パターン1・2・3を定義で
選べるように実装することが望ましい。
■その他の注意点
・上記に沿って実装した場合、応答性能が懸念される。
実装後のチューニングは必須と思われる。
なぜなら、現状のjoystickライブラリでも応答性能に難があり、
関数の直コールを使って高速化している人が多いため。
これはコントローラーの実行速度性能のためではなく、
実装でのイベント生成の方式に依る点が多いと推定される。
以上、実装に挑戦される方の検討を祈ります