【问题标题】:Wake up android phone on an interrupt, on a GPIO在中断时唤醒安卓手机,在 GPIO 上
【发布时间】:2014-06-24 18:48:51
【问题描述】:

在 Android 开发板上,我正在尝试根据 GPIO 上接收到的中断来唤醒 AP,有人可以帮我解决这个问题吗?

我对此的理解是:

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

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

【问题讨论】:

  • 嗨,我可以根据中断唤醒 AP。我创建了输入设备,它在中断时提供 KEY_POWER 事件,android 电源策略代码将负责唤醒 AP。
  • 我试图了解这是如何完成的。您能否提供有关您的解决方案的更多详细信息。一些示例将不胜感激,或者至少链接到文档和示例。
  • 我想从电池充电器驱动程序中唤醒 Android,例如当设备放入底座时。有没有不创建输入设备的方法?

标签: android linux-kernel powermanager input-devices


【解决方案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。

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多