evdev - ジョイスティック校正テスト

evdev - ジョイスティック校正テスト

ボタンがなく、1つの軸(Z)しかないジョイスティック(カスタムハードウェア)を校正したいと思います。私はevtestを使用して、移動範囲、つまり最小/最大値とほぼ範囲の中央にある中心(ジョイスティックが配置されている点)を読みます。 [min, center, max] = [ 2028, 3228, 4225] 。

その後、evdev-joystick --eを使用してテスト目的でこれらの最小/最大値とfuzz = 100を適用しました(不感帯値を適用する方法がわかりません。私の場合、私は3228でした。 2つの値で構成する必要があります。

evtestを再実行すると、evdev-joystickを使用して設定した新しい値がサマリーに表示されますが、ぼやけた値だけが効果があるようです。移動範囲内で最小/最大値を設定すると、その新しい範囲外のイベントを取得できます。さまざまな不感帯値(0、3228、ほぼ最大値...)を試しましたが、何も機能しませんでした。ある程度範囲や中心補正があると予想していましたが、evtestが最初に見せてもキャリブレーションを無視しているようです(ぼけ以外にもぼけ範囲内で連続値が出ません)。

evtestは最小/最大/不感帯校正を無視して生の値を提供する必要がありますか?校正をテストするには他のツールを使用する必要がありますか?ただし、コマンドラインツールのみを使用できます。

また、以前のジョイスティックAPIを使用するためにstestとjscalを試してみましたが、jscalはmin/max/center/blur値が自動的に保存され、キャリブレーション stestが可能なインタラクティブキャリブレーションを提供するため、実際には新しいジョイスティックAPIよりもはるかに優れています.次のコマンドを使用してテストした結果、元の範囲は[-32767、0、32767]に変更されました。残念ながら、以前のJoystick APIが近いうちに完全に削除されるのを恐れているため、evdev APIのみを使用できます。

編集する:ツールのコードを調べて、次の説明がある input.h uapi の input_absinfo 構造を使用します。

   * Note that input core does not clamp reported values to the
   * [minimum, maximum] limits, such task is left to userspace.

したがって、evtestツールは固定されていないため、範囲の変更はありません。ただし、このファイルの平面定義はまだ明確ではありません。

   * @flat: values that are within this value will be discarded by
   *  joydev interface and reported as 0 instead.

この値の中に値がありますか? ? Joydevインターフェイス?これは以前のAPIの一部ではありませんか?

編集2:以前のstestツールは、補正係数を計算し、それを固定するJoydevデバイスドライバに依存しているため、補正値を表示しているようです。 EvtestはJoydevを使用しないため、「生」の値は使用されません。では、キャリブレーション後はどうすればよいですか? SDL2ライブラリを使ったゲームを見たことがあります。 evdev-joystickで校正した後、Joydevが提供する機能(デッドバンド、クランプ)をこのライブラリから入手できますか?また、SDLにはいくつかのテストツールがありますが、それらのどれも私の組み込みシステムで利用可能なコマンドラインツールではないようです。

ベストアンサー1

ちなみに、私はlibevdev(私のような単純なアプリケーションではSDL2よりもはるかに軽量です)とJoydevが既存のAPIと同じようにキャリブレーションを行うsystemdサービスを使用して独自の対話型キャリブレーションツールを作成しました。

おすすめ記事