[exLib]이벤트처리 라이브러리

FWP21/exLib | 2009.03.13 18:02 | Posted by imesu-문경원
                                                                                                                                               
작성자 : 문경원
작성일 : 2009년 02월08일
출처   :
http://www.fsp21.org
참여 인원 : 유영창, 이영민, 문경원 , 이원재
                                                                                                                                              

1. exLib개요

exLib는 이벤트에 대한 처리에 도움을 주기 위해 개발한 라이브러리 입니다.

여기서 말하는 이벤트란 키보드 입력, 마우스 입력, 터치 스크린 입력등 입력 디바이스 드라이버를 통해 들어오는

입력을 통칭합니다.

약간의 감으로 느끼셨겠지면, 얼마전 gxlib를 이용하여 마우스 움직임을 화면에 표시하는 글을 올린적있음니다.

소스 부분을 보다 보면 poll을 이용하여 마우스 입력이 들어 왔을 때, 마우스 입력 이벤트 처리를 하는 부분이 있습니다.

즉 poll을 이용하며 입력 이벤트를 대기하기 위해 무한정 기다리지 않고, 이벤트가 발생한 시점에서 원하는 동작을 수행할 수 있습

니다.

예제1) 그냥 read 처리

while (1)
{
    read( fd, &buf, sizeof(input_event_t));                                    // mouse의 입력 값을 읽어 온다.   
    switch(buf.code)
    {
        case BTN_LEFT :     printf("왼쪽 버튼이 눌렸습니다.n");      break;
        case BTN_RIGHT :    printf("오른쪽 버튼이 눌렸습니다.n");    break;
        default :                break;
    }
    printf( "mouse read type:%x , cod:%x ,value:%xn", buf.type ,buf.code ,buf.value);     
   }
}

예제2) poll 함수를 이용한 read 처리

while (1)
{
    poll_state = poll(                                  // poll()을 호출하여 event 발생 여부 확인    
                      (struct pollfd*)&poll_events,     // event 등록 변수                     
                                                 1,     // 체크할 pollfd 개수
                                              1000      // time out 시간

                       );
    if ( 0 < poll_state)                                 // 발생한 event 가 있음
    {    
         if ( poll_events.revents & POLLIN)              // event 가 자료 수신
         {
            read( fd, &buf, sizeof(input_event_t));        // mouse의 값을 읽어 온다.
            switch(buf.code)
            {
                case BTN_LEFT :    printf("왼쪽 버튼이 눌렸습니다.n");   break;
                case BTN_RIGHT:    printf("오른쪽 버튼이 눌렸습니다.n"); break;
                default :          break;
            }
            printf( "mouse read type:%x , cod:%x ,value:%xn", buf.type,buf.code,buf.value);    
         }
         else if ( poll_events.revents & POLLERR)      // event 가 에러?
         {
            printf( "마우스 입력에 에러 발생  프로그램 종료");
            break;
         }
      }
   }
   close( fd);
   return 0;
}


예제1) ,2) 의 차이점이 느껴지시나요? 필을 느껴보세요. 

차이를 못느끼셨다면 요건 숙제로 하겠습니다. emoticon

장길석님의 poll에 대한 부분을 읽어 보시면 쉽게 알 수 있을거에요.

exLib는 요렇게 poll을 보다 쉽게 이용하고, 입력 드라이버에서 받아온 이벤트를 보다 쉽게 처리하기 위해 제공할

라이브러리 입니다.

이번 강좌에서는 우선 exlib 의 단독적인 사용법을 기술 하고,

조만간 exLib 와 gxLib의 환상적인 하모니 조합을 이용한 샘플 코드도 추가 하겠으니 기대하세요.

추가적으로 현재 www.fsp21.org에서 공동작업으로 개발하고 있는 입력 처리 라이브러이 ixLib의 기술 문서가

완료 되는 대로 exLib + ixLib + gxLib의 조합으로 보다 쉽게 입력 장치를 핸들링 할 수 있는 편리함을 제공하겠습니다.

기대 하세요. 

버젼은 아직 내지 않았고, fsp21 멤버들과 협의하여 버젼을 완성되면 다시 올리겠습니다.

오늘은 그냥 파일 압축한 날짜로 압축해서 올립니다.

우선은 exLib를 함수 소개 및 설치법, 샘플 소스에 대한 설명으로 오늘의 강의를 진행 하겠습니다.


                                                                                                                                                                     

1.1. exLib의 특징

  •  쉬운 설치
    별도의 다른 프로그램의 설치 가 필요 없고 , exLib소스를 참조하는 것 만으로 사용 가능
  •  모든 이벤트에 대해 동일한 처리 인터페이스 제공
  •  무료로 제공
    Fsp21 또는 FALinux Forum회원이라면 누구나 개발에 동참 할 수 있으며, 회원이 아니더라도 exLib가 제시한 저작권만 유의한다면 무료로 사용 가능
                                                                                                                                                                      

1.2. exLib의 기능

  • 파일 디스크립터 등록 기능
  • 입출력 발생치 처리 함수(read, writ)함 수 등록 기능
  • 등록된 파일 디스크립터 관리 기능

                                                                                                                                                                      

1.3. exLib의 저작권
라이브러리 소스별로 입력어 있는 상단의 주석을 변경 하지 않는 이상, 무료로 사용이 가능하며 배포도 가능합니다. 개발자와 개발 정보를 알려 주는 상단의 주석문을 절대 변경하지 마십시요.


                                                                                                                                                                     
2. exLib 설치 방법

다음의 웹사이트에서 소스를 다운로드 받으시면 됩니다. 

다운로드 받으신 후 압축을 해제하고 샘플을 실행시키시면 됩니다.


[imesu@localhost ]$ tar zxvf  exlib.tar.gz
[imesu@localhost exlib]$cd exlib
[imesu@localhost exlib]$make sample

복잡하게 생각 하지 마시고 압축 푼 다음에 디렉토리를 보면 아래와 같은 파일들이 있습니다.

[imesu@localhost exlib]$ ls
Makefile  ex.h  ex.c   sample_input_main.c  sample_main.c  test_main.c

[imesu@localhost exlib]$ make sample
Compiling sample_main.c ...
arm-linux-gcc -c  -I. -I/usr/arm-linux/include -Wall -O2 -g -o sample_main.o sample_main.c
arm-linux-gcc -I. -I/usr/arm-linux/include -Wall -O2 -g  sample_main.o ex.o -o sample_main
arm-linux-nm sample_main > sample_main.map
cp sample_main /nfs/exlib/sample_main

[imesu@localhost exlib]$ make input
arm-linux-gcc -I. -I/usr/arm-linux/include -Wall -O2 -g  sample_input_main.o ex.o -o sample_input_main
arm-linux-nm sample_input_main > sample_input_main.map
cp sample_input_main /nfs/exlib/sample_input_main


요렇게 arm용으로 컴파일 된 실행 파일을 얻을 수 있습니다. 보드(저희는 ez-2440 보드 사용했습니다) 를 nfs로 연결하시고 

타겟 보드에서 TEST 하시면 됩니다.

타겟 보드가  없는 분은 makefile을 약간 변경해서 gcc로 컴파일 한 후 pc에서 test 하셔도 됩니다.

makefile 수정하는 부분은 주변 궁금하신분 있음면 요청하시면 예시를 추후에 추가 하겠습니다. emoticon


                                                                                                                                                                     

3. exLib 함수설명

3.1. ex_init() 초기화

  • 설명  :
    event 라이브러리를 초기화한다..

헤더

ex.h

형태

int      ex_init( int wait_time )

인수

wait_time poll 대기 시간 설정, 단위[ms], 0이상의

반환

-

주의

-

  • 예제
    “3.8 sample.c  샘플 코드 참조“, 아래 예제는 sample_main.c의 일부분 입니다.
 if(ex_init( 30))
 {
         ex_print_error("\n");
         exit(0);
 }

                                                                                                                                                                     
3.2. ex_print_error ()  에러메시지 표시 함수

  • 설명  :
    exlib에 에러코드, 에러문자열 및 사용자 메세지 출력합니다.

헤더

ex.h

형태

int      ex_init( int wait_time )

인수

wait_time poll 대기 시간 설정, 단위[ms], 0이상의

반환

-

주의

-


  • 예제
    “3.8 sample.c  샘플 코드 참조“, 아래 예제는 sample_main.c의 일부분 입니다.
 if(ex_init( 30))
 {
        ex_print_error("초기화 에러 발생 !!!아~슬프다.\n");
        exit(0);
 }

                                                                                                                                                                     

3.3. ex_add_fd () 파일 디스크립터 등록

  •  설명
    fd를 관리대상에 포함시키고, fd를 포함하는 ex_mng_t 구조체를 반환한다.

헤더

ex.h

형태

ex_mng_t *    ex_add_fd( int fd )

인수

fd 등록한 파일지시자

반환

NULL이면 실패, ex_mng_t 구조체 주소

주의

함수호출 ex_adjust_poll함수 호출이 필요.

 

  •  예제
    “3.8 sample.c  샘플 코드 참조“, 아래 예제는 sample_main.c의 일부분 입니다.
int fd[2];
int main( int argc, char **argv )
{
    ex_mng_t *pipe_in_obj;
    if (pipe(fd) < 0)
    {
        printf("pipe error\n");
        exit(0);
    }
   
    if(ex_init( 500))
    {
        ex_print_error("\n");
        exit(0);
    }
    pipe_in_obj = ex_add_fd(fd[0]);
    if(pipe_in_obj == NULL)
    {
        ex_print_error("\n");
    }
    ex_adjust_poll();
}


 

                                                                                                                                                                      

3.4. ex_mng_t  이벤트 매니져 구조체

typedef struct
{
    int       fd;      // 파일 지시자
    void   *priv;
   
    int (*on_read   )(void *   self);    // 이벤트 발생시 데이터를 읽어와 처리할 함수
    int (*on_write  )(void *   self);    // 이벤트를 발생 시키기 위한 쓰기 함수
} ex_mng_t;

  • 예제
    “3.8 sample.c  샘플 코드 참조“, 아래 예제는 sample_main.c의 일부분 입니다.

int fd[2];

int pipe_read(void * self)
{
    ex_mng_t *mng;
    char   buff[1024]={0,};
    int   read_size;
   
    mng = (ex_mng_t *)self;
   
    read_size = read( mng->fd, buff, sizeof(buff) );
   
    printf("pipe_read size :%d\n",read_size);

}

int main( int argc, char **argv )
{
    ex_mng_t *pipe_in_obj;
    if (pipe(fd) < 0)
    {
        printf("pipe error\n");
        exit(0);
    }
   
    if(ex_init( 500))
    {
        ex_print_error("\n");
        exit(0);
    }
    pipe_in_obj = ex_add_fd(fd[0]);
    if(pipe_in_obj == NULL)
    {
        ex_print_error("\n");
    }
    pipe_in_obj->on_read = pipe_read;                  // read 함수 등록
   
    ex_adjust_poll();
}



 

ex_add_fd() 를 통해 파일 디스크립터를 등록하고, 이벤트 발생시 호출할 함수 pipe_read ()을 등록하였다. 

                                                                                                                                                                     

3.5. ex_del_fd () 파일 디스크립터 등록

  •  설명
    fd를 관리대상에 삭제 시킨다.

헤더

ex.h

형태

void         ex_del_fd(int fd)

인수

fd 삭제할 파일지시자

반환

-

주의

함수호출 ex_adjust_poll함수 호출이 필요.


  • 예제
“3.8 sample.c  샘플 코드 참조“, 아래 예제는 sample_main.c의 일부분 입니다.

int my_timeout(void)
{
 printf("My time out\n");
 ex_del_fd(fd[0]);     // 전송하는쪽 fd를 제거한다.

 ex_adjust_poll();      //poll을 재조정한다.
 return 0;
}

                                                                                                                                                                    
3.6. ex_adjust_poll () 관리자 최적화 기능 설정 

  • 설명
    poll 처리가 가능하도록 최적화 하게 플레그를 세운다.

헤더

ex.h

형태

int    ex_adjust_poll ( void )

인수

-

반환

0

주의

ex_loop함수호출 하기전에 필요하다.

  • 예제
    “3.8 sample.c  샘플 코드 참조“, 아래 예제는 sample_main.c를 참조하세요.

                                                                                                                                                                     

3.7. ex_loop () 이벤트 관리자 

  • 설명
    1. ex_adjust_poll_req 가 설정 되어 있으면, poll 처리가 가능하도록 최적화 한다.
    2. poll() 을 호출하여 event발생 여부를 확인한다.
    3. 이벤트가 발생하면 등록한 read , write함수를 호출한다.


헤더

ex.h

형태

int       ex_loop ( void )

인수

-

반환

0이면 성공, -1이면 실패

주의

-

  •  예제
    “3.8 sample.c  샘플 코드 참조“, 아래 예제는 sample_main.c를 참조하세요.

                                                                                                                                                                    
3.8. Sample_main.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

#include "ex.h"

#define TRACE printf("\rTRACE %s:%d \n",__FILE__,__LINE__);


//--------------------------------------------------------------
// 전역변수 선언
//--------------------------------------------------------------

int fd[2];

//--------------------------------------------------------------
// 설명 : 반대쪽 파이브에 넣은 값을 읽어온다.
//--------------------------------------------------------------

int pipe_read(void * self)
{
    ex_mng_t    *mng;
    char         buff[1024]={0,};
    int         read_size;

    mng = (ex_mng_t *)self;

    read_size = read( mng->fd, buff, sizeof(buff) );

    printf("[rx]pipe_read :%s , size:%d\n\n",buff ,read_size);

}

//--------------------------------------------------------------
// 설명 :후킹 test 함수
//--------------------------------------------------------------

int my_hooking_loop(int poll_state)
{
    //printf("My hooking_loop\n");
    write(fd[1],"abc",3);
    return 0;
}

//--------------------------------------------------------------
// 설명 :time out test 함수
//      :ex_init()시 설정한 EX_WAIT_TIME_DEFAULT 시간 이상 이벤트가
//       발생하지 않으면 호출되는 함수
//       test를 위해 timeout시 데이터를 전송하게 만듦
//--------------------------------------------------------------

int my_timeout(void)
{       
    //ex_del_fd(fd[0]);                         // 전송하는쪽 fd를 제거한다.
    //ex_adjust_poll();                         //poll을 재조정한다.   
    write(fd[1],"hello!.exlib^^",14);   
   
    printf("[tx]pipe_write :hello..exlib My time out \n");
    return 0;
}

//--------------------------------------------------------------
// 설명 : exlib를 이용하여 pipe간 데이터 전송을 처리하는 기능 구현
//--------------------------------------------------------------

int main( int argc, char **argv )
{   
    ex_mng_t *pipe_in_obj;
    if (pipe(fd) < 0)
    {
        printf("pipe error\n");
        exit(0);
    }

    if(ex_init( EX_WAIT_TIME_DEFAULT ))           // 기본 20msec
    {
        ex_print_error("\n");
        exit(0);
    }

    //ex_on_hooking_loop = my_hooking_loop;     // 요걸 등록하면 후킹된다.주의!!!
    ex_on_poll_timeout = my_timeout;                  // 요걸 등록하면 타임아웃시 등록된 함수가 호출된다.

    pipe_in_obj = ex_add_fd(fd[0]);                     // read에 사용될 fd를 exlib에 등록한다.
    if(pipe_in_obj == NULL)
    {
        ex_print_error("\n");
    }
    pipe_in_obj->on_read = pipe_read;                 // 이벤트 발생시 호출되는 함수 등록

    ex_adjust_poll();                                           // fd를 등록할 경우 반드시 해주어야한다.

    //write(fd[1],"abc",3);

    while( 1 )
    {
        if(ex_loop())                                           // 이벤트 발생시 위에서 등록한 pipe_read함수 호출한다.
        {
             ex_print_error("\n");
             exit(0);
        }
    }
    return 0;
}

                                                                                                                                                                    
4. 마치며
이상으로 exlib를 사용하기 위한 함수 설명과 이해를 돕기 위한 샘플 코드 설명 하였습니다.
추후에 exlib를 이용한 다양한 샘플 코드를 추가하여 널리 개발자는 복되게 하는 라이브러리는 개발하도록 노력하겠습니다.
exLib는 www.fsp21.org의 멤버들의 공동 작업으로  개발한 라이브러리라는 것을 다시 한번 말씀드립니다.

후속타로 나오는 ixLib는 정말 재미 있는 라이브러리 입니다.
입력 디바이스 드라이버로 받은 마우스, 터치스크린, 키보드 등의 데이터 정보를 ixLib를 이용하면
간단히 몇개의 함수를 이용하여 ,장치 입력을 그냥 날로 먹을 수 있게 해주는 아주 행복한 Lib가 될거 같습니다.

exLib로 약간 심심함을 느끼시는 분들은 조그만 기다려 주세요. 막강 조합
exLib + ixLib + gxLib 로 프로그램을 날로 먹게 해주는 Library가 만들어 집니다.

이상은 2009년 2월 8일 일요일 하루 문서작성으로 하루를 보낸 문경원 이였습니다.

감사합니다.
emoticon

[ixlib]2. 마우스로 그림 그리기(ixlib + exlib + gxLib)

FWP21/ixLib | 2009.03.13 16:32 | Posted by imesu-문경원

                                                                                                                                                                                                
작성자 : 문경원
작성일 : 2009년 02월08일
출처   : http://www.fsp21.org
참여 인원 : 유영창, 이영민, 문경원 , 이원재
                                                                                                                                                                                                    

ixlib 사용법에 먼저 기술 할까 하다가 마음이 바꿔서. 우선 ixlib + exlib +gxlib를 이용한 결과물은 먼저 보여 드립니다.

눈에 뭔가 보여야 직관적으로 알수 있을거 같아서요.

우선 아래 동영상을 보시죠~~.( www.fsp21.org의 이영민님이 만드신 동영상을 볼 수 있습니다. )
http://www.fsp21.org/zbxe/?mid=FWP_daily&page=2&document_srl=10141&listStyle=&cpage=
마우스 실행화면.png

재밌어 보이지 않나요emoticon

샘플 코드를 포함해 놓았으니 그냥 컴파일 해서 사용하시면 됩니다.


ixLib 설치방법                                                                                  

다음의 웹사이트에서 소스를 다운로드 받으시면 됩니다

다운로드 받으신 후 압축을 해제하고 샘플을 실행시키시면 됩니다.

복잡하게 생각 하지 마시고 압축 푼 다음 실행 하면 됩니다.

 

   우선 ixLib 를 사용하실 폴더를 만듭니다.

 [root@backup ~]# mkdir fwp_mouse

 

   압축을 풀어 주세요.

[root@backup ~]# cd fwp_mouse/

 

[root@backup fwp_mouse]# cp ../ixlib-0.0.1.tar.gz ./

[root@backup fwp_mouse]# ls

ixlib-0.0.1.tar.gz

[root@backup fwp_mouse]# tar -zxvf ixlib-0.0.1.tar.gz

app/

include/

lib/

lib/gxLib/

lib/gxLib/ksc5601.h

lib/gxLib/gxbmp.c

lib/gxLib/ksc5601.c

lib/gxLib/sample.c

lib/gxLib/gxjpg.c

lib/gxLib/gx.c

lib/gxLib/nbold32.bdf

lib/gxLib/gxbdf.h

lib/gxLib/fontinfo.c

lib/gxLib/gxbdf.c

lib/gxLib/Makefile

lib/gxLib/gxjpg.h

lib/gxLib/gxpng.c

lib/gxLib/gxbmp.h

lib/gxLib/fontinfo.h

lib/gxLib/gxpng.h

lib/gxLib/gx.h

lib/uxlib/

lib/uxlib/ux_lib.h

lib/uxlib/ux_device.c

lib/uxlib/ux_debug.h

lib/uxlib/Makefile

lib/uxlib/ux_device.h

lib/uxlib/ux_debug.c

lib/ixlib/

lib/ixlib/ix.h

lib/ixlib/ix.c

lib/ixlib/Makefile

lib/exlib/

lib/exlib/ex.c

lib/exlib/Makefile

lib/exlib/ex.h

sample/ix_sample/

sample/ix_sample/sample_input_main.c

sample/ix_sample/ix_read_event_data_low.c

sample/ix_sample/ix_write_keyboard_key.c

sample/ix_sample/sample_main_origin.c

sample/ix_sample/sample_gx_main.c

sample/ix_sample/ix_read_mouse_low.c

sample/ix_sample/ix_read_key_press_low.c

sample/ix_sample/ix_read_touch_low.c

sample/ix_sample/ix_write_mouse_button_action.c

sample/ix_sample/ix_debug_disp_ix_device_info.c

sample/ix_sample/ix_auto_scan_open.c

sample/ix_sample/ix_set_screen_size.c

sample/ix_sample/ix_read_keyboard_low.c

sample/ix_sample/Makefile

sample/ix_sample/ix_write_mouse_rel_move.c

sample/ix_sample/sample_main.c

sample/ix_sample/ix_get_mouse_position.c

sample/ix_sample/ix_debug_disp_event_data.c

sample/ix_sample/sample_fwp_main.c

sample/ix_sample/sample_ix_main.c

 

 

   완료 됐습니다

 

[root@backup fwp_mouse]# ls

Makefile  app  include  ixlib-0.0.1.tar.gz  lib  sample

 

   샘플 코드 컴파일 하기

 


[root@backup fwp_mouse]# make

[root@backup_mouse]# cd sample

Makefile  app  include  ixlib-0.0.1.tar.gz  lib  sample

 

[root@backup ix_sample]# make

compiling ../../lib/ixlib/ix.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/ixlib/ix.o ../../lib/ixlib/ix.c

------------------------------------------------------------

compiling ../../lib/exlib/ex.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/exlib/ex.o ../../lib/exlib/ex.c

------------------------------------------------------------

compiling ../../lib/gxLib/gx.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/gxLib/gx.o ../../lib/gxLib/gx.c

------------------------------------------------------------

compiling ../../lib/gxLib/gxbmp.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbmp.c

------------------------------------------------------------

compiling ../../lib/gxLib/gxbdf.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/gxbdf.c

------------------------------------------------------------

compiling ../../lib/gxLib/fontinfo.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/fontinfo.c

------------------------------------------------------------

compiling ../../lib/gxLib/ksc5601.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/gxLib/ksc5601.o ../../lib/gxLib/ksc5601.c

------------------------------------------------------------

compiling ../../lib/uxlib/ux_device.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ../../lib/uxlib/ux_device.o ../../lib/uxlib/ux_device.c

------------------------------------------------------------

compiling sample_gx_main.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o sample_gx_main.o sample_gx_main.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o -o sample_gx_main.bin sample_gx_main.o

cp sample_gx_main.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_read_event_data_low.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_read_event_data_low.o ix_read_event_data_low.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o -o ix_read_event_data_low.bin ix_read_event_data_low.o

cp ix_read_event_data_low.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_read_keyboard_low.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_read_keyboard_low.o ix_read_keyboard_low.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_read_keyboard_low.bin ix_read_keyboard_low.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_read_keyboard_low.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_read_key_press_low.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_read_key_press_low.o ix_read_key_press_low.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_read_key_press_low.bin ix_read_key_press_low.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_read_key_press_low.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_read_touch_low.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_read_touch_low.o ix_read_touch_low.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_read_touch_low.bin ix_read_touch_low.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_read_touch_low.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_write_mouse_rel_move.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_write_mouse_rel_move.o ix_write_mouse_rel_move.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_write_mouse_rel_move.bin ix_write_mouse_rel_move.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_write_mouse_rel_move.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_debug_disp_event_data.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_debug_disp_event_data.o ix_debug_disp_event_data.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_debug_disp_event_data.bin ix_debug_disp_event_data.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_debug_disp_event_data.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_get_mouse_position.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_get_mouse_position.o ix_get_mouse_position.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_get_mouse_position.bin ix_get_mouse_position.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_get_mouse_position.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_read_mouse_low.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_read_mouse_low.o ix_read_mouse_low.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_read_mouse_low.bin ix_read_mouse_low.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_read_mouse_low.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_write_keyboard_key.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_write_keyboard_key.o ix_write_keyboard_key.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_write_keyboard_key.bin ix_write_keyboard_key.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_write_keyboard_key.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_set_screen_size.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_set_screen_size.o ix_set_screen_size.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_set_screen_size.bin ix_set_screen_size.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_set_screen_size.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_write_mouse_button_action.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_write_mouse_button_action.o ix_write_mouse_button_action.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_write_mouse_button_action.bin ix_write_mouse_button_action.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_write_mouse_button_action.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_debug_disp_ix_device_info.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_debug_disp_ix_device_info.o ix_debug_disp_ix_device_info.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_debug_disp_ix_device_info.bin ix_debug_disp_ix_device_info.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_debug_disp_ix_device_info.bin /nfs/fwp/

------------------------------------------------------------

compiling ix_auto_scan_open.c ...

arm-linux-gcc -c -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g  -o ix_auto_scan_open.o ix_auto_scan_open.c

------------------------------------------------------------

arm-linux-gcc -I/usr/arm-linux/include -I../../include/ -I.  -Wall -O2 -g   -o ix_auto_scan_open.bin ix_auto_scan_open.o ../../lib/ixlib/ix.o ../../lib/exlib/ex.o ../../lib/gxLib/gx.o ../../lib/gxLib/gxbmp.o ../../lib/gxLib/gxbdf.o ../../lib/gxLib/fontinfo.o ../../lib/gxLib/ksc5601.o ../../lib/uxlib/ux_device.o

cp ix_auto_scan_open.bin /nfs/fwp/

------------------------------------------------------------

[root@backup ix_sample]#

 



ixLib 이용한 프로젝트 디렉토리 구성                                                  
ixLib디렉토리구성.png

ixLib를 사용하시는 분들께 권장하는 프로젝트 폴더 구성입니다.

 

라이브러리를 참조 하여 샘플을 만들 경우 sample폴더 에서 폴더를 만들어 작업을 하시고, 프로젝트에 진행되는 최종 어플리케이션은 app 폴더에다 작업 하실 것을 권장합니다.

 

왜냐면, 저의 makefile을 그렇게 만들어 놨거든요. ^^

makefile수정해서 다른 방식으로 사용하실 분은 lib폴더 밑의 라이브러리만 참조하셔도 무방합니다.

 

최상의 디렉토리 fwp make file은 하위 폴더의 내용을 모두 컴파일 해줍니다. 아주 쉽죠잉~~emoticon





ixLib 마우스로 그림그리기  샘플소스                                                       

 

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

#include <fcntl.h>                     // O_RDWR , O_NOCTTY 등의 상수 정의

#include <linux/input.h>

 

#include <gx.h>

#include <ex.h>

#include <ix.h>

 

//--------------------------------------------------------------

// 전역 변수

//--------------------------------------------------------------

static dc_t               *dc_screen;                                   

static color_t            fwp_pen_color;                                // 팬 색깔    

 

//--------------------------------------------------------------

// 설명 : IE_XXX 이벤트를 처리 하는곳 입니다. 사용자가 원하는분 프로그램밍을

//        여기에 추가하시면 됩니다.

//--------------------------------------------------------------

int fwp_ix_event_handler(ie_event_t *event_data)

{  

 

    // 코드를 추가하세요. ............

   

    switch(event_data->type)

    {

    case IE_MOUSE_DOWN      :

                 // 마우스 버을 눌렸을때 동작을 코딩하세요.!!!

                 printf("\rIE_MOUSE_DOWN x:%d , y:%d \n" ,event_data->data.mouse.x ,event_data->data.mouse.y);

                 break;

                

    case IE_MOUSE_UP           :

                 // 마우스 버튼 누름을 해제 할때 동작을 코딩하세요.!!!

                 printf("\rIE_MOUSE_UP   x:%d , y:%d \n" ,event_data->data.mouse.x ,event_data->data.mouse.y);

                 break;

 

    case IE_MOUSE_MOVE :                 

                 // 마우스를 움직였을 때 동작을 코딩하세요.!!!

                 printf("\rIE_MOUSE_MOVE    x:%d , y:%d \n" ,event_data->data.mouse.x ,event_data->data.mouse.y);

 

                 // 화면에 라인을 그리는 것을 추가했다. - imesu

                 gx_line_to(dc_screen,event_data->data.mouse.x, event_data->data.mouse.y );

                 break;

                

    default : break;   

    }

    return 0;

}

 

//--------------------------------------------------------------

// 설명 : smaple_fwp_main에서 사용하는 초기화

//--------------------------------------------------------------

void fwp_init( void )

{

    // 초기화 구문을 넣어 주세요.

}

 

//--------------------------------------------------------------

// 설명 :fwp에 사용하는 lib를 설정한다.

// 주의 : 초보자는 그대로 사용하세도 무방합니다.

//--------------------------------------------------------------

int fwp_lib_setting(void)

{

 

    if( gx_init( "/dev/fb"))                                                  // gxLib 초기화

    {

                 gx_print_error("gx init error\n");                      // 실행 중 에러 내용을 출력

                 return -1;

    }

    else

    {

                 if(!(dc_screen=gx_get_screen_dc()))                 //에러가 발생하면 1을 리턴한다.

                 {

                              gx_print_error("dc Get fail\n");

                 }

 

    }

    fwp_pen_color = gx_color(255,0,0,255);                              // pen 색을 결정한다.                    

   

    if( ex_init( EX_WAIT_TIME_DEFAULT ) )                            // ex lib를 초기화다.
    {

                 ex_print_error("\n");

                 exit(0);

    }

 

    if( ix_init() )                                                                  // ix lib를 초기화한다.

    {

                 ix_print_error(" ");

                 return -1;

    }

 

    if(ix_auto_scan_open(IX_TMP_PATH_DEFAULT))               // 입력 드라이버를 자동검색 및 open처리

    {

                 ix_print_error(" ");

                 return -1;

    }           

 

    return 0;

}

 

 

//--------------------------------------------------------------

// 설명 : 마우스 움직임을 화면에 표시하는 샘플입니다.

//--------------------------------------------------------------

int main( int argc, char **argv )

{  

    fwp_init();            

 

    fwp_lib_setting();                                                       // fwp에서 사용하는 라이브러리 초기화      

 

    ix_add_event( fwp_ix_event_handler );                     // 이벤트 처리함수를 등록한다.        

   

    while( 1 )

    {

                 if( ex_loop() )

                 {

                               ex_print_error("\n");

                               exit(0);

                 }

    }           

    gx_close();

 

    return 0;

}

 



마우스로 그림 그리기 샘플 관전 포인트                                                        
그림처럼 그림이 그려 집니다
 

샘플에서 사용자 여러분이 주의 깊게 보실 부분은 아래와 같습니다.

 

마우스가 움직이면 ix_add_evnet에서 등록한 이벤트 처리 함수가 호출됩니다.

따라서 사용자 여러분은 fwp_ix_event_handler 마우스 입력 값에 대한 처리를 하시면 됩니다.

 

int fwp_ix_event_handler(ie_event_t *event_data)

{  

    // 코드를 추가하세요. ............

}

 

int main( int argc, char **argv )

{   .

    ix_add_event( fwp_ix_event_handler );                     // 이벤트 처리함수를 등록한다.        

    .

}


기존에 보여드린 샘플 코드에 비하면 굉장히 단순해졌지요 ^^ 

http://forum.falinux.com/zbxe/?mid=lecture_tip&page=2&document_srl=504915&listStyle=&cpage=

자주 이용해 주세요~~


마우스로 그림 그리기 실행 결과                         

마우스 실행화면.png
 


마치며                                                    

ixLib 에 대한 함수 설명을 먼저 할까 하다가 ixLib, exLib, gxLib에 대한 이해도를 높이기 위해 마우스로 그림 그리기 샘플을 먼저 올리게 되었습니다.
다음 강좌에서는 개별적은 ixLib 함수에 대한 설명 및 샘플코드를 올리고자 합니다.

오늘은 여기서~~이만emoticon

[ixLib]1.개요

FWP21/ixLib | 2009.03.13 16:27 | Posted by imesu-문경원

                                                                                                                                                                                                 
작성자 : 문경원
작성일 : 2009년 02월08일
출처   : http://www.fsp21.org
참여 인원 : 유영창, 이영민, 문경원 , 이원재
                                                                                                                                                                                                      

1. 개요
임베디드 장비에 연결된 입력 장치의 입출력을 처리하기 위한 목적으로 만들어진 라이브러리 입니다
.

 

키보드, 마우스, 터치 스크린 등의 장치가 연결이 되면 입력 디바이스 드라이버에서 이벤트 드라이버로 처리가 됩니다.  

 이벤트 드라이버로 처리 되면서 가정 좋은 점은 장치를 신경 쓸 필요 없이 공통된 형식의 데이터를 사용자에게 제공해 주는 것이다.

 

             struct input_event{

                 struct timval        time;

                 unsigned short      type;

                 unsigned short      code;

                 unsigned int       value;

             };

 

위의 input_event 구조체는 방금 전에 말한 공통된 데이터 형의 값입니다.

각각의 멤버 변수에 대해 알아 봅시다.

 

*  time

입력 이벤트가 발생한 시간 정보 입니다.

 

*  type

터치와 마우스란 입력장치는 사용자가 입력한 위치정보를 발생하는 장치입니다.

그러나 위치정보의 의미가 다릅니다. 터치는 절대값(ABS_X, ABS_Y ..._)의 위치정보를 제공하고, 마우스는 변화량의 위치정보(REL_X, REL_Y)를 제공합니다.

 

터치는 터치의 입력범위가 정해져 있기 때문에 사용자가 입력(누르는)하는 곳의 값이 고정된 값이들어 옵니다.

 

하지만 마우스는 고정 위치 값이 존재하지 않고, 마우스를 움직일 때 얼마나(상대적 변화량)움직이는가에 대한 상대적 변화량과, 방향 정보를 제공합니다.

이렇게 다른 타입을 구분하기 위한 정보를 ‘type’ 멤버가 제공한다.

 

*  code

code’ 멤버는 입력정보는 세분화하는 분류다. 설명이 쉽지 않다. 예로 설명하자.

마우스는 입력정보가 여려가지다.

좌버튼, 우버튼, 위로휠, 아래로 휠, 좌로이동, 우로이동, 위로이동, 아래로 이동 등등 이런 입력정보를 구분하기 위한 멤버이다.

이런 세분화하는 분류는 ‘code’에 따라 다르게 분류됩니다.

 

 

*  value

value’ 멤버는 ‘code’ 멤버의 해당하는 입력 값이다. 역시 예로 설명하자.

마우스가 우로 이동한 입력이 발생한다면, code’멤버에 우로이동이란 값과 함께 얼마나

우로 이동했는지에 대한 값(변화량)이 ‘value’멤버로 제공됩니다.

 

위 설명했듯이 input_event의 각각의 멤버 변수는 장치에 따라 의미하는 바가 다릅니다. 따라서 이벤트 디바이스 드라이버를 사용하는 사용자는 각 장치마다 input_event의 멤버 변수 값을 다르게 구별해야 하는 약간의 번거로움이 있는데 ixLib를 사용하시면 이런 문제가 깔끔히 해결됩니다.

   

 

 

ixLib에서는 장치에 따른 멤버변수의 의미를 분리하여 IE_XXX 이벤트 형식으로 전달합니다. IE_XXX 이벤트에 대해서는 앞으로 언급 하겠습니다.




ixLib개념.png

그림에 보듯이ixLib는 입력 장치에서 발생한 입출력 데이터를 ixLib Low 입력 처리하여 input_event을 직접 읽어 올 수 도 있습니다.

 

또한 입력 디바이스에서 발생하는 마우스 입력, 키보드 입력, 터치 스크린 같은 입력 데이터를 처리 할 수 있으며, exLib와 연동하여 입력 데이터를 가공하여 사용자가 보다 인지하기 쉬운 형태의 이벤트(IE_XXX)를 발생 시켜 줍니다.

 

IE_XXX 이벤트의 종류는 마우스, 키보드 터치 이벤트가 있습니다.

입력 디바이스 드라이버에 대한 보다 자세한 설명은 아래 주소의 내용을 참조 하세요.

http://forum.falinux.com/zbxe/?mid=lecture_tip&page=2&document_srl=504915&listStyle=&cpage=



1.1. ixLib 의 특징

l  쉬운 설치

별도의 다른 프로그램의 설치 가 필요 없고 , ixLib소스를 참조하는 것 만으로 사용 가능합니다.

 

l  입력 장치 (마우스, 터치 스크린, 키보드) 자동 검색 기능을 제공해 줍니다.

 

l  IxLib 단독으로 사용하여 입력 데이터을 전달합니다.

 

l  ixLibexLib와 연동하여 입력 데이터 이벤트를 IE_XXX 이벤트로 하여 사용자가 보다 쉽게 입력 이벤트 데이터를 처리 할 수 있게 해줍니다.

 

l  터치스크린 보정 기능이 있다.

 

l  gxLib와 연동하여 그래픽 처리 가능함

 

l  무료로 제공

Fsp21 또는 FALinux Forum회원이라면 누구나 개발에 동참 할 수 있으며, 회원이 아니더라도 exLib가 제시한 저작권만 유의한다면 무료로 사용 가능

 

 

ixLib는 입력 디바이스 드라이버에서 발생한 LOW데이터 제공해주며, LOW데이터를 가공하여, 사용자가 쉽게 사용할 수 있는 IE_xxx  이벤트를 발생시키는 역할을 수행하는 라이브러리 입니다.

 

여기서 말하는 입력 데이터는 마우스, 터치스크린, 키보드 등의 입력 장치에서 발생하는 입력을 말하며,

LOW데이터란 입력 디바이스에서 발생한 최초의 데이터 형태 (input_evnet구조체) 의 데이터를 말합니다.

 


1.2.  ixLib의 기능

l  자동 입력 장치 검색 후 exLib에 등록 기능

l  자동 mknod 기능

l  터치스크린 보정 기능

 

l  마우스, 터치스크린, Low 데이터를 처리기능

l  마우스, 터치스크린, 입력 데이터를 처리 후 IE_XXX 이벤트 발생 기능

l  마우스, 터치스크린, 입력 Low 데이터를 처리기능


 IE_KEY_XXX이벤트.png

l  키보드 Low 데이터를 처리기능

l  키보드 입력 데이터를 처리 후 IE_XXX 이벤트 발생 기능


IE_Mouse_XXX이벤트.png



1.3. ixLib의 저작권
라이브러리 소스별로 입력어 있는 상단의 주석을 변경 하지 않는 이상, 무료로 사용이 가능하며 배포도 가능합니다. 개발자와 개발 정보를 알려 주는 상단의 주석문을 절대 변경하지 마십시요

TAG ixLib

                                                                                                                                                                                                
작성자 : 문경원
작성일 : 2009년 02월08일
출처   : http://www.fsp21.org
참여 인원 : 유영창, 이영민, 문경원 , 이원재
                                                                                                                                                                                                    

안녕하세요.. fsp21 의 문경원 입니다.emoticon  오랜 만이지요. exLib를 올리면서 exLib+gxLib의 환상의 하모니를 보여 주겠다고

큰소리 쳐 놨는데. 아직까지 샘플 코드를 올리지 않았네요. ^^;

입력 처리 라이브러리를 만들다 보니, 요거 만들고 gxLib와 연동 하는게 더 멋있겠다는 생각에 여기 까지 왔습니다.

오랜 작업 끝에 드디어 ixLib 1차 버젼이 완료 되었습니다.

ixLib가 뭐냐하면,  간단히 말하면 이런 겁니다.

임베디드 장비에 연결된 입력 장치(마우스, 키보드, 터치스크린) 입출력을 처리하기 위한 목적으로 만들어진 라이브러리 입니다

임베디드 보드(저희는 EZ-2440 보드를 사용했어요^^) 에 여러가지 작업을 하다보면 이런 욕망이 생깁니다.

"난! PC처럼 키보드, 마우스를 연결해서 사용할 수 없을까???"

" 친구넘한테 터치스크린 패널을 얻었는데.   어떻게 하면 활용 할 수 있지???"

" gxLib"로 LCD에 그림이 뜨긴 했는데 어떻게, 벽돌깨기 게임 같은거 말들어 보면 참 좋겠는데~~""

요런 욕망(?)  같은거 말이에요!

근데 의외로 입력장치(마우스, 키보드 , 터치 스크린)등을 제어 할 수 있는 자료를 찾아 보기 힘듭니다!

저두 검색해보니 "유영창"님이 쓰신 글이나 <이솝>사이트에서 있는 샘플 코드가 전부더군요.!!

그래서 이번에 FSP21에서 필기체 인식 알고리즘 구현하면서 필요한 라이브러리를 만들다가

이벤트 처리 라이브러리인 exLib
입력 데이처 처리 라이브러리인 ixLib를

물론 저 혼자 만든건 아니지요.
 
위대한 영도자 유영창님 , fsp이 탁월한 리더 이영민님,  문서쟁이 문경원^^ , 조용한 카리스마를 지닌 이원재님 이 참여하여 만들었습니다.
앗! 터치 스크린 보정에 도움을 준 권오용님을 깜박 했군요.

그리픽 처리는 다행이도. 포럼의 장길석님이 만드신 gxLib가 있어 "땡큐 배리 감사!!"emoticon 하며 고맙게 사용하고 있습니다.


문서의 작성은 HOW TO 문서 형식을 지향하고, ixLib에 있는 모든 함수에 대한 되도록 간단한 샘플 코드를 만들 예정입니다.

주요 독자 대상은 초중급 개발자입니다.

오늘은 첫날 이니까 간단히 인사말은 여기까지 하고 약간의 개념도를 추가하고 마치 겠습니다.
ixLib개념.png



그림 에서 보듯이 xLib 시리즈를 이용하시면, 초중급 개발자들이 원하시는 아주 심플한 개발을 하실 수 있을 거에요emoticon

자! 이제 출발 합니다.  
TAG ixLib
 

티스토리 툴바