1

uinput エミュレーションをいじる目的で、Linux の evdev API を掘り下げ始めています。ジョイスティックとタッチ パッドの間には、ジョイパッド ボタンの押下とマウス クリックを区別するための異なるボタン/キー イベント コードがあることに気付きました。ただし、両方のデバイスに ABS_X 軸と ABS_Y 軸のイベント コードがあります。

joystick dump:
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value      128
#       Min          0
#       Max        255
#       Fuzz         0
#       Flat        15
#       Resolution   0
#     Event code 1 (ABS_Y)
#       Value      103
#       Min          0
#       Max        255
#       Fuzz         0
#       Flat        15
#       Resolution   0

touchpad dump:
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value     3909
#       Min       1270
#       Max       5670
#       Fuzz         0
#       Flat         0
#       Resolution  44
#     Event code 1 (ABS_Y)
#       Value     3835
#       Min       1240
#       Max       4746
#       Fuzz         0
#       Flat         0
#       Resolution  66

では、x11 は、画面上のカーソルを移動する目的で「/dev/input/eventX」ノードをジョイスティックとして扱うかマウスとして扱うかをどのように判断するのでしょうか? デバイスが x11 によってロードされるかどうかを設定するために使用できる ioctl はありますか? これを示すためにドライバーが行う必要がある他のことはありますか?

いくつかのバグ レポートを調べたところ、接続時にジョイパッドがマウスを動かしていた古いリリースがあったことがわかりましたが、x11 との区別を示すために変更された内容を示すパッチは見つかりませんでした。

誰かがそれを言う前に、実際には uinput への直接呼び出しよりも libevdev を使用することをお勧めしますが、これは教育目的のみです。そこでも、同じ質問があります。

4

1 に答える 1