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

안녕하세요

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 조회 수
4508 nand 관련 질문입니다. [2] 임지영 2009-04-03 1016
4507 TFT-LCD 16bit 모드상에서의 문제 [3] 한석준 2009-04-04 880
4506 6410 SPI에 대해서 물어보겠습니다. [2] 주의이름으로 2009-04-04 1090
4505 SMDK6410에서의 OneNAND booting sequence [1] 김영문 2009-04-04 2444
4504 RNDIS/Ethernet Gadget 드라이버? [2] 두현택 2009-04-04 2324
4503 [S3C241x] MCU용 USB Device와 PC Host 와 통신해 보신분 계... 정민우 2009-04-05 1015
4502 H/W 코덱 MFC 관련 문의 [2] 홍성만 2009-04-06 833
4501 6410 칩 수급 관련해서 질문드립니다. [1] 홍경동 2009-04-06 635
4500 6410 카메라 커넥터 질문드립니다. [2] ForceNcool 2009-04-06 717
» 안드로이더 에 touch cal 값을 어떻게 얻었나요? [3] 이성호 2009-04-06 2718
4498 안녕하세요~ 구입가능 한가요? [4] 박영준 2009-04-06 496
4497 S3C6410 부팅중 멈추는 현상에 대한 질문입니다. [2] 최종환 2009-04-06 1738
4496 안드로이드에서 인터넷 연결이 안된것으로 인식됩니다. [2] 이성호 2009-04-06 1099
4495 보드 부팅이 제대로 안되어서... [12] 노희준 2009-04-07 1434
4494 USB Host Starting이 안되네요. [12] 민경오 2009-04-07 1306
4493 S3C6410 SROMC의 wait / byte Enable 이 어떤 신호들인가요? [2] 여정휘 2009-04-08 890
4492 2차 보드 bsp 혹시 가지고 계신분??? [1] 진태영 2009-04-08 733
4491 /sbin/init 실행하다가..죽는 문제.. [6] 최종환 2009-04-08 809
4490 aesop6410 WinCE 6.0 Keypad Driver 요청합니다. [5] 여정휘 2009-04-08 1034
4489 Android 포팅 방법에 대한 질문 [11] 전병환 2009-04-09 7748

사용자 로그인