안녕하세요. touch 관련하여 오늘 처리 완료했습니다.
Q&A에 올리신 분중에 궁금해 하시는 분이 계셔서 관련 처리에 대해서 말씀드리겠습니다.
먼저 s3c-ts.c는 컴파일 되셨다면 그 상태 그대로 해서 tslib를 가지고 cal을 해야 합니다. 저는 tslib에 대해서 정확하게 몰라서.
다음 사이트에서 받았습니다.
http://www.opentom.org/Tslib CVS 으로 다운 로드 받아서 일단 사용했습니다.
다른 분들은 어떻게 받았는지 모르겠네요. 글 올리신 분들 보니깐. 터치 관련하여 수정된게 있는듯 한데. 저는 구하질 못해서요..
일단 받은 것을 컴파일 합니다.
다른 분들은 shared로 컴파일 하셨던데.. 전 그 모드가 싫어서 static으로 컴파일 했습니다. 그게 속 편하거든요..
컴파일 옵션은
CFLAGS="-march=armv6 -mtune=arm1176jzf-s" CXXFLAGS="-march=armv6 -mtune=arm1176jzf-s" LDFLAGS="--static" ./configure --host=arm-linux --enable-inputapi --enable-static --disable-shared
이렇게 줬습니다. 맞는지 틀린지는 모르겠습니다. 그러면 tests/ts_calibrate 가 생깁니다. 다른거는 필요 없고 이것만 가지고 했습니다.
shared가 아니니깐. 뭐 다른것들 필요도 없고. 용량이 2.4Mb라는게 좀 흠이지만..
참 그리고 ts_read_raw.c 부분을 좀 수정해 주세요. 여기 적힌대로 하니깐. 안되더군요. 쩝..
ipaq용으로 나와 있던 부분을 발최해서 만들었는데. 잘되더군요..
--------------
int ts_read_raw(struct tsdev *ts, struct ts_sample *samp, int nr)
{
int result = 1 ;
struct input_event ev;
int ret;
int total = 0;
static int curr_x = 0, curr_y = 0, curr_p = 0;
static int got_curr_x = 0, got_curr_y = 0;
int got_curr_p = 0;
int next_x, next_y;
int got_next_x = 0, got_next_y = 0;
int got_tstamp = 0;
// int result = ts->list_raw->ops->read(ts->list_raw, samp, nr); <-- 원래 소스 이것 대로 하면 signal 11 발생하면서 죽습니다.
while( total < nr ) {
ret = read(ts->fd, &ev, sizeof(struct input_event));
if(ret < sizeof(struct input_event)) break;
if( ev.type == EV_ABS)
{
switch( ev.code)
{
case ABS_X:
if (!got_curr_x && !got_curr_y) {
got_curr_x = 1;
curr_x = ev.value;
} else {
got_next_x = 1;
next_x = ev.value;
}
break;
case ABS_Y:
if (!got_curr_y) {
if (!got_curr_y) {
got_curr_y = 1;
curr_y = ev.value;
} else {
got_next_y = 1;
next_y = ev.value;
}
break;
case ABS_PRESSURE:
got_curr_p = 1;
curr_p = ev.value;
break;
}
}
/* go back if we just got irrelevant events so far */
if (!got_curr_x && !got_curr_y && !got_curr_p) continue;
/* time stamp with the first valid event only */
if (!got_tstamp) {
got_tstamp = 1;
samp->tv = ev.time;
}
/* We consider having a complete!ts event */
samp->x = curr_x;
samp->y = curr_y;
samp->pressure = curr_p;
printf("RAW----------------,----------> %d %d %dn",samp->x,samp->y,samp->pressure);
samp++;
total++;
/* get ready for next event */
if (got_next_x) curr_x = next_x; else got_curr_x = 0;
if (got_next_y) curr_y = next_y; else got_curr_y = 0;
got_next_x = got_next_y = got_tstamp = 0;
}
return result;
---------------------------------
위처럼 해주시면 잘 찾습니다. 나머지는 국내에 나와 있는 글을 참조하시면 되구요.
ts_calibrate를 이용해서 cal 하시고 나면 그 부분을 적용만하시면 됩니다.
두가지 부분을 손을 봐야 합니다.
1. touch_timer_fire 함수 #if 1 부분이 이번에 들어간거구요. #else가 기존에 있던 겁니다. 변경해 주시면 됩니다. 내용은 이전에 여기 올라왔던 글에서 찾아서 걍 넣은 겁니다.
#if 1
xtemp = ts->xp; /* 실제 y 축임 */
ytemp = ts->yp; /* 실제 x 축임 */
x = ( pointercal[2] + pointercal[0]*xtemp + pointercal[1]*ytemp ) / pointercal[6];
y = ( pointercal[5] + pointercal[3]*xtemp + pointercal[4]*ytemp ) / pointercal[6];
#ifdef CONFIG_TOUCHSCREEN_S3C_DEBUG
printk(KERN_INFO "Cal Value X: %03d, Y: %03dn", x, y );
#endif
if( x > yres ) /* 480 */
x = yres;
else if( x < 0 )
x = 0;
if( y > xres ) /* 640 */
y = xres;
else if( y < 0 )
y = 0 ;
input_report_abs(ts->dev, ABS_X, x );
input_report_abs(ts->dev, ABS_Y, y );
#else
input_report_abs(ts->dev, ABS_X, ts->xp);
input_report_abs(ts->dev, ABS_Y, ts->yp);
#endif
2. s3c_ts_probe 부분 수정해주세요. 저는 아래 처럼 했는데 #if defined(CONFIG_FB_S3C_LTE480WV 이 제가 추가한 부분입니다.
사이즈가 없으면 안드로이드에서 정상적으로 인식이 안되더군요.
#if defined(CONFIG_FB_S3C_LTE480WV)
input_set_abs_params(ts->dev, ABS_X, 0, 800, 0, 0);
input_set_abs_params(ts->dev, ABS_Y, 0, 480, 0, 0);
#else
input_set_abs_params(ts->dev, ABS_X, 0, 0xFFF, 0, 0);
input_set_abs_params(ts->dev, ABS_Y, 0, 0xFFF, 0, 0);
#endif
이렇게 수정해 주시고 나면 문제 없이 처리 가능했습니다.
참고로 원인 해경하기 위해서 tslib를 처리하는게 더 어렵더군요.. cal 하는 부분에 대해서 tslib이용을 뜬 구름 처럼 되어 있어서
처음에는 큐토피아 있는거 깔아서 켈한 데이터 가지고 오고 생쑈했는데 잘 안되더군요.. 추후에 이 부분에 대해서 어떠한 보안이
안드로이드 쪽에서 있었으면 하는게 제 생각입니다. 안그러면 필요에 따라서 커널을 컴파일 해야 하는 일이 발생할듯 합니다.
tslib설치가 좀 지저분한데....현재 openmoko 거는 더 심한 모양이네요. 코드도 고쳐야 하는 것을 보면
수정하지 않아도 되는 소스를 회사 가면 올려놓도록 하겠습니다.
제가 하던 방식도 약간 정리해서 올리던가 하고요...^^
mouse처럼 세팅해줘야 동작하는 것으로 알고 있었는데, 지금은 그냥 touch모드로 세팅해도 동작을 잘 하나 보네요...
자료 감사합니다.
몇일내로 2.6.28.6으로 패치된 것을 정리해서 올리던가 해야겠네요.
안죽는 버전으로....
요즘 코덱땀시...머리 쥐어싸매고 있어서.....ㅠ.ㅠ