ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료수집] 터치스크린, touch pad, 터치패드
    정리필요2 2007. 11. 23. 05:08

    korone 질/답 게시판 둘러보고 갈무리..

    Q 전에 질문을 올렸었는데.. 너무 장황한것 때문인지;;; 답변이 없네요;;;ㅠㅠ

    제 개발환경은 empos2 board 입니다.
    현재는 타겟보드에 qte-3.3.3을 포팅하여 저희가 짠 프로그램을 올려서 사용하려고
    합니다. 그런데 2.3.2에서는 잘 작동하던 터치스크린이 작동을 하지 않습니다.

    ./configure 옵션은 -embedded arm -shared -thread -no-cups -qt-mouse-linuxtp

    이구요, 엠포스 보드에서 터치스크린 디바이스를 touch로 잡고 있기때문에
    qmouselinuxtp_qws.cpp 파일에서 디바이스명을 고친상태입니다.
    calibrate 실행시 포인터랑 제가 누르는 곳이 맞지 않습니다.
    <그림을 올리는 법을 몰라서....>
         p                    t
           p                  t
              p               t
                 p            t
                    p         t
                       p      t

    위를 화면이라고 생각해주시면. p 가 포인터의 이동방향이고 t 가 제가 누른부분의
    이동방향입니다.

    일전에 올라왓떤 터치스크린 잡는법에는 커널내에서 mk712란 파일을 수정하는 법도 있던데
    엠포스는 ads7846_ts 이란걸 쓴다고 합니다. 그런데 파일 내부구조가... 너무 다른것
    같아서 저같은 초보가 접근하기는 힘든듯합니다.
    고수님들께 도움을 부탁드리고 싶습니다. 어떤파일을 건드려보면 될것 같다는..
    추측만이라도 얻고 싶습니다.
    부탁드립니다~^^;;;

    ps. 2.3.2 버전에서는 딱 맞게 인식을 하는데 커널내 드라이버 문제라면
          2.3.2에서도 같은 문제를 보여야 하는게 아닌지 생각도 들어서 커널 소스쪽은
         아직 만져보지 않았습니다. 제 생각이 틀리다면 지적해주시면 감사하겠습니다.


    Q 한백전자에서 교육용 보드로 제공하는 엠포트2 보드에 QT/E 3.대 버전을
    문제없이 포팅해서 사용해보신분 있으신가요?
    한백전자에 문의해본결과 터치스크린을 비롯한 문제를 해결한 버전은
    2.3.2 버전이며 이 버전에서 한백에서 제공한 포팅방법을 사용하면
    문제없이 돌아간다고 했습니다...
    저역시 그대로 포팅하여 2.3.2버전을 문제없이 사용하고 있구요...
    하지만...저버전에선 없는 함수들이 많고...
    제가 해당하는 라이브러리를 만들기엔 실력이 부족하여...
    높은 버전을 포팅하려하는데요...
    경험이 있으신분이나 도움을 주실수 있는분 계시면 부탁 드립니다.

    A 높은 버젼을 포팅은 시도해 보셨나요? 그리고 터치 문제라면은
    다른 보드에서 터치문제로 인한 해결방법은 여기 게시판에 많이 올라왔었습니다.
    그걸 보시고 참고하시면 가능하리라 봅니다. 제가 봤을때는 문제없이 될꺼라 생각합니다.
    저도 교육용 보드를 2가지정도 접해봤지만 두 업체다 qt버젼을 2.3.2 버젼을 사용을
    권고했지만 여러번의 시행착오를 격은후에 더 높은버젼들 사용해왔습니다..
    한번 시도해보시기 바랍니다. 그리고 안되시면 안되시는 사항을 올려주시면 같이 고민해서
    해결방법을 찾는게 좋을듯합니다.^^


    Q qt-2.3.7을 쓰고 있습니다. qt프로그램을 보드에 올리면 터치 스크린이 안돼는데여
    여기에 대한 지식이 하나도 없어서여 어떤식으로 해야 하는건가여?
    설명 좀 해주세여 ^^

    이런 식으로 질문을 해서 죄송합니다. ~~~~~

    A 임충섭     04-11-12 00:46
     
    바보같은 말이지만 누가 제발 /etc/pointercal 파일좀 주세요~~
    요놈 생성이 안되네요... 오늘 그래도 이래저래 고생하면서 나름대로의 성과를 얻었습니다
    터치 패드만 되면 다 끝나는데 ㅠㅠ 바보같은 말이지만 누가 제발 /etc/pointercal 파일좀 주세요~~
    요놈 생성이 안되네요... 오늘 그래도 이래저래 고생하면서 나름대로의 성과를 얻었습니다
    터치 패드만 되면 다 끝나는데 ㅠㅠ 

    A  양길석     04-10-12 09:12
     
    참 추가적으로 qt 3.0 이상 버젼에서 구동이 안되는걸루 알고 있습니다. 구동하기 위해서는 carlibrate 소스를 수정을 해야됩니다..
    qtopia 가 qt 2.7 버젼으로 만들어졌기때문에 약간의 수정만 하시면 사용하실수 있을겁니다.. ^_^;; 참 추가적으로 qt 3.0 이상 버젼에서 구동이 안되는걸루 알고 있습니다. 구동하기 위해서는 carlibrate 소스를 수정을 해야됩니다..
    qtopia 가 qt 2.7 버젼으로 만들어졌기때문에 약간의 수정만 하시면 사용하실수 있을겁니다.. ^_^;; 

    A  양길석     04-10-12 09:11
     
    carlibrate는 qt로 짜여져있습니다.. 그대로 사용하시면 됩니다. 좌표 설정은 프로그램이 실행이 되면은 x 라고 표시된곳을 누르게 되면은
    320*240 영역에서 첫번째 누른 위치와 두번째 누른위치를 계산을 해서 제대로 입력이 되면은 5번정도의 입력만에 좌표값이 저장이 됩니다.
    저장위치는 /etc/pointercal 이란곳에 저장이 되고  프로그램 로딩할때마다 이 좌표를 읽어 들여서 사용하게 됩니다. carlibrate는 qt로 짜여져있습니다.. 그대로 사용하시면 됩니다. 좌표 설정은 프로그램이 실행이 되면은 x 라고 표시된곳을 누르게 되면은
    320*240 영역에서 첫번째 누른 위치와 두번째 누른위치를 계산을 해서 제대로 입력이 되면은 5번정도의 입력만에 좌표값이 저장이 됩니다.
    저장위치는 /etc/pointercal 이란곳에 저장이 되고  프로그램 로딩할때마다 이 좌표를 읽어 들여서 사용하게 됩니다.

    A  김용오     04-10-11 21:21
     
    qtopia를 사용하지 않는 다면 qpe에 있는 calibrate를 qt용으로 포팅해야 하나요?
    calibrate 하지 않고 touch screen을 사용 하면 에러가 생길 것 같은데 qtopia를 사용하지 않는 다면 qpe에 있는 calibrate를 qt용으로 포팅해야 하나요?
    calibrate 하지 않고 touch screen을 사용 하면 에러가 생길 것 같은데 

    A  korone     04-10-11 18:49
     
    qtopia를 써본적이 없어서 잘 모르겠지만. 기본적으로 calibration이라하면
    touch 스크린내의 좌표 영역을 제대로 잡아주는 역할을 합니다.
    양길석님이 이 부분 잘아시니깐 대답좀 해주셔요~ qtopia를 써본적이 없어서 잘 모르겠지만. 기본적으로 calibration이라하면
    touch 스크린내의 좌표 영역을 제대로 잡아주는 역할을 합니다.
    양길석님이 이 부분 잘아시니깐 대답좀 해주셔요~ 

    A  korone     04-10-11 18:23
     
    컴파일 할때 -mouse-liunxtp 라는 방법으로 컴파일 하면
    src 밑에 kernel 밑에 qmouselinuxtp_qws.h 와 cpp 파일이 들어있는데
    이것을 compile 해서 합니다.(3.x  이상일경우 src/embedded 풀더 밑에 들어있습니다.)
    따라서 qmouselinuxtp_qws.h와 cpp 내용을 보고 해당 시스템의 설정과 맞는지 확인해 보셔야 합니다. 컴파일 할때 -mouse-liunxtp 라는 방법으로 컴파일 하면
    src 밑에 kernel 밑에 qmouselinuxtp_qws.h 와 cpp 파일이 들어있는데
    이것을 compile 해서 합니다.(3.x  이상일경우 src/embedded 풀더 밑에 들어있습니다.)
    따라서 qmouselinuxtp_qws.h와 cpp 내용을 보고 해당 시스템의 설정과 맞는지 확인해 보셔야 합니다. 



    : qt-2.3.7 올렸구요 강좌에 나온덴로 예제로 된 어플리케이션 구동 확인했습니다
    : 그래서 터치스크린을 사용해볼려구 하는데 잘안되네요 게시판 보구 특정소스를
    : 수정해야 한다구 해서 qwsmouse_qws.cpp이던가(?) 아무튼 그것두 그대루 복사해
    : 서 따왔구요 다시 컴파일 해줬습니다. 그리구 콘솔상에서 mk712 동작되는것두
    : 확인했구요 echo '1' > /proc/mk712 명령으로 좌표 찍히는것두 잘됐음니다 근데
    : qt 안에 있는 예제 프로그램 올린다음 터치로 버튼같은게 클릭되나 해봤는데
    : 그런건 전혀 안되네요 원래 그런건가요? 아님 제가 뭘 빠뜨렸나요? 여기서 진척이
    : 안되니깐 답답하네요 답변 기다릴께요 수고하세요


    커널의 driver/char/mk712.c 파일을 수정하시고 다시 커널 컴파일 하셨어 올려 보세요..

    이지 보드를 쓰고 있습니다.

    변변 찮지만 제가 한 내용을 올려볼게요

    QT/E 컴파일 이란 강좌.. 밑에 있죠?

    그것과 FALINUX 사이트에 가셔서 Q&A 부분에 사용자 강좌에 QT/E 3.3.3 터치패널 구동이라고

    있구요 강좌에 보시면 qt-2.3.7 도 깔수 있는 방법이 있습니다

    이 세가지 내용을 전부 조합해서  이해하신후

    컴파일을 그대로 하시면 되는데요~


    주의하실 점은 QT/E-3.3.3/mkspecs/qws/linux-arm-g++

    에 있는 qmake.conf에서   QMAKE_CC    QMAKE_CXX   등등을

    꼭 armv5l-linux-gcc 모양처럼  바꿔주시고

    저장을 시켜주세요

    그렇지 않으면

    확실친 않지만 제가 생각하기로는 나중에 calibration부분을 이지보드용으로 컴파일을
    해줄때  안될수도 있을것 같아요

    FALINUX사이트에서도 자료를 받아볼수 있는데 (위에서 제가 말한 qt-3.3.3터치패널)
    사용방법도 있습니다.


    자료중에는
    마우스관련, 터치패드 관련 파일 4개를받아볼수 있고
    mk712.c 수정본을 제공받을수 있습니다.

    파일 네개는 qt/e-3.3.3 폴더 중 src/embedded 폴더에 넣어주시고
    mk712.c 파일은 보드 커널에 drivers/char 밑에 넣어줍니다.

    기존에 있는 파일을   교체 하셔도 무방합니다.

    그런데 mk712.c 는  보드의 터치패널과 관련된 칩이름으로서 (mk712)
    그냥 보통 만들어주는   zImage 를 올리신 후에
    좌표를 찍어보시면
    x축과 y축이 서로 반대일 겁니다. 

    이 x축과 y축을 바꿔줘야 하는데요

    여기서부터는 잘보세요!!!!!!
    FALINUX 에  올리신 분이 못올리신 내용입니다.


    보통 2.3.7 에는 qwsmouse_qws.cpp 인가요?
    xy축을 바꿔주는 방법이 소개가 되는데

    3.3.3 에는 도저히 그 소스가 없어요
    그래서 찾아낸 방법이


    FALINUX사이트에서 받은  소스(mk712.c) 중에
    static void mk712_output_point(unsigned short x, unsigned short y)
    란함수가 있습니다.

    이 곳에서 tx = x 를   tx=y 로 바꾸고
    ty = y 를 ty=x 로 바꿔주고 보드 커널 이미지를 만들어 줍니다.

    그렇게 만들어진 zImage 를 올리시면 될겁니다.

    보드쪽에서는

    1. 호스트 pc 에서 만들어진 qt/e-3.3.3  밑에 있는 lib 폴더에 만들어진

       라이브러리 파일들을 보드 /lib 에 링크시켜주시고

    2. qt 가 마운트 되어 있는 폴더에 가서
        export 를 통하여 경로를 정해주시고

    저같은 경우  
            export QTDIR=/mnt/nfs/qte-3.3.3         
            export PATH=$QTDIR/bin:$PATH
            export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib

       첫줄에서  /mnt/nfs부분은 제각기 다르시겠죠? 경로만 설정 해주시면 되고
       두 번째 줄, 세번째 줄은 똑같이 써주세요 

    3.  export QWS_MOUSE_PROTO=linuxtp
        이것은 마우스와 터치패드에 관한 것입니다.
       제가 이것을 빼먹고 했을때는 qt 예제를 실행시킨후 기아상태가 발생했지요
        즉, 키보드 입력이 안먹고 아무것도 안 먹습니다.
       혹, 터치패드가 잡혀서   예제가 실행이 된다해도 그 예제를 종료시키면
       주도권이 다시 콘솔창으로 돌아오지 않을겁니다.
       꼭 해주세요.....

    4. 그리고 calibration 인데요
       FALINUX 사이트에서 받은 calibration 폴더에 있는 것을 경로 설정을 잘해주시고
       컴파일을 하시면 calibrate 라는실행 화일이 생길겁니다.
       (혹, 컴파일이 제대로 안 되시는 분들   에러가 백개가 넘게 주루룩~~ 나오시는 분들은
        위에서 말씀드린 qws/linux-arm-g++ 부분에서 CC , CXX 부분등을 armv5l-linux-gcc 등등
        으로 안해주셨을 확률이 있습니다. 확인해 보세요)
      
        그렇게 생긴 calibrate 라는 파일을 보드에서 실행을 시켜보시면
        화면이 뜰겁니다. 실행을 할때 -qws 옵션 붙여주세요
        총 5개 x 표가 나오고 그것을 찍으면 calibration 이 잘 되면 자기가 알아서 종료가 됩니다.
         만약 false 가 나오시는 분들은
         위에서 제가 말한 mk712.c 을 보드커널에 있는 mk712.c 와 교체하시는데 x, y를 바꿔주지
         않아서 그럴겁니다. 꼭 해주시고 그렇게 만들어진 커널이미지를 올려주세요.

    5. calibration을 다 해주시면 보드에 /etc/pointercal 이라는 것이 생기구요
        이제 examples 폴더에 있는 예제를 실행해보시면 그 pointercal이라는 파일에서 정보를 읽어가 
        서 터치가 제대로 동작을 할겁니다   


    두서없이 작성한 내용이라 좀 허접한데 아무쪼록 도움이 되셨으면 좋겠네요



    큐티 3.3.3을 쓰고 있구요

    첫번째!

    echo'1'>/proc/mk712

    를 사용 하여 좌표가 찍히는 것은 됩니다
    근데 컴파일하여 -qws옵션을 주어 실행하면 화면에 출력이 되지만
    이때 터치는 먹통입니다.

    먼저 해보신 분들이나 장형기님!

    어떤 문제로 보아야 할까요?

    그리고 두번째!

    configure할때 thread옵션을 주어서 libqte 가 libqte-mt가 되는것은 확인하였는데요
    그후에 예를 들어

    ./tetrix -qws를 실행하면

    ./tetrix : error while loading shared libraries : libqte.so.3 cannotnot open sharedy

    라는 에러가 뜨는데요 혹시 아시면 가르쳐주시겠습니까?
    부탁드립니다.

    양해구함 첫번째 문제는 잘 모르겠고 두번째 문제는 링커 문제 같네요.
    링커할때 libqte.so 라이브러리를 링크한듯 하네요.
    멀티쓰레드 사용하시려면 libqte-mt.so 파일로 링크 해주시면 될듯.
    해당 폴더 있는 파일의 Makefile을 수정해 주시고
    (-lqte => -lqte-mt) 재컴파일해주세요. ^^&
     X 2006/02/09 
    OnePiece 첫번째 문제는 mk712를 수정하시면 될꺼 같네요.
    수정하실 부분은
    static void mk712_output_point(int x, int y)
    {
    struct mk712_packet t;

    t.header = 0; <-- 1로 변경
    t.x = x;
    t.y = y;
    t.reserved = 0;

    mk712_output_packet(t);
    output_point = 1;
    }


    static void mk712_release_event(void)
    {
    struct mk712_packet t;

    if (!output_point) {
    points = 0;
    return;
    }
    output_point = 1; <-- 0으로 변경

    t.header = 0;
    t.x = t.y = t.reserved = 0;

    mk712_output_packet(t);
    points = 0;
    }

    이렇게 변경하시면 될꺼 같네요.






    [QT/Embedded] 터치패드 mk712 관련문의

    수정된 mk712.c소스파일(x=0xfff-x)로 이미지생성하여 보드에올린후
    calibration 해보니 claibration도 되지않고 x,y축이 바뀐거 같아서

    t.x=x;를 t.x=y;로
    t.y=y;를 t.y=x;로 수정한후 확인결과

    calibration은 아래와 같이 실행되었지만 x,y축의 low와 high가 바뀐상태였습니다.
    바뀐 x,y축의 low와high를 소프트웨어적으로 소스코드의 어디를 손대야 될지 모르겠습니다.

    bl-x : 180, bl-y : 3877, br-x : 3967, br-y : 3831
    vl(tl.y - bl.y): 3643, vr(tr.y - br.y) : 3519
    diff(vl - vr) : 124, avg((vl+vr)/2) : 3581
     diff <= avg / 20 : OK
    ht(tl.x - tr.x): 3631, hb(br.y - bl.y) : 3787
    diff(ht - hb) : 156, avg((ht+hb)/2) : 3709
     diff <= avg / 20 : OK
    dev  119:  ea, scr   1e:  1e

    dev   b4: f25, scr   1e: 1c2

    dev  f7f: ef7, scr  262: 1c2

    dev  f48: 138, scr  262:  1e

    dev  81e: 7d7, scr  140:  f0

    [root@ez-x5 qte3]$ ./hello -qws
    [START]MK712 USERS [0]
    [ING]MK712 CONTORL VALUE [0000005B]

    고수분들의 조언부탁드립니다.
    터치패드를 찍었을때의 좌표값의 모습을 첨부파일로 첨부하겠습니다.

    사고다발지…
      07-02-14 15:28
    가장 손쉬운방법은........
    struct 를 고치는것입니다.

    press;
    x;
    y;
    pad; 로 되어있다면

    press;
    y;
    x;
    pad; 로....ㅡㅡ;;

    그럼 다른데 손볼필요없이 X,Y 가 바뀌죠..쩌비..ㅡㅡ;

Designed by Tistory.