강좌 & 팁
작성자 : 문경원
작성일 : 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=
재밌어 보이지 않나요
샘플 코드를 포함해 놓았으니 그냥 컴파일 해서 사용하시면 됩니다.
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를 사용하시는 분들께 권장하는 프로젝트 폴더 구성입니다.
라이브러리를 참조 하여 샘플을 만들 경우 sample폴더 에서 폴더를 만들어 작업을 하시고, 프로젝트에 진행되는 최종 어플리케이션은 app 폴더에다 작업 하실 것을 권장합니다.
왜냐면, 저의 makefile을 그렇게 만들어 놨거든요. ^^
makefile수정해서 다른 방식으로 사용하실 분은 lib폴더 밑의 라이브러리만 참조하셔도 무방합니다.
최상의 디렉토리 fwp의 make file은 하위 폴더의 내용을 모두 컴파일 해줍니다. 아주 쉽죠잉~~
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=
자주 이용해 주세요~~
마우스로 그림 그리기 실행 결과
마치며
ixLib 에 대한 함수 설명을 먼저 할까 하다가 ixLib, exLib, gxLib에 대한 이해도를 높이기 위해 마우스로 그림 그리기 샘플을 먼저 올리게 되었습니다.
다음 강좌에서는 개별적은 ixLib 함수에 대한 설명 및 샘플코드를 올리고자 합니다.
오늘은 여기서~~이만
샘플 프로젝트(fwp_mouse.tar.gz)으로 압축 파일을 만들까 하다가 초보자 분이 사용하시기 불편 할거 같아서
포함 시켜 압축했습니다.