Android电容屏一些重要说明

linux触摸屏两指缩放_Linux内核触摸屏驱动--多点触摸 【转】 简介为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息。使用说明单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH、ABS_X、ABS_Y、SYNC。而多点触摸信息则是以 ABS_MT承载并按一定顺序发送,如ABS_MT_POSITION_X、ABS_MT_POSITION_... 阅读详情

1. 触摸屏设备分类

1.1 多点触摸

满足以下两个条件为多点触摸设备:

1)输入设备驱动报告了ABS_MT_POSITION_X 和ABS_MT_POSITION_Y存在

2)输入设备没有任何手柄按钮

1.2 单点触摸

满足以下两个条件为单点触摸设备:

1)输入设备不被归类为多点触摸设备

2)输入设备报告存在ABS_X和ABS_Y绝对轴,以及存在BTN_TOUCH按键码

1.3 输入设备配置文件

        所有内置的触摸设备应该有输入设备的配置文件(.idc, input device configuration files).如果输入设备配置文件不存在,系统将选择一个通用的触摸设备配置做为默认配置。这些默认配置不是专门为内置触摸设备设计的,有可能导致工作不正常。

当输入设备配置(idc)被加载之后,系统将把输入设备分为触摸屏(touch screen),触摸板(touch pad)或指针设备(pointer device).

1)触摸屏:使用它,可以直接操作屏幕上的对象。

2)触摸板:它提供绝对的定位信息给触摸区域内的应用程序。

3)指针设备:使用它,通过光标间接操作屏幕上的对象。手指为多点触摸指针手势,其它工具,如铁笔,被解释为使用绝对位置。

 

以上三类设备的分类规则如下:

1)如果.idc中设置了touch.deviceType属性,则设备类型被设置为它所指定的设备类型(如:touchScreen)

2)如果输入设备通过EVIOCGPROP ioctl报告了存在INPUT_PROP_DIRECT输入属性,则此设备类型被设置为触摸屏。

3)如果输入设备通过EVIOCGPROP ioctl报告了存在INPUT_PROP_POINTER输入属性,则此设备类型被设置为指针设备。

4)如果输入设备报告了存在REL_X和REL_Y相对轴,则设备类型被设置为触摸板。

5)如果不满足以上条件,则设备类型被设置为指针设备。

 2. 按钮

        按钮是可选控制,应用程序使用它执行其这功能。触摸设备上的按钮功能类似于鼠标按钮,主要被指针触摸设备或铁笔使用。

支持的按钮如下:

BTN_LEFT: 被映射为: MotionEvent.BUTTON_PRIMARY.
BTN_RIGHT: 被映射为: MotionEvent.BUTTON_SECONDARY.
BTN_MIDDLE: 被映射为: MotionEvent.BUTTON_MIDDLE.
BTN_BACK and BTN_SIDE:被映射为:MotionEvent.BUTTON_BACK. 按此按钮也生成一个按键:KeyEvent.KEYCODE_BACK.
BTN_FORWARD and BTN_EXTRA: 被映射为: MotionEvent.BUTTON_FORWARD. 按此按钮也生成一个按键:KeyEvent.KEYCODE_FORWARD.
BTN_STYLUS: 被映射为:MotionEvent.BUTTON_SECONDARY.
BTN_STYLUS2: 被映射为:MotionEvent.BUTTON_TERTIARY.

3. 工具和工具类型

        一个工具是一个用于与触摸设备进行交互的手指、铁笔或其它设备。一些触摸设备可以区别不同的触摸工具类型。Android支持以下触摸工具类型:

  • BTN_TOOL_FINGER andMT_TOOL_FINGER: 被映射为MotionEvent.TOOL_TYPE_FINGER.

  • BTN_TOOL_PEN andMT_TOOL_PEN: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

  • BTN_TOOL_RUBBER: 被映射为MotionEvent.TOOL_TYPE_ERASER.

  • BTN_TOOL_BRUSH: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

  • BTN_TOOL_PENCIL: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

  • BTN_TOOL_AIRBRUSH: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

  • BTN_TOOL_MOUSE: 被映射为MotionEvent.TOOL_TYPE_MOUSE.

  • BTN_TOOL_LENS: 被映射为MotionEvent.TOOL_TYPE_MOUSE.

  • BTN_TOOL_DOUBLETAP,BTN_TOOL_TRIPLETAP, andBTN_TOOL_QUADTAP: 被映射为MotionEvent.TOOL_TYPE_FINGER.

    4. 盘旋 vs. 触摸工具

            工具与触摸设备接触或在触摸设备上一定范围内盘旋。不是所有的触摸设备都能识别触摸工具在触摸设备上盘旋。如基于射频的手写笔数字化仪,当一个工具在其上面一定范围内盘旋时,它可以检测到。

            InputReader模块负责区分触摸工具中哪些是盘旋工具。同样,触摸工具(touching tools)和盘旋工具(hovering tools)以不同的方式报告给应用程序。

            触摸工具通过触摸事件(touch events)报告给应用程序,如:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_DOWN,MotionEvent.ACTION_POINTER_DOWNandMotionEvent.ACTION_POINTER_UP。

       盘旋工具通过通用的运动事件(generic motion events)报告给应用程序,如:MotionEvent.ACTION_HOVER_ENTER,MotionEvent.ACTION_HOVER_MOVEandMotionEvent.ACTION_HOVER_EXIT.   

    5. 触摸设备驱动需求

           1) 触摸设备驱动应当只需要注册轴、与轴对应的键值和真正支持的按钮。注册过多的轴或键值可能会迷惑设备分类算法或导致系统不能正确地检测设备的能力。

             比如:如果设备驱动报告了BTN_TOUCH键值, Android系统将认为BTN_TOUCH总是被用于指示触摸工具是否真正地接触触摸屏或仅仅在上方盘旋。

            2) 单点触摸(Single-touch)设备支持以下Linux输入事件:       

    • ABS_X: (必须) :报告工具的x坐标
    • ABS_Y: (必须) :报告工具的y坐标
    • ABS_PRESSURE: (可选): 报告触摸工具顶尖处的压力或触摸接触的信号强度。
    • ABS_TOOL_WIDTH: (可选): 报告接触部分区域,或接触宽度或工具本身的宽度。
    • ABS_DISTANCE: (可选):报告从触摸设备表面到工具的距离
    • ABS_TILT_X: (可选): 报告工具沿触摸设备表面X轴的倾斜
    • ABS_TILT_Y: (可选):  报告工具沿触摸设备表面Y轴的倾斜.
    • BTN_TOUCH: (必须) :指示工具是否接触触摸设备.
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (可选):  报告按钮状态.
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (可选): 报告工具类型.

          3) 多点触摸(Multi-touch)设备支持以下Linux输入事件:      

    • ABS_MT_POSITION_X: (必须): 报告工具的X坐标
    • ABS_MT_POSITION_Y: (必须): 报告工具的X坐标
    • ABS_MT_PRESSURE: (可选): 报告触摸工具顶尖处的压力或触摸接触的信号强度
    • ABS_MT_TOUCH_MAJOR: (可选): 报告接触面积或接触面的长轴
    • ABS_MT_TOUCH_MINOR: (可选): 报告接触面的短轴。如果ABS_MT_TOUCH_MAJOR 报告接触面积,且此参数不应该使用。
    • ABS_MT_WIDTH_MAJOR: (可选): 报告接触工具本身的面积,或接触工具本身的长轴。如果接触工具的尺寸未知,则不应该使用此参数。
    • ABS_MT_WIDTH_MINOR: (可选): 报告接触工具本身的短轴,如果ABS_MT_WIDTH_MAJOR报告了面积区域, 或接触工具的尺寸未知,则不应该使用此参数。
    • ABS_MT_ORIENTATION: (可选):报告工具的方向.
    • ABS_MT_DISTANCE: (可选):  报告从触摸设备表面到工具的距离.
    • ABS_MT_TOOL_TYPE: (可选): 报告工具类型为:MT_TOOL_FINGER 或 MT_TOOL_PEN.
    • ABS_MT_TRACKING_ID: (可选): 报告工具的跟踪.
    • ABS_MT_SLOT: (可选): 报告工具的slot id,当使用Linux多点协议B.参考其文档获取更多信息。 
    • BTN_TOUCH: (必须) : 指示工具是否接触触摸设备.
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (可选): 报告按钮状态
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (可选): 报告工具类型

          4) 如果单点触摸和多点触摸的轴都定义了,则只有多点协议的轴被使用,单点触摸的轴则被忽略。

          5) ABS_X, ABS_Y, ABS_MT_POSITION_X andABS_MT_POSITION_Y 轴的最小值和最大值以设备表面具体的单位(如像素)定义了活动区域的边界。对于触摸屏,活动区域描述了触摸设备真正覆盖显示部分的区域。

          6) 在Android4.0中,触摸屏驱动需要修改以与Linux输入协议规范兼容。

         下列变化可能需要:

              1) 当一个工具变成不活动时(如手指抬起) ,在随后的multi-touch sync report它不应该出现;当所有的工具不活动时(如所有的手指抬起),驱动应该发送一个空的sync report包,如:SYN_MT_REPORT紧跟一个SYN_REPORT。

              以前的Android版本期望报告一个up事件(通过发送一个pressure值为0) 。旧的操作方式与Linux input协议规范不兼容,所以不再使用。             

         2) 物理压力或信号强度信息应该使用ABS_MT_PRESSURE报告。

                以前的Android版本从ABS_MT_TOUCH_MAJOR获取压力信息。旧的操作方式与Linux input协议规范不兼容,所以不再使用。

         3) 触摸尺寸信息通过ABS_MT_TOUCH_MAJOR报告。

          以前的Android版本从ABS_MT_TOOL_MAJOR获取触摸尺寸信息。旧的操作方式与Linux input协议规范不兼容,所以不再使用。

          触摸设备驱动不再需要Android定制化。通过标准的Linux input协议,Android可以支持大量的触摸设备,且不用修改驱动。

     

     

     参考:http://source.android.com/tech/input/touch-devices.html

Android 找到触摸屏设备节点 应用层通过 adb 命令 即可实现 adb shell dumpsys input 获取设备信息 找到 触摸屏设备信息(信息内容很多,这里只复制了要用的) 小米4 Device 6: synaptics_dsx (这个是触摸屏设备名字) Touch Input Mapper: Parameters: GestureMode: spots DeviceType: touchScreen AssociatedDisplay: hasAssociate 阅读详情

相关推荐

Adroid 开发初体验

Adroid 开发初体验 1.创建Android项目 先启动Android studion程序,启动后在该界面选择File–New-- NewProject…菜单项。如下图所示: 2.给你创建的工程项目添加模块如图所示: 3.接下来给工程项目命名和相关路径的选择。如图所示: 4.接下来的窗口中,需要为GeoQuiz应用的启动初始屏选择模板,如图所示; 5.打开后,在该界面命名activity子类为QuizActivity,如图所示 6,上一步点击Finish后,如图所示,Android Studi

qq_50751139的博客 324

Adroid 触摸屏设备

1. 触摸屏设备分类 1.1 多点触摸 满足以下两个条件为多点触摸设备: 1)输入设备驱动报告了ABS_MT_POSITION_X 和ABS_MT_POSITION_Y存在 2)输入设备没有任何手柄按钮 1.2 单点触摸 满足以下两个条件为单点触摸设备: 1)输入设备不被归类为多点触摸设备 2)输入设备报告存在ABS_X和ABS_Y绝对轴,以及存在BTN_TOUCH按键码 1.3

MyArrow的专栏 1万+

android 电容屏(一):电容屏基本原理篇

关键词:android 电容屏 tp ITO平台信息:内核:linux2.6/linux3.0系统:android/android4.0平台:S5PV310(samsung exynos 4210) 作者:xubin341719(欢迎转载,请注明作者) android 电容屏(一):电容屏基本原理篇 android 电容屏(二):驱动调试之基本概念篇 android 电...

1546

输入设备之触摸屏

读取多点触摸信息

weixin_46829095的博客 3161

C++开发基础之掌握常用的三种异步编程模型

以上是三种常见的C++异步编程模型,每种模型都有其适用的场景和特点。根据具体需求,你可以选择合适的模型来进行异步编程。

dotnet研习社 2176

注册“Oracle Provider for OLE DB”和创建链接服务器

注册“Oracle Provider for OLE DB”和创建链接服务器 在sql server 数据库上创建链接服务器,连接oracle数据库,访问接口需要设置为:“Oracle Provider for OLE DB”。 如果电脑上没有这个驱动,安装一个完整的Oracle11gR2程序是一个有效的方法,但这个64位版本的安装包有2个多G, 相当庞大,如果仅仅...

weixin_30760895的博客 2384

android 电容屏(二):驱动调试之基本概念篇

关键词:android 电容屏 tp 工作队列 中断 多点触摸协议 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:S5PV310(samsung exynos 4210) 作者:xubin341719(欢迎转载,请注明作者) 参考网站:http://edsionte.com/techblog/archives/1582

天高任鸟飞海阔凭鱼跃的专栏 563

【脑电分析系列】第7篇:频域分析基石 — 功率谱密度(PSD)的计算与常见方法对比

本文探讨了脑电图(EEG)频域分析的核心方法——功率谱密度(PSD)。通过对比基于快速傅里叶变换的周期图法和更稳健的Welch's方法,指出后者通过分段、加窗和平均处理,能有效降低估计方差,更适合分析非稳态的脑电信号。文章详细解析了关键参数设置对频率分辨率和统计稳定性的影响,并提供了Python计算实现。PSD分析将复杂的脑电信号转换为直观的频域特征,为研究认知功能和神经疾病提供重要依据。

qq_32516809的博客 1805

android 电容屏

关键词:android  电容屏 tp  ITO 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:S5PV310(samsung exynos 4210)  作者:xubin341719(欢迎转载,请注明作者) android 电容屏(一):电容屏基本原理篇 android 电容屏(二):驱动调试之基本概念篇 andr

TopicDev的专栏 1723

(8)机器人动力学

机器人是一个具有多输入多输出的复杂动力学系统,存在严重的非线性,需要非常系统的方法对机器人进行动力学研究。常用的机器人动力学建模方法有:Lagrange(拉格朗日)动力学方法、Newton-Euler(牛顿-欧拉)动力学方法、Gauss(高斯)动力学方法、Kane(凯恩)动力学方法等。机器人动力学研究的是机器人的运动和作用力之间的关系。机器人的动力学问题包括动力学正问题和动力学逆问题。动力学正问题是对于给定的关节驱动力......

rouyu308的博客 9498

CentOS7下用FreeRADIUS+AD实现802.1X认证完整指南(附华为交换机配置)

本文提供了在CentOS 7系统上部署FreeRADIUS并与Windows Active Directory集成,以实现企业级802.1X网络认证的完整实战指南。内容涵盖从架构原理、服务器配置(包括Kerberos、Samba Winbind集成)、FreeRADIUS核心设置与AD联动,到华为交换机的详细配置步骤。重点解决了生产环境中常见的高可用、动态VLAN下发及深度排错问题,为企业构建集中、安全的网络准入控制体系提供了经过验证的解决方案。

weixin_29273849的博客 407

android 电容屏(一)

平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:S5PV310(samsung exynos4210) from:http://blog.youkuaiyun.com/xubin341719/article/details/7833383 一、电容屏工作基本原理        触摸屏的工作原理概括来说就是上报坐标值

cug_qiuwei的博客 1746

LabVIEW vs Python:谁更适合你的ATE自动化测试系统?实测对比与选型建议

本文深入对比了LabVIEW和Python在ATE自动化测试系统中的性能表现、开发效率和应用场景,帮助工程师根据实时控制需求、数据处理复杂度及团队技能做出最优选型决策。通过实测数据和典型案例,分析两者在硬件集成、系统性能和维护成本等方面的差异,并提供混合架构实施建议。

weixin_29240711的博客 277

android电容触摸屏的驱动及其上层工作原理,android 电容屏(一):电容屏基本原理篇...

关键词:android 电容屏 tp ITO平台信息:内核:linux2.6/linux3.0系统:android/android4.0平台:S5PV310(samsung exynos 4210)作者:xubin341719(欢迎转载,请注明作者)一、电容屏工作原理触摸屏的工作原理概括来说就是上报坐标值,X轴、Y轴的值。前面我们分析了电阻触摸屏,它是通过ADC来检测计算X、Y轴坐标值,下面我...

weixin_33603813的博客 999

华为OD机试真题2025双机位C卷 C++ 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 281

FineReport FCP模拟题五

新建决策报表,设置 移动端 格式,采用绝对布局。数据来源:FRDemo中的订单表/雇员表。

Davina_yu的博客 725

S5PV310 Android 电容屏驱动调试

平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:S5PV310(samsung exynos4210) 一、电容屏工作基本原理        触摸屏的工作原理概括来说就是上报坐标值,X轴、Y轴的值,从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行。

铁甲 - 环形电子 3266

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 关于电容屏幕驱动的几个文件ft5x06-ts.idc/ft5x06-ts.kcm/ft5x06-ts.kl的认识
下一篇: android 电容屏(四):驱动调试之驱动程序分析篇 -- FocalTech
简单并快乐着
博客等级 码龄15年 473粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值