name: "mtk-kpd" /dev/input/event0: EV_KEY KEY_POWER DOWN /dev/input/event0: EV_SYN...SYN_REPORT 00000000 /dev/input/event0: EV_KEY KEY_POWER UP /dev/input/event0: EV_SYN...00000000 /dev/input/event4: EV_ABS ABS_PRESSURE 00000002 /dev/input/event4: EV_SYN...00000000 通过如上我们可以看到得到的数据格式: 格式为 device: type code value,即 设备、输入设备类型、按键扫描码、附加码,具体定义在kernel/include/linux...code value 值得注意的是使用getevent获取的数值都是16进制的,而sendevent使用的是10进制的,需要进行转换; 参考链接 android测试之getevent/sendevent linux
这里还是以最常用的操作系统Linux来进行讲解 在Linux内核中,有非常多的子系统,用于管理很多设备,比如显示系统,输入子系统,音频子系统,电源管理子系统,时钟管理子系统等等,本节我们重点关注Linux...输入子系统是 Linux内核用于管理各种输入设备 (键盘,鼠标,遥控杆,书写板等等 )的部分,用户通过输入子系统进行内核,命令行,图形接口之间的交换。...打开Linux终端,然后输入cat /proc/bus/input/devices可以看到类似以下的内容。...Linux系统为我们提供了这个输入系统操作相关的头文件:#include linux/input.h> 在这个文件中,我们可以找到这个结构体: 1//用于描述一个输入事件 2struct input_event...//4、判断事件类型,并打印键码 50 switch(event_mouse.type){ 51 //同步事件 52 case EV_SYN
看上图就可以看的一目了然了,而这些事件的定义在kernel/include/linux/input.h中。...而所谓的事件类型定义如下: /* * Event types */ #define EV_SYN 0x00 #define EV_KEY 0x01 #define EV_REL 0x02...EV_PWR 0x16 #define EV_FF_STATUS 0x17 #define EV_MAX 0x1f #define EV_CNT (EV_MAX+1) 常见的事件类型有EV_SYN...event0: EV_KEY KEY_VOLUMEUP DOWN [ 3246.862919] /dev/input/event0: EV_SYN...0003: 代表事件类型为EV_ABS事件,0001为EV_KEY事件,0000为EV_SYN事件。 关于EV_ABS事件的code,需要贴出几个常见的code。
Root设备的特殊方案 Android系统是基于Linux系统的移动操作系统。它们可以通过getevent命令输出键盘和屏幕事件,包括响应事件的坐标区域和键盘key值。...SYN_MT_REPORT 00000000 /dev/input/event2: EV_KEY BTN_TOUCH DOWN /dev/input/event2: EV_SYN...SYN_MT_REPORT 00000000 /dev/input/event2: EV_SYN SYN_REPORT 00000000 /dev.../input/event2: EV_SYN SYN_MT_REPORT 00000000 /dev/input/event2: EV_KEY BTN_TOUCH...UP /dev/input/event2: EV_SYN SYN_REPORT 00000000 ABS_MT_POSITION_X 屏幕的横坐标,后面一列是坐标的十六进制数据
(stderr, “selected device is not a touchscreen I understand\n”); return -1; } if (bit & (1 EV_SYN...tslib中的input版本号是在交叉编译的时候指定的,赋值给version,而EV_VERSION是在内核中定义,笔者做tslib时,用的2.6.39内核,这个EV_VERSION定义在linux源码的...include/linux/input.h中,值是0x010001,而tslib中的version是和交叉编译器相同,查看编译器,在 /usr/local/arm/4.3.2/arm-none-linux-gnueabi.../libc/usr/include/linux/input.h中,值是0x010000,这俩明显不相等,当然不会满足version == EV_VERSION,所以导致错误。...2.将arm交叉编译工具中的头文件库中的 linux/input.h中的 define EV_VERSION 0x010000 改为 define EV_VERSION 0x010001 然后再编译
当输入设备可用时,Linux会在 /dev/input 中创建对应的设备节点。...用户操作输入设备就会产生各种事件,这些事件的原始信息就会被 Linux内核中的输入子系统采集,原始信息由 Kernel space 的驱动层一直传递到设备结点。...EventHub 通过 Linux 内核的 Notify 与 Epoll 机制监听设备节点,通过 EventHub 的 getEvent 函数读取设备节点的增删事件和原始输入事件。...默认为 false,如果设备输入事件缓冲区溢出,这个值为 true if (mDropUntilNextSync) { if (rawEvent->type == EV_SYN...false; } else { ..... } } else if (rawEvent->type == EV_SYN
->tail)) { /* * This effectively "drops" all unconsumed events, leaving * EV_SYN...client->buffer[client->tail].time = event->time; client->buffer[client->tail].type = EV_SYN...client->buffer[client->tail].value = 0; client->packet_head = client->tail; } // 当遇到EV_SYN.../SYN_REPORT同步事件时,packet_head移动到队头head位置 if (event->type == EV_SYN && event->code == SYN_REPORT) {
struct input_id id; unsigned long evbit[NBITS(EV_MAX)]; //表示支持哪类事件,常用有以下几种事件(可以多选) //EV_SYN...,然后系统才会知道 input_sync()代码如下: static inline void input_sync(struct input_dev *dev) { input_event(dev, EV_SYN.../module.h> #include linux/version.h> #include linux/init.h> #include linux/fs.h> #include linux/interrupt.h...> #include linux/irq.h> #include linux/sched.h> #include linux/pm.h> #include linux/sysctl.h> #include...linux/proc_fs.h> #include linux/delay.h> #include linux/platform_device.h> #include linux/input.h
能产生哪类事件:EV_SW 能产生EV_SW中的哪些事件 headset headphone Lineout 注册input_dev 硬件相关(中断程序) 上报插入事件 上报拔出事件 #include linux.../module.h> #include linux/types.h> #include linux/init.h> #include linux/device.h> #include linux.../fs.h> #include linux/err.h> #include linux/switch.h> #include linux/input.h> static struct input_dev...input_dev */ g_virtual_input = input_allocate_device(); /* 设置 */ /* 2.1 能产生哪类事件 */ set_bit(EV_SYN
input驱动代码,我是在之前文章《linux 中断机制》和input子系统的驱动编写要点结合进行修改的。你会发现代码很简单。 上面说到,input设备是使用input_dev结构体来描述。...其它代码含义请参看include/linux/input.h文件。 事件值(value):事件的值。如果事件的类型是EV_KEY,当按键按下时值为1,松开时值为0。...#include #include #include #include #include linux...ev_key.type) printf("type:%d,code:%d,value:%d\n", ev_key.type,ev_key.code,ev_key.value); if(EV_SYN
二、物理设备是如何将输入数据发送给内核的 物理设备将数据发送给内核是通过设备驱动传输的,在linux下的/dev/input/目录下有几个设备文件,event0,event1,event2……… 这些设备文件实际上是驱动创建的...Android实际上是运行在linux内核上一组进程,这一组进程组合为用户提供UI,应用程序的安装等等服务。 ?...手机开机流程是linux内核先启动,启动完成之后会将Android进程组启动起来,FrameWork属于这个进程组之中。...3)MultiTouchInputMapper的process方法内部会这样处理: 首先每次一个touchEvent获取Slot,在没有收到EV_SYN之前对应的Slot都是相同的,然后依次处理x,y,...pressure,touch_major,这些值初始化slot的各个变量; 当收到ev.type== EV_SYN并且ev.code = SYN_MT_REPORT那么当前的slot的index加1,给下一次触摸事件去记录
在目录下amp\a53_linux\drv\extdrv\touchpad\ft6236下可以看到ft6236.c的文件 1. init函数 static int __init ft_init(void...line:%d \r\n", __FUNCTION__, __LINE__); return -1; } ft_ts_dev->evbit[0] = BIT_MASK(EV_SYN...) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); set_bit(EV_SYN, ft_ts_dev->evbit); set_bit(EV_KEY, ft_ts_dev
一、输入事件的转发流程 二、物理设备是如何将输入数据发送给内核的 物理设备将数据发送给内核是通过设备驱动传输的,在linux下的/dev/input/目录下有几个设备文件,event0,event1,...Android实际上是运行在linux内核上一组进程,这一组进程组合为用户提供UI,应用程序的安装等等服务。...手机开机流程是linux内核先启动,启动完成之后会将Android进程组启动起来,FrameWork属于这个进程组之中。...3)MultiTouchInputMapper的process方法内部会这样处理: 首先每次一个touchEvent获取Slot,在没有收到EV_SYN之前对应的Slot都是相同的,然后依次处理x,y,...pressure,touch_major,这些值初始化slot的各个变量; 当收到ev.type== EV_SYN并且ev.code = SYN_MT_REPORT那么当前的slot的index加1,给下一次触摸事件去记录
__u16 type;//按键类/相对位移/绝对位移 __u16 code;//那个按键/X,Y相对位移/X,Y绝对位移 __s32 value;//左移/右移 }; */ #include linux.../module.h> #include linux/version.h> #include linux/init.h> #include linux/fs.h> #include linux/...interrupt.h> #include linux/irq.h> #include linux/sched.h> #include linux/pm.h> #include linux/sysctl.h...> #include linux/proc_fs.h> #include linux/delay.h> #include linux/platform_device.h> #include linux...设置 */ /* 2.1 能产生哪类事件 */ /* #define EV_SYN 0x00 同步类 #define EV_KEY 0x01 按键类 #define
出现了原始数据,说明正常, 打开open、读取read、关闭close ============= 1.触摸屏原始数据解析 =================== 输入子系统头文件: /usr/include/linux.../input.h 输入子系统编码文件: /usr/include/linux/input-event-codes.h 输入子系统信息结构体: struct input_event { struct...一般不使用) __u16 type; // 事件类型 __u16 code; // 事件编码 __s32 value; // 事件数值 }; Type: #define EV_SYN...stdio.h> #include #include #include #include #include linux...stdio.h> #include #include #include #include #include linux
触摸点的信息通过一系列的 ABS_MT事件上报给linux内核,这些事件的定义在include/uapi/linux/input.h中: 比较常用的有: ABS_MT_SLOT :上报触摸点ID ABS_MT_POSITION_X...中,对于输入设备,例如按键、 鼠标、 键盘、 触摸屏等,为了更加方便统一的管理, Linux内核为此专门做了一个input子系统的框架来处理输入事件。...input是输入的意思,就是管理输入的子系统,和 pinctrl、gpio 子系统一样,都是 Linux 内核针对某一类设备而创建的框架。...: 各个的含义为: #define EV_SYN 0x00 /* 同步事件 */ #define EV_KEY 0x01 /* 按键事件...0000 0000 0000090 00f6 0000 11ad 0005 0000 0000 0000 0000 type 为事件类型 0000:EV_SYN
常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与Linux系统进行数据交换,Linux系统为了统一管控和处理这些设备,于是就实现了一套固定的与硬件无关的输入系统框架,供用户空间程序使用...事件类型(type) 文件头文件路径: /usr/include/linux/input-event-codes.h 当然Linux内核版本较低的有可能在以下路径的这个头文件: /usr/include.../linux/input.h 34 /* 35 * Event types 36 */ 37 38 #define EV_SYN 0x00 //同步事件 39 #define EV_KEY...: /usr/include/linux/input.h 34 /* 35 * Event types 36 */ 37 38 #define EV_SYN 0x00 //同步事件 39 #define.../input-event-codes.h 当然Linux内核版本较低的有可能在以下路径的这个头文件: /usr/include/linux/input.h 696 /* 697 * Relative
一、触摸屏部分 1.设备配置 对于触摸屏,必须支持的事件类型有以下这么三个: __set_bit(EV_SYN, input_dev->evbit); //设备同步,每次触摸完成以后都要发送一个同步事件...input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, ft5x0x_ts->y_max, 0, 0);//y坐标取值范围 2.事件发送 我们知道每次触摸完成后都必须发送一个同步事件(EV_SYN...我们一一来看 1.报告key event方法 在probe中添加所支持的按键类型,本人用的触摸屏上有三个按键因此 报告支持事件类型 __set_bit(EV_SYN, input_dev->evbit)...__set_bit(EV_SYN, input_dev->evbit); //注册设备支持event类型 __set_bit(EV_ABS, input_dev->evbit); __set_bit
常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。 什么是输入系统? 输入设备种类繁多,能否统一它们的接口?...Linux 系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的 API 去使用设备。...有这 几类事件(参考 Linux 内核头文件): ? ② code:表示该类事件下的哪一个事件 比如对于 EV_KEY(按键)类事件,它表示键盘。...b 的二进制是 1011, bit0、1、3 为 1,表示该设备支持 0、1、3 这三类事件,即 EV_SYN、EV_KEY、EV_ABS。
Linux 文件系统 目录 说明 bin 存放二进制可执行文件 sbin 存放二进制可执行文件,只有 root 才能访问 boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc...是超级管理员 localhost 表示主机名 ~ 表示当前目录(家目录),其中超级管理员家目录为 /root,普通用户家目录为 /home/chan $ 表示普通用户提示符,# 表示超级管理员提示符 Linux...test.tar.gz 文件搜索命令 locate:在后台数据库搜索文件 updatedb:更新后台数据库 whereis:搜索系统命令所在位置 which:搜索命令所在路径及别名 find:搜索文件或文件夹 用户和组 Linux