POWER KEY 的两种检测方法

芯片平台:mdm9x07

第一种方法当然是用 input 事件 event。

/dev/input/event0

测试代码如下:

#include "stdio.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>


int main()
{
	int keys_fd;	                 //按键句柄	


	struct input_event t;
      
    keys_fd = open("/dev/input/event0", O_RDONLY);

	if(keys_fd<=0)
	{
                printf("open /dev/input/event0 device error!\n");
		return 0;
	}

	while(1)
	{	
		
       if(read(keys_fd,&t,sizeof(t))==sizeof(t)) 
	  {
		  printf("hjb type:%d,coe:%d,value:%d,time: %d\n",t.type,t.code,t.value,t.time);
		 if(t.type==EV_KEY)			//获取的是按键消息
		{
			
			if(t.value==1)
			{	
				printf("key %d Pressed time: %d\n",t.code,t.time);
			}
			if(t.value==0)    //返回值是1或者0
   			    printf("key %d %s\n",t.code,(t.value)?"Pressed":"Released");     //1表按下,0表弹起
  		}
	}
	}	
	close(keys_fd);
	
        return 0;

}


第二种方法是利用  debugfs。

首先挂载 :

mount -t debugfs none /sys/kernel/debug

在 SBL 里找到

#define PON_BASE                           0x00000800
#define PMIO_PON_INT_RT_STS_ADDR           (PON_BASE      + 0x00000010)

那么确定了PMIC 寄存器地址了 0x00000800,那 PMIO_PON_INT_RT_STS_ADDR 是什么鬼?

被告知 PMIO_PON_INT_RT_STS_ADDR 是电源寄存器的状态 ,其值也可以判断电源按键是否按下,它地址是0x810.

echo 0x810 > /sys/kernel/debug/spmi/spmi-0/address	
cat /sys/kernel/debug/spmi/spmi-0/data				

就这样可以读出按键是否按下了,这种方法更适合那种拨动开关,结果如下:

/ # echo 0x810 > /sys/kernel/debug/spmi/spmi-0/address
/ # cat /sys/kernel/debug/spmi/spmi-0/data
00810 00
/ # cat /sys/kernel/debug/spmi/spmi-0/data
00810 04

当然也可以利用 debugfs 把PMIC 寄存器值全部读出来:

cd /sys/kernel/debug/spmi/spmi-0
echo 0x100 > count
echo 0x800 > address
cat data

debugfs真是个好东西,以后调试又多了一种方法了, 其实上篇 GPIO 里也用到了 debugfs,比如:

cat /sys/kernel/debug/gpio 


猜你喜欢

转载自blog.csdn.net/jin615567975/article/details/51456052
key