鼠标、手柄、力反馈与兼容接口

鼠标、手柄、力反馈与兼容接口

1. Mouse

鼠标通常报告:

  • EV_REL/REL_X/REL_Y
  • wheel/hwheel;
  • BTN_LEFT/RIGHT/MIDDLE/...

touchpad通常是 EV_ABS + MT,由 libinput转换为指针和手势。

2. Mousedev

mousedev.c 把 input事件转换为 PS/2兼容 byte stream:

1
2
/dev/input/mouseX
/dev/input/mice

这是 legacy接口。现代图形栈使用 evdev/libinput,避免丢失高分辨率和多点信息。

3. Joystick

手柄使用:

  • ABS_X/Y/RX/RY、triggers;
  • BTN_GAMEPAD系列;
  • hat axes;
  • EV_FF。

joydev.c 提供 /dev/input/jsN 旧 ABI,evdev保留更完整 event semantics。

4. 力反馈

ff-core.c

  • 分配 effect slots;
  • upload/erase;
  • ownership;
  • play/stop;
  • gain/autocenter;
  • cleanup on close。

设备通过 input_ff_create() 注册。

5. Memoryless FF

ff-memless.c 为只接受即时 motor level的设备模拟 effect时间和组合:

1
2
3
4
EV_FF play
-> timer/work computes magnitude
-> driver play_effect callback
-> set motors

driver callback可能睡眠时须选择正确异步语境。

6. HID边界

大多数 USB/Bluetooth gamepad在 drivers/hid 中解析 report并注册 input device;drivers/input/joystick 更多是非 HID、legacy或特定总线设备。

7. 校准

absolute axis需要正确:

  • min/max;
  • flat dead zone;
  • fuzz;
  • resolution;
  • center。

错误范围会造成漂移或触发器不满量程。用户态校准不能修复驱动持续报错。

8. Grab

游戏程序可能 grab event device。Grab影响整个 input_dev到其它 handlers的分发,桌面按键或 daemon可能收不到事件,应谨慎使用并保证异常退出释放。

9. RK3588

板载通常没有 gameport/PS2;USB/Bluetooth手柄取决于 HID/USB/BT配置。主配置禁用 SERIO和PS2 mouse符合这一硬件现实。

文章互动

阅读 --

留言

0 条留言

正在加载留言…