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数据... 阅读详情

相关推荐

Python爬虫获取Shopee店铺的所有商品?

通过上述代码示例,我们可以轻松实现获取Shopee店铺所有商品信息的功能。Python爬虫不仅具有强大的功能和稳定性,还可以通过丰富的库支持实现高效的数据抓取和解析。希望这篇文章能为你提供一些启发和帮助。如果你对爬虫开发有更多兴趣,可以尝试探索更复杂的功能,如多线程爬取、数据可视化等。如果你在实践中遇到任何问题,欢迎随时交流和讨论。让我们一起用技术的力量,解锁更多可能!

2401_87195067的博客 1543

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

TP 跟读

wzf_Cql 2225

UE4 专用服务器搭建(UE4.27为例)

专用服务器、DS服务器

mimo134的博客 2775

在TP驱动中添加虚拟按键

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

GUOmingbao博客 1402

Ubuntu安装pytorch3d的最便捷方法【原创】

Ubuntu安装pytorch3d的最便捷方法

qq_54900679的博客 2924

Google OR-Tools的CP-SAT求解器,为什么比传统线性规划更适合你的组合优化问题?

本文深入解析Google OR-Tools中的CP-SAT求解器为何比传统线性规划更适合解决组合优化问题。CP-SAT融合约束规划与可满足性理论,原生支持复杂逻辑约束和离散决策,在物流、生产调度等领域展现出显著优势。通过技术对比和实战案例,展示CP-SAT在处理高组合复杂度问题时的卓越性能。

weixin_28700593的博客 925

tp虚拟按键的添加--android

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

1039

FastAPI + LLM 实战:5分钟搞定本地模型API服务部署(含避坑指南)

本文详细介绍了如何使用FastAPI和LLM(大语言模型)快速部署本地API服务,涵盖环境准备、模型集成、性能优化及避坑指南。通过实战示例,帮助开发者在5分钟内完成从零到生产的部署过程,提升AI应用开发效率。

weixin_29062963的博客 103

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

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

duanyu010 280

STM32F103ZET6驱动57闭环步进电机(连线+代码)

一、设备: 1. STM32F103开发板 (普中F103的板子) 2. 57闭环电机带驱动 3. 24V/3A的直流电源,用于给电机驱动供电 简单说明:使用Keil5编程,主要使用了PWM波,外部中断和时间中断,按键控制电机使能和脱机并且控制PWM的周期,调节周期即调节电机的转速。 二、STM32开发板与电机驱动的连线: 1.PUL-、ENA-、DIR-与STM32的连接方法: 可以参考CSND的这个链接中的说明,使用共阴极接法:STM32F407-用TB6600驱动器驱动57步进电机(代码

baidu_39071234的博客 7430

HTML炫酷烟花④(完整代码)

HTML语言实现炫酷烟花的完整代码。

AIGC 9万+

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

NEU-DET 冷轧钢缺陷检测:基于 YOLOv8 的目标检测与可视化 UI 实现

冷轧钢的生产过程中,由于设备故障、工艺问题或者人为因素,钢板表面可能会出现多种缺陷,如划痕、裂纹、孔洞等,这些缺陷会严重影响钢材的质量。它比之前的版本(如 YOLOv5、YOLOv4)在速度和精度上都有显著提升,并且对硬件要求较低,适合进行工业界面和嵌入式系统的应用。这些版本相较于更大型的模型(如 YOLOv8x)具有更快的推理速度和较低的资源占用,适合工业生产线中的实时应用。通过将训练好的模型部署到工业生产线摄像头中,我们可以实现实时的缺陷检测,极大地提升生产效率和产品质量。

YOLO 737

Android tp的虚拟按键处理

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

lqxandroid2012的专栏 1437

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

echojiangyq的专栏 1507

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

添加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、付费专栏及课程。

余额充值