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

안녕하세요

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 S3C6410 IROM booting [6] 전병환 2009-02-19 2771
6147 오드로이드 SDCARD의 Root FS를 안보이게 하는 방법은... [2] 김영일 2010-08-25 2768
6146 [질문] 이솝보드에 삼성의 DNW(USB/Sireal 다운로더)사용하려면..? [6] 박재흥 2006-08-16 2759
6145 삼성 2440 I/O Speed [1] 전철웅 2007-11-17 2759
6144 [완료] 터치 증상이 이상합니다. [6] 강경완 2007-05-11 2751
6143 가속도 센서 관련하여 문의글 올립니다. [2] 리오살다 2013-04-02 2750
6142 [완료]dm9000a [10] 이진우 2007-09-14 2741
6141 프로젝트 계획 조언부탁드립니다. [5] 시그인트 2014-02-19 2734
6140 Opencore 와 Openmax 그리고 mfc 와의 관계. [11] 임기영 2009-09-04 2732
6139 [완료]SDL 기본 화면 뛰우기 [3] 윤치호 2007-11-15 2731
6138 [완료] LX800 PDS에 있는 WINCE BSP는 무엇인지요. [6] 오주열 2007-05-26 2731
» 안드로이더 에 touch cal 값을 어떻게 얻었나요? [3] 이성호 2009-04-06 2717
6136 ubuntu 10.04 오드로이드 타겟 adb 연결 문제 [1] rapel 2010-06-11 2711
6135 yaffs2 포팅(lost+found증상) file 푸르름 2011-12-23 2709
6134 [완료]pci slot확장시 bios수정필요한지? [2] 조성철 2007-06-05 2709
6133 aesop lx800 구입문의 [1] 조정근 2008-09-18 2704
6132 [re] [질문] 동영상 재생 & LCD 잔상 [5] 강덕하 2007-05-22 2703
6131 안드로이드-S 구글맵관련 앱 설치가 안됩니다. [3] 바람돌이0 2010-07-21 2692
6130 LX800 주변기기 추천 부탁드립니다.[완료] [7] 조준동 2007-05-10 2692
6129 만든 앱이 수퍼 유저 권한 획득하려면 에 대한 질문입니다. [7] 프로그램개발자 2014-01-08 2689

사용자 로그인