linux 读取input输入设备demo

/*******************************************************************
 *                   linux 读取input输入设备demo
 * 说明:
 *     本文主要是解读以前同事写的input设备的一个demo程序。
 *
 *                                2016-3-24 深圳 南山平山村 曾剑锋
 ******************************************************************/

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

int main(int argc, char **argv)
{
    int fd;
    struct input_event ev;

    // 判断参数
    if (argc < 2) {
        printf("Usage: %s <input device>\n", argv[0]);
        return 0;
    }

    // 打开设备
    fd = open(argv[1], O_RDWR);
    if (fd < 0) {
        printf("open %s", argv[1]);
        fflush(stdout);
        perror(" ");
        return 0;
    }

    // 循环读取
    while(1) {
        // 读取数据
        read(fd, &ev, sizeof(struct input_event));
        // 打印当前触发类型
        printf("ev ==  %x \n",ev.type );
        switch(ev.type) {
        case EV_SYN:
            printf("-------------------------\n");
            break;

        // 按键
        case EV_KEY:
            printf("key down / up: %d \n",ev.code );
            break;

        // 鼠标
        case EV_REL:
            printf("mouse: ");
            if (ev.code == REL_X) {
                printf(" x -- %d\n", ev.value);
            } else if (ev.code == REL_Y) {
                printf(" y -- %d\n", ev.value);
            }
            break;

        // 触摸屏
        case EV_ABS:
            printf("ts: ");
            if(ev.code == ABS_X) {
                printf(" x -- %d\n", ev.value);
            } else if (ev.code == ABS_Y) {
                printf(" y -- %d\n", ev.value);
            } else if (ev.code == ABS_PRESSURE) {
                printf(" pressure: %d\n", ev.value);
            }
            break;
        }
    }
    close(fd);

    return 0;
}
时间: 2024-08-05 19:46:18

linux 读取input输入设备demo的相关文章

Linux/Android——Input系统之InputMapper 处理 (八)

前文Linux/Android--Input系统之InputReader (七)介绍到了inputreader的运作流程,如何获取events到初步的分发,依次分析到InputMapper做第一步的处理. 前文有解析Mapper类型的依赖规则,不做重述.,这里单以触摸屏input_device 对应的SingleTouchInputMapper 为例. 撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/43561773本博文来自[

Linux/Android——Input系统之InputReader (七)

在前文Linux/Android--Input系统之frameworks层InputManagerService (六)  这里介绍了android层input服务的启动,其中启动了一个读取来自底层event事件的线程. 而在Linux/Android--input系统之 kernel层 与 frameworks层交互 (五)有分析到是通过一个event%d的设备文件交互的,也就是说android层是通过读取event%d来获取event的,这个工作就是InputReader 撰写不易,转载需注

Linux/Android——input子系统核心

之前的博客有涉及到linux的input子系统,这里学习记录一下input模块. input子系统,作为管理输入设备与系统进行交互的中枢,任何的输入设备驱动都要通过input向内核注册其设备, 常用的输入设备也就是鼠标,键盘,触摸屏. 稍微细分一点整个输入体系,就是 硬件驱动层,input核心中转层,事件处理层.层次之间传递都以event事件的形式,这其中input连接上下层,分别提供接口. 之前有分析usbtouchscreen的驱动,也就是硬件驱动部分,这里简单记录一下input核心中转处理

Linux/Android——Input系统之frameworks层InputManagerService (六)

上一篇Linux/Android--input系统之 kernel层 与 frameworks层交互 (五)中有介绍kernel层一下以及与android这边frameworks层之间的联系,算是打通android 应用层与 kernel驱动层,对整个input系统的学习是至关重要的,其中frameworks层只是简单记录了几个接入点,这里开始分析frameworks层的细节部分. 撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/

linux下input event事件,可以用后台截取键盘按下的键值,后台截取数据.....input.h

如何读取Linux键值,输入子系统,key,dev/input/event,dev/event,C语言键盘? 这里先上一段代码,自己拿到linux系统运行就可以,注意代码中keys_fd = open("/dev/input/event2", O_RDONLY);      这里去你的/dev/input/event2的event事件,去查看你的键盘事件是那一个,如果是event3那么你改成event3好了.这里给一个命令你去查看 cat  /proc/bus/usb/devices

Linux/Android——input子系统核心 (三)【转】

本文转载自:http://blog.csdn.net/jscese/article/details/42123673 之前的博客有涉及到linux的input子系统,这里学习记录一下input模块. input子系统,作为管理输入设备与系统进行交互的中枢,任何的输入设备驱动都要通过input向内核注册其设备, 常用的输入设备也就是鼠标,键盘,触摸屏. 稍微细分一点整个输入体系,就是 硬件驱动层,input核心中转层,事件处理层.层次之间传递都以event事件的形式,这其中input连接上下层,分

Linux SocketCan client server demo hacking

/*********************************************************************** * Linux SocketCan client server demo hacking * 说明: * 本文主要是解读Linux上的SocketCan的基本使用方法,内容和Linux上的 * 网络编程差不多. * * 2016-3-28 深圳 南山平山村 曾剑锋 ********************************************

虚拟机下Linux读取USB设备的问题虚拟机下Linux无法读取USB设备的解决方案

我们在虚拟机中识别USB设备有三种情况导致Linux系统不能读取到USB设备: 1. .当虚拟机的USB服务没有开启的时候 2. 若虚拟机的USB连接的设置选项没有设置好 3. Widows抢先一步,被Windows读取到虚拟机下Linux读取USB设备的问题 还有一种是虚拟机USB读取服务文件出现了问题,这个见链接 http://blog.csdn.net/limb99/article/details/7723600 1.当虚拟机的USB服务没有开启的时候,是无法读取到的,必须将其打开 2.若

linux 读取文件

linux读取文件是经常要用到的操作,以下示例(说明看注释): #读取文件snlist.txt中的每一行内容赋给sn变量 while read sn do echo ">>>>>>>sn is $sn" # 判断是否是文件 if [ ! -d "$sn" ];then echo $sn "not existed" else # 对sn进行"/"拆分并获取最后一个结果,如lib/aa结果