2014-06-24 3 views
6

Android 개발 보드에서 GPIO에서 수신 된 인터럽트를 기반으로 AP를 깨우려고합니다. 아무도이 문제를 해결할 수 있습니까? 이에GPIO의 인터럽트에서 안드로이드 전화 깨우기

나의 이해는 다음과 같습니다

우리는 입력 장치를 작성하고받은 인터럽트에 따라이 장치에 이벤트를 업데이트해야합니다. 그런 다음 응용 프로그램에서 OS가 이벤트 알림을 보내고 AP를 깨우기 위해 wakelock을 사용해야한다고 믿습니다.

제 이해가 정확한지 알려주세요. 그렇다면 어떤 종류의 입력 장치를 등록해야하는지 (EV_PWR, EV_KEY ..), 응용 프로그램이 알림을받는 방법을 알려주고 드라이버에서 AP를 깨울 수 있습니까?

+0

안녕하세요, 저는 인터럽트를 기반으로 AP를 깨울 수 있습니다. 내가 인터럽트에 대한 KEY_POWER 이벤트를 제공하는 입력 장치를 만들었고 android power policy 코드가 AP를 깨우는 것을 처리 할 것입니다. – kumar

+0

이것이 어떻게 수행되는지 이해하려고합니다. 솔루션에 대해 더 자세히 설명해 주시겠습니까? 몇 가지 예가 인정 될 것이고 적어도 문서와 예제로 연결될 것입니다. – gfrigon

+0

예를 들어, 장치가 크래들에있을 때 배터리 충전기 드라이버에서 안드로이드를 켜고 싶습니다. 입력 장치를 만들지 않는 방법이 있습니까? – pera

답변

1

일반 입력 이벤트 전파 모델 (단순화) : 입력이 발생하면 이벤트가 커널에 의해 생성됩니다. 입력 이벤트는 입력 이벤트 핸들러에 의해 읽혀지고 포 그라운드 어플리케이션에 전달됩니다. 일부 키는 전경 응용 프로그램으로 보내지 않고 특정 응용 프로그램으로 전송됩니다. 예를 들어, 키보드의 Windows 버튼이 시작 메뉴로 전송되고, 전/후방에 있지 않더라도 재생/일시 중지 버튼이 미디어 플레이어 앱으로 전송됩니다.

안드로이드의 경우 system_server는 커널에서 이벤트를 읽습니다. 포 그라운드 응용 프로그램 /보기로 전달됩니다. 이것은 안드로이드의 창 관리자 또는 시스템에 의해 처리되는 전원 키, 홈 버튼 등을 제외한 모든 입력 이벤트에 대해 수행됩니다. PhoneWindowManager.java는 윈도우 매니저 코드를 가지고 있으며, 전원 키를 누르면 KEYCODE_POWER 이벤트를 받는다. 이 경우 화면이 켜져 있고 표시를위한 잠자기 잠금이 해제 된 상태에서 화면이 잠겨 있으면 (PowerManager에서 goToSleep을 호출하여) 화면이 꺼져 있고 화면이 켜져있는 경우 (PowerManager에서 wakeUp을 호출)와 비슷합니다.

isWakeKey at http://androidxref.com/5.1.0_r1/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#4512은 전원 버튼을 누를 때 true로 설정되고 &이 해제됩니다. 코드는 현재 화면 상태에 따라 wakeUp 또는 goToSleep을 호출합니다.