티스토리 뷰

adb getevent를 이용한 터치 이벤트 분석 및 sendevent 로 터치, 드래그이벤트 보내기

 

adb shell getevent 를 이용하여 터치 이벤트를 먼저 분석해보겠습니다.

그림처럼 "adb shell getevent" 명령어를 치면 event 번호별로 무엇에 해당되는지 화면에 출력이 됩니다.

화면 아무곳에 한번 터치를 하면 그림의 아랫부분 처럼 /dev/input/event0: 0003 0039 00000000

이런식으로 이벤트들이 출력되게 됩니다.

event의 번호는 폰마다 다르며 저같은 경우에 event0이 터치에 해당하는 이벤트입니다.

 

한번 터치 후 때면 9줄이 출력되는데 여기에는 Down 과 Up 으로 구분이 되어있습니다.

숫자의 첫번째 두번째 라인은 이벤트 종류이고 3번째 줄이 해당 값입니다.

-l 옵션을 줘서 한번 자세히 살펴보겠습니다.


-l 옵션을 붙여주면 그림처럼 이벤트의 라벨이 표시됩니다.

이벤트 타입의 자세한 설명은 www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt 

 

이제 분석하여 보면 6줄이 손가락을 누를때 발생하는 이벤트입니다.

0003 0039 00000000 // ID 값

0003 0035 000002a3 // x point

0003 0036 000003aa // y point

0003 003a 0000001f // 압력

0001 014a 00000001 // 버튼 Down

0000 0000 00000000 // 이벤트 제출

 

마지막 3줄이 손가락을 땔때 발생하는 이벤트입니다.

0003 0039 FFFFFFFFF // ID 값

0001 014a 00000000 // 버튼 UP

0000 0000 00000000 // 이벤트 제출

 

 

adb shell sendevent 로 터치 값을 발생시키고 싶으면 해당 값을 넣어서 보내주면됩니다.

보내줄때에는 10진수 정수를 사용합니다.

 

sendevent /dev/input/event0: 3 57 0

sendevent /dev/input/event0: 3 53 x  // 원하는 x 좌표

sendevent /dev/input/event0: 3 54 y // 원하는 y 좌표

sendevent /dev/input/event0: 3 58 p // 원하는 압력값

sendevent /dev/input/event0: 1 330 1

sendevent /dev/input/event0: 0 0 0

 

sendevent /dev/input/event0: 3 57 -1

sendevent /dev/input/event0: 1 330 0

sendevent /dev/input/event0: 0 0 0

 

윗부분은 Down, 아랫부분은 Up 입니다. 위 이벤트를 모두 보내주면 터치 이벤트가 보내지게 됩니다.

adb shell input tap [x] [y]  <- 을 이용하여 한줄에 보내는 방법도 있습니다만 저의 목적이 아니라서 Pass

 

이번에는 드래그 이벤트를 만들어 보겠습니다.

드래그 이벤트를 보내는 양식은 Down 이벤트 - x,y 좌표 - x,y 좌표 - Up 이벤트입니다.


sendevent /dev/input/event0: 3 57 0

sendevent /dev/input/event0: 3 53 x  // 원하는 x 좌표

sendevent /dev/input/event0: 3 54 y // 원하는 y 좌표

sendevent /dev/input/event0: 3 58 p // 원하는 압력값

sendevent /dev/input/event0: 1 330 1

sendevent /dev/input/event0: 0 0 0

 

sendevent /dev/input/event0: 3 53 x  // 원하는 x 좌표

sendevent /dev/input/event0: 3 54 y // 원하는 y 좌표

sendevent /dev/input/event0: 0 0 0

 

sendevent /dev/input/event0: 3 53 x  // 원하는 x 좌표

sendevent /dev/input/event0: 3 54 y // 원하는 y 좌표

sendevent /dev/input/event0: 0 0 0

 

sendevent /dev/input/event0: 3 57 -1

sendevent /dev/input/event0: 1 330 0

sendevent /dev/input/event0: 0 0 0

 

그냥 Down, Up 사이에 x,y 좌표 및 syn_report 를 넣어주면 됩니다.

x,y 좌표는 직선구간의 끝을 넣어주면됩니다.

예를들어 ㅅ모양의 꺾이는 터치를 보내고싶으면 Down 좌표에 시작좌표를, 드래그 1번째 좌표에 꺽이는 좌표를, 드래그 마지막 좌표에 끝 좌표를 적고 Up 이벤트를 보내면 됩니다.

꺾일때마다 좌표를 추가 삽입해주면 됩니다.

댓글