首页/新闻资讯/正文详情

Linux下struct input_event结构体详解

发布时间:2026/9/24 12:09:21 来源:云帆数科 栏目:资讯中心
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:09:21

基于OpenCV与MediaPipe的脸型识别发型推荐系统实战
基于OpenCV与MediaPipe的脸型识别发型推荐系统实战

/* 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:09:03

低压轨到轨运放设计:恒定跨导输入级与Miller补偿实战
低压轨到轨运放设计:恒定跨导输入级与Miller补偿实战

/* 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:08:57

DeepSeek Harness桌面端:智能体编排与多Agent协同实战
DeepSeek Harness桌面端:智能体编排与多Agent协同实战

1. 先聊聊这个"偷偷上线"的 Harness 桌面端最近圈子里都在传一件事:DeepSeek 生态里冒出了一个叫 Harness 的桌面端客户端,而且不是那种社区爱好者随便搓的小工具,是能正经编排智能体的工程化产品。我一开始以为是哪个开源项目套了… · 2026/9/24 21:35:52

Coder家族解析:从自托管开发环境到Qwen Coder本地部署
Coder家族解析:从自托管开发环境到Qwen Coder本地部署

最近不管在技术群还是社区,被问到最多的是这几个词:coder 怎么下载、Qwen Coder 在 Mac 上怎么部署、AI Coder 现在到底能不能干活。还有人拿着一款叫 Kh Coder 的软件来问我,这跟写代码有什么关系。正好我前两周在 Mac mini 上完整做了一轮“… · 2026/9/24 21:35:52

腾讯数字人联手大模型知识引擎:打造既像人又懂行的AI交互方案
腾讯数字人联手大模型知识引擎:打造既像人又懂行的AI交互方案

前阵子和一个做企业数字化转型的朋友吃饭,他提到一个挺有代表性的需求:公司准备上一套数字人来做展厅讲解和产品咨询,但试了一圈发现,普通的语音播报机器人太死板,纯用大模型接口又担心业务知识回答不准。其实他这个困… · 2026/9/24 21:35:52

让 AI 学会“读说明书”,Claude Code 的 AGENTS.md 实战拆解
让 AI 学会“读说明书”,Claude Code 的 AGENTS.md 实战拆解

让 AI 学会“读说明书”,Claude Code 的 AGENTS.md 实战拆解这几天 Claude Code 的更新频率快得吓人,一周之内连发九个版本,社区里讨论最热烈的话题不是新功能,反而是 AGENTS.md 这个看似不起眼的配置文件。说实话,我一… · 2026/9/24 21:35:52

软件架构的本质:对抗复杂度的系统工程
软件架构的本质:对抗复杂度的系统工程

干了快十年的软件架构设计和开发,被问得最多的一句话是:架构到底是什么?有人说架构是画框图,有人说是技术选型,也有人说是为了满足未来扩展性。我自己的回答一直很直接:软件架构的本质,就是一门… · 2026/9/24 21:35:52

Mac本地部署Qwen Coder实战:从Ollama安装到接入IDE全流程
Mac本地部署Qwen Coder实战:从Ollama安装到接入IDE全流程

最近很多同行都在问我同一个问题:AI coder到底怎么选、怎么落地到自己日常开发里?搜索“coder”这个词的时候,评论区又总会冒出一堆“咋下载”“怎么部署”的声音。说实话,这个搜索热度我一点都不意外——“coder”早就不只是“程… · 2026/9/24 21:35:46

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码