[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