#define EV_KEY 0x01오늘은 Android 기본 소스에 Key 를 하나 추가하는 순서에 대해 적어보려고 한다.
커널 쪽은.. 잘 모르지만..
그 위 단계부터 해보려고한다..!
이전 포스팅에서 키 이벤트가 발생하는 순서에 대해 정의를 했는데, 참고하면 좋을 것 같다.
https://codingstorywithme.tistory.com/43
일단 커널쪽의 작업 완료되었다는 가정을 하고 진행을 하려고 한다.
추가로 당장 키를 생성해서 확인하는 것은 시간이 많이 걸리기 때문에, 이미 추가되어 있는 Volume up 키를 추가하는 것으로 가정해보겠다.
1. key 확인
cmd 창에서
$ adb shell $ getevent |
위 command를 통해 Kernel에서 날리는 event를 실시간으로 볼 수가 있다.
이벤트를 보여주기 전에 리스트를 쫘르륵 보여주는데, 여기에 나오는 것이 device file path 이다.
위 결과 사진에서 보면 device file path인 /dev/input/event3 의 이름이 uinput-fpc이라고 하고 있다.
쭉쭉쭉 보면 /dev/input/event1 의 이름은 gpio-keys인 것을 알 수 있다.
이것은 다음 단계에서 중요하니 한번씩 보고 넘어가도록 하자!
이제 추가하고자 하는 key인 volume up 키를 눌러서 이벤트 확인을 해보면,
위와 같이 나오는 것을 알 수 있다.
이 결과의 구성을 살펴보면,
- 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://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=fptldl&logNo=220648214188 이 블로그에 잘 정의 되어 있는 것 같다..
또 위의 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!
이것을 기억하고 다음 스텝으로 고고!