处理简单的触屏输入
来源:互联网 发布:dce与dte端口区别 编辑:程序博客网 时间:2024/06/05 16:16
配合上一篇文章,zForce的内核驱动将触屏对接到/dev/input/event0设备文件上。
1. 利用单点触控完成虚拟键盘效果
写了一个用户态的程序,在屏幕上划分9个区域,作为虚拟键盘。
需要读取点击事件,并以up时位置作为点击位置。
程序是只处理单点触控效果,多点触控需要根据 trace id,再进行划分。
#include <stdio.h>#include <stdlib.h>#include <linux/input.h>#include <fcntl.h>#define ABS_MT_POSITION_X0x35/* Center X ellipse position */#define ABS_MT_POSITION_Y0x36/* Center Y ellipse position */#define ABS_MT_TRACKING_ID0x39/* Unique ID of initiated contact */unsigned int ir_value[3][3] = {{0x00ffef10,0x00ffee11,0x00ffed12},{0x00ffEB14,0x00ffEA15,0x00ffE916},{0x00ffe718,0x00ffe119,0x00ffe51a}};int main (){int keys_fd;struct input_event t;int x=0;int y=0;keys_fd = open ("/dev/input/event0", O_RDONLY);// 触屏绑定的设备名称,只读数据即可if (keys_fd <= 0){printf ("open /dev/input/event0 device error!\n");return 0;}while (1){if (read (keys_fd, &t, sizeof (t)) == sizeof (t)){if (t.type == EV_ABS){printf("EV_ABS event %d:%s= %d\r\n", t.code,t.code == ABS_MT_POSITION_X ? "ABS_X" : t.code == ABS_MT_POSITION_Y ? "ABS_Y" : t.code == ABS_MT_TRACKING_ID ? "ABS_MT_TRACKING_ID" :"Unkown", t.value);if (t.code == ABS_MT_POSITION_X){x = 720 - t.value;<span style="white-space:pre"></span>//芯片处理效果以右下角为起始位置(0,0)}else if (t.code == ABS_MT_POSITION_Y){y = 480 - t.value; <span style="white-space:pre"></span>// <span style="font-family: Arial, Helvetica, sans-serif;">芯片处理效果以右下角为起始位置(0,0)</span>}else if (t.code == ABS_MT_TRACKING_ID && t.value == -1){if (x >= 210) // 不是满屏的,左边有留空白{printf("ir value = %x\r\n",ir_value[y/160][(x-210)/170]);// 虚拟键盘结果}}} }}close (keys_fd);return 0;}这个DEMO比较粗糙,以后如果真需要使用触摸屏,应该会适配开源的多点触控驱动
2. QT绑定ir触摸屏
QT运行时,可以配置很多环境变量和参数。
这些环境变量和参数可以搜索一下,不再一一列举。
比如,ir触屏,需要
export QWS_MOUSE_PROTO=tslib:/dev/input/event0QT是如何通过这个环境变量获取到触屏信息的呢?
这要简单说明一下QT执行机制。
QT源码编译时,需要配置参数,这些参数决定了最终QT库所能提供的IO驱动。
假设已经包含了触屏参数,TS驱动并不是直接对接QT库,
TS驱动先按IO类型绑定设备,设备初始化时已经设定了设备的事件类型,
驱动只需要把事件传递给input子系统,系统会维护设备状态。
比如上一节,红外触屏,每次上报一个单点触控的位置和点击状态(比如只报X坐标)
而触屏整体的状态是由OS input子系统维护的,不需要驱动每次上报全部状态。
QT会根据TSLIB驱动,获取TS的全部信息,
并且,会把OS的事件和API转换成QT的事件。
而在QT编程时,最终处理的是QT事件。
具体以后多转几篇文章,慢慢分析。
具体以后多转几篇文章,慢慢分析。
0 0
- 处理简单的触屏输入
- 简单处理音频输入数据的类
- 搜索框输入特殊字符后台的简单处理方式
- 显示InputDialog输入对话框实现对用户输入的英文单词进行简单处理
- 输入的处理1
- 简单的输入校验
- 简单的输入
- 第八章 Libgdx输入处理(5)简单文本输入
- 上一篇讲到最简单的表单处理,就将输入的字符串输出了。
- ACM简单题目中对于连续多组输入的处理方法
- 实现简单输入支付密码的输入
- 记简单的输入框输入密码
- 游戏中输入的处理
- 游戏中输入的处理
- pat1009,字符串的输入处理
- Android的用户输入处理
- 对于字符输入的处理
- MapReduce输入的处理类
- Oracle 视图可以DML操作的条件
- 面试题之四
- 时间转换
- spring自定义注解
- Android内存分析工具MAT:导出Bitmap
- 处理简单的触屏输入
- 自学大数据:用以生产环境的Hadoop版本比较
- 【javaSE】java异常处理机制
- 使用GDB调试程序(1)
- 安卓解决WebView中无法执行js的问题
- Java NIO系列教程(二) Channel
- 优化算法——凸优化的概述
- java内存模型之二---重排序
- 看门狗原理和应用