2014-06-24 8 views
6

Próbuję obudzić AP na podstawie wywołania przerwanego na GPIO, czy ktoś może mi w tym pomóc?Obudź się telefon z Androidem na przerwanie, na GPIO

Moje zrozumienie na to:

Musimy stworzyć urządzenie wejściowe i aktualizowania zdarzenia do tego urządzenia w oparciu o przerwania odebrany. Następnie z aplikacji Wierzę, że OS wyśle ​​powiadomienie o wystąpieniu zdarzenia, a następnie musimy użyć wakelocka, aby obudzić AP.

Proszę dać mi znać, jeśli moje zrozumienie jest prawidłowe? Jeśli tak, to czy możesz mi powiedzieć, jaki rodzaj urządzenia wejściowego musi zostać zarejestrowany (EV_PWR, EV_KEY ..), w jaki sposób aplikacja otrzyma powiadomienie i czy możemy obudzić AP ze sterownika?

+0

Witam, jestem w stanie obudzić AP na podstawie przerwania. Stworzyłem urządzenie wejściowe, które daje zdarzenie KEY_POWER na przerwaniu, a kod zasad zasilania Android zajmie się przebudzeniem AP. – kumar

+0

Próbuję zrozumieć, jak to się robi. Czy możesz podać trochę więcej szczegółów na temat swojego rozwiązania. Doceniony zostanie przykład lub przynajmniej linki do dokumentacji i przykładów. – gfrigon

+0

Chcę obudzić Androida ze sterownika ładowarki, na przykład, gdy urządzenie jest umieszczone w podstawce. Czy istnieje sposób bez tworzenia urządzenia wejściowego? – pera

Odpowiedz

1

Ogólny model propagacji zdarzeń wejściowych (uproszczony): Gdy wystąpi dane wejściowe, jądro generuje zdarzenie. Zdarzenie wejściowe jest odczytywane przez wejściową procedurę obsługi zdarzeń i jest wysyłane do aplikacji na pierwszym planie. Kilka kluczy jest wysyłanych do określonej aplikacji, zamiast wysyłanych do aplikacji na pierwszym planie. Na przykład przycisk Windows na klawiaturze jest wysyłany do menu startowego, przycisk odtwarzania/pauzy jest wysyłany do aplikacji odtwarzacza multimedialnego, nawet jeśli nie jest na pierwszym planie.

W przypadku Androida system_serwer odczytuje zdarzenia z jądra, przechodzi do aplikacji/widoku pierwszego planu. Odbywa się to dla wszystkich zdarzeń wejściowych oprócz klawisza zasilania, przycisku głównego itp. Obsługiwanego przez menedżera okien Androida lub system. PhoneWindowManager.java ma kod menedżera okien, pobiera zdarzenie KEYCODE_POWER po naciśnięciu klawisza zasilania. W takim przypadku, jeżeli ekran jest włączony i nie ma blokady wybudzania dla ekranu, ekran jest zablokowany (przez wywołanie goToSleep w PowerManager), podobnie, gdy ekran jest wyłączony, wtedy ekran jest włączony (przez wywołanie wakeUp w PowerManager).

isWakeKey o numerze http://androidxref.com/5.1.0_r1/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#4512 zostanie ustawione na wartość true po zwolnieniu przycisku zasilania &. Kod wywoła funkcję wakeUp lub goToSleep w zależności od bieżącego stanu ekranu.

Powiązane problemy