터치스크린 쓰기.

Embeded : 2009. 1. 23. 12:15
반응형

root@godori:~# l
total 103316
drwxr-xr-x   6 root root     4096 2009-01-22 10:08 .
drwxr-xr-x  19 root root     4096 2008-12-25 16:51 ..
drwxr-xr-x   2 root root     4096 2007-10-30 03:39 aesopev
-rw-r--r--   1 root root 21058792 2007-10-19 10:26 csi321.avi
-rwxr-xr-x   1 root 1001   152885 2007-10-04 08:15 fbdisp
-rw-r--r--   1 root root    79936 2007-10-03 09:24 gkey.ko
-rw-r--r--   1 root root      105 2007-10-13 22:00 .gtkrc-2.0
drwxr-xr-x   2 root root     4096 2007-10-13 22:02 gtktest
-rw-r--r--   1 root root   259245 2007-10-03 10:22 gtouch.ko
-rw-r--r--   1 root root       78 2007-09-05 12:58 hello.c
-rwxr--r--   1 root root  8481671 2007-09-29 12:37 lahina.mp3
drwxr-xr-x   2 root root     4096 1970-01-01 00:23 mmsp2530-test
drwxr-xr-x   2 root root     4096 1970-01-01 00:23 .mplayer
-rwxr-xr-x   1 root root      145 2009-01-22 01:52 .profile
-rwxr--r--   1 root root 73282492 2009-01-03 15:45 sponge.avi
-rw-r--r--   1 root root    71538 2007-10-03 09:25 tcal.ko
-rwxr--r--   1 root root  2209390 2007-08-10 06:28 UnDotum.ttf
root@godori:~# cat /proc/bus/input/devices
root@godori:~# insdmod gtouch.ko
-sh: insdmod: not found
root@godori:~# insmod gtouch.ko
Using gtouch.ko
input: mp2530 ts as /class/input/input0
alive5 request ok: 0x89, 137, 1
ok: VMP2530_GPIOALV_OUT      0x56
ok: VMP2530_GPIOALV_OUTENB   0xde
ok: VMP2530_GPIOALV_DETMODE0 0x0
ok: VMP2530_GPIOALV_INTENB   0x0
ok: VMP2530_GPIOALV_INTPEND  0x5e
ok: VMP2530_GPIOALV_PAD      0xf7
ok: VMP2530_GPIOALV_PUENB    0x0
ok: VMP2530_GPIOALV_PCLEAR   0x0
AESOP2440 homing ADC device driver install
root@godori:~# cat /proc/bus/input/devices
I: Bus=0013 Vendor=dead Product=beef Version=0001
N: Name="mp2530 ts"
P: Phys=
S: Sysfs=/class/input/input0
H: Handlers=mouse0 event0 ts0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003

root@godori:~#
마우스를 꼽은후

root@godori:~# usb 1-1: new low speed USB device using mp2530f-hcd and address 2
usb 1-1: Product: Optical Mouse
usb 1-1: Manufacturer: MosArt
usb 1-1: configuration #1 chosen from 1 choice
input: MosArt Optical Mouse as /class/input/input1
input: USB HID v1.10 Mouse [MosArt Optical Mouse] on usb-mp2530f-1

root@godori:~# cat /proc/bus/input/devices
I: Bus=0013 Vendor=dead Product=beef Version=0001
N: Name="mp2530 ts"
P: Phys=
S: Sysfs=/class/input/input0
H: Handlers=mouse0 event0 ts0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003

I: Bus=0003 Vendor=062a Product=0003 Version=0110
N: Name="MosArt Optical Mouse"
P: Phys=usb-mp2530f-1/input0
S: Sysfs=/class/input/input1
H: Handlers=mouse1 event1 ts1
B: EV=7
B: KEY=1f0000 0 0 0 0 0 0 0 0
B: REL=103

root@godori:~#

root@godori:~# hexdump /dev/input/
/dev/input/event0   /dev/input/mice     /dev/input/mouse1   /dev/input/ts1
/dev/input/event1   /dev/input/mouse0   /dev/input/ts0
root@godori:~# hexdump /dev/input/event1
0000000 01cc 0000 9c3a 0000 0002 0000 ffe8 ffff
0000010 01cc 0000 9c3d 0000 0002 0001 ffa0 ffff
0000020 01cc 0000 9c3e 0000 0002 0008 0001 0000
0000030 01cc 0000 9c3f 0000 0000 0000 0000 0000
0000040 01ce 0000 8b71 0008 0002 0000 0002 0000
0000050 01ce 0000 8b73 0008 0002 0001 ffff ffff
0000060 01ce 0000 8b74 0008 0000 0000 0000 0000
0000070 01ce 0000 fc6f 000a 0002 0000 fffe ffff
0000080 01ce 0000 fc72 000a 0000 0000 0000 0000
0000090 01ce 0000 22a1 000b 0002 0000 fffb ffff
00000a0 01ce 0000 22a3 000b 0002 0001 0001 0000
00000b0 01ce 0000 22a4 000b 0000 0000 0000 0000
00000c0 01ce 0000 48d2 000b 0002 0000 fffe ffff
00000d0 01ce 0000 48d5 000b 0002 0001 0002 0000
00000e0 01ce 0000 48d6 000b 0000 0000 0000 0000
00000f0 01ce 0000 6f03 000b 0002 0000 fffc ffff
0000100 01ce 0000 6f06 000b 0002 0001 0002 0000
0000110 01ce 0000 6f07 000b 0000 0000 0000 0000
0000120 01ce 0000 9535 000b 0002 0000 fffd ffff
0000130 01ce 0000 9538 000b 0000 0000 0000 0000
0000140 01ce 0000 98ae 000b 0002 0000 fffe ffff
0000150 01ce 0000 98b0 000b 0002 0001 0002 0000
0000160 01ce 0000 98b1 000b 0000 0000 0000 0000
0000170 01ce 0000 bee0 000b 0002 0000 fffe ffff
                              .
                              .
                              .
                              .


내가 얼마전부터 아이폰이나 터치팟처럼 손으로 쓱쓱 문질러서 작동할 수 있는 터치스크린을 만들수는 없을까....
고민 고민 하다가
tslib 라는게 있다는걸 사장님이 알려주셔서 그것을 분석하기 시작했다.

@_@;;

당최 이건 .... 뭥미?

tslib, sdl, 그리고 터치스크린 드라이버

도대체 이 세개의 관계가 뭘까 ....?  <<---- 이걸 알게되는데만 하루가 꼬박 걸렸다.

하루걸려 알아낸 결론은 : 커널에 터치 드라이버를 올리고 그걸 이용해서 tslib 가 돌고 그걸 이용해서 sdl 이나 qt에서 터치를 사용하게 된다. -_-;;;

제일먼저 sdl에서 터치를 사용한 예제를 분석했다. 분석한 결과 sdl에서 tslib로부터 터치되는 좌표와 터치중인지 아닌지를 알려주는 데이타를 받아오는 부분이 있었다. 하지만 손으로 쓱쓱 문질러도 작동되도록 할수는 없었다.

그래서 이번엔 tslib를 분석하기로 했다.
tslib소스를 받았는데 두둥! 일단 너무 크다. ㅠ.ㅠ
컴파일하는 방법을 몰라서 잠시 당황! Makefile 이 없다는 것을 발견하고 Makefile에 관해 약간의 검색후 ./configure 한다음에 컴파일 하니까 실행파일이 생겼다. 하지만.... 실행이 안되네. 뭔가 tslib을 보드에 맞도록 수정해야 되는것 같다.

그래서 별로 할수 있는것이 없길래 rootfs에 있는 ts_test와 ts_calibration만 한번 돌려보았다.

아휴~
tslib 랑 드라이버를 분석해봐야 되는건가....

아무튼 지금 내머리가 너무 어지럽다.




ㅋㅋㅋ 좀더 찾아봤더니 다음과 같은 내용을 알아낼 수 있었따.
 
tslib README를 읽고 내용을 좀더 본뒤에 사용용도에 맞게 수정해서 올리면 되는것 같다.
그런데 이걸 어느세월에 하지.... ㅠ.ㅠ

상세한 설명은 README를 읽고 매뉴얼을 쳐보세여~♡~♡ 하는건 승질에 안맞고.
간단히 설명을 하면..


리눅스 디바이스 드라이버 -> ts_raw -> variance -> dejitter -> linear  식으로 값이 전달되어 온다.

리눅스 디바이스 드라이버는 커널경로의 drivers/input/touchscreen/s3c-ts.c 에 있다.
여기서 리눅스 인풋 linux input 장치 규약에 따른 좌표 정보를 만들어낸다.

cat /dev/input/event0 을 치고 터치를 건드리면 값이 마구 쏟아지는 것을 관찰할 수 있다.



variance 는 사용자가 드래그를 좍좍 했을 때 부드럽게 커서가 쫓아오게 보간 해준다.
dejitter 는 커서를 누르고 있을 때 떨지 않도록 노이즈를 잡아준다.
linear 는 전체 영역에 대하여 좌표를 캘리브레이션 해준다. (좌표축을 LCD와 일치시키거나 하는)


ts_calibrate 등의 유틸리티로 검사~


 

반응형

'Embeded' 카테고리의 다른 글

OSC, PLL  (4) 2009.03.06
터치스크린 쓰기.  (0) 2009.01.23
ADC 사용하기  (0) 2009.01.07
Timer 사용하기  (0) 2009.01.05
Posted by Real_G

댓글을 달아 주세요