驱动层HOME按键的配置
来源:互联网 发布:数据字典是系统中各类 编辑:程序博客网 时间:2024/06/06 23:19
最近切换新base的时候遇到home按键功能错乱的问题,着实浪费了一些时间去找原因。下面简单说下分析的过程。
实验环境:
平台--展讯SC8810,LINUX 2.3.5
实验步骤:
1. 按照小板设计需求,正确配置HOME按键的行数和列数,采用的是矩阵键盘的设计模式。
2.开机测试,home键有音量下键的功能,偶现home键的功能。
3.和硬件的人员确保了硬件上没有问题。
4.抓log进行问题的分析。
实验内容:
1、通过adb抓取按键时的log分析抓取的键值(这里介绍两种方法):
1)第一种:开机后,利用usb连接到电脑,打开cmd,输入adb shell后若连接正常,输入cat /proc/kmsg即可抓取相应的log,按下HOME键:测得的log发现home的键值<4>[ 3403.651000] 115D、<4>[ 3404.102000] 65535D、<4>[ 3404.103000] 114D即音量上下键和错误值。
2)第二种:开机后,利用usb连接到电脑,打开cmd,输入adb shell后若连接正常,输入getevent即可。点击home键测得键值:
/dev/input/event0: 00010072 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event5: 0003 0000 00000017
/dev/input/event5: 0003 0001 00000016
/dev/input/event0: 0001007300000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event5: 0003 0000 00000017
/dev/input/event5: 0003 0001 00000016
由测得可知为十六进制的音量上下键的键值115、114.
通常在配置home键的功能时,会涉及到一下几个文件的设定。
2.code/customize/customer_cfg/sp6820gb_trout2/kernel/kpd/kpd_cfg.c文件
#define CUSTOM_KEYPAD_ROWS 7
#define CUSTOM_KEYPAD_COLS 7
用于定义矩阵键盘的行数和列数。
static const unsigned int sprd_keymap[] = {
// 0 row
KEYVAL(0, 0, ANDROID_KEY_VOLUME_DOWN),
KEYVAL(6, 0, ANDROID_KEY_HOME),
// 1 row
KEYVAL(1, 0, ANDROID_KEY_VOLUME_UP),
};
这个地方一定要配对,每个项目可能都会有所不同,具体参照小板原理图,或问硬件人员也可以。
3.code/customize/customer_cfg/sp6820gb_trout2/res/sprd-keypad.kl文件
#KEY_POWER
key 116 POWER WAKE
#KEY_VOLUMEUP
key 115 VOLUME_UP
#KEY_VOLUMEDOWN
key 114 VOLUME_DOWN
#KEY_HOME
key 102 HOME WAKE
102,114,115等值指的是键值,后面的WAKE表示该键有唤醒功能。
4.此外还要保证pinmap设定正确。code/customize/customer_cfg/sp6820gb_trout2/kernel/pinmap/pinmap_cfg.c文件中
MFP_CFG_X(KEYOUT0, AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_OE),
MFP_CFG_X(KEYOUT1, AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_OE),
MFP_CFG_X(KEYOUT2, AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),
MFP_CFG_X(KEYOUT3, AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),
MFP_CFG_X(KEYOUT4, AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),
MFP_CFG_X(KEYOUT5, AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),
MFP_CFG_X(KEYOUT6, AF0, DS1,F_PULL_NONE,S_PULL_ NONE,IO_ OE),
MFP_CFG_X(KEYOUT7, AF0, DS1,F_PULL_NONE,S_PULL_ NONE,IO_ OE),
MFP_CFG_X(KEYIN0, AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),
MFP_CFG_X(KEYIN1, AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),
MFP_CFG_X(KEYIN2, AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),
MFP_CFG_X(KEYIN3, AF0, DS1,F_PULL_UP,S_PULL_UP,IO_ IE),
MFP_CFG_X(KEYIN4, AF0, DS1,F_PULL_UP,S_PULL_UP,IO_ IE),
MFP_CFG_X(KEYIN5, AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),
MFP_CFG_X(KEYIN6, AF0, DS1,F_PULL_ UP,S_PULL_UP,IO_ IE),
MFP_CFG_X(KEYIN7, AF0, DS1,F_PULL_ UP,S_PULL_UP,IO_ IE),
是关于矩阵键盘行和列的设定
pinmap配置
#define MFP_CFG_X(pin, af, drv, func_updown, sleep_updown, io) \
(MFP_SET_ALL |\
(MFP_PIN(PIN_##pin) | MFP_##af | MFP_##drv |\
MFP_##func_updown | MFP_##sleep_updown| MFP_##io))
AF0~AF3用于选择pin的复用功能
DS指pin的驱动能力
F_PULL_NONE,F_PULL_UP,F_PULL_DOWN指在工作模式下pin的上拉和下拉等
S_PULL_NONE,S_PULL_UP,S_PULL_DOWN指在睡眠模式下pin的上拉和下拉等
IO_OE,IO_IE,IO_Z指在睡眠模式下的pin的输出,输入和高阻。
此次对于home键失效的问题,问题是在pinmap的配置上。之前的项目用的3行3列的矩阵键盘。而新base用的矩阵键盘是7行7列的。pinmap中后面的几行几列没有配置好。
- 驱动层HOME按键的配置
- 【Android N7.0】Framework层实现派发HOME按键到Application层的一种简单方案
- 关于使用 FLAG_HOMEKEY_DISPATCHED 标志在应用层截获 HOME 按键的说明
- 【驱动】GPIO 作为按键时的 设备树 配置
- mini2440的按键驱动
- mini2440的按键驱动
- OK6410的按键驱动
- Android有关Home按键的TYPE_KEYGUARD作用
- 解决iPhone、iPad的home按键不灵敏
- Android_监听Home按键的封装
- wince 下的按键驱动
- 按键中断的驱动代码
- 移植 tiny210 的按键驱动
- fl2440的按键button驱动
- platform下的按键驱动
- Android 按键处理(驱动层到上层)架构
- virtio驱动分析之libvirt层的参数配置
- virtio驱动分析之libvirt层的参数配置
- JSU 2013 Summer Individual Ranking Contest - 6
- mac lion下的emacs使用
- 数据结构--插入排序
- Log4j使用总结
- 安装rpm包出现信赖错误(/bin/sh)
- 驱动层HOME按键的配置
- js的值传递和引用传递
- android:onTouch()和onTouchEvent()的区别?看完这篇文章就知道了
- 如何调试SIGABRT和EXC_BAD_ACCESS引起的crash
- hdu 1087 Super Jumping! Jumping! Jumping! ( 求序列的最大上升序列 )
- 关于shared pool的深入探讨
- MyEclipse中快捷键的使用
- SPring Bean注入 job
- 【Lucene3.6.2入门系列】第09节_高级搜索之自定义QueryParser