android g sensor,android gsensor 休眠震动唤醒功能怎么实现

一、唤醒源

设备休眠后,通过触发唤醒源使设备恢复正常工作模式。设备唤醒源有多种,对于Android设备常见的就有PowerKey、来电唤醒、Alarm唤醒等。

唤醒源的实现处于内核空间,本文重点讨论下PowerKey作为唤醒源的具体实现。

二、PowerKey唤醒源

PowerKey唤醒设备的原理,本质其实就是中断。

b969636b8f584629d8b25a82db33e6ec.png

PowerKey连接到CPU的一个输入(Input)引脚(Pin)上,该Pin运行在中断模式上。一旦PowerKey按下,引发Pin中断;而该中断具有唤醒CPU的功能,于是设备得以唤醒。

三、PowerKey对应的Pin Configuration

和PowerKey相连的Pin的具体配置位于板级dts文件中,比如如下配置:

arch/arm/boot/dts/xxxxx.dtspower-key {/** 是CPU的哪个Pin */gpios = &gpio0 GPIO_A5 GPIO_ACTIVE_LOW;/** Key code */linux,code = 116;/** 起个名字 */label = power;/** 该Pin具有wakeup的功能 */gpio-key,wakeup;};

着重说下linux,code = 116,116怎么来的?

对于键盘,每一个按键都有唯一的编码,在Linux中,编码值位于:

input.h (kernel\include\uapi\linux)/** Keys and buttons*/#define KEY_RESERVED 0#define KEY_ESC 1#define KEY_BACKSPACE 14#define KEY_TAB 15#define KEY_POWER 116 /* SC System Power Down */

可知,PowerKey的编码也在该文件中,且编码值为116;一旦按下PowerKey,该值作为键值传到input_event结构体的code成员变量中:

input.h (kernel\include\uapi\linux)/** The event structure itself*/struct input_event {struct timeval time;__u16 type;__u16 code;__s32 value;};

之后我们会写个Linux应用程序读取code值。

取消

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值