2014-06-24 7 views
6

Auf Android-Entwicklungsboard, ich versuche, den AP basierend auf einem Interrupt auf einem GPIO erhalten, kann jemand helfen mir dabei?Aufwachen Android-Handy auf einem Interrupt, auf einem GPIO

auf das Mein Verständnis ist:

Wir brauchen ein Eingabegerät erstellen und ein Ereignis an diesem Gerät auf der Unterbrechung empfangen basierend zu aktualisieren. Dann von der Anwendung glaube ich, dass OS eine Ereignismeldung senden wird und dann müssen wir den Wakelock verwenden, um den AP aufzuwecken.

Bitte lassen Sie mich wissen, wenn mein Verständnis richtig ist? Wenn ja, können Sie mir dann sagen, welche Art von Eingabegerät registriert werden muss (EV_PWR, EV_KEY ...), wie die Anwendung eine Benachrichtigung erhält und können wir den AP vom Treiber aus aktivieren?

+0

Hallo, ich bin in der Lage, den AP basierend auf Interrupt zu wecken. Ich habe ein Eingabegerät erstellt, das ein KEY_POWER-Ereignis bei einem Interrupt liefert, und der Android-Power-Policy-Code kümmert sich um das Aufwachen des APs. – kumar

+0

Ich versuche zu verstehen, wie das gemacht wird. Können Sie ein wenig mehr Details zu Ihrer Lösung angeben? Ein Beispiel wäre erwünscht oder zumindest Links zu Dokumentationen und Beispielen. – gfrigon

+0

Ich möchte Android von Batterieladegerät Treiber wecken, zum Beispiel wenn Gerät in der Wiege gelegt wird. Gibt es einen Weg ohne Eingabegerät zu erstellen? – pera

Antwort

1

Allgemeines Ereignis-Ausbreitungsmodell (vereinfacht): Wenn eine Eingabe erfolgt, wird vom Kernel ein Ereignis generiert. Das Eingabeereignis wird vom Eingabe-Ereignishandler gelesen und an die Vordergrundanwendung gesendet. Einige Schlüssel werden an eine bestimmte Anwendung gesendet, anstatt an die Vordergrundanwendung gesendet zu werden. Zum Beispiel wird die Windows-Taste in der Tastatur an das Startmenü gesendet, die Play/Pause-Taste wird an die Media-Player-App gesendet, auch wenn sie nicht im Vordergrund ist.

Im Fall von Android System_Server liest Ereignisse aus dem Kernel, ist es in den Vordergrund Anwendung/Ansicht. Dies geschieht für alle Eingabe-Ereignisse außer Power-Taste, Home-Taste usw., die von Android Fenstermanager oder Systemui behandelt wird. PhoneWindowManager.java hat den Windowmanager-Code, er erhält das KEYCODE_POWER-Ereignis, wenn die Einschalttaste gedrückt wird. Wenn in diesem Fall der Bildschirm eingeschaltet ist und keine Wecksperre für die Anzeige besteht, wird der Bildschirm gesperrt (durch Aufrufen von goToSleep im PowerManager). Wenn der Bildschirm ausgeschaltet ist, wird der Bildschirm aktiviert (durch Aufrufen von wakeUp in PowerManager).

isWakeKey bei http://androidxref.com/5.1.0_r1/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#4512 wird auf True gesetzt, wenn der Netzschalter gedrückt wird & freigegeben. Der Code ruft je nach aktuellem Bildschirmzustand wakeUp oder goToSleep auf.