在GPIO上中断唤醒Android手机

时间:2014-06-24 18:48:51

标签: android linux-kernel powermanager input-devices

在Android开发板上,我试图根据GPIO上收到的中断唤醒AP,有人可以帮我吗?

我对此的理解是:

我们需要创建一个输入设备,并根据收到的中断向该设备更新事件。然后从应用程序我相信操作系统将发送事件发生通知,然后我们需要使用唤醒锁唤醒AP。

如果我的理解是正确的,请告诉我?如果是,那么你能告诉我需要注册哪种输入设备(EV_PWR,EV_KEY ..),应用程序将如何获得通知,我们可以从驱动程序中唤醒AP吗?

1 个答案:

答案 0 :(得分:1)

常规输入事件传播模型(简化):当输入发生时,内核生成事件。输入事件由输入事件处理程序读取,并将其分派给前台应用程序。很少有密钥被发送到某个特定应用程序而不是被发送到前台应用程序。例如,键盘中的Windows按钮被发送到开始菜单,播放/暂停按钮被发送到媒体播放器应用程序,即使它不在前台。

如果Android system_server从内核读取事件,则会传递给前台应用程序/视图。这是针对所有输入事件完成的,除了由Android的窗口管理器或systemui处理的电源键,主页按钮等。 PhoneWindowManager.java有窗口管理器代码,当按下电源键时它会获得KEYCODE_POWER事件。在这种情况下,如果屏幕打开并且没有保持用于显示的唤醒锁定,则屏幕被锁定(通过在PowerManager中调用goToSleep),类似地,如果屏幕关闭则屏幕打开(通过在PowerManager中调用wakeUp)。

当按下电源按钮时,http://androidxref.com/5.1.0_r1/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#4512处的

isWakeKey将设置为true。释放。代码将根据当前屏幕状态调用wakeUp或goToSleep。