linux下的输入设备编程

Linux系统中输入设备的应用编程实现 先来了解一下什么是输入设备(称为input设备),常见的输入设备有鼠标、键盘、触摸屏、遥控器、画图板等,用户通过输入设备与系统进行交互。由上面可知,输入设备种类非常多,那么Linux系统如何管理呢?Linux系统为了统一管理这些输入设备,实现了一套能够兼容所有输入设备的框架,那么这个框架就是input子系统。驱动开发人员基于input子系统开发输入设备的驱动程序,input子系统可以屏蔽硬件的差异,向应用层提供一套统一的接口。 阅读详情

输入设备包括: 鼠标,键盘,触摸屏,手柄等。
在linux系统里,如果设备已经驱动好的话(注意手柄在centos7里默认没有支持),可以查看:

cat /proc/bus/input/devices:
输出的信息:

    I: Bus=0019 Vendor=0000 Product=0001 Version=0000
    N: Name="Power Button"
    P: Phys=PNP0C0C/button/input0
    S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input0
    U: Uniq=
    H: Handlers=kbd event0    //表示设设备对应的驱动产生的设备文件为 "/dev/input/event0"
    B: PROP=0
    B: EV=3                   //表示支持的事件类型
    B: KEY=10000000000000     //表示所支持的按键


    I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
    N: Name="AT Translated Set 2 keyboard"
    P: Phys=isa0060/serio0/input0
    S: Sysfs=/devices/platform/i8042/serio0/input/input3
    U: Uniq=
    H: Handlers=sysrq kbd event3 
    B: PROP=0
    B: EV=120013
    B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
    B: MSC=10
    B: LED=7


    I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
    N: Name="SynPS/2 Synaptics TouchPad"
    P: Phys=isa0060/serio2/input0
    S: Sysfs=/devices/platform/i8042/serio2/input/input5
    U: Uniq=
    H: Handlers=mouse0 event5 
    B: PROP=9
    B: EV=b
    B: KEY=6420 30000 0 0 0 0
    B: ABS=260800011000003

由此可以看出,我pc上的键盘对应的设备文件为"/dev/input/event3",  触摸板对应的设备文件为"/dev/input/event5"
当我们要编程获取对应的设备数据,操作相应的设备文件即可。
可通过linux内核源码"Documentation/input/input.txt"得知,应用程序从输入设备驱动里获取到的数据是以结构体struct input_event为单位的.

struct input_event {
    struct timeval time;  //用于计算数据提交的间隔时间
    unsigned short type;  
    unsigned short code;
    unsigned int value;
};

   当type的值为EV_KEY时,表示得到按键事件, 这时code的值为键码, value的值表示是键码对应的键是按下(1)或松手(0)
   当type的值为EV_ABS时,表示得到绝对坐标事件, 这时code的值表示此次是关于x或y坐标发生变动, value的值表示坐标值
   当type的值为EV_REL时,表示得到相对坐标事件, 这时code的值表示此次是关于x或y坐标发生变动, value的正负值表示移动的方向及幅度
   当type的值为EV_SYN时,表示数据更新完毕. code/value的值为0

 注意一个输入设备可能会有多种事件, 如一个触摸屏有绝对坐标(EV_ABS), 还有触摸键事件(EV_KEY), 数据更新事件(EV_SYN)

测试代码:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/input.h>


int main(int argc, char *argv[])
{
    int fd, ret;

    if (argc < 2)
    {
        printf("usage: %s  /dev/input/event* \n", argv[0]);
        return 0;
    }

    fd = open(argv[1], O_RDONLY);
    if (fd < 0)
        return 1;

    struct input_event evt;
    while (1)
    {
        ret = read(fd, &evt, sizeof(evt));
        switch (evt.type)
        {       
        case EV_KEY:
            printf("key: %d  %s\n", evt.code, evt.value?"pressed":"released");
            break;
        case EV_ABS:
            if (evt.code == ABS_X)
                printf("touch: x = %d\n", evt.value);
            if (evt.code == ABS_Y)
                printf("touch: y = %d\n", evt.value);
            break;
        case EV_REL:
            if (evt.code == REL_X)
                printf("rel: x = %d\n", evt.value);
            if (evt.code == REL_Y)
                printf("rel: y = %d\n", evt.value);
            break;  
        case EV_SYN:
            printf("sync\n");
            break;
        default:
            printf("%d, %d, %d\n", evt.type, evt.code, evt.value);
        }

    }

    close(fd);
    return 0;
}

另: 在SDL, Qt等图形库里已经实现读取设备文件,处理里面的事件,不需要我们自己处理输入设备事件。

输入设备应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板 输入设备编程涉及用户与系统交互的硬件设备,如鼠标、键盘和触摸屏。Linux系统通过input子系统管理这些设备,提供统一框架和接口,屏蔽硬件差异。设备注册成功后,会在/dev/input目录生成eventX节点,应用程序通过读取这些节点获取设备数据。读取流程包括打开设备文件、读取数据、解析数据,并在无数据时进入休眠状态。数据以struct input_event结构体形式提供,包含时间、类型、事件和值。 按键事件的处理包括识别按下、松开和长按状态。触摸屏设备上报绝对位移事件,支持单点和多点触摸。 阅读详情

相关推荐

输入设备驱动的简单案例测试代码

输入设备驱动的简单案例测试代码,也可以作为学习Linux变成的小例子。

openwrt中使用多线程检测按键的长短按事件

在Linux/openwrt系统中可以通过ioctrl的方式读取设备节点/dev/input/eventX,并且轮询读取input_event信息便可以检测到按键的触发情况。在物联网产品中经常需要检测按键的长按和短按,并由此触发相应事件。再结合多线程延时计数消抖来区分长短按事件。

weixin_44470384的博客 464

使用单片机和电流互感器对非正弦周期电流有效值测定

使用单片机和电流互感器,利用一种高速采样的方法来进行有效值测定

月光绿叶滴水音乐 3944

Input子系统

input子系统

qq_52479948的博客 965

技术美术个人笔记(十三)——Houdini金属弯曲模拟

最近接收到使用Houdini自动解算破损/砸坏/扭曲汽车的需求,以此文记录制作金属弯曲自动解算工具时使用的部分节点解析;

小谁的博客 2148

R语言孟德尔随机化环境搭建:手把手教你搞定gwasvcf、gwasglue等包的安装报错(附本地安装包)

本文详细介绍了R语言中孟德尔随机化环境搭建的全流程,重点解决gwasvcf、gwasglue等包的安装报错问题。从依赖关系解析到GitHub访问配置,再到离线安装方案,手把手教你搭建完整的分析环境,特别适合生物信息学新手快速上手。

weixin_29093017的博客 215

linux标准按键驱动,Linux系统按键驱动

Linux系统下对于按键设备不仅可以进行读操作,还可以进行写操作。对键盘、鼠标等设备进行写操作可以实现模拟按键的功能。另外,想知道/dev/input/eventX分别是哪些设备可以通过执行下面的命令进行查看,如下所示:yuhaiping@neolix:~$ cat /proc/bus/input/devicesI: Bus=0019 Vendor=0000 Product=0001 Versio...

weixin_31156677的博客 429

ANSYS WB 网格划分详解与技巧

本文详细介绍了网格操作中的关键设置与功能选项。主要内容包括:1)网格显示风格与物理偏好设置;2)单元阶次选择对精度的影响;3)单元尺寸控制方法;4)尺寸调整功能,重点讲解了自适应尺寸调整、增长率控制和捕获曲率等选项;5)网格质量评估标准;6)四种主要划分方法(四面体、六面体主导、扫掠、多区域)的特点与适用场景;7)三种尺寸调整方式(直接调整、边缘尺寸调整、影响范围调整)的具体应用。文章强调在实际建模中需要根据模型特点合理选择网格参数,平衡计算精度与效率。

2403_87939837的博客 1694

内核驱动 (二)Linux按键驱动分析

一、按键驱动 1、对按键驱动添加设备信息 linux-stable-3.10.46对按键的驱动定义在gpio_keys.c (drivers\input\keyboard)文件中,在led驱动分析中,我们知道,只有平台设备和平台驱动两者的name名字一致才可以注册成功一个驱动。这里,内核代码中没有对按键平台信息的定义,因此我们需要给他补充完整。 首先将按键驱动编译到内核: Devi...

跬步千里,窥叶知秋 4786

Matlab 普通kriging(克里金)插值

Matlab 普通kriging(克里金)插值

dayuhaitang1的博客 4570

基于NRF52833芯片的DW3000 SPI驱动接口代码实现

详细介绍基于NRF52833、nRF52820 、nRF52832 nRF52840 芯片的DW3000 硬件驱动接口代码

DT程序员的博客 1216

linux捕获鼠标点击事件文件,linux获得键盘鼠标事件,模拟键盘鼠标按键

linux中键盘鼠标等输入设备通过input子系统实现设备驱动,驱动程序完成向系统报告输入事件,input子系统完成了文件操作接口linux/input.h定义了输入事件结构体 api 和 按键定义等struct input_event {structtimeval time;__u16 type;__u16 code;__s32value;};type:类型#define EV_SYN...

weixin_29144945的博客 1013

​热电偶测温电路图(一)​

高精度热电偶测温电路图 此设计概括了提供传感器诊断所必需的抗混叠滤波器和偏置电阻器。此示例还提供了一种新颖的方式,即使用ADS1118上的板载温度传感器完成对系统的冷端补偿。对于热电偶线性化,此设计还提供了一种非常简单的、可以在大多数微控制器上实施的线性算法。 缺点就是太贵。 特性 测量K型热电偶温度 精度1°C 高精度/可重复性0.2°C 包含冷端补偿 包含软件算法 使用ADS111816位ADC(带PGA) 原理图/方框图 热电偶测温电路图(二) OP07构成的高稳定热电

zxm8513优快云博客 2万+

Linux输入设备应用编程

关于触摸屏数据的分析就给大家介绍这么多,不管是键盘也好、或者是鼠标、触摸屏,都可以像上面那样将输入设备的数据直接打印出来,然后自己再去分析,确定该输入设备上报事件的规则和流程,把这些弄懂之后再去编写程序验证结果。在 for 循环中,调用 read()读取输入设备上报的数据,当按键按下或松开(以及长按)动作发生时,read()会读取到输入设备上报的数据,首先判断此次上报的事件是否是按键类事件(EV_KEY),如果是按键类事件、接着根据 value 值来判断按键当前的状态是松开、按下还是长按。

qq_28576837的博客 1241

AI大模型助力现金流精准预测案例详解

因为它的“注意力机制”能像“人一样思考”——比如,当预测“下周现金流”时,模型会重点关注“最近7天的销售数据”“未来7天的天气”“竞品是否有促销”这些关键因素,而忽略“去年同期的无关数据”。AI大模型不是“取代”财务人员,而是“赋能”他们——把财务人员从“重复的Excel操作”中解放出来,专注于“战略决策”(比如如何优化资金结构、如何提升资金利用率)。比如,“促销力度”这个特征,不是简单的“折扣率”,而是“折扣率×促销天数×覆盖SKU数量”,这样能更准确反映促销对现金流的影响。这些问题的核心,其实是。

AIGC应用创新大全的博客 1258

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Linux输入设备应用编程(键盘,按键,触摸屏,鼠标)

本章学习Linux输入设备的应用编程。输入设备其实就是能够产生输入事件的 设备就称为输入设备,常见的输入设备包括鼠标、键盘、触摸屏、按钮等等,它们都能够产生输入事件,产 生输入数据给计算机系统。输入设备的应用编程其主要是获取输入设备上报的数据、输入设备当前状态等,譬如获取触摸屏当 前触摸点的 X、Y 轴位置信息以及触摸屏当前处于按下还是松开状态,然后根据获取到的数据做出对应的操作。

weixin_73901182的博客 3494

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux 应用-输入设备编程

多点触摸设备上报的一轮完整数据中可能包含多个触摸点的信息,譬如 5 点触摸设备,如果 5 个手指同时在触摸屏上滑动,那么硬件就会更新 5 个触摸点的信息,内核需要把这 5 个触摸点的信息上报给应用层。多点触摸设备可支持多点触摸,一轮完整的数据可以包含多个触摸点的信息,其事件为ABS_MT_XXX,例如ABS_MT_POSITION_X、ABS_MT_POSITION_Y。例如要读取触摸屏设备的数据,其对应的设备节点为/dev/input/event0,则通过以下流程实现数据的读取。

RJ183142的博客 463

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Linux应用编程笔记】输入设备

输入设备: 能够产生输入事件的设备,也成为input设备,常见的输入设备有鼠标、键盘、触摸屏、遥控器、电脑画图板等,用户通过输入设备与系统交互。

医疗嵌入式技术探索者 | 从硬件驱动到系统集成的全栈实践记录 1392

Linux应用层例程3 输入设备应用编程

首先要知道什么是输入设备?输入设备其实就是能够产生输入事件的设备就称为输入设备,,它们都能够产生输入事件,产生输入数据给计算机系统。对于输入设备的应用编程其主要是等,譬如获取触摸屏当前触摸点的 X、Y轴位置信息以及触摸屏当前处于按下还是松开状态。

internetv的博客 812

【正点原子Linux连载】第十七章 输入设备应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1

1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html 3)对正点原子Linux感兴趣的同学可以加群讨论:935446741 4)关注正点原子公众号,获取最新资料更新 第十七章输入设备应用编程 本章学习输入设备的应用编程,首先要知道什么是输入设备?输入设备其实就是能够产生输

weixin_55796564的博客 519

Linux 应用篇 学习笔记:输入设备应用编程

一、输入类设备编程 1.1 什么是输入设备 常见的输入设备包括鼠标、键盘、触摸屏、按钮等,它们都能产生输入事件,产生输入数据给计算机系统。 1.2 input 子系统 Linux 系统为了统一管理输入设备,实现了一套能够兼容所有输入设备的框架,这个框架就是input 子系统。驱动开发人员基于input 子系统开发输入设备的驱动程序,input 子系统可以屏蔽硬件的差异,向应用层提供一套统一的接口。 1.3 查看input 子系统注册的输入设备 基于input 子系统注册成功的输入设备,都会在/dev/inp

gdut_liujiangyi的专栏 1461

嵌入式linux输入,Linux输入子系统:输入设备编程指南

输入设备编程指南(Programming input drivers)~~~~~~~~~~~~~~~~~~~~~~~~~1. 新建一个输入设备驱动程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1.0 一个最简单的例子~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_39519769的博客 120

Python-evdev: 探索 Linux 输入设备编程的无限可能

Python-evdev: 探索 Linux 输入设备编程的无限可能 是一个用于与 Linux 输入设备交互的 Python 库。它可以让你轻松访问、控制和分析来自鼠标、键盘、触摸屏和其他输入设备的数据。 什么是 Python-evdev? Python-evdev 是一个基于 C 语言库 libevdev 的 Python 包装器。它为 Python 开发者提供了一种简单易懂的方式来处理 Lin...

gitblog_00071的博客 1777

linux应用编程---输入设备

除了 ABS_MT_SLOT 事 件 之 外 , Type B 协 议 还 会 使 用 到 ABS_MT_TRACTKING_ID 事 件 , ABS_MT_TRACTKING_ID 事件则用于触摸点的创建、替换和销毁工作,ABS_MT_TRACTKING_ID 事件 携带的数据 value 表示一个 ID,一个非负数的 ID(ID>=0)表示一个有效的触摸点,如果 ID 等于-1 表示该 触摸点已经不存在、被移除了;Type B 协议的重点是通过 ABS_MT_SLOT 事件上报各个触摸点信息的更新!

ni____cai的博客 1529

【Linux应用编程实战】Day3_输入设备应用编程:获取结构体(按键)信息打印、长短按键、最大点数测试*、单/多点触摸屏

实例代码:获取结构体(按键)信息打印、长短按键、最大点数测试*、单/多点触摸屏。 重点是外设的**程序对应struct input_event 结构体的事件及其上报的流程的信息处理**: ​ 无论外设如何变化,归根结底都是对**struct input_event 结构体**进行解析与程序处理!!! ​ 而具体外设的程序应用重点均在与对应结构体中**事件及其上报的流程的信息处理**

Thmos_vader的嵌入式学习笔记 1779

输入设备应用编程

输入类设备编程介绍 什么是输入设备 input 子系统 读取数据的流程 应用程序如何解析数据 读取struct input_event 数据 在开发板上验证 按键应用编程 触摸屏应用编程 解析触摸屏设备上报的数据 获取触摸屏的信息 单点触摸应用程序 多点触摸应用程序 鼠标应用编程

zhuguanlin121的博客 968
上一篇: 05 ffmpeg桌面图像h264编码并封装avi
下一篇: linux系统虚拟鼠标的实现
jklinux
博客等级 码龄10年 1060粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值