android TP虚拟按键

TP虚拟按键部分相关调试经验 1、搜索上层log Main.log: MotionEvent { action=;                                  //A区touch事件 KeyEvent { action=action=ACTION_UP,keyCode=KEYCODE_BACK     //虚拟按键事件 2、坐标信息路径 虚拟按键的坐标信息写在/sys/boar 阅读详情

在TP的driver中,报虚拟按键的方法常见的有两种:

1.直接报键值(kernel的)

2.报一个坐标,上层通过KL的解析来判定是哪个键。


下面说下第二种:


TP的kl被存放在/sys/board_properties/virtualkeys.devicename中,pull出来后可以看看内容:

0x01:139:100:900:40:60:0x01:158:400:900:40:60

可以发现就是在驱动代码中写的范围,分别是中心点X,中心点Y,宽度和高度,其实就是一个矩形区域,以X,Y为中心点,分别延伸 w/2, h/2。

4.0上对此kl的解析是在virtualkeymap.cpp中:

     do {
                String8 token = mTokenizer->nextToken(WHITESPACE_OR_FIELD_DELIMITER);
                if (token != "0x01") {
                    LOGE("%s: Unknown virtual key type, expected 0x01.",
                          mTokenizer->getLocation().string());
                    return BAD_VALUE;
                }

                VirtualKeyDefinition defn;
                bool success = parseNextIntField(&defn.scanCode)
                        && parseNextIntField(&defn.centerX)
                        && parseNextIntField(&defn.centerY)
                        && parseNextIntField(&defn.width)
                        && parseNextIntField(&defn.height);
                if (!success) {
                    LOGE("%s: Expected 5 colon-delimited integers in virtual key definition.",
                          mTokenizer->getLocation().string());
                    return BAD_VALUE;
                }

0X01是标志位,接下来的一位是scancode,再接下来就是xywh。

需要注意的是实际的范围是[x-w/2,x+w/2]  ,[y-h/2,y+h/2].



2.3.5上是在inputmanager.java中getVirtualKeyDefinitions方法中解析的:


  try {
                FileInputStream fis = new FileInputStream(
                        "/sys/board_properties/virtualkeys." + deviceName);
                InputStreamReader isr = new InputStreamReader(fis);
                BufferedReader br = new BufferedReader(isr, 2048);
                String str = br.readLine();
                if (str != null) {
                    String[] it = str.split(":");
                    if (DEBUG_VIRTUAL_KEYS) Slog.v(TAG, "***** VIRTUAL KEYS: " + it);
                    final int N = it.length-6;
                    for (int i=0; i<=N; i+=6) {
                        if (!"0x01".equals(it[i])) {
                            Slog.w(TAG, "Unknown virtual key type at elem #"      + i + ": " + it[i] + " for device " + deviceName);
                            continue;
                        }
                        try {
                            VirtualKeyDefinition key = new VirtualKeyDefinition();
                            key.scanCode = Integer.parseInt(it[i+1]);
                            key.centerX = Integer.parseInt(it[i+2]);
                            key.centerY = Integer.parseInt(it[i+3]);
                            key.width = Integer.parseInt(it[i+4]);
                            key.height = Integer.parseInt(it[i+5]);
                            if (DEBUG_VIRTUAL_KEYS) Slog.v(TAG, "Virtual key "
                                    + key.scanCode + ": center=" + key.centerX + ","  + key.centerY + " size=" + key.width + "x"
                                    + key.height);
                            keys.add(key);
                        } catch (NumberFormatException e) {
                            Slog.w(TAG, "Bad number in virtual key definition at region "
                                    + i + " in: " + str + " for device " + deviceName, e);
                        }
                    }
                }
                br.close();   } catch (FileNotFoundException e) {
                Slog.i(TAG, "No virtual keys found for device " + deviceName + ".");
            } catch (IOException e) {
                Slog.w(TAG, "Error reading virtual keys for device " + deviceName + ".", e);
            }
            
            return keys.toArray(new VirtualKeyDefinition[keys.size()]);
        }

实际是在inputread中使用:

 TouchInputMapper::configureVirtualKeysLocked()方法中会计算出每个虚拟按键对应的矩形范围,并将scancode转换成keycode。


3TP调试 一:基础知识     Kernel 通过input 子系统与Android交互,每当我们点击屏幕或抬起都会产生中断,     每当kernel收到中断会通过i2c总线读取TP控制器产生的坐标数据,kernel就会通过input系统上报给android层, android层会完成相应的动作。     1. 硬件管脚:         SCL0: IIC 时钟引脚         SDA0:IIC数据... 阅读详情

相关推荐

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码1.Win10系统配置OpenPose1.7.0的Python API 本人最近在研究基于骨架的动作识别方法,有幸看到端到端的ST-GCN算法,于是决定自己复现一下。(具体原理这里不介绍,大家自行查阅,比如Openpose是个啥?ST-GCN又是个啥?) 1.Win10系统配置OpenPose1.7.0的Python API 安装步骤: (1) ...

QIANFANGshiwo的博客 3040

GT928 TP驱动跟读及虚拟按键上报解析

TP 跟读

wzf_Cql 2225

嘉立创封装图下载后必做的3步优化(附批量删除机械层技巧)

本文针对从嘉立创下载的封装图,系统讲解了三步核心优化流程,以解决其直接使用时的常见问题。重点介绍了如何高效批量删除冗余的机械层,避免制造错误;并详细说明了规范丝印层间距、统一焊盘命名等关键步骤,帮助工程师将第三方封装转化为可靠、合规的设计资源,从而提升PCB设计效率与文件质量。

weixin_29227585的博客 433

在TP驱动中添加虚拟按键

我们知道android 5.0上层已经实现了虚拟按键功能,要使用只要打开就可以. 然而在TP驱动中你如何实现虚拟按键功能呢?我只需要指定虚拟按键位置,然后将这按键事件上报给上层,android上层会实现相应的按键功能.1 .TP驱动中有个关键动作是按下和松开 . //0 按下 1 松开 static int Backkeydown=0; static int Homekey

GUOmingbao博客 1402

CXL Virtual Hierarchy (VH) Enumeration理解

在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。

Summer的博客 1002

实战指南!基于STM32的智能环境监测系统(附完整代码+硬件设计+云端对接)

本文提供了一份基于STM32的智能环境监测系统完整实战指南。详细讲解了从硬件选型、电路设计、传感器驱动到数据采集、本地报警逻辑,以及通过ESP8266模块对接OneNET物联网平台实现数据上云的全过程。项目涵盖嵌入式开发与物联网应用核心技能,并提供了多种手机端数据展示方案,非常适合课程设计或毕业设计参考。

weixin_29193359的博客 352

tp虚拟按键的添加--android

在很多TP(Touch Panel)来说,底下的虚拟按键有两种方式来处理:   1,在TP的driver里面添加对区域的判断,及在TP的input上报时,对其进行检测;   2,就是在sys/board_properties/下创建一个叫virtualkeys.*,*表示你自己命令;这样在frameworks/base/services/input下的文件EventHub.cpp中有对这个节点

1039

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题!

你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。

smart_boy__的博客 2958

[转载] [TouchPanel]TouchPanel的虚拟按键没有震感

  [FAQ06834] [TouchPanel]TouchPanel的虚拟按键没有震感 Platform:MT6575MT6577MT6589MT6572 Branch:ICSICS2JBJB2 FAQ Content 【问题描述】 Setting-&gt;情景模式-&gt;使能振动选项,TP虚拟按键无振动效果   【问题原因】  在Tou...

duanyu010 280

演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

演化算法1.概念2.解决的问题 1.概念 传统算法(如梯度下降法、爬山法)根据导数的性质决定迭代的方向;而演化计算是一组解在一起协同作用产生一个最优解。 2.解决的问题 预测优化:演化计算(蚁群算法、粒子群算法、遗传算法等) 解的聚散、多样性:通过多次聚散,尽快得出最优解(某个解不合要求,要能够发散出去) ...

dear_jing的博客 4162

YOLOv11涨点改进| CVPR 2026 | 全网独家首发、特征融合改进篇| 引入SRFusion 空间细化多级融合,含多种创新融合改进,涨点可直接发论文,适合裂缝图像检测,小目标检测任务高效涨点

🔥本文提出SRFusion空间细化多级融合模块,用于改进YOLOv11网络模型。该模块通过高分辨率特征引导低分辨率语义特征的融合,利用空间注意力机制对上采样后的特征进行加权细化,增强多尺度特征间的空间细节交互。SRFusion模块能够提升模型对目标区域的表达能力,有效改善小目标、密集目标及复杂背景场景下的检测效果,同时保持YOLOv11的高效性与实时检测性能。文章详细介绍了模块结构、实现原理、核心代码及在YOLOv11中的三种配置方法,为模型优化提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 148

MTK6739 Android Q 版本 TP虚拟按键无功能

新上的项目 MTK6739 Android Q 平台,按照以前Android版本的虚拟按键配置方法配置如下: #define key_1 -60,110 //auto define #define key_2 -60,165 #define key_3 -60,240 #define key_4 -60,315 #define key_5 -60,390 #define TPD_HA

yang_gong的博客 880

14、Java 中 TAF 和 FCF 的使用及 Oracle 数据库升级与迁移指南

本文详细介绍了Java中实现高可用性的TAF(透明应用故障转移)和FCF(快速连接故障转移)技术,以及如何将Oracle 9iR2 RAC环境升级到10gR2 RAC,并将数据从OCFS迁移到ASM。通过示例代码和操作步骤,帮助开发者和数据库管理员更好地应对数据库故障和数据迁移问题,提升系统的可用性和性能。

egg99的博客 110

Android tp的虚拟按键处理

Android tp的虚拟按键处理 现在在越来越多的Android的手机都是虚拟按键来操作,但是对于开发者来说可能会关心Android对虚拟按键如何处理的。对Linux熟悉的人可能会说,it's easy, 调用input_report_key()。OK,你说的没有错误,但是在android中,google让你对策略和驱动有了更加深入的了解。 APP------->      

lqxandroid2012的专栏 1437

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android tp的虚拟按键(virtual key)处理

Android tp的虚拟按键处理 现在在越来越多的Android的手机都是虚拟按键来操作,但是对于开发者来说可能会关心Android对虚拟按键如何处理的。对Linux熟悉的人可能会说,it's easy, 调用input_report_key()。OK,你说的没有错误,但是在android中,google让你对策略和驱动有了更加深入的了解。 APP------->       

echojiangyq的专栏 1507

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【TP调试】android虚拟按键无振动效果

1.在normal mode下,tp button也是和其它触摸事件一样,以坐标形式的input_event进行上报。在初始化时会通过tpd_button_setting()函数根据定义在tpd_custom_XXX.h文件中的配置信息将虚拟按键的坐标信息写在/sys/board_properties /virtualkeys.mtk-tpd中。工作时,tp driver将按下的点的坐标进行上报,

ruan200885的专栏 2467

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

添加Android4.4 tp的虚拟按键触摸震动反馈

android手机tp下面一般有三个按键,MENU

liujun502589075的专栏 2839
上一篇: android 自定义preference的属性
下一篇: Android Activity是怎么画出来的
有梦想的胖子
博客等级 码龄16年 51粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值