Разбудить телефон Android по прерыванию, на GPIO

На плате разработки Android я пытаюсь разбудить точку доступа на основе прерывания, полученного на GPIO, может ли кто-нибудь помочь мне с этим?

Мое понимание этого таково:

Нам нужно создать устройство ввода и обновить событие для этого устройства на основе полученного прерывания. Затем из приложения, я полагаю, ОС отправит уведомление о событии, а затем нам нужно использовать блокировку пробуждения, чтобы разбудить точку доступа.

Пожалуйста, дайте мне знать, правильно ли я понимаю? Если да, то можете ли вы сказать мне, какое устройство ввода нужно прописать (EV_PWR, EV_KEY ..), как приложение получит уведомление, и можно ли разбудить AP из драйвера?


person kumar    schedule 24.06.2014    source источник
comment
Привет, я могу разбудить точку доступа по прерыванию. Я создал устройство ввода, которое выдает событие KEY_POWER при прерывании, а код политики питания Android позаботится о пробуждении точки доступа.   -  person kumar    schedule 26.06.2014
comment
Я пытаюсь понять, как это делается. Не могли бы вы рассказать немного больше о вашем решении. Некоторые примеры будут оценены или, по крайней мере, ссылки на документацию и примеры.   -  person gfrigon    schedule 01.12.2014
comment
Я хочу разбудить Android из драйвера зарядного устройства, например, когда устройство помещается в подставку. Есть ли способ без создания устройства ввода?   -  person pera    schedule 06.07.2015


Ответы (1)


Общая модель распространения входных событий (упрощенная): при входе событие генерируется ядром. Событие ввода считывается обработчиком событий ввода и отправляется приложению переднего плана. Несколько ключей отправляются в какое-то конкретное приложение, а не в приложение переднего плана. Например, кнопка Windows на клавиатуре отправляется в меню «Пуск», кнопка воспроизведения/паузы отправляется в приложение медиаплеера, даже если оно не находится на переднем плане.

В случае Android system_server считывает события из ядра, они передаются в приложение/представление переднего плана. Это делается для всех событий ввода, кроме нажатия клавиши питания, кнопки «Домой» и т. д., которые обрабатываются оконным менеджером Android или systemui. PhoneWindowManager.java имеет код оконного менеджера, он получает событие KEYCODE_POWER при нажатии клавиши питания. В этом случае, если экран включен и не удерживается блокировка пробуждения для дисплея, экран блокируется (путем вызова goToSleep в PowerManager), аналогичным образом, если экран выключен, экран включается (путем вызова wakeUp в 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 в зависимости от текущего состояния экрана.

person prasannatsm    schedule 30.06.2016