2019/01/26

マウス用センサーのレジスタを直接触れるようにする


はじめに

年末年始にかけてPMW3360センサーをG300rに移植しました。G300rは形状は素晴らしいのですが、センサは貧弱なので、近代化改修すれば最強なのでは?というモチベーションです。現状ではFPSをプレイする時間と気力がないんですけどね。
ファームウェアは有名どころだとqsxcvさんなどが公開されていますが、使っているボードの種類がちょっと違うという点もあって自前で書き始めています。とりあえずマウスとしては動きますが、データパスの16bit化や、ホイール周りが完了しておらず、まだまだ未完成です。
せっかく自前で書くのならもう少し面白い機能を付けてみようってことで、レジスタの値をUART経由で読み書きできる機能を付けました。


これができると何が嬉しいか?

ファームウェアにレジスタの値を固定値として入れ込んでしまうと、レジスタの値を変更したい場合、ファームウェアを焼き直さない限り変更ができません。
普通のゲーミングマウスの場合、PCに専用のソフトウェア(Logicool ゲームソフトウェアなど)をインストールすれば、GUI経由で一部のパラメータ(DPIやポーリングレート、LED色など)が変更できます。しかし、専用のソフトウェアの実装自体が(私の能力がないのもあって)大変ですし、様々なパラメータの変更を全てGUI経由で変更できるようにするのはとてもめんどくさいです。
そこで、原始的な実装として、UART経由でレジスタの値を直接読み書きできるようにしました。レジスタを直接編集できるようになるため、レジスタの値を変更したい時にMCUへファームウェアの焼き直しが不要になり、色々な設定をすぐに適用し、試すことができます。また、任意のレジスタの情報を好きなタイミングで読み取ることができるのでデバッグが捗るかもしれません。

デモ

下記の動画がデモです。DPIを設定できるレジスタに色々な値を書き込んで、DPIが変更されていることを確認しています。


所感

組み込み用のファームウェアの開発というより、シェルや、ターミナルエミュレータの開発に近いです。そもそもエコーバックすらないので、キーボードで入力した文字列を画面上に描画したり、バックスペースが入力されたらカーソル位置の文字を削除するみたいな動作も書く必要があります。おかげで、ちょっとだけASCIIコードに詳しくなりました。
色々なコマンドと複数なパラメータをいい感じにハンドリングする方法も考えないといけないですね。
とりあえずFrameCaptureくらいはできるようにしたいです。

0 件のコメント:

コメントを投稿