linux gpio key 实现方式_llinux gpio key 长按

113
114 home {
115 label = “GPIO Home”;
116 linux,code = <KEY_HOME>;
117 gpios = ;
118 debounce-interval = <15>;
119 };
120 };
121
122 key-xxx{
123 compatible = “gpio-keys”;
124 autorepeat;
125
126 pinctrl-names = “default”;
127 pinctrl-0 = <&xxx_key>;
128
129 reset {
130 label = “GPIO xxxx”;
131 linux,code = <KEY_1>;
132 gpios = <&xxxxx_ACTIVE_LOW>;
133 debounce-interval = <15>;
134 };
135 };

776 &pinctrl {
777
778 pinctrl-names = “default”;
781 buttons {
782 home_key: home-key {
783 rockchip,pins = <xxxx &pcfg_pull_up>;
784 };
785 pwr_key: pwr-key {
786 rockchip,pins = <xxxx &pcfg_pull_up>;
787 };
790 };


第二种dts写法



gpio-keys {
compatible = “gpio-keys”;
autorepeat;

      pinctrl-names = "default";                                                                                                         
      pinctrl-0 = <&s8_keys>;                                                                                                            
                                                                                                                                         
      power {                                                                                                                            
          gpios = <XXXXXX GPIO_ACTIVE_LOW>;                                                                                       
          linux,code = <KEY_POWER>;                                                                                                      
          label = "GPIO Key Power";                                                                                                      
          debounce-interval = <20>;                                                                                                      
      };                                                                                                                                 
                                                                                                                                         
     home {                                                                                                                             
          gpios = <YYYYY GPIO_ACTIVE_LOW>;                                                                                       
          linux,code = <KEY_HOME>;                                                                                                       
          label = "GPIO Key Home";                                                                                                       
          debounce-interval = <20>;                                                                                                      
      };                                                                                                                                 
  };

&pinctrl {
pinctrl-names = “default”;
buttons {
s8_keys: s8-keys {
rockchip,pins = <XXXX &pcfg_pull_up>,
<XXXXXXXX &pcfg_pull_up>;
};
}


1、节点名字为“gpio-keys”。  
 2、gpio-keys 节点的 compatible 属性值一定要设置为“gpio-keys”。  
 3、所有的 KEY 都是 gpio-keys 的子节点,每个子节点可以用如下属性描述自己:  
 gpios:KEY 所连接的 GPIO 信息。  
 interrupts:KEY 所使用 GPIO 中断信息,不是必须的,可以不写。  
 label:KEY 名字  
 linux,code:KEY 要模拟的按键可以直接填数字  
 可以直接填数字  
 gpio-key,wakeup:可以被唤醒  
 debounce-interval:消抖时间


以上就在linux driver端使能了key,接下来可以在hal层读取/dev/  
 /dev/input/eventX 读取key event的事件了


具体hal读取按键的几种方式,可看我的git源码  
 网上的 应用代码,没有select



#define RECOVERY_KEY “/dev/input/event2”
#define RECOVERY_KEY_CODE 115
#define RECOVERY_KEY_PRESS 0
void recovery_key_press_timer(int sig)
{
if(SIGALRM == sig)
{
printf(“alarm 6s.\n”);
}
return;
}
static void read_recovery_key_event()
{
int fd = -1, ret = -1;
struct input_event ev;
fd = open(RECOVERY_KEY, O_RDONLY);
if (fd < 0)
{
printf(“open RECOVERY_KEY event failed.\n”);
return;
}
memset(&ev, 0, sizeof(struct input_event));
ret = read(fd, &ev, sizeof(struct input_event));
if (ret != sizeof(struct input_event))
{
printf(“read RECOVERY_KEY event failed.\n”);
close(fd);
}
if( (RECOVERY_KEY_CODE == ev.code) && (RECOVERY_KEY_PRESS == ev.value) )
{
printf(“recovery-key press.\n”);
alarm(6);
}
else
{
printf(“recovery-key release.\n”);
alarm(0);
}
close(fd);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值