2014-06-24 16 views
6

Nella scheda di sviluppo Android, sto cercando di riattivare l'AP in base a un interrupt ricevuto su un GPIO, qualcuno può aiutarmi con questo?Sveglia telefono Android su un'interruzione, su un GPIO

mia comprensione su questo è:

Abbiamo bisogno di creare un dispositivo di input e aggiornare un evento a questo dispositivo basato sul interrupt ricevuto. Quindi dall'applicazione credo che il sistema operativo invierà un evento che avverrà e quindi dovremo usare il wakelock per riattivare l'AP.

Per favore fatemi sapere se la mia comprensione è corretta? Se sì, allora puoi dirmi quale tipo di dispositivo di input deve essere registrato (EV_PWR, EV_KEY ..), come l'applicazione riceverà una notifica e possiamo risvegliare l'AP dal driver?

+0

Ciao, sono in grado di riattivare l'AP in base all'interrupt. Ho creato un dispositivo di input che fornisce un evento KEY_POWER su un interrupt e il codice della politica di alimentazione di Android si occuperà di svegliare l'AP. – kumar

+0

Sto cercando di capire come è fatto. Puoi dare qualche dettaglio in più sulla tua soluzione. Alcuni esempi potrebbero essere apprezzati o almeno collegamenti a documentazione ed esempi. – gfrigon

+0

Voglio riattivare Android dal driver del caricabatterie, ad esempio quando il dispositivo viene inserito nella base. C'è un modo senza creare un dispositivo di input? – pera

risposta

1

Modello di propagazione dell'evento input generale (semplificato): quando si verifica un input, un evento viene generato dal kernel. L'evento di input viene letto dal gestore di eventi di input e viene inviato all'applicazione in primo piano. Poche chiavi vengono inviate ad alcune applicazioni specifiche invece di essere inviate all'applicazione in primo piano. Ad esempio, il pulsante Windows nella tastiera viene inviato al menu di avvio, il pulsante di riproduzione/pausa viene inviato all'app del lettore multimediale anche se non è in primo piano.

In caso di Android system_server legge gli eventi dal kernel, passa all'applicazione/vista in primo piano. Questo viene fatto per tutti gli eventi di input tranne il tasto di accensione, il tasto home ecc. Che viene gestito dal gestore di finestre di Android o da systemui. PhoneWindowManager.java ha il codice gestore finestre, ottiene l'evento KEYCODE_POWER quando viene premuto il tasto di accensione. In tal caso, se lo schermo è acceso e non viene attivato il blocco wake per lo schermo, lo schermo viene bloccato (chiamando goToSleep in PowerManager), allo stesso modo se lo schermo è spento e lo schermo è acceso (chiamando wakeUp in PowerManager).

isWakeKey a http://androidxref.com/5.1.0_r1/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#4512 verrà impostato su true quando si preme il pulsante di alimentazione & rilasciato. Il codice chiamerà wakeUp o goToSleep a seconda dello stato corrente della schermata.