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 を使用することをお勧めしますが、これは教育目的のみです。そこでも、同じ質問があります。