android6.0按键处理浅析

本文深入探讨了Android 6.0按键处理流程,从硬件配置到内核驱动,再到input子系统处理和input manager的事件派发。详细解析了按键中断处理、按键映射、输入事件的读取和转换,以及Android窗口系统如何接收和处理按键事件。
摘要由CSDN通过智能技术生成

 

 

处理流程及示意图:





1,硬件配置:

kernel-3.18\arch\arm\boot\dts\projectxxx.dts

&keypad {

         mediatek,kpd-key-debounce= <1024>;

         mediatek,kpd-sw-pwrkey= <116>;

         mediatek,kpd-hw-pwrkey= <8>;

         mediatek,kpd-use-extend-type= <0>;

         /*HWKeycode [0~71] -> Linux Keycode*/

         mediatek,kpd-hw-map-num= <72>;

// kpd-hw-init-map为硬件扫描的矩阵列表。跟具体硬件接法相关。即为linux_code

         mediatek,kpd-hw-init-map= <115 114 0 0 0 0 0 0 0 158 0 0 0 0 0 0 0 0 0 0 0 0 0 0

                                     00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

                                     00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >;

         mediatek,kpd-pwrkey-eint-gpio= <0>;

         mediatek,kpd-pwkey-gpio-din  = <0>;

         mediatek,kpd-hw-dl-key0= <0>;

         mediatek,kpd-hw-dl-key1= <1>;

         mediatek,kpd-hw-dl-key2= <8>;

         mediatek,kpd-hw-recovery-key= <0>;

         mediatek,kpd-hw-factory-key  = <1>;

         status= "okay";

};

 

硬件接法,软件注意各个IO的功能配置,以确保按键扫描时获取到正确的值。

2,kernel驱动:

按下按键后,会出发中断,然后进去中断处理程序中进行按键的扫描:

 

static void kpd_keymap_handler(unsignedlong data)

{

         inti, j;

         boolpressed;

         u16new_state[KPD_NUM_MEMS], change, mask;

         u16hw_keycode, linux_keycode;

 

         kpd_get_keymap_state(new_state);

 

         wake_lock_timeout(&kpd_suspend_lock,HZ / 2);

 

         for(i = 0; i < KPD_NUM_MEMS; i++) {

                   change= new_state[i] ^ kpd_keymap_state[i];

                   if(!change)

                            continue;

 

                   for(j = 0; j < 16; j++) {

                            mask= 1U << j;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值