WORK/Android

[Android][Framework] Key 추가 1단계 | Kernel keycode 확인 | adb shell getevent 정보 | Keyevent 확인

호이호이호잇 2022. 4. 26. 20:10
728x90
반응형

#define EV_KEY 0x01오늘은 Android 기본 소스에 Key 를 하나 추가하는 순서에 대해 적어보려고 한다.

 

커널 쪽은.. 잘 모르지만..

그 위 단계부터 해보려고한다..!

 

이전 포스팅에서 키 이벤트가 발생하는 순서에 대해 정의를 했는데, 참고하면 좋을 것 같다.

https://codingstorywithme.tistory.com/43

 

[Android] KeyEvent 처리 | KeyEvent 순서 | Framework Key event

로지난번에 AccessibilityService를 이용해 앱이 상단에 있는 상태가 아니여도, KeyEvent 를 받는 방법에 대해 알아보았다. https://codingstorywithme.tistory.com/42 [Android] 화면 OFF 상태에서 Key Event 받..

codingstorywithme.tistory.com

 

 

일단 커널쪽의 작업 완료되었다는 가정을 하고 진행을 하려고 한다.

추가로 당장 키를 생성해서 확인하는 것은 시간이 많이 걸리기 때문에, 이미 추가되어 있는 Volume up 키를 추가하는 것으로 가정해보겠다.

 

1. key 확인

cmd 창에서

$ adb shell 
$ getevent

위 command를 통해 Kernel에서 날리는 event를 실시간으로 볼 수가 있다.

이벤트를 보여주기 전에 리스트를 쫘르륵 보여주는데, 여기에 나오는 것이 device file path 이다.

pixel 3xl 을 이용해 확인한 결과

위 결과 사진에서 보면 device file path인 /dev/input/event3 의 이름이 uinput-fpc이라고 하고 있다.

쭉쭉쭉 보면 /dev/input/event1 의 이름은 gpio-keys인 것을 알 수 있다.

이것은 다음 단계에서 중요하니 한번씩 보고 넘어가도록 하자!

 

이제 추가하고자 하는 key인 volume up 키를 눌러서 이벤트 확인을 해보면,

pixel 3xl 을 이용해 VOLUME UP 키를 누른 결과

위와 같이 나오는 것을 알 수 있다.

 

이 결과의 구성을 살펴보면,

adb shell getevent 구성

- device file path : kernel key event를 저장할 경로

- type : key event type ( 구분자, keyboard, button, REL 등 key type 정의 )

- code : key code ( 어떤 키에서 이벤트가 발생했는지 알려주는 키코드 )

 

type 이나 code 등의 정의는 대부분 kernel/msm-x.xx/include/linux/input.h 에 되어있다.

https://android.googlesource.com/kernel/msm.git/+/android-msm-hammerhead-3.4-kk-r1/include/linux/input.h 

 

include/linux/input.h - kernel/msm.git - Git at Google

 

android.googlesource.com

 

해당 값들에 대한 상세한 내용은 잘 안나오는 것 같고..

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=fptldl&logNo=220648214188 이 블로그에 잘 정의 되어 있는 것 같다..

 

1) adb getevent

1. 소개 - android developer 설명 : https://source.android.com/devices/input/getevent.html - kernel에...

blog.naver.com

 

또 위의 adb shell getevent의 결과를 다시 보면

이렇게 색을 나눠서 볼 수 있다.

나는 type 에 따라 위 두가지로 표시를 해보았는데, 크게 세가지로 설명 할 수 있을 것 같다.

아래 표로 정리해보았다.

/dev/input/event1: 0001 0073 00000001 Key event type : #define EV_KEY 0x01
Key code : 0x0073 (115)
Key event : 0x01 (press)
/dev/input/event1: 0001 0073 00000000 Key event type : #define EV_KEY 0x01
Key code : 0x0073 (115)
Key event : 0x00 (release)
/dev/input/event1: 0000 0000 00000000 Key event type : #define EV_SYN 0x00
  ->이벤트를 구분해주는 구분자 라고 생각하면 됨

 

여기까지 Android getevent 를 확인해보았다.!

 

여기서 중요한 것은 Keycode!

이것을 기억하고 다음 스텝으로 고고!

728x90
반응형