android power key 长按8s 关机

2024-01-02 18:48
文章标签 android key 关机 power 8s

本文主要是介绍android power key 长按8s 关机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该功能是系统启动后,在任何情况下,长按power key 8s都能做到直接关机。因此在kernel中实现。

所有修改都在keypad driver中,如下文件。

mediatek\platform\mt6573\kernel\drivers\keypad\kpd.c:


#define FORCE_POWERKEY_SECONDS   8   //定义power key按键持续时间


struct timer_list timer;  


//定时器timer初始化

static int timer_init()  
{  init_timer(&timer);  timer.data= 5;  timer.expires = jiffies + (FORCE_POWERKEY_SECONDS*HZ);   timer.function = timer_function;  add_timer(&timer);  printk("<0>ziheng add_timer\n");  return 0;  
}  


//定时器timer退出

static void timer_exit()  

   del_timer(&timer);  


//定时器到时事件处理函数

static void timer_function(int para)  
{  timer_exit(); arch_reset(0, "charger");  //kernel强制关机接口
}  


按键时间在kpd_pwrkey_handler中处理,kpd_pwrkey_handler是一个tasklet,用于power key的按键中断下半部处理。


static void kpd_pwrkey_handler(unsigned long data)
{

   bool pressed;   u8 old_state = kpd_pwrkey_state;   kpd_pwrkey_state = !kpd_pwrkey_state;   pressed = (kpd_pwrkey_state == !!KPD_PWRKEY_POLARITY);   if (kpd_show_hw_keycode) { printk(KPD_SAY "(%s) HW keycode = using EINT\n",         pressed ? "pressed" : "released");

         }
    #ifdef  FORCE_POWERKEY if(pressed == 1){printk("<0> kpd_pwr_handler press 1\n");  timer_init();}else if(pressed == 0){printk("<0> kpd_pwr_handler press 0\n");  timer_exit();

}

    #endif

  kpd_backlight_handler(pressed, KPD_PWRKEY_MAP);   input_report_key(kpd_input_dev, KPD_PWRKEY_MAP, pressed);   kpd_print("report Linux keycode = %u\n", KPD_PWRKEY_MAP);   /* for detecting the return to old_state */   mt65xx_eint_set_polarity(KPD_PWRKEY_EINT, old_state);   mt65xx_eint_unmask(KPD_PWRKEY_EINT);

}

这篇关于android power key 长按8s 关机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563339

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

SQL 外键Foreign Key全解析

《SQL外键ForeignKey全解析》外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(PrimaryKey)或唯一约束(UniqueCo... 目录1. 什么是外键?​​ ​​​​2. 外键的语法​​​​3. 外键的约束行为​​​​4. 多列外键​

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel