Android系统添加key和keypad
alps\mediatek\source\dct\Keypad_YuSu.cmp中添加新键,如SMS快捷键
KEY_SYM
KEY_SMS
KEY_0
2.打开DCT tool 在keypad矩阵中在相应定义的按键位中添加新按键,如SMS,然后Save
3.修改linux 键盘码文件input.h
由于preloader\uboot\kernel\factory 等情况分开使用,相应的文件路径下的input.h都应该修改为新按键增加键码值
kernel\include\linux\input.hbionic\libc\kernel\common\linux\input.hexternal\kernel-headers\original\linux\input.hexternal\qemu\linux_keycodes.hmediatek\plaform\mt6575\preloader\src\drivers\inc\linux\input.hMediatek\plaform\mt6575\uboot\inc\linux\input.h
#define KEY_SMS 252
4.增加keypad layout文件键盘映射,linux和android key映射
mediatek\config\<project name>\mt6575-kpd.kl
如:
key 252 SMS其中252 是linux键码,SMS是android识别key值 如果是需要唤醒系统,还需要增加WAKE如果新按键是全键盘的一些生僻字符,修改: mediatek\config\<project name>\mt6575-kpd.kcm
5.修改Java识别keycode
framework/base/include/ui/KeyCodelabels.h
KEYCODES数据结构后面增加
{"SMS",220}
framework/base/native/include/android/KeyCodes.h
在按键定义项增加AKEYCODE_SMS = 220;
6.修改Java 键盘事件
framework/base/core/java/android/view/keyevent.java
/**
*@hide
*/
public static final int KEYCODE_SMS =220;
最后的按键为新增的
private static final int LAST_KEYCODE ==KEYCODE_SMS;
以上/**/注释的code是android 非开放API或变量定义的时候,需要添加Java Doc的识别,否则要运行make update-api才能build通过.
如果是系统按键,修改framework/base/libs/ui/input.cpp
isSystemKey()增加case AKEYCODE_SMS:
7.修改XML文件描述符framework/base/core/res/res/values/attr.xml
<enum name="KEYCODE_SMS" value="220" />
8.增加测试验证log在android
framework\base\policy\src\com\android\internal\polidy\impl\phoneWindowManager.java
在interceptKeyBeforeDispatching()增加
if(keycode== KeyEvent.KEYCODE_SMS){
log.d(TAG, "interceptKeyTi KEYCODE_SMS keyCode="+ keyCode + " down=" + down + "
repeatCount=" + repeatCount + “ keyguardOn=” + keyguardOn + “ mHomePressed=” +
mHomePressed + “ cancled=” + canceled)
9.增加按键全局功能响应:
framework\base\policy\src\com\android\internal\polidy\impl\phoneWindow.java
分别在onKeyDown()、onKeyUp()增加对应代码
if(keycode== KeyEvent.KEYCODE_SMS){}
在初始化或是没有按键的情况下,ROW设置为输出,COL设置为输入。
BB芯片的内部设有一个按键中断,在没有任何按键的情况下,所有CLO线为高电平,ROW线为低电平,一旦有按键按下,比如key10(ROW1,COL2)有按下,由于COL2线与ROW1线直接相连,COL2线即被拉低,只要COL线有被拉低的,内部按键中断便会响应,内部按键中断产生后,BB就知道有按键产生,这时就进行按键扫描,判断出事哪个按键按下,然后进行相应的处理。
中断产生后,BB先发出消息将所有COL线置高,所有ROW线置低,扫描COL线,比如key10(ROW1,COL2)有按下,会扫描到COL2被拉低;再将将所有ROW线置高,所有COL线置低,扫描ROW线,比如key10(ROW1,COL2)有按下,会扫描到ROW1被拉低;那么COL2和ROW1组合起来就知道哪个按键按下了。
但是实际上按键中断产生后,扫描过程已经在BB内部迅速完成,然后把相应的按键位置用寄存器保存起来。每个寄存器16位,每一位代表一个按键,那么总共53个按键,需要4个寄存器去保存。
寄存器的每个位对应一个按键,默认为1,当有按键按下,那么相应位置0。然后系统去读这四个寄存器,就能知道是哪一个按键按下。
三.添加矩阵键盘



temp_reg &= ~(0x1); //我们这里single
mt_set_gpio_mode(COL_REG[i], ((GPIO_MODE[i] >> 4) & 0x0f));
mt_set_gpio_dir(COL_REG[i], 0);
mt_set_gpio_pull_enable(COL_REG[i], 1);
Android系统添加key和keypad的更多相关文章
- android系统添加预置APP(so库自动释放)
将APK直接放入系统目录中,会导致APK找不到so文件.正常情况下的安装是使用PackageManager,它会将so文件拷贝到系统读取的so目录(system/lib或system/lib64)下, ...
- Android 系统添加SELinux权限
本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=11185476 CPU:RK3288 系统:Android 5.1 SEL ...
- 第一章Android系统移植与驱动开发概述--读书笔记
以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...
- Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
今天要说的是为Android设备添加重启.飞行模式.静音模式按钮,客户需求中需要添加这项功能,在长按电源键弹出的菜单中没有这些选项,谨以此文记录自己添加这个功能的过程. 首先找到长按电源键弹出的对话框 ...
- 嵌入式linux和嵌入式android系统有什么区别和联系?
转自:http://bbs.eeworld.com.cn/thread-430437-1-1.html 这个问题很多人问,尤其是初入嵌入式的菜鸟.其实大家都认为android是java,已经不是lin ...
- android系统release签名
转自:http://blog.csdn.net/yangkai6121/article/details/38682321 为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make ...
- Android系统的五种数据存储形式(一)
Android系统有五种数据存储形式,分别是文件存储.SP存储.数据库存储.contentprovider 内容提供者.网络存储.其中,前四个是本地存储.存储的类型包括简单文本.窗口状态存储.音频视频 ...
- Android下添加新的自定义键值和按键处理流程
Android下添加新的自定义键值和按键处理流程 说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我 ...
- [原创]Android系统中常用JAVA类源码浅析之HashMap
由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...
随机推荐
- 微信小程序UI自动化:实践之后的记录01-选择工具/框架
目录 1. 前言 2. 工具/框架/库选择 2.1 miniprogram-automator官方介绍(摘自官方哈) 小程序自动化 特性 2.2 minium官方介绍 特性 3. 如何选择 4. 对应 ...
- python如何连接数据库操作?
1.首先导入模块(提前pip安装) import pymysql ; 2.打开数据库连接 db = pymysql.connect("localhost", "us ...
- Luogu P3262 [JLOI2015]战争调度
题意 给定一棵高度为 \(n\) 的完全二叉树,可以将节点设置成两种状态.如果某个叶子 \(x\) 的状态为 \(i\) 同时他的某个祖先也为 \(i\),那么这个叶子就会对祖先产生 \(f_{x,i ...
- 2.3 spring5源码系列---内置的后置处理器PostProcess加载源码
本文涉及主题 1. BeanFactoryPostProcessor调用过程源码剖析 2. 配置类的解析过程源码 3. 配置类@Configuration加与不加的区别 4. 重复beanName的覆 ...
- bat批处理常用脚本
windows下有很多场景需要编写批处理来解决问题,跟定时任务相结合使用更佳. 1.创建文件,md,mkdir都可以进行文件创建 set AwrPath=D:\OracleTabChk if not ...
- Learn day10 锁
1.锁 # ### 锁 from multiprocessing import Lock,Process import json,time """ # 创建一把锁 loc ...
- dup与dup2
dup与dup2 #include <unistd.h> int dup(int oldfd); /* oldfd: 要复制的文件描述符 返回值: 新的文件描述符 dup调用成功: 有两个 ...
- C/C++模运算(正负整数)
模运算 模运算:又称为取余运算 正整数的模运算 对于正整数a,b 如果\(a=q\times b+r\)其中\(0\le r < b\) 则有\(a \bmod b=r\)即 \(a\%b=r\ ...
- 【SpringCloud】08.客户端负载均衡器:Ribbon
客户端负载均衡器:Ribbon Ribbon实现软负载均衡核心: 服务发现 :依据服务的名字,把该服务下所有的实例都找出来 服务选择规则:依据规则策略,如果从多个实例中,选出有效的服务 服务监听:检测 ...
- Manacher (马拉车) 算法:解决最长回文子串的利器
最长回文子串 回文串就是原串和反转字符串相同的字符串.比如 aba,acca.前一个是奇数长度的回文串,后一个是偶数长度的回文串. 最长回文子串就是一个字符串的所有子串中,是回文串且长度最长的子串. ...