Linux下struct input_event结构体详解
4.4 触控屏应用接口4.4.1 输入子系统简介连接操作系统的输入设备可不止一种也许是一个标准 PS/2 键盘也许是一个 USB鼠标或者是一块触摸屏甚至是一个游戏机摇杆 Linux 在处理这些纷繁各异的输入设备的时候采用的办法还是找中间层来屏蔽各种细节请看下图在 Linux 的内核中对输入设备的使用实际上运用了 3 大块来管理他们分别是所谓的输入设备驱动层、输入子系统核心层以及事件触发层。他们各自的工作分别是1输入设备驱动层每一种设备都有其特定的 驱动程序 他们被妥当地装载到操作系统的设备模型框架内封装硬件所提供的功能向上提供规定的接口。2核心层此处将收集由设备驱动层发来的数据整合之后触发某一事件。3事件触发层这一层是我们需要关注的我们可以通过在用户空间读取相应设备的节点文件来获知某设备的某一个动作。在最靠近应用程序的事件触发层上内核所获知的各类输入事件比如键盘被按了一下触摸屏被滑了一下等都将被统一封装在一个叫做 input_event 的结构体当中这个结构体定义如下(/usr/inlucde/linux/input.h) vincentubuntu:/usr/inlucde/linux/$ cat input.h -n 1 #ifndef _INPUT_H 2 #define _INPUT_H 3…… 20 21 struct input_event { 22 struct timeval time; 23 __u16 type; 24 __u16 code; 25 __s32 value; 26 }; 27……该结构体有 4 个成员其含义分别如下一、time输入事件发生的时间戳精确到微秒。时间结构体定义如下struct timeval { __time_t tv_sec; // 秒 long int tv_usec; // 微秒1 微秒 10-3毫秒 10-6秒 };二、type输入事件的类型。比如EV_SYN事件间的分割标志有些事件可能会在时间和空间上产生延续比如持续按住一个按键。为了更好地管理这些持续的事件EV_SYN 用以将他们分割成一个个的小的数据包。EV_KEY用以描述键盘按键或者类似键盘的设备的状态变化。EV_REL相对位移比如鼠标的移动滚轮的转动等。EV_ABS绝对位移比如触摸屏上的坐标值。EV_MSC不能匹配现有的类型这相当于当前暂不识别的事件。比如在 Linux系统中按下键盘中针对 Windows 系统的“一键杀毒”按键将会产生该事件。EV_LED用于控制设备上的 LED 灯的开关比如按下键盘的大写锁定键会同时产生 ”EV_KEY” 和 ”EV_LED” 两个事件。三、code这个“事件的代码”用于对事件的类型作进一步的描述。比如当发生 EV_KEY事件时则可能是键盘被按下了那么究竟是哪个按键被按下了呢此时查看 code 就知道了。当发生 EV_REL 事件时也许是鼠标动了也许是滚轮动了。这时可以用 code 的值来加以区分。四、value当 code 都不足以区分事件的性质的时候可以用 value 来确认。比如由EV_REL 和 REL_WHEEL 确认发生了鼠标滚轮的动作但是究竟是向上滚还是向下滚呢再比如由由 EV_KEY 和 KEY_F 确认了发生键盘上 F 键的动作但究竟是按下呢还是弹起呢这时都可以用 value 值来进一步判断。以下代码展示了如何从触摸屏设备节点/dev/event0 中读取数据并显示当前触摸屏的实时原始数据vincentubuntu:~/ch04/4.5$ cat ts_raw.c - 1 #include stdio.h 2 #include stdlib.h 3 #include stdbool.h 4 #include unistd.h 5 #include string.h 6 #include strings.h 7 #include errno.h 8 9 #include sys/stat.h 10 #include sys/types.h 11 #include fcntl.h 12 #include Linux/input.h 13 14 int main(int argc, char **argv) 15 { 16 int ts open(/dev/event0, O_RDONLY); 17 18 struct input_event buf; 19 bzero(buf, sizeof(buf)); 20 21 while(1) 22 { 23 read(ts, buf, sizeof(buf)); 24 25 switch(buf.type) 26 { 27 case EV_SYN: 28 printf(--------------------- SYN ------------------\n); 29 break; 30 case EV_ABS: 31 printf(time: %u.%u\ttype: EV_ABS\t, 32 buf.time.tv_sec, buf.time.tv_usec); 33 switch(buf.code) 34 { 35 case ABS_X: 36 printf(X:%u\n, buf.value); 37 break; 38 case ABS_Y: 39 printf(Y:%u\n, buf.value); 40 break; 41 case ABS_PRESSURE: 42 printf(pressure:%u\n, buf.value); 43 } 44 } 45 } 46 return 0; 47 }c运行注意以上代码打印出来的是直接从触摸屏读取的原始数据raw data没有经过任何校正也没有任何滤波、去抖、消噪因此这些数据是不能直接给应用层程序使用的但是不用担心这些繁琐复杂的工作已经有了很成熟的库支持了但是有一个TSLIB 库就是这样一个开源的、能为触摸屏获得的原始数据提供诸如滤波、去抖、消噪和校正功能的库TSLIB 作为触摸屏驱动的适配层为上层的应用提供了一个统一的编程接口将使得我们编写基于触摸屏的应用更加简便。Linux下struct input_event结构体详解_怎么使用粤嵌开发板触摸屏幕-CSDN博客

相关新闻

AI服务器电源效率实测:标称97%为何只有94%?

AI服务器电源效率实测:标称97%为何只有94%?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 12:10:07 阅读更多 →
级联PLL下OCC时钟控制“饿死”问题:DFTC配置与排查实战

级联PLL下OCC时钟控制“饿死”问题:DFTC配置与排查实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 17:54:41 阅读更多 →
EMC检测报告真伪核验:采购工程师的12步实战指南

EMC检测报告真伪核验:采购工程师的12步实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 17:55:03 阅读更多 →

最新新闻

Multi-Modal Time Series Prediction via Mixture of Modulated Experts——通过调制专家混合实现多模态时间序列预测

Multi-Modal Time Series Prediction via Mixture of Modulated Experts——通过调制专家混合实现多模态时间序列预测

《Multi-Modal Time Series Prediction via Mixture of Modulated Experts》提出了一种名为 MoME(Mixture of Modulated Experts,调制专家混合) 的新框架,用于多模态时间序列预测(MMTSP)。其核心思想是&…

2026/9/25 18:01:01 阅读更多 →
猫抓 cat-catch 浏览器媒体资源嗅探完整指南:网页视频预览与 M3U8 合并下载

猫抓 cat-catch 浏览器媒体资源嗅探完整指南:网页视频预览与 M3U8 合并下载

猫抓 cat-catch 浏览器媒体资源嗅探完整指南:网页视频预览与 M3U8 合并下载 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓&#…

2026/9/25 18:01:01 阅读更多 →
警惕!低代码平台正在悄悄变成“新烟囱”——3个伪集成信号+避坑指南(TaoToken 统一 API 通道视角)

警惕!低代码平台正在悄悄变成“新烟囱”——3个伪集成信号+避坑指南(TaoToken 统一 API 通道视角)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 18:01:01 阅读更多 →
AI Agent 学习路线图:新手小白必收藏,用 TaoToken 统一 Key 跑通大模型

AI Agent 学习路线图:新手小白必收藏,用 TaoToken 统一 Key 跑通大模型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 18:01:01 阅读更多 →
【项目编号:project46925】展会客户不再靠 Excel: 展会客户信息管理系统从报名到客户沉淀的完整方案把展会、展商、展品、报名、评价和客户资料放进同一条运营链,适合会展与客户管理类项目

【项目编号:project46925】展会客户不再靠 Excel: 展会客户信息管理系统从报名到客户沉淀的完整方案把展会、展商、展品、报名、评价和客户资料放进同一条运营链,适合会展与客户管理类项目

EXPO CUSTOMER JOURNEY展会客户不再靠 Excel:Spring Boot 展会客户信息管理系统从报名到客户沉淀的完整方案把展会、展商、展品、报名、评价和客户资料放进同一条运营链,适合会展与客户管理类项目。#Spring Boot #展会管理 #客户信息 #展商管理 …

2026/9/25 18:01:01 阅读更多 →
Robocup仿真救援代码实战:多智能体协作与参数调优指南

Robocup仿真救援代码实战:多智能体协作与参数调优指南

简介:这份Robocup仿真救援代码面向参加Robocup Rescue仿真竞赛的开发者与AI、机器人方向的学习者,提供一套可自主决策、搜索、导航与危险评估的救援软件系统实现,用于在虚拟灾害场景中训练和验证算法,无需真实机器人硬件即可完成测…

2026/9/25 18:00:01 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →