Wexflow性能优化技巧:如何提升大规模工作流执行效率
2026/7/5 17:28:32
tslib (Touch Screen Library)是一个运行在用户空间(User Space)的开源中间件库。
在嵌入式 Linux 中,触摸屏驱动(Kernel Driver)直接报上来的数据往往是“不完美”的,特别是对于电阻屏(虽然电容屏好很多,但有时也需要):
tslib 就是一个“翻译官”和“过滤器”。它位于内核驱动和应用程序(如 Qt)之间。
ts_calibrate:屏幕校准程序(第一次开机通常都要运行它)。ts_test:测试屏幕画线、点击是否准确。/etc/ts.conf(配置各种插件)。struct input_event这是 Linux 输入子系统的“通用数据包”。无论你是鼠标、键盘、游戏手柄还是触摸屏,内核发给应用程序的数据格式永远是这个结构体。
它定义在头文件<linux/input.h>中:
structinput_event{structtimevaltime;// 事件发生的时间戳__u16 type;// 事件的类型 (你是哪一类事件?)__u16 code;// 事件的代码 (具体是哪个键/轴?)__s32 value;// 事件的值 (按下了还是松开了?坐标是多少?)};| 字段 | 含义 | 常见取值示例 |
|---|---|---|
| time | 时间戳 | 包含tv_sec(秒) 和tv_usec(微秒)。用来判断连击或滑动速度。 |
| type | 大分类 | EV_KEY(0x01): 按键事件(键盘/鼠标键/触摸点击)EV_REL(0x02): 相对位移(鼠标移动)EV_ABS(0x03): 绝对位移(触摸屏/摇杆)EV_SYN(0x00): 同步信号(用来分割每一组完整的事件) |
| code | 具体对象 | 如果是EV_KEY:KEY_A(键盘A),BTN_TOUCH(触摸屏按下)如果是 EV_ABS:ABS_X(X轴坐标),ABS_Y(Y轴坐标),ABS_PRESSURE(压力) |
| value | 具体数值 | 如果是KEY:1(按下),0(松开),2(长按重复)如果是 ABS: 具体的坐标数值(如 512) |
这通常是一组连续的事件包:
EV_ABS,ABS_X,100(X轴在100)
EV_ABS,ABS_Y,200(Y轴在200)
EV_KEY,BTN_TOUCH,1(手指按下了)
EV_SYN,SYN_REPORT,0(同步,以上是一组,即手指在屏幕坐标(100,200)按下了,处理吧!)
… (手指抬起) …
EV_KEY,BTN_TOUCH,0(手指松开了)
EV_SYN,SYN_REPORT,0(同步)
Input Handler 是内核中负责将驱动层的数据分发给用户空间的模块。不同的 Handler 会创建不同的设备节点,提供不同的数据格式。
以下是常见的 Handler:
/dev/input/event0,/dev/input/event1, …struct input_event发送给用户。tslib、Qt5、Android 底层都读取这个接口。hexdump /dev/input/event0看到的就是它的数据。/dev/input/mouse0,/dev/input/miceinput_event,而是类似dx, dy的鼠标协议数据。嵌入式开发中通常不直接用它读取数据。/dev/input/js0evdev。/dev文件(直接作用于 TTY)。evdev(/dev/input/event0) -->tslib(校准/去噪) -->Qt/APP(最终使用)(这是现在的标准路径)mousedev(/dev/input/mouse0) --> 旧式程序kbd--> 终端控制台 (TTY)