2014-06-24 61 views
6

在Android開發板上,我試圖根據GPIO接收到的中斷喚醒AP,任何人都可以幫我解決這個問題嗎?通過GPIO中斷喚醒android手機

我對這個問題的理解是:

我們需要創建一個輸入設備和更新的事件基礎上,中斷該設備接收。然後從應用程序我相信OS會發送一個事件發生通知,然後我們需要使用喚醒鎖喚醒AP。

請讓我知道,如果我的理解是正確的?如果是,那麼你能告訴我哪種輸入設備需要註冊(EV_PWR,EV_KEY ..),應用程序如何得到通知,並且我們可以從驅動程序中喚醒AP嗎?

+0

嗨,我能夠喚醒基於中斷的AP。我已經創建了一個輸入設備,該設備在中斷時發出KEY_POWER事件,並且android電源策略代碼將負責喚醒AP。 – kumar

+0

我想了解這是如何完成的。你能否提供一些關於解決方案的更多細節。一些例子將被讚賞或至少鏈接到文檔和示例。 – gfrigon

+0

我想從電池充電器驅動程序喚醒Android,例如將設備放入底座時。有沒有創建輸入設備的方法? – pera

回答

1

通用輸入事件傳播模型(簡化):當輸入發生時,內核產生一個事件。輸入事件由輸入事件處理程序讀取,並被分派到前臺應用程序。很少的密鑰被髮送到某個特定的應用程序,而不是被髮送到前臺應用程序。例如,鍵盤中的Windows按鈕被髮送到開始菜單,即使播放器不在前臺,播放/暫停按鈕也會發送到媒體播放器應用程序。

如果Android系統服務器從內核讀取事件,它會傳遞給前臺應用程序/視圖。這是爲所有輸入事件完成的,除了由Android的窗口管理器或systemui處理的電源鍵,主頁按鈕等。 PhoneWindowManager.java具有窗口管理器代碼,當按下電源鍵時,它獲取KEYCODE_POWER事件。在這種情況下,如果屏幕打開並且沒有顯示喚醒鎖定,則鎖定屏幕(通過在PowerManager中調用goToSleep),類似地,如果屏幕關閉,則屏幕打開(通過在PowerManager中調用喚醒)。

isWakeKey在http://androidxref.com/5.1.0_r1/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#4512將被設置爲true時按下電源按鈕&發佈。代碼將根據當前屏幕狀態調用wakeUp或goToSleep。