扩展知识点---利用应用程序控制输入设备进行数据显示

简介: 扩展知识点---利用应用程序控制输入设备进行数据显示

第一:什么是输入设备?


解答:常见的输入设备为鼠标、键盘、遥控器、电脑、画板等,用户利用输入设备与系统进程交互。


第二:Linux系统为了统一设备,实现了兼容所有的输入设备框架,这个框架就是input子系统。驱动开发人员基于input子系统开发输入设备驱动程序,input子系统可以屏蔽硬件的差异,向应用提供统一的接口。


第三:输入设备读取数据的流程是什么?


1、应用程序打开/dev/input/event0设备文件;


2、应用程序发起读操作(譬如调用read),如果没有数据可读则会进入休眠(阻塞I/O情况)。


3、当有数据可读的时候,应用程序会被唤醒,读操作获取到数据返回。


4、应用程序对读取到的数据进行解析。


核心点:应用程序是如何解析数据的?


struct input_event{
        struct timeval time;
         __u16 type;
         __u16 code;
         __s32 value; 
};

 这个结构体中的time成员变量是一个struct timeval类型的变量,内核会记录每次上报的事件发生的时间,并通过变量time返回给应用程序。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
int main(int argc, char *argv[])
{
      struct input_event in_ev = {0};
       int fd = -1;

    /* 校验传参 */

  if (2 != argc) {
    fprintf(stderr, "usage: %s \n", argv[0]);
     exit(-1);
     }

/* 打开文件 */

if (0 > (fd = open(argv[1], O_RDONLY))) {
perror("open error");
exit(-1);
}
for ( ; ; ) {

/* 循环读取数据 */

if (sizeof(struct input_event) != read(fd, &in_ev, sizeof(struct input_event))) {
perror("read error");
exit(-1);
}
printf("type:%d code:%d value:%d\n", in_ev.type, in_ev.code, in_ev.value);
}
}


目录
相关文章
|
6月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
74 0
西门子S7-1200程序状态监视,监视表格的使用方法,如何使用交叉引用列表
本篇我们来学习西门子S7-1200程序状态监视、监视表格、交叉引用的使用方法。
西门子S7-1200程序状态监视,监视表格的使用方法,如何使用交叉引用列表
|
3月前
|
开发框架 前端开发 JavaScript
在Winform程序中增加隐藏的按键处理,用于处理一些特殊的界面显示或者系统初始化操作
在Winform程序中增加隐藏的按键处理,用于处理一些特殊的界面显示或者系统初始化操作
|
5月前
|
安全 前端开发 Linux
显示子系统、显示子前后端、LinuxFB与Wayland的区别分析
显示子系统、显示子前后端、LinuxFB与Wayland的区别分析
|
物联网
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
521 0
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
|
存储 监控 算法
转:在屏幕监控软件中二进制算法起到了哪些重要作用
&quot;二进制算法&quot;这个东西其实并不是多高深的概念,就是个挺宽泛的说法罢了。在不同的情况下,人家都会拿出各种花样的二进制算法来搞事情,实现各种各样的功能。有些算法可能涉及到挺多计算机科学和信息处理的技术,接下来就和大家谈谈二进制算法在屏幕监控软件软件中可能会起到哪些重要作用——
78 0
LabVIEW设置应用程序显示标签透明
本篇博文将介绍一种简单方法,还是以我们分享的LabVIEW实现科学计算器小项目为例,将最下面的提示按钮背景设置为透明效果
自己做输入框,控制更方便
自己做输入框,控制更方便
94 0
|
Linux
扩展知识点--利用Linux应用代码如何控制LED
扩展知识点--利用Linux应用代码如何控制LED
139 0
|
IDE 开发工具 内存技术
推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置
51 单片机中通过关键字 sbit来实现**位**定义,操作时除了被操作的那一位发生改变之外,其它位不受影响。不过在STM32里面就没有 sbit 关键字了,不能直接对寄存器的进行单个位操作,如果你想单独修改寄存器某一位的话,其实还是有办法的—位带操作。
434 0
推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置