QMK (5) – JOYSTICKサポート

Date: 2022/04/02 (initial publish), 2022/07/30 (last update)

Source: jp/note-00048.md

Previous Post Top Next Post

TOC

状況

AVRで作ったQMKキーボードでは、タップとホールドを上手く利用した使いやすいキーマップができました。

ARMで作ったQMKキーボードにこれを移植するとともに、追加ハードのアナログJOYSTICKをマウスの機能を提供するデバイスとして有効利用しました。

JOYSTICKデバイスの追加とMCUの機能設定

「JOYSTICK」という言葉に引かれて、よく分からないままマニュアルの「Hardware Features」の「Joystick」をフォローして、ゲーム用のコントローラーとしての「JOYSTICK」デバイスを導入しました。

ここで、ARM系のハードの初期化のカスタマイズ法を学びました。ARMではOS立ち上げコードがチップ機能の初期化をしているようです。マクロを定義することで、コンパイル時に設定が導入されます。ある意味AVRのfuseの感じです。

ChibiOSは、デフォルトのhalconf.hmcuconf.hを提供しているので、デフォルトでは無効化されたADCを使う等の場合には、設定をオーバーライド変更する必要がありました。 最初に、platforms/chibios/boards/keyboard-config-templates/内のファイルを、プロジェクトフォルダー内にコピーしたファイルをベースに、オーバーライド変更のみを設定します。 デフォルト値は#include_next "... .h"で読み込みます。(この辺の仕組みがが分かる前には、コンパイラーエラーに苦しみました。)

ゲーム用のコントローラーとしての「JOYSTICK」デバイスの動作検証は、Gamepad Tester でしました。この環境での安定動作には、config.hに以下の追加が必要でした。(参考情報源)

#define JOYSTICK_AXES_RESOLUTION 8
#define USB_POLLING_INTERVAL_MS 4

ゲーム用のコントローラーとしてのJOYSTICKデバイスを提供するソース

ゲーム用のコントローラーにマウスの機能を提供する設定は、OSの環境設定でできなくはないです。ただこれでは本末転倒です。 ストレートにマウスの機能自体を直接提供すること目的なので、これはここまでにします。

JOYSTICKのハードによるマウス機能の提供

JOYSTICKのハードによるマウス機能の提供には、マニュアルの「Hardware Features」の「Pointing Device」をフォローします。

Mouse keyよりは快適に動いていますが、ThnkpadのTrackpointが得意でない私には決して使いやすいとは言えない状態でした。

本物のMouseは使いやすい。

反省点

キー入力できない原因を調べたところ、UEW線の被覆熱削除不足による不良が2点、ダイオードの極性方向間違い1点が見つかった。

気づいたこと

結局joystickやトラックボールはマウスより使い勝手が良くない。

QMKでは意外と多くのハードを利用してマウス機能の提供ができるようです。また、マウスの中身はほぼ似たデバイスのようです。 キーボードだけでなく、ポテンシオメーター、ロータリーエンコーダー、オプティカルセンサー等で作るポインティングデバイスででも遊べそうです。色んな事をみんなしていますね。

ただMCU内臓でI2C等で出力が出てないと、KBへの組み込みには向かない気がする。

まあ、トラックボールはあってもいいが一体化する必然性が低い。古いPS2のトラックボール のUSB化や、光学素子の高解像品への載せ換えは面白いかもしれない。

ポインティングデバイスのソース

既存の組み込み製品・ジャンクから外すのも一案:

部品ソース例と価格:

Previous Post Top Next Post