Android4.0 多点触摸屏新手入门指南

android4.0触摸屏(touchscreen)以及屏幕按键驱动解析 本人用的触摸屏IC是FocalTech公司的ft5306,是一款i2c的电容屏多点触控芯片。对于它的整体驱动官方已经给了,我们就触摸屏和按键部分的代码做相关说明。说明其中应该注意的地方。 阅读详情

1  前言

        首先,说一段废话。优快云注册有一段时间了,但是一直没有在上面发表博客,之前发布在其他博客上的文章,由于密码忘记了,所以也无法找回了。好,开始进入正题。
本人也是初学者,并且入行不久。所以应该更适合初学的人学习。

2  通观全局

        我们将Android分为三个部分,kernel、framework、app三个部分。由于软件都是跑在硬件的基础之上的,所以硬件上触摸屏需要支持多点触摸。理论上软件是可以支持最多256个手指的触摸,但是硬件的限制,即便是你想上报多于硬件个数的手指的情况下,我们在上层也只能忽略。对于framework,google本身是支持多点触摸的,但是由于专利问题,可能有很多hide的API。但是由于Android是开放平台,所以我们还是可以在此基础上进行自主开发的。
        本人之前的学习是在2.3上进行的,由于公司工作任务的原因中间有段停滞的时间。现在重新来看,发现EventHub.cpp和InputReader.cpp变化很大,拿比对软件一看“祖国江山一片红”,当时心里还是有点发慌的,谁让咱是干这行的,很快调整心态进入战斗状态。
        既然对以上有了一个大致的了解,所以我们已经通观全局,剩下的任务就是各个击破了。cpu都多核了,我们也不能落后,来多线程操作吧。看内核知识累了就去读framework的代码,是在读恶心了就去看应用应该怎样实现。

3  具体讲解

3.1 KERNEL  

      对于触摸屏的驱动我们简单的划分为两个主要的部分,一个是注册,另一个是上报。      

       3.1.1    注册 

       单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH、ABS_X、ABS_Y、SYNC。而多点触摸信息则是以ABS_MT承载并按一定顺序发送,如ABS_MT_POSITION_X、ABS_MT_POSITION_Y,然后通过调用input_mt_sync()产生一个 SYN_MT_REPORT event来标记一个点的结束,告诉接收方接收当前手指的信息并准备接收其它手指的触控信息。最后调用 input_sync()函数上报触摸信息开始动作并告诉接收方开始接收下一系列多点触摸信息。

    3.1.2  上报

        协议定义了一系列ABS_MT事件,这些事件被分为几大类,允许只应用其中的一部份,多点触摸最小的事件集中包

括 ABS_MT_TOUCH_MAJOR、ABS_MT_POSITION_X和 ABS_MT_POSITION_Y,以此来实现多点触摸。如果设备支持ABS_MT_WIDTH_MAJOR这个事件,那么此事件可以提供手指触摸接触面积大小。触摸方向等信息可以由ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION提供。ABS_MT_TOOL_TYPE提供触摸设备的类别,如手或是笔或是其它。最后有些设备可能会支持 ABS_MT_TRACKING_ID,用来支持硬件跟踪多点信息,即该点属于哪一条线等。

3.2 framework

        在Android 4.0中,Event Input地位提高了.在Adroid2.3.5中,它在frameworks/base/libs/ui之下,在Android4.0中,它在frameworks/base/services/input之下,看到没有,它有了自己的地位,就像在Kernel中一样,有自己门户了。
在此文件夹下,目前主要研究两个文件,一个是EventHub.cpp,另一个是InputReader.cpp两个文件。EventHub.cpp主要是完成设备的扫描和识别。而InputReader.cpp完成对设备上报的原始数据的处理工作。
而具体的对于APP开发人员来讲主要的数据是通过MotionEvent,java获取。而MotionEvent.java是通过JNI机制与底层进行通信的。
frameworks/base/core/java/android/view/MotionEvent.java---jni-->frameworks/base/core/jni/android_view_MotionEvent.cpp
        本部分可参考博客:http://blog.youkuaiyun.com/myarrow/article/details/7091061

3.3  app

           此部分本人还没有实现,参考代码TouchExample.java & TouchExampleActivity.java

        由于实验还没有进行,所以很多的研究还不是很深入,本人将后续添加实验过程的真实笔记,本人有手写的习惯,神州们可以随时打假!


android4.2触摸屏驱动与4.0的差异 1、上报的消息不同: 在android4.0系统中只需要报告: ABS_MT_POSITION_X ABS_MT_POSITION_Y ABS_MT_TOUCH_MAJOR ABS_MT_WIDTH_MAJOR等主要消息; 但android4.2已经修改消息ABS_MT_TOUCH_MAJOR的表示的功能,所以讲ABS_MT_TOUCH_MAJOR修改为ABS_MT_P 阅读详情

相关推荐

STM32 USB HID触摸屏:从单点到多点触控的安卓兼容性实战

本文详细介绍了STM32 USB HID触摸屏从单点到多点触控的技术实现与安卓兼容性实战。通过解析HID报告描述符、设计数据包格式及优化安卓兼容性,解决了多点触控中的技术挑战,如Contact Identifier配置和坐标系映射问题。文章还提供了Windows与安卓双系统兼容方案及性能优化技巧,助力开发者快速实现高效稳定的多点触控功能。

weixin_33885676的博客 386

Android/Linux 系统添加对多点触摸屏的支持

    含有 HID 多点触摸控制器的触摸屏、触摸板在 Android 和 Linux 内核中都是由 "hid-multitouch" 驱动进行支持的。因此如果你的系统连接触摸屏没有反应,问题基本都出于驱动未加载或者与触摸屏的 VID 与 PID 不适配。以下分情形讨论:1、系统中已存在“hid-multitouch”驱动    若“hid-multitouch”驱动是以内核模块的方式存在于系统里...

SoldierJazz的专栏 5887

Android Studio笔记4.2 安卓触摸事件

了解安卓触摸动作熟悉触摸监听器与方法掌握单点触摸与多点触摸在Android系统中,触摸是用户最常用,最基础的交互方式,只有弄通触摸事件在系统中的传递处理机制才能更好地增强用户的交互体验。触摸事件是安卓应用十分常用的事件,可以分为单点触摸和多点触摸单点触控,只能识别和支持每次一个手指的触控、点击,若同时有两个以上的点被触碰,就不能做出正确反应。很多医院、图书馆等的大厅都有这种触控技术的电脑,支持触摸屏的手机、MP3、数码相机也多采用这种单点触控技术。

jjjhju的博客 1335

基于Android系统的多点触摸屏(MultiTouchScreen)驱动

理论:输入子系统由来  在Linux中, 应用层对于输入设备(鼠标、键盘、触摸屏等)的操作无非都是open、read、write、ioctl,然后调用驱动层的xxx_open、xxx_read、xxx_write、xxx_ioctl去操作具体的硬件输入设备。如果按照传统的思路,每个输入设备都按照这个套路写这些open、read等,是不是太过于累赘了。所以Linux就定义了一套标准,来标准化这些输入设

韩朋的博客 1万+

STM32 USB HID多点触摸屏:从单点到多点的安卓触控协议解析与实现

本文详细解析了STM32 USB HID多点触摸屏的技术实现,从单点到多点的安卓触控协议升级过程。通过HID报告描述符改造、数据包格式设计及安卓系统适配,帮助开发者掌握多点触控开发要点,解决常见兼容性问题。

weixin_34320159的博客 531

Xilinx SDK调试与FPGA硬件验证全流程解析

本文详细解析了从Vivado导出硬件到Xilinx SDK进行调试与FPGA硬件验证的全流程。重点阐述了正确导出包含bitstream的硬件平台、创建合适的SDK工程、配置Debug会话以编程FPGA,并介绍了串口验证、自定义IP测试以及使用ILA进行软硬件联合调试的高级技巧,帮助开发者高效完成FPGA系统的软硬件协同开发与问题排查。

weixin_28327051的博客 311

android4.0.3 多点触控

android上若想使屏幕同时监听到两个或者两个以上的手指触摸事件,那就要用到多点触控了,多点触控要求android sdk最低版本2.0。其实多点触控也没想象的那么难,难点就在操作的变换处理,例如,一个手指正在EVENT_MOVE的时候,另一个手指加入了触摸,这时,就要从单点状态转入多点状态的EVENT_MOVE,这时,第一个手指先移开与第二个手指先移开,状态又有所区别。。 多

baimingyong007的专栏 2242

从零到一:EHB-电机复合制动系统的Simulink仿真实战指南

本文详细介绍了EHB-电机复合制动系统在纯电动汽车中的Simulink仿真实战指南。通过系统概述、建模核心模块解析、控制策略开发及典型问题排查,帮助读者掌握从零到一的开发流程。重点讲解了液压子系统建模、电机再生制动模型及整车动力学集成,为开发者提供了一套完整的解决方案。

hh234的博客 1008

鼠标和按键在android 上的识别和区别

引子:   拿到一个蓝牙遥控器,连上后,按确认(OK)键的时候显示鼠标。导致遥控器不能正常使用。 测试过程:   1 换此蓝牙遥控器在其他产品上,并没出现鼠标。(由此richard 帮忙找到rk 代码加的东西,导致鼠标弹出)   2 借另外的蓝牙遥控器,在我们现有的遥控器上,也没出现鼠标。   3. 确认 OK 键的按键值(28, 232).分析徐工指出的 rk 的代码,发现在

PCWUNG的专栏 5119

西门子S7-1200与汇川SV660P伺服速度模式实战:从接线到编程全流程

本文详细解析了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的集成实战。内容涵盖从硬件接线、伺服参数关键设置(如电子齿轮比)、博图软件组态到PLC编程的全流程,并提供了故障排查与性能优化指南,帮助工程师快速实现精准、稳定的运动控制。

weixin_29248313的博客 487

5分钟搞定DataDome滑块验证码:最新Capsolver API实战教程(含代理配置)

本文提供了一份利用Capsolver API快速自动化破解DataDome滑块验证码的实战教程。文章深入剖析了DataDome验证码的环境指纹与行为分析机制,并重点详解了确保成功率的住宅代理配置、API集成步骤及令牌使用等核心环节,帮助开发者高效集成稳定可靠的自动化解决方案。

milk8的博客 494

android4.0.3多点触摸屏设备设置

修改内核配置HID文件的步骤 Device Drivers  --->     HID Drivers  --->         Specical HID drivers  --->             HID Multitouch panels 同时将idc文件关掉,如果你的触摸屏比较高级的话,有内置驱动的话,把自带的驱动也屏蔽掉 例如我修改我们的产品就是

雨焰的专栏 1626

CAD制图

CAD制图可以提高设计效率和准确性,并方便文档的存档和交流,是现代工程设计中不可或缺的一部分。·CAD三维开发是指使用计算机程序和工具来创建、编辑和操作三维模型、图形和设计的过程。它在工程、建筑、制造和游戏等领域广泛应用。CAD三维开发可能涉及到复杂的图形算法、性能优化、并行计算等方面的内容,因此需要深入学习和实践,以提高开发的效率和质量。

RZer的博客 1652

android触摸屏映射,解决android4.0 触摸屏分辨率映射不准

前言几个月以前升级了android4.0,在触摸屏这块一直有个令人头疼的问题,通常触摸屏的分辨率应该是根据当前屏幕分辨率而定。但android4.0上就有点奇怪,不管怎么换屏幕的分辨率,触摸屏始终有不准的情况。最近着手研究了这块,通过修改inputreader.cpp及 com_android_server_InputManager.cpp终于解决的触摸屏不准的问题。正文由于驱动是直接从andro...

weixin_39874350的博客 1023

【PLC】三菱PLC控件安装疑难解析:Error Number:-119的全面解决方案

本文针对三菱PLC控件安装过程中常见的Error Number:-119错误,提供了深度解析与实战解决方案。该错误通常源于Windows系统权限限制或文件冲突。文章从理解错误本质入手,逐步介绍了以管理员身份运行、手动注册DLL文件、采用新版环境搭配旧版控件的黄金组合以及系统环境修复等四大招法,帮助用户彻底解决这一安装难题,确保工控软件稳定运行。

jj890的博客 496

单细胞转录组数据分析中的基因ID注释转换问题:如何解决才能注释所有的UMIcount数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1126

在android 4.0上开发触摸设备驱动需要注意的几点

android 4.0已经渐渐流行,很多方案都已经基于其上,android 4.0的linux内核版本已经更新为linux 3.0,这个变化导致和内核直接接触的驱动需要或多或少的变化,以下描述的是触摸设备驱动的一些小变化: 1.当一个(这时候的情境应该是多点触摸的情况)手指或是触摸工具抬起(UP)时,他应该立即消失在多点出没的同步报告中,当所有的工具或手指抬起,驱动应该立即发送一个“空”同步

joard_yang的专栏 5404

Python爬虫实战:手把手教你园林植物分类全维度字典自动化采集实战!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 388

android4.0与2.3版本的触摸屏驱动调试注意

转自搜索到的一篇blog,他没有注明转载出处,我也没法写出处了,对原创作者隔空说一声抱歉。 android4.0与2.3版本的TP代码区别 在android2.3上调试TP时,只需要把linux驱动调通,android就可以正常使用了,而到android4.0上又有些不同了,针对linux驱动,需添加如下内容:     1、在手指按下时需调用如下函数上报Key Down:

joard_yang的专栏 8445

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android4.0触摸屏滑鼠模式解决方法-添加idc文件

最近在调试A10开发板-android4.0的触摸屏,因为最开始的时候只有鼠标管用,触摸屏是不管用的 当我们点击触摸屏的时候,终端是有数据显示的,但是就是在显示器上面没有响应操作 我们那时用的是触摸屏的接口是4pin连接线(专业术语不知道是什么),搞了很久也没高通,移植tslib什么的都做了 可以在移植过后,./ts_calibrate总是报No such file or direct

pan_jiewu的专栏 1260

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

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

Android HID触摸屏驱动怎么开发

Android HID触摸屏驱动怎么开发 公司的红外触摸屏要移植到Android平台上去,我们的设备需要发命令下去才会始动,然后返回触摸数据X,Y,需要把这些数据转化为屏幕位置,发送触摸消息给系统,实现触摸。 android 4.0已经渐渐流行,很多方案都已经基于其上,...

chuangxie5305的博客 733

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android4.0 TP多点变单点,单点变多点问题

由于某些IC的特性,当为多点时,默认靠近Y轴的点ID为ID0,这样就会造成当多点变单点时,单点失效,单点变多点时,会变成单点的划线动作。解决这个BUG的方法: 当按在触摸屏上的point数与上次的point数不同,就不上报此次坐标。这样就可以解决问题。  //fix one touch two touch issue if ( preFingerNum!=touchData.nFinger

yangyang 1284
下一篇: 以前的博客 忘记了密码,加个链接在此
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值