鼠标、手柄、力反馈与兼容接口
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 | /dev/input/mouseX |
这是 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 | EV_FF play |
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符合这一硬件现实。
正在加载留言…