기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요

touch cal 값을 얻어와서 강제로 넘겼는데
그런데 이렇게 하니까 정상적인 좌표 값이 넘어 오지 않습니다.

touch cal 값은 aesop에서 touch cal값을 얻는 프로그램에서 가져왔습니다.
/etc/pointercal 파일에서요

그런데 이상하게 좌표가 이상하게 넘어 오는데요.....


touch driver.........
s3c-ts.c
==================================================
probe function
..
#if 1 //android
        ts->dev->absbit[0] = BIT(ABS_X) | BIT(ABS_Y);
#endif

        ts->dev->evbit[0] = ts->dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
        ts->dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);

#if defined(CONFIG_CPU_S3C2450) || defined(CONFIG_CPU_S3C6410) || defined(CONFIG_CPU_S3C2416)
        input_set_abs_params(ts->dev, ABS_X, 0, 320, 0, 0);
        input_set_abs_params(ts->dev, ABS_Y, 0, 480, 0, 0);
#else
        input_set_abs_params(ts->dev, ABS_X, 0, 0x3FF, 0, 0);
        input_set_abs_params(ts->dev, ABS_Y, 0, 0x3FF, 0, 0);
#endif
        input_set_abs_params(ts->dev, ABS_PRESSURE, 0, 1, 0, 0);
..

static void touch_timer_fire(unsigned long data)
{
         static int a[7]={2721, -4, -12787880, 2, 3317, -11369752, 65536};  //pointercal의 내용..
         int x,y;

        ............

       if (updown) {
                if (ts->count) {

#ifdef CONFIG_TOUCHSCREEN_S3C_DEBUG
                        {
                                struct timeval tv;
                                do_gettimeofday(&tv);
                                printk(KERN_INFO "T: %06d, X: %03ld, Y: %03ldn", (int)tv.tv_usec, ts->xp, ts->yp);
                        }
#endif
                        x = ts->xp;
                        y = ts->yp;

                      ts->xp =  ( a[2] + a[0]*x + a[1]*y) / a[6];
                      ts->yp = ( a[5] + a[3]*x + a[4]*y ) / a[6];

                        printk(KERN_INFO " X: %03ld, Y: %03ldn",  ts->xp, ts->yp);

 

                        input_report_abs(ts->dev, ABS_X, ts->xp);
                        input_report_abs(ts->dev, ABS_Y,  ts->yp );

                        input_report_key(ts->dev, BTN_TOUCH, 1);
                        input_report_abs(ts->dev, ABS_PRESSURE, 1);
                        input_sync(ts->dev);
                }

................
}



profile

김재훈

2009.04.06 20:30:57
*.162.60.144

static int pointercal[7]={0, -2925, 33340088, -3266, 11, 42416000, 65536};  // Pointercal 전역 선언
.
.
.
.
   if (updown) {
        if (ts->count) {

//#ifdef CONFIG_TOUCHSCREEN_S3C_DEBUG
#if 1
            {
                struct timeval tv;
                do_gettimeofday(&tv);
                printk(KERN_INFO "T: %06d, X: %03ld, Y: %03ldn", (int)tv.tv_usec, ts->xp, ts->yp);
            }
#endif

            xtemp = ts->xp;
            ytemp = ts->yp;

            x = ( pointercal[2] + pointercal[0]*xtemp + pointercal[1]*ytemp ) / pointercal[6];
            y = ( pointercal[5] + pointercal[3]*xtemp + pointercal[4]*ytemp ) / pointercal[6];

            printk("pre: x, y = %d, %dn", x, y);

            if( x>320 )
                x = 320;
            else if(x < 0)
                x = 0;

            if( y>480 )
                y = 480;
            else if(y < 0)
                y = 0;

            if( (x<=320) && (x>=0) )
            {
                input_report_abs(ts->dev, ABS_X, x);
                input_report_abs(ts->dev, ABS_Y, y);

                input_report_key(ts->dev, BTN_TOUCH, 1);
                input_report_abs(ts->dev, ABS_PRESSURE, 1);
                input_sync(ts->dev);
                printk("x, y = %d, %dn", x, y);
            }
        }
        ts->xp = 0;
        ts->yp = 0;
        ts->count = 0;

        writel(S3C_ADCTSC_PULL_UP_DISABLE | AUTOPST, ts_base+S3C_ADCTSC);
        writel(readl(ts_base+S3C_ADCCON) | S3C_ADCCON_ENABLE_START, ts_base+S3C_ADCCON);
    }
    else {

        ts->count = 0;

        input_report_key(ts->dev, BTN_TOUCH, 0);
        input_report_abs(ts->dev, ABS_PRESSURE, 0);
        input_sync(ts->dev);

        writel(WAIT4INT(0), ts_base+S3C_ADCTSC);
    }

이렇게 해보셔요. pointercal 값 얻는 방법은 성호님이 하신 방법이 맞습니다.

이성호

2009.04.06 20:49:43
*.33.161.7

cal 값이 안 맞은 것같군요.. 왜그렇지 ??
고맙습니다....

고현철

2009.04.07 02:08:41
*.202.142.49

cal 값은 ts library의 ts_calibrate를 이용해서 저장된 /etc/pointercal 값을 이용했습니다.

안되면, x값 3개, y값 3개를 바꿔보세요....^^
저도 바꾸고 했는지 그냥 했는지 가물하네요....
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
6148 오드로이드 공구 구성품 관련 문의 [2] 이상우 2009-11-07 476
6147 [MFC]Bit Processor?? [1] 안드러오니 2010-02-02 476
6146 bluetooth device driver에 대한 질문입니다. [1] 김동래 2010-05-05 476
6145 application screen size OGeumDong Knife Ball 2010-05-07 476
6144 TV Out [1] 김주영 2010-05-14 476
6143 Android상에서 firmware upgrade [1] 파일럿 2010-05-15 476
6142 makefile 관련 질문입니다. [1] 마수리 2010-07-03 476
6141 Odroid-T의 소스를 받아볼 수 있을까요? [3] lived 2010-07-07 476
6140 app 실행 문제에 대한 로그.. file [1] 은재아빠 2010-11-08 476
6139 LCD 관련 문의 드립니다. [1] 조남희 2011-02-09 476
6138 device.c 퍼미션 수정.. [1] skean 2011-03-04 476
6137 이솝 MP2530F WinCE BSP 구해 봅니다... 에구릉 2011-08-18 476
6136 오드로이드 비스타용 드라이버 [2] day 2009-11-20 477
6135 6410 관련 초보 질문입니다. [1] 마린 2009-10-22 477
6134 파일시스템구축에 대해 [1] 우운용 2009-10-24 477
6133 오드로이드에서 Rootfs [1] 김성수 2010-03-27 477
6132 오드로이드에서 32bit 그래픽 사용 질문입니다. [1] 권도홍 2010-03-27 477
6131 s5pc100 & android-2.1 can't play 3gp file [1] stiff 2010-04-29 477
6130 이솝C100 회로도는 어디서 받나요? [1] 김장균 2010-05-08 477
6129 AESOP6410보드에서 SD메모리하고 관련된 Channel를 바꾸고 싶은데... 허경 2010-05-29 477

사용자 로그인