首先需要一个能够接收广播的APP
然后需要自定义一个按键,通过GPIO中断触发键值
一、在kernel-3.18/drivers/input/keyboard/mediatek/kpd.c中注册中断
1.声明函数,定义命名
#ifdef CONFIG_KPD_HOMEKEY_USE_EINT
int home_key_irq_num;
static u8 kpd_homekey_state = !KPD_HOME_POLARITY;
static void kpd_homekey_handler(unsigned long data);
static DECLARE_TASKLET(kpd_homekey_tasklet,kpd_homekey_handler,0);
#endif

2.注册中断,定义响应条件

#if defined(CONFIG_KPD_HOMEKEY_USE_EINT)
home_key_irq_num = mt_gpio_to_irq(KPD_HOME_EINT_PIN);
printk(“qzg test home irq number = %d+++++++++\n”,home_key_irq_num);
mt_gpio_set_debounce(KPD_HOME_EINT_PIN,KPD_HOME_DEBOUNCE_CN);

ret = request_irq(home_key_irq_num,kpd_homekey_eint_handler,IRQ_TYPE_EDGE_FALLING|IRQ_TYPE_EDGE_RISING,"H_key",NULL);//边沿触发
if(ret > 0){printk("qzg test home key irq request failed+++++++++++++++++++++++\n");
}else{__set_bit(KPD_HOME_MAP,kpd_input_dev->keybit);enable_irq(home_key_irq_num);
}

#endif

3.上报键值
#ifdef CONFIG_KPD_HOMEKEY_USE_EINT
void kpd_homekey_handler_hal(unsigned long data){
bool pressed;
u8 old_state = kpd_homekey_state;
kpd_homekey_state = !kpd_homekey_state;
pressed = (kpd_homekey_state == !!KPD_HOME_POLARITY);
if(kpd_show_hw_keycode)
kpd_print(KPD_SAY “(%s) HOME HW keycode = using EINT\n”, pressed ? “pressed” : “released”);

pressed = mt_get_gpio_in(KPD_HOME_EINT_PIN);     //hw++
if (pressed ==0 ) //down{input_report_key(kpd_input_dev,KPD_HOME_MAP,!pressed);}
else if (pressed ==1 ) //up {;input_report_key(kpd_input_dev,KPD_HOME_MAP, !pressed);}      input_sync(kpd_input_dev);printk("+_+_+_+_+__+_++_ old_state = %d,pressed = %d,!!KPD_HOME_POLARITY = %d\n",old_state,pressed,!!KPD_HOME_POLARITY);enable_irq(home_key_irq_num);

}

static void kpd_homekey_handler(unsigned long data)
{
kpd_homekey_handler_hal(data);
}
static irqreturn_t kpd_homekey_eint_handler(int irq, void *dev_id)
{
disable_irq_nosync(home_key_irq_num);
tasklet_schedule(&kpd_homekey_tasklet);
return IRQ_HANDLED;
}
#endif

二、修改DWS将相应GPIO设置为中断管脚
[kernel层]
kernel-3.18/drivers/misc/mediatek/dws/mt6735/miki8735b_h6.dws
[preload层]
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/miki8735b_h6/dct/dct/codegen.dws
[lk层]
vendor/mediatek/proprietary/bootable/bootloader/lk/target/miki8735b_h6/dct/dct/codegen.dws
[custom层]
vendor\mediatek\proprietary\custom\t51_8735a_64_bsp\kernel\dct\dct\codegen.dws

三、然后再device/mediateksample/t51_8735a_64_bsp/mtk-kpd.kl 中定义对应键值,同时在
frameworks/base/core/java/android/view/KeyEvent.java 等(在keyevent文件中会有说明其他文件的位置) 文件中增加对应匹配的键值。
如果键值列表不匹配则会出现按键失灵错乱的后果。

四、现在就能通过ADB查看是否有键值上报了,有键值上报之后只需要framework层增加广播操作就行了。
在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java中增加广播行为。

public class PhoneWindowManager implements WindowManagerPolicy{
//增加广播声明
static public final String ACTION_KEYEVENT_KEYCODE_UHF_DOWN = “com.android.action.keyevent.KEYCODE_KEYCODE_UHF_DOWN”;
static public final String ACTION_KEYEVENT_KEYCODE_UHF_UP = “com.android.action.keyevent.KEYCODE_KEYCODE_UHF_UP”;
}

public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {

//定义广播行为
else if(keyCode == KeyEvent.KEYCODE_UHF&&down){

  •                   mContext.sendBroadcast(new Intent(ACTION_KEYEVENT_KEYCODE_UHF_UP));    //down-->按下 -->UHF UP-->START
    
  •                   Log.i("ll","zzzzzzzzzzzzzzzzzzzzzzUHF STARTzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\n");
    
  •                   return 0;
    
  •           }else if(keyCode == KeyEvent.KEYCODE_UHF&&up){
    
  •                   mContext.sendBroadcast(new Intent(ACTION_KEYEVENT_KEYCODE_UHF_DOWN));    //up-->松开 -->UHF DOWN-->STOP
    
  •                    Log.i("ll","zzzzzzzzzzzzzzzzzzzzzzUHF STOPzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\n");}
    

}

附:
注意所用版本和项目使用的KL文件,在adb shell中进入system/usr/keylyout/可以看到所用的KL,可以修改确认使用的KL
一般定义在kpd.c 的新按键会使用mtk-kpd.kl,也就是注册input设备为mtk-kpd的会使用mtk-kpd.kl
新增加设备名称的时候一般会使用generic.kl和qwerty.kl
generic.kl 和qwerty.kl 在alps/frameworks/base/data/keyboards/
mtk-kpd.kl在mediatek/config//

MTK 8735A 8.1 自定义按键向APP发送广播相关推荐

  1. 事件——事件绑定||事件函数传参||事件修饰符||按键修饰符||自定义按键修饰符

    事件绑定 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8& ...

  2. vue 自定义按键/指令/过滤器

    自定义过滤器 语法 Vue.filter("过滤器1名称",function('原数据','arg1','arg2'){return 过滤数据; })Vue.filter(&quo ...

  3. android 自定义标签导航栏,自定义导航栏app下载-自定义导航栏(Custom Navigation Bar) 安卓版v0.4.3-PC6安卓网...

    自定义导航栏(Custom Navigation Bar)app是款非常好用的实用工具,自定义导航栏能让你自己设置个性的导航栏,再也不用为单调的导航栏而发愁,独特且唯一,感兴趣的朋友就来下载自定义导航 ...

  4. Android给自定义按键添加广播和通过广播给当前焦点输入框赋值

    一.给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/ ...

  5. 自定义按键_DNF手游:策划宣布新增自定义按键布局,期待手游新版本的到来

    地下城与勇士手游在按键布局上将有所调整,相信很多玩家在体验DNF手游的同时,也会发现游戏中目前还存在的一些问题,因为现在是体验服版本,并不代表正式服的品质,玩家们在游戏中遇到的困难与问题,都会在每一次 ...

  6. qtscrcpy自定义按键_按键映射说明.md

    # 自定义按键映射说明 按键映射文件为json格式,新增自己的按键映射文件需要放在keymap目录中才可以被QtScrcpy识别. 按键映射文件的具体编写格式下面会介绍,也可以参考自带的按键映射文件. ...

  7. 自定义计算器 android,自定义公式计算app下载

    自定义公式计算器是非常强大的一款计算器软件,可以帮助大家计算各种函数,还能够自定义公式进行保存,便于以后的计算:软件包含了科学计算器的所有功能,而且没有广告,非常的方便和强大,喜欢的朋友可以到当易网下 ...

  8. Android 自定义焦点框,Android给自定义按键添加广播和通过广播给当前焦点输入框赋值...

    一.给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/ ...

  9. Vue 自定义按键修饰符对应表

    Vue 自定义按键修饰符对应表 按键 键码 8 BackSpace 9 Tab 12 Clear 13 Enter 16 Shift 17 Ctrl 18 Alt 19 Pause 20 Caps_L ...

最新文章

  1. 【python语言基础】疑难点整理2
  2. 成本费用跨年取得发票的财务、税务处理
  3. POJ - 1655 Balancing Act(树的重心)
  4. php chmod 777 chown,linux命令中chown与chmod的区别
  5. .NET Core全Linux开发体验分享
  6. ssl2646-线段树练习3【线段树】
  7. 新商业蓝皮书2021
  8. 【Clickhouse】Too many partitions for single INSERT block (more than 100)
  9. 剑指offer——8.二叉树的下一个节点
  10. 如何在iPhone、iPad和Mac上查看照片的EXIF数据?
  11. Nginx教程1:基本概念
  12. matlab写实对角矩阵,Matlab对角矩阵
  13. Gossip 协议简介
  14. 类似于talkingdata的灵动功能的实现
  15. 代码统计工具实测点评
  16. iPad 手指触摸与PC鼠标事件
  17. java中字段可以取名is开头吗
  18. MIT研究人员称他们解决了数据中心网络延迟问题
  19. numpy 对矩阵,数组的操作
  20. hdu1240题解与思考 Asteroids!

热门文章

  1. iOS调用QQ客户端,发起临时会话
  2. SpringBoot返回date日期格式化,解决返回为TIMESTAMP时间戳格式或8小时时间差
  3. 软考-信息安全工程师(汇总1000题)
  4. 图形图形处理方面的一位微软专家的主页,
  5. 电脑桌面宠物-bango cat
  6. python破解md5_python怎么使用md5加密解密
  7. mocha ReferenceError: describe is not defined 问题解决
  8. password has expired问题
  9. 理想汽车下“神坛”:抛弃对混动的执念,不得不转身?
  10. sql dateadd函数_什么是SQL Server DATEADD()函数?