该功能是系统启动后,在任何情况下,长按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);

}

更多相关文章

  1. android有用代码片段(一)
  2. 用 Handler 轻松实现专属Android定时器
  3. Android(安卓)4.0 虚拟按键、手机模式、平板模式
  4. android定时任务的几种实现方式
  5. Android(安卓)4.2充电画面关键代码分析
  6. 在Android中创建一种新的输入法
  7. Android基于Socket无线遥控(2)--模拟触摸按键篇
  8. Android开发--事件的处理/按键按下,弹起,触摸事件等
  9. android定时器的两种方式的部分比较

随机推荐

  1. android 取手机号码
  2. Android多点触摸测试类
  3. Android(安卓)ScrollView 使用注意事项
  4. Android(安卓)sdk content loader 0% - m
  5. Android(安卓)Interview Questions & Ans
  6. Android(安卓)CLAT
  7. Android基础类之BaseAdapter
  8. Android中带分割线的九宫格
  9. android - 确认订单页面【仿】京东App
  10. Android(安卓)TextView font