在GPIO上中断唤醒Android手机

kum*_*mar 6 android input-devices linux-kernel powermanager

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

我对此的理解是:

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

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

pra*_*tsm 2

通用输入事件传播模型(简化):当发生输入时,内核会生成一个事件。输入事件由输入事件处理程序读取,并将其分派到前台应用程序。很少有密钥被发送到某些特定应用程序,而不是发送到前台应用程序。例如,键盘中的 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。