在TP驱动中添加虚拟按键

我们知道android 5.0上层已经实现了虚拟按键功能,要使用只要打开就可以.
然而在TP驱动中你如何实现虚拟按键功能呢?我只需要指定虚拟按键位置,然后将这按键事件上报给上层,android上层会实现相应的按键功能.

1 .TP驱动中有个关键动作是按下和松开 .

    //0 按下 1 松开 
    static int Backkeydown=0;
    static int Homekeydown=0;
    static int Menukeydown=0;
    static int VolumeUpkeydown=0;
    static int VolumeDownkeydown=0;

   static const int  key_codes[] = {KEY_HOME,KEY_MENU,KEY_BACK,KEY_VOLUMEDOWN,KEY_VOLUMEUP};

   static const char *key_names[] = {"Key_Home", "Key_Menu", "Key_Back", "Key_Volumedown","Key_Volumeup"};

由于我们定义的是物理按键,我们需要指定物理按键的位置.

static void gtp_touch_down(struct goodix_ts_data* ts,s32 id,s32 x,s32 y,s32 w){
    if ( y > 1024 ) {
            if ( x < 40 && x > 0 ) {
                if(VolumeDownkeydown==0){
                      input_event(ts->input_dev, EV_KEY,KEY_VOLUMEDOWN, 1);
                      VolumeDownkeydown=1;
                      GTP_INFO("VolumeDown Key Press\n");
             }

         } else if ( x < 150 && x > 85 ) {
                if(VolumeUpkeydown==0){
                      input_event(ts->input_dev, EV_KEY,KEY_VOLUMEUP, 1);
                      VolumeUpkeydown=1;
                      GTP_INFO("VolumeUp  Key  Press\n");
            }

         } else if ( x < 340 && x > 308 ) {
                if(Backkeydown==0){
                    input_event(ts->input_dev, EV_KEY,KEY_BACK, 1);
                    Backkeydown=1;
                    GTP_INFO("Back Key Press\n");
           }

        }else if ( x < 450 && x > 405 ) {
                if(Homekeydown==0){
                    input_event(ts->input_dev, EV_KEY,KEY_HOME, 1);
                    Homekeydown=1;
                    GTP_INFO("Home Key Press\n");
           }

          }else if ( x < 550 && x > 480 ) {
                if(Menukeydown==0){
                    input_event(ts->input_dev, EV_KEY,KEY_MENU, 1);
                    Menukeydown=1;
                    GTP_INFO("Menu Key Press\n");
              }

            }
    }

在松开的方法中定义:

static void gtp_touch_up(struct goodix_ts_data* ts, s32 id){

if(VolumeDownkeydown==1)
{
    VolumeDownkeydown=0;
    input_event(ts->input_dev, EV_KEY, KEY_VOLUMEDOWN, 0);
    GTP_INFO("Volumedown Key release \n");
}
if(VolumeUpkeydown==1)
{
    VolumeUpkeydown=0;
    input_event(ts->input_dev, EV_KEY, KEY_VOLUMEUP, 0);
    GTP_INFO("Volumeup Key release \n");
}
 if(Backkeydown==1)
{
    Backkeydown=0;
    input_event(ts->input_dev, EV_KEY, KEY_BACK, 0);
    GTP_INFO("Back Key release\n");
}
if(Homekeydown==1)
{
    Homekeydown=0;
    input_event(ts->input_dev, EV_KEY, KEY_HOME, 0);
    GTP_INFO("Home Key release \n");
}
 if(Menukeydown==1)
{
    Menukeydown=0;
    input_event(ts->input_dev, EV_KEY, KEY_MENU, 0);
    GTP_INFO("Menu Key release \n");
}

 }

注意:上报事件的方法要和驱动一致,不然虚拟按键会太灵敏.

有帮助的话记得点个赞哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值