diff --git a/app/app-prime-modbus/app/app-prime-modbus/Makefile b/app/app-prime-modbus/app/app-prime-modbus/Makefile index e550646..fe7be9d 100644 --- a/app/app-prime-modbus/app/app-prime-modbus/Makefile +++ b/app/app-prime-modbus/app/app-prime-modbus/Makefile @@ -1,60 +1,57 @@ # -# falinux ���̺������� ����ϴ� ���ÿ� Makefile +# falinux 라이블러리를 사용하는 어플용 Makefile # -#CROSS_PREFIX = mipsel-linux -CROSS_PREFIX = arm-buildroot-linux-gnueabihf -#CROSS_PREFIX = /opt/ezzynq/usr/bin/arm-buildroot-linux-gnueabihf +CROSS_PREFIX = arm-buildroot-linux-gnueabihf -CP_DIR = /nfs/prime-oven/ +CP_DIR = /nfs/prime_oven/ -## ����� �ҽ� -TARGET = app-prime-modbus -SRCS = main_controller.c rs485_serial.c calc_crc.c udp_gui.c ring_que.c +## 사용자 소스 +TARGET = app-prime-modbus +SRCS = main_controller.c rs485_serial.c calc_crc.c udp_gui.c ring_que.c #--------------------------------------------------------------------- -## �ҽ������� ���̺귯�� +## 소스레벨의 라이브러리 DIR_LIB = ../../lib/ DIR_COMMON = $(DIR_LIB)common/ -DIR_FANET = $(DIR_LIB)fanet/ +DIR_FANET = $(DIR_LIB)fanet/ -SRCS_MODULE = -SRCS_COMMON = $(DIR_COMMON)tlist.c $(DIR_COMMON)util.c $(DIR_COMMON)sharemem.c $(DIR_COMMON)tstrlist.c $(DIR_COMMON)tinifile.c -SRCS_FANET = $(DIR_FANET)pollmng.c $(DIR_FANET)uds.c $(DIR_FANET)udp.c $(DIR_FANET)tcp.c $(DIR_FANET)uart.c -SRCS += $(SRCS_MODULE) $(SRCS_COMMON) $(SRCS_FANET) +SRCS_COMMON = $(DIR_COMMON)tlist.c $(DIR_COMMON)util.c $(DIR_COMMON)tstrlist.c $(DIR_COMMON)tinifile.c +SRCS_FANET = $(DIR_FANET)pollmng.c $(DIR_FANET)udp.c $(DIR_FANET)uart.c +SRCS += $(SRCS_COMMON) $(SRCS_FANET) -## ��Ŭ��� ���丮 -DIR_INC = ../../include/ +## 인클루드 디렉토리 +DIR_INC = ../../include/ INC_COMMON = $(DIR_INC)common/ -INC_FANET = $(DIR_INC)fanet/ +INC_FANET = $(DIR_INC)fanet/ -INCLUDEDIRS += -I. -I$(DIR_INC) -I$(INC_COMMON) -I$(INC_FANET) -LIVDIRS += +INCLUDEDIRS += -I. -I$(DIR_INC) -I$(INC_COMMON) -I$(INC_FANET) +LIVDIRS += -OBJS = $(SRCS:.c=.o) +OBJS = $(SRCS:.c=.o) -CFLAGS = $(INCLUDEDIRS) -o -W -Wall -O2 -LDFLAGS = $(LIVDIRS) -LIBS = -lm +CFLAGS = $(INCLUDEDIRS) -o -W -Wall -O2 +LDFLAGS = $(LIVDIRS) +LIBS = -lm #--------------------------------------------------------------------- -CC = $(CROSS_PREFIX)-gcc -CXX = $(CROSS_PREFIX)-g++ -AR = $(CROSS_PREFIX)-ar rc -AR2 = $(CROSS_PREFIX)-ranlib -RANLIB = $(CROSS_PREFIX)-ranlib -LD = $(CROSS_PREFIX)-ld -NM = $(CROSS_PREFIX)-nm -STRIP = $(CROSS_PREFIX)-strip -OBJCOPY = $(CROSS_PREFIX)-objcopy -CP = cp -MV = mv +CC = $(CROSS_PREFIX)-gcc +CXX = $(CROSS_PREFIX)-g++ +AR = $(CROSS_PREFIX)-ar rc +AR2 = $(CROSS_PREFIX)-ranlib +RANLIB = $(CROSS_PREFIX)-ranlib +LD = $(CROSS_PREFIX)-ld +NM = $(CROSS_PREFIX)-nm +STRIP = $(CROSS_PREFIX)-strip +OBJCOPY = $(CROSS_PREFIX)-objcopy +CP = cp +MV = mv #-------------------------------------------------------------------- all : $(TARGET) mkdir -p $(CP_DIR) - cp $^ $(CP_DIR) + $(CP) $^ $(CP_DIR) $(TARGET) : $(OBJS) - $(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS) + $(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS) $(NM) $(TARGET) > $(TARGET).map %.o:%.c @@ -66,7 +63,7 @@ $(TARGET) : $(OBJS) $(CXX) -c $(CFLAGS) $(CXXFLAGS) -o $@ $< dep : - $(CC) -M $(INCLUDEDIRS) $(SRCS) > .depend + $(CC) -M $(INCLUDEDIRS) $(SRCS) > .depend clean: rm -f *.bak @@ -76,7 +73,7 @@ clean: rm -f $(TARGET) core distclean: clean - rm -rf .depend + rm -rf .depend ifeq (.depend,$(wildcard .depend)) diff --git a/app/app-prime-modbus/app/app-prime-modbus/main_controller.c b/app/app-prime-modbus/app/app-prime-modbus/main_controller.c index ae86efb..d9231ae 100644 --- a/app/app-prime-modbus/app/app-prime-modbus/main_controller.c +++ b/app/app-prime-modbus/app/app-prime-modbus/main_controller.c @@ -1,8 +1,8 @@ -/** +/** @file main_control.c @date 2017/01/12 - @author ��漮 jks@falinux.com FALinux.Co.,Ltd. - @brief �µ������� ���� ���α� + @author 장길석 jks@falinux.com FALinux.Co.,Ltd. + @brief 온도조절기 제어 프로그램 @todo @bug @@ -10,8 +10,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -37,7 +37,7 @@ int on_stdin_read( poll_obj_t *obj ) memset( buff, 0, sizeof( buff)); rdcnt = read( obj->fd, buff, sizeof( buff)); - if (0 < rdcnt){ // ���ŵ� �����Ͱ� �ִٸ� + if (0 < rdcnt){ // 수신된 데에터가 있다면 switch( buff[0]){ case '1' : { @@ -115,15 +115,15 @@ int on_stdin_read( poll_obj_t *obj ) } /** ---------------------------------------------------------------------------- -@brief main�� ���� �ʱ�Ȱ�� �Ѵ�. +@brief main을 위한 초기활를 한다. @remark -@param uart_name : uart ��ġ �̸� +@param uart_name : uart 장치 이름 @return -----------------------------------------------------------------------------*/ static int main_initialize(){ poll_obj_t *obj; - obj = poll_add( fileno(stdin) ); // ������� ���� Ű���� �Է��� �´�. + obj = poll_add( fileno(stdin) ); // 디버깅을 위한 키보드 입력을 받는다. obj->on_poll_in = on_stdin_read; return 0; @@ -153,11 +153,11 @@ int main ( int argc, char *argv[]) rs845_run_start(); gui_run_start(); - tm_curr = get_cur_msec(); // ���� �ð� + tm_curr = get_cur_msec(); // 현재 시간 while( TRUE ){ poll_do_loop( 100); - tm_curr = get_cur_msec(); // ���� �ð� + tm_curr = get_cur_msec(); // 현재 시간 rs485_timer( tm_curr); } diff --git a/app/app-prime-modbus/app/app-prime-modbus/ring_que.c b/app/app-prime-modbus/app/app-prime-modbus/ring_que.c index 9704834..42ae7ec 100644 --- a/app/app-prime-modbus/app/app-prime-modbus/ring_que.c +++ b/app/app-prime-modbus/app/app-prime-modbus/ring_que.c @@ -10,61 +10,61 @@ #include <ring_que.h> /** ---------------------------------------------------------------------------- -@brief que�� ������ ���� +@brief que에 데이터 저장 @remark - -@param data : ������ -@param sz_data : ������ ���� +@param data : 데이터 +@param sz_data : 데이터 길이 @return - -----------------------------------------------------------------------------*/ void que_put( que_t *que, char *data, int sz_data){ - // que�� ������ ���� + // que에 데이터 저장 memcpy( que->que[que->tag_head].data, data, sizeof( que->que[que->tag_head].data)); que->que[que->tag_head].sz_data = sz_data; - // que tag ���� + // que tag 조정 que->tag_head = ( que->tag_head +1) % MAX_QUE_SIZE; - if ( que->tag_head == que->tag_tail){ // ���۰� ��� á�ٸ� + if ( que->tag_head == que->tag_tail){ // 버퍼가 모두 찼다면 que->tag_tail = ( que->tag_tail +1) % MAX_QUE_SIZE; } } /** ---------------------------------------------------------------------------- -@brief que ������ ��û +@brief que 데이터 요청 @remark - -@param buff : ���� -@param sz_buff : ���� ũ�� -@return ������ ���� +@param buff : 버퍼 +@param sz_buff : 버퍼 크기 +@return 데이터 길이 -----------------------------------------------------------------------------*/ int que_get( que_t *que, char *buff, int sz_buff){ - // ť�� �����Ͱ� ���ٸ� ���� + // 큐에 데이터가 없다면 복귀 if ( que->tag_head == que->tag_tail){ - return 0; // ������ ���� + return 0; // 테이터 없음 } - // ť ������ ���ϱ� + // 큐 데이터 구하기 int sz_data = que->que[que->tag_tail].sz_data; memcpy( buff, que->que[que->tag_tail].data, sz_buff); - // que tag ���� + // que tag 조정 que->tag_tail = ( que->tag_tail +1) % MAX_QUE_SIZE; return sz_data; } /** ---------------------------------------------------------------------------- -@brief que�� �����Ͱ� �ִ��� ���� +@brief que에 데이터가 있는지 여부 @remark - -@param que : ���� ť ������ -@return TRUE == ������ ���� +@param que : 원형 큐 포인터 +@return TRUE == 데이터 있음 -----------------------------------------------------------------------------*/ int que_exists( que_t *que){ - return que->tag_head != que->tag_tail; // head �� tail ���� �ٸ��ٸ� ������ ���� + return que->tag_head != que->tag_tail; // head 와 tail 값이 다르다면 데이터 있음 } void que_init( que_t *que){ - que->tag_head = que->tag_tail = 0; // ������ ��ġ�� ���� + que->tag_head = que->tag_tail = 0; // 포인터 위치를 수정 } diff --git a/app/app-prime-modbus/app/app-prime-modbus/ring_que.h b/app/app-prime-modbus/app/app-prime-modbus/ring_que.h index 90d4bf4..d6ee756 100644 --- a/app/app-prime-modbus/app/app-prime-modbus/ring_que.h +++ b/app/app-prime-modbus/app/app-prime-modbus/ring_que.h @@ -1,8 +1,8 @@ #ifndef APP_DATA_COLLECTOR_RING_QUE_H_ #define APP_DATA_COLLECTOR_RING_QUE_H_ -#define MAX_QUE_SIZE 100 // ���� ť�� ���� ������ ���� -#define MAX_QUE_DATA_SIZE 1024 // �������� ������ ���� +#define MAX_QUE_SIZE 100 // 원형 큐가 갖는 아이템 개수 +#define MAX_QUE_DATA_SIZE 1024 // 아이템의 데이터 길이 typedef struct{ int sz_data; @@ -11,8 +11,8 @@ typedef struct{ } que_item_t; typedef struct{ - int tag_head; // ���� ��ġ - int tag_tail; // �б� ��ġ + int tag_head; // 쓰기 위치 + int tag_tail; // 읽기 위치 que_item_t que[MAX_QUE_SIZE]; } que_t; diff --git a/app/app-prime-modbus/app/app-prime-modbus/rs485_serial.c b/app/app-prime-modbus/app/app-prime-modbus/rs485_serial.c index 8278e76..4e25232 100644 --- a/app/app-prime-modbus/app/app-prime-modbus/rs485_serial.c +++ b/app/app-prime-modbus/app/app-prime-modbus/rs485_serial.c @@ -8,8 +8,8 @@ /** @file main_control.c @date 2017/01/12 - @author ��漮 jks@falinux.com FALinux.Co.,Ltd. - @brief �µ������� ���� ���α� + @author 장길석 jks@falinux.com FALinux.Co.,Ltd. + @brief 온도조절기 제어 프로그램 @todo @bug @@ -17,8 +17,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -31,7 +31,7 @@ #include <rs485_serial.h> #include <udp_gui.h> -#define MAX_RETRY 3 // ���� ���� �� �� ���� Ƚ�� +#define MAX_RETRY 3 // 전송 실패 시 재 전송 횟수 #define MAX_BUFF_SIZE 1024 enum step_t { @@ -63,25 +63,25 @@ static char buff[MAX_BUFF_SIZE]; static poll_obj_t *obj_uart; static enum step_t step_work = STEP_CONTROL; static enum switch_t sw_uart = SW_WAIT_ADDRESS; -static char tx_data[MAX_BUFF_SIZE]; // ���� ������ ���� -static int tx_szdata; // ���� ������ ���� +static char tx_data[MAX_BUFF_SIZE]; // 전송 데이터 버퍼 +static int tx_szdata; // 전송 데이터 길이 static U8 rx_data[MAX_BUFF_SIZE]; static int rx_index; static int rx_szdata; -static msec_t tm_recv; // ��� ���� Ȯ���� ���� �ð� ���� -static int cnt_retry; // ���� ���п� ���� �� ���� Ƚ�� -static int bit_onoff19 = 0; // bit sw 0x19 ���� �� -static int bit_onoff21 = 0; // bit sw 0x21 ���� �� -static int bit_onoff22 = 0; // bit sw 0x22 ���� �� -static U16 oven_error_bit = 0; // ���� ���� ��Ʈ �� -static U16 ary_error_cnt[16]; // ���� ī��Ʈ +static msec_t tm_recv; // 통신 상태 확인을 위한 시간 변수 +static int cnt_retry; // 전송 실패에 대한 재 전송 횟수 +static int bit_onoff19 = 0; // bit sw 0x19 변수 값 +static int bit_onoff21 = 0; // bit sw 0x21 변수 값 +static int bit_onoff22 = 0; // bit sw 0x22 변수 값 +static U16 oven_error_bit = 0; // 오븐 에러 비트 값 +static U16 ary_error_cnt[16]; // 에러 카운트 -static void run_step_work( int n_step); // ������ �۾��� ���� -static void run_next_step_work( void); // ���� �۾� ���� +static void run_step_work( int n_step); // 지정된 작업을 실행 +static void run_next_step_work( void); // 다음 작업 실행 /** ---------------------------------------------------------------------------- -@brief WORD ����Ʈ�� ����/���� ����Ʈ ������ �ٲ۴�. -@remark ����� ��Ʋ���������, ��Ʋ������� ������� ���� +@brief WORD 바이트의 하위/상위 바이트 순서를 바꾼다. +@remark 빅엔디안을 리틀엔디안으로, 리틀엔디안을 빅엔디안으로 변경 @param - @return - -----------------------------------------------------------------------------*/ @@ -94,14 +94,14 @@ static void swap_byte( U16 *p16){ } /** ---------------------------------------------------------------------------- -@brief uart�� ���� ������ ���� -@remark ������ ������ uart ���� �ܰ踦 �ʱ�ȭ�Ѵ�. +@brief uart로 실제 데이터 전송 +@remark 데이터 전송후 uart 수신 단계를 초기화한다. @param @return -----------------------------------------------------------------------------*/ static int write_to_uart( void){ - { // ����� �ڵ�, ���� ������ ����Ʈ ������ ��� + { // 디버깅 코드, 전송 데이터를 바이트 단위로 출력 int ndx; printf( "send:"); @@ -112,19 +112,19 @@ static int write_to_uart( void){ } int rst = uart_write( obj_uart, tx_data, tx_szdata); - sw_uart = SW_WAIT_ADDRESS; // ������ ���� �� uart ���� �ܰ� �ʱ�ȭ + sw_uart = SW_WAIT_ADDRESS; // 데이터 전송 후 uart 수신 단계 초기화 - tm_recv = get_cur_msec(); // ���� �ð� ���� + tm_recv = get_cur_msec(); // 현재 시간 갱신 return rst; } /** ---------------------------------------------------------------------------- -@brief uart�� ������ ������ �ϼ� -@remark tx_data <- ������ ������ - tx_szdata <- ������ ������ ����Ʈ ���� -@param pdata : ������ ������ - sz_data : ������ ����Ʈ ���� +@brief uart로 전송할 데이터를 완성 +@remark tx_data <- 전송할 데이터 + tx_szdata <- 전송할 데이터 바이트 개수 +@param pdata : 데이터 포인터 + sz_data : 데이터 바이트 개수 @return -----------------------------------------------------------------------------*/ static void make_tx_data( char *pdata, int sz_data){ @@ -141,11 +141,11 @@ static void make_tx_data( char *pdata, int sz_data){ } /** ---------------------------------------------------------------------------- -@brief �������κ��� ���� ������ ��û�Ѵ�. +@brief 오븐으로부터 상태 데이터를 요청한다. @remark -@param addr_high : ���� address - addr_low : ���� address - size : �䱸�� ������ ����Ʈ ���� +@param addr_high : 상위 address + addr_low : 하위 address + size : 요구할 데이터 바이트 개수 @return -----------------------------------------------------------------------------*/ static void modbus_func03( int addr_high, int addr_low, int size){ @@ -159,15 +159,15 @@ static void modbus_func03( int addr_high, int addr_low, int size){ buff[ndx++] = 0x00; buff[ndx++] = size; - make_tx_data( buff, ndx); // ���� ���� ������ ���� - write_to_uart(); // uart�� ���� + make_tx_data( buff, ndx); // 실제 전송 데이터를 생성 + write_to_uart(); // uart로 전송 } /** ---------------------------------------------------------------------------- -@brief �������κ��� ���� ������ ��û�Ѵ�. +@brief 오븐으로부터 상태 데이터를 요청한다. @remark -@param addr_high : ���� address - addr_low : ���� address - size : �䱸�� ������ ����Ʈ ���� +@param addr_high : 상위 address + addr_low : 하위 address + size : 요구할 데이터 바이트 개수 @return -----------------------------------------------------------------------------*/ static void modbus_func04( int addr_high, int addr_low, int size){ @@ -181,17 +181,17 @@ static void modbus_func04( int addr_high, int addr_low, int size){ buff[ndx++] = 0x00; buff[ndx++] = size; - make_tx_data( buff, ndx); // ���� ���� ������ ���� - write_to_uart(); // uart�� ���� + make_tx_data( buff, ndx); // 실제 전송 데이터를 생성 + write_to_uart(); // uart로 전송 } /** ---------------------------------------------------------------------------- -@brief �������� ��� ����(���� ��û) +@brief 오븐으로 명령 전송(쓰기 요청) @remark -@param addr_high : ���� address - addr_low : ���� address - data_high : ���� data - data_log : ���� data +@param addr_high : 상위 address + addr_low : 하위 address + data_high : 상위 data + data_log : 하위 data @return -----------------------------------------------------------------------------*/ static void modbus_func06( int addr_high, int addr_low, int data_high, int data_low){ @@ -205,14 +205,14 @@ static void modbus_func06( int addr_high, int addr_low, int data_high, int data_ buff[ndx++] = data_high; buff[ndx++] = data_low; - make_tx_data( buff, ndx); // ���� ���� ������ ���� - write_to_uart(); // uart�� ���� + make_tx_data( buff, ndx); // 실제 전송 데이터를 생성 + write_to_uart(); // uart로 전송 } /** ---------------------------------------------------------------------------- -@brief GUI�� ���� ��� ���� +@brief GUI의 쓰기 명령 실행 @remark -@param pcmd : GUI�� ��û�� ��� +@param pcmd : GUI가 요청한 명령 @return -----------------------------------------------------------------------------*/ static void set_value( command_t *pcmd){ @@ -246,13 +246,13 @@ static void set_value( command_t *pcmd){ int value_high = ( pcmd->value >> 8) & 0xff; int value_low = ( pcmd->value ) & 0xff; - modbus_func06( 0, addr, value_high, value_low); // Modbus Func 6 �Լ� ȣ�� + modbus_func06( 0, addr, value_high, value_low); // Modbus Func 6 함수 호출 } /** ---------------------------------------------------------------------------- -@brief GUI�� ����ġ on/off ��� ���� +@brief GUI의 스위치 on/off 명령 실행 @remark -@param pcmd : GUI�� ��û�� ��� +@param pcmd : GUI가 요청한 명령 @return -----------------------------------------------------------------------------*/ static void onoff_switch( command_t *pcmd){ @@ -271,13 +271,13 @@ static void onoff_switch( command_t *pcmd){ int value_high = 0; int value_low = pcmd->value; - modbus_func06( 0, addr, value_high, value_low); // Modbus Func 6 �Լ� ȣ�� + modbus_func06( 0, addr, value_high, value_low); // Modbus Func 6 함수 호출 } /** ---------------------------------------------------------------------------- -@brief GUI�� ��Ʈ ���� ����ġ on/off ��� ���� -@remark 0x0021, 0x0022 ��Ʈ ���� ����ġ ���� -@param pcmd : GUI�� ��û�� ��� +@brief GUI의 비트 단위 스위치 on/off 명령 실행 +@remark 0x0021, 0x0022 비트 단위 스위치 제어 +@param pcmd : GUI가 요청한 명령 @return -----------------------------------------------------------------------------*/ static void onoff_bit( command_t *pcmd){ @@ -352,11 +352,11 @@ static void onoff_bit( command_t *pcmd){ int value_high = ( *p_onoff >> 8) & 0xff; int value_low = ( *p_onoff ) & 0xff; - modbus_func06( 0, addr, value_high, value_low); // Modbus Func 6 �Լ� ȣ�� + modbus_func06( 0, addr, value_high, value_low); // Modbus Func 6 함수 호출 } /** ---------------------------------------------------------------------------- -@brief ���� ���� ��Ʈ�� ī��Ʈ�� �ʱ�ȭ +@brief 오븐 에러 비트별 카운트를 초기화 @remark - @param - @return @@ -371,7 +371,7 @@ static void clear_error_cnt(){ } /** ---------------------------------------------------------------------------- -@brief GUI�κ��� ������ ��û�� �ִٸ� +@brief GUI로부터 수신한 요청이 있다면 @remark - @param - @return @@ -380,19 +380,19 @@ static void check_gui_cmd( void){ command_t cmd; - if ( 0 < gui_get_command( &cmd)){ // GUI�κ��� ��û�� �ִٸ� + if ( 0 < gui_get_command( &cmd)){ // GUI로부터 요청이 있다면 switch( cmd.cmd){ - case CMD_VALUE : // ���� �� ���� + case CMD_VALUE : // 오븐 값 설정 set_value( &cmd); break; - case CMD_ONOFF : // ���� ����ġ ���� + case CMD_ONOFF : // 오븐 스위치 변경 if ( TG_BITONOFF > cmd.target){ onoff_switch( &cmd); } else { onoff_bit( &cmd); } break; - case CMD_CLEAR_ERROR_CNT : // ���� ī��Ʈ �ʱ�ȭ + case CMD_CLEAR_ERROR_CNT : // 에러 카운트 초기화 clear_error_cnt(); break; } @@ -403,7 +403,7 @@ static void check_gui_cmd( void){ } /** ---------------------------------------------------------------------------- -@brief �������κ��� ���� ���� ���� +@brief 오븐으로부터 상태 값을 받았음 @remark @param - @return @@ -413,14 +413,14 @@ static void on_rcv_control( void){ gui_oven_control_t oven; int ndx; - // ����� ��Ʋ��������� ���� - U16 *pword = (U16 *)&rx_data[3]; // �����ʹ� rx_data[3]���� ���� + // 빅엔디안을 리틀엔디안으로 변경 + U16 *pword = (U16 *)&rx_data[3]; // 데이터는 rx_data[3]에서 시작 for ( ndx = 0; ndx < rx_szdata / 2; ndx++){ swap_byte( pword++); } - // ���� ó�� + // 변수 처리 oven.header = HDR_OVEN_CONTROL; memcpy( ( char *)&oven.control, &rx_data[3], sizeof( oven_control_t)); @@ -441,14 +441,14 @@ static void on_rcv_control( void){ printf( "manual_onoff21 = 0x%04x\n", bit_onoff21); printf( "manual_onoff22 = 0x%04x\n", bit_onoff22); - // GUI�� ���� + // GUI로 전송 gui_send_data_to_gui( ( char *)&oven, sizeof( gui_oven_state_t)); - // ���� �ܰ� ���� + // 다음 단계 실행 run_next_step_work(); } /** ---------------------------------------------------------------------------- -@brief �������κ��� ���� ���� ���� +@brief 오븐으로부터 상태 값을 받았음 @remark @param - @return @@ -458,33 +458,33 @@ static void on_rcv_status( void){ gui_oven_state_t oven; int ndx; - // ����� ��Ʋ��������� ���� - U16 *pword = (U16 *)&rx_data[3]; // �����ʹ� rx_data[3]���� ���� + // 빅엔디안을 리틀엔디안으로 변경 + U16 *pword = (U16 *)&rx_data[3]; // 데이터는 rx_data[3]에서 시작 for ( ndx = 0; ndx < rx_szdata / 2; ndx++){ swap_byte( pword++); } - // ���� ó�� + // 변수 처리 oven.header = HDR_OVEN_STATE; memcpy( ( char *)&oven.state, &rx_data[3], sizeof(oven_state_t) - sizeof(oven.state.error_cnt)); // 0x32 : ���� ���� ���� 2����Ʈ ���� - bit_onoff21 = oven.state.onoff_state1; // ���� ���� ���¸� �ݿ� - bit_onoff22 = oven.state.onoff_state2; // ���� ���� ���¸� �ݿ� + bit_onoff21 = oven.state.onoff_state1; // 현재 오븐 상태를 반영 + bit_onoff22 = oven.state.onoff_state2; // 현재 오븐 상태를 반영 if ( oven_error_bit != oven.state.system_error){ - // ����� ��Ʈ�� �ִ� �� Ȯ�� + // 변경된 비트가 있는 지 확인 U16 bit_ndx = 0x0001; int bit_prev; int bit_curr; for ( ndx = 0; ndx < 16; ndx++){ - bit_prev = oven_error_bit & bit_ndx; // ���� ��Ʈ ���� - bit_curr = oven.state.system_error & bit_ndx; // ���� ��Ʈ ���� - if ( bit_prev != bit_curr){ // ��Ʈ ���� ���̰� �ִٸ� - if ( 0 != bit_prev){ // ��Ʈ ���� 0->1 ��ȭ�� �� ���� ī��Ʈ ���� + bit_prev = oven_error_bit & bit_ndx; // 이전 비트 상태 + bit_curr = oven.state.system_error & bit_ndx; // 현재 비트 상태 + if ( bit_prev != bit_curr){ // 비트 값에 차이가 있다면 + if ( 0 != bit_prev){ // 비트 값이 0->1 변화일 때 에러 카운트 증가 ary_error_cnt[ndx]++; } } @@ -496,21 +496,21 @@ static void on_rcv_status( void){ oven.state.error_cnt[ndx] = ary_error_cnt[ndx]; } - oven_error_bit = oven.state.system_error; // ���� ��Ʈ �� ���� + oven_error_bit = oven.state.system_error; // 에러 비트 값 변경 } printf( "onoff_state1 = 0x%04x\n", oven.state.onoff_state1); printf( "onoff_state2 = 0x%04x\n", oven.state.onoff_state2); printf( "onoff_realy_load = 0x%04x\n", oven.state.onoff_relay_load); - // GUI�� ���� + // GUI로 전송 gui_send_data_to_gui( ( char *)&oven, sizeof( gui_oven_state_t)); - // ���� �ܰ� ���� + // 다음 단계 실행 run_next_step_work(); } /** ---------------------------------------------------------------------------- -@brief �������κ��� ��� ���� ����� ���� +@brief 오븐으로부터 명령 수행 결과를 받았음 @remark @param - @return @@ -519,15 +519,15 @@ static void on_rcv_echo( void){ printf( "receive func code 0x%x\n", rx_data[1] & 0xff); - if ( gui_command_exists()){ // ó���ؾ��� ����� ���� �ִٸ� - check_gui_cmd(); // ���� ����� �����Ѵ�. - } else { // ó���ؾ��� ����� ���ٸ� - run_next_step_work(); // ���� �ܰ�� �Ѿ� ����. + if ( gui_command_exists()){ // 처리해야할 명령이 남아 있다면 + check_gui_cmd(); // 다음 명령을 전송한다. + } else { // 처리해야할 명령이 없다면 + run_next_step_work(); // 다음 단계로 넘어 간다. } } /** ---------------------------------------------------------------------------- -@brief �������κ��� Modbus 80 ���� �ڵ� ���� �� ó�� +@brief 오븐으로부터 Modbus 80 에러 코드 수신 시 처리 @remark @param - @return @@ -539,7 +539,7 @@ static void on_rcv_80_code( void){ switch( step_work){ case STEP_CHECK : printf( "failed to command to oven\n"); - gui_send_error_code( ERR_RECEIVE_80); // 0x80 �ڵ� ������ GUI�� �˸� + gui_send_error_code( ERR_RECEIVE_80); // 0x80 코드 수령을 GUI에 알림 break; default : break; @@ -548,14 +548,14 @@ static void on_rcv_80_code( void){ } /** ---------------------------------------------------------------------------- -@brief uart�κ��� CRC���� Ȯ���� ������ �������� +@brief uart로부터 CRC까지 확인한 전문을 수신했음 @remark @param @return -----------------------------------------------------------------------------*/ static void on_receive_data( void){ - // function �ڵ庰�� �з� + // function 코드별로 분류 switch ( rx_data[1]){ case 0x03 : on_rcv_control(); break; case 0x04 : on_rcv_status(); break; @@ -569,14 +569,14 @@ static void on_receive_data( void){ } /** ---------------------------------------------------------------------------- -@brief CRC üũ +@brief CRC 체크 @remark @param -@return true: CRC �� ���� +@return true: CRC 값 옳음 -----------------------------------------------------------------------------*/ static int is_crc_ok( void){ - // rx_index�� ���ο� ����Ʈ�� ���� ��ġ. ��, ������ ����Ʈ ���� + // rx_index는 새로운 바이트를 넣을 위치. 즉, 데이터 바이트 개수 U16 crc = CRC16( ( unsigned char *)rx_data, rx_index-2); U32 data_crc_lo = rx_data[rx_index-2]; @@ -588,10 +588,10 @@ static int is_crc_ok( void){ } /** ---------------------------------------------------------------------------- -@brief uart ��Ʈ�κ��� ������ ������ ó�� +@brief uart 포트로부터 수신한 데이터를 처리 @remark -@param obj : ��� ��ü -@return ���� ����Ʈ ���� +@param obj : 통신 객체 +@return 수신 바이트 개수 -----------------------------------------------------------------------------*/ static int on_serial_read( poll_obj_t *obj ) { @@ -599,7 +599,7 @@ static int on_serial_read( poll_obj_t *obj ) int ndx; int rdcnt; - tm_recv = get_cur_msec(); // ����Ʈ Ÿ�� ������ �ɸ��� �ʵ��� ���� �ð� ����. + tm_recv = get_cur_msec(); // 웨이트 타임 오버에 걸리지 않도록 현재 시간 갱신. memset(buff, 0, sizeof(buff)); rdcnt = uart_read(obj, buff, sizeof(buff)); @@ -615,10 +615,10 @@ static int on_serial_read( poll_obj_t *obj ) case SW_WAIT_FUNCTION : rx_data[rx_index++] = ch_data; switch( ch_data){ - case 0x03 : // ������ 0x04�� COUNT ������ �ʿ� + case 0x03 : // 모드버스 0x04는 COUNT 정보가 필요 sw_uart = SW_WAIT_COUNT; break; - case 0x04 : // ������ 0x04�� COUNT ������ �ʿ� + case 0x04 : // 모드버스 0x04는 COUNT 정보가 필요 sw_uart = SW_WAIT_COUNT; break; default : @@ -626,28 +626,28 @@ static int on_serial_read( poll_obj_t *obj ) break; } break; - case SW_WAIT_COUNT : // ������ ���̸� ���� + case SW_WAIT_COUNT : // 데이터 길이를 구함 sw_uart = SW_WAIT_DATA_COUNT; rx_data[rx_index++] = ch_data; - rx_szdata = ch_data; // CRC�� ������ ����Ʈ ���� + rx_szdata = ch_data; // CRC를 제외한 바이트 개수 break; case SW_WAIT_DATA_COUNT : - rx_data[rx_index++] = ch_data; // rx_szdata ���� ����Ʈ ��ŭ �о� ���� - if ( rx_szdata == rx_index-3){ // -3: ���� 1����Ʈ, FUN 1����Ʈ, ������ ���� 1����Ʈ ���� ���� + rx_data[rx_index++] = ch_data; // rx_szdata 개의 바이트 만큼 읽어 들임 + if ( rx_szdata == rx_index-3){ // -3: 국번 1바이트, FUN 1바이트, 데이터 길이 1바이트 선두 제거 sw_uart = SW_WAIT_CRC_LOW; } break; - case SW_WAIT_DATA : // ��� ���� 0x05���� �о� ���� ������ ������ 4����Ʈ + case SW_WAIT_DATA : // 모드 버스 0x05에서 읽어 들일 데이터 개수는 4바이트 rx_data[rx_index++] = ch_data; - if ( 4 == rx_index-2){ // -2: ���� 1����Ʈ, FUN 1����Ʈ + if ( 4 == rx_index-2){ // -2: 국번 1바이트, FUN 1바이트 sw_uart = SW_WAIT_CRC_LOW; } break; - case SW_WAIT_CRC_LOW : // crc low ����Ʈ ���� + case SW_WAIT_CRC_LOW : // crc low 바이트 수신 sw_uart = SW_WAIT_CRC_HIGH; rx_data[rx_index++] = ch_data; break; - case SW_WAIT_CRC_HIGH : // crc high ����Ʈ ���� + case SW_WAIT_CRC_HIGH : // crc high 바이트 수신 sw_uart = SW_WAIT_ADDRESS; rx_data[rx_index++] = ch_data; if ( is_crc_ok()){ @@ -661,9 +661,9 @@ static int on_serial_read( poll_obj_t *obj ) } /** ---------------------------------------------------------------------------- -@brief ������ �������� �� ���� ���� ó�� -@remark �µ��� �� �о��� ���� ���� ���� �µ� ������ -9999�� - RUNSTOP �� ��û�� ���� �����Ͱ� ���ٸ� RUNSTOP_NOT_EXISTS�� ���� +@brief 데이터를 수신하지 못 했을 때의 처리 +@remark 온도를 못 읽었을 때는 공유 메모리의 온도 값에는 -9999로 + RUNSTOP 값 요청에 대한 데이터가 없다면 RUNSTOP_NOT_EXISTS로 지정 @param @return -----------------------------------------------------------------------------*/ @@ -672,44 +672,44 @@ static void on_no_data( void){ if ( MAX_RETRY < cnt_retry){ printf( ">>>>>>>> failed to send data\n"); - if ( STEP_CHECK == step_work){ // GUI ��û���� ����� ���� ���̾��� - gui_send_error_code( ERR_SEND_COMMAND); // ��� ���� ���и� GUI�� �˸� + if ( STEP_CHECK == step_work){ // GUI 요청으로 명령을 전송 중이었다 + gui_send_error_code( ERR_SEND_COMMAND); // 명령 전송 실패를 GUI에 알림 } } else { - write_to_uart(); // ���� ���� ������ �ٽ� ���� + write_to_uart(); // 이전 전송 데이터를 다시 전송 cnt_retry++; return; } - run_step_work( STEP_CONTROL); // ����� ��� �����ߴٸ� ���� ���¸� ���ϴ� �۾����� �ٽ� ���� + run_step_work( STEP_CONTROL); // 통신을 계속 실패했다면 오븐 상태를 구하는 작업부터 다시 시작 } /** ---------------------------------------------------------------------------- -@brief �μ��� ���� �۾� STEP�� �����Ѵ�. +@brief 인수로 받은 작업 STEP을 실행한다. @remark -@param n_step : ������ STEP +@param n_step : 실행할 STEP @return - -----------------------------------------------------------------------------*/ static void run_step_work( int n_step){ - step_work = n_step; // �۾� �ܰ� ���� - cnt_retry = 0; // ���� �۾��� ���� �� ���� Ƚ�� �ʱ�ȭ - msleep( 50); // ���� ��� ��û ���� ���� ������ ������ �� �Ǵ� ��찡 ���� + step_work = n_step; // 작업 단계 변경 + cnt_retry = 0; // 현재 작업에 대한 재 전송 횟수 초기화 + msleep( 50); // 다음 명령 요청 전에 쉬지 않으면 수신이 안 되는 경우가 있음 switch( step_work){ case STEP_CONTROL : modbus_func03( 0x00, 0x00, sizeof( oven_control_t) /2); break; // ������ ��û ���� /2: word ������ ����, 2���� ��û�ϸ� 4 ����Ʈ ���� case STEP_STATE : modbus_func04( 0x00, 0x00, (sizeof( oven_state_t) - sizeof(U16) * 16) /2); break; // oven_stae_t�� error_cnt[] ������ �־ ���� �Է� case STEP_CHECK : check_gui_cmd(); break; // GUI ��û Ȯ�� default : - msleep( 100); // 100mm sec ��, ��� ���� ���� - run_next_step_work(); // ���� STEP ���� + msleep( 100); // 100mm sec 휴식, 통신 간격 조절 + run_next_step_work(); // 다음 STEP 실행 break; } } /** ---------------------------------------------------------------------------- -@brief ���� �۾� STEP�� �����Ѵ�. -@remark STEP�� ����ϴ� step_work�� ���� +@brief 다음 작업 STEP을 실행한다. +@remark STEP을 기억하는 step_work를 증가 @param - @return - -----------------------------------------------------------------------------*/ @@ -721,14 +721,14 @@ static void run_next_step_work( void){ } /** ---------------------------------------------------------------------------- -@brief ������ ���� ���� Ȯ�� +@brief 데이터 수신 여부 확인 @remark -@param msec_t tm_curr : ���� �ð� +@param msec_t tm_curr : 현재 시간 @return -----------------------------------------------------------------------------*/ int rs485_timer( msec_t tm_curr){ - if ( 500 <= ( tm_curr - tm_recv) ){ // 1�� �̻� ���ŵǴ� �����Ͱ� ���ٸ� ��� �̻����� �Ǵ� + if ( 500 <= ( tm_curr - tm_recv) ){ // 1초 이상 수신되는 데이터가 없다면 통신 이상으로 판단 on_no_data(); } return 0; @@ -736,9 +736,9 @@ int rs485_timer( msec_t tm_curr){ /** ---------------------------------------------------------------------------- -@brief rs485 ��� ���� ���� +@brief rs485 모듈 실행 시작 @remark -@param uart_name : uart ��ġ �̸� +@param uart_name : uart 장치 이름 @return -----------------------------------------------------------------------------*/ int rs845_run_start( void){ @@ -749,7 +749,7 @@ int rs845_run_start( void){ } /** ---------------------------------------------------------------------------- -@brief ��� ������ ���� �ʱ�Ȱ�� �Ѵ�. +@brief 모듈 시작을 위한 초기활를 한다. @remark @param @return @@ -760,7 +760,7 @@ int rs485_initialize( void){ poll_obj_t *obj; int ndx; - inifile = ini_create( INI_SYSTEM); // IniFile ���� + inifile = ini_create( INI_SYSTEM); // IniFile 생성 if ( NULL == inifile){ printf( "ini file error.\n"); return -1; @@ -781,12 +781,12 @@ int rs485_initialize( void){ ini_free( inifile); } - memset( &rx_data, 0, sizeof( rx_data)); // ���� ���� ���� �ʱ�ȭ + memset( &rx_data, 0, sizeof( rx_data)); // 누적 수신 버퍼 초기화 obj_uart = obj; - // ���� ī��Ʈ�� ���� ��Ʈ �ʱ�ȭ - // ���� ���Ͽ��� �о� ���� + // 에러 카운트를 위한 비트 초기화 + // 추후 파일에서 읽어 들임 for ( ndx = 0; ndx < 16; ndx++){ ary_error_cnt[ndx] = 0; diff --git a/app/app-prime-modbus/app/app-prime-modbus/udp_gui.c b/app/app-prime-modbus/app/app-prime-modbus/udp_gui.c index 3f71ac6..d3a01cb 100644 --- a/app/app-prime-modbus/app/app-prime-modbus/udp_gui.c +++ b/app/app-prime-modbus/app/app-prime-modbus/udp_gui.c @@ -1,16 +1,16 @@ /** @file udp_gui.c @date 2017/02/13 - @author ��漮 jks@falinux.com FALinux.Co.,Ltd. - @brief ������ ����, GUI���� ��� + @author 장길석 jks@falinux.com FALinux.Co.,Ltd. + @brief 프라임 오븐, GUI와의 통신 @todo @bug @remark @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -25,13 +25,13 @@ static char buff[MAX_BUFF_SIZE]; static char gui_ip[100]; static int gui_port; -static que_t que; // ���� ť +static que_t que; // 원형 큐 static poll_obj_t *obj_udp = NULL; /** ---------------------------------------------------------------------------- -@brief UDP�� ���ŵ� ������ ���� +@brief UDP로 수신된 데이터 있음 @remark -@param obj : UDP ��� ��ü +@param obj : UDP 통신 객체 @return -----------------------------------------------------------------------------*/ static int on_udp_read(poll_obj_t *obj) { @@ -48,10 +48,10 @@ static int on_udp_read(poll_obj_t *obj) { } /** ---------------------------------------------------------------------------- -@brief ������ GUI�� ���� +@brief 데이터를 GUI로 전송 @remark -@param p_data : ���� ������ - sz_data : ������ ����Ʈ ���� +@param p_data : 전송 데이터 + sz_data : 데이터 바이트 개수 @return -----------------------------------------------------------------------------*/ int gui_send_data_to_gui( char *p_data, int sz_data){ @@ -66,9 +66,9 @@ int gui_send_data_to_gui( char *p_data, int sz_data){ } /** ---------------------------------------------------------------------------- -@brief gui�� ���� �ڵ� ���� +@brief gui로 에러 코드 전송 @remark -@param code : ���� �ڵ夤 +@param code : 에러 코드ㄴ @return -----------------------------------------------------------------------------*/ int gui_send_error_code( int code){ @@ -86,7 +86,7 @@ int gui_send_error_code( int code){ } /** ---------------------------------------------------------------------------- -@brief ������� ���� GUI ��ſ� ������ ť�� �߰� +@brief 디버깅을 위해 GUI 대신에 명려을 큐에 추가 @remark @param @return @@ -99,10 +99,10 @@ int gui_test( command_t cmd){ } /** ---------------------------------------------------------------------------- -@brief GUI�κ��� ������ ������ ������ Ȯ�� +@brief GUI로부터 수신한 명령이 있음을 확인 @remark @param -@return true : ���� ���� +@return true : 명령 있음 -----------------------------------------------------------------------------*/ int gui_command_exists( void){ @@ -110,9 +110,9 @@ int gui_command_exists( void){ } /** ---------------------------------------------------------------------------- -@brief GUI�κ��� ������ ������ ���� +@brief GUI로부터 수신한 명령을 구함 @remark -@param pcmd : ������ ������ ������ +@param pcmd : 명령을 수령할 포인터 @return -----------------------------------------------------------------------------*/ int gui_get_command( command_t *pcmd){ @@ -120,8 +120,8 @@ int gui_get_command( command_t *pcmd){ static char buff[MAX_QUE_DATA_SIZE]; int sz_data; - if ( que_exists( &que)){ // ť�� �����Ͱ� �ִٸ� - sz_data = que_get( &que, buff, sizeof( buff)); // ť���� ������ ���� + if ( que_exists( &que)){ // 큐에 데이터가 있다면 + sz_data = que_get( &que, buff, sizeof( buff)); // 큐에서 데이터 수신 memcpy( ( char *)pcmd, buff, sizeof( command_t)); return sz_data; } else { @@ -130,7 +130,7 @@ int gui_get_command( command_t *pcmd){ } /** ---------------------------------------------------------------------------- -@brief upd_gui ��� ���� +@brief upd_gui 모듈 시작 @remark @param @return @@ -141,7 +141,7 @@ int gui_run_start( void){ } /** ---------------------------------------------------------------------------- -@brief ��� ������ ���� �ʱ�Ȱ�� �Ѵ�. +@brief 모듈 시작을 위한 초기활를 한다. @remark @param @return @@ -154,9 +154,9 @@ int gui_initialize( void){ int port; - que_init( &que); // ���� ť �ʱ�ȭ + que_init( &que); // 원형 큐 초기화 - inifile = ini_create( INI_SYSTEM); // IniFile ���� + inifile = ini_create( INI_SYSTEM); // IniFile 생성 if ( NULL == inifile){ printf( "ini file error.\n"); return -1; @@ -183,5 +183,3 @@ int gui_initialize( void){ return 0; } - - diff --git a/app/app-prime-modbus/app/app-prime-modbus/udp_gui.h b/app/app-prime-modbus/app/app-prime-modbus/udp_gui.h index c5c1643..bfd0e0c 100644 --- a/app/app-prime-modbus/app/app-prime-modbus/udp_gui.h +++ b/app/app-prime-modbus/app/app-prime-modbus/udp_gui.h @@ -9,9 +9,9 @@ #define APP_OVEN_CONTROLLER_gui_GUI_H_ extern int gui_send_data_to_gui( char *p_data, int sz_data); -extern int gui_send_error_code( int code); // gui�� ���� �ڵ� ���� -extern int gui_command_exists( void); // gui�κ��� �Է� ���� -extern int gui_test( command_t cmd); // ��Ʈ�� ���� ���� �ڵ带 �߰� +extern int gui_send_error_code( int code); // gui로 에러 코드 전송 +extern int gui_command_exists( void); // gui로부터 입력 받은 +extern int gui_test( command_t cmd); // 테스트를 위한 명령 코드를 추가 extern int gui_get_command( command_t *pcmd); extern int gui_run_start( void); extern int gui_initialize( void); diff --git a/app/app-prime-modbus/include/all_share.h b/app/app-prime-modbus/include/all_share.h index 3f86657..bb4aca5 100644 --- a/app/app-prime-modbus/include/all_share.h +++ b/app/app-prime-modbus/include/all_share.h @@ -1,15 +1,15 @@ //------------------------------------------------------------------------------ -// ȭ�ϸ� : all_share.h -// ������Ʈ : -// �� �� : ���� �� ����ü�� �����Ѵ�. -// -// ���۱� : FA�������ֽ�ȸ�� -// �� �� : +// 화일명 : all_share.h +// 프로젝트 : +// 설 명 : 공유 메모리 구조체를 선언한다. +// +// 저작권 : FA리눅스주식회사 +// 주 의 : //------------------------------------------------------------------------------ #ifndef _ALL__SHARE_HEADER_ #define _ALL__SHARE_HEADER_ - -#define STRUCT_PACK __attribute__ ((packed)) + +#define STRUCT_PACK __attribute__ ((packed)) #define SHM_METER_KEY 0xFA1234 #define TRUE 1 @@ -25,9 +25,9 @@ typedef unsigned long long U64; typedef signed short I16; enum command_enum_t { - CMD_VALUE = 0, // ���� �� ���� - CMD_ONOFF, // ���� ����ġ ON/OFF - CMD_CLEAR_ERROR_CNT // ���� ī��Ʈ�� �ʱ�ȭ + CMD_VALUE = 0, // 오븐 값 변경 + CMD_ONOFF, // 오븐 스위치 ON/OFF + CMD_CLEAR_ERROR_CNT // 에러 카운트를 초기화 }; enum target_value_t { @@ -93,18 +93,18 @@ enum target_onoff_t { }; enum { - HDR_OVEN_CONTROL = 0, // 40000 ���� ��, ��Ʈ�� ���� - HDR_OVEN_STATE, // 30000 ���� ��, ���� ���� - HDR_ERROR_CODE // ���� �ڵ� + HDR_OVEN_CONTROL = 0, // 40000 번지 값, 컨트롤 제어 + HDR_OVEN_STATE, // 30000 번지 값, 오븐 상태 + HDR_ERROR_CODE // 에러 코드 }; enum { - ERR_SEND_COMMAND = 0, // ��� ���ۿ� ���� ������ ���� - ERR_RECEIVE_80 // 0x80 �ڵ带 �������� + ERR_SEND_COMMAND = 0, // 명령 전송에 대한 응답이 없음 + ERR_RECEIVE_80 // 0x80 코드를 수신했음 }; // -// �ý��� ��ü ���� ����ü ����ü +// 시스템 전체 공유 구조체 구조체 // typedef struct @@ -225,7 +225,7 @@ typedef struct { U16 burner2_current_rpm; // 36 U16 burner3_current_rpm; // 37 U16 controller_error; // 38 - U16 error_cnt[16]; // ���� ī��Ʈ + U16 error_cnt[16]; // 에러 카운트 } STRUCT_PACK oven_state_t; typedef struct { @@ -245,13 +245,13 @@ typedef struct { //------------------------------------------------------------------------------ // -// ������, ���̷ε� +// 프레임, 페이로드 // //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ // -// ���� ���� ���� +// 전역 변수 정의 // //------------------------------------------------------------------------------ diff --git a/app/app-prime-modbus/include/basic_def.h b/app/app-prime-modbus/include/basic_def.h index cbf80ab..7d6d85b 100644 --- a/app/app-prime-modbus/include/basic_def.h +++ b/app/app-prime-modbus/include/basic_def.h @@ -9,7 +9,7 @@ #include <fcntl.h> #include <unistd.h> -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -64,7 +64,7 @@ #include <ipc_call.h> -/// ���α� ������� +/// 프로그램 실행상태 enum { PROC_INFO_STATE_STOP = 0, PROC_INFO_STATE_RUN, diff --git a/app/app-prime-modbus/include/common/dprint.h b/app/app-prime-modbus/include/common/dprint.h index 106db81..953de75 100644 --- a/app/app-prime-modbus/include/common/dprint.h +++ b/app/app-prime-modbus/include/common/dprint.h @@ -1,15 +1,15 @@ //------------------------------------------------------------------------------ -// ȭ�ϸ� : dprint.h -// ������Ʈ : -// �� �� : NISP ������ ���õ� ��ƾ ��� +// 화일명 : dprint.h +// 프로젝트 : +// 설 명 : NISP 디버깅과 관련된 루틴 헤더 // -// ���۱� : �������̸������ֽ�ȸ�� -// �� �� : +// 저작권 : 에프에이리눅스주식회사 +// 주 의 : //------------------------------------------------------------------------------ #ifndef _NISP_DEBUG_HEADER_ #define _NISP_DEBUG_HEADER_ -// ����ü PACK ���� ���� ------------------------------------------------------ +// 구조체 PACK 관련 정의 ------------------------------------------------------ #if defined __GNUC__ #define STRUCT_PACK __attribute__ ((packed)) #elif defined __BORLANDC__ @@ -42,7 +42,7 @@ extern "C" #define tprint(fmt,args...) dprint( fmt, ## args ) -// ����ü PACK ���� ���� ------------------------------------------------------ +// 구조체 PACK 관련 정의 ------------------------------------------------------ #if defined __GNUC__ #undef STRUCT_PACK #elif defined __BORLANDC__ diff --git a/app/app-prime-modbus/include/common/famap.h b/app/app-prime-modbus/include/common/famap.h index 5d668a6..f3e3cc4 100644 --- a/app/app-prime-modbus/include/common/famap.h +++ b/app/app-prime-modbus/include/common/famap.h @@ -1,15 +1,15 @@ /** @file famap.h @date 2010/12/1 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief mmap ��ƿ��Ƽ�̴�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief mmap 유틸리티이다. Ver 0.1.0 @modify @todo @bug @remark - @warning tmmap.c tmmap.h �ʹ� ���� ������� �ʴ´�. + @warning tmmap.c tmmap.h 와는 같이 사용하지 않는다. */ //---------------------------------------------------------------------------- @@ -21,15 +21,15 @@ #define PAGE_SIZE (1024*4) #endif -/// mmap �� ���� ���� ���� ����ü +/// mmap 를 위한 개별 관리 구조체 typedef struct { - int dev; // /dev/mem �����ڵ� - unsigned long phys; // �����ּ� - unsigned long size; // ũ�� - int base_ofs; // ���̽� �ּҰ� 4K ������ ���� �ʾ����� ��� + int dev; // /dev/mem 파일핸들 + unsigned long phys; // 물리주소 + unsigned long size; // 크기 + int base_ofs; // 베이스 주소가 4K 정렬이 되지 않았을때 사용 - void *virt; // �Ҵ���� �������� + void *virt; // 할당받은 메모리포인터 } mmap_alloc_t; diff --git a/app/app-prime-modbus/include/common/i2c-api.h b/app/app-prime-modbus/include/common/i2c-api.h index 0d26643..0306268 100644 --- a/app/app-prime-modbus/include/common/i2c-api.h +++ b/app/app-prime-modbus/include/common/i2c-api.h @@ -1,9 +1,9 @@ //------------------------------------------------------------------------------ -// ������Ʈ : ETRI I2C AGENT -// �� �� : i2c_api.h -// �� �� : I2C DEVICE DRIVE API INCLUDE +// 프로젝트 : ETRI I2C AGENT +// 파 일 : i2c_api.h +// 설 명 : I2C DEVICE DRIVE API INCLUDE // -// �� �� : ����â frog@falinux.com +// 작 성 : 유영창 frog@falinux.com //------------------------------------------------------------------------------ #ifndef _I2C_API_LIB_H_ @@ -41,13 +41,13 @@ -#define I2C_NO_ERROR 0000 // ������ ����. -#define I2C_UNKONW_COMMAND 7001 // �˼� ���� �������� �����̴�. -#define I2C_NOT_FIND_MAJOR 7002 // I2C ����̽� ����̹� �ֹ�ȣ ȹ�� ���� -#define I2C_NOT_FIND_BUS 7003 // I2C ������ �߰��Ҽ� ����. -#define I2C_NOT_FIND_DEVICE 7004 // I2C ����̽��� �߰��Ҽ� ����. -#define I2C_READ_DEVICE 7005 // �б� ���� -#define I2C_WRITE_DEVICE 7006 // ���� ���� +#define I2C_NO_ERROR 0000 // 에러가 없다. +#define I2C_UNKONW_COMMAND 7001 // 알수 없는 프로토콜 명령이다. +#define I2C_NOT_FIND_MAJOR 7002 // I2C 디바이스 드라이버 주번호 획득 실패 +#define I2C_NOT_FIND_BUS 7003 // I2C 버스를 발견할수 없다. +#define I2C_NOT_FIND_DEVICE 7004 // I2C 디바이스를 발견할수 없다. +#define I2C_READ_DEVICE 7005 // 읽기 실패 +#define I2C_WRITE_DEVICE 7006 // 쓰기 실패 typedef struct diff --git a/app/app-prime-modbus/include/common/mtd-nand.h b/app/app-prime-modbus/include/common/mtd-nand.h index 5b4ef7d..a18df92 100644 --- a/app/app-prime-modbus/include/common/mtd-nand.h +++ b/app/app-prime-modbus/include/common/mtd-nand.h @@ -1,17 +1,17 @@ /** @file mtd-nand.h @date 2010/05/27 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief mtd�� ���� nand �÷��ø� �����Ѥ�.�� + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief mtd를 통해 nand 플래시를 제어한ㄷ.ㅏ - @todo ��Ʈ �Լ��� ���� ������ �ʾҴ�. + @todo 테스트 함수를 아직 만들지 않았다. @bug @remark @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -30,7 +30,7 @@ typedef enum { EZP_S5PV210_HEADER = 210 } ezboot_ver_t; -/// mtd �� ���� ���� ���� ����ü +/// mtd 를 위한 개별 관리 구조체 typedef struct { char node_name[128]; @@ -46,18 +46,18 @@ extern "C" { #endif /// @{ -/// @brief mtd-nand.c ���� �����ϴ� �Լ� ����Ʈ -extern mtdnand_t *mtdnand_create( char *fname ); /// mtd-nand �����Լ� -extern void mtdnand_free( mtdnand_t *mtd ); /// mtd-nand �����Լ� +/// @brief mtd-nand.c 에서 제공하는 함수 리스트 +extern mtdnand_t *mtdnand_create( char *fname ); /// mtd-nand 생성함수 +extern void mtdnand_free( mtdnand_t *mtd ); /// mtd-nand 해제함수 -extern int mtdnand_is_bad( mtdnand_t *mtd ); /// ������Ȯ�� -extern int mtdnand_read ( mtdnand_t *mtd, unsigned char *buf, int count ); /// mtd-nand ���� ����Ÿ�� �д´�. -extern int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ); /// mtd-nand �� ����Ÿ�� ����. -extern int mtdnand_read_oob( mtdnand_t *mtd, unsigned char *buf, int count ); /// mtd-nand �� oob ������ �д´�. -extern int mtdnand_read_skip_bad( mtdnand_t *mtd, unsigned char *buf, int count ); // mtd-nand ���� �������� ��ŵ�Ͽ� ����Ÿ�� �д´�. +extern int mtdnand_is_bad( mtdnand_t *mtd ); /// 배드블럭확인 +extern int mtdnand_read ( mtdnand_t *mtd, unsigned char *buf, int count ); /// mtd-nand 에서 데이타를 읽는다. +extern int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ); /// mtd-nand 에 데이타를 쓴다. +extern int mtdnand_read_oob( mtdnand_t *mtd, unsigned char *buf, int count ); /// mtd-nand 의 oob 영역을 읽는다. +extern int mtdnand_read_skip_bad( mtdnand_t *mtd, unsigned char *buf, int count ); // mtd-nand 에서 배드블럭을 스킵하여 데이타를 읽는다. -extern int mtdnand_seek ( mtdnand_t *mtd, int offset, int origin ); /// mtd-nand �� ������ ��ġ�� �̵��Ѵ� -extern int mtdnand_erase( mtdnand_t *mtd ); /// mtd-nand �� �Ѻ����� �����. +extern int mtdnand_seek ( mtdnand_t *mtd, int offset, int origin ); /// mtd-nand 의 엑세스 위치를 이동한다 +extern int mtdnand_erase( mtdnand_t *mtd ); /// mtd-nand 의 한블럭을 지운다. /// @} diff --git a/app/app-prime-modbus/include/common/open_map.h b/app/app-prime-modbus/include/common/open_map.h index 547b87b..a8297b2 100644 --- a/app/app-prime-modbus/include/common/open_map.h +++ b/app/app-prime-modbus/include/common/open_map.h @@ -1,8 +1,8 @@ /** @file open_map.c @date 2014/01/20 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief * mmap ��ƿ��Ƽ�̴�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief * mmap 유틸리티이다. Ver 0.2.0 @modify diff --git a/app/app-prime-modbus/include/common/sharemem.h b/app/app-prime-modbus/include/common/sharemem.h index c982d13..bb0dbbc 100644 --- a/app/app-prime-modbus/include/common/sharemem.h +++ b/app/app-prime-modbus/include/common/sharemem.h @@ -1,8 +1,8 @@ /** @file sharemem.c @date 2006 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief ������ �����ϰ� �����Ѵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 공유메모리를 생성하고 해제한다. @modify @todo @@ -13,8 +13,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -27,11 +27,11 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� �Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 함수 리스트 -void share_delete( int key ); /// ������ �����Ѵ�. -void *share_create( int key, unsigned int size ); /// ������ �����Ѵ�. -void share_free( void *data ); /// ������ �����Ѵ�. +void share_delete( int key ); /// 공유메모리를 삭제한다. +void *share_create( int key, unsigned int size ); /// 공유메모리를 생성한다. +void share_free( void *data ); /// 공유메모리를 해제한다. /// @} diff --git a/app/app-prime-modbus/include/common/strparsing.h b/app/app-prime-modbus/include/common/strparsing.h index 40eff2a..730ea2c 100644 --- a/app/app-prime-modbus/include/common/strparsing.h +++ b/app/app-prime-modbus/include/common/strparsing.h @@ -1,30 +1,30 @@ /** @file tstrplist.h @date 2009-06-01 - @author ��漮 jwjwmx@gmail.com - @brief string ���ڿ����� �����ڿ� �����ͷ� ������ ������ ����� �ۼ� + @author 장길석 jwjwmx@gmail.com + @brief string 문자열에서 구별자와 데이터로 구성된 아이템 목록을 작성 @todo @bug @remark @warning - - ���۱� �������̸�����(��) - - �ܺΰ��� ���� + - 저작권 에프에이리눅스(주) + - 외부공개 금지 */ //---------------------------------------------------------------------------- #ifndef __STR_PARSING__ #define __STR_PARSING__ -/// ���� ���� +/// 에러 없음 #define STRPERR_NONE 0 -/// �� ���� +/// 메모리 부족 #define STRPERR_OUT_OF_MEMORY 1 -/// ����Ʈ ���� ���� +/// 리스트 생성 실패 #define STRPERR_CREATE_LIST_FAIL 2 -/// ��Ʈ�� �Ľ� �������� TRUE +/// 스트링 파싱 내에서의 TRUE #define STRP_TRUE 1 -/// ��Ʈ�� �Ľ� �������� FALSE +/// 스트링 파싱 내에서의 FALSE #define STRP_FALSE 0 extern int strp_error_code; diff --git a/app/app-prime-modbus/include/common/tgpio.h b/app/app-prime-modbus/include/common/tgpio.h index 3801068..2c6df23 100644 --- a/app/app-prime-modbus/include/common/tgpio.h +++ b/app/app-prime-modbus/include/common/tgpio.h @@ -1,8 +1,8 @@ /** @file tgpio.h @date 2010/1/4 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief gpio �� ����̹����� mmap�� �̿��Ͽ� �����Ѵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief gpio 를 드라이버없이 mmap를 이용하여 제어한다. Ver 0.6.0 @@ -96,7 +96,7 @@ #define MCU_IXP4XX_MMAP_GPIO_SIZE 0x10 -/// PXA ���� �������� +/// PXA 관련 레지스터 #define PXA_GPIO_bit(x) (1 << ((x) & 0x1f)) #define PXA_REG_OFFSET(x) ( ((x) < 96) ? ((x)/32)*4 : 0x100 ) @@ -153,7 +153,7 @@ #define GFER3 0x13C // GPIO Falling-Edge Detect Register GPIO<127:96> #define GEDR3 0x148 // GPIO Edge Detect Status Register GPIO<127:96> -/// IXP ���� �������� +/// IXP 관련 레지스터 #define IXP4XX_GPIO_GPOUTR *(volatile unsigned long *)( (int)(mcu_gpio.mmap_base) + IXP4XX_GPIO_GPOUTR_OFFSET ) #define IXP4XX_GPIO_GPOER *(volatile unsigned long *)( (int)(mcu_gpio.mmap_base) + IXP4XX_GPIO_GPOER_OFFSET ) #define IXP4XX_GPIO_GPINR *(volatile unsigned long *)( (int)(mcu_gpio.mmap_base) + IXP4XX_GPIO_GPINR_OFFSET ) @@ -168,7 +168,7 @@ //====================================================================================================================== -/// tgpio_dir_input() �Լ� ���� pull_up �ɼ� +/// tgpio_dir_input() 함수 사용시 pull_up 옵션 typedef enum { GPIO_PULL_NONE = 0, GPIO_PULL_UP, @@ -176,12 +176,12 @@ typedef enum { } gpio_pulled_t; -/// GPIO ���� GRP0, GRP1 ������ ������ ��ȣ�ν� �����Ѵ�. +/// GPIO 그룹이 GRP0, GRP1 등으로 나뉠때 번호로써 구분한다. #define GP_NR_GRP 1000 #include <famap.h> -/// gpio ���� ���ΰ��� ����ü +/// gpio 관련 내부관리 구조체 typedef struct { int mcu_nr; @@ -190,7 +190,7 @@ typedef struct { unsigned long phys_base; unsigned long phys_size; - mmap_alloc_t map_info; // 0.7.0 ���� �߰� + mmap_alloc_t map_info; // 0.7.0 부터 추가 unsigned long mmap_base; void (*close )( void ); @@ -206,7 +206,7 @@ typedef struct { } mcu_gpio_fops_t; -/// gpio ���� iMX �������� ����ü +/// gpio 관련 iMX 레지스터 구조체 typedef struct { unsigned long phys; @@ -216,7 +216,7 @@ typedef struct } imx6_gpio_register_t; -/// gpio ���� AM3xxx �������� ����ü +/// gpio 관련 AM3xxx 레지스터 구조체 typedef struct { unsigned long phys; @@ -226,7 +226,7 @@ typedef struct { } am3x_gpio_register_t; -/// gpio ���� s3c �������� ����ü +/// gpio 관련 s3c 레지스터 구조체 typedef struct { int gpcnt; @@ -238,7 +238,7 @@ typedef struct { } s3c_gpio_register_t; -/// gpio ���� pxa ���� ����ü +/// gpio 관련 pxa 정보 구조체 typedef struct { int gpcnt; @@ -246,7 +246,7 @@ typedef struct { } pxa_gpio_info_t; -/// gpio ��ȣ ����ü +/// gpio 번호 구조체 typedef struct { char grp; @@ -262,17 +262,17 @@ extern "C" { #endif /// @{ -/// @brief tgpio.h ���� �����ϴ� �Լ� ����Ʈ +/// @brief tgpio.h 에서 제공하는 함수 리스트 -extern int tgpio_open ( int mcu ); /// mcu �� ������ �� mmap �� �����Ѵ�. -extern void tgpio_close ( void ); /// gpio ������ �����Ѵ�. -extern void tgpio_dir_input ( char grp, int gp_nr, gpio_pulled_t pull_up ); /// gpio �� �Է����� �����Ѵ�. -extern void tgpio_dir_output( char grp, int gp_nr, int gp_val ); /// gpio �� ������� �����Ѵ�. -extern int tgpio_input ( char grp, int gp_nr ); /// gpio �� �Է°��� �д´�. -extern void tgpio_output ( char grp, int gp_nr, int gp_val ); /// gpio �� ���� ���� +extern int tgpio_open ( int mcu ); /// mcu 를 선택한 후 mmap 메모리를 맵핑한다. +extern void tgpio_close ( void ); /// gpio 맵핑을 해제한다. +extern void tgpio_dir_input ( char grp, int gp_nr, gpio_pulled_t pull_up ); /// gpio 를 입력으로 설정한다. +extern void tgpio_dir_output( char grp, int gp_nr, int gp_val ); /// gpio 를 출력으로 설정한다. +extern int tgpio_input ( char grp, int gp_nr ); /// gpio 의 입력값을 읽는다. +extern void tgpio_output ( char grp, int gp_nr, int gp_val ); /// gpio 에 값을 쓴다 -extern unsigned long tgpio_get_input_port ( char grp, int gp_nr ); /// gpio �� �Է� ��Ʈ ������ ��´�. -extern unsigned long tgpio_get_output_port( char grp, int gp_nr ); /// gpio �� ��� ��Ʈ ������ ��´�. +extern unsigned long tgpio_get_input_port ( char grp, int gp_nr ); /// gpio 의 입력 포트 포인터를 얻는다. +extern unsigned long tgpio_get_output_port( char grp, int gp_nr ); /// gpio 의 출력 포트 포인터를 얻는다. /// @} diff --git a/app/app-prime-modbus/include/common/tgpio_imx6q.h b/app/app-prime-modbus/include/common/tgpio_imx6q.h index c69ab40..a03d646 100644 --- a/app/app-prime-modbus/include/common/tgpio_imx6q.h +++ b/app/app-prime-modbus/include/common/tgpio_imx6q.h @@ -1,8 +1,8 @@ /** @file tgpio_imx6.c @date 2013/7/22 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief gpio �� ����̹����� mmap�� �̿��Ͽ� �����Ѵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief gpio 를 드라이버없이 mmap를 이용하여 제어한다. Ver 0.7.0 @@ -92,7 +92,7 @@ extern "C" { #endif /// @{ -/// @brief tgpio_imx6q.h ���� �����ϴ� �Լ� ����Ʈ +/// @brief tgpio_imx6q.h 에서 제공하는 함수 리스트 extern void imx6_gpio_open( int mcu_nr ); /// @} diff --git a/app/app-prime-modbus/include/common/tinifile.h b/app/app-prime-modbus/include/common/tinifile.h index 6114410..f7642e1 100644 --- a/app/app-prime-modbus/include/common/tinifile.h +++ b/app/app-prime-modbus/include/common/tinifile.h @@ -1,51 +1,51 @@ /** @file tinifile.h @date 2009-04-09 - @author ��漮 jwjwmx@gmail.com - @brief Delphi���� �����ϴ� TIniFile�� �����Ѵ�. + @author 장길석 jwjwmx@gmail.com + @brief Delphi에서 제공하는 TIniFile을 생성한다. @todo @bug @remark @warning - - ���۱� �������̸�����(��) - - �ܺΰ��� ���� + - 저작권 에프에이리눅스(주) + - 외부공개 금지 */ #ifndef __TINI_FILE__ #define __TINI_FILE__ -/// ���� ���� +/// 에러 없음 #define INIERR_NONE 0 -/// �� ���� +/// 메모리 부족 #define INIERR_OUT_OF_MEMORY 1 -/// ���� �̸� ���� ���� +/// 파일 이름 지정 오류 #define INIERR_FILENAME_FAIL 2 -/// ������ �ڷᰡ ���� +/// 지정된 자료가 없음 #define INIERR_NO_DATA 3 -/// IniFile�� ���� +/// IniFile이 없음 #define INIERR_NO_FILE 4 -/// IniFile ���� ���� +/// IniFile 열기 실패 #define INIERR_ACCESS_FAIL 5 -/// ���� ����Ʈ ���� ���� +/// 섹션 리스트 생성 실패 #define INIERR_CREATE_SECTION_FAIL 6 -/// ������ ������ ���� �� Ȯ���� ���� +/// 구별자 정보를 위한 메모리 확보를 실패 #define INIERR_CREATE_IDENTIFY_FAIL 7 -/// �������� ���ڿ� ������ �����ϱ� ���� �� Ȯ���� ���� +/// 구별자의 문자열 정보를 저장하기 위한 메모리 확보에 실패 #define INIERR_READ_IDENTIFY_FAIL 8 -/// NULL ��ü +/// NULL 객체 #define INIERR_NULL_POINTER 9 -/// INI ���� ����ϴ� TRUE +/// INI 에서 사용하는 TRUE #define INI_TRUE 1 -/// INI ���� ����ϴ� FALSE +/// INI 에서 사용하는 FALSE #define INI_FALSE 0 -/// ini ������ ó���ϴ� ��ü�� ���� ����ü +/// ini 파일을 처리하는 객체를 위한 구조체 typedef struct -{ /// IniFile ���� ���� �����̸� +{ /// IniFile 정보 저장 파일이름 char *filename; - /// INI ������ ����Ǿ������� ���� + /// INI 정보가 변경되었는지의 여부 int is_changed; - /// ��� ������ ���ڿ� + /// 모든 섹션의 문자열 tstrlist *lst_sections; } inifile_t; diff --git a/app/app-prime-modbus/include/common/tlist.h b/app/app-prime-modbus/include/common/tlist.h index aa8d27c..fa78adb 100644 --- a/app/app-prime-modbus/include/common/tlist.h +++ b/app/app-prime-modbus/include/common/tlist.h @@ -1,8 +1,8 @@ /** @file tlist.h @date 1997/10/7 - @author ����â frog@falinux.com FALinux.Co.,Ltd. - @brief Delphi ������ ����Ʈ ��ü�̴�. + @author 유영창 frog@falinux.com FALinux.Co.,Ltd. + @brief Delphi 형식의 리스트 객체이다. @todo @bug @@ -10,8 +10,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -22,12 +22,12 @@ #define MAXLISTSIZE 0x7FFFFFF -/// ��ü�� ������ ����ü +/// 객체를 관리할 구조체 typedef struct { - void **flist; // �ּ��� �迭�� �ִ°� - int fcount; // �������� �� - int fcapacity; // �� �Ҵ� �� + void **flist; // 주소의 배열이 있는곳 + int fcount; // 아이템의 수 + int fcapacity; // 메모리 할당 수 } tlist; #ifdef __cplusplus @@ -35,37 +35,37 @@ extern "C" { #endif /// @{ -/// @brief �����Լ�����Ʈ -void tlist_error ( tlist *that ); /// �����Լ� -void tlist_error_index ( tlist *that, int index ); /// �ε��� �������� -void tlist_grow ( tlist *that ); /// �������� �� �� ������Ų��. -void tlist_setcapacity ( tlist *that, int newcapacity ); /// ������ �� �ִ� ������ Ǯ�� �뷮�� �����ϰ� �� �� �Ҵ��Ѵ�. -void tlist_setcount ( tlist *that, int newcount ); /// ������ �� �ִ� �������� ������ �����ϸ� �������� ������ ������ ������ �����Ѵ�. -tlist *tlist_expand ( tlist *that ); /// ������ Ǯ�� �뷮�� Ȯ���Ѵ�. -int tlist_getcapacity ( tlist *that ); /// ������Ǯ�� ũ�⸦ ��´�. +/// @brief 내부함수리스트 +void tlist_error ( tlist *that ); /// 에러함수 +void tlist_error_index ( tlist *that, int index ); /// 인덱스 범위에러 +void tlist_grow ( tlist *that ); /// 아이템이 들어갈 메모리를 증가시킨다. +void tlist_setcapacity ( tlist *that, int newcapacity ); /// 관리할 수 있는 아이템 풀의 용량을 설정하고 메모리를 재 할당한다. +void tlist_setcount ( tlist *that, int newcount ); /// 관리할 수 있는 아이템의 개수를 설정하며 아이템의 개수를 설정된 값으로 변경한다. +tlist *tlist_expand ( tlist *that ); /// 아이템 풀의 용량을 확장한다. +int tlist_getcapacity ( tlist *that ); /// 아이템풀의 크기를 얻는다. /// @} /// @{ -/// @brief ����ڰ� ����Ҽ� �ִ� �Լ� ����Ʈ -extern tlist* tlist_create ( void ); /// tlist ��ü�� �����Ѵ�. -extern void tlist_free ( tlist *that ); /// tlist ��ü�� �Ҹ��Ų��. +/// @brief 사용자가 사용할수 있는 함수 리스트 +extern tlist* tlist_create ( void ); /// tlist 객체를 생성한다. +extern void tlist_free ( tlist *that ); /// tlist 객체를 소멸시킨다. -extern int tlist_getcount ( tlist *that ); /// �������� ������ ��´�. -extern void* tlist_get ( tlist *that, int index ); /// �ε����� �ش��ϴ� ������ ������ �����ش�. -extern void tlist_put ( tlist *that, int index, void *item ); /// Ư���������� ������ �����Ѵ�. -extern int tlist_add ( tlist *that, void *item ); /// �������� �߰��Ѵ�. -extern void tlist_clear ( tlist *that ); /// ��� �������� �����Ѵ�. -extern void tlist_delete ( tlist *that, int index ); /// �ϳ��� �������� �����Ѵ�. -extern void tlist_exchange ( tlist *that, int index1, int index2 ); /// 2���� ������ ��ġ�� ��ȯ�Ѵ�. -extern void *tlist_first ( tlist *that ); /// ù��° ������ ������ �����ش�. -extern int tlist_indexof ( tlist *that, void *item ); /// ������ �����Ͱ� ������ �������� �ε����� ���Ѵ�. -extern void tlist_insert ( tlist *that, int index, void *item ); /// �������� Ư�� ��ġ�� �߰��Ѵ�. -extern void *tlist_last ( tlist *that ); /// ������ ������ ������ ���Ѵ�. -extern void tlist_move ( tlist *that, int curindex, int newindex ); /// Ư�� �������� ��ġ(�ε���)�� �����Ѵ�. -extern int tlist_remove ( tlist *that, void *item ); /// ���ڷ� ������ ������ ������ ������ ã�� �����Ѵ�. -extern void tlist_pack ( tlist *that ); /// �� ������ ���� ������� �ʴ� �� ��ȯ�Ѵ�. -extern void tlist_sort ( tlist *that,int (*tlistsortcompare)(const void *, const void *) ); /// �������� ����� ���Լ��� ���� �����Ѵ� +extern int tlist_getcount ( tlist *that ); /// 아이템의 개수를 얻는다. +extern void* tlist_get ( tlist *that, int index ); /// 인덱스에 해당하는 아이템 포인터를 돌려준다. +extern void tlist_put ( tlist *that, int index, void *item ); /// 특정아이템의 포인터를 변경한다. +extern int tlist_add ( tlist *that, void *item ); /// 아이템을 추가한다. +extern void tlist_clear ( tlist *that ); /// 모든 아이템을 제거한다. +extern void tlist_delete ( tlist *that, int index ); /// 하나의 아이템을 제거한다. +extern void tlist_exchange ( tlist *that, int index1, int index2 ); /// 2개의 아이템 위치를 교환한다. +extern void *tlist_first ( tlist *that ); /// 첫번째 아이템 포인터를 돌려준다. +extern int tlist_indexof ( tlist *that, void *item ); /// 아이템 포인터가 동일한 포인터의 인덱스를 구한다. +extern void tlist_insert ( tlist *that, int index, void *item ); /// 아이템을 특정 위치에 추가한다. +extern void *tlist_last ( tlist *that ); /// 마지막 아이템 포인터를 구한다. +extern void tlist_move ( tlist *that, int curindex, int newindex ); /// 특정 아이템의 위치(인덱스)를 변경한다. +extern int tlist_remove ( tlist *that, void *item ); /// 인자로 전해준 동일한 아이템 포인터를 찾아 삭제한다. +extern void tlist_pack ( tlist *that ); /// 메모리 관리를 위해 사용하지 않는 메모리를 반환한다. +extern void tlist_sort ( tlist *that,int (*tlistsortcompare)(const void *, const void *) ); /// 아이템을 사용자 비교함수를 통해 정렬한다 /// @} #ifdef __cplusplus diff --git a/app/app-prime-modbus/include/common/tmmap.h b/app/app-prime-modbus/include/common/tmmap.h index 254ed9a..ccdcc4c 100644 --- a/app/app-prime-modbus/include/common/tmmap.h +++ b/app/app-prime-modbus/include/common/tmmap.h @@ -1,8 +1,8 @@ /** @file tmmap.h @date 2009/07/06 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief mmap �� �ٷ�� �Լ��� ��üȭ �Ͽ���. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief mmap 를 다루는 함수를 객체화 하였다. @todo @bug @@ -10,8 +10,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -30,9 +30,9 @@ extern "C" { #endif /// @{ -/// @brief tmmap.c ���� �����ϴ� �Լ� ����Ʈ -extern void *tmmap_alloc( unsigned long phys_base, unsigned long size ); /// mmap �����Լ� -extern void tmmap_free( void *mem ); /// mmap ������ �����Ѵ�. +/// @brief tmmap.c 에서 제공하는 함수 리스트 +extern void *tmmap_alloc( unsigned long phys_base, unsigned long size ); /// mmap 생성함수 +extern void tmmap_free( void *mem ); /// mmap 포인터를 해제한다. /// @} diff --git a/app/app-prime-modbus/include/common/tstrlist.h b/app/app-prime-modbus/include/common/tstrlist.h index 86efbd7..774efdb 100644 --- a/app/app-prime-modbus/include/common/tstrlist.h +++ b/app/app-prime-modbus/include/common/tstrlist.h @@ -1,8 +1,8 @@ /** @file tstrlist.c @date 2009/1/14 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief Delphi ������ ��Ʈ������Ʈ ��ü�̴�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief Delphi 형식의 스트링리스트 객체이다. @modify @todo @@ -11,8 +11,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -23,20 +23,20 @@ #define MIN_STR_LEN 64 #define COMMA_TEXT_DELIM " ,\f\n\r\t\v" -/// ��ü�� ������ ����ü +/// 객체를 관리할 구조체 typedef struct { - tlist *ftlst; // tlist ��ü ������ + tlist *ftlst; // tlist 객체 포인터 } tstrlist; -/// ���ڿ� ������ ����ü +/// 문자열 아이템 구조체 typedef struct { - void *fdata; // ����� ������ - int ftag; // ������ �������� ���� ���� - int fstrcap; // ���ڿ� �� �Ҵ� ���� - char *fstr; // ���ڿ� ������ + void *fdata; // 사용자 포인터 + int ftag; // 임의의 정수형값 저장 변수 + int fstrcap; // 문자열 메모리 할당 개수 + char *fstr; // 문자열 포인터 } tstritem; @@ -45,32 +45,32 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ -extern tstrlist* tstrlist_create ( void ); /// tstrlist ��ü�� �����Ѵ�. -extern void tstrlist_free ( tstrlist *that ); /// tstrlist ��ü�� �Ҹ��Ų��. -extern void tstrlist_clear ( tstrlist *that ); /// ��� �������� �����Ѵ�. -extern int tstrlist_add ( tstrlist *that, const char *str ); /// ���ڿ� �������� �߰��Ѵ�. -extern int tstrlist_add_object ( tstrlist *that, const char *str, void *obj ); /// ���ڿ��� ����� ������ �߰��Ѵ�. -extern void tstrlist_delete ( tstrlist *that, int index ); /// �ϳ��� �������� �����Ѵ�. -extern char *tstrlist_get_string ( tstrlist *that, int index ); /// �ε����� �ش��ϴ� ���ڿ� ������ ��ȯ�Ѵ�. -extern void *tstrlist_get_object ( tstrlist *that, int index ); /// �ε����� �ش��ϴ� ����� ������ ��ȯ�Ѵ�. -extern int tstrlist_get_tag ( tstrlist *that, int index ); /// �ε����� �ش��ϴ� ������ �±����� ��ȯ�Ѵ�. -extern void tstrlist_exchange ( tstrlist *that, int index1, int index2 ); /// 2���� ������ ��ġ�� ��ȯ�Ѵ�. -extern int tstrlist_indexof ( tstrlist *that, const char *str ); /// ���ڿ��� ������ �ε����� ���Ѵ�. -extern void tstrlist_insert ( tstrlist *that, int index, char *str ); /// �������� Ư�� ��ġ�� �߰��Ѵ�. -extern char *tstrlist_first ( tstrlist *that ); /// ù��° ���ڿ� ������ �����ش�. -extern char *tstrlist_last ( tstrlist *that ); /// ������ ���ڿ� ������ ���Ѵ�. -extern void tstrlist_move ( tstrlist *that, int curindex, int newindex ); /// Ư�� �������� ��ġ(�ε���)�� �����Ѵ�. -extern void tstrlist_put_string ( tstrlist *that, int index, char *str ); /// Ư���������� ���ڿ��� �����Ѵ�. -extern void tstrlist_put_object ( tstrlist *that, int index, void *obj ); /// Ư���������� ����� �� ������ �����Ѵ�. -extern void tstrlist_put_tag ( tstrlist *that, int index, int tag ); /// Ư���������� �±����� �����Ѵ�. -extern int tstrlist_remove ( tstrlist *that, char *str ); /// ���ڷ� ������ ������ ���ڿ��� ã�� �����Ѵ�. -extern void tstrlist_pack ( tstrlist *that ); /// �� ������ ���� ������� �ʴ� �� ��ȯ�Ѵ�. -extern int tstrlist_getcount ( tstrlist *that ); /// �������� ������ ��´�. -extern void tstrlist_sort ( tstrlist *that ); /// �������� ����� ���Լ��� ���� �����Ѵ�. -extern int tstrlist_commatext ( tstrlist *that, char *str ); /// ���ڷ� ������ ���ڿ��� �и��Ͽ� ���������� �߰��Ѵ�. -extern int tstrlist_load_from_file ( tstrlist *that, char *fname ); /// �ؽ�Ʈ���Ͽ��� ���κ��� �����ۿ� ����Ѵ�. -extern int tstrlist_save_to_file ( tstrlist *that, char *fname ); /// �����۵��� ���κ��� ���Ϸ� �����Ѵ�. +/// @brief 외부에서 사용할수 있는 객체함수 리스트 +extern tstrlist* tstrlist_create ( void ); /// tstrlist 객체를 생성한다. +extern void tstrlist_free ( tstrlist *that ); /// tstrlist 객체를 소멸시킨다. +extern void tstrlist_clear ( tstrlist *that ); /// 모든 아이템을 제거한다. +extern int tstrlist_add ( tstrlist *that, const char *str ); /// 문자열 아이템을 추가한다. +extern int tstrlist_add_object ( tstrlist *that, const char *str, void *obj ); /// 문자열과 사용자 포인터를 추가한다. +extern void tstrlist_delete ( tstrlist *that, int index ); /// 하나의 아이템을 제거한다. +extern char *tstrlist_get_string ( tstrlist *that, int index ); /// 인덱스에 해당하는 문자열 포인터를 반환한다. +extern void *tstrlist_get_object ( tstrlist *that, int index ); /// 인덱스에 해당하는 사용자 포인터를 반환한다. +extern int tstrlist_get_tag ( tstrlist *that, int index ); /// 인덱스에 해당하는 정수형 태그변수를 반환한다. +extern void tstrlist_exchange ( tstrlist *that, int index1, int index2 ); /// 2개의 아이템 위치를 교환한다. +extern int tstrlist_indexof ( tstrlist *that, const char *str ); /// 문자열이 동일한 인덱스를 구한다. +extern void tstrlist_insert ( tstrlist *that, int index, char *str ); /// 아이템을 특정 위치에 추가한다. +extern char *tstrlist_first ( tstrlist *that ); /// 첫번째 문자열 포인터를 돌려준다. +extern char *tstrlist_last ( tstrlist *that ); /// 마지막 문자열 포인터를 구한다. +extern void tstrlist_move ( tstrlist *that, int curindex, int newindex ); /// 특정 아이템의 위치(인덱스)를 변경한다. +extern void tstrlist_put_string ( tstrlist *that, int index, char *str ); /// 특정아이템의 문자열을 변경한다. +extern void tstrlist_put_object ( tstrlist *that, int index, void *obj ); /// 특정아이템의 사용자 메모리 변수를 변경한다. +extern void tstrlist_put_tag ( tstrlist *that, int index, int tag ); /// 특정아이템의 태그변수를 변경한다. +extern int tstrlist_remove ( tstrlist *that, char *str ); /// 인자로 전해준 동일한 문자열을 찾아 삭제한다. +extern void tstrlist_pack ( tstrlist *that ); /// 메모리 관리를 위해 사용하지 않는 메모리를 반환한다. +extern int tstrlist_getcount ( tstrlist *that ); /// 아이템의 개수를 얻는다. +extern void tstrlist_sort ( tstrlist *that ); /// 아이템을 사용자 비교함수를 통해 정렬한다. +extern int tstrlist_commatext ( tstrlist *that, char *str ); /// 인자로 전해준 문자열을 분리하여 아이템으로 추가한다. +extern int tstrlist_load_from_file ( tstrlist *that, char *fname ); /// 텍스트파일에서 라인별로 아이템에 등록한다. +extern int tstrlist_save_to_file ( tstrlist *that, char *fname ); /// 아이템들을 라인별로 파일로 저장한다. /// @} #ifdef __cplusplus diff --git a/app/app-prime-modbus/include/common/uservar.h b/app/app-prime-modbus/include/common/uservar.h index 7ac557a..5d454e9 100644 --- a/app/app-prime-modbus/include/common/uservar.h +++ b/app/app-prime-modbus/include/common/uservar.h @@ -1,8 +1,8 @@ /** @file uservar.h @date 2009/4/9 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief ����ڰ� �����ϴ� ������ �����ϴ� ����ü�� + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 사용자가 편집하는 변수를 관리하는 구조체들 @modify @@ -18,22 +18,22 @@ #define _USERVAR_HEADER_ -/// ������ ���� ���� ����ü +/// 정수형 변수 편집 구조체 typedef struct { - int cur_val; // ����Ǵ� �� - int *ptr_org_val; // ������ �� + int cur_val; // 변경되는 값 + int *ptr_org_val; // 원래의 값 - int max; // �ִ밪 - int min; // �ּҰ� - int step; // ��ȭġ - int allow_loop; // ��ȯ��뿩�� + int max; // 최대값 + int min; // 최소값 + int step; // 변화치 + int allow_loop; // 순환허용여부 } user_var_integer_t; /// @{ -/// @brief uservar.c �� �����ϴ� �ʱ�ȭ ��ũ�� +/// @brief uservar.c 가 제공하는 초기화 매크로 //---------------------------------------------------------------------------- #define DECRARE_UVAR_INT( _name_, _cur_val_, _ptr_org_val_, _min_, _max_, _step_, _allow_loop_ ) \ static user_var_integer_t _name = { \ @@ -48,11 +48,11 @@ typedef struct /// @} /// @{ -/// @brief uservar.c �� �����ϴ� �Լ� +/// @brief uservar.c 가 제공하는 함수 //---------------------------------------------------------------------------- -extern void uvar_int_ready( user_var_integer_t *uv ); /// ������ ���� ����ü�� ����� �غ� �Ѵ�. -extern void uvar_int_apply( user_var_integer_t *uv ); /// ������ ���� ����ü���� ������ ���� �����Ѵ�. -extern void uvar_int_add( user_var_integer_t *uv, int offset ); /// ������ ���� ����ü���� ���� �����Ѵ�. +extern void uvar_int_ready( user_var_integer_t *uv ); /// 정수형 편집 구조체를 사용할 준비를 한다. +extern void uvar_int_apply( user_var_integer_t *uv ); /// 정수형 편집 구조체에서 수정된 값을 적용한다. +extern void uvar_int_add( user_var_integer_t *uv, int offset ); /// 정수형 편집 구조체에서 값을 변경한다. /// @} diff --git a/app/app-prime-modbus/include/common/util.h b/app/app-prime-modbus/include/common/util.h index 159d292..1b3c8fb 100644 --- a/app/app-prime-modbus/include/common/util.h +++ b/app/app-prime-modbus/include/common/util.h @@ -1,8 +1,8 @@ /** @file util.h @date 2009/1/15 ~ - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief �ܼ��� ��ƿ��Ƽ �Լ����� ��Ƴ��Ҵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 단순한 유틸리티 함수들을 모아놓았다. @modify @todo @@ -26,7 +26,7 @@ typedef long long msec_t; /// @{ -/// @brief util.h ���� �����ϴ� ��ũ�� ����Ʈ +/// @brief util.h 에서 제공하는 매크로 리스트 #define ALIGN_SIZE( v, as ) (((v+(as-1))/as)*as) /// @} @@ -36,48 +36,48 @@ extern "C" { #endif /// @{ -/// @brief util.h ���� �����ϴ� �Լ� ����Ʈ +/// @brief util.h 에서 제공하는 함수 리스트 #ifdef EMBEDDED_LINUX -// ���� ���� -extern int find_dev_major( char *driver_name ); /// ����̹� �̸����� ����̹��� ��������ȣ�� ��´�. -extern int dev_open( char *fname, unsigned char major, unsigned char minor ); /// ����̽� ����̹� ��������� ����. -extern int exist_file( char *fname ); /// �����̳� ���丮�� �����ϴ��� Ȯ���Ѵ�. -extern int get_file_size( char *fname ); /// ������ ũ�⸦ ��´� -extern int tftp_download_file( char *ip, char *fname ); /// tftp shell ��ƿ��Ƽ�� ����Ͽ� ������ �ٿ�ε�´�. -extern int tftp_upload_file ( char *ip, char *fname ); /// tftp shell ��ƿ��Ƽ�� ����Ͽ� ������ ���ε��Ѵ� - -// �ð� ���� -extern unsigned long get_cur_usec(void); /// ������ usec �ð�ƽ�� ���´�. -extern void format_date_text( char *fmt, char *text ); /// ��¥�� �ð��� ���ڿ� ���·� �����ش�. -extern int set_sys_time( int yyyy, int MM, int dd, int hh, int mm, int ss ); /// �ý��� �ð��� �����Ѵ�. - -// ���ڿ� ���� -extern void trimstr( char *line ); /// ���ڿ����� �յ��� Ư�����ڿ� ���鹮�ڸ� �����Ѵ�. -extern int item_value_parse( const char *line, char delim, char *item, char *val ); /// ���ڿ����� Ư�� ���ڸ� �и��ڷ� ����Ͽ� �и��Ѵ� -extern void bin_to_hex( char *hex, char *bin, int bcnt ); /// ���̳ʸ� ����Ÿ�� ���� ���ڿ��� ��ȯ�Ѵ�. - -// ��Ÿ -extern int log_printf( const char *log_file, const char *fmt, ... ); /// �α������� ���Ͽ� �� �ִ´�. -extern int is_rect_region( int x, int y, int sx, int sy, int wdt, int hgt ); /// ��ǥ�� �簢�����ȿ� �ִ��� �˻� -extern int get_myip( char *ip ); /// �ڱ� IP�� ��´�. -extern int ping( char *host, int count ); /// ping ������ �����Ͽ� ������ ȸ���� �����ش�. -extern int get_irq_count( int irq ); /// ���ͷ�Ʈ �� Ƚ���� �����ش� -extern int get_mcu( void ); /// mcu ��ȣ�� ã�´�. - -extern char getchar_without_enter( void ); /// Ű���� �Է��� ���;��� �ѹ��ھ� ��� �´�. -extern void print_buffer( char *buf, int count ); /// ���۸� ����� �����ش�. -extern unsigned int strtosize( char *str ); /// ���ڿ��� ���ڷ� ��ȯ�Ѵ�. ���ڵ��� �������� �Ǵ��Ѵ�. -extern unsigned short checksum(void* buf, int len); /// ������ ���� 16��Ʈ�� ���Ͽ� �����ش�. -extern void msleep( int msec ); /// msec ������ ��ٸ���. +// 파일 관련 +extern int find_dev_major( char *driver_name ); /// 드라이버 이름으로 드라이버의 메이져번호를 얻는다. +extern int dev_open( char *fname, unsigned char major, unsigned char minor ); /// 디바이스 드라이버 노드파일을 연다. +extern int exist_file( char *fname ); /// 파일이나 디렉토리가 존재하는지 확인한다. +extern int get_file_size( char *fname ); /// 파일의 크기를 얻는다 +extern int tftp_download_file( char *ip, char *fname ); /// tftp shell 유틸리티를 사용하여 파일을 다운로드받는다. +extern int tftp_upload_file ( char *ip, char *fname ); /// tftp shell 유틸리티를 사용하여 파일을 업로드한다 + +// 시간 관련 +extern unsigned long get_cur_usec(void); /// 현재의 usec 시간틱을 얻어온다. +extern void format_date_text( char *fmt, char *text ); /// 날짜와 시간을 문자열 형태로 돌려준다. +extern int set_sys_time( int yyyy, int MM, int dd, int hh, int mm, int ss ); /// 시스템 시간을 설정한다. + +// 문자열 관련 +extern void trimstr( char *line ); /// 문자열에서 앞뒤의 특수문자와 공백문자를 제거한다. +extern int item_value_parse( const char *line, char delim, char *item, char *val ); /// 문자열에서 특정 문자를 분리자로 사용하여 분리한다 +extern void bin_to_hex( char *hex, char *bin, int bcnt ); /// 바이너리 데이타를 헥사 문자열로 변환한다. + +// 기타 +extern int log_printf( const char *log_file, const char *fmt, ... ); /// 로그정보를 파일에 써 넣는다. +extern int is_rect_region( int x, int y, int sx, int sy, int wdt, int hgt ); /// 좌표가 사각영역안에 있는지 검사 +extern int get_myip( char *ip ); /// 자기 IP를 얻는다. +extern int ping( char *host, int count ); /// ping 명령을 수행하여 성공한 회수를 돌려준다. +extern int get_irq_count( int irq ); /// 인터럽트 발생 횟수를 돌려준다 +extern int get_mcu( void ); /// mcu 번호를 찾는다. + +extern char getchar_without_enter( void ); /// 키보드 입력을 엔터없이 한문자씩 즉시 받는다. +extern void print_buffer( char *buf, int count ); /// 버퍼를 헥사로 보여준다. +extern unsigned int strtosize( char *str ); /// 문자열을 숫자로 변환한다. 숫자뒤의 단위까지 판단한다. +extern unsigned short checksum(void* buf, int len); /// 버퍼의 값을 16비트로 더하여 돌려준다. +extern void msleep( int msec ); /// msec 단위로 기다린다. /// @} #endif -extern msec_t get_cur_msec(void); /// ������ msec �ð�ƽ�� ���´�. -extern unsigned long get_cur_sec(void); /// ������ sec �ð�ƽ�� ���´�. +extern msec_t get_cur_msec(void); /// 현재의 msec 시간틱을 얻어온다. +extern unsigned long get_cur_sec(void); /// 현재의 sec 시간틱을 얻어온다. #ifdef __cplusplus } diff --git a/app/app-prime-modbus/include/fa-types.h b/app/app-prime-modbus/include/fa-types.h index 148c171..a2feff8 100644 --- a/app/app-prime-modbus/include/fa-types.h +++ b/app/app-prime-modbus/include/fa-types.h @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ -// ȭ�ϸ� : fa-types.h -// ������Ʈ : -// �� �� : NISP ������ ���õ� ��ƾ ��� +// 화일명 : fa-types.h +// 프로젝트 : +// 설 명 : NISP 디버깅과 관련된 루틴 헤더 // -// ���۱� : �������̸������ֽ�ȸ�� -// �� �� : +// 저작권 : 에프에이리눅스주식회사 +// 주 의 : //------------------------------------------------------------------------------ #ifndef _FA_TYPES_HEADER_ #define _FA_TYPES_HEADER_ diff --git a/app/app-prime-modbus/include/fanet/alarm.h b/app/app-prime-modbus/include/fanet/alarm.h index cddd189..c052975 100644 --- a/app/app-prime-modbus/include/fanet/alarm.h +++ b/app/app-prime-modbus/include/fanet/alarm.h @@ -1,8 +1,8 @@ /** @file alarm.h @date 2009-04-09 - @author ����� freefrug@falinux.com - @brief �˶�����̽� ����̹��� ���� �����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief 알람디바이스 드라이버를 열고 관리한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -26,12 +26,12 @@ #define ENDLESS_ALARM_NOTIFY ENDLESS_ALARM_VALUE /// @{ -/// @brief �ܺο� �����Ǵ� �Լ� ����Ʈ -extern poll_obj_t *alarm_open( int count, unsigned int per_msec ); /// �˶� ����̽� ����̹��� open �Ѵ�. -extern void alarm_close( poll_obj_t *obj ); /// alarm ����̹��� close �Ѵ�. -extern void alarm_restart( poll_obj_t *obj ); /// �˶��� ������Ѵ�. -extern void alarm_stop( poll_obj_t *obj ); /// �˶��� �����Ѵ�. -extern void alarm_handled( poll_obj_t *obj ); /// �˶��� Ȯ���Ѵ�.(�˶��� ���ϸ� �ݵ�� ȣ���Ͽ��� �Ѵ�.) +/// @brief 외부에 공개되는 함수 리스트 +extern poll_obj_t *alarm_open( int count, unsigned int per_msec ); /// 알람 디바이스 드라이버를 open 한다. +extern void alarm_close( poll_obj_t *obj ); /// alarm 드라이버를 close 한다. +extern void alarm_restart( poll_obj_t *obj ); /// 알람을 재시작한다. +extern void alarm_stop( poll_obj_t *obj ); /// 알람을 중지한다. +extern void alarm_handled( poll_obj_t *obj ); /// 알람을 확인한다.(알람이 발생하면 반드시 호출하여야 한다.) /// @} diff --git a/app/app-prime-modbus/include/fanet/can.h b/app/app-prime-modbus/include/fanet/can.h index 29574d2..b944914 100644 --- a/app/app-prime-modbus/include/fanet/can.h +++ b/app/app-prime-modbus/include/fanet/can.h @@ -1,8 +1,8 @@ /** @file can.h @date 2012-02-24 - @author ��漮 jks@falinux.com - @brief can�� ����� ����� ����Ѵ�. + @author 장길석 jks@falinux.com + @brief can을 사용한 통신을 담당한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -26,7 +26,7 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 typedef struct can_frame can_frame_t; diff --git a/app/app-prime-modbus/include/fanet/fa-bind-ioctl.h b/app/app-prime-modbus/include/fanet/fa-bind-ioctl.h index 8caf836..d032134 100644 --- a/app/app-prime-modbus/include/fanet/fa-bind-ioctl.h +++ b/app/app-prime-modbus/include/fanet/fa-bind-ioctl.h @@ -1,9 +1,9 @@ /*----------------------------------------------------------------------------- - �� �� : fa-bind-ioctl.h - �� �� : ���̵� ����̹��̴�. - �� �� : ����� freefrug@falinux.com - �� ¥ : - �� �� : + 파 일 : fa-bind-ioctl.h + 설 명 : 바이드 드라이버이다. + 작 성 : 오재경 freefrug@falinux.com + 날 짜 : + 주 의 : -------------------------------------------------------------------------------*/ #ifndef _FA_BIND_IOCTL_H_ @@ -34,20 +34,20 @@ typedef struct { typedef struct { - // ���� ������ �������� ���� - int port; // ����� �ּ� - int group; // ����� �� - int sr_type; // ���� Ÿ�� - int count; // ����Ÿ ���� + // 변수 순서를 변경하지 말것 + int port; // 상대편 주소 + int group; // 상대편 그룹 + int sr_type; // 전송 타입 + int count; // 데이타 개수 - unsigned char *buf; // ���� + unsigned char *buf; // 버퍼 } __attribute__((packed)) ioctl_bind_msg_t; -#define SR_TYPE_NORMAL 0 // �Ϲ����� ���� -#define SR_TYPE_EXPRESS 1 // �� �����߿��� ���� -#define SR_TYPE_EMERENCY 2 // ��� ������ ���� ���� -#define SR_TYPE_REQ_ACK 0x10000000 // req_ack ���� ���� +#define SR_TYPE_NORMAL 0 // 일반적인 전송 +#define SR_TYPE_EXPRESS 1 // 내 메세지중에서 먼저 +#define SR_TYPE_EMERENCY 2 // 모든 메세지중 가장 먼저 +#define SR_TYPE_REQ_ACK 0x10000000 // req_ack 메세지 형태 #define FABIND_BROADCAST_GROUP (0x7fff) diff --git a/app/app-prime-modbus/include/fanet/fabind.h b/app/app-prime-modbus/include/fanet/fabind.h index 64cf228..b266c4b 100644 --- a/app/app-prime-modbus/include/fanet/fabind.h +++ b/app/app-prime-modbus/include/fanet/fabind.h @@ -1,8 +1,8 @@ /** @file fabind.h @date 2008/10/08 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief fa-bind ����̹��� ����ϱ� ���� API �� �����Ѵ�.. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief fa-bind 드라이버를 사용하기 위한 API 를 구현한다.. @todo @@ -32,17 +32,17 @@ extern "C" { #endif /// @{ -/// @brief fabind ��ü �Լ� ����Ʈ -extern poll_obj_t *fabind_open( int port, int group, int recv_queue_count ); /// fabind ����̹� ���� ��ü�� �ʱ�ȭ�Ѵ�. -extern void fabind_close( poll_obj_t *obj ); /// fabind ��ü�� �����Ѵ�. -extern poll_obj_t *fabind_get_byport( int port ); /// fabind ��ü�� ��Ʈ��ȣ�� ã�´�. -extern int fabind_write( poll_obj_t *obj, int port, char *buf, int len ); /// fabind �� ���� ����Ÿ�� �����Ѵ�. -extern int fabind_read( poll_obj_t *obj, char *buf, int len, int *need_ack ); /// fabind �� ���� ����Ÿ�� �д´�. -extern int fabind_write_and_response( poll_obj_t *obj, int port, char *tx_buf, char *rx_buf, int tx_cnt, int rx_cnt ); /// fabind �� ���� ����Ÿ�� ������ �� ������ �´�. -extern int fabind_write_group( poll_obj_t *obj, int grp_port, char *buf, int len ); /// fabind �� ���� ������� ����Ÿ�� �����Ѵ�. -extern int fabind_get_recv_port( poll_obj_t *obj ); /// fabind �� ���� ���� ��Ʈ��ȣ�� ��´�. - -extern int fabind_write_timeout( poll_obj_t *obj, int port, char *buf, int len, int timeout_sec ); /// fabind �� ���� ����Ÿ�� �ð��� �����ϸ� �����Ѵ�. +/// @brief fabind 객체 함수 리스트 +extern poll_obj_t *fabind_open( int port, int group, int recv_queue_count ); /// fabind 드라이버 열고 객체를 초기화한다. +extern void fabind_close( poll_obj_t *obj ); /// fabind 객체를 해제한다. +extern poll_obj_t *fabind_get_byport( int port ); /// fabind 객체를 포트번호로 찾는다. +extern int fabind_write( poll_obj_t *obj, int port, char *buf, int len ); /// fabind 를 통해 데이타를 전송한다. +extern int fabind_read( poll_obj_t *obj, char *buf, int len, int *need_ack ); /// fabind 를 통해 데이타를 읽는다. +extern int fabind_write_and_response( poll_obj_t *obj, int port, char *tx_buf, char *rx_buf, int tx_cnt, int rx_cnt ); /// fabind 를 통해 데이타를 전송한 후 응답을 받는다. +extern int fabind_write_group( poll_obj_t *obj, int grp_port, char *buf, int len ); /// fabind 를 통해 그룹단위로 데이타를 전송한다. +extern int fabind_get_recv_port( poll_obj_t *obj ); /// fabind 를 통해 들어온 포트번호를 얻는다. + +extern int fabind_write_timeout( poll_obj_t *obj, int port, char *buf, int len, int timeout_sec ); /// fabind 를 통해 데이타를 시간을 감시하며 전송한다. /// @} #ifdef __cplusplus diff --git a/app/app-prime-modbus/include/fanet/fcntl_lock.h b/app/app-prime-modbus/include/fanet/fcntl_lock.h index 98a0a10..6f5f51e 100644 --- a/app/app-prime-modbus/include/fanet/fcntl_lock.h +++ b/app/app-prime-modbus/include/fanet/fcntl_lock.h @@ -1,8 +1,8 @@ /** @file fcntl_lock.c @date 2009/9/30 - @author ����â frog@falinux.com FALinux.Co.,Ltd. - @brief fcntl_lock �Լ� + @author 유영창 frog@falinux.com FALinux.Co.,Ltd. + @brief fcntl_lock 함수 Ver 0.1.0 @modify @@ -23,11 +23,11 @@ extern "C" { /// @{ -/// @brief fcntl_lock.h ���� �����ϴ� �Լ� ����Ʈ -extern int flock_create ( char *key_file ); /// ���μ��� ���� ���� ������ �����Ѵ�. -extern int flock_free ( int key_fd ); /// ���μ��� ���� ���� ������ �ݴ´�. -extern int flock_lock ( int key_fd ); /// ���μ����� ��ٴ�. -extern int flock_unlock ( int key_fd ); /// ���μ����� Ǭ��. +/// @brief fcntl_lock.h 에서 제공하는 함수 리스트 +extern int flock_create ( char *key_file ); /// 프로세스 록을 위한 파일을 생성한다. +extern int flock_free ( int key_fd ); /// 프로세스 록을 위한 파일을 닫는다. +extern int flock_lock ( int key_fd ); /// 프로세스를 잠근다. +extern int flock_unlock ( int key_fd ); /// 프로세스를 푼다. /// @} diff --git a/app/app-prime-modbus/include/fanet/ioctl-alarm.h b/app/app-prime-modbus/include/fanet/ioctl-alarm.h index 2bd7c8f..dec5838 100644 --- a/app/app-prime-modbus/include/fanet/ioctl-alarm.h +++ b/app/app-prime-modbus/include/fanet/ioctl-alarm.h @@ -1,8 +1,8 @@ /** @file ioctl-alarm.h @date 2009/4/09 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief �ٹ��̽�����̹����� Ÿ�̸Ӹ� ����Ͽ� �˶��� �����Ѵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 다바이스드라이버에서 타이머를 사용하여 알람을 구현한다. @todo @@ -25,11 +25,11 @@ /// @{ -/// @brief IOCTL_ALARM_SET ���� ����ü +/// @brief IOCTL_ALARM_SET 인자 구조체 //------------------------------------------------------------------------------ typedef struct { - int count; // 0 ���� ������ ���������� �˶��� ����Ų��. + int count; // 0 보다 작으면 지속적으로 알람을 발생시킨다. unsigned int per_msec; } ioctl_alarm_set_t; diff --git a/app/app-prime-modbus/include/fanet/ioctl-gpio-int.h b/app/app-prime-modbus/include/fanet/ioctl-gpio-int.h index 58c8098..d645819 100644 --- a/app/app-prime-modbus/include/fanet/ioctl-gpio-int.h +++ b/app/app-prime-modbus/include/fanet/ioctl-gpio-int.h @@ -1,16 +1,16 @@ /*----------------------------------------------------------------------------- - �� �� : gpio-int.h - �� �� : gpio ���ͷ�Ʈ�� Ȱ��ȭ �ϰ� ���ͷ�Ʈ ���� app �� �˷��ִ� ����̹� - �� �� : freefrug@falinux.com - �� ¥ : 2010-03 ~ - �� �� : + 파 일 : gpio-int.h + 설 명 : gpio 인터럽트를 활성화 하고 인터럽트 발생을 app 에 알려주는 드라이버 + 작 성 : freefrug@falinux.com + 날 짜 : 2010-03 ~ + 주 의 : -------------------------------------------------------------------------------*/ #ifndef _GPIO_INT_H_ #define _GPIO_INT_H_ -/* ������ -------------------------------------------------------------------*/ +/* 모듈관련 -------------------------------------------------------------------*/ #define GPIO_INT_DRIVER_MAJOR 202 #ifdef MODULE @@ -19,7 +19,7 @@ #endif -/* ioctl �Լ��� command -------------------------------------------------------*/ +/* ioctl 함수의 command -------------------------------------------------------*/ #define GPIO_INT_DRIVER_MAJOR_KEY 'g' #define IOCTL_REGISTER_GPIO_INT _IOW( GPIO_INT_DRIVER_MAJOR_KEY, 0 , ioctl_arg_gpio_int_info_t ) #define IOCTL_UNREGISTER_GPIO_INT _IOW( GPIO_INT_DRIVER_MAJOR_KEY, 1 , gpdesc_t ) diff --git a/app/app-prime-modbus/include/fanet/ipc_call.h b/app/app-prime-modbus/include/fanet/ipc_call.h index 605478e..d546755 100644 --- a/app/app-prime-modbus/include/fanet/ipc_call.h +++ b/app/app-prime-modbus/include/fanet/ipc_call.h @@ -1,8 +1,8 @@ /** @file ipc_call.h @date 2008-06-30 - @author ����� freefrug@falinux.com - @brief ���μ������� ���� ������ �����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief 프로세스간의 명령 전달을 구현한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -28,19 +28,19 @@ #define IPC_CALL_TIMEOUT_UNLIMIT 0xffffffff /// -/// IPC CALL ������ ����Ÿ ���Ž� ȣ��Ǵ� ����� �̺�Ʈ �Լ� ���� +/// IPC CALL 에서의 데이타 수신시 호출되는 사용자 이벤트 함수 형태 typedef void (*ipc_call_func_t)(unsigned long src_id, unsigned long msg_type, void *buf, int len ); /// @{ -/// @brief IPC CALL���� ����ϴ� ��� ��Ŷ +/// @brief IPC CALL에서 사용하는 통신 패킷 typedef struct { - unsigned long dst_id; /// ������ ID - unsigned long src_id; /// �۽��� ID - unsigned long msg_type; /// ���� ���� ( BIN, XML, ASC ) - unsigned long size; /// ���� ������ ũ�� - char buf[IPC_CALL_BUF_LEN]; /// ���� ���� + unsigned long dst_id; /// 수신지 ID + unsigned long src_id; /// 송신지 ID + unsigned long msg_type; /// 메시지 형식 ( BIN, XML, ASC ) + unsigned long size; /// 전송 메시지의 크기 + char buf[IPC_CALL_BUF_LEN]; /// 메시지 버퍼 } ipc_call_packet_t; @@ -76,37 +76,37 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 -int ipc_call_create ( unsigned long id ); /// IPC_CALL �� �����Ѵ�. -int ipc_call_free ( unsigned long id ); /// IPC_CALL �� �����Ѵ�. +int ipc_call_create ( unsigned long id ); /// IPC_CALL 을 생성한다. +int ipc_call_free ( unsigned long id ); /// IPC_CALL 을 해제한다. -int ipc_call_method ( unsigned long method ); /// IPC_CALL �� ���� ����� ���Ѵ�. +int ipc_call_method ( unsigned long method ); /// IPC_CALL 의 수행 방식을 정한다. -int ipc_call_level ( unsigned long level ); /// IPC_CALL �� �ð� �ʰ��� �����Ѵ�. -int ipc_call_level_default ( unsigned long level ); /// IPC_CALL �� �ð� �ʰ��� �����Ѵ�. +int ipc_call_level ( unsigned long level ); /// IPC_CALL 의 시간 초과를 설정한다. +int ipc_call_level_default ( unsigned long level ); /// IPC_CALL 의 시간 초과를 설정한다. -int ipc_call_timeout ( unsigned long msec ); /// IPC_CALL �� �ð� �ʰ��� �����Ѵ�. -int ipc_call_timeout_default( unsigned long msec ); /// IPC_CALL �� �ð� �ʰ��� �����Ѵ�. +int ipc_call_timeout ( unsigned long msec ); /// IPC_CALL 의 시간 초과를 설정한다. +int ipc_call_timeout_default( unsigned long msec ); /// IPC_CALL 의 시간 초과를 설정한다. -// int ipc_call_on_read ( void (*func)( unsigned long msg_type, void *priv ) ); /// IPC_CALL �� �б ���� �̺�Ʈ�� �����Ѵ�. +// int ipc_call_on_read ( void (*func)( unsigned long msg_type, void *priv ) ); /// IPC_CALL 의 읽기에 대한 이벤트를 지정한다. int ipc_call_on_read ( ipc_call_func_t *func ); -int ipc_call_read ( void *buf, int len ); /// IPC_CALL �� ���ŵ� ������ ������ BIN �������� �д´�. +int ipc_call_read ( void *buf, int len ); /// IPC_CALL 의 수신된 버퍼의 내용을 BIN 형식으로 읽는다. -// int ipc_call_read_xml ( void *buf, int len ); /// IPC_CALL �� ���ŵ� ������ ������ XML �������� �д´�. -//int ipc_call_read_asc ( void *buf, int len ); /// IPC_CALL �� ���ŵ� ������ ������ ASC �������� �д´�. +// int ipc_call_read_xml ( void *buf, int len ); /// IPC_CALL 의 수신된 버퍼의 내용을 XML 형식으로 읽는다. +//int ipc_call_read_asc ( void *buf, int len ); /// IPC_CALL 의 수신된 버퍼의 내용을 ASC 형식으로 읽는다. -int ipc_call_send ( unsigned long dest, void *buf, int len, unsigned long msg_type ); /// IPC_CALL �� BIN �������� ������ �����Ѵ�. -int ipc_call_send_xml ( unsigned long dest, char *buf, int len ); /// IPC_CALL �� XML �������� ������ �����Ѵ�. -int ipc_call_send_asc ( unsigned long dest, char *buf, int len ); /// IPC_CALL �� ASC �������� ������ �����Ѵ�. +int ipc_call_send ( unsigned long dest, void *buf, int len, unsigned long msg_type ); /// IPC_CALL 의 BIN 형식으로 데이터를 전송한다. +int ipc_call_send_xml ( unsigned long dest, char *buf, int len ); /// IPC_CALL 의 XML 형식으로 데이터를 전송한다. +int ipc_call_send_asc ( unsigned long dest, char *buf, int len ); /// IPC_CALL 의 ASC 형식으로 데이터를 전송한다. -int ipc_call_rpc ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL �� BIN �������� ������ �����ϰ� �����Ѵ�. -int ipc_call_rpc_xml ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL �� XML �������� ������ �����ϰ� �����Ѵ�. -int ipc_call_rpc_asc ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL �� ASC �������� ������ �����ϰ� �����Ѵ�. +int ipc_call_rpc ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL 의 BIN 형식으로 데이터를 전송하고 수신한다. +int ipc_call_rpc_xml ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL 의 XML 형식으로 데이터를 전송하고 수신한다. +int ipc_call_rpc_asc ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL 의 ASC 형식으로 데이터를 전송하고 수신한다. /// @} diff --git a/app/app-prime-modbus/include/fanet/pollmng.h b/app/app-prime-modbus/include/fanet/pollmng.h index 2ef9638..027e9d7 100644 --- a/app/app-prime-modbus/include/fanet/pollmng.h +++ b/app/app-prime-modbus/include/fanet/pollmng.h @@ -1,11 +1,11 @@ /** @file pollmng.c @date 2009/3/19 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief poll �� �����Ѵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief poll 을 관리한다. - @modify 2010/01/04 (�����) poll_obj_t ����ü���� poll_ndx ������� ���� - 2010/08/18 (��漭) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + @modify 2010/01/04 (오재경) poll_obj_t 구조체에서 poll_ndx 멤버변수 제거 + 2010/08/18 (장길서) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug @@ -15,8 +15,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -33,14 +33,14 @@ #define POLL_RECURSIVE_COUNT 8 -/// �����ϴ� �Լ����� ���ϰ� +/// 관리하는 함수들의 리턴값 #define POLL_NO_DESCRIPTOR -2 #define POLL_ASYNC_ERR -1 #define POLL_EVENTED 0 #define POLL_TIME_OUT 1 #define POLL_RECURSIVE_LIMIT_ERR -3 -/// poll �� �����Ǵ� �����ڵ��� ���� +/// poll 로 관리되는 파일핸들의 형태 #define STYP_NONE 0 #define STYP_TCP 1 #define STYP_UDP 2 @@ -62,15 +62,15 @@ #endif -/// poll ���� ��ü +/// poll 관리 객체 typedef struct poll_obj_t_ poll_obj_t; struct poll_obj_t_ { fd_t fd; int type; int tag; - void *priv; // tcp, udp, uds ��� ���Ǵ� ������ - void *user; // ����� ������ + void *priv; // tcp, udp, uds 등에서 사용되는 포인터 + void *user; // 사용자 포인터 #ifdef MS_WIN32 @@ -84,7 +84,7 @@ struct poll_obj_t_ int (*on_poll_hup)( poll_obj_t *obj); int (*on_timeout )( poll_obj_t *obj); - int (*on_disconnect )( poll_obj_t *obj); // tcp ���� ���������� �������� ȣ�� + int (*on_disconnect )( poll_obj_t *obj); // tcp 에서 소켓접속이 끊어지면 호출 }; #ifdef MS_WIN32 @@ -117,21 +117,21 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ - -void poll_init( void ); /// poll ���� ��ü�� �����Ѵ�. -void poll_exit( void ); /// poll ���� ��ü�� �����Ѵ� -void poll_rebuild( void ); /// ����Ʈ�� �����Ǵ� ���ϵ�ũ���͵��� ���迭�� �籸���Ѵ�. -poll_obj_t *poll_add( fd_t fd ); /// poll ���� ��ü�� ������ ���� ��ũ���� ����Ѵ�. -poll_obj_t *poll_obj_byfd( fd_t fd ); /// poll ���� ��ü���� ���ϵ�ũ��Ʈ�� �����ϴ� ����ü�� ��ȯ�Ѵ�. -poll_obj_t *poll_get_obj( int idx ); /// poll ���� ��ü���� ������ ������ü ������ ��´�. -void *poll_get_priv( int idx ); /// poll ���� ��ü���� ����� ������ ��´�. -int poll_count( void ); /// �����ϴ� ������ ���� -void poll_delete( poll_obj_t *obj ); /// poll ���� ��ü���� ��ü�� �����ͷ� �����Ѵ�. -void poll_delete_byfd( fd_t fd ); /// poll ���� ��ü���� ���ϵ�ũ���ͷ� �����Ѵ�. -int poll_do_loop( int time_out ); /// poll �̺�Ʈ ���� �����Լ� -int poll_do_one( fd_t fd, int event, int time_out ); /// poll �̺�Ʈ�� �ϳ��� �����ڵ�θ� ������. -poll_obj_t *poll_obj_bytag( int tag ); /// poll ���� ��ü���� tag ��ȣ�� ã�� ����ü�� ��ȯ�Ѵ�. +/// @brief 외부에서 사용할수 있는 객체함수 리스트 + +void poll_init( void ); /// poll 관리 객체를 생성한다. +void poll_exit( void ); /// poll 관리 객체를 해제한다 +void poll_rebuild( void ); /// 리스트로 관리되는 파일디스크립터들을 폴배열에 재구성한다. +poll_obj_t *poll_add( fd_t fd ); /// poll 관리 객체에 열려진 파일 디스크립터를 등록한다. +poll_obj_t *poll_obj_byfd( fd_t fd ); /// poll 관리 객체에서 파일디스크립트로 관리하는 폴객체를 반환한다. +poll_obj_t *poll_get_obj( int idx ); /// poll 관리 객체에서 개개의 폴구조체 포인터를 얻는다. +void *poll_get_priv( int idx ); /// poll 관리 객체에서 사용자 포인터를 얻는다. +int poll_count( void ); /// 관리하는 파일의 개수 +void poll_delete( poll_obj_t *obj ); /// poll 관리 객체에서 객체의 포인터로 삭제한다. +void poll_delete_byfd( fd_t fd ); /// poll 관리 객체에서 파일디스크립터로 삭제한다. +int poll_do_loop( int time_out ); /// poll 이벤트 메인 루프함수 +int poll_do_one( fd_t fd, int event, int time_out ); /// poll 이벤트를 하나의 파일핸들로만 돌린다. +poll_obj_t *poll_obj_bytag( int tag ); /// poll 관리 객체에서 tag 번호로 찾아 폴객체를 반환한다. /// @} #ifdef __cplusplus diff --git a/app/app-prime-modbus/include/fanet/rspackage.h b/app/app-prime-modbus/include/fanet/rspackage.h index 4cb38cb..f0da70c 100644 --- a/app/app-prime-modbus/include/fanet/rspackage.h +++ b/app/app-prime-modbus/include/fanet/rspackage.h @@ -2,16 +2,16 @@ #define __RS_PACKAGE__ #define __RS_BUFFER_MAX (8192) -#define RSERR_NONE 0 /// ���� ���� -#define RSERR_OUT_OF_MEMORY 1 /// �� ���� -#define RSERR_CRC 2 /// CRC ���� -#define RSERR_DATA 3 /// ������ ���� �̻� +#define RSERR_NONE 0 /// 에러 없음 +#define RSERR_OUT_OF_MEMORY 1 /// 메모리 부족 +#define RSERR_CRC 2 /// CRC 에러 +#define RSERR_DATA 3 /// 데이터 내용 이상 -#define __WAIT_DLE 0 // DLE �ڵ带 ���� �� ���� ��� -#define __WAIT_STX 1 // STX �ڵ带 ���� �� ���� ��� -#define __RCV_DATA 2 // swRCV_DATA �ڷ� ������ ��� -#define __CHK_DLE 3 // ������ ���� �� DLE �ڵ带 ����, ������ DLE ������ Ȯ�� +#define __WAIT_DLE 0 // DLE 코드를 만날 때 까지 대기 +#define __WAIT_STX 1 // STX 코드를 만날 때 까지 대기 +#define __RCV_DATA 2 // swRCV_DATA 자료 수신을 계속 +#define __CHK_DLE 3 // 데이터 수신 중 DLE 코드를 받음, 다음이 DLE 인지를 확인 -int rspackage_error_code; /// ���� ���� �ڵ� +int rspackage_error_code; /// 에러 전역 코드 #endif diff --git a/app/app-prime-modbus/include/fanet/rspackage_dle.h b/app/app-prime-modbus/include/fanet/rspackage_dle.h index 3d6257f..8b95e27 100644 --- a/app/app-prime-modbus/include/fanet/rspackage_dle.h +++ b/app/app-prime-modbus/include/fanet/rspackage_dle.h @@ -3,16 +3,16 @@ #include <rspackage.h> -/// rs package �� ���� �⺻ ���� +/// rs package 를 위한 기본 구조 typedef struct rs_dle_t_ rs_dle_t; struct rs_dle_t_ -{ /// IniFile ���� ���� �����̸� - char ch_stx; // STX�� ���Ǵ� ����Ʈ �ڵ� - char ch_etx; // ETX�� ���Ǵ� ����Ʈ �ڵ� - char ch_dle; // DLE�� ���Ǵ� ����Ʈ �ڵ� - char buffer[__RS_BUFFER_MAX+1]; // ���� �ڷḦ ���� ���� - int sz_data; // ���� �ڷ��� ����Ʈ ����, -1:CRC ����, 0:�ڷ� ����, �ٸ���:���� �ڷ� ���� - int (*check_crc)( rs_dle_t *); // CRC�� üũ�ϴ� �Լ� +{ /// IniFile 정보 저장 파일이름 + char ch_stx; // STX에 사용되는 바이트 코드 + char ch_etx; // ETX에 사용되는 바이트 코드 + char ch_dle; // DLE에 사용되는 바이트 코드 + char buffer[__RS_BUFFER_MAX+1]; // 수신 자료를 위한 버퍼 + int sz_data; // 수신 자료의 바이트 개수, -1:CRC 에러, 0:자료 없음, 다른값:수신 자료 개수 + int (*check_crc)( rs_dle_t *); // CRC를 체크하는 함수 }; extern rs_dle_t *rs_create_dle( int (*check_crc)( rs_dle_t *)); diff --git a/app/app-prime-modbus/include/fanet/tcp.h b/app/app-prime-modbus/include/fanet/tcp.h index 3cfbc13..911eb99 100644 --- a/app/app-prime-modbus/include/fanet/tcp.h +++ b/app/app-prime-modbus/include/fanet/tcp.h @@ -1,11 +1,11 @@ /** @file tcp.c @date 2009-03-27 - @author ����� freefrug@falinux.com - @brief tcp �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief tcp 를 사용한 통신을 담당한다. @modify - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug @remark @@ -13,8 +13,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -30,21 +30,21 @@ //#include <netinet/in.h> -/// tcp ������ ���¸� �����Ѵ�. +/// tcp 소켓의 형태를 구분한다. #define SOCK_TYPE_CLIENT 0 #define SOCK_TYPE_SERVER 1 #define SOCK_TYPE_SERVER_CLIENT 2 -/// ��å�� ���� �ɼ� -#define BF_POLICY_CLOSE_IOERR (1<<0 ) /// read(), write() �Լ� �������� ������ ���´�. -#define BF_POLICY_CLOSE_TIMEOUT (1<<1 ) /// SOCK_TYPE_SERVER_CLIENT Ÿ�Կ� ���ؼ� Ư���ð��� �����Ķ�� ������ ���´�. -#define BF_POLICY_RELOAD_TIMEOUT (1<<2 ) /// SOCK_TYPE_SERVER_CLIENT Ÿ�Կ� ���ؼ� �ð��� �簻���Ѵ�. -#define BF_POLICY_CLOSE_OFF_LINK (1<<3 ) /// SOCK_TYPE_SERVER_CLIENT Ÿ�Կ� ���ؼ� �ϵ�������� ��ũ�� �������� ������ ���´�. -#define BF_POLICY_READ_ZERO_ERROR (1<<4 ) /// read() �Լ����� ���� ���� 0�̸� ����ó���Ѵ�. (���������� ������ �� ��������� read 0 �̺�Ʈ�� ȣ��Ǵ°��� ���´�) -#define BF_POLICY_WRITE_NONBLOCK (1<<5 ) /// write() �Լ��� ȣ���Ҷ� ���۰� ��밡������ Ȯ���ϱ� ���� POLLOUT �̺�Ʈ�� Ȯ���Ѵ�. +/// 정책의 대한 옵션 +#define BF_POLICY_CLOSE_IOERR (1<<0 ) /// read(), write() 함수 에러발생시 접속을 끊는다. +#define BF_POLICY_CLOSE_TIMEOUT (1<<1 ) /// SOCK_TYPE_SERVER_CLIENT 타입에 한해서 특정시간이 지난후라면 접속을 끊는다. +#define BF_POLICY_RELOAD_TIMEOUT (1<<2 ) /// SOCK_TYPE_SERVER_CLIENT 타입에 한해서 시간을 재갱신한다. +#define BF_POLICY_CLOSE_OFF_LINK (1<<3 ) /// SOCK_TYPE_SERVER_CLIENT 타입에 한해서 하드웨어적인 링크가 끊어지면 접속을 끊는다. +#define BF_POLICY_READ_ZERO_ERROR (1<<4 ) /// read() 함수에서 읽은 값이 0이면 에러처리한다. (소켓접속이 끊어진 후 계속적으로 read 0 이벤트가 호출되는것을 막는다) +#define BF_POLICY_WRITE_NONBLOCK (1<<5 ) /// write() 함수를 호출할때 버퍼가 사용가능한지 확인하기 위해 POLLOUT 이벤트를 확인한다. -/// ��Ÿ��� +/// 기타상수 #define DEFAULT_LIVE_SEC (3600) @@ -53,32 +53,32 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 #ifdef EMBEDDED_LINUX -void tcp_set_policy( unsigned int option ); /// tcp ��å�� �����Ѵ� -unsigned int tcp_get_policy( void ); /// tcp ��å�� ��´�. -void tcp_set_livesec( int sec ); /// ����� �����ð� ������ ������ ���µ� ����ϴ� �ð��� �����Ѵ�. +void tcp_set_policy( unsigned int option ); /// tcp 정책을 설정한다 +unsigned int tcp_get_policy( void ); /// tcp 정책을 얻는다. +void tcp_set_livesec( int sec ); /// 통신이 일정시간 없으면 접속을 끊는데 사용하는 시간을 설정한다. #endif -poll_obj_t *tcp_open_server( int port, int max_client ); /// tcp ������ �������·� open �Ѵ�. -poll_obj_t *tcp_open_client( char *ip, int port ); /// tcp ������ Ŭ���̾�Ʈ ���·� open �ϰ� ������� �����Ѵ� -//poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, int sockfd, struct sockaddr_in *paddr ); /// Ŭ���̾�Ʈ ������ ������ ������ ��ü�� ����Ѵ�. -void tcp_close( poll_obj_t *obj ); /// tcp ������ close �Ѵ�. -poll_obj_t *tcp_accept_client( poll_obj_t *obj_server ); /// tcp ������ ���ӿ䱸�� ó������ Ŭ���̾�Ʈ������ ����Ѵ�. -int tcp_write( poll_obj_t *obj, char *buf, int len ); /// tcp ������ ���� ����Ÿ�� �����Ѵ�. -int tcp_read( poll_obj_t *obj, char *buf, int len ); /// tcp ������ ���� ����Ÿ�� �д´�. -int tcp_check_time( poll_obj_t *obj ); /// �����ð��� �������� ȣ��Ǹ� tcp ��å�� ���� ���� �����Ѵ�. +poll_obj_t *tcp_open_server( int port, int max_client ); /// tcp 소켓을 서버형태로 open 한다. +poll_obj_t *tcp_open_client( char *ip, int port ); /// tcp 소켓을 클라이언트 형태로 open 하고 상대편에 접속한다 +//poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, int sockfd, struct sockaddr_in *paddr ); /// 클라이언트 소켓의 접속을 폴관린 객체에 등록한다. +void tcp_close( poll_obj_t *obj ); /// tcp 소켓을 close 한다. +poll_obj_t *tcp_accept_client( poll_obj_t *obj_server ); /// tcp 소켓의 접속요구를 처리한후 클라이언트소켓을 등록한다. +int tcp_write( poll_obj_t *obj, char *buf, int len ); /// tcp 소켓을 통해 데이타를 전송한다. +int tcp_read( poll_obj_t *obj, char *buf, int len ); /// tcp 소켓을 통해 데이타를 읽는다. +int tcp_check_time( poll_obj_t *obj ); /// 일정시간이 지난을때 호출되며 tcp 정책에 의해 일을 수행한다. -int tcp_client_count( poll_obj_t *obj_server ); /// tcp �������� ���ӵ� ������ ������ ��´�. -poll_obj_t *tcp_get_client( poll_obj_t *obj_server, int idx ); /// tcp �������� �ε����� ���ӵ� ���� �� ��ü�� ��´�. -poll_obj_t *tcp_get_server( poll_obj_t *obj_client ); /// tcp Ŭ���̾�Ʈ ����ü���� ������ü�� ��´�. +int tcp_client_count( poll_obj_t *obj_server ); /// tcp 서버에서 접속된 소켓의 개수를 얻는다. +poll_obj_t *tcp_get_client( poll_obj_t *obj_server, int idx ); /// tcp 서버에서 인덱스로 접속된 소켓 폴 객체를 얻는다. +poll_obj_t *tcp_get_server( poll_obj_t *obj_client ); /// tcp 클라이언트 폴객체에서 서버객체를 얻는다. -int tcp_write_thread( poll_obj_t *obj, char *buf, int len );/// �����带 �����Ͽ� ����Ÿ�� �����Ѵ�. +int tcp_write_thread( poll_obj_t *obj, char *buf, int len );/// 쓰레드를 생성하여 데이타를 전송한다. -const char *tcp_peer_ip_string( poll_obj_t *obj_client ); /// ����� ������� IP ���ڿ��� ��´�. +const char *tcp_peer_ip_string( poll_obj_t *obj_client ); /// 연결된 상대편의 IP 문자열을 얻는다. /// @} diff --git a/app/app-prime-modbus/include/fanet/tipc.h b/app/app-prime-modbus/include/fanet/tipc.h index e56b4cd..dabb170 100644 --- a/app/app-prime-modbus/include/fanet/tipc.h +++ b/app/app-prime-modbus/include/fanet/tipc.h @@ -8,11 +8,11 @@ #ifndef INCLUDE_FANET_TIPC_H_ #define INCLUDE_FANET_TIPC_H_ -poll_obj_t *tipc_open_server( int type, int inst, int client_max); /// tcp ������ �������·� open �Ѵ�. -poll_obj_t *tipc_open_client( int type, int inst); /// tcp ������ Ŭ���̾�Ʈ ���·� open �ϰ� ������� �����Ѵ� -void tipc_close( poll_obj_t *obj ); /// tcp ������ close �Ѵ�. -poll_obj_t *tipc_accept_client( poll_obj_t *obj_server ); /// tcp ������ ���ӿ䱸�� ó������ Ŭ���̾�Ʈ������ ����Ѵ�. -int tipc_write( poll_obj_t *obj, char *buf, int len ); /// tcp ������ ���� ����Ÿ�� �����Ѵ�. -int tipc_read( poll_obj_t *obj, char *buf, int len ); /// tcp ������ ���� ����Ÿ�� �д´�. +poll_obj_t *tipc_open_server( int type, int inst, int client_max); /// tcp 소켓을 서버형태로 open 한다. +poll_obj_t *tipc_open_client( int type, int inst); /// tcp 소켓을 클라이언트 형태로 open 하고 상대편에 접속한다 +void tipc_close( poll_obj_t *obj ); /// tcp 소켓을 close 한다. +poll_obj_t *tipc_accept_client( poll_obj_t *obj_server ); /// tcp 소켓의 접속요구를 처리한후 클라이언트소켓을 등록한다. +int tipc_write( poll_obj_t *obj, char *buf, int len ); /// tcp 소켓을 통해 데이타를 전송한다. +int tipc_read( poll_obj_t *obj, char *buf, int len ); /// tcp 소켓을 통해 데이타를 읽는다. #endif /* INCLUDE_FANET_TIPC_H_ */ diff --git a/app/app-prime-modbus/include/fanet/tipc_bcast.h b/app/app-prime-modbus/include/fanet/tipc_bcast.h index ee46f92..619f137 100644 --- a/app/app-prime-modbus/include/fanet/tipc_bcast.h +++ b/app/app-prime-modbus/include/fanet/tipc_bcast.h @@ -1,8 +1,8 @@ /** @file tipc_bcast.h @date 2015-08-31 - @author ��漮 jks@falinux.com - @brief TIPC-DGRAM ������ ����Ͽ� ��Ƽij��Ʈ�� ������ ����� ����Ѵ�. + @author 장길석 jks@falinux.com + @brief TIPC-DGRAM 소켓을 사용하여 멀티캐스트가 가능한 통신을 담당한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -26,13 +26,13 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 -poll_obj_t *tipc_bcast_open( int type, int lower, int upper ); /// tipc_dgram ������ �������·� open �Ѵ�. -void tipc_bcast_close( poll_obj_t *obj ); /// tipc_dgram ������ close �Ѵ�. +poll_obj_t *tipc_bcast_open( int type, int lower, int upper ); /// tipc_dgram 소켓을 서버형태로 open 한다. +void tipc_bcast_close( poll_obj_t *obj ); /// tipc_dgram 소켓을 close 한다. -int tipc_bcast_write( poll_obj_t *obj, int type, int lower, int upper, char *buf, int len ); /// tipc_dgram ������ ���� ����Ÿ�� �����Ѵ�. -int tipc_bcast_read( poll_obj_t *obj, char *buf, int len ); /// tipc_dgram ������ ���� ����Ÿ�� �д´�. +int tipc_bcast_write( poll_obj_t *obj, int type, int lower, int upper, char *buf, int len ); /// tipc_dgram 소켓을 통해 데이타를 전송한다. +int tipc_bcast_read( poll_obj_t *obj, char *buf, int len ); /// tipc_dgram 소켓을 통해 데이타를 읽는다. /// @} #ifdef __cplusplus diff --git a/app/app-prime-modbus/include/fanet/tipc_stream.h b/app/app-prime-modbus/include/fanet/tipc_stream.h index c93a90b..7d75731 100644 --- a/app/app-prime-modbus/include/fanet/tipc_stream.h +++ b/app/app-prime-modbus/include/fanet/tipc_stream.h @@ -8,11 +8,11 @@ #ifndef INCLUDE_FANET_TIPC_STREAM_H_ #define INCLUDE_FANET_TIPC_STREAM_H_ -poll_obj_t *tipc_stream_open_server( int type, int inst, int client_max); /// tipc ������ �������·� open �Ѵ�. -poll_obj_t *tipc_stream_open_client( int type, int inst); /// tipc ������ Ŭ���̾�Ʈ ���·� open �ϰ� ������� �����Ѵ� -void tipc_stream_close( poll_obj_t *obj ); /// tipc ������ close �Ѵ�. -poll_obj_t *tipc_stream_accept_client( poll_obj_t *obj_server ); /// tipc ������ ���ӿ䱸�� ó������ Ŭ���̾�Ʈ������ ����Ѵ�. -int tipc_stream_write( poll_obj_t *obj, char *buf, int len ); /// tipc ������ ���� ����Ÿ�� �����Ѵ�. -int tipc_stream_read( poll_obj_t *obj, char *buf, int len ); /// tipc ������ ���� ����Ÿ�� �д´�. +poll_obj_t *tipc_stream_open_server( int type, int inst, int client_max); /// tipc 소켓을 서버형태로 open 한다. +poll_obj_t *tipc_stream_open_client( int type, int inst); /// tipc 소켓을 클라이언트 형태로 open 하고 상대편에 접속한다 +void tipc_stream_close( poll_obj_t *obj ); /// tipc 소켓을 close 한다. +poll_obj_t *tipc_stream_accept_client( poll_obj_t *obj_server ); /// tipc 소켓의 접속요구를 처리한후 클라이언트소켓을 등록한다. +int tipc_stream_write( poll_obj_t *obj, char *buf, int len ); /// tipc 소켓을 통해 데이타를 전송한다. +int tipc_stream_read( poll_obj_t *obj, char *buf, int len ); /// tipc 소켓을 통해 데이타를 읽는다. #endif /* INCLUDE_FANET_TIPC_STREAM_H_ */ diff --git a/app/app-prime-modbus/include/fanet/uart-packet-dle.h b/app/app-prime-modbus/include/fanet/uart-packet-dle.h index 174f22b..1209b28 100644 --- a/app/app-prime-modbus/include/fanet/uart-packet-dle.h +++ b/app/app-prime-modbus/include/fanet/uart-packet-dle.h @@ -1,8 +1,8 @@ /** @file uart-packet-dle.h @date 2010-09-17 - @author ����� freefrug@falinux.com - @brief uart ������¸� �м��ϰ� �����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief uart 통신형태를 분석하고 관리한다. dle / stx / data(crc16) / dle / etx @@ -14,8 +14,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -30,16 +30,16 @@ enum { ANERR_NONE=0, ANERR_CRC }; typedef void(*on_uart_packet_t)( poll_obj_t *obj, char *buf, int count, int error ); -/// �ø������� �м��� ����ü +/// 시리얼패켓 분석용 구조체 typedef struct { - // ����� ���溯�� + // 사용자 변경변수 int stx; int etx; int dle; - unsigned short (*make_crc16)(char *buf, int count ); // �⺻���� crc �Լ��� ��ġ�ȴ�. + unsigned short (*make_crc16)(char *buf, int count ); // 기본적인 crc 함수가 매치된다. - // ����� ����Ұ� + // 사용자 변경불가 poll_obj_t *obj; int an_seq; @@ -58,13 +58,13 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 -extern void upacket_dle_create( poll_obj_t *obj, on_uart_packet_t callback ); /// uart ���� ���� ��ü ���� -extern void upacket_dle_free( poll_obj_t *obj ); /// uart ���� ���� ��ü ���� -extern void upacket_dle_clear( uart_packet_analysis_t *up ); /// uart ���Ϻм� Ŭ���� -extern int upacket_dle_read_from_uart( poll_obj_t *obj, on_uart_packet_t callback ); /// uart ���� ����Ÿ�� �о� ������ �м��� �� ������ ��������� ��ϵ� �ݹ��Լ��� ȣ���Ѵ�. -extern int upacket_dle_write_to_uart( poll_obj_t *obj, const char *data_buf, int count ); /// uart �� ������ ����� �����Ѵ�. +extern void upacket_dle_create( poll_obj_t *obj, on_uart_packet_t callback ); /// uart 패켓 관린 객체 생성 +extern void upacket_dle_free( poll_obj_t *obj ); /// uart 패켓 관린 객체 해제 +extern void upacket_dle_clear( uart_packet_analysis_t *up ); /// uart 패켓분석 클리어 +extern int upacket_dle_read_from_uart( poll_obj_t *obj, on_uart_packet_t callback ); /// uart 에서 데이타를 읽어 패켓을 분석한 후 패켓이 만들어지면 등록된 콜백함수를 호출한다. +extern int upacket_dle_write_to_uart( poll_obj_t *obj, const char *data_buf, int count ); /// uart 에 패켓을 만들어 전송한다. diff --git a/app/app-prime-modbus/include/fanet/uart.h b/app/app-prime-modbus/include/fanet/uart.h index c0701d3..8127256 100644 --- a/app/app-prime-modbus/include/fanet/uart.h +++ b/app/app-prime-modbus/include/fanet/uart.h @@ -1,11 +1,11 @@ /** @file uart.h @date 2009-03-19 - @author ����� freefrug@falinux.com - @brief uds �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief uds 를 사용한 통신을 담당한다. @modify - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug @remark @@ -13,8 +13,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -28,21 +28,21 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 -poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit); /// uart �� open �Ѵ�. -void uart_close( poll_obj_t *obj ); /// uart �� close �Ѵ�. -poll_obj_t *uart_get_byport( char *fname ); /// uart ����ü�� �����̸����� ã�´�. -int uart_write( poll_obj_t *obj, char *buf, int len ); /// uart �� ���� ����Ÿ�� �����Ѵ�. -int uart_read( poll_obj_t *obj, char *buf, int len ); /// uart �� ���� ����Ÿ�� �д´�. +poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit); /// uart 을 open 한다. +void uart_close( poll_obj_t *obj ); /// uart 를 close 한다. +poll_obj_t *uart_get_byport( char *fname ); /// uart 폴객체를 파일이름으로 찾는다. +int uart_write( poll_obj_t *obj, char *buf, int len ); /// uart 를 통해 데이타를 전송한다. +int uart_read( poll_obj_t *obj, char *buf, int len ); /// uart 를 통해 데이타를 읽는다. -int uart_read_into_fifo( poll_obj_t *obj ); /// uart ���� ���Ź��ۿ� ����Ÿ�� �����Ѵ�. -int uart_copy_recv_fifo( poll_obj_t *obj, char *buf, int len ); /// uart ���� ���Ź��ۿ��� ����Ÿ�� �о�´�. -char *uart_get_recv_fifo( poll_obj_t *obj ); /// uart ���� ���Ź����� ������ ��´�. -int uart_get_recv_fifo_count( poll_obj_t *obj ); /// uart ���� ���Ź��ۿ� ����� ����Ÿ�� ������ ��´�. -int uart_checkout_recv_fifo( poll_obj_t *obj, int len ); /// uart ���� ���Ź��ۿ��� ������ ����Ÿ�� ������ �� ������ ����Ÿ�� �̵��Ѵ�. +int uart_read_into_fifo( poll_obj_t *obj ); /// uart 내부 수신버퍼에 데이타를 저장한다. +int uart_copy_recv_fifo( poll_obj_t *obj, char *buf, int len ); /// uart 내부 수신버퍼에서 데이타를 읽어온다. +char *uart_get_recv_fifo( poll_obj_t *obj ); /// uart 내부 수신버퍼의 포인터를 얻는다. +int uart_get_recv_fifo_count( poll_obj_t *obj ); /// uart 내부 수신버퍼에 저장된 데이타의 갯수를 얻는다. +int uart_checkout_recv_fifo( poll_obj_t *obj, int len ); /// uart 내부 수신버퍼에서 앞쪽의 데이타를 제거한 후 뒤쪽의 데이타를 이동한다. -int uart_recv_wait_fifo( poll_obj_t *obj, unsigned char *match, int match_len, int tmout_msec ); ///uart���� ����Ÿ�� ���ŵɶ����� �����Ѵ�. +int uart_recv_wait_fifo( poll_obj_t *obj, unsigned char *match, int match_len, int tmout_msec ); ///uart에서 비교데이타가 수신될때까지 감시한다. /// @} diff --git a/app/app-prime-modbus/include/fanet/udp.h b/app/app-prime-modbus/include/fanet/udp.h index c6c9c3c..df434fd 100644 --- a/app/app-prime-modbus/include/fanet/udp.h +++ b/app/app-prime-modbus/include/fanet/udp.h @@ -1,11 +1,11 @@ /** @file udp.h @date 2009-03-19 - @author ����� freefrug@falinux.com - @brief udp �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief udp 를 사용한 통신을 담당한다. @modify - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug @remark @@ -13,8 +13,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -27,21 +27,21 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 -poll_obj_t *udp_open_server( int port ); /// udp ������ �������·� open �Ѵ�. -poll_obj_t *udp_open_client( void ); /// udp ������ Ŭ���̾�Ʈ ���·� open �Ѵ�. -void udp_close( poll_obj_t *obj ); /// udp ������ close �Ѵ�. -poll_obj_t *udp_get_byport( int port ); /// udp ����ü�� ��Ʈ��ȣ�� ã�´�. +poll_obj_t *udp_open_server( int port ); /// udp 소켓을 서버형태로 open 한다. +poll_obj_t *udp_open_client( void ); /// udp 소켓을 클라이언트 형태로 open 한다. +void udp_close( poll_obj_t *obj ); /// udp 소켓을 close 한다. +poll_obj_t *udp_get_byport( int port ); /// udp 폴객체를 포트번호로 찾는다. -int udp_write( poll_obj_t *obj, char *host, int port, char *buf, int len ); /// udp ������ ���� ����Ÿ�� �����Ѵ�. -int udp_read( poll_obj_t *obj, char *buf, int len ); /// udp ������ ���� ����Ÿ�� �д´�. -int udp_echo( poll_obj_t *obj, char *buf, int len ); /// on_read()���� Ŭ���̾�Ʈ�� �� �����Ѵ�. +int udp_write( poll_obj_t *obj, char *host, int port, char *buf, int len ); /// udp 소켓을 통해 데이타를 전송한다. +int udp_read( poll_obj_t *obj, char *buf, int len ); /// udp 소켓을 통해 데이타를 읽는다. +int udp_echo( poll_obj_t *obj, char *buf, int len ); /// on_read()에서 클라이언트로 재 전송한다. -int udp_write_simple( char *host, int port, char *buf, int len ); /// poll ��ü���� udp ������ ���� ����Ÿ�� �����Ѵ�. -int udp_read_simple( char *buf, int len ); /// poll ��ü���� udp ������ ���� ����Ÿ�� �д´�. +int udp_write_simple( char *host, int port, char *buf, int len ); /// poll 객체없이 udp 소켓을 통해 데이타를 전송한다. +int udp_read_simple( char *buf, int len ); /// poll 객체없이 udp 소켓을 통해 데이타를 읽는다. -int udp_get_remote_host( poll_obj_t *obj, char *host, int *port ); /// udp �������� ���������� ������ ȣ��Ʈ�� ã�´�. +int udp_get_remote_host( poll_obj_t *obj, char *host, int *port ); /// udp 소켓으로 마지막으로 수신한 호스트를 찾는다. /// @} diff --git a/app/app-prime-modbus/include/fanet/uds.h b/app/app-prime-modbus/include/fanet/uds.h index e4b9f90..db4d8b9 100644 --- a/app/app-prime-modbus/include/fanet/uds.h +++ b/app/app-prime-modbus/include/fanet/uds.h @@ -1,8 +1,8 @@ /** @file uds.h @date 2009-03-19 - @author ����� freefrug@falinux.com - @brief uds �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief uds 를 사용한 통신을 담당한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -26,17 +26,17 @@ extern "C" { #endif /// @{ -/// @brief �ܺο��� ����Ҽ� �ִ� ��ü�Լ� ����Ʈ +/// @brief 외부에서 사용할수 있는 객체함수 리스트 -poll_obj_t *uds_open_server( char *fname ); /// uds ������ �������·� open �Ѵ�. -poll_obj_t *uds_open_client( char *fname ); /// uds ������ Ŭ���̾�Ʈ ���·� open �Ѵ�. -void uds_close( poll_obj_t *obj ); /// uds ������ close �Ѵ�. -poll_obj_t *uds_get_byport( char *fname ); /// uds ����ü�� �����̸����� ã�´�. -int uds_write( poll_obj_t *obj, char *to, char *buf, int len ); /// uds ������ ���� ����Ÿ�� �����Ѵ�. -int uds_read( poll_obj_t *obj, char *buf, int len ); /// uds ������ ���� ����Ÿ�� �д´�. +poll_obj_t *uds_open_server( char *fname ); /// uds 소켓을 서버형태로 open 한다. +poll_obj_t *uds_open_client( char *fname ); /// uds 소켓을 클라이언트 형태로 open 한다. +void uds_close( poll_obj_t *obj ); /// uds 소켓을 close 한다. +poll_obj_t *uds_get_byport( char *fname ); /// uds 폴객체를 파일이름으로 찾는다. +int uds_write( poll_obj_t *obj, char *to, char *buf, int len ); /// uds 소켓을 통해 데이타를 전송한다. +int uds_read( poll_obj_t *obj, char *buf, int len ); /// uds 소켓을 통해 데이타를 읽는다. -int uds_write_simple( char *to, char *buf, int len ); /// poll ��ü���� uds ������ ���� ����Ÿ�� �����Ѵ�. -int uds_read_simple( char *buf, int len ); /// poll ��ü���� uds ������ ���� ����Ÿ�� �д´�. +int uds_write_simple( char *to, char *buf, int len ); /// poll 객체없이 uds 소켓을 통해 데이타를 전송한다. +int uds_read_simple( char *buf, int len ); /// poll 객체없이 uds 소켓을 통해 데이타를 읽는다. /// @} diff --git a/app/app-prime-modbus/include/fanet/ux_gui.h b/app/app-prime-modbus/include/fanet/ux_gui.h index 0929f11..def1707 100644 --- a/app/app-prime-modbus/include/fanet/ux_gui.h +++ b/app/app-prime-modbus/include/fanet/ux_gui.h @@ -1,6 +1,6 @@ //------------------------------------------------------------------------------ /** @file ux_gui.h - @brief GUI ó�� ���̺귯�� + @brief GUI 처리 라이브러리 @author *///---------------------------------------------------------------------------- @@ -18,21 +18,21 @@ extern "C" #endif - int ux_gui_lib_init ( int exit_flag ); // gui ���̺������ �ʱ�ȭ �Ѵ�. - int ux_gui_screen_map_load ( char *filename ); // ��ũ�� �� ������ �о� ó�� �Ѵ�. - int ux_gui_screen_map_set_dc ( dc_t *dc ); // ��� DC�� �����Ѵ�. - int ux_gui_screen_map_draw_front ( void ); // ���� ȭ���� ����. - int ux_gui_screen_map_put_ie_event ( ie_event_t *event_data ); // �̺�Ʈ ������ �Ѱ� ���� ó�� �Ѵ�. - int ux_gui_screen_map_get_area ( void ); // ���� �ε����� ���Ѵ�. - int ux_gui_screen_map_draw_area_front ( int area_index ); // ���� ������ ����. - int ux_gui_screen_map_draw_area_back ( int area_index ); // ��� ������ ����. + int ux_gui_lib_init ( int exit_flag ); // gui 라이브버리를 초기화 한다. + int ux_gui_screen_map_load ( char *filename ); // 스크린 맵 파일을 읽어 처리 한다. + int ux_gui_screen_map_set_dc ( dc_t *dc ); // 대상 DC를 설정한다. + int ux_gui_screen_map_draw_front ( void ); // 전경 화면을 그린다. + int ux_gui_screen_map_put_ie_event ( ie_event_t *event_data ); // 이벤트 데이터를 넘겨 사전 처리 한다. + int ux_gui_screen_map_get_area ( void ); // 영역 인덱스를 구한다. + int ux_gui_screen_map_draw_area_front ( int area_index ); // 전경 영역을 그린다. + int ux_gui_screen_map_draw_area_back ( int area_index ); // 배경 영역을 그린다. - int ux_gui_screen_map_mark_button ( int area_index ); // ��ũ�� �� �����ڿ��� ��ư �������� ǥ�� �Ѵ�. + int ux_gui_screen_map_mark_button ( int area_index ); // 스크립 맵 관리자에게 버튼 영역임을 표기 한다. - int ux_gui_screen_map_draw_button_down ( int area_index ); // ��ư�� �ٿ�� ����� ����. - int ux_gui_screen_map_draw_button_up ( int area_index , int msec_delay ); // ��ư�� msec ����� ���� ����� ����. + int ux_gui_screen_map_draw_button_down ( int area_index ); // 버튼이 다운된 모습을 그린다. + int ux_gui_screen_map_draw_button_up ( int area_index , int msec_delay ); // 버튼이 msec 대기후 업된 모습을 그린다. - int ux_gui_screen_map_get_mouse_pos ( int *x, int *y ); // ���콺 ��ġ�� ��´�. + int ux_gui_screen_map_get_mouse_pos ( int *x, int *y ); // 마우스 위치를 얻는다. #ifdef __cplusplus } @@ -40,7 +40,7 @@ extern "C" //------------------------------------------------------------------------------ // -// ���� ���� ���� +// 전역 변수 정의 // //------------------------------------------------------------------------------ diff --git a/app/app-prime-modbus/include/global.h b/app/app-prime-modbus/include/global.h index 717636b..4503c00 100644 --- a/app/app-prime-modbus/include/global.h +++ b/app/app-prime-modbus/include/global.h @@ -2,11 +2,11 @@ @file global.h @date 2010-03-09 @author name ( @falinux.com) FALinux.Co.,Ltd. - @brief ������ ���� ����ü���� �����Ѵ� + @brief 다음과 같은 구조체들을 정의한다 - - ������ ����ü - - ��� ����ü - - ȯ������ �̸� + - 공유메모리 구조체 + - 통신 구조체 + - 환경파일 이름 @modify @todo @@ -16,8 +16,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- diff --git a/app/app-prime-modbus/lib/common/dprint.c b/app/app-prime-modbus/lib/common/dprint.c index f9526b3..3a888fc 100644 --- a/app/app-prime-modbus/lib/common/dprint.c +++ b/app/app-prime-modbus/lib/common/dprint.c @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ -// ���ϸ� : dprint.c -// ������Ʈ : -// �� �� : +// 파일명 : dprint.c +// 프로젝트 : +// 설 명 : // -// �ۼ��� : -// ���۱� : +// 작성일 : +// 저작권 : // // //------------------------------------------------------------------------------ @@ -14,14 +14,14 @@ #include <dprint.h> //------------------------------------------------------------------------------ -// ���� : ���� ���� +// 설명 : 전역 변수 //------------------------------------------------------------------------------ static unsigned long debug_flag = 0; static char prg_mark[128]; //------------------------------------------------------------------------------ -// ���� : ����� �ʱ�ȭ +// 설명 : 디버그 초기화 //------------------------------------------------------------------------------ void dinit( char *prg_name ) { @@ -29,7 +29,7 @@ void dinit( char *prg_name ) } //------------------------------------------------------------------------------ -// ���� : ����� ������ �����Ѵ�. +// 설명 : 디버그 레벨을 설정한다. //------------------------------------------------------------------------------ void dlevel ( unsigned long level ) { @@ -37,7 +37,7 @@ void dlevel ( unsigned long level ) } //------------------------------------------------------------------------------ -// ���� : ����� ����Ʈ +// 설명 : 디버그 프린트 //------------------------------------------------------------------------------ int dprintf( const char *fmt, ... ) { diff --git a/app/app-prime-modbus/lib/common/famap.c b/app/app-prime-modbus/lib/common/famap.c index 890f195..7d66d51 100644 --- a/app/app-prime-modbus/lib/common/famap.c +++ b/app/app-prime-modbus/lib/common/famap.c @@ -1,11 +1,11 @@ /** @file famap.c @date 2010/12/1 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief * mmap ��ƿ��Ƽ�̴�. - * tmmap.c �� tlist.c �� �ݵ�� �����ؾ��ϴ� �������� �־� �̸� �����ϱ� - ���� �ۼ��Ǿ���. (�ܺΰ����� �ʿ��Ҷ� ����ϸ� ����.) - * ������ ������ ���� �ۼ��Ǿ� �ִ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief * mmap 유틸리티이다. + * tmmap.c 가 tlist.c 를 반드시 포함해야하는 문제점이 있어 이를 보완하기 + 위해 작성되었다. (외부공개가 필요할때 사용하면 좋다.) + * 사용법은 파일의 끝에 작성되어 있다. Ver 0.1.0 @@ -13,7 +13,7 @@ @todo @bug @remark - @warning tmmap.c tmmap.h �ʹ� ���� ������� �ʴ´�. + @warning tmmap.c tmmap.h 와는 같이 사용하지 않는다. */ //---------------------------------------------------------------------------- #include <stdio.h> @@ -32,11 +32,11 @@ #include <famap.h> //------------------------------------------------------------------------------ -/** @brief mmap �����Լ� - @param ma mmap_alloc_t ����ü ������ - @param phys_base �����ּ� - @param size ũ�� - @return ����Ҽ� �ִ� �����ּ� +/** @brief mmap 생성함수 + @param ma mmap_alloc_t 구조체 포인터 + @param phys_base 물리주소 + @param size 크기 + @return 사용할수 있는 가상주소 *///---------------------------------------------------------------------------- void *fa_mmap_alloc( mmap_alloc_t *ma, unsigned long phys_base, unsigned long size ) { @@ -45,11 +45,11 @@ void *fa_mmap_alloc( mmap_alloc_t *ma, unsigned long phys_base, unsigned long s void *mmap_mem; - // 4K ���� �ּҷ� �����Ѵ�. + // 4K 정렬 주소로 변경한다. base_ofs = phys_base & (PAGE_SIZE-1); phys_base &= ~(PAGE_SIZE-1); - // 4K ������ �� �Ҵ�´�. + // 4K 단위의 메모리를 할당받는다. size = PAGE_SIZE * ( (size + base_ofs + (PAGE_SIZE-1))/(PAGE_SIZE) ); dev_mem = open( "/dev/mem", O_RDWR|O_SYNC ); @@ -59,12 +59,12 @@ void *fa_mmap_alloc( mmap_alloc_t *ma, unsigned long phys_base, unsigned long s return NULL; } - // mmap �� �����Ѵ�. - mmap_mem = mmap( 0, // Ŀ�ο��� �˾Ƽ� �Ҵ��û - size, // �Ҵ� ũ�� - PROT_READ|PROT_WRITE, MAP_SHARED, // �Ҵ� �Ӽ� - dev_mem, // ���� �ڵ� - phys_base ); // ���� ����� �����ּ� + // mmap 로 맵핑한다. + mmap_mem = mmap( 0, // 커널에서 알아서 할당요청 + size, // 할당 크기 + PROT_READ|PROT_WRITE, MAP_SHARED, // 할당 속성 + dev_mem, // 파일 핸들 + phys_base ); // 매핑 대상의 물리주소 if ( !mmap_mem ) @@ -73,7 +73,7 @@ void *fa_mmap_alloc( mmap_alloc_t *ma, unsigned long phys_base, unsigned long s return NULL; } - // ��������ü�� ä���. + // 관리구조체를 채운다. ma->dev = dev_mem; ma->phys = phys_base; ma->size = size; @@ -84,8 +84,8 @@ void *fa_mmap_alloc( mmap_alloc_t *ma, unsigned long phys_base, unsigned long s } //------------------------------------------------------------------------------ -/** @brief mmap ������ �����Ѵ�. - @param ma mmap_alloc_t ����ü ������ +/** @brief mmap 포인터를 해제한다. + @param ma mmap_alloc_t 구조체 포인터 *///---------------------------------------------------------------------------- void fa_mmap_free( mmap_alloc_t *ma ) { @@ -94,7 +94,7 @@ void fa_mmap_free( mmap_alloc_t *ma ) } -/// ���� ------------------------------------------------------------------------ +/// 샘플 ------------------------------------------------------------------------ #if 0 #include <famap.h> diff --git a/app/app-prime-modbus/lib/common/fcntl_lock.c b/app/app-prime-modbus/lib/common/fcntl_lock.c index 68307b0..f0fb091 100644 --- a/app/app-prime-modbus/lib/common/fcntl_lock.c +++ b/app/app-prime-modbus/lib/common/fcntl_lock.c @@ -1,8 +1,8 @@ /** @file fcntl_lock.c @date 2009/9/30 - @author ����â frog@falinux.com FALinux.Co.,Ltd. - @brief fcntl_lock �Լ� + @author 유영창 frog@falinux.com FALinux.Co.,Ltd. + @brief fcntl_lock 함수 Ver 0.1.0 @modify @todo diff --git a/app/app-prime-modbus/lib/common/i2c-api.c b/app/app-prime-modbus/lib/common/i2c-api.c index a03cd87..f951ed4 100644 --- a/app/app-prime-modbus/lib/common/i2c-api.c +++ b/app/app-prime-modbus/lib/common/i2c-api.c @@ -1,9 +1,9 @@ //------------------------------------------------------------------------------ // -// �� �� : i2c_api.c -// �� �� : I2C DEVICE DRIVE API LIB +// 파 일 : i2c_api.c +// 설 명 : I2C DEVICE DRIVE API LIB // -// �� �� : ����â frog@falinux.com +// 작 성 : 유영창 frog@falinux.com //------------------------------------------------------------------------------ #include <sys/types.h> #include <stdio.h> @@ -21,22 +21,22 @@ #include <i2c-api.h> //------------------------------------------------------------------------------ -// ���� : ��ũ�� ��� +// 설명 : 매크로 상수 #define I2C_MAX_BUS 8 //------------------------------------------------------------------------------ -// ���� : �������� +// 설명 : 전역변수 -static i2c_bus_t ds[I2C_MAX_BUS]; // I2C ����̽� ����̹� ���� ����ü -static int i2c_bus_cnt = 0; // �ý��ۿ� �����ϴ� I2C ���� �� +static i2c_bus_t ds[I2C_MAX_BUS]; // I2C 디바이스 드라이버 관리 구조체 +static int i2c_bus_cnt = 0; // 시스템에 존재하는 I2C 버스 수 //------------------------------------------------------------------------------ -// ���� : pcmcia ����̽� ����̹� �ֹ�ȣ�� ��´�. -// �Ű� : major : �Լ� ���� ������ �ֹ�ȣ�� �����Ѵ�. -// ��ȯ : I2C_OK : major ��ȣ�� �����. -// I2C_NOT_FIND_MAJOR : major ��ȣ�� �߰����� ���ߴ�. -// ���� : +// 설명 : pcmcia 디바이스 드라이버 주번호를 얻는다. +// 매계 : major : 함수 실행 성공시 주번호를 전달한다. +// 반환 : I2C_OK : major 번호를 얻었다. +// I2C_NOT_FIND_MAJOR : major 번호를 발견하지 못했다. +// 주의 : //------------------------------------------------------------------------------ int i2c_get_major_i2c( int *major ) { @@ -67,7 +67,7 @@ int i2c_get_major_i2c( int *major ) } //------------------------------------------------------------------------------ -// ���� : I2C ���� ����̽� ������ ����� ����. +// 설명 : I2C 버스 디바이스 파일을 만들고 연다. //------------------------------------------------------------------------------ int i2c_make_bus_node( int major, int bn ) { @@ -80,7 +80,7 @@ int i2c_make_bus_node( int major, int bn ) } //------------------------------------------------------------------------------ -// ���� : I2C API �� �ʱ�ȭ �Ѵ�. +// 설명 : I2C API 를 초기화 한다. //------------------------------------------------------------------------------ int i2c_init( void ) { @@ -116,8 +116,8 @@ int i2c_init( void ) //------------------------------------------------------------------------------ -// ���� : ���� �����ϴ� I2C BUS ���� ��´�. -// ��ȯ : ���� �� +// 설명 : 현재 존재하는 I2C BUS 수를 얻는다. +// 반환 : 소켓 수 //------------------------------------------------------------------------------ int i2c_get_bus_count( void ) { @@ -125,7 +125,7 @@ int i2c_get_bus_count( void ) } //------------------------------------------------------------------------------ -// ���� : I2C �������� �д´�. +// 설명 : I2C 버스에서 읽는다. //------------------------------------------------------------------------------ int i2c_read_data( access_data_t * access_data ) { @@ -141,7 +141,7 @@ int i2c_read_data( access_data_t * access_data ) } //------------------------------------------------------------------------------ -// ���� : I2C ������ ������ �� �ִ´�. +// 설명 : I2C 버스에 데이터를 써 넣는다. //------------------------------------------------------------------------------ int i2c_write_data( access_data_t * access_data ) { diff --git a/app/app-prime-modbus/lib/common/mtd-nand.c b/app/app-prime-modbus/lib/common/mtd-nand.c index 7220278..8213a22 100644 --- a/app/app-prime-modbus/lib/common/mtd-nand.c +++ b/app/app-prime-modbus/lib/common/mtd-nand.c @@ -1,20 +1,20 @@ /** @file mtd-nand.c @date 2010/05/27 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief mtd�� ���� nand �÷��ø� �����Ѵ� - 2011/03/25 ����� ezboot 1.x �� ������ �߰� - 2011/04/13 ����� �������� ���� ������ ���� - 2011/06/13 ����� �������� ���� ������ ���� + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief mtd를 통해 nand 플래시를 제어한다 + 2011/03/25 오재경 ezboot 1.x 를 지원을 추가 + 2011/04/13 오재경 배드블럭에 대한 에러를 수정 + 2011/06/13 오재경 배드블럭에 대한 에러를 수정 @todo - MTD_NANDECC_OFF �ɼǵ� ������ �������� + MTD_NANDECC_OFF 옵션도 있으니 구현하자 @bug @remark @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -38,9 +38,9 @@ char desc_mtd_nand[] = "falinux mtd-nand ver 0.3.4"; //------------------------------------------------------------------------------ -/** @brief mtd-nand �����Լ� - @param fname mtd ��������̸� - @return mtdnand_t ����ü ������ +/** @brief mtd-nand 생성함수 + @param fname mtd 노드파일이름 + @return mtdnand_t 구조체 포인터 *///---------------------------------------------------------------------------- mtdnand_t *mtdnand_create( char *fname ) { @@ -59,7 +59,7 @@ mtdnand_t *mtdnand_create( char *fname ) return NULL; } - // �����÷����� ������ ��´�. + // 난드플래시의 정보를 얻는다. if ( 0 == ioctl( mtd->fd, MEMGETINFO, &mtd->info) ) { printf( " mtd=%s \n", mtd->node_name ); @@ -80,8 +80,8 @@ mtdnand_t *mtdnand_create( char *fname ) return mtd; } //------------------------------------------------------------------------------ -/** @brief mtd-nand �����Լ� - @param mtd mtdnand_t ����ü ������ +/** @brief mtd-nand 해제함수 + @param mtd mtdnand_t 구조체 포인터 *///---------------------------------------------------------------------------- void mtdnand_free( mtdnand_t *mtd ) { @@ -92,11 +92,11 @@ void mtdnand_free( mtdnand_t *mtd ) } } //------------------------------------------------------------------------------ -/** @brief mtd-nand �� ������ ��ġ�� �̵��Ѵ�. - @param mtd mtdnand_t ����ü ������ - @param offset �̵�ũ�� - @param origin ������ġ - @return ������������ ��ġ, �����ϰ�� ���� +/** @brief mtd-nand 의 엑세스 위치를 이동한다. + @param mtd mtdnand_t 구조체 포인터 + @param offset 이동크기 + @param origin 기준위치 + @return 파일포인터의 위치, 에러일경우 음수 *///---------------------------------------------------------------------------- int mtdnand_seek( mtdnand_t *mtd, int offset, int origin ) { @@ -126,11 +126,11 @@ int mtdnand_seek( mtdnand_t *mtd, int offset, int origin ) } //------------------------------------------------------------------------------ -/** @brief mtd-nand �� oob ������ �д´�. - @param mtd mtdnand_t ����ü ������ - @param buf ����Ÿ�� ���� ���� - @param count ������ ũ�� - @return ����0 +/** @brief mtd-nand 의 oob 영역을 읽는다. + @param mtd mtdnand_t 구조체 포인터 + @param buf 데이타를 담을 버퍼 + @param count 버퍼의 크기 + @return 성공0 *///---------------------------------------------------------------------------- int mtdnand_read_oob( mtdnand_t *mtd, unsigned char *buf, int count ) { @@ -150,9 +150,9 @@ int mtdnand_read_oob( mtdnand_t *mtd, unsigned char *buf, int count ) return rtn; } //------------------------------------------------------------------------------ -/** @brief mtd-nand �� oob ������ �д´�. - @param mtd mtdnand_t ����ü ������ - @return -1 : badblock 0:������� +/** @brief mtd-nand 의 oob 영역을 읽는다. + @param mtd mtdnand_t 구조체 포인터 + @return -1 : badblock 0:정상블럭 *///---------------------------------------------------------------------------- int mtdnand_is_bad( mtdnand_t *mtd ) { @@ -179,9 +179,9 @@ int mtdnand_is_bad( mtdnand_t *mtd ) return 0; } //------------------------------------------------------------------------------ -/** @brief mtd-nand �� �Ѻ����� �����. - @param mtd mtdnand_t ����ü ������ - @return ����0 +/** @brief mtd-nand 의 한블럭을 지운다. + @param mtd mtdnand_t 구조체 포인터 + @return 성공0 *///---------------------------------------------------------------------------- int mtdnand_erase( mtdnand_t *mtd ) { @@ -199,12 +199,12 @@ int mtdnand_erase( mtdnand_t *mtd ) return rtn; } //------------------------------------------------------------------------------ -/** @brief mtd-nand ���� ����Ÿ�� �д´�. - @param mtd mtdnand_t ����ü ������ - @param buf ����Ÿ�� ���� ���� - @param count ������ ũ�� - @return ���� ����Ÿ�� ũ�� - @remark �������� ������ +/** @brief mtd-nand 에서 데이타를 읽는다. + @param mtd mtdnand_t 구조체 포인터 + @param buf 데이타를 담을 버퍼 + @param count 버퍼의 크기 + @return 읽은 데이타의 크기 + @remark 배드블럭을 만나면 *///---------------------------------------------------------------------------- int mtdnand_read( mtdnand_t *mtd, unsigned char *buf, int count ) { @@ -223,12 +223,12 @@ int mtdnand_read( mtdnand_t *mtd, unsigned char *buf, int count ) return rtn; } //------------------------------------------------------------------------------ -/** @brief mtd-nand ���� ����Ÿ�� �д´�. - @param mtd mtdnand_t ����ü ������ - @param buf ����Ÿ�� ���� ���� - @param count ������ ũ�� - @return ���� ����Ÿ�� ũ�� - @remark �������� ������ ������������ �ڵ����� �����Ѵ�. +/** @brief mtd-nand 에서 데이타를 읽는다. + @param mtd mtdnand_t 구조체 포인터 + @param buf 데이타를 담을 버퍼 + @param count 버퍼의 크기 + @return 읽은 데이타의 크기 + @remark 배드블럭을 만나면 다음블럭으로 자동으로 점프한다. *///---------------------------------------------------------------------------- int mtdnand_read_skip_bad( mtdnand_t *mtd, unsigned char *buf, int count ) { @@ -239,13 +239,13 @@ int mtdnand_read_skip_bad( mtdnand_t *mtd, unsigned char *buf, int count ) bad_cnt = 0; remain = count; - // ������ ������ �����Ѵ�. + // 페이지 단위로 정렬한다. mtd->pos = ALIGN_SIZE( mtd->pos, mtd->info.writesize ); mtdnand_seek( mtd, mtd->pos, SEEK_SET ); while( 0 < remain ) { - // ������ �����ΰ�? + // 블럭의 시작인가? if ( 0 == (mtd->pos % esize) ) { while( mtdnand_is_bad( mtd ) ) @@ -262,10 +262,10 @@ int mtdnand_read_skip_bad( mtdnand_t *mtd, unsigned char *buf, int count ) } } - // ���� ������ �����Ѵ�. + // 읽을 갯수를 결정한다. rdcnt = (remain > esize) ? esize : remain; - // ����Ÿ �б� + // 데이타 읽기 rtn = read( mtd->fd, buf, rdcnt ); if ( 0 > rtn ) { @@ -286,14 +286,14 @@ int mtdnand_read_skip_bad( mtdnand_t *mtd, unsigned char *buf, int count ) //------------------------------------------------------------------------------ -/** @brief mtd-nand �� ����Ÿ�� ����. - @param mtd mtdnand_t ����ü ������ - @param buf ����Ÿ ���� - @param count ������ ũ�� - @return �� ����Ÿ�� ũ�� - @remark ����Ÿ�� ũ��� writesize ũ���� ����� ��������. - erase �� �ڵ����� �̷������ erasesize ����� ��ġ�� ��� �����. - �������� ������ ������������ �ѱ��. +/** @brief mtd-nand 에 데이타를 쓴다. + @param mtd mtdnand_t 구조체 포인터 + @param buf 데이타 버퍼 + @param count 버퍼의 크기 + @return 쓴 데이타의 크기 + @remark 데이타의 크기는 writesize 크기의 배수만 쓰여진다. + erase 는 자동으로 이루어지며 erasesize 배수의 위치일 경우 지운다. + 배드블럭이 있으면 다음블럭으로 넘긴다. *///---------------------------------------------------------------------------- int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ) { @@ -306,7 +306,7 @@ int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ) esize = mtd->info.erasesize; wsize = mtd->info.writesize; - // ������ ��ġ�� �� writesize�� ����̾�� �Ѵ�. + // 쓰기의 위치는 항상 writesize의 배수이어야 한다. if ( 0 != ( mtd->pos % wsize ) ) { mtdnand_seek( mtd, (mtd->pos/wsize)*wsize, SEEK_SET ); @@ -314,7 +314,7 @@ int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ) while( 0 < remain ) { - // ������ ������ �ϴ°�? + // 블럭을 지워야 하는가? if ( 0 == (mtd->pos % esize) ) { if ( mtdnand_is_bad( mtd ) ) @@ -324,7 +324,7 @@ int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ) continue; } - // ������ ������ �ִٸ� �������̴�(?) + // 지워서 에러가 있다면 배드블럭이다(?) // mtdnand_erase( mtd ); if ( 0 != mtdnand_erase( mtd ) ) { @@ -334,17 +334,17 @@ int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ) } } - // writesize ��ŭ ����. + // writesize 만큼 쓴다. wrcnt = (remain >= wsize) ? wsize : remain; - // writesize ���� �۴ٸ� �������� 0xff �� ä���. + // writesize 보다 작다면 나머지를 0xff 로 채운다. memcpy( wbuf, getp, wrcnt ); if ( wrcnt < wsize ) { memset( wbuf+wrcnt, 0xff, wsize-wrcnt ); } - // ����� �� writesize �̾�� �Ѵ�. + // 쓰기는 항상 writesize 이어야 한다. wrcnt = write( mtd->fd, wbuf, wsize ); if ( wrcnt < 0 ) { @@ -364,8 +364,8 @@ int mtdnand_write( mtdnand_t *mtd, unsigned char *buf, int count ) //------------------------------------------------------------------------------ -/** @brief mtd-nand �� ��� �����. - @param mtd mtdnand_t ����ü ������ +/** @brief mtd-nand 를 모두 지운다. + @param mtd mtdnand_t 구조체 포인터 *///---------------------------------------------------------------------------- void mtdnand_erase_all( mtdnand_t *mtd ) { @@ -380,7 +380,7 @@ void mtdnand_erase_all( mtdnand_t *mtd ) sprintf( str, " erase all mtd=%s size=%dMB\n", mtd->node_name, mtd->info.size/(1024*1024) ); progress_msg( str ); - // mtd �������� �����Ѵ�. + // mtd 어프셋을 설정한다. mtdnand_seek( mtd, 0, SEEK_SET ); remain = mtd->info.size; diff --git a/app/app-prime-modbus/lib/common/open_map.c b/app/app-prime-modbus/lib/common/open_map.c index 7858a61..f2936aa 100644 --- a/app/app-prime-modbus/lib/common/open_map.c +++ b/app/app-prime-modbus/lib/common/open_map.c @@ -1,8 +1,8 @@ /** @file open_map.c @date 2014/01/20 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief * mmap ��ƿ��Ƽ�̴�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief * mmap 유틸리티이다. Ver 0.2.0 @@ -32,15 +32,15 @@ #define PAGE_SIZE (1024*4) #endif -/// mmap �� ���� ���� ���� ����ü +/// mmap 를 위한 개별 관리 구조체 typedef struct { - int dev; // /dev/mem �����ڵ� - unsigned long phys; // �����ּ� - unsigned long size; // ũ�� - int base_ofs; // ���̽� �ּҰ� 4K ������ ���� �ʾ����� ��� + int dev; // /dev/mem 파일핸들 + unsigned long phys; // 물리주소 + unsigned long size; // 크기 + int base_ofs; // 베이스 주소가 4K 정렬이 되지 않았을때 사용 - void *virt; // �Ҵ���� �������� + void *virt; // 할당받은 메모리포인터 } mmap_alloc_t; @@ -50,8 +50,8 @@ static mmap_alloc_t *list_ptr[MAP_LIST_COUNT]; static int map_list_init = 0; //------------------------------------------------------------------------------ -/** @brief mmap_alloc_t �Ҵ��Լ� - @return mmap_alloc ������ +/** @brief mmap_alloc_t 할당함수 + @return mmap_alloc 포인터 *///---------------------------------------------------------------------------- static mmap_alloc_t *get_map_struct( void ) { @@ -78,7 +78,7 @@ static mmap_alloc_t *get_map_struct( void ) } //------------------------------------------------------------------------------ /** @brief - @return mmap_alloc ������ + @return mmap_alloc 포인터 *///---------------------------------------------------------------------------- static mmap_alloc_t *put_map_struct( void *virt ) { @@ -103,11 +103,11 @@ static mmap_alloc_t *put_map_struct( void *virt ) return NULL; } //------------------------------------------------------------------------------ -/** @brief mmap �����Լ� - @param ma mmap_alloc_t ����ü ������ - @param phys_base �����ּ� - @param size ũ�� - @return ����Ҽ� �ִ� �����ּ� +/** @brief mmap 생성함수 + @param ma mmap_alloc_t 구조체 포인터 + @param phys_base 물리주소 + @param size 크기 + @return 사용할수 있는 가상주소 *///---------------------------------------------------------------------------- void *open_mmap_alloc( unsigned long phys_base, unsigned long size ) { @@ -117,11 +117,11 @@ void *open_mmap_alloc( unsigned long phys_base, unsigned long size ) int base_ofs; void *mmap_mem; - // 4K ���� �ּҷ� �����Ѵ�. + // 4K 정렬 주소로 변경한다. base_ofs = phys_base & (PAGE_SIZE-1); phys_base &= ~(PAGE_SIZE-1); - // 4K ������ �� �Ҵ�´�. + // 4K 단위의 메모리를 할당받는다. size = PAGE_SIZE * ( (size + base_ofs + (PAGE_SIZE-1))/(PAGE_SIZE) ); dev_mem = open( "/dev/mem", O_RDWR|O_SYNC ); @@ -131,12 +131,12 @@ void *open_mmap_alloc( unsigned long phys_base, unsigned long size ) return NULL; } - // mmap �� �����Ѵ�. - mmap_mem = mmap( 0, // Ŀ�ο��� �˾Ƽ� �Ҵ��û - size, // �Ҵ� ũ�� - PROT_READ|PROT_WRITE, MAP_SHARED, // �Ҵ� �Ӽ� - dev_mem, // ���� �ڵ� - phys_base ); // ���� ����� �����ּ� + // mmap 로 맵핑한다. + mmap_mem = mmap( 0, // 커널에서 알아서 할당요청 + size, // 할당 크기 + PROT_READ|PROT_WRITE, MAP_SHARED, // 할당 속성 + dev_mem, // 파일 핸들 + phys_base ); // 매핑 대상의 물리주소 if ( !mmap_mem ) @@ -145,7 +145,7 @@ void *open_mmap_alloc( unsigned long phys_base, unsigned long size ) return NULL; } - // ��������ü�� ä���. + // 관리구조체를 채운다. ma = get_map_struct(); if ( ma ) { @@ -166,8 +166,8 @@ void *open_mmap_alloc( unsigned long phys_base, unsigned long size ) } //------------------------------------------------------------------------------ -/** @brief mmap ������ �����Ѵ�. - @param ma mmap_alloc_t ����ü ������ +/** @brief mmap 포인터를 해제한다. + @param ma mmap_alloc_t 구조체 포인터 *///---------------------------------------------------------------------------- void open_mmap_free( void *io_virt ) { @@ -183,7 +183,7 @@ void open_mmap_free( void *io_virt ) } -/// ���� ------------------------------------------------------------------------ +/// 샘플 ------------------------------------------------------------------------ #if 0 static volatile unsigned int *io_port; @@ -200,14 +200,14 @@ int main( int argc, char **argv ) phys = strtoul( argv[1], NULL, 0 ); - // �Ҵ� -------------- + // 할당 -------------- io_port = (unsigned int *)open_mmap_alloc( phys, 0x100 ); - // �б� + // 읽기 data = *io_port; printf( "read addr=%08x data=%08x\n", phys, data ); - // ���� -------------- + // 해제 -------------- open_mmap_free( io_port ); return 0; diff --git a/app/app-prime-modbus/lib/common/sharemem.c b/app/app-prime-modbus/lib/common/sharemem.c index 9e45069..71bb0a7 100644 --- a/app/app-prime-modbus/lib/common/sharemem.c +++ b/app/app-prime-modbus/lib/common/sharemem.c @@ -1,9 +1,9 @@ /** @file sharemem.c @date 2006 - @author ����â frog@falinux.com FALinux.Co.,Ltd. - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief ������ �����ϰ� �����Ѵ�. + @author 유영창 frog@falinux.com FALinux.Co.,Ltd. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 공유메모리를 생성하고 해제한다. @modify @todo @@ -14,11 +14,11 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -46,19 +46,19 @@ -/// ������ ������ ���� ����ü +/// 공유메모리 관리를 위한 구조체 typedef struct { - int key; // ����ڰ� �ٶ� �ĺ��� - int id; // ������ �ڵ� - char data[0]; // ����ڰ� �������ϴ� �� + int key; // 사용자가 바라보는 식별자 + int id; // 공유메모리 핸들 + char data[0]; // 사용자가 엑세스하는 메모리 } share_t; //------------------------------------------------------------------------------ -/** @brief ������ �����Ѵ�. - @param key ������ �����ϴ� ����ũ�� +/** @brief 공유메모리를 삭제한다. + @param key 공유메모리를 지정하는 유니크값 @remark *///---------------------------------------------------------------------------- void share_delete( int key ) @@ -68,21 +68,21 @@ void share_delete( int key ) int id = -1; int size; - // shm ���������� ����. + // shm 정보파일을 연다. fp = fopen( "/proc/sysvipc/shm", "r" ); if ( NULL == fp) return; - if ( NULL != fgets( line, sizeof(line), fp )){ // ù ��° ������ �����ϱ� ���� fgets() ���� + if ( NULL != fgets( line, sizeof(line), fp )){ // 첫 번째 라인은 무시하기 위해 fgets() 실행 while(1){ int tmp_key, tmp_id, tmp_perm, tmp_size; if ( fgets( line, sizeof(line), fp ) == NULL ) break; - // Ű���� ũ�⸦ �о�´�. + // 키값과 크기를 읽어온다. if ( 4 == sscanf( line, "%d %d %d %d", &tmp_key, &tmp_id, &tmp_perm, &tmp_size) ){ // printf( "SHM KEY = %d ID = %d SIZE=%d\n", tmp_key, tmp_id, tmp_size ); if ( tmp_key == key){ - id = tmp_id; // �ش��ϴ� id �� ã�Ҵ� + id = tmp_id; // 해당하는 id 를 찾았다 size = tmp_size; break; } @@ -90,20 +90,20 @@ void share_delete( int key ) } } - // ������ �ݴ´�. + // 파일을 닫는다. fclose( fp ); - // id �� ã�Ҵٸ� ������ �����Ѵ�. + // id 를 찾았다면 공유메모리를 삭제한다. if( 0 <= id){ id = shmget( key, size, 0666 | IPC_CREAT); shmctl( id, IPC_RMID, NULL ); } } //------------------------------------------------------------------------------ -/** @brief ���� �� �����Ѵ�. - @param key ������ �����ϴ� ����ũ�� - @param size ������ ������ ũ�� - @return �Ҵ���� ������ +/** @brief 공유 메모리를 생성한다. + @param key 공유메모리를 지정하는 유니크값 + @param size 생성할 공유메모리 크기 + @return 할당받은 공유메모리 @remark *///---------------------------------------------------------------------------- void *share_create( int key, unsigned int size ) @@ -114,28 +114,28 @@ void *share_create( int key, unsigned int size ) // printf( "share_create key = %d\n" , key ); - // ���� �� �����Ͽ� �ڵ��� ��ų� �̹� ������ �ش� �ڵ��� ���� �´�. + // 공유 메모리를 생성하여 핸들을 얻거나 이미 있으면 해당 핸들을 가져 온다. id = shmget( key, sizeof(share_t) + size, 0666 | IPC_CREAT ); // printf("shmget id = %d\n", id ) if( id < 0 ) { - // ��� ������ �ٸ� ũ��� �����Ǿ� �ִٸ� - // �������� ��� ���� ó�� �ϰ� �� ������ ��û�Ѵ�. + // 만약에 기존에 다른 크기로 생성되어 있다면 + // 이전것을 모두 삭제 처리 하고 재 생성을 요청한다. // printf("Exit Share Memory %08X\n", key ); share_delete( key ); - // �ٽ� �Ҵ�´�. + // 다시 할당받는다. id = shmget( key, size + sizeof(share_t), 0666 | IPC_CREAT | IPC_EXCL ); if( id < 0 ) return NULL; } - // �������� ���� �ּҸ� ���´�. + // 공유메모리의 선두 주소를 얻어온다. ptr = shmat( id, NULL, 0 ); if( ptr == NULL ) return NULL; - // �������� ������ �����Ѵ�. + // 공유메모리의 정보를 저장한다. share = (share_t *) ptr; share->key = key; share->id = id; @@ -143,8 +143,8 @@ void *share_create( int key, unsigned int size ) return share->data; } //------------------------------------------------------------------------------ -/** @brief ���� �� �����Ѵ�. - @param data share_create() �Լ��� ���� �� ������ +/** @brief 공유 메모리를 해제한다. + @param data share_create() 함수로 받은 메모리 포인터 @remark *///---------------------------------------------------------------------------- void share_free( void *data ) @@ -155,10 +155,10 @@ void share_free( void *data ) share = (share_t *)( data - sizeof(share_t) ); id = share->id; - // ���� �� ��巹�� �������� �и��Ѵ�. + // 공유 메모리를 어드레스 공간에서 분리한다. shmdt( share ); - // ���� �� ����ϴ� ���μ����� ���ٸ� �����ϵ��� �����Ѵ�. + // 공유 메모리를 사용하는 프로세스가 없다면 삭제하도록 설정한다. shmctl( id, IPC_RMID, NULL ); } @@ -166,8 +166,8 @@ void share_free( void *data ) /* //------------------------------------------------------------------------------- -// ���� : -// ���� : +// 설명 : +// 주의 : //------------------------------------------------------------------------------- int get_usrmsg( char *buf, int size ) { @@ -184,8 +184,8 @@ int get_usrmsg( char *buf, int size ) //------------------------------------------------------------------------------- -// ���� : help -// ���� : +// 설명 : help +// 주의 : //------------------------------------------------------------------------------- void help( void ) { @@ -197,7 +197,7 @@ void help( void ) ); } -// ������ ������ �ޱ����� ����ü +// 메세지를 보내고 받기위한 구조체 typedef struct { unsigned int seq; @@ -206,8 +206,8 @@ typedef struct } msg_t; //------------------------------------------------------------------------------ -// ���� : main -// ���� : +// 설명 : main +// 주의 : //------------------------------------------------------------------------------ int main( int argc, char **argv ) { @@ -226,7 +226,7 @@ int main( int argc, char **argv ) key = strtoul( argv[2], NULL, 0 ); size = strtoul( argv[3], NULL, 0 ); - // ������ �����Ѵ�. + // 공유메모리를 생성한다. pmsg = (msg_t *)share_create( key, sizeof(msg_t) + size ); if ( NULL == pmsg ) @@ -235,7 +235,7 @@ int main( int argc, char **argv ) return -1; } - // ����Ÿ�� ������ ����. + // 데이타를 공유메모리에 쓴다. if ( dir == 'w' ) { pmsg->seq = 0; @@ -246,7 +246,7 @@ int main( int argc, char **argv ) pmsg->seq ++; } - // ����Ÿ�� �������� �д´�. + // 데이타를 공유메모리에서 읽는다. else { unsigned int seq = 0; @@ -265,7 +265,7 @@ int main( int argc, char **argv ) } } - // ������ �����Ѵ�. + // 공유메모리를 해제한다. share_free( pmsg ); printf( " shm test end\n" ); diff --git a/app/app-prime-modbus/lib/common/strparsing.c b/app/app-prime-modbus/lib/common/strparsing.c index 814e00c..ec9224d 100644 --- a/app/app-prime-modbus/lib/common/strparsing.c +++ b/app/app-prime-modbus/lib/common/strparsing.c @@ -1,20 +1,20 @@ /** @file strparsing.c @date 2009-06-01 - @author ��漮 jwjwmx@gmail.com + @author 장길석 jwjwmx@gmail.com @brief Ver 0.0.4 - ���ڿ��� �м��Ͽ� tstrlist�� �����Ѵ�. + 문자열을 분석하여 tstrlist로 생성한다. @todo @bug @remark @warning - - ���۱� �������̸�����(��) - - �ܺΰ��� ���� - @section ModifyInfo ���� ���� + - 저작권 에프에이리눅스(주) + - 외부공개 금지 + @section ModifyInfo 수정 정보 - 2009-07-06 - -# Doxygen�� ���� �ּ� ���� + -# Doxygen을 위한 주석 수정 - 2009-06-01 - -# �⺻ ����� �߰� + -# 기본 기능을 추가 */ //------------------------------------------------------------------------------ #include <stdio.h> @@ -29,18 +29,18 @@ #define MAX_BUFFSIZE 1024 #define MAX_IDENTIFY 128 -int strp_error_code; // �����ڵ� +int strp_error_code; // 에러코드 static char buff_parse[1024]; static char buff_identify[1024]; static char *read_string( tstrlist *strplist, char *str_identify) -//����: �������� ���ڿ� ������ ���Ѵ�. -//�μ�: tstrlist *strplist : tstrlist ��ü ������ -// char *str_identify : ������ ���ڿ� -//��ȯ: ���ǰ� �������� ���ڿ� ������ -//����: ���ǰ� �����ڰ� ���ٸ� NULL�� ��ȯ -// ��ȯ�� ���ڿ� �����ͷ� �� �Ҹ��� �ؼ��� �� �ȴ�. +//설명: 구별자의 문자열 데이터를 구한다. +//인수: tstrlist *strplist : tstrlist 객체 포인터 +// char *str_identify : 구별자 문자열 +//반환: 섹션과 구별자의 문자열 데이터 +//주의: 섹션과 구별자가 없다면 NULL을 반환 +// 반환된 문자열 포인터로 메모리 소멸을 해서는 안 된다. { int index; @@ -51,37 +51,37 @@ static char *read_string( tstrlist *strplist, char *str_identify) } static char *get_inner( char *str, char branch) -// ����: " �Ǵ� ' ���� ���� ���ڿ� ���� ���Ѵ�. -// ����: �ο� ��ȣ �ȿ��� ���� ���� �̻��� ��� ���ڸ� �����Ѵ�. -// ��ȯ: �μ��� ���� ���ڿ� �����Ϳ��� ���� ó���� ���� ��ġ +// 설명: " 또는 ' 으로 묶인 문자열 값을 구한다. +// 참고: 인용 부호 안에는 공백 문자 이상의 모든 문자를 포함한다. +// 반환: 인수로 받은 문자열 포인터에서 다음 처리할 문자 위치 { - char *pbuff; // ���� ����� ���� ������ - char ch_data; // �˻� ��� ���� + char *pbuff; // 버퍼 사용을 위한 포인터 + char ch_data; // 검색 대상 문자 pbuff = buff_parse; while( '\0' != *str) { ch_data = *str++; - if ( branch == ch_data) // ������ ���ڸ� �����ٸ� + if ( branch == ch_data) // 구별자 문자를 만났다면 { break; // break } else { - *pbuff++ = ch_data; // ���ڿ� ���� + *pbuff++ = ch_data; // 문자열 복사 } } - *pbuff = '\0'; // ������ ���� �Ϸ� + *pbuff = '\0'; // 데이터 구성 완료 return str; } static char *get_string( char *str) -// ����: ���ڿ� ���̳� '=' ���ڸ� ������ ���� ������� ���ڿ��� ���Ѵ�. -// ��ȯ: �μ��� ���� ���ڿ� �����Ϳ��� ���� ó���� ���� ��ġ +// 설명: 문자열 끝이나 '=' 문자를 만나기 까지 공백없는 문자열을 구한다. +// 반환: 인수로 받은 문자열 포인터에서 다음 처리할 문자 위치 { - char *pbuff; // ���� ����� ���� ������ - char ch_data; // �˻� ��� ���� + char *pbuff; // 버퍼 사용을 위한 포인터 + char ch_data; // 검색 대상 문자 pbuff = buff_parse; @@ -97,15 +97,15 @@ static char *get_string( char *str) { *pbuff++ = ch_data; } - str++; // �� �Լ� ȣ�� �Ŀ� '='���ڰ� �ִ����� Ȯ���ؾ� �ϹǷ�, ���⼭ ������ ���� + str++; // 이 함수 호출 후에 '='문자가 있는지를 확인해야 하므로, 여기서 포인터 증가 } *pbuff = '\0'; return str; } static char *get_parse( char *str) -// ����: �μ��� ���� ���ڿ��� �ο��ȣ�� �ο��ȣ�� ���� ���ڿ��� ���� �Ľ��Ѵ�. -// ��ȯ: �μ��� ���� ���ڿ� �����Ϳ��� ���� ó���� ���� ��ġ +// 설명: 인수로 받은 문자열을 인용부호와 인용부호가 없는 문자열에 따라 파싱한다. +// 반환: 인수로 받은 문자열 포인터에서 다음 처리할 문자 위치 { buff_parse[0] = '\0'; @@ -113,22 +113,22 @@ static char *get_parse( char *str) { switch( *str++) { - case '\'' : // �ο��ȣ ' ���� ������ ���ڿ��� ���Ѵ�. + case '\'' : // 인용부호 ' 문자 사이의 문자열을 구한다. { str = get_inner( str, '\''); return str; } - case '"' : // �ο��ȣ " ���� ������ ���ڿ��� ���Ѵ�. + case '"' : // 인용부호 " 문자 사이의 문자열을 구한다. { str = get_inner( str, '\"'); return str; } - case ' ' : // �����̳� - case '=' : // �и��� �̸� ���� ���ڸ� ��� �˻� + case ' ' : // 공백이나 + case '=' : // 분리자 이면 다음 문자를 계속 검색 break; default : { - str = get_string( str-1); // �����̳� �и��ڸ� ���� �������� ���ڿ��� ���Ѵ�. + str = get_string( str-1); // 공백이나 분리자를 만날 때까지의 문자열을 구한다. return str; } } @@ -137,25 +137,25 @@ static char *get_parse( char *str) } static int is_identify( char *str) -// ����: ��� ���� ���ڿ��� ������������ Ȯ���Ѵ�. -// ����: ���ڿ� �ڿ� �����̳� �и��ڸ� �ִٸ� �����ڷ� ���� -// ��ȯ: ������ ���� +// 설명: 방금 구한 문자열이 구별자인지를 확인한다. +// 참고: 문자열 뒤에 공백이나 분리자만 있다면 구별자로 인정 +// 반환: 구별자 여부 { while( '\0' != *str) { switch( *str++) { - case ' ' : break; // ���� �����̸� ���� ���ڸ� ��� �˻� - case '=' : return 1; // '=' ���ڰ� ������ OK - default : return 0; // �����̳� '=' ���ڰ� �ƴϸ� FALSE + case ' ' : break; // 공백 문자이면 다음 문자를 계속 검색 + case '=' : return 1; // '=' 문자가 있으면 OK + default : return 0; // 공백이나 '=' 문자가 아니면 FALSE } } return 0; } static void parse_string( tstrlist *lst_parse, char *str) -// ����: �����ڿ� �����ڿ� ���� ������ ���Ѵ�. -// ��ȯ: ������ ���� +// 설명: 구별자와 구별자에 대한 데이터를 구한다. +// 반환: 구별자 개수 { char *pdata; @@ -170,7 +170,7 @@ static void parse_string( tstrlist *lst_parse, char *str) { continue; } - memcpy( buff_identify, buff_parse, strlen( buff_parse)+1); // NULL���� �����ϱ� ���� +1 + memcpy( buff_identify, buff_parse, strlen( buff_parse)+1); // NULL까지 포함하기 위해 +1 str = get_parse( str); pdata = ( char *)malloc( strlen( buff_parse)+1); @@ -181,7 +181,7 @@ static void parse_string( tstrlist *lst_parse, char *str) } else { - memcpy( pdata, buff_parse, strlen( buff_parse)+1); // NULL���� �����ϱ� ���� +1 + memcpy( pdata, buff_parse, strlen( buff_parse)+1); // NULL까지 포함하기 위해 +1 tstrlist_add_object( lst_parse, buff_identify, pdata); } } @@ -189,115 +189,115 @@ static void parse_string( tstrlist *lst_parse, char *str) int strp_read_bool( tstrlist *strplist, char *str_identify, int default_value) /** - @brief �����ڰ� �����ϴ� Boolean ������ ���Ѵ�. - @param strplist : �Ľ� �ڷḦ ������ �ִ� tstlist - @param str_identify : ������ ���ڿ� - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� - @warning �������� ���ڿ��� 0 �̸� FALSE�� ��ȯ�ϸ�\n - �ܴ̿� ������ TRUE�� ��ȯ�Ѵ�.\n - ��, �����ڰ� ������ �ִ� ���ڿ� ������\n - '0' ���� �ƴ����� ���θ� ��ȯ�Ѵ�. + @brief 구별자가 지정하는 Boolean 데이터를 구한다. + @param strplist : 파싱 자료를 가지고 있는 tstlist + @param str_identify : 구별자 문자열 + @param default_value : 값이 없다면 대신 반환될 기본값 + @warning 구별자의 문자열이 0 이면 FALSE로 반환하며\n + 이외는 무조건 TRUE로 반환한다.\n + 즉, 구별자가 가지고 있는 문자열 정보가\n + '0' 인지 아닌지의 여부를 반환한다. */ { char *data; int int_data; - data = read_string( strplist, str_identify); // ���� �����ڷ� ������ ���Ѵ�. - if ( NULL == data) return default_value; // ã�� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // ������ ��ȯ�� ���� ���ٸ� �⺻���� ��ȯ - else return 0 != int_data; // ���� ���� 0�̸� FALSE�� ��ȯ�Ѵ�. + data = read_string( strplist, str_identify); // 먼저 구별자로 데이터를 구한다. + if ( NULL == data) return default_value; // 찾는 데이터가 없다면 기본값을 반환한다. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. + else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // 정수로 변환된 값이 없다면 기본값을 반환 + else return 0 != int_data; // 정수 값이 0이면 FALSE로 반환한다. } double strp_read_real( tstrlist *strplist, char *str_identify, double default_value) /** - @brief �����ڰ� �����ϴ� ���� ������ ���Ѵ�. - @param strplist : �Ľ� �ڷḦ ������ �ִ� tstlist - @param str_identify : ������ ���ڿ� - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� + @brief 구별자가 지정하는 정수 데이터를 구한다. + @param strplist : 파싱 자료를 가지고 있는 tstlist + @param str_identify : 구별자 문자열 + @param default_value : 값이 없다면 대신 반환될 기본값 @return - - �����ڿ� �ش��ϴ� �Ǽ� �� - - ������ �����̳� �����ڿ� ���� �Ǽ� ���� ���ٸ� �⺻���� ��ȯ + - 구별자에 해당하는 실수 값 + - 저정한 섹션이나 구별자에 대한 실수 값이 없다면 기본값을 반환 */ { char *data; double float_data; - data = read_string( strplist, str_identify); // ���� �����ڷ� ������ ���Ѵ�. - if ( NULL == data) return default_value; // ã�� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == sscanf( data, "%lf", &float_data)) return default_value; // �Ǽ��� ��ȯ�� ���� ���ٸ� �⺻���� ��ȯ - else return float_data; // �Ǽ� ���� ��ȯ�Ѵ�. + data = read_string( strplist, str_identify); // 먼저 구별자로 데이터를 구한다. + if ( NULL == data) return default_value; // 찾는 데이터가 없다면 기본값을 반환한다. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. + else if ( 0 == sscanf( data, "%lf", &float_data)) return default_value; // 실수로 변환된 값이 없다면 기본값을 반환 + else return float_data; // 실수 값을 반환한다. } int strp_read_integer( tstrlist *strplist, char *str_identify, int default_value) /** - @brief �����ڰ� �����ϴ� ���� ������ ���Ѵ�. - @param strplist : �Ľ� �ڷḦ ������ �ִ� tstlist - @param str_identify : ������ ���ڿ� - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� + @brief 구별자가 지정하는 정수 데이터를 구한다. + @param strplist : 파싱 자료를 가지고 있는 tstlist + @param str_identify : 구별자 문자열 + @param default_value : 값이 없다면 대신 반환될 기본값 @return - - �����ڿ� �ش��ϴ� ���� �� - - ������ �����̳� �����ڿ� ���� ���� ���� ���ٸ� �⺻���� ��ȯ + - 구별자에 해당하는 정수 값 + - 저정한 섹션이나 구별자에 대한 정수 값이 없다면 기본값을 반환 */ { char *data; int int_data; - data = read_string( strplist, str_identify); // ���� �����ڷ� ������ ���Ѵ�. - if ( NULL == data) return default_value; // ã���� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // ������ ��ȯ�� ���� ���ٸ� �⺻���� ��ȯ - else return int_data; // �������� ��ȯ�Ѵ�. + data = read_string( strplist, str_identify); // 먼저 구별자로 데이터를 구한다. + if ( NULL == data) return default_value; // 찾아진 데이터가 없다면 기본값을 반환한다. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. + else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // 정수로 변환된 값이 없다면 기본값을 반환 + else return int_data; // 정수값을 반환한다. } char *strp_read_string( tstrlist *strplist, char *str_identify, char *default_value) /** - @brief ���ǰ� �����ڰ� �����ϴ� ���ڿ� ������ ���Ѵ�. - @param strplist : �Ľ� �ڷḦ ������ �ִ� tstlist - @param str_identify : ������ ���ڿ� - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� + @brief 섹션과 구별자가 지정하는 문자열 데이터를 구한다. + @param strplist : 파싱 자료를 가지고 있는 tstlist + @param str_identify : 구별자 문자열 + @param default_value : 값이 없다면 대신 반환될 기본값 @return\n - �������� ���ڿ� ����\n - ������ �����̳� �����ڿ� ���� ���ڿ��� ���ٸ� �⺻���� ��ȯ - @warning ���� ��ȯ ���� ���ڿ��� �Ҹ� ���Ѽ��� �� �ȴ�!! + 구별자의 문자열 정보\n + 저정한 섹션이나 구별자에 대한 문자열이 없다면 기본값을 반환 + @warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!! */ { char *data; - data = read_string( strplist, str_identify); // ���� �����ڷ� ������ ���Ѵ�. - if ( NULL == data) return default_value; // ã���� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. + data = read_string( strplist, str_identify); // 먼저 구별자로 데이터를 구한다. + if ( NULL == data) return default_value; // 찾아진 데이터가 없다면 기본값을 반환한다. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. else return data; } char *strp_error_string( void) /** - @brief strp_error_code�� ���� ���� ���� ���ڿ��� ��ȯ - @return ���� �ڵ忡 ���� ���� ���� ���ڿ� ������ - @warning ���� ��ȯ ���� ���ڿ��� �Ҹ� ���Ѽ��� �� �ȴ�!! + @brief strp_error_code에 대한 에러 설명 문자열을 반환 + @return 에러 코드에 대한 에러 설명 문자열 포인터 + @warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!! */ { - char *error_string[] ={ "���� ����", // INIERR_NONE - "�� ����", // INIERR_OUT_OF_MEMORY - "���� �̸� ���� ����", // INIERR_FILENAME_FAIL - "�ڷ� ����", // INIERR_NO_DATA - "IniFile ����", // INIERR_NO_FILE - "IniFile�� ���� �� ����", // INIERR_ACCESS_FAIL - "���� ����Ʈ ���� ����", // INIERR_CREATE_SECTION_FAIL - "������ ���� ����", // INIERR_CREATE_IDENTIFY_FAIL - "�μ��� ��ü�� NULL" // INIERR_NULL_POINTER + char *error_string[] ={ "에러 없음", // INIERR_NONE + "메모리 부족", // INIERR_OUT_OF_MEMORY + "파일 이름 지정 오류", // INIERR_FILENAME_FAIL + "자료 없음", // INIERR_NO_DATA + "IniFile 없음", // INIERR_NO_FILE + "IniFile을 읽을 수 없음", // INIERR_ACCESS_FAIL + "섹션 리스트 생성 실패", // INIERR_CREATE_SECTION_FAIL + "구별자 생성 실패", // INIERR_CREATE_IDENTIFY_FAIL + "인수의 객체가 NULL" // INIERR_NULL_POINTER }; return( error_string[strp_error_code]); } int strp_print_error( char *remark) /** - @brief ini_error_code�� ���� ���� ���� ���ڿ��� ȭ�鿡 ��� - @param remark : ���� ���� ���ڿ� ���� ÷���Ͽ� ����� ���ڿ� + @brief ini_error_code에 대한 에러 설명 문자열을 화면에 출력 + @param remark : 에러 설명 문자열 끝에 첨부하여 출력할 문자열 @return\n - ���� �ڵ� + 에러 코드 */ { printf( "[str parsing error:%d]%s %s\n", strp_error_code, strp_error_string(), remark); @@ -306,8 +306,8 @@ int strp_print_error( char *remark) void strp_free( tstrlist *strplist) /** - @brief strparsing ��ü�� �Ҹ��Ѵ�. - @param strplist : strparsing ��ü + @brief strparsing 객체를 소멸한다. + @param strplist : strparsing 객체 */ { int ndx; @@ -315,28 +315,28 @@ void strp_free( tstrlist *strplist) for ( ndx = 0; ndx < tstrlist_getcount( strplist); ndx++) { - pdata = ( char *)tstrlist_get_object( strplist, ndx); // ��ü�� ����� ���ڿ� ���� + pdata = ( char *)tstrlist_get_object( strplist, ndx); // 객체로 등록한 문자열 제거 free( pdata); } - tstrlist_free( strplist); // ����Ʈ �Ҹ� + tstrlist_free( strplist); // 리스트 소멸 } tstrlist *strp_parsing( char *data) /** - @brief data ���ڿ��� �м��ؼ� �����ڿ� �����ͷ� ������ ������ ����� �����.\n - @param data : ���ڿ� ������ + @brief data 문자열을 분석해서 구별자와 데이터로 구성된 아이템 목록을 만든다.\n + @param data : 문자열 데이터 @return\n - �����ڿ� �����ͷ� ������ �������� tstrlist *\n - �б �����ߴٸ� NULL�� ��ȯ + 구별자와 데이터로 구성된 아이템의 tstrlist *\n + 읽기에 실패했다면 NULL을 반환 */ { tstrlist *lst_parse; - strp_error_code = STRPERR_NONE; // �����ڵ�: ���� ���� + strp_error_code = STRPERR_NONE; // 에러코드: 에러 없음 - lst_parse = tstrlist_create(); // tstrlist ��ü ���� - if ( NULL == lst_parse) // tstrlist ��ü�� �������� ���ߴٸ� + lst_parse = tstrlist_create(); // tstrlist 객체 생성 + if ( NULL == lst_parse) // tstrlist 객체를 생성하지 못했다면 { - strp_error_code = STRPERR_CREATE_LIST_FAIL; // �����ڵ�: ��Ʈ ���� ����Ʈ ���� + strp_error_code = STRPERR_CREATE_LIST_FAIL; // 에러코드: 루트 섹션 리스트 생성 return NULL; } parse_string( lst_parse, data); diff --git a/app/app-prime-modbus/lib/common/tgpio.c b/app/app-prime-modbus/lib/common/tgpio.c index 0ae9f0d..cf1dc52 100644 --- a/app/app-prime-modbus/lib/common/tgpio.c +++ b/app/app-prime-modbus/lib/common/tgpio.c @@ -1,23 +1,23 @@ /** @file tgpio.c @date 2010/1/4 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief gpio �� ����̹����� mmap�� �̿��Ͽ� �����Ѵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief gpio 를 드라이버없이 mmap를 이용하여 제어한다. - Ver 0.6.0 am3874 ����, GP0��Ʈ �Ϸ� + Ver 0.6.0 am3874 포함, GP0테스트 완료 - Ver 0.5.0 s5pv210 ����, ��Ʈ �Ϸ� - pull-up, pull-dn �������� + Ver 0.5.0 s5pv210 포함, 테스트 완료 + pull-up, pull-dn 설정변경 - Ver 0.4.0 tmmap.c �� ������� �ʰ� famap.c �� ����ϴ°����� ���� - Ver 0.3.0 ixp420 ��Ʈ �Ϸ� - Ver 0.2.1 s3c6410, pxa270 ��Ʈ �Ϸ� - Ver 0.2.0 pxa270 �Ϸ� - pxa255 �Ϸ�(��Ʈ �ȵ�) - Ver 0.1.0 s3c6410 �Ϸ� - s3c2440 �Ϸ�(��Ʈ �ȵ�) + Ver 0.4.0 tmmap.c 를 사용하지 않고 famap.c 를 사용하는것으로 수정 + Ver 0.3.0 ixp420 테스트 완료 + Ver 0.2.1 s3c6410, pxa270 테스트 완료 + Ver 0.2.0 pxa270 완료 + pxa255 완료(테스트 안됨) + Ver 0.1.0 s3c6410 완료 + s3c2440 완료(테스트 안됨) @modify - @todo ������ ���� MCU �鵵 �����Ͽ��� �Ѵ�. + @todo 다음과 같은 MCU 들도 지원하여야 한다. .. @bug @remark @@ -42,7 +42,7 @@ static const char desc[] = "tgpio ver 0.7.0"; -/// am3874 gpio ���� +/// am3874 gpio 관리 static am3x_gpio_register_t am3874_gpio_register[MCU_AM3874_GPIO_GRP_CNT] = { [0] = { .phys = MCU_AM3874_GPIO0_PHYS, // 0 5 @@ -67,7 +67,7 @@ static am3x_gpio_register_t am3874_gpio_register[MCU_AM3874_GPIO_GRP_CNT] = { }, }; -/// s5pv210 gpio �� �ε��� +/// s5pv210 gpio 그룹 인덱스 static int s5pv210_reg_idx_table[] = { // A B C D E F G H I J 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // GPA0 ... GPJ0 @@ -77,7 +77,7 @@ static int s5pv210_reg_idx_table[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 26 // GPA4 ... GPJ4 }; -/// s5pv210 gpio �������� �����°� ���� +/// s5pv210 gpio 레지스터 어프셋과 정보 static s3c_gpio_register_t s5pv210_gpio_register[27] = { [0] = {/* GPA0 */ .gpcnt = 8, .con_mask_bitcnt = 4, .ofs_con = 0x0, .ofs_dat = 0x4, .ofs_pup = 0x8, }, @@ -109,7 +109,7 @@ static s3c_gpio_register_t s5pv210_gpio_register[27] = { [26] = {/* GPJ4 */ .gpcnt = 5, .con_mask_bitcnt = 4, .ofs_con = 0x2c0, .ofs_dat = 0x2c4, .ofs_pup = 0x2c8, }, }; -/// s3c6410 �������� �����°� ���� +/// s3c6410 레지스터 어프셋과 정보 static s3c_gpio_register_t s3c6410_gpio_register['q'-'a'+1] = { ['a'-'a'] = { @@ -234,7 +234,7 @@ static s3c_gpio_register_t s3c6410_gpio_register['q'-'a'+1] = { } }; -/// s3c2440 �������� �����°� ���� +/// s3c2440 레지스터 어프셋과 정보 static s3c_gpio_register_t s3c2440_gpio_register['j'-'a'+1] = { ['a'-'a'] = { @@ -309,7 +309,7 @@ static s3c_gpio_register_t s3c2440_gpio_register['j'-'a'+1] = { } }; -/// pxa ���� ���� +/// pxa 관련 정보 static pxa_gpio_info_t pxa270_info = { .gpcnt = 128, }; @@ -319,11 +319,11 @@ static pxa_gpio_info_t pxa255_info = { }; static mcu_gpio_fops_t mcu_gpio; -//static mmap_alloc_t map_gpio; /// mmap ���� ����ü (0.7.0 ���� ����) +//static mmap_alloc_t map_gpio; /// mmap 관리 구조체 (0.7.0 부터 삭제) //------------------------------------------------------------------------------ -/** @brief gpio fops ������ ��� - @return gpio fops ������ +/** @brief gpio fops 포인터 얻기 + @return gpio fops 포인터 *///---------------------------------------------------------------------------- mcu_gpio_fops_t *get_gpio_fops( void ) { @@ -331,17 +331,17 @@ mcu_gpio_fops_t *get_gpio_fops( void ) } //------------------------------------------------------------------------------ -/** @brief gpio ���õ� �������� mmap �� ���� �Ҵٹ´�. - @param phys_base �����ּ� - @param phys_size �����ּ� ũ�� - @return �Ҵ���� ���� �� �ּ� +/** @brief gpio 관련된 레지스터를 mmap 을 통해 할다받는다. + @param phys_base 물리주소 + @param phys_size 물리주소 크기 + @return 할당받은 가상 메모리 주소 *///---------------------------------------------------------------------------- static unsigned long malloc_gpio( unsigned long phys_base, unsigned long phys_size ) { return (unsigned long)fa_mmap_alloc( &mcu_gpio.map_info, phys_base, phys_size ); } //------------------------------------------------------------------------------ -/** @brief �⺻���� gpio close() �Լ� +/** @brief 기본적인 gpio close() 함수 *///---------------------------------------------------------------------------- static void def_gpio_close( void ) @@ -354,9 +354,9 @@ static void def_gpio_close( void ) } //------------------------------------------------------------------------------ -/** @brief am3x gpio ��ȣ�� ��Ȯ���� Ȯ���Ѵ�. +/** @brief am3x gpio 번호가 정확한지 확인한다. @param grp 0~3 - @param gp_nr gp_nr ��ȣ + @param gp_nr gp_nr 번호 *///---------------------------------------------------------------------------- static int am3x_valid_gpio( char grp, int gp_nr ) { @@ -376,9 +376,9 @@ static int am3x_valid_gpio( char grp, int gp_nr ) return 0; } //------------------------------------------------------------------------------ -/** @brief am3x gpio �Է� ��Ʈ �ּҸ� ��´�. +/** @brief am3x gpio 입력 포트 주소를 얻는다. @param grp 0~3 - @param gp_nr gp_nr ��ȣ + @param gp_nr gp_nr 번호 *///---------------------------------------------------------------------------- static unsigned long am3x_get_input_port ( char grp, int gp_nr ) { @@ -389,9 +389,9 @@ static unsigned long am3x_get_input_port ( char grp, int gp_nr ) return gp->mmap_base + MCU_AM3874_GPIO_DATAIN; } //------------------------------------------------------------------------------ -/** @brief am3x gpio ��� ��Ʈ �ּҸ� ��´�. +/** @brief am3x gpio 출력 포트 주소를 얻는다. @param grp 0~3 - @param gp_nr gp_nr ��ȣ + @param gp_nr gp_nr 번호 *///---------------------------------------------------------------------------- static unsigned long am3x_get_output_port( char grp, int gp_nr ) { @@ -402,9 +402,9 @@ static unsigned long am3x_get_output_port( char grp, int gp_nr ) return gp->mmap_base + MCU_AM3874_GPIO_DATAOUT; } //------------------------------------------------------------------------------ -/** @brief am3x gpio �Է� ���� +/** @brief am3x gpio 입력 설정 @param grp 0~3 - @param gp_nr gp_nr ��ȣ + @param gp_nr gp_nr 번호 @param pull_up pull_up *///---------------------------------------------------------------------------- static void am3x_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) @@ -437,10 +437,10 @@ static void am3x_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) AM3874_GPIO_OE( gp->mmap_base ) |= (1<<gp_nr); // dir input } //------------------------------------------------------------------------------ -/** @brief am3x gpio ��� ���� +/** @brief am3x gpio 출력 설정 @param grp 0~3 - @param gp_nr gpio ��ȣ - @param gp_val gpio �ʱ� ��°� + @param gp_nr gpio 번호 + @param gp_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void am3x_gpio_dir_output( char grp, int gp_nr, int gp_val ) { @@ -476,9 +476,9 @@ static void am3x_gpio_dir_output( char grp, int gp_nr, int gp_val ) AM3874_PIN_CTRL(mcu_gpio.mmap_base,pin) = rval; } //------------------------------------------------------------------------------ -/** @brief am3x gpio �Է� +/** @brief am3x gpio 입력 @param grp 0~3 - @param gp_nr gpio ��ȣ + @param gp_nr gpio 번호 *///---------------------------------------------------------------------------- static int am3x_gpio_input( char grp, int gp_nr ) { @@ -492,10 +492,10 @@ static int am3x_gpio_input( char grp, int gp_nr ) return ( rval & (1<<gp_nr) ) ? 1:0; } //------------------------------------------------------------------------------ -/** @brief pxa gpio ��� - @param grp ������� �ʴ´�. - @param gp_nr gpio ��ȣ - @param gpio_val gpio �ʱ� ��°� +/** @brief pxa gpio 출력 + @param grp 사용하지 않는다. + @param gp_nr gpio 번호 + @param gpio_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void am3x_gpio_output( char grp, int gp_nr, int gp_val ) @@ -514,7 +514,7 @@ static void am3x_gpio_output( char grp, int gp_nr, int gp_val ) } } //------------------------------------------------------------------------------ -/** @brief �⺻���� gpio close() �Լ� +/** @brief 기본적인 gpio close() 함수 *///---------------------------------------------------------------------------- static void am3x_gpio_close( void ) @@ -535,8 +535,8 @@ static void am3x_gpio_close( void ) } } //------------------------------------------------------------------------------ -/** @brief am3x gpio �ʱ�ȭ - @param mcu_nr mcu ��ȣ +/** @brief am3x gpio 초기화 + @param mcu_nr mcu 번호 *///---------------------------------------------------------------------------- static void am3x_gpio_open( int mcu_nr ) { @@ -567,7 +567,7 @@ static void am3x_gpio_open( int mcu_nr ) } //------------------------------------------------------------------------------ -/** @brief s3c gpio ��ȣ�� �˻��Ͽ� �ش��ϴ� ������ �����ش�. +/** @brief s3c gpio 번호를 검사하여 해당하는 포이터를 돌려준다. *///---------------------------------------------------------------------------- static s3c_gpio_register_t *s3c_find_reg( char grp, int gp_nr ) @@ -622,10 +622,10 @@ static s3c_gpio_register_t *s3c_find_reg( char grp, int gp_nr ) return reg; } //------------------------------------------------------------------------------ -/** @brief s3c gpio �Է� ���� - @param grp gpio �칮�� 'a' ... 'z' - @param gp_nr gp_nr ��ȣ - @param pull_up pull_up ���� Ǯ�� Ȱ��ȭ ���� +/** @brief s3c gpio 입력 설정 + @param grp gpio 그룹문자 'a' ... 'z' + @param gp_nr gp_nr 번호 + @param pull_up pull_up 내부 풀업 활성화 유무 *///---------------------------------------------------------------------------- static void s3c_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) { @@ -641,7 +641,7 @@ static void s3c_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) reg_con = (unsigned long *)(mcu_gpio.mmap_base + reg->ofs_con ); reg_pup = (unsigned long *)(mcu_gpio.mmap_base + reg->ofs_pup ); - // pull-up ���� + // pull-up 설정 { rval = *(reg_pup); rval &= ~(0x3<<(gp_nr*2)); @@ -656,7 +656,7 @@ static void s3c_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) *(reg_pup) = rval; } - // �Է� ���� + // 입력 설정 { unsigned long and_mask, orr_mask; @@ -679,10 +679,10 @@ static void s3c_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) } } //------------------------------------------------------------------------------ -/** @brief s3c gpio ��� ���� - @param grp gpio �� - @param gp_nr gpio ��ȣ - @param gp_val gpio �ʱ� ��°� +/** @brief s3c gpio 출력 설정 + @param grp gpio 그룹 + @param gp_nr gpio 번호 + @param gp_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void s3c_gpio_dir_output( char grp, int gp_nr, int gp_val ) { @@ -700,14 +700,14 @@ static void s3c_gpio_dir_output( char grp, int gp_nr, int gp_val ) reg_dat = (unsigned long *)(mcu_gpio.mmap_base + reg->ofs_dat ); reg_pup = (unsigned long *)(mcu_gpio.mmap_base + reg->ofs_pup ); - // pull-up ���� + // pull-up 설정 { rval = *(reg_pup); rval &= ~(0x3<<(gp_nr*2)); // pull-up disable *(reg_pup) = rval; } - // ��� + // 출력 { rval = *(reg_dat); rval &= ~(1<<gp_nr); @@ -715,7 +715,7 @@ static void s3c_gpio_dir_output( char grp, int gp_nr, int gp_val ) *(reg_dat) = rval; } - // ��� ���� + // 출력 설정 { unsigned long and_mask, orr_mask; @@ -738,9 +738,9 @@ static void s3c_gpio_dir_output( char grp, int gp_nr, int gp_val ) } } //------------------------------------------------------------------------------ -/** @brief s3c gpio �Է� - @param grp gpio �� - @param gp_nr gpio ��ȣ +/** @brief s3c gpio 입력 + @param grp gpio 그룹 + @param gp_nr gpio 번호 *///---------------------------------------------------------------------------- static int s3c_gpio_input( char grp, int gp_nr ) { @@ -756,10 +756,10 @@ static int s3c_gpio_input( char grp, int gp_nr ) return *(reg_dat) & (1<< gp_nr) ? 1 : 0; } //------------------------------------------------------------------------------ -/** @brief s3c gpio ��� - @param grp gpio �� - @param gp_nr gpio ��ȣ - @param gpio_val gpio �ʱ� ��°� +/** @brief s3c gpio 출력 + @param grp gpio 그룹 + @param gp_nr gpio 번호 + @param gpio_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void s3c_gpio_output( char grp, int gp_nr, int gp_val ) @@ -774,16 +774,16 @@ static void s3c_gpio_output( char grp, int gp_nr, int gp_val ) reg_dat = (unsigned long *)(mcu_gpio.mmap_base + reg->ofs_dat ); - // ��� + // 출력 rval = *(reg_dat); rval &= ~(1<<gp_nr); rval |= (gp_val&0x1) << gp_nr; *(reg_dat) = rval; } //------------------------------------------------------------------------------ -/** @brief s3c, s5p gpio ��� ��Ʈ �ּҸ� ��´�. +/** @brief s3c, s5p gpio 출력 포트 주소를 얻는다. @param grp 0~3 - @param gp_nr gp_nr ��ȣ + @param gp_nr gp_nr 번호 *///---------------------------------------------------------------------------- static unsigned long s3c_get_data_port( char grp, int gp_nr ) { @@ -797,8 +797,8 @@ static unsigned long s3c_get_data_port( char grp, int gp_nr ) } //------------------------------------------------------------------------------ -/** @brief s3c gpio �ʱ�ȭ - @param mcu_nr mcu ��ȣ +/** @brief s3c gpio 초기화 + @param mcu_nr mcu 번호 *///---------------------------------------------------------------------------- static void s3c_gpio_open( int mcu_nr ) { @@ -851,10 +851,10 @@ static void s3c_gpio_open( int mcu_nr ) } //------------------------------------------------------------------------------ -/** @brief pxa gpio �Է� ���� - @param grp gpio ������� �ʴ´�. - @param gp_nr gp_nr ��ȣ - @param pull_up pull_up ������� �ʴ´�. +/** @brief pxa gpio 입력 설정 + @param grp gpio 사용하지 않는다. + @param gp_nr gp_nr 번호 + @param pull_up pull_up 사용하지 않는다. *///---------------------------------------------------------------------------- static void pxa_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) { @@ -870,17 +870,17 @@ static void pxa_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) return; } - // gpio in/out ���� + // gpio in/out 설정 PXA_GPIO_INOUT( gp_nr ); - // �Է� ���� + // 입력 설정 PXA_DIR_IN( gp_nr ); } //------------------------------------------------------------------------------ -/** @brief pxa gpio ��� ���� - @param grp ������� �ʴ´�. - @param gp_nr gpio ��ȣ - @param gp_val gpio �ʱ� ��°� +/** @brief pxa gpio 출력 설정 + @param grp 사용하지 않는다. + @param gp_nr gpio 번호 + @param gp_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void pxa_gpio_dir_output( char grp, int gp_nr, int gp_val ) { @@ -895,10 +895,10 @@ static void pxa_gpio_dir_output( char grp, int gp_nr, int gp_val ) return; } - // gpio in/out ���� + // gpio in/out 설정 PXA_GPIO_INOUT( gp_nr ); - // ��� + // 출력 if (gp_val & 0x1) { PXA_OUT_SET(gp_nr); @@ -908,13 +908,13 @@ static void pxa_gpio_dir_output( char grp, int gp_nr, int gp_val ) PXA_OUT_CLR(gp_nr); } - // ��� ���� + // 출력 설정 PXA_DIR_OUT( gp_nr ); } //------------------------------------------------------------------------------ -/** @brief pxa gpio �Է� - @param grp ������� �ʴ´�. - @param gp_nr gpio ��ȣ +/** @brief pxa gpio 입력 + @param grp 사용하지 않는다. + @param gp_nr gpio 번호 *///---------------------------------------------------------------------------- static int pxa_gpio_input( char grp, int gp_nr ) { @@ -932,10 +932,10 @@ static int pxa_gpio_input( char grp, int gp_nr ) return PXA_IN_DAT( gp_nr ) ? 1:0; } //------------------------------------------------------------------------------ -/** @brief pxa gpio ��� - @param grp ������� �ʴ´�. - @param gp_nr gpio ��ȣ - @param gpio_val gpio �ʱ� ��°� +/** @brief pxa gpio 출력 + @param grp 사용하지 않는다. + @param gp_nr gpio 번호 + @param gpio_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void pxa_gpio_output( char grp, int gp_nr, int gp_val ) @@ -961,8 +961,8 @@ static void pxa_gpio_output( char grp, int gp_nr, int gp_val ) } } //------------------------------------------------------------------------------ -/** @brief pxa gpio �ʱ�ȭ - @param mcu_nr mcu ��ȣ +/** @brief pxa gpio 초기화 + @param mcu_nr mcu 번호 *///---------------------------------------------------------------------------- static void pxa_gpio_open( int mcu_nr ) { @@ -991,10 +991,10 @@ static void pxa_gpio_open( int mcu_nr ) } //------------------------------------------------------------------------------ -/** @brief ixp gpio �Է� ���� - @param grp gpio ������� �ʴ´�. - @param gp_nr gp_nr ��ȣ - @param pull_up pull_up ������� �ʴ´�. +/** @brief ixp gpio 입력 설정 + @param grp gpio 사용하지 않는다. + @param gp_nr gp_nr 번호 + @param pull_up pull_up 사용하지 않는다. *///---------------------------------------------------------------------------- static void ixp_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) { @@ -1012,10 +1012,10 @@ static void ixp_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) } } //------------------------------------------------------------------------------ -/** @brief ixp gpio ��� ���� - @param grp ������� �ʴ´�. - @param gp_nr gpio ��ȣ - @param gp_val gpio �ʱ� ��°� +/** @brief ixp gpio 출력 설정 + @param grp 사용하지 않는다. + @param gp_nr gpio 번호 + @param gp_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void ixp_gpio_dir_output( char grp, int gp_nr, int gp_val ) { @@ -1040,9 +1040,9 @@ static void ixp_gpio_dir_output( char grp, int gp_nr, int gp_val ) } } //------------------------------------------------------------------------------ -/** @brief ixp gpio �Է� - @param grp ������� �ʴ´�. - @param gp_nr gpio ��ȣ +/** @brief ixp gpio 입력 + @param grp 사용하지 않는다. + @param gp_nr gpio 번호 *///---------------------------------------------------------------------------- static int ixp_gpio_input( char grp, int gp_nr ) { @@ -1058,10 +1058,10 @@ static int ixp_gpio_input( char grp, int gp_nr ) return 0; } //------------------------------------------------------------------------------ -/** @brief ixp gpio ��� - @param grp ������� �ʴ´�. - @param gp_nr gpio ��ȣ - @param gpio_val gpio �ʱ� ��°� +/** @brief ixp gpio 출력 + @param grp 사용하지 않는다. + @param gp_nr gpio 번호 + @param gpio_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void ixp_gpio_output( char grp, int gp_nr, int gp_val ) @@ -1081,8 +1081,8 @@ static void ixp_gpio_output( char grp, int gp_nr, int gp_val ) } } //------------------------------------------------------------------------------ -/** @brief ixp gpio �ʱ�ȭ - @param mcu_nr mcu ��ȣ +/** @brief ixp gpio 초기화 + @param mcu_nr mcu 번호 *///---------------------------------------------------------------------------- static void ixp_gpio_open( int mcu_nr ) { @@ -1112,9 +1112,9 @@ static void ixp_gpio_open( int mcu_nr ) //------------------------------------------------------------------------------ -/** @brief mcu �� ������ �� mmap �� �����Ѵ�. - @param mcu ����� MCU ��ȣ�� �����Ѵ�. - @return ���� 0, ���� -1 +/** @brief mcu 를 선택한 후 mmap 메모리를 맵핑한다. + @param mcu 사용할 MCU 번호를 선택한다. + @return 성공 0, 에러 -1 *///---------------------------------------------------------------------------- int tgpio_open( int mcu ) { @@ -1141,7 +1141,7 @@ int tgpio_open( int mcu ) return 0; } //------------------------------------------------------------------------------ -/** @brief gpio ������ �����Ѵ�.. +/** @brief gpio 맵핑을 해제한다.. @remark *///---------------------------------------------------------------------------- void tgpio_close( void ) @@ -1150,30 +1150,30 @@ void tgpio_close( void ) memset( &mcu_gpio, 0, sizeof(mcu_gpio_fops_t) ); } //------------------------------------------------------------------------------ -/** @brief gpio �� �Է����� �����Ѵ�. - @param grp gpio �칮�� 'a' ... 'z' - @param gp_nr gp_nr ��ȣ - @param pull_up pull_up ���� Ǯ�� Ȱ��ȭ ���� +/** @brief gpio 를 입력으로 설정한다. + @param grp gpio 그룹문자 'a' ... 'z' + @param gp_nr gp_nr 번호 + @param pull_up pull_up 내부 풀업 활성화 유무 *///---------------------------------------------------------------------------- void tgpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) { if ( mcu_gpio.dir_input ) mcu_gpio.dir_input( grp, gp_nr, pull_up ); } //------------------------------------------------------------------------------ -/** @brief gpio �� ������� �����Ѵ�. - @param grp �칮�� 'a' ... 'z' - @param gp_nr gpio ��ȣ - @param gp_val gpio �ʱ� ��°� +/** @brief gpio 를 출력으로 설정한다. + @param grp 그룹문자 'a' ... 'z' + @param gp_nr gpio 번호 + @param gp_val gpio 초기 출력값 *///---------------------------------------------------------------------------- void tgpio_dir_output( char grp, int gp_nr, int gp_val ) { if ( mcu_gpio.dir_output ) mcu_gpio.dir_output( grp, gp_nr, gp_val ); } //------------------------------------------------------------------------------ -/** @brief gpio �� �Է°��� �д´�. - @param grp gpio �칮�� 'a' ... 'z' - @param gp_nr gp_nr ��ȣ - @return ���� 0 or 1 ������ ��� ���� +/** @brief gpio 의 입력값을 읽는다. + @param grp gpio 그룹문자 'a' ... 'z' + @param gp_nr gp_nr 번호 + @return 성공 0 or 1 에러일 경우 음수 *///---------------------------------------------------------------------------- int tgpio_input( char grp, int gp_nr ) { @@ -1183,20 +1183,20 @@ int tgpio_input( char grp, int gp_nr ) } //------------------------------------------------------------------------------ -/** @brief gpio �� ���� ���� - @param grp gpio �칮�� 'a' ... 'z' - @param gp_nr gp_nr ��ȣ - @param gp_val gpio ��°� +/** @brief gpio 에 값을 쓴다 + @param grp gpio 그룹문자 'a' ... 'z' + @param gp_nr gp_nr 번호 + @param gp_val gpio 출력값 *///---------------------------------------------------------------------------- void tgpio_output( char grp, int gp_nr, int gp_val ) { if ( mcu_gpio.output ) mcu_gpio.output( grp, gp_nr, gp_val ); } //------------------------------------------------------------------------------ -/** @brief gpio �� �Է� ��Ʈ ������ ��´�. - @param grp gpio �칮�� 'a' ... 'z' - @param gp_nr gp_nr ��ȣ - @return ��Ʈ�ּ� +/** @brief gpio 의 입력 포트 포인터를 얻는다. + @param grp gpio 그룹문자 'a' ... 'z' + @param gp_nr gp_nr 번호 + @return 포트주소 *///---------------------------------------------------------------------------- unsigned long tgpio_get_input_port ( char grp, int gp_nr ) { @@ -1204,10 +1204,10 @@ unsigned long tgpio_get_input_port ( char grp, int gp_nr ) return 0; } //------------------------------------------------------------------------------ -/** @brief gpio �� ��� ��Ʈ ������ ��´�. - @param grp gpio �칮�� 'a' ... 'z' - @param gp_nr gp_nr ��ȣ - @return ��Ʈ�ּ� +/** @brief gpio 의 출력 포트 포인터를 얻는다. + @param grp gpio 그룹문자 'a' ... 'z' + @param gp_nr gp_nr 번호 + @return 포트주소 *///---------------------------------------------------------------------------- unsigned long tgpio_get_output_port( char grp, int gp_nr ) { diff --git a/app/app-prime-modbus/lib/common/tgpio_imx6q.c b/app/app-prime-modbus/lib/common/tgpio_imx6q.c index 96d37ef..d1b59ea 100644 --- a/app/app-prime-modbus/lib/common/tgpio_imx6q.c +++ b/app/app-prime-modbus/lib/common/tgpio_imx6q.c @@ -1,25 +1,25 @@ /** @file tgpio_imx6.c @date 2013/7/22 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief gpio �� ����̹����� mmap�� �̿��Ͽ� �����Ѵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief gpio 를 드라이버없이 mmap를 이용하여 제어한다. - Ver 0.7.0 iMX6 ����, GP0��Ʈ ���� + Ver 0.7.0 iMX6 포함, GP0테스트 진행 - Ver 0.6.0 am3874 ����, GP0��Ʈ �Ϸ� + Ver 0.6.0 am3874 포함, GP0테스트 완료 - Ver 0.5.0 s5pv210 ����, ��Ʈ �Ϸ� - pull-up, pull-dn �������� + Ver 0.5.0 s5pv210 포함, 테스트 완료 + pull-up, pull-dn 설정변경 - Ver 0.4.0 tmmap.c �� ������� �ʰ� famap.c �� ����ϴ°����� ���� - Ver 0.3.0 ixp420 ��Ʈ �Ϸ� - Ver 0.2.1 s3c6410, pxa270 ��Ʈ �Ϸ� - Ver 0.2.0 pxa270 �Ϸ� - pxa255 �Ϸ�(��Ʈ �ȵ�) - Ver 0.1.0 s3c6410 �Ϸ� - s3c2440 �Ϸ�(��Ʈ �ȵ�) + Ver 0.4.0 tmmap.c 를 사용하지 않고 famap.c 를 사용하는것으로 수정 + Ver 0.3.0 ixp420 테스트 완료 + Ver 0.2.1 s3c6410, pxa270 테스트 완료 + Ver 0.2.0 pxa270 완료 + pxa255 완료(테스트 안됨) + Ver 0.1.0 s3c6410 완료 + s3c2440 완료(테스트 안됨) @modify - @todo ������ ���� MCU �鵵 �����Ͽ��� �Ѵ�. + @todo 다음과 같은 MCU 들도 지원하여야 한다. .. @bug @remark @@ -311,7 +311,7 @@ static iomux_v3_cfg_t imx6q_gpio_pads[7][32] = { } }; -//static mmap_alloc_t map_iomux; /// mmap ���� ����ü +//static mmap_alloc_t map_iomux; /// mmap 관리 구조체 //static unsigned long iomux_base = 0; //------------------------------------------------------------------------------ @@ -356,9 +356,9 @@ err_exit: //------------------------------------------------------------------------------ -/** @brief imx6 gpio ��ȣ�� ��Ȯ���� Ȯ���Ѵ�. +/** @brief imx6 gpio 번호가 정확한지 확인한다. @param grp 0~3 - @param gp_nr gp_nr ��ȣ + @param gp_nr gp_nr 번호 *///---------------------------------------------------------------------------- static int imx6_valid_gpio( char grp, int gp_nr ) { @@ -378,9 +378,9 @@ static int imx6_valid_gpio( char grp, int gp_nr ) return 0; } //------------------------------------------------------------------------------ -/** @brief imx6 gpio �Է� ��Ʈ �ּҸ� ��´�. +/** @brief imx6 gpio 입력 포트 주소를 얻는다. @param grp 0~3 - @param gp_nr gp_nr ��ȣ + @param gp_nr gp_nr 번호 *///---------------------------------------------------------------------------- static unsigned long imx6_get_dat_port ( char grp, int gp_nr ) { @@ -391,7 +391,7 @@ static unsigned long imx6_get_dat_port ( char grp, int gp_nr ) return gp->mmap_base + MCU_iMX6_GPIO_DAT_OFS; } //------------------------------------------------------------------------------ -/** @brief imx6 gpio �Է� ���� +/** @brief imx6 gpio 입력 설정 @param grp '1'~'7' @param gp_nr gp_nr 0..31 @param pull_up pull_up @@ -409,10 +409,10 @@ static void imx6_gpio_dir_input( char grp, int gp_nr, gpio_pulled_t pull_up ) iMX6_GPIO_DIRPORT( gp->mmap_base ) &= ~(1<<gp_nr); // input } //------------------------------------------------------------------------------ -/** @brief imx6 gpio ��� ���� +/** @brief imx6 gpio 출력 설정 @param grp '1'~'7' @param gp_nr gp_nr 0..31 - @param gp_val gpio �ʱ� ��°� + @param gp_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void imx6_gpio_dir_output( char grp, int gp_nr, int gp_val ) { @@ -429,7 +429,7 @@ static void imx6_gpio_dir_output( char grp, int gp_nr, int gp_val ) imx6_gpio_output( grp, gp_nr, gp_val ); } //------------------------------------------------------------------------------ -/** @brief imx6 gpio �Է� +/** @brief imx6 gpio 입력 @param grp '1'~'7' @param gp_nr gp_nr 0..31 *///---------------------------------------------------------------------------- @@ -445,10 +445,10 @@ static int imx6_gpio_input( char grp, int gp_nr ) return ( rval & (1<<gp_nr) ) ? 1:0; } //------------------------------------------------------------------------------ -/** @brief imx6 gpio ��� +/** @brief imx6 gpio 출력 @param grp '1'~'7' @param gp_nr gp_nr 0..31 - @param gpio_val gpio �ʱ� ��°� + @param gpio_val gpio 초기 출력값 *///---------------------------------------------------------------------------- static void imx6_gpio_output( char grp, int gp_nr, int gp_val ) @@ -467,7 +467,7 @@ static void imx6_gpio_output( char grp, int gp_nr, int gp_val ) } } //------------------------------------------------------------------------------ -/** @brief imx6 gpio close() �Լ� +/** @brief imx6 gpio close() 함수 *///---------------------------------------------------------------------------- static void imx6_gpio_close( void ) @@ -480,7 +480,7 @@ static void imx6_gpio_close( void ) fa_mmap_free( &gp->map_gpio ); } - // iomux ���� + // iomux 해제 if ( mgpio->mmap_base ) { fa_mmap_free( &mgpio->map_info ); @@ -488,8 +488,8 @@ static void imx6_gpio_close( void ) } } //------------------------------------------------------------------------------ -/** @brief imx6 gpio �ʱ�ȭ - @param mcu_nr mcu ��ȣ +/** @brief imx6 gpio 초기화 + @param mcu_nr mcu 번호 *///---------------------------------------------------------------------------- void imx6_gpio_open( int mcu_nr ) { diff --git a/app/app-prime-modbus/lib/common/tinifile.c b/app/app-prime-modbus/lib/common/tinifile.c index 9f12917..0f6654e 100644 --- a/app/app-prime-modbus/lib/common/tinifile.c +++ b/app/app-prime-modbus/lib/common/tinifile.c @@ -1,24 +1,24 @@ /** @file tinifile.c @date 2009-04-09 - @author ��漮 jwjwmx@gmail.com + @author 장길석 jwjwmx@gmail.com @brief Ver 0.0.6 - Delphi���� �����ϴ� TIniFile�� �����Ѵ�. + Delphi에서 제공하는 TIniFile을 생성한다. @brief - -# 2012-02-07 ����� - -# get_identify() �Լ����� index() �Լ� ���ϰ� ó�� + -# 2012-02-07 오재경 + -# get_identify() 함수에서 index() 함수 리턴값 처리 - -# 2010-09-14 ��漮 - -# ���� ���� IniFile�� �������� ������ ��ü�� �����ǰ� - -# ���Ϸ� ������ �� �ֵ��� ���� + -# 2010-09-14 장길석 + -# 파일 없이 IniFile을 생성했을 때에도 객체가 생성되고 + -# 파일로 저장할 수 있도록 수정 @todo - -# ������ �����ϴ� �Լ��� �߰� - -# ������ ������ �����ϴ� �Լ��� �߰� + -# 섹션을 삭제하는 함수를 추가 + -# 구별자 정보를 삭제하는 함수를 추가 @bug @remark @warning - - ���۱� �������̸�����(��) - - �ܺΰ��� ���� + - 저작권 에프에이리눅스(주) + - 외부공개 금지 */ @@ -31,53 +31,53 @@ #include <tstrlist.h> #include <tinifile.h> -/// INI���� ����ϴ� ���� ũ�� +/// INI에서 사용하는 버퍼 크기 #define MAX_BUFFSIZE 1024 -/// ���� ���ڿ� �ִ� ũ�� +/// 섹션 문자열 최대 크기 #define MAX_SECTION 128 -/// ������ ���ڿ� �ִ� ũ�� +/// 구분자 문자열 최대 크기 #define MAX_IDENTIFY 128 -/// ���� ���� �ڵ� -int ini_error_code; // �����ڵ� +/// 에러 전역 코드 +int ini_error_code; // 에러코드 -/// ���ǰ� �����ڸ� ���� ���� +/// 섹션과 구분자를 위한 버퍼 char buf_text[MAX_BUFFSIZE+1]; -/// ���ǰ� �����ڿ� ���� ������ ���ϱ� ���� ���� +/// 센션과 구분자에 대한 데이터를 구하기 위한 버퍼 char buf_data[MAX_BUFFSIZE+1]; static void trim( char *str) -// ����: �μ��� ���� ���ڿ����� �հ� ���� ȭ��Ʈ ���ڸ� �����Ѵ�. +// 설명: 인수로 받은 문자열에서 앞과 뒤의 화이트 문자를 제거한다. { int sz_str; int ndx; sz_str = strlen( str); - if ( 0 >= sz_str) return; // �������� ���ڿ��� �ƴϸ� �ٷ� ���� + if ( 0 >= sz_str) return; // 정상적인 문자열이 아니면 바로 복귀 - for ( ndx = sz_str -1; 0 <= ndx; ndx--) // ���ڿ� ���� ȭ��Ʈ ���ڸ� ����, -1: NULL ��ġ ���� + for ( ndx = sz_str -1; 0 <= ndx; ndx--) // 문자열 뒤의 화이트 문자를 제거, -1: NULL 위치 제거 { - if ( ' ' < str[ndx]) // �ѱ��̳� Ư�������� �ι�° ����Ʈ�� ��츦 ����ϱ� ���� MSB ��Ʈ�� Ȯ���Ѵ�. + if ( ' ' < str[ndx]) // 한글이나 특수문자의 두번째 바이트일 경우를 대비하기 위해 MSB 비트를 확인한다. { break; } str[ndx] = '\0'; } - sz_str = strlen( str); // ���ڿ� ���� ȭ��Ʈ ���ڸ� ���� + sz_str = strlen( str); // 문자열 앞의 화이트 문자를 제거 for( ndx = 0; ndx < sz_str; ndx++) { - if ( ' ' != str[ndx]) // �ѱ��� ���� ��츦 �����ؼ� ' ' ���ڸ� ���� ���Ѵ�. + if ( ' ' != str[ndx]) // 한글이 있을 경우를 생각해서 ' ' 문자를 직접 비교한다. break; } - memcpy( str, str+ndx, strlen( str)); // ȸ��Ʈ ���ڰ� �ƴ� �κ��� �������� ���� ��ġ�� �̵� + memcpy( str, str+ndx, strlen( str)); // 회이트 문자가 아닌 부분을 포인터의 시작 위치로 이동 } static char *get_identify( char *str, char *identify) -// ����: �μ� ���ڿ����� ������ ���ڿ��� ���Ѵ�. -// ����: '='������ ���ڿ��� ���ϸ�, �հ� ���� ȭ��Ʈ ���ڸ� �����Ѵ�. -// ��ȯ: ������ ���ڿ� +// 설명: 인수 문자열에서 구별지 문자열을 구한다. +// 참고: '='까지의 문자열을 구하며, 앞과 뒤의 화이트 문자를 제거한다. +// 반환: 구별자 문자열 { char *p_data; char *p_branch; @@ -97,7 +97,7 @@ static char *get_identify( char *str, char *identify) if ( NULL != p_data) { memcpy( p_data, p_branch+1, sz_data); - p_data[sz_data] = '\0'; // ���� ���ڿ� ���� '\0'���� ������ + p_data[sz_data] = '\0'; // 복사 문자열 끝을 '\0'으로 마무리 trim( identify); trim( p_data); @@ -106,9 +106,9 @@ static char *get_identify( char *str, char *identify) } static void get_section( char *str, char *sec) -// ����: �μ� ���ڿ����� ���� ���ڿ��� ���Ѵ�. -// ����: '['�� ']' ������ ���ڸ� ���ϸ�, ���ڿ� �հ� ���� ȭ��Ʈ ���ڴ� �����Ѵ�. -// ��ȯ: ���� ���ڿ� +// 설명: 인수 문자열에서 섹션 문자열을 구한다. +// 참고: '['와 ']' 사이의 문자를 구하며, 문자열 앞과 뒤의 화이트 문자는 제거한다. +// 반환: 섹션 문자열 { int ndx_str; int ndx_sec; @@ -134,26 +134,26 @@ static void get_section( char *str, char *sec) } static int is_remark( char *str) -// ����: ���ڿ��� �ּ������� ���θ� �Ǵ��Ѵ�. -// ����: '#' ���� �Ǵ� ';' ���ڷ� ������ �����ϸ� �ּ����� �Ǵ� -// ��ȯ: INI_TRUE=�ּ� +// 설명: 문자열이 주석인지의 여부를 판단한다. +// 참고: '#' 문자 또는 ';' 문자로 문장이 시작하면 주석으로 판단 +// 반환: INI_TRUE=주석 { char ch_data; int ndx; ndx = 0; - while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // ������ �� �Ǵ� ������ ũ�� ��ŭ Ȯ�� + while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // 문장의 끝 또는 버퍼의 크기 만큼 확인 { ch_data = str[ndx++]; - if ( '#' == ch_data) // ���� �̻��� ���� �� �ּ��� �ش�Ǵ� '#' ���ڸ� ������ �ּ����� �Ǵ� + if ( '#' == ch_data) // 공백 이상의 문자 중 주석에 해당되는 '#' 문자를 만나면 주석으로 판단 { return INI_TRUE; } - else if ( ';' == ch_data) // ���� �̻��� ���� �� �ּ��� �ش�Ǵ� ';' ���ڸ� ������ �ּ����� �Ǵ� + else if ( ';' == ch_data) // 공백 이상의 문자 중 주석에 해당되는 ';' 문자를 만나면 주석으로 판단 { return INI_TRUE; } - else if ( ' ' != str[ndx]) // ���� Ű���尡 �ƴ� ���� �̻��� ���ڸ� ������ �ּ� ���� �ƴ����� �Ǵ� + else if ( ' ' != str[ndx]) // 공백 키워드가 아닌 공백 이상의 문자를 만나면 주석 행이 아님으로 판단 { return INI_FALSE; } @@ -162,18 +162,18 @@ static int is_remark( char *str) } static int is_identify( char *str) -// ����: ���ڿ��� ���� ������ ����ִ����� ���θ� ��ȯ -// ����: '=' ���ڰ� �����鼭 ��ȿ -// ��ȯ: 0 = ������ ������ ����, 1 = ������ ������ ���� +// 설명: 문자열이 섹션 정보를 담고있는지의 여부를 반환 +// 참고: '=' 문자가 있으면서 유효 +// 반환: 0 = 구별자 정보가 없음, 1 = 구별자 정보가 있음 { int ndx; ndx = 0; - while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // ������ �� �Ǵ� ������ ũ�� ��ŭ Ȯ�� + while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // 문장의 끝 또는 버퍼의 크기 만큼 확인 { - if ( ' ' < str[ndx++]) // �տ� �ִ� ���� ���ڸ� ����. ���� �̻��� ���ڰ� ���� + if ( ' ' < str[ndx++]) // 앞에 있는 공백 문자를 무시. 공백 이상의 문자가 오면 { - while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // ���� �̻� '=' ���ڰ� �ִ��� Ȯ�� + while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // 공백 이상에 '=' 문자가 있는지 확인 { if ( '=' == str[ndx++]) { @@ -187,27 +187,27 @@ static int is_identify( char *str) } static int is_section( char *str) -//����: ���ڿ��� ���� ������ ����ִ����� ���θ� ��ȯ -//����: '[' ���ڰ� �����鼭 '[' �տ��� �� ���ڿ��̰ų� ���� ���ڸ� ��ȿ -// '[' ���ڿ� ']' ���� ���̿��� ���ǿ� ���� �̸� ���ڿ��� �־�� �� -//��ȯ: 0 = ���� ������ ����, 1 = ���� ������ ���� +//설명: 문자열이 섹션 정보를 담고있는지의 여부를 반환 +//참고: '[' 문자가 있으면서 '[' 앞에는 빈 문자열이거나 공백 문자만 유효 +// '[' 문자와 ']' 문자 사이에는 섹션에 대한 이름 문자열이 있어야 함 +//반환: 0 = 섹션 정보가 없음, 1 = 섹션 정보가 있음 { char ch_data; int ndx; ndx = 0; - while( ( '\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // ������ �� �Ǵ� ������ ũ�� ��ŭ Ȯ�� + while( ( '\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // 문장의 끝 또는 버퍼의 크기 만큼 확인 { - ch_data = str[ndx++]; // Ȯ���� ���ڿ� - if ( '[' == ch_data) // ���� [ ���� ���� + ch_data = str[ndx++]; // 확인할 문자열 + if ( '[' == ch_data) // 시작 [ 문자 있음 { - while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // ������ �� �Ǵ� ������ ũ�� ��ŭ Ȯ�� + while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // 문장의 끝 또는 버퍼의 크기 만큼 확인 { - if ( ' ' < str[ndx++]) // [ ���� ���Ŀ� �ٸ� ���ڰ� �ִٸ� + if ( ' ' < str[ndx++]) // [ 문자 이후에 다른 문자가 있다면 { - while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // ������ �� �Ǵ� ������ ũ�� ��ŭ Ȯ�� + while( ('\0' != str[ndx]) && ( ndx < MAX_BUFFSIZE)) // 문장의 끝 또는 버퍼의 크기 만큼 확인 { - if ( ']' == str[ndx++]) // ] ���ڰ� �ִٸ� TRUE + if ( ']' == str[ndx++]) // ] 문자가 있다면 TRUE { return 1; } @@ -217,7 +217,7 @@ static int is_section( char *str) } return 0; } - else if ( ' ' != ch_data) // [ ���� �տ� ���� ���� �ܿ� �ٸ� ���ڰ� �ִٸ� FALSE + else if ( ' ' != ch_data) // [ 문자 앞에 공백 문자 외에 다른 문자가 있다면 FALSE { break; } @@ -226,11 +226,11 @@ static int is_section( char *str) } static void read_inifile_data( FILE *fp, inifile_t *inifile) -//����: ini ������ ������ �о�鿩 inifile_t ��ü�� ������ �ϼ��Ѵ�. -//�μ�: FILE *fp : ini ���Ͽ� ���� ���� ������ -// ifile_t *inifile : inifile_t ��ü ������ -//����: ���ǿ� ���� ������ ����� ���� tstrlist�� �����Ͽ� -// ���� ����Ʈ�� �����ۿ� object�� �߰��Ѵ�. +//설명: ini 파일의 내용을 읽어들여 inifile_t 객체의 내용을 완성한다. +//인수: FILE *fp : ini 파일에 대한 파일 포인터 +// ifile_t *inifile : inifile_t 객체 포인터 +//참고: 섹션에 따라 구별자 목록을 갖는 tstrlist를 생성하여 +// 섹션 리스트의 아이템에 object로 추가한다. { char str_section [MAX_SECTION +1]; char str_identify[MAX_IDENTIFY+1]; @@ -239,16 +239,16 @@ static void read_inifile_data( FILE *fp, inifile_t *inifile) while( NULL != fgets( buf_text, MAX_BUFFSIZE, fp)) { - if ( INI_TRUE == is_remark( buf_text) ) // �ּ� ���̸� ���� ������ + if ( INI_TRUE == is_remark( buf_text) ) // 주석 행이면 다음 행으로 ; else if ( NULL != index( buf_text, '[')) { - if ( is_section( buf_text)) // ���Ͽ��� �о���� ���ڿ��� ���� ������ ��ȿ�ϴٸ� + if ( is_section( buf_text)) // 파일에서 읽어들인 문자열이 섹션 정보로 유효하다면 { - lst_identify = tstrlist_create(); // ���ǿ� ���Ե� ��� ������ ������ ���� �� �ִ� tstrlist�� ���� + lst_identify = tstrlist_create(); // 섹션에 포함된 모든 구별자 정보를 담을 수 있는 tstrlist를 생성 if ( NULL == lst_identify) { - ini_error_code = INIERR_CREATE_IDENTIFY_FAIL; // �����ڵ�: ������ ������ ���� �� �Ҵ� ���� + ini_error_code = INIERR_CREATE_IDENTIFY_FAIL; // 에러코드: 구별자 정보를 위한 메모리 할당 실패 return; } get_section( buf_text, str_section); @@ -263,7 +263,7 @@ static void read_inifile_data( FILE *fp, inifile_t *inifile) p_data = get_identify( buf_text, str_identify); if ( NULL == p_data) { - ini_error_code = INIERR_READ_IDENTIFY_FAIL; // �����ڵ�: �������� ���ڿ� ������ �� �Ҵ� ���� + ini_error_code = INIERR_READ_IDENTIFY_FAIL; // 에러코드: 구별자의 문자열 정보를 메모리 할당 실패 return; } tstrlist_add_object( lst_identify, str_identify, p_data); @@ -274,13 +274,13 @@ static void read_inifile_data( FILE *fp, inifile_t *inifile) } static char *read_string( inifile_t *inifile, char *str_section, char *str_identify) -//����: ���ǰ� �������� ���ڿ� ������ ���Ѵ�. -//�μ�: inifile_t *inifile : inifile_t ��ü ������ -// char *str_section : ���� ���ڿ� -// char *str_identify : ������ ���ڿ� -//��ȯ: ���ǰ� �������� ���ڿ� ������ -//����: ���ǰ� �����ڰ� ���ٸ� NULL�� ��ȯ -// ��ȯ�� ���ڿ� �����ͷ� �� �Ҹ��� �ؼ��� �� �ȴ�. +//설명: 섹션과 구별자의 문자열 데이터를 구한다. +//인수: inifile_t *inifile : inifile_t 객체 포인터 +// char *str_section : 섹션 문자열 +// char *str_identify : 구별자 문자열 +//반환: 섹션과 구별자의 문자열 데이터 +//주의: 섹션과 구별자가 없다면 NULL을 반환 +// 반환된 문자열 포인터로 메모리 소멸을 해서는 안 된다. { tstrlist *lst_section; int index; @@ -299,27 +299,27 @@ static char *read_string( inifile_t *inifile, char *str_section, char *str_ident } static int write_string( inifile_t *inifile, char *str_section, char *str_identify, char *data) -//����: ���ǰ� �������� ���ڿ� ������ ���� �Ǵ� �߰��Ѵ�. -//�μ�: inifile_t *inifile : inifile_t ��ü ������ -// char *str_section : ���� ���ڿ� -// char *str_identify : ������ ���ڿ� -// char *data : ������ ������ -//��ȯ: INI_TRUE= ���� �Ǵ� �߰� ����, INI_FALSE ���� �Ǵ� �߰� ���� -//����: ���ǰ� �����ڰ� ���ٸ� ���� �߰��Ѵ�. +//설명: 섹션과 구별자의 문자열 데이터를 변경 또는 추가한다. +//인수: inifile_t *inifile : inifile_t 객체 포인터 +// char *str_section : 섹션 문자열 +// char *str_identify : 구별자 문자열 +// char *data : 저장할 데이터 +//반환: INI_TRUE= 변경 또는 추가 성공, INI_FALSE 변경 또는 추가 실패 +//주의: 섹션과 구별자가 없다면 새로 추가한다. { tstrlist *lst_section; char *p_data; int index; - inifile->is_changed = 1; // �ڷ� ���� �̳� �߰��� ���� + inifile->is_changed = 1; // 자료 변경 이나 추가가 있음 index = tstrlist_indexof( inifile->lst_sections, str_section); - if ( 0 > index) // ������ ���ٸ� �߰��Ѵ�. + if ( 0 > index) // 섹션이 없다면 추가한다. { - lst_section = tstrlist_create(); // ���ǿ� ���Ե� ��� ������ ������ ���� �� �ִ� tstrlist�� ���� + lst_section = tstrlist_create(); // 섹션에 포함된 모든 구별자 정보를 담을 수 있는 tstrlist를 생성 if ( NULL == lst_section) { - ini_error_code = INIERR_CREATE_IDENTIFY_FAIL; // �����ڵ�: ������ ������ ���� �� �Ҵ� ���� + ini_error_code = INIERR_CREATE_IDENTIFY_FAIL; // 에러코드: 구별자 정보를 위한 메모리 할당 실패 return INI_FALSE; } tstrlist_add_object( inifile->lst_sections, str_section, lst_section); @@ -330,7 +330,7 @@ static int write_string( inifile_t *inifile, char *str_section, char *str_identi } index = tstrlist_indexof( lst_section, str_identify); - if ( 0 > index) // �����ڰ� ���ٸ� �߰��Ѵ�. + if ( 0 > index) // 구별자가 없다면 추가한다. { tstrlist_add_object( lst_section, str_identify, data); } @@ -346,29 +346,29 @@ static int write_string( inifile_t *inifile, char *str_section, char *str_identi char *ini_error_string( void) /** - @brief ini_error_code�� ���� ���� ���� ���ڿ��� ��ȯ - @return ���� �ڵ忡 ���� ���� ���� ���ڿ� ������ - @warning ���� ��ȯ ���� ���ڿ��� �Ҹ� ���Ѽ��� �� �ȴ�!! + @brief ini_error_code에 대한 에러 설명 문자열을 반환 + @return 에러 코드에 대한 에러 설명 문자열 포인터 + @warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!! */ { - char *error_string[] ={ "���� ����", // INIERR_NONE - "�� ����", // INIERR_OUT_OF_MEMORY - "���� �̸� ���� ����", // INIERR_FILENAME_FAIL - "�ڷ� ����", // INIERR_NO_DATA - "IniFile ����", // INIERR_NO_FILE - "IniFile�� ���� �� ����", // INIERR_ACCESS_FAIL - "���� ����Ʈ ���� ����", // INIERR_CREATE_SECTION_FAIL - "������ ���� ����", // INIERR_CREATE_IDENTIFY_FAIL - "�μ��� ��ü�� NULL" // INIERR_NULL_POINTER + char *error_string[] ={ "에러 없음", // INIERR_NONE + "메모리 부족", // INIERR_OUT_OF_MEMORY + "파일 이름 지정 오류", // INIERR_FILENAME_FAIL + "자료 없음", // INIERR_NO_DATA + "IniFile 없음", // INIERR_NO_FILE + "IniFile을 읽을 수 없음", // INIERR_ACCESS_FAIL + "섹션 리스트 생성 실패", // INIERR_CREATE_SECTION_FAIL + "구별자 생성 실패", // INIERR_CREATE_IDENTIFY_FAIL + "인수의 객체가 NULL" // INIERR_NULL_POINTER }; return( error_string[ini_error_code]); } int ini_print_error( char *remark) /** - @brief ini_error_code�� ���� ���� ���� ���ڿ��� ȭ�鿡 ��� - @param remark : ���� ���� ���ڿ� ���� ÷���Ͽ� ����� ���ڿ� - @return ���� �ڵ� + @brief ini_error_code에 대한 에러 설명 문자열을 화면에 출력 + @param remark : 에러 설명 문자열 끝에 첨부하여 출력할 문자열 + @return 에러 코드 */ { printf( "[ini error:%d]%s %s\n", ini_error_code, ini_error_string(), remark); @@ -377,14 +377,14 @@ int ini_print_error( char *remark) int ini_write_bool( inifile_t *inifile, char *str_section, char *str_identify, int value) /** - @brief ���ǰ� �����ڰ� �����ϴ� �������� ���� �����Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ� - @param str_identify : ������ ���ڿ� - @param value : boolean �� + @brief 섹션과 구별자가 지정하는 데이터의 값을 변경한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열 + @param str_identify : 구별자 문자열 + @param value : boolean 값 @return\n - INI_TRUE - ���� �Ǵ� �߰� ����\n - INI_FALSE - ���� �Ǵ� �߰� ���� + INI_TRUE - 변경 또는 추가 성공\n + INI_FALSE - 변경 또는 추가 실패 */ { char *data; @@ -398,14 +398,14 @@ int ini_write_bool( inifile_t *inifile, char *str_section, char *str_identify, i int ini_write_real( inifile_t *inifile, char *str_section, char *str_identify, double value) /** - @brief ���ǰ� �����ڰ� �����ϴ� �Ǽ� ������ ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ� - @param str_identify : ������ ���ڿ� - @param value : �Ǽ� �� + @brief 섹션과 구별자가 지정하는 실수 데이터를 구한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열 + @param str_identify : 구별자 문자열 + @param value : 실수 값 @return - - INI_TRUE - ���� �Ǵ� �߰� ���� - - INI_FALSE - ���� �Ǵ� �߰� ���� + - INI_TRUE - 변경 또는 추가 성공 + - INI_FALSE - 변경 또는 추가 실패 */ { char *data; @@ -418,14 +418,14 @@ int ini_write_real( inifile_t *inifile, char *str_section, char *str_identify, d int ini_write_integer( inifile_t *inifile, char *str_section, char *str_identify, int value) /** - @brief ���ǰ� �����ڰ� �����ϴ� ���� ������ �����Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ�\n - @param str_identify : ������ ���ڿ�\n - @param value : ���� ������ + @brief 섹션과 구별자가 지정하는 정수 데이터를 지정한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열\n + @param str_identify : 구별자 문자열\n + @param value : 정수 데이터 @return - - INI_TRUE - ���� �Ǵ� �߰� ���� - - INI_FALSE - ���� �Ǵ� �߰� ���� + - INI_TRUE - 변경 또는 추가 성공 + - INI_FALSE - 변경 또는 추가 실패 */ { char *data; @@ -439,14 +439,14 @@ int ini_write_integer( inifile_t *inifile, char *str_section, char *str_identify int ini_write_string( inifile_t *inifile, char *str_section, char *str_identify, char *value) /** - @brief ���ǰ� �������� ���ڿ��� ���� - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ�\n - @param str_identify : ������ ���ڿ�\n - @param value : ���ڿ� ������ + @brief 섹션과 구별자의 문자열을 변경 + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열\n + @param str_identify : 구별자 문자열\n + @param value : 문자열 데이터 @return - - INI_TRUE - ���� �Ǵ� �߰� ���� - - INI_FALSE - ���� �Ǵ� �߰� ���� + - INI_TRUE - 변경 또는 추가 성공 + - INI_FALSE - 변경 또는 추가 실패 */ { char *data; @@ -459,14 +459,14 @@ int ini_write_string( inifile_t *inifile, char *str_section, char *str_identify, int ini_write_char( inifile_t *inifile, char *str_section, char *str_identify, char value) /** - @brief ���ǰ� �������� ���ڸ� ���� - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ�\n - @param str_identify : ������ ���ڿ�\n - @param value : ���� + @brief 섹션과 구별자의 문자를 변경 + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열\n + @param str_identify : 구별자 문자열\n + @param value : 문자 @return - - INI_TRUE - ���� �Ǵ� �߰� ���� - - INI_FALSE - ���� �Ǵ� �߰� ���� + - INI_TRUE - 변경 또는 추가 성공 + - INI_FALSE - 변경 또는 추가 실패 */ { char str[16]; @@ -477,105 +477,105 @@ int ini_write_char( inifile_t *inifile, char *str_section, char *str_identify, c int ini_read_bool( inifile_t *inifile, char *str_section, char *str_identify, int default_value) /** - @brief ���ǰ� �����ڰ� �����ϴ� Boolean ������ ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ�\n - @param str_identify : ������ ���ڿ�\n - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� - @warning ini ���Ͽ� ������ ���ڿ��� 0 �̸� FALSE�� ��ȯ�ϸ�\n - �ܴ̿� ������ TRUE�� ��ȯ�Ѵ�.\n - ��, ���ǰ� �����ڰ� ������ �ִ� ���ڿ� ������\n - '0' ���� �ƴ����� ���θ� ��ȯ�Ѵ�. + @brief 섹션과 구별자가 지정하는 Boolean 데이터를 구한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열\n + @param str_identify : 구별자 문자열\n + @param default_value : 값이 없다면 대신 반환될 기본값 + @warning ini 파일에 저장한 문자열이 0 이면 FALSE로 반환하며\n + 이외는 무조건 TRUE로 반환한다.\n + 즉, 섹션과 구별자가 가지고 있는 문자열 정보가\n + '0' 인지 아닌지의 여부를 반환한다. */ { char *data; int int_data; - data = read_string( inifile, str_section, str_identify); // ���� ���ڿ��� ������ �о� ���δ�. - if ( NULL == data) return default_value; // ã�� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // ������ ��ȯ�� ���� ���ٸ� �⺻���� ��ȯ - else return 0 != int_data; // ���� ���� 0�̸� FALSE�� ��ȯ�Ѵ�. + data = read_string( inifile, str_section, str_identify); // 먼저 문자열로 데이터를 읽어 들인다. + if ( NULL == data) return default_value; // 찾는 데이터가 없다면 기본값을 반환한다. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. + else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // 정수로 변환된 값이 없다면 기본값을 반환 + else return 0 != int_data; // 정수 값이 0이면 FALSE로 반환한다. } double ini_read_real( inifile_t *inifile, char *str_section, char *str_identify, double default_value) /** - @brief ���ǰ� �����ڰ� �����ϴ� �Ǽ� ������ ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ� - @param str_identify : ������ ���ڿ� - @param default_value: ���� ���ٸ� ��� ��ȯ�� �⺻�� + @brief 섹션과 구별자가 지정하는 실수 데이터를 구한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열 + @param str_identify : 구별자 문자열 + @param default_value: 값이 없다면 대신 반환될 기본값 @return\n - ���ǰ� �����ڿ� �ش��ϴ� �Ǽ� ��\n - ������ �����̳� �����ڿ� ���� �Ǽ� ���� ���ٸ� �⺻���� ��ȯ + 섹션과 구별자에 해당하는 실수 값\n + 저정한 섹션이나 구별자에 대한 실수 값이 없다면 기본값을 반환 */ { char *data; double float_data; - data = read_string( inifile, str_section, str_identify); // ���� ���ڿ��� ������ �о� ���δ�. - if ( NULL == data) return default_value; // ã�� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == sscanf( data, "%lf", &float_data)) return default_value; // �Ǽ��� ��ȯ�� ���� ���ٸ� �⺻���� ��ȯ - else return float_data; // �Ǽ� ���� ��ȯ�Ѵ�. + data = read_string( inifile, str_section, str_identify); // 먼저 문자열로 데이터를 읽어 들인다. + if ( NULL == data) return default_value; // 찾는 데이터가 없다면 기본값을 반환한다. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. + else if ( 0 == sscanf( data, "%lf", &float_data)) return default_value; // 실수로 변환된 값이 없다면 기본값을 반환 + else return float_data; // 실수 값을 반환한다. } int ini_read_integer( inifile_t *inifile, char *str_section, char *str_identify, int default_value) /** - @brief ���ǰ� �����ڰ� �����ϴ� ���� ������ ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ� - @param str_identify : ������ ���ڿ� - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� + @brief 섹션과 구별자가 지정하는 정수 데이터를 구한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열 + @param str_identify : 구별자 문자열 + @param default_value : 값이 없다면 대신 반환될 기본값 @return\n - ���ǰ� �����ڿ� �ش��ϴ� ���� ��\n - ������ �����̳� �����ڿ� ���� ���� ���� ���ٸ� �⺻���� ��ȯ + 섹션과 구별자에 해당하는 정수 값\n + 저정한 섹션이나 구별자에 대한 정수 값이 없다면 기본값을 반환 */ { char *data; int int_data; - data = read_string( inifile, str_section, str_identify); // ���� ���ڿ��� ������ �о� ���δ�. + data = read_string( inifile, str_section, str_identify); // 먼저 문자열로 데이터를 읽어 들인다. - if ( NULL == data) return default_value; // ã���� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. - else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // ������ ��ȯ�� ���� ���ٸ� �⺻���� ��ȯ - else return int_data; // �������� ��ȯ�Ѵ�. + if ( NULL == data) return default_value; // 찾아진 데이터가 없다면 기본값을 반환한다. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. + else if ( 0 == sscanf( data, "%d", &int_data)) return default_value; // 정수로 변환된 값이 없다면 기본값을 반환 + else return int_data; // 정수값을 반환한다. } char *ini_read_string( inifile_t *inifile, char *str_section, char *str_identify, char *default_value) /** - @brief ���ǰ� �����ڰ� �����ϴ� ���ڿ� ������ ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ� - @param str_identify : ������ ���ڿ� - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� + @brief 섹션과 구별자가 지정하는 문자열 데이터를 구한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열 + @param str_identify : 구별자 문자열 + @param default_value : 값이 없다면 대신 반환될 기본값 @return\n - ���ǰ� �������� ���ڿ� ����\n - ������ �����̳� �����ڿ� ���� ���ڿ��� ���ٸ� �⺻���� ��ȯ - @warning ���� ��ȯ ���� ���ڿ��� �Ҹ� ���Ѽ��� �� �ȴ�!! + 섹션과 구별자의 문자열 정보\n + 저정한 섹션이나 구별자에 대한 문자열이 없다면 기본값을 반환 + @warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!! */ { char *data; data = read_string( inifile, str_section, str_identify); if ( NULL == data) return default_value; - else if ( 0 == strlen( data) ) return default_value; // ���ڿ� �����Ͱ� ���ٸ� �⺻���� ��ȯ�Ѵ�. + else if ( 0 == strlen( data) ) return default_value; // 문자열 데이터가 없다면 기본값을 반환한다. else return data; } char ini_read_char( inifile_t *inifile, char *str_section, char *str_identify, char default_value) /** - @brief ���ǰ� �����ڰ� �����ϴ� �ɸ��� ����Ÿ�� ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ� - @param str_identify : ������ ���ڿ� - @param default_value : ���� ���ٸ� ��� ��ȯ�� �⺻�� + @brief 섹션과 구별자가 지정하는 케릭터 데이타를 구한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열 + @param str_identify : 구별자 문자열 + @param default_value : 값이 없다면 대신 반환될 기본값 @return\n - ���ǰ� �������� ���ڿ� ����\n - ������ �����̳� �����ڿ� ���� ���ڿ��� ���ٸ� �⺻���� ��ȯ - @warning ���� ��ȯ ���� ���ڿ��� �Ҹ� ���Ѽ��� �� �ȴ�!! + 섹션과 구별자의 문자열 정보\n + 저정한 섹션이나 구별자에 대한 문자열이 없다면 기본값을 반환 + @warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!! */ { char *cc; @@ -587,13 +587,13 @@ char ini_read_char( inifile_t *inifile, char *str_section, char *str_ide tstrlist *ini_read_section( inifile_t *inifile, char *str_section) /** - @brief ������ ������ �ִ� ��� ������ ���ڿ��� ������ tstrlist �������� ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ���� ���ڿ� + @brief 섹션이 가지고 있는 모든 구별자 문자열의 정보를 tstrlist 형식으로 구한다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 섹션 문자열 @return\n - ������ ������ �ִ� ��� ������ ���ڿ��� ������ �ִ� tstrlist ��ü\n - ������ ������ ���ٸ� NULL�� ��ȯ - @warning ���� ��ȯ ���� ��ü�� �Ҹ� ���Ѽ��� �� �ȴ�!! + 섹션이 가지고 있는 모든 구별자 문자열을 가지고 있는 tstrlist 객체\n + 저정한 섹션이 없다면 NULL을 반환 + @warning 절대 반환 받은 객체를 소멸 시켜서는 안 된다!! */ { tstrlist *lst_section; @@ -610,10 +610,10 @@ tstrlist *ini_read_section( inifile_t *inifile, char *str_section) tstrlist *ini_read_sections( inifile_t *inifile) /** - @brief inifile_t ��ü�� ������ �ִ� ��� ���� ������ tstrlist �������� ���Ѵ�. - @param inifile : inifile_t ��ü ������ - @return ��� ���� ���ڿ��� ������ �ִ� tstrlist ��ü - @warning ���� ��ȯ ���� ��ü�� �Ҹ� ���Ѽ��� �� �ȴ�!! + @brief inifile_t 객체가 가지고 있는 모든 섹션 정보를 tstrlist 형식으로 구한다. + @param inifile : inifile_t 객체 포인터 + @return 모든 섹션 문자열을 가지고 있는 tstrlist 객체 + @warning 절대 반환 받은 객체를 소멸 시켜서는 안 된다!! */ { if ( NULL == inifile) @@ -626,20 +626,20 @@ tstrlist *ini_read_sections( inifile_t *inifile) int ini_save_to_file( inifile_t *inifile, char *filename){ /** - @brief inifile_t ��ü ������ ����Ǿ� �ִٸ� ���Ϸ� �����Ѵ�. - @param inifile : inifile_t ��ü ������ - @return INI_TRUE - �۾� �� ���� ���� + @brief inifile_t 객체 내용이 변경되어 있다면 파일로 저장한다. + @param inifile : inifile_t 객체 포인터 + @return INI_TRUE - 작업 중 오류 없음 */ - FILE *fp_inifile; // ini ���� ��ü - tstrlist *lst_sections; // inifile_t�� ������ �ִ� ��� ���� ����Ʈ - tstrlist *lst_identifies; // ������ ������ �ִ� ������ ����Ʈ - char *str_section; // ���� ���ڿ� - char *str_identify; // ������ ���ڿ� - char *str_data; // ���ǰ� �������� ���ڿ� ������ - int ndx_sec; // ��� ������ ó���ϱ� ���� ���� �ε��� - int ndx_idn; // ��� �����ڸ� ó���ϱ� ���� ���� �ε��� - - if ( NULL == inifile) // ini ���� ��ü�� ���� + FILE *fp_inifile; // ini 파일 객체 + tstrlist *lst_sections; // inifile_t가 가지고 있는 모든 섹션 리스트 + tstrlist *lst_identifies; // 섹션이 가지고 있는 구별자 리스트 + char *str_section; // 섹션 문자열 + char *str_identify; // 구별자 문자열 + char *str_data; // 섹션과 구별자의 문자열 데이터 + int ndx_sec; // 모든 섹션을 처리하기 위한 루프 인데스 + int ndx_idn; // 모든 구별자를 처리하기 위한 루프 인덱스 + + if ( NULL == inifile) // ini 파일 개체가 없음 { ini_error_code = INIERR_NULL_POINTER; return INI_FALSE; @@ -649,24 +649,24 @@ int ini_save_to_file( inifile_t *inifile, char *filename){ ini_error_code = INIERR_NULL_POINTER; return INI_FALSE; } - fp_inifile = fopen( filename, "w"); // ini ������ ���� �������� ���� - if ( NULL == fp_inifile) // ���� ���� ���� + fp_inifile = fopen( filename, "w"); // ini 파일을 쓰기 전용으로 열기 + if ( NULL == fp_inifile) // 파일 열기 실패 { - ini_error_code = INIERR_ACCESS_FAIL; // �����ڵ�: ���� ���� ���� ���� + ini_error_code = INIERR_ACCESS_FAIL; // 에러코드: 파일 열기 실패 지정 return INI_FALSE; } - lst_sections = ini_read_sections( inifile); // ini ��ü���� ��� ���� ����Ʈ�� ���Ѵ�. - for( ndx_sec = 0; ndx_sec < tstrlist_getcount( lst_sections); ndx_sec++)// ��� ���ǿ� ���ؼ� + lst_sections = ini_read_sections( inifile); // ini 객체에서 모든 섹션 리스트를 구한다. + for( ndx_sec = 0; ndx_sec < tstrlist_getcount( lst_sections); ndx_sec++)// 모든 섹션에 대해서 { - str_section = tstrlist_get_string( lst_sections, ndx_sec); // ���� ���ڿ��� ���Ѵ�. - fprintf( fp_inifile, "[%s]\n", str_section); // ���Ͽ� ���� ���ڿ��� ���� + str_section = tstrlist_get_string( lst_sections, ndx_sec); // 섹션 문자열을 구한다. + fprintf( fp_inifile, "[%s]\n", str_section); // 파일에 섹션 문자열을 쓰기 - lst_identifies = ini_read_section( inifile, str_section); // ������ ��� ������ ����Ʈ�� ���Ѵ�. + lst_identifies = ini_read_section( inifile, str_section); // 섹션의 모든 구별자 리스트를 구한다. for( ndx_idn = 0; ndx_idn < tstrlist_getcount( lst_identifies); ndx_idn++) { str_identify = tstrlist_get_string( lst_identifies, ndx_idn); str_data = ini_read_string( inifile, str_section, str_identify, ""); - fprintf( fp_inifile, "%s=%s\n", str_identify, str_data); // �����ڿ� ������ ���� + fprintf( fp_inifile, "%s=%s\n", str_identify, str_data); // 구별자와 데이터를 쓰기 } } fclose( fp_inifile); @@ -677,14 +677,14 @@ int ini_save_to_file( inifile_t *inifile, char *filename){ int ini_flush( inifile_t *inifile) /** - @brief inifile_t ��ü ������ ����Ǿ� �ִٸ� ���Ϸ� �����Ѵ�. - @param inifile : inifile_t ��ü ������ - @return INI_TRUE - �۾� �� ���� ���� + @brief inifile_t 객체 내용이 변경되어 있다면 파일로 저장한다. + @param inifile : inifile_t 객체 포인터 + @return INI_TRUE - 작업 중 오류 없음 */ { int rst = INIERR_NONE; - if ( INI_TRUE == inifile->is_changed){ // �����Ͱ� ����Ǿ��ų� �߰��Ǿ��� + if ( INI_TRUE == inifile->is_changed){ // 데이터가 변경되었거나 추가되었음 inifile->is_changed = INI_FALSE; rst = ini_save_to_file( inifile, inifile->filename); } @@ -693,10 +693,10 @@ int ini_flush( inifile_t *inifile) void ini_remove_section( inifile_t *inifile, char *str_section) /** - @brief ������ ������ �����մϴ�. - @param inifile : inifile_t ��ü ������ - @param str_section : ������ ���� - @warning �����̳� �߰��� �ڷḦ ���� ini_flush()�� ȣ���Ѵ�. + @brief 지정된 섹션을 제거합니다. + @param inifile : inifile_t 객체 포인터 + @param str_section : 삭제할 섹션 + @warning 변경이나 추가된 자료를 위해 ini_flush()를 호출한다. */ { tstrlist *psection; @@ -714,13 +714,13 @@ void ini_remove_section( inifile_t *inifile, char *str_section) psection = ( tstrlist *)tstrlist_get_object( inifile->lst_sections, index); for ( ndx_idn = 0; ndx_idn < tstrlist_getcount( psection); ndx_idn++) { - pdata = ( char *)tstrlist_get_object( psection, ndx_idn); // identify�� ������ ������ ���ڿ� �� ���� + pdata = ( char *)tstrlist_get_object( psection, ndx_idn); // identify에 지정된 데이터 문자열 메모리를 제거 free( pdata); } tstrlist_free( psection); tstrlist_delete( inifile->lst_sections, index); - inifile->is_changed = INI_TRUE; // [KTG] section ������ ���ؼ��� ���Ͽ� �ݿ��ǵ��� �ϱ� ����. + inifile->is_changed = INI_TRUE; // [KTG] section 삭제에 대해서도 파일에 반영되도록 하기 위함. } } } @@ -728,9 +728,9 @@ void ini_remove_section( inifile_t *inifile, char *str_section) void ini_free( inifile_t *inifile) /** - @brief inifile_t ��ü�� �Ҹ� - @param inifile : inifile_t ��ü ������ - @warning �����̳� �߰��� �ڷḦ ���� ini_flush()�� ȣ���Ѵ�. + @brief inifile_t 객체를 소멸 + @param inifile : inifile_t 객체 포인터 + @warning 변경이나 추가된 자료를 위해 ini_flush()를 호출한다. */ { tstrlist *psection; @@ -740,8 +740,8 @@ void ini_free( inifile_t *inifile) if ( NULL != inifile) { - ini_flush( inifile); // ����� ������ �ִٸ� ���Ϸ� ���� - if ( NULL != inifile->filename) free( inifile->filename); // ���� �̸��� �� �Ҹ� + ini_flush( inifile); // 변경된 내용이 있다면 파일로 저장 + if ( NULL != inifile->filename) free( inifile->filename); // 파일 이름의 메모리 소멸 if ( NULL != inifile->lst_sections) { for ( ndx_sec = 0; ndx_sec < tstrlist_getcount( inifile->lst_sections); ndx_sec++) @@ -749,7 +749,7 @@ void ini_free( inifile_t *inifile) psection = tstrlist_get_object( inifile->lst_sections, ndx_sec); for ( ndx_idn = 0; ndx_idn < tstrlist_getcount( psection); ndx_idn++) { - pdata = ( char *)tstrlist_get_object( psection, ndx_idn); // identify�� ������ ������ ���ڿ� �� ���� + pdata = ( char *)tstrlist_get_object( psection, ndx_idn); // identify에 지정된 데이터 문자열 메모리를 제거 free( pdata); } tstrlist_free( psection); @@ -762,41 +762,41 @@ void ini_free( inifile_t *inifile) inifile_t *ini_create( char *filename) /** - @brief filename�� ������ ���ǰ� �����ڷ� �����Ͽ� �о� ���δ�.\n - file���� �ڷḦ �о� ���� �Ŀ��� �����Ͱ� ����Ǿ� ������ �ʿ��ϱ� �������� \n - �ٽ� ������ �\���� �ʿ䰡 ����. - @param filename : ini ������ �̸� + @brief filename의 내용을 섹션과 구별자로 구분하여 읽어 들인다.\n + file에서 자료를 읽어 들인 후에는 데이터가 변경되어 저장이 필요하기 전까지는 \n + 다시 파일을 억세스할 필요가 없다. + @param filename : ini 파일의 이름 @return\n - ini ������ ��� ������ ���� inifile_t ��ü ������ - �б �����ߴٸ� NULL�� ��ȯ + ini 파일의 모든 내용을 담은 inifile_t 객체 포인터 + 읽기에 실패했다면 NULL을 반환 */ { - inifile_t *inifile; // ini ���� ��ü - FILE *fp_inifile; // ini ������ �б� ���� ���� ������ - int sz_filename; // ini ������ ��ü �̸� ũ�� + inifile_t *inifile; // ini 파일 객체 + FILE *fp_inifile; // ini 파일을 읽기 위한 파일 포인터 + int sz_filename; // ini 파일의 전체 이름 크기 - if ( 0 != access( filename, F_OK | R_OK)) // IniFile ���� Ȯ�� �� �бⰡ �������� Ȯ�� + if ( 0 != access( filename, F_OK | R_OK)) // IniFile 존재 확인 및 읽기가 가능한지 확인 { - fp_inifile = fopen( filename, "w"); // ������ ���ٸ� ���� ������ ���������� Ȯ���Ѵ�. - if ( NULL == fp_inifile) // ���� ������ �����ߴٸ� �����ڵ� ��ȯ + fp_inifile = fopen( filename, "w"); // 파일이 없다면 파일 생성이 가능한지를 확인한다. + if ( NULL == fp_inifile) // 파일 생성에 실패했다면 에러코드 반환 { - ini_error_code = INIERR_ACCESS_FAIL; // �����ڵ�: ���� ���� ���� ���� + ini_error_code = INIERR_ACCESS_FAIL; // 에러코드: 파일 열기 실패 지정 return NULL; } fclose( fp_inifile); } - inifile = malloc( sizeof( inifile_t)); // ini ���� ��ü ���� - if ( NULL == inifile) // ��ü�� ���� �� �Ҵ翡 �����ϸ� + inifile = malloc( sizeof( inifile_t)); // ini 파일 객체 생성 + if ( NULL == inifile) // 객체를 위한 메모리 할당에 실패하면 { - ini_error_code = INIERR_OUT_OF_MEMORY; // �����ڵ� ���� + ini_error_code = INIERR_OUT_OF_MEMORY; // 에러코드 지정 return NULL; } - inifile->filename = NULL; // �⺻�� ����: ���� �̸� ������ ���� �� �Ǿ� ���� + inifile->filename = NULL; // 기본값 지정: 파일 이름 지정이 아직 안 되어 있음 inifile->lst_sections = NULL; // - inifile->is_changed = INI_FALSE; // �⺻�� ����: ����� ������ ���� + inifile->is_changed = INI_FALSE; // 기본값 지정: 변경된 내용이 없음 - sz_filename = strlen( filename); // ���� �̸��� ��ü ������ �����Ѵ�. + sz_filename = strlen( filename); // 파일 이름을 객체 정보에 저장한다. if ( 0 == sz_filename) { ini_free( inifile); @@ -804,29 +804,29 @@ inifile_t *ini_create( char *filename) return NULL; } inifile->filename = malloc( sz_filename+1); - if ( NULL == inifile->filename) // �� �Ҵ翡 �����ߴٸ� ���� ó���Ѵ�. + if ( NULL == inifile->filename) // 메모리 할당에 실패했다면 에러 처리한다. { ini_free( inifile); ini_error_code = INIERR_OUT_OF_MEMORY; return NULL; } memcpy( inifile->filename, filename, sz_filename+1); - inifile->lst_sections = tstrlist_create(); // ��Ʈ ������ ���� - if ( NULL == inifile->lst_sections) // ��Ʈ ������ ���� ��Ʈ�� ����Ʈ�� �������� ���ߴٸ� + inifile->lst_sections = tstrlist_create(); // 루트 섹션을 생성 + if ( NULL == inifile->lst_sections) // 루트 섹션을 위한 스트링 리스트를 생성하지 못했다면 { ini_free( inifile); - ini_error_code = INIERR_CREATE_SECTION_FAIL; // �����ڵ�: ��Ʈ ���� ����Ʈ ���� + ini_error_code = INIERR_CREATE_SECTION_FAIL; // 에러코드: 루트 섹션 리스트 생성 return NULL; } - fp_inifile = fopen( filename, "r"); // IniFile�� ������ ���⸦ �� - if ( NULL == fp_inifile) // ���� ���� ���� + fp_inifile = fopen( filename, "r"); // IniFile의 파일을 열기를 함 + if ( NULL == fp_inifile) // 파일 열기 실패 { ini_free( inifile); - ini_error_code = INIERR_ACCESS_FAIL; // �����ڵ�: ���� ���� ���� ���� + ini_error_code = INIERR_ACCESS_FAIL; // 에러코드: 파일 열기 실패 지정 return NULL; } - read_inifile_data( fp_inifile, inifile); // IniFile ������ ��� �о� ���� + read_inifile_data( fp_inifile, inifile); // IniFile 내용을 모두 읽어 들임 fclose( fp_inifile); return inifile; diff --git a/app/app-prime-modbus/lib/common/tlist.c b/app/app-prime-modbus/lib/common/tlist.c index e3aba83..3ad4180 100644 --- a/app/app-prime-modbus/lib/common/tlist.c +++ b/app/app-prime-modbus/lib/common/tlist.c @@ -1,17 +1,17 @@ /** @file tlist.c @date 1997/10/7 - @author ����â frog@falinux.com FALinux.Co.,Ltd. + @author 유영창 frog@falinux.com FALinux.Co.,Ltd. @brief Ver 1.0.1 - Delphi ������ ����Ʈ ��ü�̴�. + Delphi 형식의 리스트 객체이다. @modify - ����� (2012/2/7, Ver 1.0.2) - - tlist_clear() ���� ���� ���� (���� �߿���) + 오재경 (2012/2/7, Ver 1.0.2) + - tlist_clear() 해제 에러 수정 (아주 중요함) - ����� (2009/1/14, Ver 1.0.1) - - �ε��� �����Լ� �߰� - - ������ ��� return �ڵ� �߰� + 오재경 (2009/1/14, Ver 1.0.1) + - 인덱스 에러함수 추가 + - 에러일 경우 return 코드 추가 @todo @bug @@ -19,11 +19,11 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -49,8 +49,8 @@ char desc_tlist[] = "falinux tlist ver 1.0.1"; //------------------------------------------------------------------------------ -/** @brief �����Լ� - @param that ���� ��ü�� ������ +/** @brief 에러함수 + @param that 관리 객체의 포인터 *///---------------------------------------------------------------------------- void tlist_error ( tlist *that ) { @@ -58,9 +58,9 @@ void tlist_error ( tlist *that ) // exit( 1 ); } //------------------------------------------------------------------------------ -/** @brief �ε��� �������� - @param that ���� ��ü�� ������ - @param index �����ε��� +/** @brief 인덱스 범위에러 + @param that 관리 객체의 포인터 + @param index 에러인덱스 *///---------------------------------------------------------------------------- void tlist_error_index ( tlist *that, int index ) { @@ -68,8 +68,8 @@ void tlist_error_index ( tlist *that, int index ) // exit( 1 ); } //------------------------------------------------------------------------------ -/** @brief tlist ��ü�� �����Ѵ�. - @return ��ü�� ������ +/** @brief tlist 객체를 생성한다. + @return 객체의 포인터 *///---------------------------------------------------------------------------- tlist* tlist_create ( void ) { @@ -85,8 +85,8 @@ tlist* tlist_create ( void ) } //------------------------------------------------------------------------------ -/** @brief tlist ��ü�� �Ҹ��Ų��. - @param *that ���� ��ü�� ������ +/** @brief tlist 객체를 소멸시킨다. + @param *that 관리 객체의 포인터 *///---------------------------------------------------------------------------- void tlist_free ( tlist *that ) { @@ -95,10 +95,10 @@ void tlist_free ( tlist *that ) } //------------------------------------------------------------------------------ -/** @brief �������� �߰��Ѵ�. - @param that ���� ��ü�� ������ - @param item ������ �߰��Ǵ� ������ ������ - @return �߰��� �������� �ε��� +/** @brief 아이템을 추가한다. + @param that 관리 객체의 포인터 + @param item 새로이 추가되는 아이템 포인터 + @return 추가된 아이템의 인덱스 *///---------------------------------------------------------------------------- int tlist_add ( tlist *that, void *item ) { @@ -113,8 +113,8 @@ int tlist_add ( tlist *that, void *item ) return result; } //------------------------------------------------------------------------------ -/** @brief ��� �������� �����Ѵ�. - @param that ���� ��ü�� ������ +/** @brief 모든 아이템을 제거한다. + @param that 관리 객체의 포인터 *///---------------------------------------------------------------------------- void tlist_clear ( tlist *that ) { @@ -127,9 +127,9 @@ void tlist_clear ( tlist *that ) that->fcapacity = 0; } //------------------------------------------------------------------------------ -/** @brief �ϳ��� �������� �����Ѵ�. - @param that ���� ��ü�� ������ - @param index ���ŵ� �������� �ε��� +/** @brief 하나의 아이템을 제거한다. + @param that 관리 객체의 포인터 + @param index 제거될 아이템의 인덱스 *///---------------------------------------------------------------------------- void tlist_delete ( tlist *that, int index ) { @@ -145,10 +145,10 @@ void tlist_delete ( tlist *that, int index ) ( that->fcount - index ) * sizeof( void * ) ); } //------------------------------------------------------------------------------ -/** @brief 2���� ������ ��ġ�� ��ȯ�Ѵ�. - @param that ���� ��ü�� ������ - @param index1 ��ȯ�� �ε���1 - @param index2 ��ȯ�� �ε���2 +/** @brief 2개의 아이템 위치를 교환한다. + @param that 관리 객체의 포인터 + @param index1 교환할 인덱스1 + @param index2 교환할 인덱스2 *///---------------------------------------------------------------------------- void tlist_exchange ( tlist *that, int index1, int index2 ) { @@ -166,9 +166,9 @@ void tlist_exchange ( tlist *that, int index1, int index2 ) that->flist[ index2 ] = item; } //------------------------------------------------------------------------------ -/** @brief ������ Ǯ�� �뷮�� Ȯ���Ѵ�. - @param that ���� ��ü�� ������ - @return ��ü�� ������ +/** @brief 아이템 풀의 용량을 확장한다. + @param that 관리 객체의 포인터 + @return 객체의 포인터 *///---------------------------------------------------------------------------- tlist *tlist_expand ( tlist *that ) { @@ -176,19 +176,19 @@ tlist *tlist_expand ( tlist *that ) return that; } //------------------------------------------------------------------------------ -/** @brief ù��° ������ ������ �����ش�. - @param that ���� ��ü�� ������ - @return ù��° ������ ������ +/** @brief 첫번째 아이템 포인터를 돌려준다. + @param that 관리 객체의 포인터 + @return 첫번째 아이템 포인터 *///---------------------------------------------------------------------------- void *tlist_first ( tlist *that ) { return tlist_get( that, 0 ); } //------------------------------------------------------------------------------ -/** @brief �ε����� �ش��ϴ� ������ ������ �����ش�. - @param that ���� ��ü�� ������ - @param index ������ �ε��� - @return �ε����� �ش��ϴ� ������ ������ +/** @brief 인덱스에 해당하는 아이템 포인터를 돌려준다. + @param that 관리 객체의 포인터 + @param index 아이템 인덱스 + @return 인덱스에 해당하는 아이템 포인터 *///---------------------------------------------------------------------------- void* tlist_get ( tlist *that, int index ) { @@ -200,8 +200,8 @@ void* tlist_get ( tlist *that, int index ) return( that->flist[ index ] ); } //------------------------------------------------------------------------------ -/** @brief �������� �� �� ������Ų��. - @param that ���� ��ü�� ������ +/** @brief 아이템이 들어갈 메모리를 증가시킨다. + @param that 관리 객체의 포인터 *///---------------------------------------------------------------------------- void tlist_grow ( tlist *that ) { @@ -214,10 +214,10 @@ void tlist_grow ( tlist *that ) tlist_setcapacity( that, that->fcapacity + delta ); } //------------------------------------------------------------------------------ -/** @brief ������ �����Ͱ� ������ �������� �ε����� ���Ѵ�. - @param that ���� ��ü�� ������ - @param index ������ ������ - @return ������ �����Ͱ� �ش�Ǵ� �ε��� +/** @brief 아이템 포인터가 동일한 포인터의 인덱스를 구한다. + @param that 관리 객체의 포인터 + @param index 아이템 포인터 + @return 아이템 포인터가 해당되는 인덱스 *///---------------------------------------------------------------------------- int tlist_indexof ( tlist *that, void *item ) { @@ -228,10 +228,10 @@ int tlist_indexof ( tlist *that, void *item ) return result; } //------------------------------------------------------------------------------ -/** @brief �������� Ư�� ��ġ�� �߰��Ѵ�. - @param that ���� ��ü�� ������ - @param index �߰��� �����۰� �� �ε��� - @param item �߰��� ������ ������ +/** @brief 아이템을 특정 위치에 추가한다. + @param that 관리 객체의 포인터 + @param index 추가할 아이템가 들어갈 인덱스 + @param item 추가할 아이템 포인터 *///---------------------------------------------------------------------------- void tlist_insert ( tlist *that, int index, void *item ) { @@ -249,19 +249,19 @@ void tlist_insert ( tlist *that, int index, void *item ) that->fcount++; } //------------------------------------------------------------------------------ -/** @brief ������ ������ ������ ���Ѵ�. - @param that ���� ��ü�� ������ - @return ������ ������ ������ +/** @brief 마지막 아이템 포인터를 구한다. + @param that 관리 객체의 포인터 + @return 마지막 아이템 포인터 *///---------------------------------------------------------------------------- void *tlist_last ( tlist *that ) { return( tlist_get( that, that->fcount -1 ) ); } //------------------------------------------------------------------------------ -/** @brief Ư�� �������� ��ġ(�ε���)�� �����Ѵ�. - @param that ���� ��ü�� ������ - @param curindex ������ �������� �ε��� - @param newindex ����� �������� �ε��� +/** @brief 특정 아이템의 위치(인덱스)를 변경한다. + @param that 관리 객체의 포인터 + @param curindex 변경할 아이템의 인덱스 + @param newindex 변경될 아이템의 인덱스 *///---------------------------------------------------------------------------- void tlist_move ( tlist *that, int curindex, int newindex ) { @@ -280,10 +280,10 @@ void tlist_move ( tlist *that, int curindex, int newindex ) } } //------------------------------------------------------------------------------ -/** @brief Ư���������� ������ �����Ѵ�. - @param that ���� ��ü�� ������ - @param index �����۰� ����� �ε��� - @param item ���� ����� ������ ������ +/** @brief 특정아이템의 포인터를 변경한다. + @param that 관리 객체의 포인터 + @param index 아이템가 변경될 인덱스 + @param item 새로 변경될 아이템 포인터 *///---------------------------------------------------------------------------- void tlist_put ( tlist *that, int index, void *item ) { @@ -296,10 +296,10 @@ void tlist_put ( tlist *that, int index, void *item ) that->flist[ index ] = item; } //------------------------------------------------------------------------------ -/** @brief ���ڷ� ������ ������ ������ ������ ã�� �����Ѵ�. - @param that ���� ��ü�� ������ - @param item ������ �������� ������ - @return ������ �������� ���� �ε��� +/** @brief 인자로 전해준 동일한 아이템 포인터를 찾아 삭제한다. + @param that 관리 객체의 포인터 + @param item 삭제할 아이템의 포인터 + @return 삭제된 아이템의 과거 인덱스 *///---------------------------------------------------------------------------- int tlist_remove ( tlist *that, void *item ) { @@ -309,10 +309,10 @@ int tlist_remove ( tlist *that, void *item ) return result; } //------------------------------------------------------------------------------ -/** @brief �� ������ ���� ������� �ʴ� �� ��ȯ�Ѵ�. - @param that ���� ��ü�� ������ - @remark ���� �� ��ȯ���� �ʴ´�. - @todo �� ��ȯ�ϵ��� ���ۼ��Ǿ�� �Ѵ�. +/** @brief 메모리 관리를 위해 사용하지 않는 메모리를 반환한다. + @param that 관리 객체의 포인터 + @remark 실제 메모리를 반환하지 않는다. + @todo 메모리를 반환하도록 재작성되어야 한다. *///---------------------------------------------------------------------------- void tlist_pack ( tlist *that ) { @@ -321,9 +321,9 @@ void tlist_pack ( tlist *that ) if( tlist_get( that, loop ) == NULL ) tlist_delete( that, loop ); } //------------------------------------------------------------------------------ -/** @brief ������ �� �ִ� ������ Ǯ�� �뷮�� �����ϰ� �� �� �Ҵ��Ѵ�. - @param that ���� ��ü�� ������ - @param newcapacity �Ҵ��ؾ��� ������ Ǯ�� �뷮 +/** @brief 관리할 수 있는 아이템 풀의 용량을 설정하고 메모리를 재 할당한다. + @param that 관리 객체의 포인터 + @param newcapacity 할당해야할 아이템 풀의 용량 *///---------------------------------------------------------------------------- void tlist_setcapacity( tlist *that, int newcapacity ) { @@ -340,9 +340,9 @@ void tlist_setcapacity( tlist *that, int newcapacity ) } } //------------------------------------------------------------------------------ -/** @brief ������ �� �ִ� �������� ������ �����ϸ� �������� ������ ������ ������ �����Ѵ�. - @param that ���� ��ü�� ������ - @param newcount ����Ǵ� �������� ���� +/** @brief 관리할 수 있는 아이템의 개수를 설정하며 아이템의 개수를 설정된 값으로 변경한다. + @param that 관리 객체의 포인터 + @param newcount 변경되는 아이템의 개수 *///---------------------------------------------------------------------------- void tlist_setcount ( tlist *that, int newcount ) { @@ -357,27 +357,27 @@ void tlist_setcount ( tlist *that, int newcount ) that->fcount = newcount; } //------------------------------------------------------------------------------ -/** @brief ������Ǯ�� ũ�⸦ ��´�. - @param that ���� ��ü�� ������ - @return ������Ǯ�� ũ�� +/** @brief 아이템풀의 크기를 얻는다. + @param that 관리 객체의 포인터 + @return 아이템풀의 크기 *///---------------------------------------------------------------------------- int tlist_getcapacity ( tlist *that ) { return that->fcapacity; } //------------------------------------------------------------------------------ -/** @brief �������� ������ ��´�. - @param that ���� ��ü�� ������ - @return �������� ���� +/** @brief 아이템의 개수를 얻는다. + @param that 관리 객체의 포인터 + @return 아이템의 개수 *///---------------------------------------------------------------------------- int tlist_getcount ( tlist *that ) { return that->fcount; } //------------------------------------------------------------------------------ -/** @brief �������� ����� ���Լ��� ���� �����Ѵ�. - @param that ���� ��ü�� ������ - @param tlistsortcomparefunc ����ں� �ݹ��Լ��̸�, int (*func)(const void *, const void *) �����̴�. +/** @brief 아이템을 사용자 비교함수를 통해 정렬한다. + @param that 관리 객체의 포인터 + @param tlistsortcomparefunc 사용자비교 콜백함수이며, int (*func)(const void *, const void *) 형태이다. *///---------------------------------------------------------------------------- void tlist_sort ( tlist *that,int (*tlistsortcomparefunc)(const void *, const void *) ) { diff --git a/app/app-prime-modbus/lib/common/tmmap.c b/app/app-prime-modbus/lib/common/tmmap.c index e5bcf83..96a7fec 100644 --- a/app/app-prime-modbus/lib/common/tmmap.c +++ b/app/app-prime-modbus/lib/common/tmmap.c @@ -1,17 +1,17 @@ /** @file tmmap.c @date 2009/07/06 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief mmap �� �ٷ�� �Լ��� ��üȭ �Ͽ���. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief mmap 를 다루는 함수를 객체화 하였다. - @todo ��Ʈ �Լ��� ���� ������ �ʾҴ�. + @todo 테스트 함수를 아직 만들지 않았다. @bug @remark @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -32,24 +32,24 @@ #include <tmmap.h> -/// mmap �� ���� ���� ���� ����ü +/// mmap 를 위한 개별 관리 구조체 typedef struct { - int dev; // /dev/mem �����ڵ� - unsigned long phys; // �����ּ� - unsigned long size; // ũ�� - int base_ofs; // ���̽� �ּҰ� 4K ������ ���� �ʾ����� ��� + int dev; // /dev/mem 파일핸들 + unsigned long phys; // 물리주소 + unsigned long size; // 크기 + int base_ofs; // 베이스 주소가 4K 정렬이 되지 않았을때 사용 - void *virt; // �Ҵ���� �������� + void *virt; // 할당받은 메모리포인터 } mmap_alloc_t; -static tlist *ma_list = NULL; /// mmap ���� ����Ʈ +static tlist *ma_list = NULL; /// mmap 관리 리스트 //------------------------------------------------------------------------------ -/** @brief mmap �����Լ� +/** @brief mmap 생성함수 @param base @param size *///---------------------------------------------------------------------------- @@ -60,17 +60,17 @@ void *tmmap_alloc( unsigned long phys_base, unsigned long size ) void *mmap_mem; mmap_alloc_t *ma; - // ���� ����Ʈ�� �����Ѵ�. + // 관리 리스트를 생성한다. if ( NULL == ma_list ) { ma_list = tlist_create(); } - // 4K ���� �ּҷ� �����Ѵ�. + // 4K 정렬 주소로 변경한다. base_ofs = phys_base & (PAGE_SIZE-1); phys_base &= ~(PAGE_SIZE-1); - // 4K ������ �� �Ҵ�´�. + // 4K 단위의 메모리를 할당받는다. size = PAGE_SIZE * ( (size + base_ofs + (PAGE_SIZE-1))/(PAGE_SIZE) ); dev_mem = open( "/dev/mem", O_RDWR|O_SYNC ); @@ -80,12 +80,12 @@ void *tmmap_alloc( unsigned long phys_base, unsigned long size ) return NULL; } - // mmap �� �����Ѵ�. - mmap_mem = mmap( 0, // Ŀ�ο��� �˾Ƽ� �Ҵ��û - size, // �Ҵ� ũ�� - PROT_READ|PROT_WRITE, MAP_SHARED, // �Ҵ� �Ӽ� - dev_mem, // ���� �ڵ� - phys_base ); // ���� ����� �����ּ� + // mmap 로 맵핑한다. + mmap_mem = mmap( 0, // 커널에서 알아서 할당요청 + size, // 할당 크기 + PROT_READ|PROT_WRITE, MAP_SHARED, // 할당 속성 + dev_mem, // 파일 핸들 + phys_base ); // 매핑 대상의 물리주소 if ( !mmap_mem ) @@ -94,7 +94,7 @@ void *tmmap_alloc( unsigned long phys_base, unsigned long size ) return NULL; } - // ���� ������ ���� ����ü�� �Ҵ��Ѵ�. + // 개별 관리를 위한 구조체를 할당한다. ma = (mmap_alloc_t *)malloc( sizeof(mmap_alloc_t) ); ma->dev = dev_mem; ma->phys = phys_base; @@ -102,15 +102,15 @@ void *tmmap_alloc( unsigned long phys_base, unsigned long size ) ma->virt = mmap_mem; ma->base_ofs = base_ofs; - // ���� ����Ʈ�� ����Ѵ�. + // 관리 리스트에 등록한다. tlist_add( ma_list, (void *)ma ); return mmap_mem + base_ofs; } //------------------------------------------------------------------------------ -/** @brief mmap�� ȹ���� �� ������ �̿��Ͽ� ���� ����ü�� ��´�. - @param virt mmap �� ȹ���� �� ������ - @return �ε��� +/** @brief mmap로 획드한 메모리 포인터를 이용하여 관리 구조체를 얻는다. + @param virt mmap 로 획드한 메모리 포인터 + @return 인덱스 *///---------------------------------------------------------------------------- static int tmmap_get_index( void *virt ) { @@ -124,7 +124,7 @@ static int tmmap_get_index( void *virt ) { ma = (mmap_alloc_t *)tlist_get( ma_list, idx ); - // ����� ������ �ּ����� Ȯ���Ѵ�. + // 가상메모리가 동일한 주소인지 확인한다. if( (ma->virt + ma->base_ofs) == virt ) { return idx; @@ -135,8 +135,8 @@ static int tmmap_get_index( void *virt ) return -1; } //------------------------------------------------------------------------------ -/** @brief mmap ������ �����Ѵ�. - @param mem mmap �� ȹ���� �� ������ +/** @brief mmap 포인터를 해제한다. + @param mem mmap 로 획드한 메모리 포인터 *///---------------------------------------------------------------------------- void tmmap_free( void *mem ) { @@ -145,7 +145,7 @@ void tmmap_free( void *mem ) if ( ma_list && mem ) { - // �ش��ϴ� �������� ã�� �� �����Ѵ�. + // 해당하는 아이템을 찾아 메모리를 해제한다. idx = tmmap_get_index( mem ); if ( 0 <= idx ) { @@ -158,7 +158,7 @@ void tmmap_free( void *mem ) tlist_delete( ma_list, idx ); } - // �������� ���ٸ� �����ڵ� �����Ѵ�. + // 아이템이 없다면 관리자도 해제한다. if ( 0 >= tlist_getcount( ma_list ) ) { tlist_free( ma_list ); diff --git a/app/app-prime-modbus/lib/common/tstrlist.c b/app/app-prime-modbus/lib/common/tstrlist.c index 6d90750..4e6d334 100644 --- a/app/app-prime-modbus/lib/common/tstrlist.c +++ b/app/app-prime-modbus/lib/common/tstrlist.c @@ -1,16 +1,16 @@ /** @file tstrlist.c @date 2009/1/14 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. @brief Ver 0.9.1 - Delphi ������ ��Ʈ������Ʈ ��ü�̴�. - tlist.c ���� ������ tlist �� ���(?) �� ����Ѵ�. + Delphi 형식의 스트링리스트 객체이다. + tlist.c 에서 구현한 tlist 를 상속(?) 받아 사용한다. @modify @todo @bug - @remark �Լ� ��Ʈ �ʿ� (��Ʈ �Ϸ�ǥ�� ">>") + @remark 함수 테스트 필요 (테스트 완료표시 ">>") >>tstrlist_create >>tstrlist_free @@ -40,12 +40,12 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -70,47 +70,47 @@ char desc_tstrlist[] = "falinux tstrlist ver 0.9.0"; /// @{ -/// @brief local �Լ�����Ʈ -static int tstrlist_calcu_strcap( const char *str ); /// �Ҵ��� ���ڿ��� ������ ����Ѵ�. -static tstritem *tstrlist_newitem( const char *str ); /// ���ο� ���ڿ� �������� �����Ѵ�. -static tstritem *tstrlist_replace_itemstr( tstritem *sitem, const char *str ); /// ���ڿ� �������� ���ڿ��� �����Ѵ�. -static int tstrlist_sortfunc( const void *ppa, const void *ppb ); /// ���ڿ� ������ ���� ũ�⸦ ���Ѵ�. +/// @brief local 함수리스트 +static int tstrlist_calcu_strcap( const char *str ); /// 할당할 문자열의 공간을 계산한다. +static tstritem *tstrlist_newitem( const char *str ); /// 새로운 문자열 아이템을 생성한다. +static tstritem *tstrlist_replace_itemstr( tstritem *sitem, const char *str ); /// 문자열 아이템의 문자열을 변경한다. +static int tstrlist_sortfunc( const void *ppa, const void *ppb ); /// 문자열 정렬을 위해 크기를 비교한다. /// @} static void trim( char *str) -// ����: �μ��� ���� ���ڿ����� �հ� ���� ���� ���ڸ� �����Ѵ�. +// 설명: 인수로 받은 문자열에서 앞과 뒤의 공백 문자를 제거한다. { int sz_str; int ndx; sz_str = strlen( str); - for( ndx = sz_str; 0 <= ndx; ndx--) // ���ڿ� ���� ȭ��Ʈ ���ڸ� ���� + for( ndx = sz_str; 0 <= ndx; ndx--) // 문자열 뒤의 화이트 문자를 제거 { - if ( ' ' != str[ndx]) break; // �ѱ��� ���� ��츦 �����ؼ� ' ' ���ڸ� ���� ���Ѵ�. + if ( ' ' != str[ndx]) break; // 한글이 있을 경우를 생각해서 ' ' 문자를 직접 비교한다. str[ndx] = '\0'; } - sz_str = strlen( str); // ���ڿ� ���� ȭ��Ʈ ���ڸ� ���� + sz_str = strlen( str); // 문자열 앞의 화이트 문자를 제거 for( ndx = 0; ndx < sz_str; ndx++) { - if ( ' ' != str[ndx]) // �ѱ��� ���� ��츦 �����ؼ� ' ' ���ڸ� ���� ���Ѵ�. + if ( ' ' != str[ndx]) // 한글이 있을 경우를 생각해서 ' ' 문자를 직접 비교한다. break; } - memcpy( str, str+ndx, strlen( str)); // ȸ��Ʈ ���ڰ� �ƴ� �κ��� �������� ���� ��ġ�� �̵� + memcpy( str, str+ndx, strlen( str)); // 회이트 문자가 아닌 부분을 포인터의 시작 위치로 이동 } //------------------------------------------------------------------------------ -/** @brief ���ڿ����� �յ��� Ư�����ڿ� ���鹮�ڸ� �����Ѵ�. - @param line ���ڿ� ������ +/** @brief 문자열에서 앞뒤의 특수문자와 공백문자를 제거한다. + @param line 문자열 포인터 *///---------------------------------------------------------------------------- static void __trimstr( char *line ) { int idx, len; - // ���� ���鹮�ڿ� Ư������ ���� + // 뒷쪽 공백문자와 특수문자 제거 len = strlen(line); for( idx=len-1; idx>=0; idx-- ) { @@ -118,7 +118,7 @@ static void __trimstr( char *line ) } line[idx+1] = '\0'; - // ���� ���鹮�ڿ� Ư������ ���� + // 앞쪽 공백문자와 특수문자 제거 len = strlen(line); for( idx=0; idx<len; idx++ ) { @@ -130,10 +130,10 @@ static void __trimstr( char *line ) } } //------------------------------------------------------------------------------ -/** @brief �Ҵ��� ���ڿ��� ������ ����Ѵ�. - @param str �߰��Ǵ� ���ڿ� ������ - @return �Ҵ��� ���ڿ��� ���� - @remark �ּ� MIN_STR_LEN ����Ʈ�̻��̸� 2�� ����� �����Ѵ�. +/** @brief 할당할 문자열의 공간을 계산한다. + @param str 추가되는 문자열 포인터 + @return 할당할 문자열의 개수 + @remark 최소 MIN_STR_LEN 바이트이상이며 2의 배수로 증가한다. *///---------------------------------------------------------------------------- static int tstrlist_calcu_strcap( const char *str ) { @@ -154,9 +154,9 @@ static int tstrlist_calcu_strcap( const char *str ) return slen; } //------------------------------------------------------------------------------ -/** @brief ���ο� ���ڿ� �������� �����Ѵ�. - @param str �߰��Ǵ� ���ڿ� ������ - @return ������ ���ڿ� ������ ����ü ������ +/** @brief 새로운 문자열 아이템을 생성한다. + @param str 추가되는 문자열 포인터 + @return 생성된 문자열 아이템 구조체 포인터 *///---------------------------------------------------------------------------- static tstritem *tstrlist_newitem( const char *str ) { @@ -176,10 +176,10 @@ static tstritem *tstrlist_newitem( const char *str ) return sitem; } //------------------------------------------------------------------------------ -/** @brief ���ڿ� �������� ���ڿ��� �����Ѵ�. - @param sitem ���ڿ� ������ ����ü�� ������ - @param str ����Ǵ� ���ڿ� ������ - @return ����� �����۱���ü ������ +/** @brief 문자열 아이템의 문자열을 변경한다. + @param sitem 문자열 아이템 구조체의 포인터 + @param str 변경되는 문자열 포인터 + @return 변경된 아이템구조체 포인터 *///---------------------------------------------------------------------------- static tstritem *tstrlist_replace_itemstr( tstritem *sitem, const char *str ) { @@ -207,8 +207,8 @@ static tstritem *tstrlist_replace_itemstr( tstritem *sitem, const char *str ) //------------------------------------------------------------------------------ -/** @brief tstrlist ��ü�� �����Ѵ�. - @return ��ü�� ������ +/** @brief tstrlist 객체를 생성한다. + @return 객체의 포인터 *///---------------------------------------------------------------------------- tstrlist* tstrlist_create ( void ) { @@ -220,8 +220,8 @@ tstrlist* tstrlist_create ( void ) return that; } //------------------------------------------------------------------------------ -/** @brief tstrlist ��ü�� �Ҹ��Ų��. - @param *that ���� ��ü�� ������ +/** @brief tstrlist 객체를 소멸시킨다. + @param *that 관리 객체의 포인터 *///---------------------------------------------------------------------------- void tstrlist_free ( tstrlist *that ) { @@ -230,8 +230,8 @@ void tstrlist_free ( tstrlist *that ) free( that ); } //------------------------------------------------------------------------------ -/** @brief ��� �������� �����Ѵ�. - @param that ���� ��ü�� ������ +/** @brief 모든 아이템을 제거한다. + @param that 관리 객체의 포인터 *///---------------------------------------------------------------------------- void tstrlist_clear ( tstrlist *that ) { @@ -239,7 +239,7 @@ void tstrlist_clear ( tstrlist *that ) void *ptr; tlist *tlst = that->ftlst; - // ���ڿ� ��ü�� �����Ѵ�. + // 문자열 객체를 해제한다. for (loop=0; loop<tlst->fcount; loop++) { ptr = tlist_get( tlst, loop ); @@ -249,10 +249,10 @@ void tstrlist_clear ( tstrlist *that ) tlist_clear( tlst ); } //------------------------------------------------------------------------------ -/** @brief ���ڿ� �������� �߰��Ѵ�. - @param that ���� ��ü�� ������ - @param str ������ �߰��Ǵ� ���ڿ� ������ - @return �߰��� �������� �ε��� +/** @brief 문자열 아이템을 추가한다. + @param that 관리 객체의 포인터 + @param str 새로이 추가되는 문자열 포인터 + @return 추가된 아이템의 인덱스 *///---------------------------------------------------------------------------- int tstrlist_add ( tstrlist *that, const char *str ) { @@ -260,17 +260,17 @@ int tstrlist_add ( tstrlist *that, const char *str ) tstritem *sitem; int result; - sitem = tstrlist_newitem( str ); // ���ڿ� ��ü ���� + sitem = tstrlist_newitem( str ); // 문자열 객체 생성 result = tlist_add( tlst, sitem ); return result; } //------------------------------------------------------------------------------ -/** @brief ���ڿ��� ����� ������ �߰��Ѵ�. - @param that ���� ��ü�� ������ - @param str ������ �߰��Ǵ� ���ڿ� ������ - @param pdata ����� ������ - @return �߰��� �������� �ε��� +/** @brief 문자열과 사용자 포인터를 추가한다. + @param that 관리 객체의 포인터 + @param str 새로이 추가되는 문자열 포인터 + @param pdata 사용자 포인터 + @return 추가된 아이템의 인덱스 *///---------------------------------------------------------------------------- int tstrlist_add_object ( tstrlist *that, const char *str, void *obj ) { @@ -286,9 +286,9 @@ int tstrlist_add_object ( tstrlist *that, const char *str, void *obj ) return result; } //------------------------------------------------------------------------------ -/** @brief �ϳ��� �������� �����Ѵ�. - @param that ���� ��ü�� ������ - @param index ���ŵ� �������� �ε��� +/** @brief 하나의 아이템을 제거한다. + @param that 관리 객체의 포인터 + @param index 제거될 아이템의 인덱스 *///---------------------------------------------------------------------------- void tstrlist_delete ( tstrlist *that, int index ) { @@ -304,10 +304,10 @@ void tstrlist_delete ( tstrlist *that, int index ) tlist_delete( tlst, index ); } //------------------------------------------------------------------------------ -/** @brief �ε����� �ش��ϴ� ���ڿ� ������ ��ȯ�Ѵ�. - @param that ���� ��ü�� ������ - @param index ������ �ε��� - @return �ε����� �ش��ϴ� ���ڿ� ������ +/** @brief 인덱스에 해당하는 문자열 포인터를 반환한다. + @param that 관리 객체의 포인터 + @param index 아이템 인덱스 + @return 인덱스에 해당하는 문자열 포인터 *///---------------------------------------------------------------------------- char *tstrlist_get_string ( tstrlist *that, int index ) { @@ -322,10 +322,10 @@ char *tstrlist_get_string ( tstrlist *that, int index ) return NULL; } //------------------------------------------------------------------------------ -/** @brief �ε����� �ش��ϴ� ����� ������ ��ȯ�Ѵ�. - @param that ���� ��ü�� ������ - @param index ������ �ε��� - @return �ε����� �ش��ϴ� ����� ������ +/** @brief 인덱스에 해당하는 사용자 포인터를 반환한다. + @param that 관리 객체의 포인터 + @param index 아이템 인덱스 + @return 인덱스에 해당하는 사용자 포인터 *///---------------------------------------------------------------------------- void *tstrlist_get_object ( tstrlist *that, int index ) { @@ -340,10 +340,10 @@ void *tstrlist_get_object ( tstrlist *that, int index ) return NULL; } //------------------------------------------------------------------------------ -/** @brief �ε����� �ش��ϴ� ������ �±����� ��ȯ�Ѵ�. - @param that ���� ��ü�� ������ - @param index ������ �ε��� - @return �ε����� �ش��ϴ� ������ �±��� +/** @brief 인덱스에 해당하는 정수형 태그변수를 반환한다. + @param that 관리 객체의 포인터 + @param index 아이템 인덱스 + @return 인덱스에 해당하는 정수형 태그변수 *///---------------------------------------------------------------------------- int tstrlist_get_tag ( tstrlist *that, int index ) { @@ -359,10 +359,10 @@ int tstrlist_get_tag ( tstrlist *that, int index ) return -1; } //------------------------------------------------------------------------------ -/** @brief 2���� ������ ��ġ�� ��ȯ�Ѵ�. - @param that ���� ��ü�� ������ - @param index1 ��ȯ�� �ε���1 - @param index2 ��ȯ�� �ε���2 +/** @brief 2개의 아이템 위치를 교환한다. + @param that 관리 객체의 포인터 + @param index1 교환할 인덱스1 + @param index2 교환할 인덱스2 *///---------------------------------------------------------------------------- void tstrlist_exchange ( tstrlist *that, int index1, int index2 ) { @@ -371,10 +371,10 @@ void tstrlist_exchange ( tstrlist *that, int index1, int index2 ) tlist_exchange( tlst, index1, index2 ); } //------------------------------------------------------------------------------ -/** @brief ���ڿ��� ������ �ε����� ���Ѵ�. - @param that ���� ��ü�� ������ - @param str �� ���ڿ� ������ - @return ���ڿ��� �ش�Ǵ� �ε���, �������� ������ -1 +/** @brief 문자열이 동일한 인덱스를 구한다. + @param that 관리 객체의 포인터 + @param str 비교 문자열 포인터 + @return 문자열이 해당되는 인덱스, 존재하지 않으면 -1 *///---------------------------------------------------------------------------- int tstrlist_indexof ( tstrlist *that, const char *str ) { @@ -395,32 +395,32 @@ int tstrlist_indexof ( tstrlist *that, const char *str ) return -1; } //------------------------------------------------------------------------------ -/** @brief �������� Ư�� ��ġ�� �߰��Ѵ�. - @param that ���� ��ü�� ������ - @param index �߰��� �����۰� �� �ε��� - @param str �߰��� ���ڿ� ������ +/** @brief 아이템을 특정 위치에 추가한다. + @param that 관리 객체의 포인터 + @param index 추가할 아이템가 들어갈 인덱스 + @param str 추가할 문자열 포인터 *///---------------------------------------------------------------------------- void tstrlist_insert ( tstrlist *that, int index, char *str ) { tlist *tlst = that->ftlst; tstritem *sitem; - sitem = tstrlist_newitem( str ); // ���ڿ� ��ü ���� + sitem = tstrlist_newitem( str ); // 문자열 객체 생성 tlist_insert( tlst, index, sitem ); } //------------------------------------------------------------------------------ -/** @brief ù��° ���ڿ� ������ �����ش�. - @param that ���� ��ü�� ������ - @return ù��° ���ڿ� ������ +/** @brief 첫번째 문자열 포인터를 돌려준다. + @param that 관리 객체의 포인터 + @return 첫번째 문자열 포인터 *///---------------------------------------------------------------------------- char *tstrlist_first ( tstrlist *that ) { return tstrlist_get_string( that, 0 ); } //------------------------------------------------------------------------------ -/** @brief ������ ���ڿ� ������ ���Ѵ�. - @param that ���� ��ü�� ������ - @return ������ ���ڿ� ������ +/** @brief 마지막 문자열 포인터를 구한다. + @param that 관리 객체의 포인터 + @return 마지막 문자열 포인터 *///---------------------------------------------------------------------------- char *tstrlist_last ( tstrlist *that ) { @@ -429,10 +429,10 @@ char *tstrlist_last ( tstrlist *that ) return tstrlist_get_string( that, tlst->fcount-1 ); } //------------------------------------------------------------------------------ -/** @brief Ư�� �������� ��ġ(�ε���)�� �����Ѵ�. - @param that ���� ��ü�� ������ - @param curindex ������ �������� �ε��� - @param newindex ����� �������� �ε��� +/** @brief 특정 아이템의 위치(인덱스)를 변경한다. + @param that 관리 객체의 포인터 + @param curindex 변경할 아이템의 인덱스 + @param newindex 변경될 아이템의 인덱스 *///---------------------------------------------------------------------------- void tstrlist_move ( tstrlist *that, int curindex, int newindex ) { @@ -441,10 +441,10 @@ void tstrlist_move ( tstrlist *that, int curindex, int newindex ) tlist_move( tlst, curindex, newindex ); } //------------------------------------------------------------------------------ -/** @brief Ư���������� ���ڿ��� �����Ѵ�. - @param that ���� ��ü�� ������ - @param index ���ڿ��� ����� �ε��� - @param str ���� ����� ���ڿ� +/** @brief 특정아이템의 문자열을 변경한다. + @param that 관리 객체의 포인터 + @param index 문자열이 변경될 인덱스 + @param str 새로 변경될 문자열 *///---------------------------------------------------------------------------- void tstrlist_put_string ( tstrlist *that, int index, char *str ) { @@ -460,10 +460,10 @@ void tstrlist_put_string ( tstrlist *that, int index, char *str ) } } //------------------------------------------------------------------------------ -/** @brief Ư���������� ����� �� ������ �����Ѵ�. - @param that ���� ��ü�� ������ - @param index ����� ������ �ε��� - @param obj ���� ����� ����� ������ +/** @brief 특정아이템의 사용자 메모리 변수를 변경한다. + @param that 관리 객체의 포인터 + @param index 변경될 아이템 인덱스 + @param obj 새로 변경될 사용자 포인터 *///---------------------------------------------------------------------------- void tstrlist_put_object ( tstrlist *that, int index, void *obj ) { @@ -477,10 +477,10 @@ void tstrlist_put_object ( tstrlist *that, int index, void *obj ) } } //------------------------------------------------------------------------------ -/** @brief Ư���������� �±����� �����Ѵ�. - @param that ���� ��ü�� ������ - @param index �±װ� ����� �ε��� - @param tag ���� ����� ������ �±��� +/** @brief 특정아이템의 태그변수를 변경한다. + @param that 관리 객체의 포인터 + @param index 태그가 변경될 인덱스 + @param tag 새로 변경될 정수형 태그변수 *///---------------------------------------------------------------------------- void tstrlist_put_tag ( tstrlist *that, int index, int tag ) { @@ -494,10 +494,10 @@ void tstrlist_put_tag ( tstrlist *that, int index, int tag ) } } //------------------------------------------------------------------------------ -/** @brief ���ڷ� ������ ������ ���ڿ��� ã�� �����Ѵ�. - @param that ���� ��ü�� ������ - @param item ������ �������� ������ - @return ������ �������� ���� �ε��� +/** @brief 인자로 전해준 동일한 문자열을 찾아 삭제한다. + @param that 관리 객체의 포인터 + @param item 삭제할 아이템의 포인터 + @return 삭제된 아이템의 과거 인덱스 *///---------------------------------------------------------------------------- int tstrlist_remove ( tstrlist *that, char *str ) { @@ -508,10 +508,10 @@ int tstrlist_remove ( tstrlist *that, char *str ) return result; } //------------------------------------------------------------------------------ -/** @brief �� ������ ���� ������� �ʴ� �� ��ȯ�Ѵ�. - @param that ���� ��ü�� ������ - @remark ���� �� ��ȯ���� �ʴ´�. - @todo �� ��ȯ�ϵ��� ���ۼ��Ǿ�� �Ѵ�. +/** @brief 메모리 관리를 위해 사용하지 않는 메모리를 반환한다. + @param that 관리 객체의 포인터 + @remark 실제 메모리를 반환하지 않는다. + @todo 메모리를 반환하도록 재작성되어야 한다. *///---------------------------------------------------------------------------- void tstrlist_pack ( tstrlist *that ) { @@ -520,9 +520,9 @@ void tstrlist_pack ( tstrlist *that ) tlist_pack( tlst ); } //------------------------------------------------------------------------------ -/** @brief �������� ������ ��´�. - @param that ���� ��ü�� ������ - @return �������� ���� +/** @brief 아이템의 개수를 얻는다. + @param that 관리 객체의 포인터 + @return 아이템의 개수 *///---------------------------------------------------------------------------- int tstrlist_getcount ( tstrlist *that ) { @@ -532,10 +532,10 @@ int tstrlist_getcount ( tstrlist *that ) } //------------------------------------------------------------------------------ -/** @brief ���ڿ� ������ ���� ũ�⸦ ���Ѵ�. - @param astr �� ������ - @param bstr �� ������ - @return ���ڿ� �� +/** @brief 문자열 정렬을 위해 크기를 비교한다. + @param astr 비교 포인터 + @param bstr 비교 포인터 + @return 문자열 비교값 *///---------------------------------------------------------------------------- static int tstrlist_sortfunc( const void *ppa, const void *ppb ) { @@ -547,9 +547,9 @@ static int tstrlist_sortfunc( const void *ppa, const void *ppb ) return strcmp( (*aitem)->fstr, (*bitem)->fstr ); } //------------------------------------------------------------------------------ -/** @brief �������� ����� ���Լ��� ���� �����Ѵ�. - @param that ���� ��ü�� ������ - @param tstrlistsortcomparefunc ����ں� �ݹ��Լ��̸�, int (*func)(const void *, const void *) �����̴�. +/** @brief 아이템을 사용자 비교함수를 통해 정렬한다. + @param that 관리 객체의 포인터 + @param tstrlistsortcomparefunc 사용자비교 콜백함수이며, int (*func)(const void *, const void *) 형태이다. *///---------------------------------------------------------------------------- void tstrlist_sort ( tstrlist *that ) { @@ -560,11 +560,11 @@ void tstrlist_sort ( tstrlist *that ) tlist_sort( tlst, tstrlist_sortfunc ); } //------------------------------------------------------------------------------ -/** @brief ���ڷ� ������ ���ڿ��� �и��Ͽ� ���������� �߰��Ѵ�. - @param that ���� ��ü�� ������ - @param str �и��� ���ڿ� - @return ��ü�� �����ϴ� ������ ���� - @todo ���������̼�(") ���� �ο��� ���ڿ� �и��� �ʿ��ϴ�. +/** @brief 인자로 전해준 문자열을 분리하여 아이템으로 추가한다. + @param that 관리 객체의 포인터 + @param str 분리할 문자열 + @return 객체가 관리하는 아이템 개수 + @todo 더블쿼테이션(") 으로 싸여진 문자열 분리가 필요하다. *///---------------------------------------------------------------------------- int tstrlist_commatext ( tstrlist *that, char *str ) { @@ -581,7 +581,7 @@ int tstrlist_commatext ( tstrlist *that, char *str ) tstrlist_add( that, buff); } - ndx_buff = 0; // ���ۿ� ���ڸ� ���� ��ġ�� 0���� �ʱ�ȭ + ndx_buff = 0; // 버퍼에 문자를 넣을 위치를 0으로 초기화 for ( ndx_sour = 0; ndx_sour < strlen( str); ndx_sour++) { if ( '\0' == ch_division) @@ -590,19 +590,19 @@ int tstrlist_commatext ( tstrlist *that, char *str ) { case '\'' : case '\"' : - if ( 0 < ndx_buff) // ������ ���۷� ��ϵ� ���ڿ��� �ִٸ� ����Ʈ�� �߰� + if ( 0 < ndx_buff) // 이전에 버퍼로 등록된 문자열이 있다면 리스트에 추가 { buff[ndx_buff] = '\0'; add_buff_to_list(); } ch_division = str[ndx_sour]; - ndx_buff = 0; // ���ۿ� ���ο� ���ڿ��� ���� �� �ֵ��� ������ ��ġ�� 0 ���� �ʱ�ȭ + ndx_buff = 0; // 버퍼에 새로운 문자열을 담을 수 있도록 버퍼의 위치를 0 으로 초기화 break; case ' ' : case ',' : case '\n' : case '\r' : - if ( 0 < ndx_buff) // ������ ���۷� ��ϵ� ���ڿ��� �ִٸ� ����Ʈ�� �߰� + if ( 0 < ndx_buff) // 이전에 버퍼로 등록된 문자열이 있다면 리스트에 추가 { buff[ndx_buff] = '\0'; add_buff_to_list(); @@ -623,7 +623,7 @@ int tstrlist_commatext ( tstrlist *that, char *str ) } else { - if ( ch_division == str[ndx_sour]) // ���� �ο��ȣ�� ���̶�� + if ( ch_division == str[ndx_sour]) // 이전 인용부호의 끝이라면 { ch_division = '\0'; buff[ndx_buff] = '\0'; @@ -644,7 +644,7 @@ int tstrlist_commatext ( tstrlist *that, char *str ) } } - if ( 0 < ndx_buff) // ������ ���۷� ��ϵ� ���ڿ��� �ִٸ� ����Ʈ�� �߰� + if ( 0 < ndx_buff) // 이전에 버퍼로 등록된 문자열이 있다면 리스트에 추가 { buff[ndx_buff] = '\0'; add_buff_to_list(); @@ -652,10 +652,10 @@ int tstrlist_commatext ( tstrlist *that, char *str ) return tlst->fcount; } //------------------------------------------------------------------------------ -/** @brief �ؽ�Ʈ���Ͽ��� ���κ��� �����ۿ� ����Ѵ�. - @param that ���� ��ü�� ������ - @param fname �����̸� - @return ��ü�� �����ϴ� ������ ���� +/** @brief 텍스트파일에서 라인별로 아이템에 등록한다. + @param that 관리 객체의 포인터 + @param fname 파일이름 + @return 객체가 관리하는 아이템 개수 *///---------------------------------------------------------------------------- int tstrlist_load_from_file ( tstrlist *that, char *fname ) { @@ -681,10 +681,10 @@ int tstrlist_load_from_file ( tstrlist *that, char *fname ) return tlst->fcount; } //------------------------------------------------------------------------------ -/** @brief �����۵��� ���κ��� ���Ϸ� �����Ѵ�. - @param that ���� ��ü�� ������ - @param fname �����̸� - @return ���Ͽ� ������ ���μ� +/** @brief 아이템들을 라인별로 파일로 저장한다. + @param that 관리 객체의 포인터 + @param fname 파일이름 + @return 파일에 저장한 라인수 *///---------------------------------------------------------------------------- int tstrlist_save_to_file ( tstrlist *that, char *fname ) { diff --git a/app/app-prime-modbus/lib/common/uservar.c b/app/app-prime-modbus/lib/common/uservar.c index e8718ef..50cd919 100644 --- a/app/app-prime-modbus/lib/common/uservar.c +++ b/app/app-prime-modbus/lib/common/uservar.c @@ -1,8 +1,8 @@ /** @file uservar.c @date 2009/4/9 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief ����ڰ� �����ϴ� ������ �����ϴ� ����ü�� + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 사용자가 편집하는 변수를 관리하는 구조체들 @modify @@ -29,9 +29,9 @@ //------------------------------------------------------------------------------ -/** @brief ������ ���� ����ü���� �������ΰ��� �۾������� �ִ´�. - @param uv user_var_integer_t ������ - @param offset ��ȭġ +/** @brief 정수형 편집 구조체에서 오리지널값을 작업변수에 넣는다. + @param uv user_var_integer_t 포인터 + @param offset 변화치 *///---------------------------------------------------------------------------- void uvar_int_ready( user_var_integer_t *uv ) { @@ -41,9 +41,9 @@ void uvar_int_ready( user_var_integer_t *uv ) } } //------------------------------------------------------------------------------ -/** @brief ������ ���� ����ü���� ������ ���� �����Ѵ�. - @param uv user_var_integer_t ������ - @param offset ��ȭġ +/** @brief 정수형 편집 구조체에서 수정된 값을 적용한다. + @param uv user_var_integer_t 포인터 + @param offset 변화치 *///---------------------------------------------------------------------------- void uvar_int_apply( user_var_integer_t *uv ) { @@ -53,9 +53,9 @@ void uvar_int_apply( user_var_integer_t *uv ) } } //------------------------------------------------------------------------------ -/** @brief ������ ���� ����ü���� ���� �����Ѵ�. - @param uv user_var_integer_t ������ - @param offset ��ȭġ +/** @brief 정수형 편집 구조체에서 값을 변경한다. + @param uv user_var_integer_t 포인터 + @param offset 변화치 *///---------------------------------------------------------------------------- void uvar_int_add( user_var_integer_t *uv, int offset ) { diff --git a/app/app-prime-modbus/lib/common/util.c b/app/app-prime-modbus/lib/common/util.c index 4487e28..1279179 100644 --- a/app/app-prime-modbus/lib/common/util.c +++ b/app/app-prime-modbus/lib/common/util.c @@ -1,8 +1,8 @@ /** @file util.c @date 2009/1/15 ~ - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief �ܼ��� ��ƿ��Ƽ �Լ����� ��Ƴ��Ҵ�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 단순한 유틸리티 함수들을 모아놓았다. Ver 0.2.1 @modify @todo @@ -12,7 +12,7 @@ */ //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -53,9 +53,9 @@ #ifdef EMBEDDED_LINUX //------------------------------------------------------------------------------ -/** @brief ����̹� �̸����� ����̹��� ��������ȣ�� ��´�. - @param driver_name ����̽�����̹� �̸� - @return ��������ȣ +/** @brief 드라이버 이름으로 드라이버의 메이져번호를 얻는다. + @param driver_name 디바이스드라이버 이름 + @return 메이져번호 *///---------------------------------------------------------------------------- int find_dev_major( char *driver_name ) { @@ -83,12 +83,12 @@ int find_dev_major( char *driver_name ) } //------------------------------------------------------------------------------ -/** @brief ����̽� ����̹� ��������� ����. - @param fname ����̽� ������� �̸� - @param major ����̽� ����̹� ��������ȣ - @param minor ����̽� ����̹� ���̳ʹ�ȣ - @return ������� �ڵ�, 0���� ������ ���� - @remakr ��������� ������ ��������� ������ �� ����. +/** @brief 디바이스 드라이버 노드파일을 연다. + @param fname 디바이스 노드파일 이름 + @param major 디바이스 드라이버 메이져번호 + @param minor 디바이스 드라이버 마이너번호 + @return 노드파일 핸들, 0보다 작으면 에러 + @remakr 노드파일이 없으면 노드파일을 생성한 후 연다. *///---------------------------------------------------------------------------- int dev_open( char *fname, unsigned char major, unsigned char minor ) { @@ -115,12 +115,12 @@ int dev_open( char *fname, unsigned char major, unsigned char minor ) return dev; } //------------------------------------------------------------------------------ -/** @brief tftp ��ƿ��Ƽ�� ����Ͽ� ������ �ٿ�ε�´�. - @param ip �����ּ� - @param fname �������� ���� �����̸� - @return �������� - @retval 0 ���� - @retval -1 ���� +/** @brief tftp 유틸리티를 사용하여 파일을 다운로드받는다. + @param ip 서버주소 + @param fname 서버에서 받을 파일이름 + @return 성공여부 + @retval 0 성공 + @retval -1 실패 *///---------------------------------------------------------------------------- int tftp_download_file( char *ip, char *fname ) { @@ -129,10 +129,10 @@ int tftp_download_file( char *ip, char *fname ) char line[256]; int rst; - // �ޱ�� temp ������ �����. + // 받기용 temp 파일을 지운다. remove( TEMP_DOWNLOAD_FILE ); - // tftp �� �̿��Ͽ� ������ �´�. + // tftp 를 이용하여 파일을 받는다. sprintf( line, "tftp %s -r %s -l %s -g", ip, fname, TEMP_DOWNLOAD_FILE ); rst = system( line ); if ( ( -1 == rst) || ( 127 == rst) ){ @@ -140,7 +140,7 @@ int tftp_download_file( char *ip, char *fname ) return -1; } - // ������ �����ϸ� �������Ͽ� �����. + // 파일이 존재하면 기존파일에 덮어쓴다. if ( 0 == exist_file( TEMP_DOWNLOAD_FILE ) ){ sprintf( line, "cp -a %s %s", TEMP_DOWNLOAD_FILE, fname ); rst = system( line ); @@ -154,12 +154,12 @@ int tftp_download_file( char *ip, char *fname ) return -1; } //------------------------------------------------------------------------------ -/** @brief tftp ��ƿ��Ƽ�� ����Ͽ� ������ ���ε��Ѵ� - @param ip �����ּ� - @param fname ������ ������ �����̸� - @return �������� - @retval 0 ���� - @retval -1 ���� +/** @brief tftp 유틸리티를 사용하여 파일을 업로드한다 + @param ip 서버주소 + @param fname 서버에 전송할 파일이름 + @return 성공여부 + @retval 0 성공 + @retval -1 실패 *///---------------------------------------------------------------------------- int tftp_upload_file( char *ip, char *fname ) { @@ -179,7 +179,7 @@ int tftp_upload_file( char *ip, char *fname ) } - // tftp �� �̿��Ͽ� ������ �����Ѵ�. + // tftp 를 이용하여 파일을 전송한다. sprintf( line, "tftp %s -r %s -l %s -p", ip, ptr_name, fname ); rst = system( line ); @@ -192,28 +192,28 @@ int tftp_upload_file( char *ip, char *fname ) //------------------------------------------------------------------------------ -/** @brief usec �ð�ƽ�� ���´�. - @return usec ������ �ð�ƽ - @remark �Ϸ������ �ð������̴�. +/** @brief usec 시간틱을 얻어온다. + @return usec 단위의 시간틱 + @remark 하루단위의 시간범위이다. *///---------------------------------------------------------------------------- unsigned long get_cur_usec(void) { struct timeval mytime; - // ���� �ð��� ���´�. + // 현재 시간을 얻어온다. gettimeofday(&mytime, NULL); return ( (mytime.tv_sec%(24*3600))*1000000 + mytime.tv_usec ); } //------------------------------------------------------------------------------ -/** @brief ���ڿ����� �յ��� Ư�����ڿ� ���鹮�ڸ� �����Ѵ�. - @param line ���ڿ� ������ +/** @brief 문자열에서 앞뒤의 특수문자와 공백문자를 제거한다. + @param line 문자열 포인터 *///---------------------------------------------------------------------------- void trimstr( char *line ) { int idx, len; - // ���� ���鹮�ڿ� Ư������ ���� + // 뒷쪽 공백문자와 특수문자 제거 len = strlen(line); for( idx=len-1; idx>=0; idx-- ) { @@ -221,7 +221,7 @@ void trimstr( char *line ) } line[idx+1] = '\0'; - // ���� ���鹮�ڿ� Ư������ ���� + // 앞쪽 공백문자와 특수문자 제거 len = strlen(line); for( idx=0; idx<len; idx++ ) { @@ -233,14 +233,14 @@ void trimstr( char *line ) } } //------------------------------------------------------------------------------ -/** @brief ���ڿ����� Ư�� ���ڸ� �и��ڷ� ����Ͽ� �и��Ѵ� - @param line �и��� ���ڿ� - @param delim �������� - @param item �и��� ���ڿ��� ������ - @param val �и��� ���ڿ��� �� - @return ������ 0, ���н� -1 - @remark aaa = bbbb ���¸� �и��Ѵ�. - @bug ���� ��Ʈ�� �ʿ��ϴ�. +/** @brief 문자열에서 특정 문자를 분리자로 사용하여 분리한다 + @param line 분리할 문자열 + @param delim 델리미터 + @param item 분리된 문자열중 아이템 + @param val 분리된 문자열중 값 + @return 성공시 0, 실패시 -1 + @remark aaa = bbbb 형태를 분리한다. + @bug 좀더 테스트가 필요하다. *///---------------------------------------------------------------------------- int item_value_parse( const char *line, char delim, char *item, char *val ) { @@ -268,11 +268,11 @@ int item_value_parse( const char *line, char delim, char *item, char *val ) return -1; } //------------------------------------------------------------------------------ -/** @brief ���ڿ����� ���������� �и��Ͽ� �迭�� �ִ´�. - @param str �и��� ���ڿ� - @param delim �������� ���ڿ� - @param int_array ������ �迭 - @param count ������ �迭 ���� +/** @brief 문자열에서 정수형값을 분리하여 배열에 넣는다. + @param str 분리할 문자열 + @param delim 델리미터 문자열 + @param int_array 정수형 배열 + @param count 정수형 배열 개수 *///---------------------------------------------------------------------------- int str_to_int_array( char *str, char *delim, int *int_array, int count ) { @@ -299,11 +299,11 @@ int str_to_int_array( char *str, char *delim, int *int_array, int count ) return idx; } //------------------------------------------------------------------------------ -/** @brief �ڱ� IP�� ���� �´�. - @param ip �� ���� ���ڿ� ������ - @return ������ 0, ���н� -1 +/** @brief 자기 IP를 가져 온다. + @param ip 를 받을 문자열 포인터 + @return 성공시 0, 실패시 -1 - @todo tstrlist ��ü�� �����Ͽ��� �Ѵ�. + @todo tstrlist 객체에 저장하여야 한다. @bug *///---------------------------------------------------------------------------- int get_myip( char *ip ) @@ -366,18 +366,18 @@ int get_myip( char *ip ) return -1; } //------------------------------------------------------------------------------ -/** @brief �����̳� ���丮�� �����ϴ��� Ȯ���Ѵ�. - @param fname �����̳� ���丮�̸� - @return 0 �̸� ����, �����̸� �������� ���� +/** @brief 파일이나 디렉토리가 존재하는지 확인한다. + @param fname 파일이나 디렉토리이름 + @return 0 이면 정상, 음수이면 존재하지 않음 *///---------------------------------------------------------------------------- int exist_file( char *fname ) { return access( fname, F_OK ); } //------------------------------------------------------------------------------ -/** @brief ������ ũ�⸦ ��´�. - @param fname �����̳� ���丮�̸� - @return ������ ũ�� �����϶� ���� +/** @brief 파일의 크기를 얻는다. + @param fname 파일이나 디렉토리이름 + @return 파일의 크기 에러일때 음수 *///---------------------------------------------------------------------------- int get_file_size( char *fname ) { @@ -389,10 +389,10 @@ int get_file_size( char *fname ) return fstat.st_size; } //------------------------------------------------------------------------------ -/** @brief �α������� ���Ͽ� �� �ִ´�. - @param fmt ���Ĺ��ڿ� - @param ���� ��������. - @return ���Ͽ� ������ ���ڰ��� +/** @brief 로그정보를 파일에 써 넣는다. + @param fmt 형식문자열 + @param 가변 스택인자. + @return 파일에 저장한 문자개수 *///---------------------------------------------------------------------------- int log_printf( const char *log_file, const char *fmt, ... ) { @@ -414,9 +414,9 @@ int log_printf( const char *log_file, const char *fmt, ... ) return 0; } //------------------------------------------------------------------------------ -/** @brief ��¥�� �ð��� ���ڿ� ���·� �����ش�. - @param fmt ���Ĺ��ڿ� - @param ��ȯ���ڿ�. +/** @brief 날짜와 시간을 문자열 형태로 돌려준다. + @param fmt 형식문자열 + @param 반환문자열. *///---------------------------------------------------------------------------- void format_date_text( char *fmt, char *text ) { @@ -437,10 +437,10 @@ void format_date_text( char *fmt, char *text ) } //------------------------------------------------------------------------------ -/** @brief ��ǥ�� �簢�����ȿ� �ִ��� �˻� - @param x,y ��ǥ - @param sx, sy, wdt, hgt �簢���� - @return �簢������ ���ԵǸ� 1, �ƴϸ� 0 +/** @brief 좌표가 사각영역안에 있는지 검사 + @param x,y 좌표 + @param sx, sy, wdt, hgt 사각영역 + @return 사각영역에 포함되면 1, 아니면 0 *///---------------------------------------------------------------------------- int is_rect_region( int x, int y, int sx, int sy, int wdt, int hgt ) { @@ -453,9 +453,9 @@ int is_rect_region( int x, int y, int sx, int sy, int wdt, int hgt ) } //------------------------------------------------------------------------------ -/** @brief ���ͷ�Ʈ�� �� Ƚ���� �����ش�. - @param irq irq ��ȣ - @return ���ͷ�Ʈ ��ȸ��, irq ��ȣ�� ���ٸ� -1 +/** @brief 인터럽트가 발생 횟수를 돌려준다. + @param irq irq 번호 + @return 인터럽트 발생회수, irq 번호가 없다면 -1 *///---------------------------------------------------------------------------- int get_irq_count( int irq ) { @@ -486,10 +486,10 @@ int get_irq_count( int irq ) return int_cnt; } //------------------------------------------------------------------------------ -/** @brief ping ������ �����Ͽ� ������ ȸ���� �����ش�. - @param host ���� IP ���ڿ� - @param count ����� ȸ�� - @return �μ��� ȸ�� +/** @brief ping 명령을 수행하여 성공한 회수를 돌려준다. + @param host 상대방 IP 문자열 + @param count 핑통신 회수 + @return 핑성공 회수 *///---------------------------------------------------------------------------- int ping( char *host, int count ) { @@ -523,10 +523,10 @@ int ping( char *host, int count ) return ok_cnt; } //------------------------------------------------------------------------------ -/** @brief ���̳ʸ� ����Ÿ�� ���� ���ڿ��� ��ȯ�Ѵ�. - @param hex ���ڿ��� ���� ���� - @param bin ���̳ʸ� ���ڿ� ���� - @param bcnt ���̳ʸ� ���ڿ� ���� +/** @brief 바이너리 데이타를 헥사 문자열로 변환한다. + @param hex 문자열을 담을 버퍼 + @param bin 바이너리 문자열 버퍼 + @param bcnt 바이너리 문자열 개수 *///---------------------------------------------------------------------------- void bin_to_hex( char *hex, char *bin, int bcnt ) { @@ -545,8 +545,8 @@ void bin_to_hex( char *hex, char *bin, int bcnt ) } } //------------------------------------------------------------------------------ -/** @brief mcu ��ȣ�� ã�´�. - @return mcu ��ȣ 6410, 210, 2440, 270, 255, 420, 430, 1250 +/** @brief mcu 번호를 찾는다. + @return mcu 번호 6410, 210, 2440, 270, 255, 420, 430, 1250 *///---------------------------------------------------------------------------- int get_mcu( void ) { @@ -583,8 +583,8 @@ int get_mcu( void ) return rtn; } //------------------------------------------------------------------------------ -/** @brief Ű���� �Է��� ���;��� �ѹ��ھ� ��� �´�. - @return Ű���� �Է°� +/** @brief 키보드 입력을 엔터없이 한문자씩 즉시 받는다. + @return 키보드 입력값 *///---------------------------------------------------------------------------- char getchar_without_enter( void ) { @@ -602,9 +602,9 @@ char getchar_without_enter( void ) return ch; } //------------------------------------------------------------------------------ -/** @brief �ý��� �ð��� �����Ѵ�. +/** @brief 시스템 시간을 변경한다. @param yyyy, MM, dd, hh, mm, ss - @return ���� 0, ���� -1 + @return 성공 0, 실패 -1 *///---------------------------------------------------------------------------- int set_sys_time( int yyyy, int MM, int dd, int hh, int mm, int ss ) { @@ -628,38 +628,38 @@ int set_sys_time( int yyyy, int MM, int dd, int hh, int mm, int ss ) #endif //------------------------------------------------------------------------------ -/** @brief ����ð��� �ʴ����� �����ش� - @return ���� �ð��� +/** @brief 현재시간을 초단위로 돌려준다 + @return 현재 시간초 *///---------------------------------------------------------------------------- unsigned long get_cur_sec( void ) { struct timeval mytime; - // ���� �ð��� ���´�. + // 현재 시간을 얻어온다. gettimeofday(&mytime, NULL); return mytime.tv_sec; } //------------------------------------------------------------------------------ -/** @brief ������ msec �ð�ƽ�� ���´�. - @return ���� msec - @todo �����÷ο쿡 ���� ������ �ʿ��ϴ�. +/** @brief 현재의 msec 시간틱을 얻어온다. + @return 현재 msec + @todo 오버플로우에 대한 고찰이 필요하다. *///---------------------------------------------------------------------------- msec_t get_cur_msec( void ) { struct timeval mytime; long long tm_sec; - // ���� �ð��� ���´�. + // 현재 시간을 얻어온다. gettimeofday(&mytime, NULL); tm_sec = (unsigned long) mytime.tv_sec; return ( tm_sec * 1000LL + mytime.tv_usec / 1000); } //------------------------------------------------------------------------------ -/** @brief ������ ����Ÿ�� ���� ���ڿ��� �����ش�. - @param buf ���� - @param count ���۰��� +/** @brief 버퍼의 데이타를 헥사 문자열로 보여준다. + @param buf 버퍼 + @param count 버퍼개수 *///---------------------------------------------------------------------------- void print_buffer( char *buf, int count ) { @@ -679,9 +679,9 @@ void print_buffer( char *buf, int count ) printf( "\n" ); } //------------------------------------------------------------------------------ -/** @brief ���ڿ��� ���ڷ� ��ȯ�Ѵ�. ���ڵ��� �������� �Ǵ��Ѵ�. - @param buf ���� - @return ���ڿ��� ��ȯ�� �� +/** @brief 문자열을 숫자로 변환한다. 숫자뒤의 단위까지 판단한다. + @param buf 버퍼 + @return 문자열을 변환한 값 *///---------------------------------------------------------------------------- unsigned int strtosize( char *str ) { @@ -703,10 +703,10 @@ unsigned int strtosize( char *str ) } //------------------------------------------------------------------------------ -/** @brief ������ ���� 16��Ʈ�� ���Ͽ� �����ش�. - @param buf ���� - @param len ������ ���� - @return ���ڿ��� ��ȯ�� �� +/** @brief 버퍼의 값을 16비트로 더하여 돌려준다. + @param buf 버퍼 + @param len 버퍼의 길이 + @return 문자열을 변환한 값 *///---------------------------------------------------------------------------- unsigned short checksum(void* buf, int len) { @@ -727,9 +727,9 @@ unsigned short checksum(void* buf, int len) return sum; } //------------------------------------------------------------------------------ -/** @brief msec ������ ��ٸ���. +/** @brief msec 단위로 기다린다. @param msec - @remark ������ ƽ�� �����Ѵ�. + @remark 스케줄 틱에 의존한다. *///---------------------------------------------------------------------------- void msleep( int msec ) { diff --git a/app/app-prime-modbus/lib/fanet/alarm.c b/app/app-prime-modbus/lib/fanet/alarm.c index 3c9456a..4e97579 100644 --- a/app/app-prime-modbus/lib/fanet/alarm.c +++ b/app/app-prime-modbus/lib/fanet/alarm.c @@ -1,8 +1,8 @@ /** @file alarm.c @date 2009-04-09 - @author ����� freefrug@falinux.com - @brief �˶�����̽� ����̹��� ���� �����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief 알람디바이스 드라이버를 열고 관리한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- #include <stdio.h> @@ -36,7 +36,7 @@ char desc_alarm[] = "falinux alarm ver 0.1.0"; -/// alarm ���� ����ü +/// alarm 개별 구조체 typedef struct { int count; @@ -46,10 +46,10 @@ typedef struct { //------------------------------------------------------------------------------ -/** @brief �˶� ����̽� ����̹��� open �Ѵ�. - @param count �˶���ȸ��, 0���� ������ �������� �˶��̴�. - @param per_msec �˶��� �� - @return poll_obj_t ������ ������ +/** @brief 알람 디바이스 드라이버를 open 한다. + @param count 알람발생회수, 0보다 작으면 지속적인 알람이다. + @param per_msec 알람발생 텀 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *alarm_open( int count, unsigned int per_msec ) { @@ -64,7 +64,7 @@ poll_obj_t *alarm_open( int count, unsigned int per_msec ) return NULL; } - // alarm ���� ������ �����Ѵ�. + // alarm 만의 정보를 설정한다. alarm = (alarm_priv_t *)malloc( sizeof(alarm_priv_t) ); alarm->count = count; alarm->per_msec = per_msec; @@ -82,18 +82,18 @@ poll_obj_t *alarm_open( int count, unsigned int per_msec ) return obj; } //------------------------------------------------------------------------------ -/** @brief �˶��� �����Ѵ�. - @param obj ����ü ������ +/** @brief 알람을 중지한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void alarm_stop( poll_obj_t *obj ) { ioctl( obj->fd, IOCTL_ALARM_CLR, 0 ); } //------------------------------------------------------------------------------ -/** @brief �˶��� ������Ѵ�. - @param obj ����ü ������ - @param count �˶���ȸ��, 0���� ������ �������� �˶��̴�. - @param per_msec �˶��� �� +/** @brief 알람을 재시작한다. + @param obj 폴객체 포인터 + @param count 알람발생회수, 0보다 작으면 지속적인 알람이다. + @param per_msec 알람발생 텀 *///---------------------------------------------------------------------------- void alarm_restart( poll_obj_t *obj ) { @@ -108,9 +108,9 @@ void alarm_restart( poll_obj_t *obj ) ioctl( obj->fd, IOCTL_ALARM_SET, &alarm_set ); } //------------------------------------------------------------------------------ -/** @brief �˶��� Ȯ���Ѵ�.(�˶��� ���ϸ� �ݵ�� ȣ���Ͽ��� �Ѵ�.) - @param obj ����ü ������ - @remark �˶��� ���ϸ� �ݵ�� ȣ���Ͽ��� �Ѵ�. +/** @brief 알람을 확인한다.(알람이 발생하면 반드시 호출하여야 한다.) + @param obj 폴객체 포인터 + @remark 알람이 발생하면 반드시 호출하여야 한다. *///---------------------------------------------------------------------------- void alarm_handled( poll_obj_t *obj ) { @@ -119,8 +119,8 @@ void alarm_handled( poll_obj_t *obj ) read( obj->fd, buf, 1 ); } //------------------------------------------------------------------------------ -/** @brief alarm ����̹��� close �Ѵ�. - @param obj ����ü ������ +/** @brief alarm 드라이버를 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void alarm_close( poll_obj_t *obj ) { diff --git a/app/app-prime-modbus/lib/fanet/can.c b/app/app-prime-modbus/lib/fanet/can.c index 9acbbf5..59b4419 100644 --- a/app/app-prime-modbus/lib/fanet/can.c +++ b/app/app-prime-modbus/lib/fanet/can.c @@ -1,11 +1,11 @@ /** @file can.c @date 2012-02-24 - @author ��漮 jks@falinux.com - @brief can�� ����� ����� ����Ѵ�. + @author 장길석 jks@falinux.com + @brief can을 사용한 통신을 담당한다. @modify - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug @remark @@ -13,8 +13,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- #include <stdio.h> @@ -33,22 +33,22 @@ #include <pollmng.h> #include <can.h> -/// udp ���� ����ü +/// udp 개별 구조체 typedef struct { int im_server; struct sockaddr_can addr; } can_priv_t; -static poll_obj_t *tmp_can_poll = NULL; // poll ������ü���� �����Լ��� ���� +static poll_obj_t *tmp_can_poll = NULL; // poll 관리객체없이 전송함수를 위해 #define PF_CAN 29 /* Controller Area Network. */ #define AF_CAN PF_CAN //------------------------------------------------------------------------------ -/** @brief udp ������ �������·� open �Ѵ�. - @param port ��Ʈ��ȣ - @return poll_obj_t ������ ������ +/** @brief udp 소켓을 서버형태로 open 한다. + @param port 포트번호 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *can_open( char *can_port, can_filter_t *rfilter, int filter_size) { @@ -67,10 +67,10 @@ poll_obj_t *can_open( char *can_port, can_filter_t *rfilter, int filter_size) } setsockopt( sockfd, SOL_CAN_RAW, CAN_RAW_FILTER, rfilter, filter_size); - // ������ �ý��ۿ� �����Ѵ�. + // 소켓을 시스템에 연결한다. bzero( &addr, sizeof(struct sockaddr_can) ); - strcpy( ifr.ifr_name, can_port); // ����� CAN ��ȣ + strcpy( ifr.ifr_name, can_port); // 사용할 CAN 번호 ioctl(sockfd, SIOCGIFINDEX, &ifr); ifindex = ifr.ifr_ifindex; @@ -84,7 +84,7 @@ poll_obj_t *can_open( char *can_port, can_filter_t *rfilter, int filter_size) return NULL; } - // udp ���� ������ �����Ѵ�. + // udp 만의 정보를 설정한다. can = (can_priv_t *)malloc( sizeof(can_priv_t) ); can->im_server = 1; memcpy( &can->addr, &addr, sizeof( can->addr)); @@ -99,8 +99,8 @@ poll_obj_t *can_open( char *can_port, can_filter_t *rfilter, int filter_size) } //------------------------------------------------------------------------------ -/** @brief udp ������ close �Ѵ�. - @param obj ����ü ������ +/** @brief udp 소켓을 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void can_close( poll_obj_t *obj ) { @@ -116,13 +116,13 @@ void can_close( poll_obj_t *obj ) if ( tmp_can_poll == obj ) tmp_can_poll = NULL; } //------------------------------------------------------------------------------ -/** @brief udp ������ ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param host ���� IP �� ȣ��Ʈ�̸� ���ڿ������� - @param port ���� ��Ʈ��ȣ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� +/** @brief udp 소켓을 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param host 상대방 IP 나 호스트이름 문자열포인터 + @param port 상대방 포트번호 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int can_write( poll_obj_t *obj, can_frame_t *frame) { @@ -140,10 +140,10 @@ int can_write( poll_obj_t *obj, can_frame_t *frame) return wrcnt; } //------------------------------------------------------------------------------ -/** @brief udp ������ ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param len ������ ���� - @return ���۵� ����Ÿ ���� +/** @brief udp 소켓을 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 *///---------------------------------------------------------------------------- int can_read( poll_obj_t *obj, can_frame_t *frame) { @@ -158,13 +158,13 @@ int can_read( poll_obj_t *obj, can_frame_t *frame) return rdcnt; } //------------------------------------------------------------------------------ -/** @brief poll ��ü���� udp ������ ���� ����Ÿ�� �����Ѵ�. - @param host ���� IP �� ȣ��Ʈ�̸� ���ڿ������� - @param port ���� ��Ʈ��ȣ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� - @remark can_open_server(), can_open_client() �Լ��� �ѹ� ȣ��Ǿ�� �Ѵ�. +/** @brief poll 객체없이 udp 소켓을 통해 데이타를 전송한다. + @param host 상대방 IP 나 호스트이름 문자열포인터 + @param port 상대방 포트번호 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 + @remark can_open_server(), can_open_client() 함수는 한번 호출되어야 한다. *///---------------------------------------------------------------------------- int can_write_simple( can_frame_t *frame ) { @@ -176,11 +176,11 @@ int can_write_simple( can_frame_t *frame ) return -1; } //------------------------------------------------------------------------------ -/** @brief poll ��ü���� udp ������ ���� ����Ÿ�� �д´�. - @param buf ���۹��� - @param len ������ ���� - @return ���۵� ����Ÿ ���� - @remark can_open_server(), can_open_client() �Լ��� �ѹ� ȣ��Ǿ�� �Ѵ�. +/** @brief poll 객체없이 udp 소켓을 통해 데이타를 읽는다. + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 + @remark can_open_server(), can_open_client() 함수는 한번 호출되어야 한다. *///---------------------------------------------------------------------------- int can_read_simple( can_frame_t *frame ) { diff --git a/app/app-prime-modbus/lib/fanet/fabind.c b/app/app-prime-modbus/lib/fanet/fabind.c index 5bc409a..62d6c12 100644 --- a/app/app-prime-modbus/lib/fanet/fabind.c +++ b/app/app-prime-modbus/lib/fanet/fabind.c @@ -1,9 +1,9 @@ /** @file fabind.c @date 2008/10/08 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief fa-bind ����̹��� ����ϱ� ���� API �� �����Ѵ�.. - 2009/06/10(�����) fanet �� �����ϱ� ���� ���� + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief fa-bind 드라이버를 사용하기 위한 API 를 구현한다.. + 2009/06/10(오재경) fanet 에 포함하기 위해 수정 @todo @bug @@ -11,8 +11,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -36,36 +36,36 @@ char desc_fabind[] = "falinux fa-bind ver 0.2.1"; -/// fabind ���� ����ü +/// fabind 개별 구조체 typedef struct { int port; int group; - int need_ack; // ����䱸�� �ʿ��Ѱ� + int need_ack; // 응답요구가 필요한것 ioctl_bind_msg_t ack_info; } fabind_priv_t; /// @{ -/// @brief ���� �Լ� ����Ʈ -int fabind_post_message_simple( int fd, int port , unsigned char *buf, int count ); /// �Ϲ����� ���� ���� -int fabind_post_message ( int fd, int port , unsigned char *buf, int count, msg_howto_t howto ); /// �Ϲ����� ���� ���� -int fabind_group_message ( int fd, int group, unsigned char *buf, int count ); /// �� ���� ����(��۵� ����) -int fabind_recv_message ( int fd, unsigned char *buf, int count, ioctl_bind_msg_t *info ); /// ���� ���� -int fabind_request_response ( int fd, int port , unsigned char *tx_buf, unsigned char *rx_buf, int tx_cnt, int rx_cnt ); /// ���� ����� ���� ���� -int fabind_send_ack ( int fd, int port , unsigned char *buf, int count ); /// ack ���� ���� +/// @brief 로컬 함수 리스트 +int fabind_post_message_simple( int fd, int port , unsigned char *buf, int count ); /// 일반적인 메세지 전송 +int fabind_post_message ( int fd, int port , unsigned char *buf, int count, msg_howto_t howto ); /// 일반적인 메세지 전송 +int fabind_group_message ( int fd, int group, unsigned char *buf, int count ); /// 그룹 메세지 전송(방송도 포함) +int fabind_recv_message ( int fd, unsigned char *buf, int count, ioctl_bind_msg_t *info ); /// 메세지 수신 +int fabind_request_response ( int fd, int port , unsigned char *tx_buf, unsigned char *rx_buf, int tx_cnt, int rx_cnt ); /// 응답 대기형 메세지 전송 +int fabind_send_ack ( int fd, int port , unsigned char *buf, int count ); /// ack 메세지 전송 /// @} //------------------------------------------------------------------------------ -/** @brief fabind ����̹� ���� ��ü�� �ʱ�ȭ�Ѵ�. - @param port ���� ��Ʈ - @param group ���� �� - @param recv_queue_count ���� ���� ť�� ���� - @retrun obj ����ü ������ +/** @brief fabind 드라이버 열고 객체를 초기화한다. + @param port 나의 포트 + @param group 나의 그룹 + @param recv_queue_count 내가 받을 큐의 개수 + @retrun obj 폴객체 포인터 *///---------------------------------------------------------------------------- poll_obj_t *fabind_open( int port, int group, int recv_queue_count ) { @@ -104,7 +104,7 @@ poll_obj_t *fabind_open( int port, int group, int recv_queue_count ) return NULL; } - // fabind ���� ������ �����Ѵ�. + // fabind 만의 정보를 설정한다. fabind = (fabind_priv_t *)malloc( sizeof(fabind_priv_t) ); memset( (void *)fabind, 0, sizeof(fabind_priv_t) ); @@ -112,7 +112,7 @@ poll_obj_t *fabind_open( int port, int group, int recv_queue_count ) fabind->group = group; fabind->need_ack = 0; - // ���Ŵ����� ����Ѵ�. + // 폴매니져에 등록한다. obj = poll_add( dev ); obj->type = STYP_FABIND; obj->priv = (void *)fabind; @@ -120,8 +120,8 @@ poll_obj_t *fabind_open( int port, int group, int recv_queue_count ) return obj; } //------------------------------------------------------------------------------ -/** @brief fabind ��ü�� �����Ѵ�. - @param obj ����ü ������ +/** @brief fabind 객체를 해제한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void fabind_close( poll_obj_t *obj ) { @@ -135,9 +135,9 @@ void fabind_close( poll_obj_t *obj ) poll_delete( obj ); } //------------------------------------------------------------------------------ -/** @brief fabind ����ü�� ��Ʈ��ȣ�� ã�´�. - @param port ��Ʈ��ȣ - @return obj ����ü ������ +/** @brief fabind 폴객체를 포트번호로 찾는다. + @param port 포트번호 + @return obj 폴객체 포인터 *///---------------------------------------------------------------------------- poll_obj_t *fabind_get_byport( int port ) { @@ -163,12 +163,12 @@ poll_obj_t *fabind_get_byport( int port ) return NULL; } //------------------------------------------------------------------------------ -/** @brief fabind �� ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param port ����� ��Ʈ��ȣ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� +/** @brief fabind 를 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param port 상대편 포트번호 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int fabind_write( poll_obj_t *obj, int port, char *buf, int len ) { @@ -187,7 +187,7 @@ int fabind_write( poll_obj_t *obj, int port, char *buf, int len ) return -1; } - // ���� ����Ÿ���� ������ �ʿ��� ����Ÿ�� ���Դٸ� + // 이전 데이타에서 응답이 필요한 데이타가 들어왔다면 if ( fabind->need_ack ) { fabind->need_ack = 0; @@ -199,14 +199,14 @@ int fabind_write( poll_obj_t *obj, int port, char *buf, int len ) } } //------------------------------------------------------------------------------ -/** @brief fabind �� ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param port ����� ��Ʈ��ȣ - @param buf ���۹��� - @param len ������ ���� - @param timeout_sec ���� ���ð� - 0���� ������ ���Ѵ�� ����Ͽ� �����Ѵ� - @return ������ ����Ÿ ���� +/** @brief fabind 를 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param port 상대편 포트번호 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @param timeout_sec 전송 대기시간 + 0보다 작으면 무한대로 대기하여 전송한다 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int fabind_write_timeout( poll_obj_t *obj, int port, char *buf, int len, int timeout_sec ) { @@ -231,13 +231,13 @@ int fabind_write_timeout( poll_obj_t *obj, int port, char *buf, int len, int ti return -1; } //------------------------------------------------------------------------------ -/** @brief fabind �� ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param buf �б���� - @param len ������ ���� - @param need_ack ������ ���۰� ������ �ʿ��Ѱ������� ���θ� �˷��ִ� ������ - @return ���� ����Ÿ ���� - @remark need_ack_port �� 0 �̻��̸� ��ٷ� fabind_write() �Լ��� ������ �����־�� �Ѵ�. +/** @brief fabind 를 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param buf 읽기버퍼 + @param len 버퍼의 길이 + @param need_ack 현재의 버퍼가 응답이 필요한것인지의 여부를 알려주는 포인터 + @return 읽은 데이타 개수 + @remark need_ack_port 가 0 이상이면 곧바로 fabind_write() 함수로 응답을 보내주어야 한다. *///---------------------------------------------------------------------------- int fabind_read( poll_obj_t *obj, char *buf, int len, int *need_ack ) { @@ -247,7 +247,7 @@ int fabind_read( poll_obj_t *obj, char *buf, int len, int *need_ack ) fabind = (fabind_priv_t *)obj->priv; *need_ack = 0; - // ����Ÿ�� �д´�. + // 데이타를 읽는다. rdcnt = fabind_recv_message( obj->fd, buf, len, &fabind->ack_info ); if ( 0 < rdcnt ) @@ -263,8 +263,8 @@ int fabind_read( poll_obj_t *obj, char *buf, int len, int *need_ack ) return rdcnt; } //------------------------------------------------------------------------------ -/** @brief fabind �� ���� ����Ÿ�� ������ �� ������ �´�. - @retrun ���� ����Ÿ ���� +/** @brief fabind 를 통해 데이타를 전송한 후 응답을 받는다. + @retrun 받은 데이타 개수 *///---------------------------------------------------------------------------- int fabind_write_and_response( poll_obj_t *obj, int port, char *tx_buf, char *rx_buf, int tx_cnt, int rx_cnt ) { @@ -272,22 +272,22 @@ int fabind_write_and_response( poll_obj_t *obj, int port, char *tx_buf, char *r fabind = (fabind_priv_t *)obj->priv; - // ���� ������ ��Ʈ���� ����䱸 ������ ���� �ʴ´�. + // 내가 점유한 포트에는 응답요구 전송을 하지 않는다. if ( fabind->port == port ) return 0; return fabind_request_response( obj->fd, port, tx_buf, rx_buf, tx_cnt, rx_cnt ); } //------------------------------------------------------------------------------ -/** @brief fabind �� ���� ������� ����Ÿ�� �����Ѵ�. - @retrun ���� ����Ÿ ���� +/** @brief fabind 를 통해 그룹단위로 데이타를 전송한다. + @retrun 받은 데이타 개수 *///---------------------------------------------------------------------------- int fabind_write_group( poll_obj_t *obj, int grp_port, char *buf, int len ) { return fabind_group_message( obj->fd, grp_port, buf, len ); } //------------------------------------------------------------------------------ -/** @brief fabind �� ���� ���� ��Ʈ��ȣ�� ��´�. - @retrun ���� ����Ÿ ���� +/** @brief fabind 를 통해 들어온 포트번호를 얻는다. + @retrun 받은 데이타 개수 *///---------------------------------------------------------------------------- int fabind_get_recv_port( poll_obj_t *obj ) { @@ -300,16 +300,16 @@ int fabind_get_recv_port( poll_obj_t *obj ) -//____���� api �Լ�_____________________________________________________________ +//____개별 api 함수_____________________________________________________________ //------------------------------------------------------------------------------ -/** @brief �ܼ��ϰ� ���� ������ - @param fd fa-bind ����̽� �ڵ� - @param port ����� ��Ʈ��ȣ - @param buf ���� - @param count ������ ���� - @retrun ���۵� ���� +/** @brief 단순하게 메세지 보내기 + @param fd fa-bind 디바이스 핸들 + @param port 상대편 포트번호 + @param buf 버퍼 + @param count 버퍼의 개수 + @retrun 전송된 개수 *///---------------------------------------------------------------------------- int fabind_post_message_simple( int fd, int port, unsigned char *buf, int count ) { @@ -332,14 +332,14 @@ int fabind_post_message_simple( int fd, int port, unsigned char *buf, int count return rtn; } //------------------------------------------------------------------------------ -/** @brief ���� ������ - @param fd fa-bind ����̽� �ڵ� - @param port ����� ��Ʈ��ȣ - @param buf ���� - @param count ������ ���� - @param howto ������ ��� +/** @brief 메세지 보내기 + @param fd fa-bind 디바이스 핸들 + @param port 상대편 포트번호 + @param buf 버퍼 + @param count 버퍼의 개수 + @param howto 전송의 방법 SR_TYPE_NORMAL, SR_TYPE_EXPRESS, SR_TYPE_EMERENCY - @retrun ���۵� ���� + @retrun 전송된 개수 *///---------------------------------------------------------------------------- int fabind_post_message( int fd, int port , unsigned char *buf, int count, msg_howto_t howto ) { @@ -362,12 +362,12 @@ int fabind_post_message( int fd, int port , unsigned char *buf, int count, msg_ return rtn; } //------------------------------------------------------------------------------ -/** @brief ���� �ƿ��� - @param fd fa-bind ����̽� �ڵ� - @param buf ���� - @param count ������ ���� - @param info ����� ���� ����ü ������ - @retrun ���� ����Ÿ ���� +/** @brief 메세지 받아오기 + @param fd fa-bind 디바이스 핸들 + @param buf 버퍼 + @param count 버퍼의 개수 + @param info 상대편 정보 구조체 포인터 + @retrun 받은 데이타 개수 @remark *///---------------------------------------------------------------------------- int fabind_recv_message( int fd, unsigned char *buf, int count, ioctl_bind_msg_t *info ) @@ -388,14 +388,14 @@ int fabind_recv_message( int fd, unsigned char *buf, int count, ioctl_bind_msg_ return rtn; } //------------------------------------------------------------------------------ -/** @brief ������ ������ �� ������ �´�. - @param fd fa-bind ����̽� �ڵ� - @param port ����� ��Ʈ��ȣ - @param tx_buf ���� ���� - @param rx_buf ���� ���� - @param tx_cnt ���۹����� ���� - @param rx_cnt ���Ź����� ���� - @retrun ���� ����Ÿ ���� +/** @brief 메세지를 전송한 후 응답을 받는다. + @param fd fa-bind 디바이스 핸들 + @param port 상대편 포트번호 + @param tx_buf 전송 버퍼 + @param rx_buf 수신 버퍼 + @param tx_cnt 전송버퍼의 개수 + @param rx_cnt 수신버퍼의 개수 + @retrun 받은 데이타 개수 *///---------------------------------------------------------------------------- int fabind_request_response( int fd, int port , unsigned char *tx_buf, unsigned char *rx_buf, int tx_cnt, int rx_cnt ) @@ -409,7 +409,7 @@ int fabind_request_response( int fd, int port , msg.count = tx_cnt; msg.buf = tx_buf; - rtn = ioctl( fd, IOCTL_BIND_SEND_REQ, &msg ); // �۽� (blocking) + rtn = ioctl( fd, IOCTL_BIND_SEND_REQ, &msg ); // 송신 (blocking) if ( rtn <= 0 ) { @@ -422,16 +422,16 @@ int fabind_request_response( int fd, int port , msg.count = rx_cnt; msg.buf = rx_buf; - rtn = ioctl( fd, IOCTL_BIND_RECV_ACK, &msg ); // ���� + rtn = ioctl( fd, IOCTL_BIND_RECV_ACK, &msg ); // 수신 return rtn; } //------------------------------------------------------------------------------ -/** @brief �캰 ���� ���� - @param fd fa-bind ����̽� �ڵ� - @param group ������ ���ȣ - @param buf ���� - @param count ������ ���� - @retrun ���۵� �������� ���� +/** @brief 그룹별 메세지 전송 + @param fd fa-bind 디바이스 핸들 + @param group 전송할 그룹번호 + @param buf 버퍼 + @param count 버퍼의 개수 + @retrun 전송된 목적지의 개수 *///---------------------------------------------------------------------------- int fabind_group_message( int fd, int group, unsigned char *buf, int count ) { @@ -450,12 +450,12 @@ int fabind_group_message( int fd, int group, unsigned char *buf, int count ) return rtn; } //------------------------------------------------------------------------------ -/** @brief �䱸 ������ ���� ���� ���� - @param fd fa-bind ����̽� �ڵ� - @param port ������ ���� ��Ʈ - @param buf ���� - @param count ������ ���� - @retrun ���۵� �������� ���� +/** @brief 요구 메세지에 대한 응답 전송 + @param fd fa-bind 디바이스 핸들 + @param port 응답을 보낼 포트 + @param buf 버퍼 + @param count 버퍼의 개수 + @retrun 전송된 목적지의 개수 *///---------------------------------------------------------------------------- int fabind_send_ack( int fd, int port , unsigned char *buf, int count ) { diff --git a/app/app-prime-modbus/lib/fanet/ipc_call.c b/app/app-prime-modbus/lib/fanet/ipc_call.c index 4e3f20a..521d90d 100644 --- a/app/app-prime-modbus/lib/fanet/ipc_call.c +++ b/app/app-prime-modbus/lib/fanet/ipc_call.c @@ -1,8 +1,8 @@ /** @file ipc_call.c @date 2008-06-30 - @author ����ȣ jhpark@falinux.com - @brief ���μ������� ���� ������ �����Ѵ�. + @author 박진호 jhpark@falinux.com + @brief 프로세스간의 명령 전달을 구현한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -38,7 +38,7 @@ #include <ipc_call.h> -/// @brief ���� ���� ���� +/// @brief 전역 변수 선언 //------------------------------------------------------------------------------ /// @} @@ -46,22 +46,22 @@ char ipc_call_desc[] = "ipc_call ver 0.3.0"; #define FABIND_QUEUE_COUNT 1024 -/// fabind ���� ����ü +/// fabind 개별 구조체 typedef struct { unsigned long id; /// - unsigned long port; /// ����� ���� PORT - unsigned long group; /// ���� ó���� ���� GROUP ID - long method_type; /// ��� ó�� ��� ( FABIND, UDS, UDP ) - unsigned long level; /// LEVEL �� - unsigned long time_out; /// TIME OUT �� + unsigned long port; /// 통신을 위한 PORT + unsigned long group; /// 구룹 처리를 위한 GROUP ID + long method_type; /// 통신 처리 방법 ( FABIND, UDS, UDP ) + unsigned long level; /// LEVEL 값 + unsigned long time_out; /// TIME OUT 값 - poll_obj_t *poll_obj; /// �� ���� obj - ipc_call_func_t *func; /// ����Ÿ ���Ž� ȣ���ϴ� ����� �ݹ��Լ� - ipc_call_packet_t recv_packet; /// ����Ÿ ���� ���� + poll_obj_t *poll_obj; /// 폴 관련 obj + ipc_call_func_t *func; /// 데이타 수신시 호출하는 사용자 콜백함수 + ipc_call_packet_t recv_packet; /// 데이타 수신 패켓 } ipc_priv_t; -/// IPC_CALL �� ������ �����ϴ� ����ü +/// IPC_CALL 의 변수를 관리하는 구조체 static ipc_priv_t ipc_priv; int ipc_call_poll_in( poll_obj_t *obj); @@ -70,8 +70,8 @@ int ipc_call_poll_in( poll_obj_t *obj); int ipc_call_method ( unsigned long method ); //------------------------------------------------------------------------------ -/** @brief IPC_CALL ���� ���¸� ��� �Ѵ�. - @param err err �ѹ� +/** @brief IPC_CALL 에러 상태를 출력 한다. + @param err err 넘버 *///---------------------------------------------------------------------------- void ipc_call_print_error ( int err ) { @@ -88,10 +88,10 @@ void ipc_call_print_error ( int err ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� �����Ѵ�. - @param id IPC�� ID. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 을 생성한다. + @param id IPC의 ID. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_create ( unsigned long id ) { @@ -104,15 +104,15 @@ int ipc_call_create ( unsigned long id ) ipc_priv.group = IPC_CALL_GET_GROUP(id); ipc_priv.method_type = IPC_CALL_METHOD_NONE; - // ����Ʈ�� UDS�� ���� �ٸ����� Ÿ���� �����Ҷ� ó�� �ϵ��� �Ѵ�. + // 디폴트로 UDS로 열고 다른것은 타입을 변경할때 처리 하도록 한다. return ipc_call_method( IPC_CALL_METHOD_UDS ); } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� �����Ѵ�. - @param id IPC�� ID. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 을 해제한다. + @param id IPC의 ID. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_free( unsigned long id ) { @@ -135,10 +135,10 @@ int ipc_call_free( unsigned long id ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� ���� ����� ���Ѵ�. - @param method ���� ���� ��� - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 수행 방식을 정한다. + @param method 메시지 전송 방법 + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_method ( unsigned long method ) { @@ -196,10 +196,10 @@ int ipc_call_method ( unsigned long method ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� ������ ���Ѵ�. - @param level ���� ������ ���Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 레벨을 정한다. + @param level 전송 레벨을 정한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_level ( unsigned long level ) { @@ -209,10 +209,10 @@ int ipc_call_level ( unsigned long level ) //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� ����Ʈ ������ �����Ѵ�. - @param level ����Ʈ ���� ������ ���Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 디폴트 레벨을 설정한다. + @param level 디폴트 전송 레벨을 정한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_level_default ( unsigned long level ) { @@ -221,10 +221,10 @@ int ipc_call_level_default ( unsigned long level ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� �ð� �ʰ��� �����Ѵ�. - @param msec timeout�� �ð��� ���Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 시간 초과를 설정한다. + @param msec timeout될 시간을 정한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_timeout ( unsigned long msec ) { @@ -233,10 +233,10 @@ int ipc_call_timeout ( unsigned long msec ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� ����Ʈ �ð� �ʰ��� ���Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 디폴트 시간 초과를 정한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_timeout_default ( unsigned long msec ) { @@ -246,10 +246,10 @@ int ipc_call_timeout_default ( unsigned long msec ) //------------------------------------------------------------------------------ -/** @brief POLLIN�� ���� �Լ� ������ +/** @brief POLLIN을 위한 함수 포인터 @param obj poll_obj - @return 0 ���� - -1 ���� + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_poll_in( poll_obj_t *obj) { @@ -291,10 +291,10 @@ int ipc_call_poll_in( poll_obj_t *obj) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� �б ���� �̺�Ʈ�� �����Ѵ�. - @param func read�� ȣ��� �Լ� ������ ���� �Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 읽기에 대한 이벤트를 지정한다. + @param func read시 호출될 함수 포인터를 설정 한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_on_read ( ipc_call_func_t *func ) { @@ -303,11 +303,11 @@ int ipc_call_on_read ( ipc_call_func_t *func ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� ���ŵ� ������ ������ BIN �������� �д´�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return 0 ���� - -1 ���� - @remark �� �Լ��� �ʿ䰡 ������ ����. �Ǵ��ʿ� +/** @brief IPC_CALL 의 수신된 버퍼의 내용을 BIN 형식으로 읽는다. + @param msec timeout될 디폴트 시간을 정한다. + @return 0 성공 + -1 실패 + @remark 이 함수는 필요가 없을것 같다. 판단필요 *///---------------------------------------------------------------------------- int ipc_call_read ( void *buf, int len ) { @@ -336,10 +336,10 @@ int ipc_call_read ( void *buf, int len ) //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� BIN �������� ������ �����Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 BIN 형식으로 데이터를 전송한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_send ( unsigned long dest, void *buf, int len, unsigned long msg_type ) { @@ -407,10 +407,10 @@ int ipc_call_send ( unsigned long dest, void *buf, int len, unsigned long ms //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� XML �������� ������ �����Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 XML 형식으로 데이터를 전송한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_send_xml ( unsigned long dest, char *buf, int len ) { @@ -419,10 +419,10 @@ int ipc_call_send_xml ( unsigned long dest, char *buf, int len ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� ASC �������� ������ �����Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return 0 ���� - -1 ���� +/** @brief IPC_CALL 의 ASC 형식으로 데이터를 전송한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 0 성공 + -1 실패 *///---------------------------------------------------------------------------- int ipc_call_send_asc ( unsigned long dest, char *buf, int len ) { @@ -430,10 +430,10 @@ int ipc_call_send_asc ( unsigned long dest, char *buf, int len ) } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� BIN �������� ������ �����ϰ� �����Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return ��� ���� - ���� ���� +/** @brief IPC_CALL 의 BIN 형식으로 데이터를 전송하고 수신한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 양수 성공 + 음수 실패 *///---------------------------------------------------------------------------- int ipc_call_rpc_raw ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen , unsigned long msg_type ) { @@ -465,18 +465,18 @@ int ipc_call_rpc_raw ( unsigned long dest, void *tbuf, int tlen , void *rbuf, sprintf( dst_uds, IPC_CALL_UDS_NAME_FORMAT, IPC_CALL_GET_PORT(dest) ); ret = uds_write( obj, dst_uds, (char *)(&packet), IPC_CALL_PACKET_HEADER_LEN + tlen ); - event_ret = poll_do_one( obj->fd, POLLIN, ipc_priv.time_out ); // POLL �̺�Ʈ�� �ö����� ��� �Ѵ�. ( TIME OUT )�̸� ���� ������. + event_ret = poll_do_one( obj->fd, POLLIN, ipc_priv.time_out ); // POLL 이벤트가 올때까지 대기 한다. ( TIME OUT )이면 빠져 나간다. if ( event_ret != POLL_EVENTED ) { - // �̺�Ʈ�� ���������� �� �Ҷ� ���� ���� ��� �Ѵ�. + // 이벤트가 정상적으로 발생 할때 까지 무한 대기 한다. while(1) { ret = uds_write( obj, dst_uds, (char *)(&packet), IPC_CALL_PACKET_HEADER_LEN + tlen ); if ( ( event_ret == POLL_TIME_OUT ) && ( ipc_priv.time_out == IPC_CALL_TIMEOUT_UNLIMIT ) ) { - event_ret = poll_do_one( obj->fd, POLLIN, ipc_priv.time_out ); // POLL �̺�Ʈ�� �ö����� ��� �Ѵ�. ( TIME OUT )�̸� ���� ������. + event_ret = poll_do_one( obj->fd, POLLIN, ipc_priv.time_out ); // POLL 이벤트가 올때까지 대기 한다. ( TIME OUT )이면 빠져 나간다. } if ( event_ret == POLL_EVENTED ) @@ -497,7 +497,7 @@ int ipc_call_rpc_raw ( unsigned long dest, void *tbuf, int tlen , void *rbuf, sprintf(host, "%s", "127.0.0.1"); udp_write( obj, host, packet.dst_id, (char *)(&packet), tlen ); - poll_do_one( obj->fd, POLLIN, ipc_priv.time_out ); // POLL �̺�Ʈ�� �ö����� ��� �Ѵ�. ( TIME OUT )�̸� ���� ������. + poll_do_one( obj->fd, POLLIN, ipc_priv.time_out ); // POLL 이벤트가 올때까지 대기 한다. ( TIME OUT )이면 빠져 나간다. ret = udp_read( obj, rbuf, rlen ); @@ -517,10 +517,10 @@ int ipc_call_rpc_raw ( unsigned long dest, void *tbuf, int tlen , void *rbuf, } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� BIN �������� ������ �����ϰ� �����Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return ��� ���� - ���� ���� +/** @brief IPC_CALL 의 BIN 형식으로 데이터를 전송하고 수신한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 양수 성공 + 음수 실패 *///---------------------------------------------------------------------------- int ipc_call_rpc( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ) { @@ -528,10 +528,10 @@ int ipc_call_rpc( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rle } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� XML �������� ������ �����ϰ� �����Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return ��� ���� - ���� ���� +/** @brief IPC_CALL 의 XML 형식으로 데이터를 전송하고 수신한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 양수 성공 + 음수 실패 *///---------------------------------------------------------------------------- int ipc_call_rpc_xml( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ) { @@ -540,10 +540,10 @@ int ipc_call_rpc_xml( unsigned long dest, void *tbuf, int tlen , void *rbuf, int } //------------------------------------------------------------------------------ -/** @brief IPC_CALL �� ASC �������� ������ �����ϰ� �����Ѵ�. - @param msec timeout�� ����Ʈ �ð��� ���Ѵ�. - @return ��� ���� - ���� ���� +/** @brief IPC_CALL 의 ASC 형식으로 데이터를 전송하고 수신한다. + @param msec timeout될 디폴트 시간을 정한다. + @return 양수 성공 + 음수 실패 *///---------------------------------------------------------------------------- int ipc_call_rpc_asc( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ) { diff --git a/app/app-prime-modbus/lib/fanet/ix.c b/app/app-prime-modbus/lib/fanet/ix.c index ffe9020..1f51472 100644 --- a/app/app-prime-modbus/lib/fanet/ix.c +++ b/app/app-prime-modbus/lib/fanet/ix.c @@ -1,22 +1,22 @@ //------------------------------------------------------------------------------ -// �� �� �� : ix.c -// ������Ʈ : fwp -// �� �� : -// �� �� �� : ����â, �̿���, ����� , �̿��� -// �� �� �� : 2009�� 1�� 17�� -// �� �� �� : -// �� �� �� : -// �� �� : -// ���̼��� : BSD +// 파 일 명 : ix.c +// 프로젝트 : fwp +// 설 명 : +// 작 성 자 : 유영창, 이영민, 문경원 , 이원재 +// 작 성 일 : 2009년 1월 17일 +// 수 정 일 : +// 수 정 일 : +// 주 의 : +// 라이센스 : BSD // to do list : // 1. ix_scan_device() : sprintf(filename_buf,"/sys/class/input/input%d/name",ix_mng[lp].input_number ); -// ���� �������� �ʿ��Ѱ� ? ���� �� ������ ���ٸ� error�� retrun �ؾ� �ϴ°�? -// ���� ������ �ִ� ���忡�� /sys/class/input/input0 ������ ����. ���� event0�� -// �ֱ� ������ �Է� ���� ������ ���� ���� ����. +// 과연 이정보가 필요한가 ? 만약 이 정보가 없다면 error로 retrun 해야 하는가? +// 내가 가지고 있는 보드에는 /sys/class/input/input0 정보가 없다. 그래도 event0가 +// 있기 때문에 입력 값을 얻어오는 데는 문제 없다. -// 3. press��ư�� ��ư�� down�Ǵ� ���� ���� ������ , ascii-2�� ��ȯ�Ѵ�. -// 4. �ΰ� ��� Ű shitf, alt,...���� Űī ���� �� ���� code���� �����ϸ� �ȵȴ�. press���� ���� ��� ������ shtfŰ�� Ű�� 6�� ������ �ڵ带 ������. -// ���� �ΰ� ��� Ű�� ��������, key ����0���� �ؼ� ��������. +// 3. press버튼은 버튼이 down되는 순간 값을 보내고 , ascii-2로 변환한다. +// 4. 부가 기능 키 shitf, alt,...등의 키카 눌려 질 때는 code값을 전달하면 안된다. press에서 예를 들어 오른쪽 shtf키는 키값 6과 동일한 코드를 가진다. +// 따라서 부가 기능 키가 눌려지면, key 값은0으로 해서 전달하자. //------------------------------------------------------------------------------ #include <stdio.h> #include <string.h> @@ -29,7 +29,7 @@ #include <linux/input.h> #include <linux/limits.h> // PATH_MAX -#include <fcntl.h> // O_RDWR , O_NOCTTY ���� ��� ���� +#include <fcntl.h> // O_RDWR , O_NOCTTY 등의 상수 정의 #include <time.h> #include <linux/kdev_t.h> // MKDEV @@ -48,16 +48,16 @@ //-------------------------------------------------------------- -// ���� ���� +// 전역 변수 //-------------------------------------------------------------- -#define ABS( x ) (((x) > 0 )? (x):-(x)) // ���밪 +#define ABS( x ) (((x) > 0 )? (x):-(x)) // 절대값 -static int ix_error_code = IXERR_NONE; // �����ڵ� +static int ix_error_code = IXERR_NONE; // 에러코드 static ix_mng_t ix_mng[IX_INPUT_DEVICE_MAX]; static int ix_mng_count = 0; -static poll_obj_t *input_obj[IX_INPUT_DEVICE_MAX]; // �Է� ����̽��� ���� ������Ʈ +static poll_obj_t *input_obj[IX_INPUT_DEVICE_MAX]; // 입력 디바이스에 대한 오브젝트 static int ix_sreen_x_min = 0; @@ -68,23 +68,23 @@ static int ix_sreen_y_max = IX_SCREEN_Y_DEFAULT; static int ix_mouse_x = IX_SCREEN_X_DEFAULT/2; static int ix_mouse_y = IX_SCREEN_Y_DEFAULT/2; -static int ix_key =0; // KEY �Է°� +static int ix_key =0; // KEY 입력값 -static ix_btn_state_t ix_button_state =0; // ��ư ���°� +static ix_btn_state_t ix_button_state =0; // 버튼 상태값 -static unsigned long ix_mouse_event_flag =0; // ���콺 �̺�Ʈ �� ( up ,down, move ..etc) -static unsigned long ix_key_event_flag =0; // key �̺�Ʈ �� ( up ,down ,press ) +static unsigned long ix_mouse_event_flag =0; // 마우스 이벤트 발생 ( up ,down, move ..etc) +static unsigned long ix_key_event_flag =0; // key 이벤트 발생 ( up ,down ,press ) static unsigned long ix_mouse_double_click_flag=0; -static ix_event_func_t ix_event_func = NULL; // �Լ� ������ // +static ix_event_func_t ix_event_func = NULL; // 함수 포인터 // static ix_cal_touch_info_t ix_cal_touch_info[IX_CAL_TOUCH_INFO_MAX]; static ix_adjust_touch_info_t ix_adjust_touch_info; -static char ix_capslock_flag =0; // Ű���� caps lock �÷��� -static char ix_numlock_flag =0; // Ű���� caps numlock �÷��� +static char ix_capslock_flag =0; // 키보드 caps lock 플래그 +static char ix_numlock_flag =0; // 키보드 caps numlock 플래그 -int ix_mouse_click_interval = IX_MOUSE_DOUBLE_CLICK_TIME_INTAVAL; // ���콺 ���� Ŭ�� Ÿ�� ���� +int ix_mouse_click_interval = IX_MOUSE_DOUBLE_CLICK_TIME_INTAVAL; // 마우스 더블 클릭 타임 인터벌 static struct timeval ix_pre_time; @@ -132,25 +132,25 @@ static char ix_askii[128] = { }; //-------------------------------------------------------------- -// �Լ� +// 함수 //-------------------------------------------------------------- static int ix_get_key_press_value(int *m_key, ix_btn_state_t button_state); //-------------------------------------------------------------- -// ���� : -// �Ű� : -// ��ȯ : ����0, ����-1 +// 설명 : +// 매계 : +// 반환 : 성공0, 실패-1 //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief - @param ���� - @return 0: ���� , -1 ���� - @remark ���� + @param 없음 + @return 0: 성공 , -1 실패 + @remark 없음 *///---------------------------------------------------------------------------- int ix_init( void ) { - // ���� ���� �ʱ�ȭ ... ���߿� ����. + // 전역 변수 초기화 ... 나중에 하자. ix_event_func = NULL; memset(ix_cal_touch_info, 0, sizeof(ix_cal_touch_info_t)*IX_CAL_TOUCH_INFO_MAX); @@ -162,25 +162,25 @@ int ix_init( void ) } //------------------------------------------------------------------------------ -/** @brief ���� ���� ���ڿ��� ��ȯ�Ѵ�. - @param ���� - @return ���� ���� ���ڿ��� ��ȯ�Ѵ�. - @remark ���� +/** @brief 에러 메시지 문자열을 반환한다. + @param 없음 + @return 에러 메시지 문자열을 반환한다. + @remark 없음 *///---------------------------------------------------------------------------- static char *ix_error_string( void ) { - char *error_string[] ={ "���� ����", //IXERR_NONE - "ix_read_event_data_low �Լ� read ���� ", //IXERR_READ - "ix_read_event_data_low �Լ� fd ���� ", //IXERR_FD - "ix_scan_device �Լ� ��ġ �������� ���� ����", //IXERR_DEV_INFO_OPEN - "ix_auto_scan_open �Լ� ���� ix_scan_device ����", //IXERR_AUTOSCAN_SCANDEVICE - "ix_auto_scan_open �Լ� ���� mknod ����", //IXERR_AUTOSCAN_MKNOD - "ix_auto_scan_open �Լ� ���� ����̽� ���� ����", //IXERR_AUTOSCAN_DEVICE_OPEN - "ix_auto_scan_open �Լ� ���� ex �Լ� ��� ����", //IXERR_AUTOSCAN_EX_ADD - "ix_write_event_low �Լ� ���� �߸��� ���� ����", //IXERR_WRITE_EVENT - "ix_write_mouse_button_action �Լ� ���� �߸��� ���� ����", //IXERR_WRITE_MOUSE_BUTTON_EVENT - "ix_write_keyboard_key_action �Լ� ���� �߸��� ���� ����", //IXERR_WRITE_KEYBOARD_EVENT + char *error_string[] ={ "에러 없음", //IXERR_NONE + "ix_read_event_data_low 함수 read 에러 ", //IXERR_READ + "ix_read_event_data_low 함수 fd 에러 ", //IXERR_FD + "ix_scan_device 함수 장치 정보파일 오픈 에러", //IXERR_DEV_INFO_OPEN + "ix_auto_scan_open 함수 에서 ix_scan_device 에러", //IXERR_AUTOSCAN_SCANDEVICE + "ix_auto_scan_open 함수 에서 mknod 에러", //IXERR_AUTOSCAN_MKNOD + "ix_auto_scan_open 함수 에서 디바이스 파일 오픈", //IXERR_AUTOSCAN_DEVICE_OPEN + "ix_auto_scan_open 함수 에서 ex 함수 등록 에러", //IXERR_AUTOSCAN_EX_ADD + "ix_write_event_low 함수 에서 잘못된 인자 에러", //IXERR_WRITE_EVENT + "ix_write_mouse_button_action 함수 에서 잘못된 인자 에러", //IXERR_WRITE_MOUSE_BUTTON_EVENT + "ix_write_keyboard_key_action 함수 에서 잘못된 인자 에러", //IXERR_WRITE_KEYBOARD_EVENT }; return( error_string[ix_error_code]); @@ -189,8 +189,8 @@ static char *ix_error_string( void ) } //------------------------------------------------------------------------------ -/** @brief ixlib�� �����ڵ�, �������ڿ� �� ����� ���� ��� - @param msg ����� ���� +/** @brief ixlib에 에러코드, 에러문자열 및 사용자 메세지 출력 + @param msg 사용자 메세지 @return @remark *///---------------------------------------------------------------------------- @@ -202,11 +202,11 @@ void ix_print_error( char *msg ) //------------------------------------------------------------------------------ -/** @brief �Է���ġ(Ű����, ���콺..���)���� �̺�Ʈ ������ �о� �´�. ��ġ�� �������� ������ �����Ͱ� ������.) - @param fd ������ �о������� ��ũ���� - @param event_data �̺�Ʈ ������ ��ȯ�Ѵ�. - @return ���� :0, ���� : -1 - @remark �� �Լ��� �̿��Ͽ� �켱 �Է� �̺�Ʈ�� �о�� �� ��ġ���� ������ �и��ؼ� ����Ѵ�. +/** @brief 입력장치(키보드, 마우스..등등)에서 이벤트 데이터를 읽어 온다. 장치에 구별없이 동일한 데이터가 읽힌다.) + @param fd 데이터를 읽어파일의 디스크립터 + @param event_data 이벤트 데이터를 반환한다. + @return 정상 :0, 실패 : -1 + @remark 이 함수를 이용하여 우선 입력 이벤트를 읽어온 후 장치별로 데이터를 분리해서 사용한다. *///---------------------------------------------------------------------------- int ix_read_event_data_low(int fd, ix_event_t *event_data ) { @@ -214,7 +214,7 @@ int ix_read_event_data_low(int fd, ix_event_t *event_data ) if(fd <0) { - ix_error_code = IXERR_FD; // ���� + ix_error_code = IXERR_FD; // 에러 return -1; } @@ -222,7 +222,7 @@ int ix_read_event_data_low(int fd, ix_event_t *event_data ) if(read_size != sizeof(ix_event_t)) { - ix_error_code = IXERR_READ; // �о�� �����Ͱ� �ùٸ��� ������ ������. + ix_error_code = IXERR_READ; // 읽어온 데이터가 올바르지 않으면 에러다. return -1; } @@ -231,8 +231,8 @@ int ix_read_event_data_low(int fd, ix_event_t *event_data ) } //------------------------------------------------------------------------------ -/** @brief ������ �Լ��̸�, ix_event_t ������ ǥ���Ѵ�. - @param event_data �Է� ��ġ���� �о�� �̺�Ʈ ������ +/** @brief 디버깅용 함수이며, ix_event_t 데이터를 표시한다. + @param event_data 입력 장치에서 읽어온 이벤트 데이터 @remark *///---------------------------------------------------------------------------- void ix_debug_disp_event_data( ix_event_t *event_data ) @@ -284,7 +284,7 @@ void ix_debug_disp_event_data( ix_event_t *event_data ) { case EV_SYN : printf("EV_SYN "); break; case EV_KEY : printf("EV_KEY "); break; - case EV_ABS : printf("EV_ABS "); break; // ��ġ ��ũ�� �Է� + case EV_ABS : printf("EV_ABS "); break; // 터치 스크린 입력 case EV_REL : printf("EV_ABS "); break; default : printf("[type]:%02x! " ,event_data->type); break; @@ -292,7 +292,7 @@ void ix_debug_disp_event_data( ix_event_t *event_data ) switch(event_data->type) { - case EV_ABS : // ���밪 + case EV_ABS : // 절대값 printf("[code:%d]%s , [value]:%d ", event_data->code , ix_code_abs_str[event_data->code], @@ -300,7 +300,7 @@ void ix_debug_disp_event_data( ix_event_t *event_data ) ); break; - case EV_REL : // ��밪 + case EV_REL : // 상대값 printf("[code:%d]%s , [value]:%d ", event_data->code , ix_code_rel_str[event_data->code], @@ -317,10 +317,10 @@ void ix_debug_disp_event_data( ix_event_t *event_data ) //------------------------------------------------------------------------------ -/** @brief Ű���� ���� �о� �´�. - @param fd Ű���忡 �ش��ϴ� ���ϵ�ũ���� - @param key ���� ���� Ű���� ��ȯ�Ѵ�. - @param key_state ����key�� ���� ��ȯ�Ѵ�. +/** @brief 키보드 값을 읽어 온다. + @param fd 키보드에 해당하는 파일디스크립터 + @param key 현재 눌린 키값을 반환한다. + @param key_state 보조key의 값을 반환한다. @return -1 @remark *///---------------------------------------------------------------------------- @@ -328,8 +328,8 @@ int ix_read_keyboard_low(int fd , int *key, int *key_state ) { ix_event_t event_data; - *key = KEY_RESERVED ; // �ʱ�ȭ - *key_state = 0; // �ʱ�ȭ + *key = KEY_RESERVED ; // 초기화 + *key_state = 0; // 초기화 while(1) { @@ -342,7 +342,7 @@ int ix_read_keyboard_low(int fd , int *key, int *key_state ) *key = event_data.code; *key_state = event_data.value; } - if(event_data.type == EV_SYN) break; // syn�� ���� ������. + if(event_data.type == EV_SYN) break; // syn가 오면 나간다. } return 0; @@ -350,12 +350,12 @@ int ix_read_keyboard_low(int fd , int *key, int *key_state ) //-------------------------------------------------------------- -// ���� : Ű���� ���� �о� �´�. -// Ű���带 ������ -// Ű�� ������ �����Ͱ� �ι� �´�. -//[Sec]665, [uSec]902491 EV_KEY [code]:2 ,[value]:1 //value�� 1�̸� down +// 설명 : 키보드 값을 읽어 온다. +// 키보드를 누른값 +// 키가 눌리면 데이터가 두번 온다. +//[Sec]665, [uSec]902491 EV_KEY [code]:2 ,[value]:1 //value가 1이면 down //[Sec]665, [uSec]902604 EV_SYN [code]:0 ,[value]:0 -// ���� key �� 2�� syn �ɶ� ���ױ� ���� +// 따라서 key 값 2를 syn 될때 보네기 위해 //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -365,10 +365,10 @@ int ix_read_keyboard_low(int fd , int *key, int *key_state ) *///---------------------------------------------------------------------------- int ix_read_key_press_low(int fd , int *key ) { - int key_state =0; // syn�ϱ� ������ ���� + int key_state =0; // syn하기 이전값 보전 ix_event_t event_data; - *key = KEY_RESERVED ; // �ʱ�ȭ + *key = KEY_RESERVED ; // 초기화 while(1) { @@ -381,7 +381,7 @@ int ix_read_key_press_low(int fd , int *key ) } if( (event_data.type == EV_SYN ) - &&(key_state == IX_KEY_VAULE_DOWN)) break; // Ű�� ���� �� syn�� ���� ������. + &&(key_state == IX_KEY_VAULE_DOWN)) break; // 키가 눌린 후 syn가 오면 나간다. } return 0; @@ -389,30 +389,30 @@ int ix_read_key_press_low(int fd , int *key ) //-------------------------------------------------------------- -// ���� : mouse ���� �о� �´�. -// ���� : -// *x : REL_X �� -// *y : REL_Y �� -// *btn: code ���� �̿��Ͽ� ���콺 ��ư ��ġ�� �Ѱ��ش�. -// ��ư�� ���ÿ� ������ ���� �� �������� ��Ʈ ����ũ �Ͽ� ���ÿ� ��ư�� ������ ���¸� �����Ѵ�. +// 설명 : mouse 값을 읽어 온다. +// 인자 : +// *x : REL_X 값 +// *y : REL_Y 값 +// *btn: code 값을 이용하여 마우스 버튼 위치를 넘겨준다. +// 버튼은 동시에 여러게 누릴 수 있음으로 비트 마스크 하여 동시에 버튼이 눌리는 상태를 전달한다. // -// [����1. ���콺 �����ʹ�ư�� ������, ���콺�� ������ ���] -// type = EV_KEY, code = BTN_LEFT, value = 1 <- ���콺 ���� ��ư�� ���� -// type = EV_REL, code = REL_X, value = -14 <- X ��ǥ���� -14�̴�. -// type = EV_REL, code = REL_Y, value = 99 <- Y ��ǥ���� +99�̴�. -// type = EV_SYN, code = 0, value = 1 <- ���ݱ��� �����Ͱ� �ϳ��� �������̴�. +// [예시1. 마우스 오른쪽버튼을 누르고, 마우스를 움직일 경우] +// type = EV_KEY, code = BTN_LEFT, value = 1 <- 마우스 왼쪽 버튼이 눌림 +// type = EV_REL, code = REL_X, value = -14 <- X 좌표값은 -14이다. +// type = EV_REL, code = REL_Y, value = 99 <- Y 좌표값은 +99이다. +// type = EV_SYN, code = 0, value = 1 <- 지금까지 데이터가 하나의 데이터이다. // -// ��ư�� ���� ���¿��� , ���콺�� �����̴� ���� Ȯ�� �Ϸ���, +// 버튼이 눌린 상태에서 , 마우스를 움직이는 값을 확인 하려면, //-------------------------------------------------------------- //------------------------------------------------------------------------------ -/** @brief ��ġ��ũ���� ��ǥ���� ���ȴ�. - @param fd ��ġ��ũ���� �ش��ϴ� ���ϵ�ũ���� - @param x x��ǥ���� ������ ������ ���� - @param y y��ǥ���� ������ ������ ���� - @param press �о�� �������� type�� EV_KEY�̰�, code�� BTN_TOUCH�϶��� value���� ������ ������ ���� - @return 0 ���� - @return -1 ���� - @remark �Ű躯���� ���� ��ǥ���� ���ȴ�. +/** @brief 터치스크린의 좌표값이 전달된다. + @param fd 터치스크린에 해당하는 파일디스크립터 + @param x x좌표값을 저장할 포인터 변수 + @param y y좌표값을 저장할 포인터 변수 + @param press 읽어온 데이터의 type가 EV_KEY이고, code가 BTN_TOUCH일때의 value값을 저장할 포인터 변수 + @return 0 성공 + @return -1 실패 + @remark 매계변수를 통해 좌표값이 전달된다. *///---------------------------------------------------------------------------- int ix_read_touch_low(int fd , int *x, int *y, int *press ) { @@ -438,7 +438,7 @@ int ix_read_touch_low(int fd , int *x, int *y, int *press ) if(event_data.code == ABS_Y) *y = event_data.value; } - if(event_data.type == EV_SYN) break; // syn�� ���� ������. + if(event_data.type == EV_SYN) break; // syn가 오면 나간다. } return 0; } @@ -446,36 +446,36 @@ int ix_read_touch_low(int fd , int *x, int *y, int *press ) //------------------------------------------------------------------------------ -/** @brief ���콺 �Է� ���� ��� �´�. - @param fd ���콺 �Է���ġ ���� ��ũ���� - @param x ���콺 ���� x��ǥ��(REL_X) ��ȯ�Ѵ�. - @param y ���콺 ���� y��ǥ��(REL_Y) ��ȯ�Ѵ�. - @param btn ���콺 ��ư ������ ��ȯ�Ѵ�.(code) - ��ư�� ���ÿ� ������ ���� �� �������� ��Ʈ ����ũ �Ͽ� ���ÿ� ��ư�� ������ ���¸� �����Ѵ�. - - @return -1 ���콺 �Է� ���� �б� ���� - @return 0 ���콺 �Է� ���б� ���� - @remark [����1. ���콺 �����ʹ�ư�� ������, ���콺�� ������ ���] - type = EV_KEY, code = BTN_LEFT, value = 1 <- ���콺 ���� ��ư�� ���� - type = EV_REL, code = REL_X, value = -14 <- X ��ǥ���� -14�̴�. - type = EV_REL, code = REL_Y, value = 99 <- Y ��ǥ���� +99�̴�. - type = EV_SYN, code = 0, value = 1 <- ���ݱ��� �����Ͱ� �ϳ��� �������̴�. +/** @brief 마우스 입력 값을 얻어 온다. + @param fd 마우스 입력장치 파일 디스크립터 + @param x 마우스 상태 x좌표값(REL_X) 반환한다. + @param y 마우스 상태 y좌표값(REL_Y) 반환한다. + @param btn 마우스 버튼 눌림을 반환한다.(code) + 버튼은 동시에 여러게 누릴 수 있음으로 비트 마스크 하여 동시에 버튼이 눌리는 상태를 전달한다. + + @return -1 마우스 입력 값을 읽기 실패 + @return 0 마우스 입력 값읽기 성공 + @remark [예시1. 마우스 오른쪽버튼을 누르고, 마우스를 움직일 경우] + type = EV_KEY, code = BTN_LEFT, value = 1 <- 마우스 왼쪽 버튼이 눌림 + type = EV_REL, code = REL_X, value = -14 <- X 좌표값은 -14이다. + type = EV_REL, code = REL_Y, value = 99 <- Y 좌표값은 +99이다. + type = EV_SYN, code = 0, value = 1 <- 지금까지 데이터가 하나의 데이터이다. *///---------------------------------------------------------------------------- -/** @brief ���콺 �Է� ���� ��� �´�. - @param fd ���콺 �Է���ġ ���� ��ũ���� - @param x ���콺 ���� x��ǥ��(REL_X)�� ��ȯ�� ������ ���� - @param y ���콺 ���� y��ǥ��(REL_Y)�� ��ȯ�� ������ ���� - @param btn ���콺 ��ư ������ ��ȯ�Ѵ�.(code) - ��ư�� ���ÿ� ������ ���� �� �������� ��Ʈ ����ũ �Ͽ� ���ÿ� ��ư�� ������ ���¸� �����Ѵ�. - - @return -1 ���콺 �Է� ���� �б� ���� - @return 0 ���콺 �Է� ���б� ���� - @remark [����1. ���콺 �����ʹ�ư�� ������, ���콺�� ������ ���] - type = EV_KEY, code = BTN_LEFT, value = 1 <- ���콺 ���� ��ư�� ���� - type = EV_REL, code = REL_X, value = -14 <- X ��ǥ���� -14�̴�. - type = EV_REL, code = REL_Y, value = 99 <- Y ��ǥ���� +99�̴�. - type = EV_SYN, code = 0, value = 1 <- ���ݱ��� �����Ͱ� �ϳ��� �������̴�. +/** @brief 마우스 입력 값을 얻어 온다. + @param fd 마우스 입력장치 파일 디스크립터 + @param x 마우스 상태 x좌표값(REL_X)을 반환할 포인터 변수 + @param y 마우스 상태 y좌표값(REL_Y)을 반환할 포인터 변수 + @param btn 마우스 버튼 눌림을 반환한다.(code) + 버튼은 동시에 여러게 누릴 수 있음으로 비트 마스크 하여 동시에 버튼이 눌리는 상태를 전달한다. + + @return -1 마우스 입력 값을 읽기 실패 + @return 0 마우스 입력 값읽기 성공 + @remark [예시1. 마우스 오른쪽버튼을 누르고, 마우스를 움직일 경우] + type = EV_KEY, code = BTN_LEFT, value = 1 <- 마우스 왼쪽 버튼이 눌림 + type = EV_REL, code = REL_X, value = -14 <- X 좌표값은 -14이다. + type = EV_REL, code = REL_Y, value = 99 <- Y 좌표값은 +99이다. + type = EV_SYN, code = 0, value = 1 <- 지금까지 데이터가 하나의 데이터이다. *///---------------------------------------------------------------------------- int ix_read_mouse_low(int fd , int *x, int *y, int *btn) @@ -493,30 +493,30 @@ int ix_read_mouse_low(int fd , int *x, int *y, int *btn) switch(event_data.code) { case BTN_LEFT : - if(event_data.value == 1) *btn |= IX_MOUSE_BTN_LEFT; // ���콺 ���� ��ư�� ���� - else *btn &= ~IX_MOUSE_BTN_LEFT; // ���콺 ���� ��ư�� ���� ���� + if(event_data.value == 1) *btn |= IX_MOUSE_BTN_LEFT; // 마우스 왼쪽 버튼이 눌림 + else *btn &= ~IX_MOUSE_BTN_LEFT; // 마우스 왼쪽 버튼이 눌림 해제 break; case BTN_RIGHT : - if(event_data.value == 1) *btn |= IX_MOUSE_BTN_RIGHT; // ���콺 ������ ��ư�� ���� - else *btn &= ~IX_MOUSE_BTN_RIGHT; // ���콺 ������ ��ư�� ���� ���� + if(event_data.value == 1) *btn |= IX_MOUSE_BTN_RIGHT; // 마우스 오른쪽 버튼이 눌림 + else *btn &= ~IX_MOUSE_BTN_RIGHT; // 마우스 오른쪽 버튼이 눌림 해제 break; case BTN_MIDDLE : - if(event_data.value == 1) *btn |= IX_MOUSE_BTN_MIDDLE; // ���콺 ��� ��ư�� ���� - else *btn &= ~IX_MOUSE_BTN_MIDDLE; // ���콺 ��� ��ư�� ���� ���� + if(event_data.value == 1) *btn |= IX_MOUSE_BTN_MIDDLE; // 마우스 가운데 버튼이 눌림 + else *btn &= ~IX_MOUSE_BTN_MIDDLE; // 마우스 가운데 버튼이 눌림 해제 break; } } if( event_data.type == EV_REL) { - if(event_data.code == REL_X) *x = event_data.value; // x ���� ���� + if(event_data.code == REL_X) *x = event_data.value; // x 값을 저장 - if(event_data.code == REL_Y) *y = event_data.value; // y ���� ���� + if(event_data.code == REL_Y) *y = event_data.value; // y 값을 저장 } - if(event_data.type == EV_SYN) break; // syn�� ���� ������. + if(event_data.type == EV_SYN) break; // syn가 오면 나간다. } return 0; } @@ -524,14 +524,14 @@ int ix_read_mouse_low(int fd , int *x, int *y, int *btn) //------------------------------------------------------------------------------ -/** @brief ��ġ�� USB ������ ����� ��ġ�� �˻��� �� �����Ѵ�. - @return -1 ���� - @return 0 ���� - @remark cat /proc/bus/input/devices ���� input�� ���� ������ ��� - event�� ���� ������ �ִ� ��찡 �ִ�. - �̰�� S: Sysfs=/class/input/input ���� ����̵� �̸� ������ ��� �� �� ���µ� - �� ����̽� ������ /proc/bus/input/devices ���� ��� �� �� �ֱ� ������ �����Ͽ���. - input �� ���� ������ ���ٸ� -1�� �����ϰ� �����Ͽ���. +/** @brief 장치의 USB 버스에 연결된 장치를 검색한 후 저장한다. + @return -1 실패 + @return 0 성공 + @remark cat /proc/bus/input/devices 에서 input에 대한 정보가 없어도 + event에 대한 정보는 있는 경우가 있다. + 이경우 S: Sysfs=/class/input/input 에서 디바이드 이름 정보를 얻어 올 수 없는데 + 이 디바이스 정보는 /proc/bus/input/devices 에서 얻어 올 수 있기 때문에 수정하였다. + input 에 대한 정보가 없다면 -1을 저장하게 수정하였다. *///---------------------------------------------------------------------------- int ix_scan_device(void) { @@ -556,9 +556,9 @@ int ix_scan_device(void) return -1; } - ix_mng_count = 0; // �ʱ�ȭ + ix_mng_count = 0; // 초기화 - memset(ix_mng , 0, sizeof(ix_mng_t)*IX_INPUT_DEVICE_MAX); // �ʱ�ȭ + memset(ix_mng , 0, sizeof(ix_mng_t)*IX_INPUT_DEVICE_MAX); // 초기화 while(!feof(fp)) @@ -567,46 +567,46 @@ int ix_scan_device(void) memset(read_buf, 0, sizeof(read_buf)); - fgets(read_buf, sizeof(read_buf)-1, fp ); // �� �پ� �о�´�. + fgets(read_buf, sizeof(read_buf)-1, fp ); // 한 줄씩 읽어온다. //printf("[line data]%s" ,read_buf ); - if(read_buf[0] == 'S') // �Է� ����̽� ��ȣ�� ��ĵ�Ѵ�. + if(read_buf[0] == 'S') // 입력 디바이스 번호를 스캔한다. { sscanf(read_buf, "S: Sysfs=/class/input/input%d" ,&tmp_num1); ix_mng[ix_mng_count].input_number = tmp_num1; } - if(read_buf[0] == 'H') // �̺�Ʈ ����̽� ��ȣ�� ��ĵ�Ѵ�. + if(read_buf[0] == 'H') // 이벤트 디바이스 번호를 스캔한다. { - find_str = strstr(read_buf, "event"); // ���ڿ��� "event" �� ���� ���� �˻��ϰ� , �ִٸ� �κ� ������ �Ѱ��ش�. + find_str = strstr(read_buf, "event"); // 문자열에 "event" 가 있은 곳을 검색하고 , 있다면 부분 포인터를 넘겨준다. if(find_str !=NULL) { sscanf(find_str, "event%d" ,&tmp_num1 ); ix_mng[ix_mng_count].event_number = tmp_num1; printf( "event_number = %d\n", ix_mng[ix_mng_count].event_number ); } - else //imesu 2�� 13�� �߰� + else //imesu 2월 13일 추가 { ix_mng[ix_mng_count].event_number = -1; } } - if(read_buf[0] == 'N') // imesu 2�� 13�� �߰� , �Ʒ� �ּ�ó���� �κ��� ��ü�ϴ� �κ� + if(read_buf[0] == 'N') // imesu 2월 13일 추가 , 아래 주석처리한 부분을 대체하는 부분 { name_ptr = strchr(read_buf,'='); - name_ptr++; // = �� �ʿ� ��� ���� + name_ptr++; // = 은 필요 없어서 제외 tmp_ptr = strchr(read_buf,'\n'); //printf(" %s \n",name_ptr); strncpy(ix_mng[ix_mng_count].name , name_ptr , tmp_ptr - name_ptr); // } - if( read_buf[0] ==0x0a) ix_mng_count++; // 0x0a �� LF �� '\r' + if( read_buf[0] ==0x0a) ix_mng_count++; // 0x0a 는 LF 즉 '\r' } fclose(fp); // printf( "ix_mng_count = %d\n", ix_mng_count ); - // �Է� ��ġ�� major , minor ��ȣ�� ��´�. + // 입력 장치이 major , minor 번호를 얻는다. for(lp = 0 ; lp < ix_mng_count ; lp++) { sprintf(filename_buf,"/sys/class/input/event%d/dev" ,ix_mng[lp].event_number ); @@ -618,15 +618,15 @@ int ix_scan_device(void) { fscanf(fp , "%d:%d" ,&tmp_num1 ,&tmp_num2 ); - ix_mng[lp].dev_major = tmp_num1; // major ��ȣ ���� - ix_mng[lp].dev_minor = tmp_num2; // minor ��ȣ ���� + ix_mng[lp].dev_major = tmp_num1; // major 번호 저장 + ix_mng[lp].dev_minor = tmp_num2; // minor 번호 저장 // printf( "major = %d, minor = %d\n", ix_mng[lp].dev_major, ix_mng[lp].dev_minor ); fclose(fp); } - // ��ġ ����̽� �ΰ��� Ȯ���Ѵ�. + // 터치 디바이스 인가를 확인한다. // sprintf(filename_buf,"/sys/class/input/input%d/capabilities/abs" ,ix_mng[lp].input_number ); sprintf(filename_buf,"/sys/class/input/input%d/capabilities/abs" ,ix_mng[lp].event_number ); @@ -637,15 +637,15 @@ int ix_scan_device(void) printf( "FILE %s [%d]\n", filename_buf, tmp_num1 ); - if( tmp_num1 >= 3 ) ix_mng[lp].is_touch = 1; // ��ġ ����̽� �̴�. - else ix_mng[lp].is_touch = 0; // ��ġ ����̽� �ƴϴ�. + if( tmp_num1 >= 3 ) ix_mng[lp].is_touch = 1; // 터치 디바이스 이다. + else ix_mng[lp].is_touch = 0; // 터치 디바이스 아니다. fclose(fp); } } - // ����� ���� + // 디버그 메시지 /* for(lp = 0 ; lp < ix_mng_count ; lp++) { @@ -663,30 +663,30 @@ int ix_scan_device(void) //------------------------------------------------------------------------------ -/** @brief ����� ������ �̺�Ʈ�� �����Ѵ�. +/** @brief 사용자 영역에 이벤트를 전송한다. @param - @return 0 ���� + @return 0 성공 @remark *///---------------------------------------------------------------------------- static int ix_copy_to_user() { ie_event_t ie_data; // input event data; int mx, my; - int mkey; // Ű���� �Է°� + int mkey; // 키보드 입력값 - ix_get_mouse_position(&mx , &my); // ���콺 ��ǥ���� �Ѱ��ش�. + ix_get_mouse_position(&mx , &my); // 마우스 좌표값을 넘겨준다. - ix_get_key_value(&mkey); // keyboard �Է� ���� �Ѱ��ش�. + ix_get_key_value(&mkey); // keyboard 입력 값을 넘겨준다. if( ix_mouse_event_flag & IX_MOUSE_FLAG_BTN_DOWN ) { //printf("mouse down\n"); ix_mouse_event_flag &= ~IX_MOUSE_FLAG_BTN_DOWN; - ie_data.data.mouse.x = mx; // x ��ǥ�� - ie_data.data.mouse.y = my; // y ��ǥ�� + ie_data.data.mouse.x = mx; // x 좌표값 + ie_data.data.mouse.y = my; // y 좌표값 // printf("mx:%d, my:%d ",mx, my); - ie_data.data.mouse.state= ix_button_state; // ���°� + ie_data.data.mouse.state= ix_button_state; // 상태값 ie_data.type = IE_MOUSE_DOWN; if(ix_event_func != NULL) ix_event_func(&ie_data); } @@ -697,7 +697,7 @@ static int ix_copy_to_user() ix_mouse_event_flag &= ~IX_MOUSE_FLAG_MOVE; ie_data.data.mouse.x = mx; ie_data.data.mouse.y = my; - ie_data.data.mouse.state = ix_button_state; // ���°� + ie_data.data.mouse.state = ix_button_state; // 상태값 ie_data.type = IE_MOUSE_MOVE; if(ix_event_func != NULL) ix_event_func(&ie_data); } @@ -708,32 +708,32 @@ static int ix_copy_to_user() ix_mouse_event_flag &= ~IX_MOUSE_FLAG_BTN_UP; ie_data.data.mouse.x = mx; ie_data.data.mouse.y = my; - ie_data.data.mouse.state = ix_button_state; // ���°� + ie_data.data.mouse.state = ix_button_state; // 상태값 ie_data.type = IE_MOUSE_UP; if(ix_event_func != NULL) ix_event_func(&ie_data); } - if( ix_key_event_flag & IX_KEY_VAULE_DOWN ) // key �� ���ȴ�. + if( ix_key_event_flag & IX_KEY_VAULE_DOWN ) // key 가 눌렸다. { //printf("IX_KEY_VAULE_DOWN \n"); ix_key_event_flag &= ~IX_KEY_VAULE_DOWN; ie_data.data.key.key = mkey; ie_data.type = IE_KEY_DOWN; - ie_data.data.key.state = ix_button_state; // ���°� + ie_data.data.key.state = ix_button_state; // 상태값 if(ix_event_func != NULL) ix_event_func(&ie_data); } - if( ix_key_event_flag & IX_KEY_VAULE_UP ) // key �� ������ ���� �Ǿ���. + if( ix_key_event_flag & IX_KEY_VAULE_UP ) // key 가 눌림이 해제 되었다. { //printf("IX_KEY_VAULE_UP \n"); ix_key_event_flag &= ~IX_KEY_VAULE_UP; ie_data.data.key.key = mkey; ie_data.type = IE_KEY_UP; - ie_data.data.key.state = ix_button_state; // ���°� + ie_data.data.key.state = ix_button_state; // 상태값 if(ix_event_func != NULL) ix_event_func(&ie_data); } - if( ix_key_event_flag & IX_KEY_VAULE_PRESS ) // key ���� ����ڰ� ���������� �˼� �ִ� �ƽ�Ű ������ ��ȯ + if( ix_key_event_flag & IX_KEY_VAULE_PRESS ) // key 값을 사용자가 직관적으로 알수 있는 아스키 값으로 변환 { ix_get_key_press_value(&mkey, ix_button_state); @@ -741,15 +741,15 @@ static int ix_copy_to_user() ix_key_event_flag &= ~IX_KEY_VAULE_PRESS; ie_data.data.key.key = mkey; ie_data.type = IE_KEY_PRESS; - ie_data.data.key.state = ix_button_state; // ���°� + ie_data.data.key.state = ix_button_state; // 상태값 if(ix_event_func != NULL) ix_event_func(&ie_data); } return 0; } //------------------------------------------------------------------------------ -/** @brief ���콺 ���� Ŭ�� ���� �����Ѵ�. - @param msec ���콺 �Է��� ������ �ð� ����, ������ msec�̴�. +/** @brief 마우스 더블 클릭 간격 설정한다. + @param msec 마우스 입력이 들어오는 시간 간격, 단위는 msec이다. @return @remark *///---------------------------------------------------------------------------- @@ -761,10 +761,10 @@ int ix_set_mouse_double_click_intaval(int msec) } //------------------------------------------------------------------------------ -/** @brief ���콺 ���� Ŭ���� Ȯ���Ѵ�. - @param cur_time ���� ���콺�� ���� �ð� - @return 1 ����Ŭ�� ���� - @return 0 ����Ŭ�� ���� +/** @brief 마우스 더블 클릭을 확인한다. + @param cur_time 현제 마우스가 눌린 시간 + @return 1 더블클릭 성공 + @return 0 더블클릭 실패 @remark *///---------------------------------------------------------------------------- static int ix_check_mouse_double_click( struct timeval cur_time) @@ -772,12 +772,12 @@ static int ix_check_mouse_double_click( struct timeval cur_time) /* int intaval=0; - // �ð� Ȯ�� + // 시간 확인 intaval = (cur_time.tv_usec - ix_pre_time.tv_usec); printf("cur :%ld, old :%ld, intaval :%d \n", cur_time.tv_usec,ix_pre_time.tv_usec, intaval ); if(intaval < ix_mouse_click_interval) - { // �ʱ�ȭ + { // 초기화 ix_mouse_double_click_flag++; if(ix_mouse_double_click_flag ==2 ) { @@ -800,9 +800,9 @@ static int ix_check_mouse_double_click( struct timeval cur_time) //------------------------------------------------------------------------------ -/** @brief ix_event_t ���� Ű( ���콺 ��ư, Ű���� ) �Է��� ���� �����ؼ� ��ư ���� �÷���(ix_button_state)�� �����Ѵ�. - @param event_data �Է� �̺�Ʈ ������ - @return 0 �Լ� ���� �Ϸ� +/** @brief ix_event_t 에서 키( 마우스 버튼, 키보드 ) 입력의 값을 구별해서 버튼 상태 플레그(ix_button_state)를 설정한다. + @param event_data 입력 이벤트 데이터 + @return 0 함수 동작 완료 @remark *///---------------------------------------------------------------------------- static int ix_input_event_type_key(ix_event_t event_data) @@ -810,97 +810,97 @@ static int ix_input_event_type_key(ix_event_t event_data) //printf("[code] 0x%x\n",event_data.code ); switch(event_data.code) { - case BTN_TOUCH : // touh �Է��� ���콺�� left�� ������ �Է��̴�. + case BTN_TOUCH : // touh 입력은 마우스의 left와 동일한 입력이다. case BTN_LEFT : - if(event_data.value) ix_button_state |= IX_MOUSE_BTN_LEFT; // ���콺 ���� ��ư�� ���� - else ix_button_state &= ~IX_MOUSE_BTN_LEFT; // ���콺 ���� ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_MOUSE_BTN_LEFT; // 마우스 왼쪽 버튼이 눌림 + else ix_button_state &= ~IX_MOUSE_BTN_LEFT; // 마우스 왼쪽 버튼이 눌림 해제 break; case BTN_RIGHT : - if(event_data.value) ix_button_state |= IX_MOUSE_BTN_RIGHT; // ���콺 ������ ��ư�� ���� - else ix_button_state &= ~IX_MOUSE_BTN_RIGHT; // ���콺 ������ ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_MOUSE_BTN_RIGHT; // 마우스 오른쪽 버튼이 눌림 + else ix_button_state &= ~IX_MOUSE_BTN_RIGHT; // 마우스 오른쪽 버튼이 눌림 해제 break; case BTN_MIDDLE : - if(event_data.value) ix_button_state |= IX_MOUSE_BTN_MIDDLE; // ���콺 ��� ��ư�� ���� - else ix_button_state &= ~IX_MOUSE_BTN_MIDDLE; // ���콺 ��� ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_MOUSE_BTN_MIDDLE; // 마우스 가운데 버튼이 눌림 + else ix_button_state &= ~IX_MOUSE_BTN_MIDDLE; // 마우스 가운데 버튼이 눌림 해제 break; case KEY_LEFTSHIFT : - if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_LEFT_SHIFT; // Ű���� ���� shitf ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_BTN_LEFT_SHIFT; // Ű���� ���� shitf ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_LEFT_SHIFT; // 키보드 왼쪽 shitf 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_BTN_LEFT_SHIFT; // 키보드 왼쪽 shitf 버튼이 눌림 해제 break; case KEY_RIGHTSHIFT : - if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_RIGHT_SHIFT; // Ű���� ������ shitf ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_BTN_RIGHT_SHIFT; // Ű���� ������ shitf ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_RIGHT_SHIFT; // 키보드 오른쪽 shitf 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_BTN_RIGHT_SHIFT; // 키보드 오른쪽 shitf 버튼이 눌림 해제 break; case KEY_LEFTALT : - if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_LEFT_ALT; // Ű���� ������ ALT ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_BTN_LEFT_ALT; // Ű���� ������ ALT ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_LEFT_ALT; // 키보드 왼쪽쪽 ALT 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_BTN_LEFT_ALT; // 키보드 오른쪽 ALT 버튼이 눌림 해제 break; case KEY_RIGHTALT : - if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_RIGHT_ALT; // Ű���� ������ ALT ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_BTN_RIGHT_ALT; // Ű���� ������ ALT ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_RIGHT_ALT; // 키보드 오른쪽 ALT 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_BTN_RIGHT_ALT; // 키보드 오른쪽 ALT 버튼이 눌림 해제 break; case KEY_LEFTCTRL : - if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_LEFT_CTRL; // Ű���� ������ CTRL ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_BTN_LEFT_CTRL; // Ű���� ������ CTRL ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_LEFT_CTRL; // 키보드 왼쪽쪽 CTRL 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_BTN_LEFT_CTRL; // 키보드 오른쪽 CTRL 버튼이 눌림 해제 break; case KEY_RIGHTCTRL : - if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_RIGHT_CTRL; // Ű���� ������ CTRL ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_BTN_RIGHT_CTRL; // Ű���� ������ CTRL ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_BTN_RIGHT_CTRL; // 키보드 오른쪽 CTRL 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_BTN_RIGHT_CTRL; // 키보드 오른쪽 CTRL 버튼이 눌림 해제 break; case KEY_CAPSLOCK : // imesu 090215 - if(event_data.value) ix_button_state |= IX_KEYBOARD_CAPSLOCK; // Ű���� ������ CTRL ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_CAPSLOCK; // Ű���� ������ CTRL ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_CAPSLOCK; // 키보드 오른쪽 CTRL 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_CAPSLOCK; // 키보드 오른쪽 CTRL 버튼이 눌림 해제 break; case KEY_NUMLOCK : // imesu 090215 - if(event_data.value) ix_button_state |= IX_KEYBOARD_NUMLOCK; // Ű���� Num Lock ��ư�� ���� - else ix_button_state &= ~IX_KEYBOARD_NUMLOCK; // Ű���� Num Lock ��ư�� ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_NUMLOCK; // 키보드 Num Lock 버튼이 눌림 + else ix_button_state &= ~IX_KEYBOARD_NUMLOCK; // 키보드 Num Lock 버튼이 눌림 해제 break; case KEY_UP : // imesu 090215 - if(event_data.value) ix_button_state |= IX_KEYBOARD_UP; // Ű���� ���� ����Ű ���� - else ix_button_state &= ~IX_KEYBOARD_UP; // Ű���� ���� ����Ű ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_UP; // 키보드 윗쪽 방향키 눌림 + else ix_button_state &= ~IX_KEYBOARD_UP; // 키보드 윗쪽 방향키 눌림 해제 break; case KEY_DOWN : // imesu 090215 - if(event_data.value) ix_button_state |= IX_KEYBOARD_DOWN; // Ű���� �Ʒ��� ����Ű ���� - else ix_button_state &= ~IX_KEYBOARD_DOWN; // Ű���� �Ʒ��� ����Ű ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_DOWN; // 키보드 아래쪽 방향키 눌림 + else ix_button_state &= ~IX_KEYBOARD_DOWN; // 키보드 아래쪽 방향키 눌림 해제 break; - case KEY_LEFT : // imesu 090215 ����Ű - if(event_data.value) ix_button_state |= IX_KEYBOARD_LEFT; // Ű���� ���� ����Ű ��ư ���� - else ix_button_state &= ~IX_KEYBOARD_LEFT; // Ű���� ���� ����Ű ��ư ���� ���� + case KEY_LEFT : // imesu 090215 방향키 + if(event_data.value) ix_button_state |= IX_KEYBOARD_LEFT; // 키보드 왼쪽 방향키 버튼 눌림 + else ix_button_state &= ~IX_KEYBOARD_LEFT; // 키보드 왼쪽 방향키 버튼 툴림 해제 break; case KEY_RIGHT : // imesu 090215 - if(event_data.value) ix_button_state |= IX_KEYBOARD_RIGHT; // Ű���� ������ ����Ű ��ư ���� - else ix_button_state &= ~IX_KEYBOARD_RIGHT; // Ű���� ������ ����Ű ��ư ���� ���� + if(event_data.value) ix_button_state |= IX_KEYBOARD_RIGHT; // 키보드 오른쪽 방향키 버튼 눌림 + else ix_button_state &= ~IX_KEYBOARD_RIGHT; // 키보드 오른쪽 방향키 버튼 눌림 해제 break; - default : // ���� : ��ư ���� �������� Ű����� ó���ߴ�. ���߿� ������ �κ� - //if(event_data.value == 1) ix_button_state= event_data.value; // key�� ���������� ���� ������ �ִ´�. + default : // 주의 : 버튼 말고 나머지는 키보드로 처리했다. 나중에 수정할 부분 + //if(event_data.value == 1) ix_button_state= event_data.value; // key가 눌려있을때 값을 무조건 넣는다. break; } - // ���� Ŭ�� Ȯ�� + // 더블 클릭 확인 switch(event_data.code) { - case BTN_TOUCH : // touh �Է��� ���콺�� left�� ������ �Է��̴�. + case BTN_TOUCH : // touh 입력은 마우스의 left와 동일한 입력이다. case BTN_LEFT : if(ix_check_mouse_double_click(event_data.time)) { - if(event_data.value) ix_mouse_event_flag |=IX_MOUSE_FLAG_DOUBLE_CLICK; //���콺�� ���ȴ�. - else ix_mouse_event_flag &=~IX_MOUSE_FLAG_DOUBLE_CLICK; // ���콺�� ���� ���� + if(event_data.value) ix_mouse_event_flag |=IX_MOUSE_FLAG_DOUBLE_CLICK; //마우스가 눌렸다. + else ix_mouse_event_flag &=~IX_MOUSE_FLAG_DOUBLE_CLICK; // 마우스가 눌림 해제 } break; @@ -909,25 +909,25 @@ static int ix_input_event_type_key(ix_event_t event_data) break; } - // FLAG���� + // FLAG설정 switch(event_data.code) { - case BTN_TOUCH : // touh �Է��� ���콺�� left�� ������ �Է��̴�. + case BTN_TOUCH : // touh 입력은 마우스의 left와 동일한 입력이다. case BTN_LEFT : case BTN_RIGHT : case BTN_MIDDLE : - if(event_data.value) ix_mouse_event_flag |=IX_MOUSE_FLAG_BTN_DOWN; //���콺�� ���ȴ�. - else ix_mouse_event_flag |=IX_MOUSE_FLAG_BTN_UP; // ���콺�� ���� ���� + if(event_data.value) ix_mouse_event_flag |=IX_MOUSE_FLAG_BTN_DOWN; //마우스가 눌렸다. + else ix_mouse_event_flag |=IX_MOUSE_FLAG_BTN_UP; // 마우스가 눌림 해제 break; - case KEY_CAPSLOCK : // imesu 090215 ��ư�� ������ DOWN -> UP�� �ȴ�. �� 2��ix_input_event_type_key()�� ȣ��ȴ�. ���� DOWN �ɶ� FLAG �����ϰ� �Ѵ�. + case KEY_CAPSLOCK : // imesu 090215 버튼을 누르면 DOWN -> UP이 된다. 즉 2번ix_input_event_type_key()가 호출된다. 그래서 DOWN 될때 FLAG 설정하게 한다. if(event_data.value) { - ix_key_event_flag |= IX_KEY_VAULE_DOWN; // Ű���� Num Lock ��ư�� ���� - ix_key_event_flag |= IX_KEY_VAULE_PRESS; // key�� ���ȴ�. low code ���� ascii������ ��ȯ ex) KEY_1 -> 0x30 + ix_key_event_flag |= IX_KEY_VAULE_DOWN; // 키보드 Num Lock 버튼이 눌림 + ix_key_event_flag |= IX_KEY_VAULE_PRESS; // key가 눌렸다. low code 값을 ascii값으로 변환 ex) KEY_1 -> 0x30 - if(!ix_capslock_flag) ix_capslock_flag = FLAG_SET; // CapsLock ����� ���� �Ǿ���. - else ix_capslock_flag = FLAG_RELEASE; // CapsLock ����� ���� �Ǿ���. + if(!ix_capslock_flag) ix_capslock_flag = FLAG_SET; // CapsLock 기능이 설정 되었다. + else ix_capslock_flag = FLAG_RELEASE; // CapsLock 기능이 해제 되었다. } else { @@ -940,11 +940,11 @@ static int ix_input_event_type_key(ix_event_t event_data) case KEY_NUMLOCK : // imesu 090215 if(event_data.value) { - ix_key_event_flag |= IX_KEY_VAULE_DOWN; // Ű���� Num Lock ��ư�� ���� - ix_key_event_flag |= IX_KEY_VAULE_PRESS; // key�� ���ȴ�. low code ���� ascii������ ��ȯ ex) KEY_1 -> 0x30 + ix_key_event_flag |= IX_KEY_VAULE_DOWN; // 키보드 Num Lock 버튼이 눌림 + ix_key_event_flag |= IX_KEY_VAULE_PRESS; // key가 눌렸다. low code 값을 ascii값으로 변환 ex) KEY_1 -> 0x30 - if(!ix_numlock_flag) ix_numlock_flag = FLAG_SET; // CapsLock ����� ���� �Ǿ���. - else ix_numlock_flag = FLAG_RELEASE; // CapsLock ����� ���� �Ǿ���. + if(!ix_numlock_flag) ix_numlock_flag = FLAG_SET; // CapsLock 기능이 설정 되었다. + else ix_numlock_flag = FLAG_RELEASE; // CapsLock 기능이 해제 되었다. } else { @@ -953,17 +953,17 @@ static int ix_input_event_type_key(ix_event_t event_data) break; - default : // ���� : ��ư ���� �������� Ű����� ó���ߴ�. ���߿� ������ �κ� - ix_key = event_data.code; // key ���� �ִ´�. + default : // 주의 : 버튼 말고 나머지는 키보드로 처리했다. 나중에 수정할 부분 + ix_key = event_data.code; // key 값을 넣는다. if(event_data.value ) { - ix_key_event_flag |= IX_KEY_VAULE_DOWN; // key�� ���ȴ�. low code ���� ���� - ix_key_event_flag |= IX_KEY_VAULE_PRESS; // key�� ���ȴ�. low code ���� ascii������ ��ȯ ex) KEY_1 -> 0x30 + ix_key_event_flag |= IX_KEY_VAULE_DOWN; // key가 눌렸다. low code 값을 전달 + ix_key_event_flag |= IX_KEY_VAULE_PRESS; // key가 눌렸다. low code 값을 ascii값으로 변환 ex) KEY_1 -> 0x30 } else { - ix_key_event_flag |= IX_KEY_VAULE_UP; // key�� ���ȴ�. + ix_key_event_flag |= IX_KEY_VAULE_UP; // key가 눌렸다. } break; } @@ -974,26 +974,26 @@ static int ix_input_event_type_key(ix_event_t event_data) //------------------------------------------------------------------------------ -/** @brief ix_event_t ���� �Է� ��ġ(���콺 )����, REL �Է� ���� �����ؼ� ix_mouse_x, ix_mouse_y�� �����Ѵ�. - @param event_data �Է� �̺�Ʈ ������ - @return 0 �Լ� ���� �Ϸ� - @brief ��� ��ǥ(REL_X, REL_Y) �Է°� �������� ix_mouse_x, ix_mouse_y�� �����Ѵ�. - @param event_data �Է� �̺�Ʈ ������ - @return 0 �Լ� ���� �Ϸ� +/** @brief ix_event_t 에서 입력 장치(마우스 )에서, REL 입력 값을 구별해서 ix_mouse_x, ix_mouse_y에 저장한다. + @param event_data 입력 이벤트 데이터 + @return 0 함수 동작 완료 + @brief 상대 좌표(REL_X, REL_Y) 입력값 전역변수 ix_mouse_x, ix_mouse_y에 저장한다. + @param event_data 입력 이벤트 데이터 + @return 0 함수 동작 완료 @remark *///---------------------------------------------------------------------------- static int ix_input_event_type_rel(ix_event_t event_data) { if(event_data.code == REL_X) { - ix_mouse_x += event_data.value; // x ���� ���� + ix_mouse_x += event_data.value; // x 값을 저장 if(ix_mouse_x < ix_sreen_x_min ) ix_mouse_x = ix_sreen_x_min; if(ix_mouse_x >= ix_sreen_x_max ) ix_mouse_x = ix_sreen_x_max-1; } if(event_data.code == REL_Y) { - ix_mouse_y += event_data.value; // y ���� ���� + ix_mouse_y += event_data.value; // y 값을 저장 if(ix_mouse_y < ix_sreen_y_min ) ix_mouse_y = ix_sreen_y_min; if(ix_mouse_y >= ix_sreen_y_max ) ix_mouse_y = ix_sreen_y_max-1; @@ -1005,15 +1005,15 @@ static int ix_input_event_type_rel(ix_event_t event_data) } //-------------------------------------------------------------- -// ���� : ABS �� ó�� +// 설명 : ABS 값 처리 //-------------------------------------------------------------- //------------------------------------------------------------------------------ -/** @brief ix_event_t ���� �Է� ��ġ(���콺 )����, ABS �Է� ���� �����ؼ� ix_mouse_x, ix_mouse_y�� �����Ѵ�. - @param event_data �Է� �̺�Ʈ ������ - @return 0 �Լ� ���� �Ϸ� - @brief ���� ��ǥ(ABS_X, ABS_Y) �Է°��� �������� ix_mouse_x, ix_mouse_y�� �����Ѵ�. - @param event_data �Է� �̺�Ʈ ������ - @return 0 �Լ� ���� �Ϸ� +/** @brief ix_event_t 에서 입력 장치(마우스 )에서, ABS 입력 값을 구별해서 ix_mouse_x, ix_mouse_y에 저장한다. + @param event_data 입력 이벤트 데이터 + @return 0 함수 동작 완료 + @brief 절대 좌표(ABS_X, ABS_Y) 입력값을 전역변수 ix_mouse_x, ix_mouse_y에 저장한다. + @param event_data 입력 이벤트 데이터 + @return 0 함수 동작 완료 @remark *///---------------------------------------------------------------------------- static int ix_input_event_type_abs(ix_event_t event_data) @@ -1022,7 +1022,7 @@ static int ix_input_event_type_abs(ix_event_t event_data) int x, y; if(event_data.code == ABS_X) { - ix_mouse_x = event_data.value; // x ���� ���� + ix_mouse_x = event_data.value; // x 값을 저장 if(ix_adjust_touch_flag) { @@ -1043,7 +1043,7 @@ static int ix_input_event_type_abs(ix_event_t event_data) } if(event_data.code == ABS_Y) { - ix_mouse_y = event_data.value; // y ���� ���� + ix_mouse_y = event_data.value; // y 값을 저장 if(ix_adjust_touch_flag) { @@ -1072,9 +1072,9 @@ static int ix_input_event_type_abs(ix_event_t event_data) //------------------------------------------------------------------------------ -/** @brief �̺�Ʈ �Է��� �о� �� �� IX EVENT ������ ���, �̺�Ʈ ���̺귯��(exLib)�� ����ϱ� ���� ���� �۾��� �Ѵ�. - @param on_self �̺�Ʈ ���̺귯��(exLib)�� ����ϱ� ���� ������ �����̴�. - @return 0 ���� +/** @brief 이벤트 입력을 읽어 온 후 IX EVENT 메시지를 들며, 이벤트 라이브러리(exLib)에 등록하기 위한 사전 작업을 한다. + @param on_self 이벤트 라이브러리(exLib)에 등록하기 위한 포인터 변수이다. + @return 0 성공 @remark *///---------------------------------------------------------------------------- static int ix_event_read(void *on_self ) @@ -1088,7 +1088,7 @@ static int ix_event_read(void *on_self ) ix_read_event_data_low(mng->fd , &event_data); - //ix_debug_disp_event_data(&event_data); // �̺�Ʈ ������ �� Ȯ���Ѵ�. + //ix_debug_disp_event_data(&event_data); // 이벤트 데이터 를 확인한다. switch(event_data.type) { @@ -1098,7 +1098,7 @@ static int ix_event_read(void *on_self ) case EV_ABS : ix_input_event_type_abs(event_data); break; - case EV_SYN : ix_copy_to_user(); break; // ����� ������ �̺�Ʈ�� �����Ѵ�. + case EV_SYN : ix_copy_to_user(); break; // 사용자 영역에 이벤트를 전송한다. default : break; } @@ -1110,15 +1110,15 @@ static int ix_event_read(void *on_self ) //------------------------------------------------------------------------------ -/** @brief �˻��� ��ġ�� mknod ���� ,������ Open�Ѵ�. \n - ���� : http://forum.falinux.com/zbxe/?mid=Kernel_API&document_srl=405682&listStyle=&cpage= - @param path : �⺻ ��ġ - @param major : ��ġ�� major ��ȣ - @param minor : ��ġ�� minor ��ȣ - @param open_flag : open �Ҷ� flag �ɼ� - @return ���� : ���� ��ũ���� , 0���� ũ�ų� ����. \n - ���� : 0 ���� �۴�. - @remark Thread �� �����Ǿ����� ���� +/** @brief 검색된 장치를 mknod 한후 ,파일을 Open한다. \n + 참고 : http://forum.falinux.com/zbxe/?mid=Kernel_API&document_srl=405682&listStyle=&cpage= + @param path : 기본 위치 + @param major : 장치의 major 번호 + @param minor : 장치의 minor 번호 + @param open_flag : open 할때 flag 옵션 + @return 성공 : 파일 디스크립션 , 0보다 크거나 같다. \n + 실패 : 0 보다 작다. + @remark Thread 는 고려되어있지 않음 *///---------------------------------------------------------------------------- int ux_mknod_device_open(char *path, char major, char minor , int open_flag) @@ -1128,17 +1128,17 @@ int ux_mknod_device_open(char *path, char major, char minor , int open_flag) static int mknod_count =0; - sprintf(file_name, "%s-%d-%d", path , getpid(), ++mknod_count ); // �ߺ� ���� + sprintf(file_name, "%s-%d-%d", path , getpid(), ++mknod_count ); // 중복 방지 - remove(file_name); // ���� ���� ������ �ִ°� �����Ѵ�. remove�Լ��� ���� open�ϰ� ������ ���� + remove(file_name); // 당장 삭제 기존에 있는건 삭제한다. remove함수는 누가 open하고 있으면 실패 - // mknod �Ѵ�. + // mknod 한다. mknod(file_name, (S_IRWXU|S_IRWXG|S_IFCHR), MKDEV(major , minor)); - dev_fd = open(file_name, open_flag); // mknod �� ������ open �� �� fd�� ���´�. + dev_fd = open(file_name, open_flag); // mknod 된 파일을 open 한 후 fd를 얻어온다. if(dev_fd < 0) return dev_fd; - unlink(file_name); // ���μ����� ����� �� �ڵ��� ���� ���� .. ���� ���� �����Ǵ°� �ƴϴ�.^^; + unlink(file_name); // 프로세스가 종료될 때 자동의 파일 삭제 .. 지금 당장 삭제되는게 아니다.^^; return dev_fd; } @@ -1146,14 +1146,14 @@ int ux_mknod_device_open(char *path, char major, char minor , int open_flag) //------------------------------------------------------------------------------ -/** @brief �˻��� ��ġ�� mknod �Ѵ�. - 1)�Է� ��ġ�� �ڵ� �˻� +/** @brief 검색된 장치를 mknod 한다. + 1)입력 장치를 자동 검색 2) mknod - 3) ����̽� ���� ����.. - 4) ex �Լ� ��� @param - @param path �⺻ ���丮 ��ġ - @return 0 ���� - @return 1 ���� + 3) 디바이스 파일 오픈.. + 4) ex 함수 등록 @param + @param path 기본 디렉토리 위치 + @return 0 성공 + @return 1 실패 @remark *///---------------------------------------------------------------------------- int ix_auto_scan_open( char *path ) @@ -1161,7 +1161,7 @@ int ix_auto_scan_open( char *path ) char device_path[PATH_MAX]; // 4096 int lp=0; - // 1)�Է� ��ġ�� �ڵ� �˻� + // 1)입력 장치를 자동 검색 if(ix_scan_device() <0) { ix_error_code = IXERR_AUTOSCAN_SCANDEVICE; @@ -1169,7 +1169,7 @@ int ix_auto_scan_open( char *path ) } // 2) mknod - // 3) ����̽� ���� ����.. + // 3) 디바이스 파일 오픈.. for( lp= 0 ; lp < ix_mng_count;lp++) { sprintf(device_path, "%s/event%d", path, ix_mng[lp].event_number); @@ -1177,7 +1177,7 @@ int ix_auto_scan_open( char *path ) if(ix_mng[lp].fd < 0) continue; - // 4) ex �Լ� ��� + // 4) ex 함수 등록 //poll_obj_t *poll_add( int fd ) input_obj[lp] = poll_add( ix_mng[lp].fd ); @@ -1194,25 +1194,25 @@ int ix_auto_scan_open( char *path ) } //-------------------------------------------------------------- -// ���� : ��ġ ���� ��ũ���� ��´�. -// �ڵ����� mknod �Ѵ�. -// 1) �Է� ��ġ�� ��ġ �˻� +// 설명 : 터치 파일 디스크립터를 얻는다. +// 자동으로 mknod 한다. +// 1) 입력 장치중 터치 검색 // 2) mknod -// 3) ����̽� ���� ����.. -// 4) ex �Լ� ��� -// �Ű� : path : �⺻ ���丮 ��ġ -// ��ȯ : fd ���� ��ũ���� -// ���� : +// 3) 디바이스 파일 오픈.. +// 4) ex 함수 등록 +// 매개 : path : 기본 디렉토리 위치 +// 반환 : fd 파일 디스크립터 +// 주의 : //-------------------------------------------------------------- //------------------------------------------------------------------------------ -/** @brief ��ġ ���� ��ũ���� ���� �� �ڵ����� mknod �Ѵ�. - 1) �Է� ��ġ�� ��ġ �˻� +/** @brief 터치 파일 디스크립터를 얻은 후 자동으로 mknod 한다. + 1) 입력 장치중 터치 검색 2) mknod - 3) ����̽� ���� ����.. - 4) ex �Լ� ��� - @param path �⺻ ���丮 ��ġ - @return fd ���� ��ũ���� - @return -1 ���� + 3) 디바이스 파일 오픈.. + 4) ex 함수 등록 + @param path 기본 디렉토리 위치 + @return fd 파일 디스크립터 + @return -1 실패 @remark *///---------------------------------------------------------------------------- int ix_get_touch_fd( char *path ) @@ -1236,7 +1236,7 @@ int ix_get_touch_fd( char *path ) } //------------------------------------------------------------------------------ -/** @brief ��ũ�� ����� �����ϰ�, ���콺�� ���߾����� ��ġ�ϰ� �ʱ�ȭ�Ѵ�. +/** @brief 스크린 사이즈를 설정하고, 마우스를 정중앙으로 위치하게 초기화한다. @param @return @remark @@ -1253,11 +1253,11 @@ int ix_set_screen_size(int x, int y) } //------------------------------------------------------------------------------ -/** @brief ���콺 ���� ��ǥ ���´�. - @param x ���콺 x��ǥ���� ��� ������ ���� - @param y ���콺 y��ǥ���� ��� ������ ���� - @return 0 �Ϸ� - @remark �Ű������� ���� ��ǥ���� ��ȯ�Ѵ�. +/** @brief 마우스 현재 좌표 얻어온다. + @param x 마우스 x좌표값을 얻는 포인터 변수 + @param y 마우스 y좌표값을 얻는 포인터 변수 + @return 0 완료 + @remark 매개변수를 통해 좌표값을 반환한다. *///---------------------------------------------------------------------------- @@ -1271,9 +1271,9 @@ int ix_get_mouse_position(int *x, int *y) } //------------------------------------------------------------------------------ -/** @brief �̺�Ʈ ������ ó���� �Լ��� ����Ѵ�. - @param func ����� �Լ��̸� - @return 0 ���� +/** @brief 이벤트 데이터를 처리할 함수를 등록한다. + @param func 등록할 함수이름 + @return 0 성공 @remark *///---------------------------------------------------------------------------- int ix_add_event(ix_event_func_t func) @@ -1284,10 +1284,10 @@ int ix_add_event(ix_event_func_t func) } //------------------------------------------------------------------------------ -/** @brief ���� key ���� ��� �´�. - @param key Ű���� ��� ������ ���� - @return 0 �Ϸ� - @remark �Ű������� ���� ��ǥ���� ��ȯ�Ѵ�. +/** @brief 현재 key 값을 얻어 온다. + @param key 키값을 얻는 포인터 변수 + @return 0 완료 + @remark 매개변수를 통해 좌표값을 반환한다. *///---------------------------------------------------------------------------- int ix_get_key_value(int *key) { @@ -1297,10 +1297,10 @@ int ix_get_key_value(int *key) } //------------------------------------------------------------------------------ -/** @brief touch screen ���� �����ϱ� ���� ���� �ִ´�. +/** @brief touch screen 값을 보정하기 위한 값을 넣는다. @param - @return -1 ���� �� - @return 0 ���� + @return -1 에러 발생 + @return 0 정상 @remark *///---------------------------------------------------------------------------- int ix_set_cal_touch_info(int index ,ix_cal_touch_info_t one_point) @@ -1324,9 +1324,9 @@ int ix_set_cal_touch_info(int index ,ix_cal_touch_info_t one_point) //------------------------------------------------------------------------------ -/** @brief touch screen ���� ������ ���� ���� ���� �����Ѵ�. - @param ���� - @return 0 ���� +/** @brief touch screen 값을 보정을 위한 기준 값을 설정한다. + @param 없음 + @return 0 성공 @remark *///---------------------------------------------------------------------------- int ix_adjust_touch( void ) @@ -1376,22 +1376,22 @@ int ix_adjust_touch( void ) } //-------------------------------------------------------------- -// ���� : �̺�Ʈ ��ġ�� ����ڰ� ���� �̺�Ʈ ������ �־ �̺�Ʈ�� ����Ų��. -// ���� : +// 설명 : 이벤트 장치에 사용자가 직접 이벤트 정보를 넣어서 이벤트를 발생시킨다. +// 주의 : // imesu 2008-02-20 //-------------------------------------------------------------- //------------------------------------------------------------------------------ -/** @brief �̺�Ʈ ��ġ�� ����ڰ� ���� �̺�Ʈ ������ �־ �̺�Ʈ�� ����Ų��. +/** @brief 이벤트 장치에 사용자가 직접 이벤트 정보를 넣어서 이벤트를 발생시킨다. @param @return - @remark ���� ��ġ�� ������ ����� ��� ��� ��ġ �̺�Ʈ �ڵ鷯�� ����. -// : ��ġ�� ������ ����� ����� �̺κ��� ix_write_event_low()�Լ��� ��ġ�ؼ� ������� - @remark ���� ��ġ�� ������ ����� ��� ��� ��ġ �̺�Ʈ �ڵ鷯�� ����. -// : ��ġ�� ������ ����� ����� �̺κ��� ix_write_event_low()�Լ��� ��ġ�ؼ� �������!! + @remark 현재 장치를 구별할 방법에 없어서 모든 장치 이벤트 핸들러에 쓴다. +// : 장치를 구별할 방업에 생기면 이부분을 ix_write_event_low()함수로 대치해서 사용하자 + @remark 현재 장치를 구별할 방법에 없어서 모든 장치 이벤트 핸들러에 쓴다. +// : 장치를 구별할 방업에 생기면 이부분을 ix_write_event_low()함수로 대치해서 사용하자!! *///---------------------------------------------------------------------------- static int ix_write_event_bulk_low(ix_event_t *event_data) { - int flag_write_event = -1; // ix_write_event_low �Լ��� ������ üũ�� + int flag_write_event = -1; // ix_write_event_low 함수의 에러를 체크함 int lp =0; if(event_data == NULL) return -1; @@ -1400,12 +1400,12 @@ static int ix_write_event_bulk_low(ix_event_t *event_data) { if(!(ix_write_event_low(ix_mng[lp].fd, event_data ))) { - flag_write_event = 0; //�ѹ��̶� event write�� �����ϸ� ������ ����! + flag_write_event = 0; //한번이라도 event write가 성공하면 에러를 무발생! } } if(flag_write_event <0) { - return -1; //ix_write_event_low�Լ� ��� ���� + return -1; //ix_write_event_low함수 모두 실패 } return 0; @@ -1413,7 +1413,7 @@ static int ix_write_event_bulk_low(ix_event_t *event_data) //------------------------------------------------------------------------------ -/** @brief �̺�Ʈ ��ġ�� ����ڰ� ���� �̺�Ʈ ������ �־ �̺�Ʈ�� ����Ų��. +/** @brief 이벤트 장치에 사용자가 직접 이벤트 정보를 넣어서 이벤트를 발생시킨다. @param @return @remark @@ -1422,7 +1422,7 @@ int ix_write_event_low(int fd, ix_event_t *event_data ) { if( fd < 0 || event_data == NULL ) { - ix_error_code = IXERR_WRITE_EVENT; // ���� + ix_error_code = IXERR_WRITE_EVENT; // 에러 return -1; } @@ -1432,42 +1432,42 @@ int ix_write_event_low(int fd, ix_event_t *event_data ) //------------------------------------------------------------------------------ -/** @brief ���콺 Ư����ư�� Up/Down ������ ����Ų��. - @param mouse_button ���콺 ��ư���� ������ 3������ �ִ�. (IX_MOUSE_BTN_LEFT / IX_MOUSE_BTN_RIGHT /IX_MOUSE_BTN_MIDDLE) - @param action ���콺 ��ư���·� 2������ �ִ�. (IE_MOUSE_UP / IE_MOUSE_DOWN) - @return 0 ���� - @return -1 ���� +/** @brief 마우스 특정버튼의 Up/Down 엑션을 발생시킨다. + @param mouse_button 마우스 버튼으로 종류는 3가지가 있다. (IX_MOUSE_BTN_LEFT / IX_MOUSE_BTN_RIGHT /IX_MOUSE_BTN_MIDDLE) + @param action 마우스 버튼상태로 2가지가 있다. (IE_MOUSE_UP / IE_MOUSE_DOWN) + @return 0 성공 + @return -1 실패 @remark *///---------------------------------------------------------------------------- int ix_write_mouse_button_action(int mouse_button, int action) { ix_event_t event_data; - //step1: event ����ü�� ����� �� ���� + //step1: event 구조체의 공통된 값 설정 gettimeofday( &event_data.time, NULL ); event_data.type = EV_KEY; - //step2: event ����ü�� ��ư ������ ���� + //step2: event 구조체의 버튼 설정값 설정 switch(mouse_button) { case IX_MOUSE_BTN_LEFT: event_data.code = BTN_LEFT; break; case IX_MOUSE_BTN_RIGHT: event_data.code = BTN_RIGHT; break; case IX_MOUSE_BTN_MIDDLE: event_data.code = BTN_MIDDLE; break; - default: ix_error_code = IXERR_WRITE_MOUSE_BUTTON_EVENT; return -1; // ���� + default: ix_error_code = IXERR_WRITE_MOUSE_BUTTON_EVENT; return -1; // 에러 } - //step3: event ����ü�� ��ư ���°� ���� + //step3: event 구조체의 버튼 상태값 설정 switch(action) { case IE_MOUSE_DOWN: event_data.value = IX_MOUSE_VAULE_DOWN; break; case IE_MOUSE_UP: event_data.value = IX_MOUSE_VAULE_UP; break; - default: ix_error_code = IXERR_WRITE_MOUSE_BUTTON_EVENT; return -1; // ���� + default: ix_error_code = IXERR_WRITE_MOUSE_BUTTON_EVENT; return -1; // 에러 } - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; - //step4: SYC �� + //step4: SYC 발생 //gettimeofday( &event_data.time, NULL ); event_data.type = EV_SYN; @@ -1475,7 +1475,7 @@ int ix_write_mouse_button_action(int mouse_button, int action) event_data.value = 0; - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; return 0; @@ -1483,96 +1483,96 @@ int ix_write_mouse_button_action(int mouse_button, int action) } //------------------------------------------------------------------------------ -/** @brief ���콺 ��ġ�� �����Ų�� �̺�Ʈ�� �� ��Ų��. - @param rel_x ������ x�� ��� ��ǥ�� - @param rel_y ������ y�� ��� ��ǥ�� - @return 0 ���� - @return -1 ���� +/** @brief 마우스 위치를 변경시킨후 이벤트를 발생 시킨다. + @param rel_x 움직일 x축 상대 좌표값 + @param rel_y 움직일 y축 상대 좌표값 + @return 0 성공 + @return -1 실패 @remark *///---------------------------------------------------------------------------- int ix_write_mouse_rel_move(int rel_x, int rel_y) { ix_event_t event_data; - //step1: event ����ü�� ����� �� ���� + //step1: event 구조체의 공통된 값 설정 gettimeofday( &event_data.time, NULL ); event_data.type = EV_REL; - //step2: event ����ü�� X ���氪 ���� + //step2: event 구조체의 X 변경값 설정 event_data.code = REL_X; event_data.value = rel_x; - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; - //step3: event ����ü�� Y ���氪 ���� + //step3: event 구조체의 Y 변경값 설정 event_data.code = REL_Y; event_data.value = rel_y; - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; - //step4: SYC �� + //step4: SYC 발생 //gettimeofday( &event_data.time, NULL ); event_data.type = EV_SYN; event_data.code = SYN_REPORT; event_data.value = 0; - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; return 0; } //------------------------------------------------------------------------------ -/** @brief Ű���忡 Ű �̺�Ʈ�� ����Ų �� �̺�Ʈ�� �� ��Ų��. - @param keyboard_key ���콺 ��ư���� ������ 3������ �ִ�. (IX_MOUSE_BTN_LEFT / IX_MOUSE_BTN_RIGHT /IX_MOUSE_BTN_MIDDLE) - @param action Ű���� ��ư���·� 2������ �ִ�. (IE_KEY_UP / IE_KEY_DOWN) +/** @brief 키보드에 키 이벤트를 발생시킨 후 이벤트를 발생 시킨다. + @param keyboard_key 마우스 버튼으로 종류는 3가지가 있다. (IX_MOUSE_BTN_LEFT / IX_MOUSE_BTN_RIGHT /IX_MOUSE_BTN_MIDDLE) + @param action 키보드 버튼상태로 2가지가 있다. (IE_KEY_UP / IE_KEY_DOWN) @return - @remark keyboard_key: keyboard�� Ű code�� �ǹ���. ����: Linux Ŀ�μҼ�/include/linux/input.h�� 'Keys and buttons' �� + @remark keyboard_key: keyboard의 키 code를 의미함. 참고: Linux 커널소소/include/linux/input.h의 'Keys and buttons' 항목 *///---------------------------------------------------------------------------- int ix_write_keyboard_key_action(int keyboard_key, int action) { ix_event_t event_data; - //step1: event ����ü�� ����� �� ���� + //step1: event 구조체의 공통된 값 설정 gettimeofday( &event_data.time, NULL ); event_data.type = EV_KEY; - //step2: event ����ü�� KEY �� ���� + //step2: event 구조체의 KEY 값 설정 event_data.code = keyboard_key; - //step3: event ����ü�� �� �� ���� + //step3: event 구조체의 액션 값 설정 switch(action) { case IE_KEY_DOWN: event_data.value = 1; break; case IE_KEY_UP: event_data.value = 0; break; - default: ix_error_code = IXERR_WRITE_KEYBOARD_EVENT; return -1; // ���� + default: ix_error_code = IXERR_WRITE_KEYBOARD_EVENT; return -1; // 에러 } - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; - //step4: SYC �� + //step4: SYC 발생 //gettimeofday( &event_data.time, NULL ); event_data.type = EV_SYN; event_data.code = SYN_REPORT; event_data.value = 0; - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; return 0; } //-------------------------------------------------------------- -// to do list : ��ũ�� KEY_5�� ���� ���������� �������� �ʰ�, Ű���� �迭�� ���� ������ ������. -// ���� switch ���� ��� ���µ� ���� ����� ������? -// http://lxr.falinux.com/source/include/linux/input.h �� �ִ� Ű ���� ���� Ű���� �迭��� �����Ǿ� ��ִ? +// to do list : 매크로 KEY_5넘 들은 순차적으로 증가하지 않고, 키보드 배열에 따른 순서에 따른다. +// 그래서 switch 문에 길어 졌는데 좋은 방법이 없을까? +// http://lxr.falinux.com/source/include/linux/input.h 에 있는 키 값을 실제 키보드 배열대로 나열되어 揚獵? //-------------------------------------------------------------- //------------------------------------------------------------------------------ -/** @brief �Է� ���� ����ڰ� �ٷ� ����� �� �ִ� �ƽ�Ű �ڵ�� ��ȯ�Ͽ� ��ȯ�Ѵ�. - ���� ��� KEY_1�� 0x30���� ��ȯ�Ͽ� �����Ѵ�. - Shift , ALT, CTRLŰ�� �����Ѵ�. +/** @brief 입력 값을 사용자가 바로 사용할 수 있는 아스키 코드로 변환하여 반환한다. + 예를 들어 KEY_1은 0x30으로 변환하여 리턴한다. + Shift , ALT, CTRL키도 고려한다. @param @return @remark @@ -1585,12 +1585,12 @@ static int ix_get_key_press_value(int *m_key, ix_btn_state_t button_state) if( (button_state & IX_KEYBOARD_BTN_LEFT_SHIFT) || (button_state & IX_KEYBOARD_BTN_RIGHT_SHIFT) ) { - shift_flag = FLAG_SET; // shift �� ������ ������ flag�� �����Ѵ�. + shift_flag = FLAG_SET; // shift 가 눌려져 있으면 flag를 설정한다. } if( (button_state & IX_KEYBOARD_BTN_LEFT_ALT)||(button_state & IX_KEYBOARD_BTN_RIGHT_ALT)) { - alt = FLAG_SET; // alt �� ������ ������ flag�� �����Ѵ�. + alt = FLAG_SET; // alt 가 눌려져 있으면 flag를 설정한다. } for(askii =0 ; askii <128 ;askii ++) @@ -1599,11 +1599,11 @@ static int ix_get_key_press_value(int *m_key, ix_btn_state_t button_state) { if(shift_flag == FLAG_SET ||ix_capslock_flag == FLAG_SET) { - if(askii >= 0x41 && askii <=0x5a) *m_key = askii+0x20; // shift �� ������ �ҹ���. + if(askii >= 0x41 && askii <=0x5a) *m_key = askii+0x20; // shift 가 눌리면 소문자. } else { - *m_key = askii; // �������� ���� �ƽ�Ű �ڵ�ǥ�� �ִ�. + *m_key = askii; // 나머지는 전부 아스키 코드표에 있다. } break; } @@ -1616,7 +1616,7 @@ static int ix_get_key_press_value(int *m_key, ix_btn_state_t button_state) } /* //-------------------------------------------------------------- -// ���� : ��ġ ��ũ�� ������ ��ġ���� ��� �´�. +// 설명 : 터치 스크린 보정된 위치값을 얻어 온다. // imesu 2009-02-20 //-------------------------------------------------------------- @@ -1628,14 +1628,14 @@ int ix_touch_calcurator(int *x, int *y) int sx = 0; int sy = 0; - ix_get_mouse_position(&tx,&ty); // �������� ��ġ��ũ�� ���� ��� �´�. + ix_get_mouse_position(&tx,&ty); // 보정전의 터치스크린 값을 얻어 온다. // printf("ix_adjust_touch_info.xa:%d ",ix_adjust_touch_info.xa); // printf("ix_adjust_touch_info.xb:%d ",ix_adjust_touch_info.xb); // printf("ix_adjust_touch_info.ya:%d ",ix_adjust_touch_info.ya); // printf("ix_adjust_touch_info.yb:%d ",ix_adjust_touch_info.yb); - if(ix_adjust_touch_info.xa ==0) return -1; // �и� 0�̸� ������. + if(ix_adjust_touch_info.xa ==0) return -1; // 분모가 0이면 에러다. sx = (tx-ix_adjust_touch_info.xb)/ix_adjust_touch_info.xa; if(sx <= 0) @@ -1647,7 +1647,7 @@ int ix_touch_calcurator(int *x, int *y) sx = ix_sreen_x_max; } - if(ix_adjust_touch_info.ya ==0) return -1; // �и� 0�̸� ������. + if(ix_adjust_touch_info.ya ==0) return -1; // 분모가 0이면 에러다. sy = (ty-ix_adjust_touch_info.yb)/ix_adjust_touch_info.ya; if(sy <= 0) @@ -1666,12 +1666,12 @@ int ix_touch_calcurator(int *x, int *y) */ //------------------------------------------------------------------------------ -/** @brief ���� Ű���忡�� ���� �Է��� , ���� �Է� ������ ��ȯ ( �ƽ�Ű -> KEY_XX) - @param key : �ƽ�Ű �ڵ尪�� �Է� �´�. +/** @brief 가상 키보드에서 받은 입력을 , 실제 입력 값으로 변환 ( 아스키 -> KEY_XX) + @param key : 아스키 코드값을 입력 받는다. @return - @remark ���ڷ� ���� 1�� �� ������. - ���� ix_write_key_press('A'); ix_write_key_press(3) - �ҹ��� ó���� �߰������� �ؾ��Ѵ�. + @remark 인자로 문자 1개 만 보낸다. + 사용법 ix_write_key_press('A'); ix_write_key_press(3) + 소문자 처리를 추가적으로 해야한다. *///---------------------------------------------------------------------------- int ix_write_key_char_press(char key) { @@ -1681,14 +1681,14 @@ int ix_write_key_char_press(char key) if(key < 0 ) return -1; if(key >128) return -1; - // �ҹ��ڰ� ��� ���� �ҹ��� ó�� + // 소문자가 들어 오면 소문자 처리 if(0x61 <= key && key <=0x7a) { ix_button_state |= IX_KEYBOARD_NUMLOCK; } else { - ix_button_state &= ~IX_KEYBOARD_NUMLOCK; // Ű���� ���� shitf ��ư�� ���� ��? + ix_button_state &= ~IX_KEYBOARD_NUMLOCK; // 키보드 왼쪽 shitf 버튼이 눌림 해? // } @@ -1696,26 +1696,26 @@ int ix_write_key_char_press(char key) // printf("key_xxx :%d , key_low:%d " ,key_xxx, key); - //step1: event ����ü�� ����� �� ���� + //step1: event 구조체의 공통된 값 설정 gettimeofday( &event_data.time, NULL ); event_data.type = EV_KEY; - //step2: event ����ü�� KEY �� ���� + //step2: event 구조체의 KEY 값 설정 event_data.code = key_xxx; - //step3: event ����ü�� �� �� ���� + //step3: event 구조체의 액션 값 설정 event_data.value = 1; - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; - //step4: SYC �� + //step4: SYC 발생 //gettimeofday( &event_data.time, NULL ); event_data.type = EV_SYN; event_data.code = SYN_REPORT; event_data.value = 0; - // �̺�Ʈ�� ��� �ڵ鷯�� ����. ... ���߿� ��ġ ������ �Ǹ�, �ش� �ڵ鷯���� ���� ��������.!! + // 이벤트를 모든 핸들러에 쓴다. ... 나중에 장치 구별이 되면, 해당 핸들러에만 쓰게 수정하자.!! if(ix_write_event_bulk_low(&event_data) <0) return -1; if(ix_write_keyboard_key_action(key_xxx, IE_KEY_UP) <0 ) return -1; @@ -1725,15 +1725,15 @@ int ix_write_key_char_press(char key) //-------------------------------------------------------------- -// ���� : +// 설명 : // imesu 2009-02-20 -// ���� : -// str : ���ڿ��� �Է� �´�. -// size : ���ڿ��� ������ -// ���� : ix_write_key_press('ABC', 3); +// 인자 : +// str : 문자열을 입력 받는다. +// size : 문자열의 사이즈 +// 사용법 : ix_write_key_press('ABC', 3); //-------------------------------------------------------------- //------------------------------------------------------------------------------ -/** @brief ���� Ű���忡�� ���� �Է¿��� , ���� �Է� ������ ��ȯ ( �ƽ�Ű -> KEY_XX) +/** @brief 가상 키보드에서 받은 입력열을 , 실제 입력 값으로 변환 ( 아스키 -> KEY_XX) @param @return @remark ix_write_key_press('ABC', 3); @@ -1747,7 +1747,7 @@ int ix_write_key_string_press(char *str, int size) //-------------------------------------------------------------- -// ���� : +// 설명 : //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -1784,10 +1784,10 @@ int ix_get_touch(int x_tch, int y_tch, int *x_scr_ptr, int *y_scr_ptr) return 1; } -#if 1//���� ���� +#if 1//검토 예정 //------------------------------------------------------------------------------ -/** @brief ix_adjust_touch_info ���� ���� �Ѵ� +/** @brief ix_adjust_touch_info 값을 설정 한다 @param @return @remark @@ -1806,7 +1806,7 @@ int ix_set_touch( ix_adjust_touch_info_t *info ) } //------------------------------------------------------------------------------ -/** @brief ix_adjust_touch_info ���� �����´� +/** @brief ix_adjust_touch_info 값을 가져온다 @param @return @remark @@ -1820,10 +1820,10 @@ int ix_get_touch_info( ix_adjust_touch_info_t *info ) //------------------------------------------------------------------------------ -/** @brief ix_adjust_touch_info ���� ����Ʈ �Ѵ� +/** @brief ix_adjust_touch_info 값을 프린트 한다 @param @return - @remark 1 ����Ʈ ���� + @remark 1 프린트 성공 *///---------------------------------------------------------------------------- int ix_print_touch( void ) { @@ -1837,13 +1837,13 @@ int ix_print_touch( void ) } //-------------------------------------------------------------- -// ���� : +// 설명 : //-------------------------------------------------------------- //------------------------------------------------------------------------------ -/** @brief ix_adjust_touch_info ���� �����ϱ� ���� �ʱ�ȭ +/** @brief ix_adjust_touch_info 값을 설정하기 위한 초기화 @return - @brief ix_adjust_touch_info ���� �����ϱ� ���� �ʱ�ȭ + @brief ix_adjust_touch_info 값을 설정하기 위한 초기화 @return *///---------------------------------------------------------------------------- int ix_adjust_touch_init( void ) diff --git a/app/app-prime-modbus/lib/fanet/pollmng.c b/app/app-prime-modbus/lib/fanet/pollmng.c index 23e2ca8..604e6c0 100644 --- a/app/app-prime-modbus/lib/fanet/pollmng.c +++ b/app/app-prime-modbus/lib/fanet/pollmng.c @@ -1,20 +1,20 @@ /** @file pollmng.c @date 2009/3/19 - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief poll �� �����Ѵ�. - - @modify 2009-05-07 (�����) �����ϳ����� ���� ������ �Լ��� �߰� - 2009-05-20 (�����) tag �ν� poll_obj ��ü�� ��� �Լ� �߰� - 2009-10-09 (�����) poll_do_loop() �Լ��� ���ȣ�� ȸ���� �����ϵ��� ���� - 2010-01-04 (�����) poll_obj_t ����ü���� poll_ndx ������� ���� - poll_delete() �Լ����� tlist_delete() �Լ���� tlist_remove()�Լ��� ���� - 2010-03-19 (�����) poll_obj_t ����ü���� on_disconnect ��� �߰� - tcp �� ��� ���� - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� - 2014-09-03 (��μ�) tty�� �ƴ� stdin�� POLL_IN���� ��ϵ� ��� �� readable�ϱ� ������ - CPU �������� 100%�� �Ǵ� ������ �־ - stdin�� tty�� �ƴ� ��� �̺�Ʈ�� ������� �ʴ´�. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief poll 을 관리한다. + + @modify 2009-05-07 (오재경) 파일하나만을 폴로 돌리는 함수를 추가 + 2009-05-20 (오재경) tag 로써 poll_obj 객체를 얻는 함수 추가 + 2009-10-09 (오재경) poll_do_loop() 함수의 재귀호출 회수를 제한하도록 수정 + 2010-01-04 (오재경) poll_obj_t 구조체에서 poll_ndx 멤버변수 제거 + poll_delete() 함수에서 tlist_delete() 함수대신 tlist_remove()함수로 수정 + 2010-03-19 (오재경) poll_obj_t 구조체에서 on_disconnect 멤버 추가 + tcp 일 경우 사용됨 + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 + 2014-09-03 (김민수) tty가 아닌 stdin이 POLL_IN으로 등록될 경우 항상 readable하기 때문에 + CPU 점유율이 100%가 되는 문제가 있어서 + stdin이 tty가 아닐 경우 이벤트를 등록하지 않는다. @todo @bug @@ -24,11 +24,11 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -68,14 +68,14 @@ char desc_pollmng[] = "falinux pollmng ver 0.2.4"; -/// �� ���� ���� +/// 폴 관리 변수 static struct pollfd poll_array[POLL_MAX_COUNT]; static tlist *poll_list = NULL; -static int cnt_recursive = 0; // poll_do_loop()�� �Ϸ� �DZ� ���� poll_do_loop()�� ȣ��Ǵ� ī���� -static int is_need_rebuild = TRUE; // poll ��� ��ȭ�� ���� poll_array�� ������ �ʿ䰡 �ִ��� ���� -static int is_loop_break = FALSE; // on_poll_xx �ݹ��Լ��� ���� ��ü�� ����Ʈ�� ����Ǿ��ٸ� - // ���� ���̺�Ʈ�� �������� �ʰ� ������ ���� ���� - // TCP ������ ���� �ʿ��ϴ�. +static int cnt_recursive = 0; // poll_do_loop()가 완료 되기 저에 poll_do_loop()가 호축되는 카운터 +static int is_need_rebuild = TRUE; // poll 등록 변화에 의해 poll_array를 갱신할 필요가 있는지 여부 +static int is_loop_break = FALSE; // on_poll_xx 콜백함수에 의해 객체의 리스트가 변경되었다면 + // 다음 폴이벤트를 수행하지 않고 나가기 위한 변수 + // TCP 서버를 위해 필요하다. #ifdef MS_WIN32 @@ -87,13 +87,13 @@ static int poll( struct pollfd *a_fds, nfds_t a_nfds, int a_timeout){ struct pollfd *p_fds; FD_SET rset; -//jwjw ���� üũ DWORD dwMask; +//jwjw 이후 체크 DWORD dwMask; int cnt_rs = 0; int cnt_sock = 0; int is_socket_exists = FALSE; int ndx; - // ���� �ø��� ���� Ȯ���Ѵ�. + // 먼저 시리얼 부터 확인한다. p_fds = a_fds; for ( ndx = 0; ndx < a_nfds; ndx++){ @@ -104,7 +104,7 @@ static int poll( struct pollfd *a_fds, nfds_t a_nfds, int a_timeout){ COMSTAT comstat; ClearCommError( p_fds->fd, &dwErrorFlags, &comstat); - dwBytesRead = comstat.cbInQue; // input queue�� ���� �ִ� �������� ���� + dwBytesRead = comstat.cbInQue; // input queue에 들어와 있는 데이터의 길이 if ( 0 < dwBytesRead){ p_fds->revents = POLLIN; @@ -133,7 +133,7 @@ static int poll( struct pollfd *a_fds, nfds_t a_nfds, int a_timeout){ return cnt_rs; } - // ���� �ʿ� �̺�Ʈ�� ���ߴ��� Ȯ���Ѵ�. + // 소켓 쪽에 이벤트가 발생했는지 확인한다. p_fds = a_fds; FD_ZERO( &rset); @@ -153,7 +153,7 @@ static int poll( struct pollfd *a_fds, nfds_t a_nfds, int a_timeout){ sttTimeout.tv_usec = ( a_timeout % 1000 ) * 1000; cnt_sock = select( 0, &rset, NULL, NULL, &sttTimeout ); - if( 0 > cnt_sock ){ // ���� ��Ȳ�̹Ƿ� ��ȯ + if( 0 > cnt_sock ){ // 에러 상황이므로 반환 return -1; } else { @@ -176,15 +176,15 @@ static int poll( struct pollfd *a_fds, nfds_t a_nfds, int a_timeout){ //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü�� �����Ѵ�. +/** @brief poll 관리 객체를 생성한다. @remark *///---------------------------------------------------------------------------- void poll_init( void ) { poll_list = tlist_create(); - is_need_rebuild = TRUE; // poll ��� ��ȭ�� ���� poll_array�� ������ �ʿ䰡 �ִ��� ���� - is_loop_break = FALSE; // on_poll_xx �ݹ��Լ��� ���� ��ü�� ����Ʈ�� ����Ǿ��ٸ� + is_need_rebuild = TRUE; // poll 등록 변화에 의해 poll_array를 갱신할 필요가 있는지 여부 + is_loop_break = FALSE; // on_poll_xx 콜백함수에 의해 객체의 리스트가 변경되었다면 #ifdef MS_WIN32 @@ -199,7 +199,7 @@ void poll_init( void ) } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü�� �����Ѵ�. +/** @brief poll 관리 객체를 해제한다. @remark *///---------------------------------------------------------------------------- void poll_exit( void ) @@ -229,8 +229,8 @@ void poll_exit( void ) tlist_free( poll_list ); } //------------------------------------------------------------------------------ -/** @brief ����Ʈ�� �����Ǵ� ���ϵ�ũ���͵��� ���迭�� �籸���Ѵ�. - @remark ���� �����Ǵ� ��ü�� �̺�Ʈ�Լ��� ������� �ݵ�� ȣ���Ͽ��� �Ѵ�. +/** @brief 리스트로 관리되는 파일디스크립터들을 폴배열에 재구성한다. + @remark 폴로 관리되는 객체의 이벤트함수를 등록한후 반드시 호출하여야 한다. *///---------------------------------------------------------------------------- void poll_rebuild( void ){ @@ -271,11 +271,11 @@ void poll_rebuild( void ){ is_need_rebuild = FALSE; } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü�� ������ ���� ��ũ���� ����Ѵ�. - @param fd ���� ���� ��ũ���� - @return poll_obj_t ������ ������ - @remark �̺�Ʈ�Լ�( on_poll_in, on_poll_out )�� ������� - poll_rebuild() �Լ��� �ݵ�� ȣ���Ѵ�. +/** @brief poll 관리 객체에 열려진 파일 디스크립터를 등록한다. + @param fd 열린 파일 디스크립터 + @return poll_obj_t 형식의 포인터 + @remark 이벤트함수( on_poll_in, on_poll_out )를 등록한후 + poll_rebuild() 함수를 반드시 호출한다. *///---------------------------------------------------------------------------- poll_obj_t *poll_add( fd_t fd ) { @@ -320,9 +320,9 @@ poll_obj_t *poll_add( fd_t fd ) } } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü���� ������ ������ü ������ ��´�. - @param idx �ε��� - @return poll_obj_t ������ ������ +/** @brief poll 관리 객체에서 개개의 폴구조체 포인터를 얻는다. + @param idx 인덱스 + @return poll_obj_t 형식의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *poll_get_obj( int idx ) { @@ -334,9 +334,9 @@ poll_obj_t *poll_get_obj( int idx ) return NULL; } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü���� ����� ������ ��´�. - @param idx �ε��� - @return void ������ ������ +/** @brief poll 관리 객체에서 사용자 포인터를 얻는다. + @param idx 인덱스 + @return void 형식의 포인터 *///---------------------------------------------------------------------------- void *poll_get_priv( int idx ) { @@ -352,8 +352,8 @@ void *poll_get_priv( int idx ) return NULL; } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü�� �����ϴ� ������ ���� - @return �����ϴ� ������ ���� +/** @brief poll 관리 객체가 관리하는 파일의 개수 + @return 관리하는 파일의 개수 *///---------------------------------------------------------------------------- int poll_count( void ) { @@ -362,9 +362,9 @@ int poll_count( void ) //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü���� ���ϵ�ũ��Ʈ�� �����ϴ� ����ü�� ��ȯ�Ѵ�. - @param fd ���� ��ũ���� - @return poll_obj_t ������ ������ +/** @brief poll 관리 객체에서 파일디스크립트로 관리하는 폴객체를 반환한다. + @param fd 파일 디스크립터 + @return poll_obj_t 형식의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *poll_obj_byfd( fd_t fd ) { @@ -383,10 +383,10 @@ poll_obj_t *poll_obj_byfd( fd_t fd ) return NULL; } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü���� ��ü�� �����ͷ� �����Ѵ�. - @param obj poll_obj_t ������ ������ - @remark �����ϴ� ���ϵ� close �ȴ�. - poll_rebuild() �Լ��� ���ο��� ȣ��ǹǷ� �ܺο����� ȣ������ �ʴ´�. +/** @brief poll 관리 객체에서 객체의 포인터로 삭제한다. + @param obj poll_obj_t 형식의 포인터 + @remark 관리하는 파일도 close 된다. + poll_rebuild() 함수가 내부에서 호출되므로 외부에서는 호출하지 않는다. *///---------------------------------------------------------------------------- void poll_delete( poll_obj_t *obj ) { @@ -394,9 +394,9 @@ void poll_delete( poll_obj_t *obj ) fd = obj->fd; - free( (void *)obj ); // ����� �� �����Ѵ�. + free( (void *)obj ); // 사용한 메모리를 해제한다. - // �����ϴ� ������ �ݴ´�. + // 관리하는 파일을 닫는다. #ifdef EMBEDDED_LINUX close( fd ); @@ -409,13 +409,13 @@ void poll_delete( poll_obj_t *obj ) tlist_remove( poll_list, obj ); - poll_rebuild(); // ���� �籸���Ѵ�. + poll_rebuild(); // 폴을 재구성한다. } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü���� ���ϵ�ũ���ͷ� �����Ѵ�. - @param fd ���� ��ũ���� - @remark �����ϴ� ���ϵ� close �ȴ�. - poll_rebuild() �Լ��� ���ο��� ȣ��ǹǷ� �ܺο����� ȣ������ �ʴ´�. +/** @brief poll 관리 객체에서 파일디스크립터로 삭제한다. + @param fd 파일 디스크립터 + @remark 관리하는 파일도 close 된다. + poll_rebuild() 함수가 내부에서 호출되므로 외부에서는 호출하지 않는다. *///---------------------------------------------------------------------------- void poll_delete_byfd( fd_t fd ) { @@ -428,19 +428,19 @@ void poll_delete_byfd( fd_t fd ) } } //------------------------------------------------------------------------------ -/** @brief poll �̺�Ʈ ���� �����Լ� - @param time_out msec ������ Ÿ�Ӿƿ� - @return POLL_ASYNC_ERR �ñ׳ο� ���� �����Ǿ���. - POLL_TIME_OUT ��� �ð��� ����Ǿ���. - POLL_EVENTED �̺�Ʈ�� ���� ó���Ǿ���. - @remark �ܺ� �������� ���ȣ���Ѵ�. +/** @brief poll 이벤트 메인 루프함수 + @param time_out msec 단위의 타임아웃 + @return POLL_ASYNC_ERR 시그널에 의해 중지되었다. + POLL_TIME_OUT 대기 시간이 종료되었다. + POLL_EVENTED 이벤트가 정상 처리되었다. + @remark 외부 루프에서 계속호출한다. *///---------------------------------------------------------------------------- int poll_do_loop( int time_out ) { int fd_cnt, event_cnt; int ndx, rtnval = POLL_EVENTED; - // ���ȣ���� ȸ���� �����Ѵ�. + // 재귀호출의 회수를 제한한다. if ( POLL_RECURSIVE_COUNT < cnt_recursive ) { printf( "fatal error : poll_do_loop() recursive limit\n" ); @@ -448,11 +448,11 @@ int poll_do_loop( int time_out ) } cnt_recursive++; - if ( is_need_rebuild ){ // poll ��� ��ȭ�� ���� poll_array�� ������ �ʿ䰡 �ִ��� ���� + if ( is_need_rebuild ){ // poll 등록 변화에 의해 poll_array를 갱신할 필요가 있는지 여부 poll_rebuild(); } - // �̺�Ʈ�� ���Ҷ����� �����·� ���δ�. + // 이벤트가 발생할때까지 대기상태로 놓인다. fd_cnt = poll_list->fcount; event_cnt = poll( (struct pollfd *)&poll_array, fd_cnt, time_out ); @@ -462,7 +462,7 @@ int poll_do_loop( int time_out ) goto lable_poll_do_loop_end; } - // timeout �� ���ϸ� ��ϵ� �Լ��� ȣ���Ѵ�. + // timeout 이 발생하면 등록된 함수를 호출한다. if ( 0 == event_cnt ) { for ( ndx=0; ndx < fd_cnt; ndx++ ) @@ -479,13 +479,13 @@ int poll_do_loop( int time_out ) goto lable_poll_do_loop_end; } - is_loop_break = FALSE; // �ݹ��Լ��� ȣ���ϱ� ���� ������ �ʱ�ȭ�Ѵ�. - // �ݹ��Լ������� poll_rebuild() �Լ��� ȣ��Ǹ� ���� TRUE �� ���Ѵ�. + is_loop_break = FALSE; // 콜백함수를 호출하기 전에 변수를 초기화한다. + // 콜백함수내에서 poll_rebuild() 함수가 호출되면 값이 TRUE 로 변한다. for ( ndx=0; ndx<fd_cnt; ndx++ ) { poll_obj_t *obj; - // �Է��̺�Ʈ -------------------------------------- + // 입력이벤트 -------------------------------------- if( poll_array[ndx].revents & POLLIN ) { obj = tlist_get( poll_list, ndx ); @@ -496,7 +496,7 @@ int poll_do_loop( int time_out ) } } - // ����̺�Ʈ -------------------------------------- + // 출력이벤트 -------------------------------------- if( poll_array[ndx].revents & POLLOUT ) { obj = tlist_get( poll_list, ndx ); @@ -507,7 +507,7 @@ int poll_do_loop( int time_out ) } } - // HUP�̺�Ʈ -------------------------------------- + // HUP이벤트 -------------------------------------- if( poll_array[ndx].revents & POLLHUP ) { obj = tlist_get( poll_list, ndx ); @@ -518,7 +518,7 @@ int poll_do_loop( int time_out ) } } - // �����̺�Ʈ -------------------------------------- + // 에러이벤트 -------------------------------------- if( poll_array[ndx].revents & POLLERR ) { obj = tlist_get( poll_list, ndx ); @@ -530,7 +530,7 @@ int poll_do_loop( int time_out ) } if ( 0 >= event_cnt ) break; - if ( is_loop_break ) break; // �̺�Ʈ ó�� �� poll�� ����� ��ü�� ��ȭ�� �ִٸ�( poll_rebuild()�� ����) �б��Ѵ�. + if ( is_loop_break ) break; // 이벤트 처리 중 poll에 등록한 객체에 변화가 있다면( poll_rebuild()를 실행) 분기한다. } @@ -542,13 +542,13 @@ lable_poll_do_loop_end: //------------------------------------------------------------------------------ -/** @brief poll �̺�Ʈ�� �ϳ��� �����ڵ�θ� ������. - @param fd �����ڵ� - @param event POLLIN, POLLOUT ���� �ִ´�. - @param time_out msec ������ Ÿ�Ӿƿ� - @return POLL_ASYNC_ERR �ñ׳ο� ���� �����Ǿ���. - POLL_TIME_OUT ��� �ð��� ����Ǿ���. - POLL_EVENTED �̺�Ʈ�� ���Ͽ���. +/** @brief poll 이벤트를 하나의 파일핸들로만 돌린다. + @param fd 파일핸들 + @param event POLLIN, POLLOUT 값을 넣는다. + @param time_out msec 단위의 타임아웃 + @return POLL_ASYNC_ERR 시그널에 의해 중지되었다. + POLL_TIME_OUT 대기 시간이 종료되었다. + POLL_EVENTED 이벤트가 발생하였다. *///---------------------------------------------------------------------------- int poll_do_one( fd_t fd, int event, int time_out ) { @@ -559,7 +559,7 @@ int poll_do_one( fd_t fd, int event, int time_out ) poll_one[0].revents = 0; poll_one[0].events = event; - // �̺�Ʈ�� ���Ҷ����� �����·� ���δ�. + // 이벤트가 발생할때까지 대기상태로 놓인다. event_cnt = poll( (struct pollfd *)&poll_one, 1, time_out ); if ( 0 > event_cnt ) @@ -575,9 +575,9 @@ int poll_do_one( fd_t fd, int event, int time_out ) return POLL_EVENTED; } //------------------------------------------------------------------------------ -/** @brief poll ���� ��ü���� tag ��ȣ�� ã�� ����ü�� ��ȯ�Ѵ�. - @param tag �±�ȣ - @return poll_obj_t ������ ������ +/** @brief poll 관리 객체에서 tag 번호로 찾아 폴객체를 반환한다. + @param tag 태그번호 + @return poll_obj_t 형식의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *poll_obj_bytag( int tag ) { diff --git a/app/app-prime-modbus/lib/fanet/rspackage_dle.c b/app/app-prime-modbus/lib/fanet/rspackage_dle.c index 6096d7f..9195a49 100644 --- a/app/app-prime-modbus/lib/fanet/rspackage_dle.c +++ b/app/app-prime-modbus/lib/fanet/rspackage_dle.c @@ -5,15 +5,15 @@ char *rs_error_string( void) /** - @brief ini_error_code�� ���� ���� ���� ���ڿ��� ��ȯ - @return ���� �ڵ忡 ���� ���� ���� ���ڿ� ������ - @warning ���� ��ȯ ���� ���ڿ��� �Ҹ� ���Ѽ��� �� �ȴ�!! + @brief ini_error_code에 대한 에러 설명 문자열을 반환 + @return 에러 코드에 대한 에러 설명 문자열 포인터 + @warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!! */ { - char *error_string[] ={ "���� ����", // RSERR_NONE - "�� ����", // RSERR_OUT_OF_MEMORY - "CRC ����", // RSERR_CRC - "�ڷ� ���� �̻�" // RSERR_DATA + char *error_string[] ={ "에러 없음", // RSERR_NONE + "메모리 부족", // RSERR_OUT_OF_MEMORY + "CRC 에러", // RSERR_CRC + "자료 구조 이상" // RSERR_DATA }; return( error_string[rspackage_error_code]); @@ -47,9 +47,9 @@ char *rs_put_dle( rs_dle_t *dle, char *data, int size) } else { - dle->sz_data = -1; // CRC ���� �Ǵ� ������ �̻� + dle->sz_data = -1; // CRC 에러 또는 데이터 이상 rspackage_error_code = RSERR_DATA; - return data; // ���ݱ��� ó���� ������ ������ ��ȯ + return data; // 지금까지 처리한 이후의 포인터를 반환 } break; case __RCV_DATA : @@ -77,23 +77,23 @@ char *rs_put_dle( rs_dle_t *dle, char *data, int size) } else { - dle->sz_data = -1; // CRC ���� �Ǵ� ������ �̻� + dle->sz_data = -1; // CRC 에러 또는 데이터 이상 rspackage_error_code = RSERR_CRC; } return data; } - else // DLE ������ �ͼ��� �ȵǴ� �ڵ尡 �����Ƿ� ��ǥ�� ���� + else // DLE 다음에 와서는 안되는 코드가 왔으므로 실표로 반한 { - dle->sz_data = -1; // CRC ���� �Ǵ� ������ �̻� + dle->sz_data = -1; // CRC 에러 또는 데이터 이상 rspackage_error_code = RSERR_DATA; - return data; // ���ݱ��� ó���� ������ ������ ��ȯ + return data; // 지금까지 처리한 이후의 포인터를 반환 } break; } // switch() } // for {} - dle->sz_data = 0; // ���ŵ� �����Ͱ� ���� + dle->sz_data = 0; // 수신된 데이터가 없음 rspackage_error_code = RSERR_NONE; - return data; // ���ݱ��� ó���� ������ ������ ��ȯ + return data; // 지금까지 처리한 이후의 포인터를 반환 } rs_dle_t *rs_create_dle( int (*check_crc)( rs_dle_t *)) diff --git a/app/app-prime-modbus/lib/fanet/sharemem.c b/app/app-prime-modbus/lib/fanet/sharemem.c index 8ee5c77..4764291 100644 --- a/app/app-prime-modbus/lib/fanet/sharemem.c +++ b/app/app-prime-modbus/lib/fanet/sharemem.c @@ -1,9 +1,9 @@ /** @file sharemem.c @date 2006 - @author ����â frog@falinux.com FALinux.Co.,Ltd. - @author ����� freefrug@falinux.com FALinux.Co.,Ltd. - @brief ������ �����ϰ� �����Ѵ�. + @author 유영창 frog@falinux.com FALinux.Co.,Ltd. + @author 오재경 freefrug@falinux.com FALinux.Co.,Ltd. + @brief 공유메모리를 생성하고 해제한다. @modify @todo @@ -14,8 +14,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- #include <stdio.h> @@ -34,19 +34,19 @@ #include <sys/shm.h> -/// ������ ������ ���� ����ü +/// 공유메모리 관리를 위한 구조체 typedef struct { - int key; // ����ڰ� �ٶ� �ĺ��� - int id; // ������ �ڵ� - char data[0]; // ����ڰ� �������ϴ� �� + int key; // 사용자가 바라보는 식별자 + int id; // 공유메모리 핸들 + char data[0]; // 사용자가 엑세스하는 메모리 } share_t; //------------------------------------------------------------------------------ -/** @brief ������ �����Ѵ�. - @param key ������ �����ϴ� ����ũ�� +/** @brief 공유메모리를 삭제한다. + @param key 공유메모리를 지정하는 유니크값 @remark *///---------------------------------------------------------------------------- void share_delete( int key ) @@ -56,11 +56,11 @@ void share_delete( int key ) int id = -1; int size; - // shm ���������� ����. + // shm 정보파일을 연다. fp = fopen( "/proc/sysvipc/shm", "r" ); if(fp == NULL) return; - // ù��° ���� ���� + // 첫번째 라인 무시 fgets( line, sizeof(line), fp ); while(1) @@ -69,24 +69,24 @@ void share_delete( int key ) if ( fgets( line, sizeof(line), fp ) == NULL ) break; - // Ű���� ũ�⸦ �о�´�. + // 키값과 크기를 읽어온다. if ( sscanf( line, "%d %d %d %d", &tmp_key, &tmp_id, &tmp_perm, &tmp_size ) == 4 ) { // printf( "SHM KEY = %d ID = %d SIZE=%d\n", tmp_key, tmp_id, tmp_size ); if ( tmp_key == key ) { - id = tmp_id; // �ش��ϴ� id �� ã�Ҵ� + id = tmp_id; // 해당하는 id 를 찾았다 size = tmp_size; break; } } } - // ������ �ݴ´�. + // 파일을 닫는다. fclose( fp ); - // id �� ã�Ҵٸ� ������ �����Ѵ�. + // id 를 찾았다면 공유메모리를 삭제한다. if( id >= 0 ) { id = shmget( key, size, 0666 | IPC_CREAT); @@ -94,10 +94,10 @@ void share_delete( int key ) } } //------------------------------------------------------------------------------ -/** @brief ���� �� �����Ѵ�. - @param key ������ �����ϴ� ����ũ�� - @param size ������ ������ ũ�� - @return �Ҵ���� ������ +/** @brief 공유 메모리를 생성한다. + @param key 공유메모리를 지정하는 유니크값 + @param size 생성할 공유메모리 크기 + @return 할당받은 공유메모리 @remark *///---------------------------------------------------------------------------- void *share_create( int key, unsigned int size ) @@ -108,28 +108,28 @@ void *share_create( int key, unsigned int size ) // printf( "share_create key = %d\n" , key ); - // ���� �� �����Ͽ� �ڵ��� ��ų� �̹� ������ �ش� �ڵ��� ���� �´�. + // 공유 메모리를 생성하여 핸들을 얻거나 이미 있으면 해당 핸들을 가져 온다. id = shmget( key, sizeof(share_t) + size, 0666 | IPC_CREAT ); // printf("shmget id = %d\n", id ) if( id < 0 ) { - // ��� ������ �ٸ� ũ��� �����Ǿ� �ִٸ� - // �������� ��� ���� ó�� �ϰ� �� ������ ��û�Ѵ�. + // 만약에 기존에 다른 크기로 생성되어 있다면 + // 이전것을 모두 삭제 처리 하고 재 생성을 요청한다. // printf("Exit Share Memory %08X\n", key ); share_delete( key ); - // �ٽ� �Ҵ�´�. + // 다시 할당받는다. id = shmget( key, size + sizeof(share_t), 0666 | IPC_CREAT | IPC_EXCL ); if( id < 0 ) return NULL; } - // �������� ���� �ּҸ� ���´�. + // 공유메모리의 선두 주소를 얻어온다. ptr = shmat( id, NULL, 0 ); if( ptr == NULL ) return NULL; - // �������� ������ �����Ѵ�. + // 공유메모리의 정보를 저장한다. share = (share_t *) ptr; share->key = key; share->id = id; @@ -137,8 +137,8 @@ void *share_create( int key, unsigned int size ) return share->data; } //------------------------------------------------------------------------------ -/** @brief ���� �� �����Ѵ�. - @param data share_create() �Լ��� ���� �� ������ +/** @brief 공유 메모리를 해제한다. + @param data share_create() 함수로 받은 메모리 포인터 @remark *///---------------------------------------------------------------------------- void share_free( void *data ) @@ -149,10 +149,10 @@ void share_free( void *data ) share = (share_t *)( data - sizeof(share_t) ); id = share->id; - // ���� �� ��巹�� �������� �и��Ѵ�. + // 공유 메모리를 어드레스 공간에서 분리한다. shmdt( share ); - // ���� �� ����ϴ� ���μ����� ���ٸ� �����ϵ��� �����Ѵ�. + // 공유 메모리를 사용하는 프로세스가 없다면 삭제하도록 설정한다. shmctl( id, IPC_RMID, NULL ); } @@ -160,8 +160,8 @@ void share_free( void *data ) /* //------------------------------------------------------------------------------- -// ���� : -// ���� : +// 설명 : +// 주의 : //------------------------------------------------------------------------------- int get_usrmsg( char *buf, int size ) { @@ -178,8 +178,8 @@ int get_usrmsg( char *buf, int size ) //------------------------------------------------------------------------------- -// ���� : help -// ���� : +// 설명 : help +// 주의 : //------------------------------------------------------------------------------- void help( void ) { @@ -191,7 +191,7 @@ void help( void ) ); } -// ������ ������ �ޱ����� ����ü +// 메세지를 보내고 받기위한 구조체 typedef struct { unsigned int seq; @@ -200,8 +200,8 @@ typedef struct } msg_t; //------------------------------------------------------------------------------ -// ���� : main -// ���� : +// 설명 : main +// 주의 : //------------------------------------------------------------------------------ int main( int argc, char **argv ) { @@ -220,7 +220,7 @@ int main( int argc, char **argv ) key = strtoul( argv[2], NULL, 0 ); size = strtoul( argv[3], NULL, 0 ); - // ������ �����Ѵ�. + // 공유메모리를 생성한다. pmsg = (msg_t *)share_create( key, sizeof(msg_t) + size ); if ( NULL == pmsg ) @@ -229,7 +229,7 @@ int main( int argc, char **argv ) return -1; } - // ����Ÿ�� ������ ����. + // 데이타를 공유메모리에 쓴다. if ( dir == 'w' ) { pmsg->seq = 0; @@ -240,7 +240,7 @@ int main( int argc, char **argv ) pmsg->seq ++; } - // ����Ÿ�� �������� �д´�. + // 데이타를 공유메모리에서 읽는다. else { unsigned int seq = 0; @@ -259,7 +259,7 @@ int main( int argc, char **argv ) } } - // ������ �����Ѵ�. + // 공유메모리를 해제한다. share_free( pmsg ); printf( " shm test end\n" ); diff --git a/app/app-prime-modbus/lib/fanet/tcp.c b/app/app-prime-modbus/lib/fanet/tcp.c index a2e604b..d412e87 100644 --- a/app/app-prime-modbus/lib/fanet/tcp.c +++ b/app/app-prime-modbus/lib/fanet/tcp.c @@ -1,28 +1,28 @@ /** @file tcp.c @date 2009-03-20 - @author ����� freefrug@falinux.com - @brief tcp �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief tcp 를 사용한 통신을 담당한다. - @modify write() �Լ� ȣ��� �����Ǵ� ���� ���Ͽ� tcp_write_thread()�Լ� �߰� - send() �Լ��� ����Ͽ� ������ ������ �ʵ��� tcp_write()�Լ��� �����Ͽ����� - BF_POLICY_WRITE_NONBLOCK �ɼ����� ����Ѵ�. + @modify write() 함수 호출시 블럭되는 일이 발생하여 tcp_write_thread()함수 추가 + send() 함수를 사용하여 블럭이 발생하지 않도록 tcp_write()함수를 수정하였으며 + BF_POLICY_WRITE_NONBLOCK 옵션으로 사용한다. - 2010-03-19 (�����) poll_obj_t ����ü���� on_disconnect ��� �߰� - ���� ������ ������ ��� on_disconnect �Լ� ȣ�� - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + 2010-03-19 (오재경) poll_obj_t 구조체에서 on_disconnect 멤버 추가 + 소켓 접속이 끊어질 경우 on_disconnect 함수 호출 + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug - @remark �����带 ���ؼ� ������ �ɼǿ� LDFLAGS += -lpthread �߰� + @remark 쓰레드를 위해서 컴파일 옵션에 LDFLAGS += -lpthread 추가 @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -71,7 +71,7 @@ char desc_tcp[] = "falinux tcp ver 0.2.1"; #endif -/// tcp ���� ����ü +/// tcp 개별 구조체 typedef struct { char host[256]; @@ -79,43 +79,43 @@ typedef struct { int sock_type; struct sockaddr_in addr; - // client ���� - poll_obj_t *obj_server; // �������� �и��� Ŭ���̾�Ʈ�� ���� - long life_sec; // �Է��� Ư���ð��� ���� ������ ������ ���´�. + // client 정보 + poll_obj_t *obj_server; // 서버에서 분리된 클라이언트를 위해 + long life_sec; // 입력이 특정시가나 동안 없으면 접속을 끊는다. - // ������ ���� + // 서버용 정보 tlist *client_list; int client_max; #ifdef _USE_SEND_THREAD_ - // ������ �������� - pthread_mutex_t mutex_send; // �Ʒ��� ������ ��ȣ�Ѵ�. - int send_cnt; // ���۰��� - int send_buf_len; // ���۹��� ũ�� - char *send_buf; // ���۹��� + // 쓰레드 관련정보 + pthread_mutex_t mutex_send; // 아래의 변수를 보호한다. + int send_cnt; // 전송개수 + int send_buf_len; // 전송버퍼 크기 + char *send_buf; // 전송버퍼 #endif } tcp_priv_t; -/// ���� ���� +/// 변수 정의 static unsigned int tcp_live_sec = DEFAULT_LIVE_SEC; static unsigned int bf_policy = BF_POLICY_CLOSE_IOERR | BF_POLICY_READ_ZERO_ERROR; // | BF_POLICY_WRITE_NONBLOCK; #ifdef EMBEDDED_LINUX //------------------------------------------------------------------------------ -/** @brief ���������� ������ �������ӽ� ������ ĸ�� �Լ� - @param signo �ñ׳� ��ȣ +/** @brief 소켓접속이 끊어진 소켓접속시 에러를 캡쳐 함수 + @param signo 시그널 번호 *///---------------------------------------------------------------------------- static void sig_capture_SIGPIPE( int signo ) { - // �ñ׳� ĸ�ĸ��ϰ� ������ ���� ó���� ���� �ʴ´�. + // 시그널 캡쳐만하고 에러에 대한 처리는 하지 않는다. // printf("siganl BrokenPipe\n" ); - signo = signo; // jwjw : warning�� ���ϱ� ���� + signo = signo; // jwjw : warning을 피하기 위해 } //------------------------------------------------------------------------------ -/** @brief broken pipe ĸ�� ���� +/** @brief broken pipe 캡쳐 설정 *///---------------------------------------------------------------------------- static int hook_sigpipe = 0; @@ -134,20 +134,20 @@ static void hook_SIGPIPE( void ) } } //------------------------------------------------------------------------------ -/** @brief tcp ��å�� �����Ѵ�. - @param option bit �� �ɼ��� �����Ѵ�. - @remark BF_POLICY_CLOSE_IOERR read(), write() �Լ� �������� ������ ���´�. - BF_POLICY_CLOSE_TIMEOUT SOCK_TYPE_SERVER_CLIENT Ÿ�Կ� ���ؼ� Ư���ð��� �����Ķ�� ������ ���´�. - BF_POLICY_RELOAD_TIMEOUT SOCK_TYPE_SERVER_CLIENT Ÿ�Կ� ���ؼ� �ð��� �簻���Ѵ�. - BF_POLICY_CLOSE_OFF_LINK SOCK_TYPE_SERVER_CLIENT Ÿ�Կ� ���ؼ� �ϵ�������� ��ũ�� �������� ������ ���´�. - BF_POLICY_READ_ZERO_ERROR read() �Լ����� ���� ���� 0�̸� ����ó���Ѵ�. +/** @brief tcp 정책을 설정한다. + @param option bit 에 옵션을 설정한다. + @remark BF_POLICY_CLOSE_IOERR read(), write() 함수 에러발생시 접속을 끊는다. + BF_POLICY_CLOSE_TIMEOUT SOCK_TYPE_SERVER_CLIENT 타입에 한해서 특정시간이 지난후라면 접속을 끊는다. + BF_POLICY_RELOAD_TIMEOUT SOCK_TYPE_SERVER_CLIENT 타입에 한해서 시간을 재갱신한다. + BF_POLICY_CLOSE_OFF_LINK SOCK_TYPE_SERVER_CLIENT 타입에 한해서 하드웨어적인 링크가 끊어지면 접속을 끊는다. + BF_POLICY_READ_ZERO_ERROR read() 함수에서 읽은 값이 0이면 에러처리한다. *///---------------------------------------------------------------------------- void tcp_set_policy( unsigned int option ) { bf_policy = option; } //------------------------------------------------------------------------------ -/** @brief tcp ��å�� ��´�. +/** @brief tcp 정책을 얻는다. @return bf_policy *///---------------------------------------------------------------------------- unsigned int tcp_get_policy( void ) @@ -155,9 +155,9 @@ unsigned int tcp_get_policy( void ) return bf_policy; } //------------------------------------------------------------------------------ -/** @brief ����� �����ð� ������ ������ ���µ� ����ϴ� �ð��� �����Ѵ�. - @param sec �����ð� �ʴ��� - @remark SOCK_TYPE_SERVER_CLIENT Ÿ���� ��츸 ����ȴ�. +/** @brief 통신이 일정시간 없으면 접속을 끊는데 사용하는 시간을 설정한다. + @param sec 생존시간 초단위 + @remark SOCK_TYPE_SERVER_CLIENT 타입인 경우만 적용된다. *///---------------------------------------------------------------------------- void tcp_set_livesec( int sec ) { @@ -167,10 +167,10 @@ void tcp_set_livesec( int sec ) #endif //------------------------------------------------------------------------------ -/** @brief tcp ������ �������·� open �Ѵ�. - @param port ��Ʈ��ȣ - @param max_client �����Ҽ� �ִ� Ŭ���̾�Ʈ �ִ밳�� - @return poll_obj_t ������ ������ +/** @brief tcp 소켓을 서버형태로 open 한다. + @param port 포트번호 + @param max_client 접속할수 있는 클라이언트 최대개수 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- #ifdef EMBEDDED_LINUX @@ -183,7 +183,7 @@ poll_obj_t *tcp_open_server( int port, int max_client ) int option; int sockfd; - // broken pipe ĸ�� ���� + // broken pipe 캡쳐 설정 hook_SIGPIPE(); sockfd = socket( PF_INET, SOCK_STREAM, 0 ); @@ -193,12 +193,12 @@ poll_obj_t *tcp_open_server( int port, int max_client ) return NULL; } - // TIME-WAIT ���¿� �ִ� ���Ͽ� �Ҵ�Ǿ� �ִ� IP �ּҿ� ��Ʈ�� �ٷ� ����� �� �ֵ��� - // SO_REUSEADDR �� �ɼ� ���� TRUE �� + // TIME-WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 포트를 바로 사용할 수 있도록 + // SO_REUSEADDR 의 옵션 값을 TRUE 로 option = 1; setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); - // ������ �ý��ۿ� �����Ѵ�. + // 소켓을 시스템에 연결한다. bzero( &addr_in, sizeof(struct sockaddr_in) ); addr_in.sin_family = AF_INET; addr_in.sin_addr.s_addr = htonl( INADDR_ANY ); @@ -219,7 +219,7 @@ poll_obj_t *tcp_open_server( int port, int max_client ) return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tcp = (tcp_priv_t *)malloc( sizeof(tcp_priv_t) ); tcp->sock_type = SOCK_TYPE_SERVER; @@ -233,7 +233,7 @@ poll_obj_t *tcp_open_server( int port, int max_client ) tcp->send_cnt = 0; #endif - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. obj = poll_add( sockfd ); obj->type = STYP_TCP; obj->priv = (void *)tcp; @@ -267,12 +267,12 @@ poll_obj_t *tcp_open_server( int port, int max_client ) return NULL; } - // TIME-WAIT ���¿� �ִ� ���Ͽ� �Ҵ�Ǿ� �ִ� IP �ּҿ� ��Ʈ�� �ٷ� ����� �� �ֵ��� - // SO_REUSEADDR �� �ɼ� ���� TRUE �� + // TIME-WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 포트를 바로 사용할 수 있도록 + // SO_REUSEADDR 의 옵션 값을 TRUE 로 option = 1; setsockopt( hSock, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); - // ������ �ý��ۿ� �����Ѵ�. + // 소켓을 시스템에 연결한다. memset( &sckAddr, 0, sizeof( sckAddr)); sckAddr.sin_family = AF_INET; sckAddr.sin_addr.s_addr = htonl( INADDR_ANY ); @@ -291,7 +291,7 @@ poll_obj_t *tcp_open_server( int port, int max_client ) return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tcp = (tcp_priv_t *)malloc( sizeof(tcp_priv_t) ); tcp->sock_type = SOCK_TYPE_SERVER; @@ -305,7 +305,7 @@ poll_obj_t *tcp_open_server( int port, int max_client ) tcp->send_cnt = 0; #endif - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. fd_t pSock = malloc( sizeof( SOCKET)); *( SOCKET*)pSock = hSock; obj = poll_add( pSock ); @@ -321,10 +321,10 @@ poll_obj_t *tcp_open_server( int port, int max_client ) #endif //------------------------------------------------------------------------------ -/** @brief tcp ������ Ŭ���̾�Ʈ ���·� open �ϰ� ������� �����Ѵ� - @param ip IP���ڿ� ������ - @param port ��Ʈ��ȣ - @return poll_obj_t ������ ������ +/** @brief tcp 소켓을 클라이언트 형태로 open 하고 상대편에 접속한다 + @param ip IP문자열 포인터 + @param port 포트번호 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- #ifdef EMBEDDED_LINUX @@ -343,12 +343,12 @@ poll_obj_t *tcp_open_client( char *ip, int port ) return NULL; } - // TIME-WAIT ���¿� �ִ� ���Ͽ� �Ҵ�Ǿ� �ִ� IP �ּҿ� ��Ʈ�� �ٷ� ����� �� �ֵ��� - // SO_REUSEADDR �� �ɼ� ���� TRUE �� + // TIME-WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 포트를 바로 사용할 수 있도록 + // SO_REUSEADDR 의 옵션 값을 TRUE 로 option = 1; setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); - // ������ ������� �����Ѵ�. + // 소켓을 상대편에 연결한다. bzero( &addr_in, sizeof(struct sockaddr_in) ); addr_in.sin_family = AF_INET; addr_in.sin_addr.s_addr = inet_addr( ip ); @@ -361,7 +361,7 @@ poll_obj_t *tcp_open_client( char *ip, int port ) return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tcp = (tcp_priv_t *)malloc( sizeof(tcp_priv_t) ); tcp->sock_type = SOCK_TYPE_CLIENT; @@ -378,7 +378,7 @@ poll_obj_t *tcp_open_client( char *ip, int port ) sprintf( tcp->host, "%s", ip ); memcpy ( &tcp->addr, &addr_in, sizeof(addr_in) ); - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. obj = poll_add( sockfd ); obj->type = STYP_TCP; obj->priv = (void *)tcp; @@ -403,25 +403,25 @@ poll_obj_t *tcp_open_client( char *ip, int port ) return NULL; } - // ������ �ý��ۿ� �����Ѵ�. + // 소켓을 시스템에 연결한다. memset( &sckAddr, 0, sizeof( sckAddr)); sckAddr.sin_family = AF_INET; sckAddr.sin_addr.s_addr = inet_addr( ip ); sckAddr.sin_port = htons( port ); - // TIME-WAIT ���¿� �ִ� ���Ͽ� �Ҵ�Ǿ� �ִ� IP �ּҿ� ��Ʈ�� �ٷ� ����� �� �ֵ��� - // SO_REUSEADDR �� �ɼ� ���� TRUE �� + // TIME-WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 포트를 바로 사용할 수 있도록 + // SO_REUSEADDR 의 옵션 값을 TRUE 로 option = 1; setsockopt( hSock, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); - // ������ ������ �õ��Ѵ�. + // 서버에 연결을 시도한다. if ( SOCKET_ERROR == connect( hSock, ( SOCKADDR *)&sckAddr, sizeof( sckAddr) ) ){ printf( "tcp connect error :\n\r" ); closesocket( hSock ); return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tcp = (tcp_priv_t *)malloc( sizeof(tcp_priv_t) ); tcp->sock_type = SOCK_TYPE_CLIENT; @@ -438,7 +438,7 @@ poll_obj_t *tcp_open_client( char *ip, int port ) sprintf( tcp->host, "%s", ip ); memcpy ( &tcp->addr, &sckAddr, sizeof(sckAddr) ); - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. fd_t pSock = malloc( sizeof( SOCKET)); *( SOCKET*)pSock = hSock; obj = poll_add( pSock ); @@ -451,11 +451,11 @@ poll_obj_t *tcp_open_client( char *ip, int port ) #endif //------------------------------------------------------------------------------ -/** @brief Ŭ���̾�Ʈ ������ ������ ������ ��ü�� ����Ѵ�. - @param obj_server ����ü ������ - @param sockfd Ŭ���̾�Ʈ ���� - @param paddr ���ͳ� ��巹������ü ������ - @return poll_obj_t ������ ������ +/** @brief 클라이언트 소켓의 접속을 폴관린 객체에 등록한다. + @param obj_server 폴객체 포인터 + @param sockfd 클라이언트 소켓 + @param paddr 인터넷 어드레스구조체 포인터 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- #ifdef EMBEDDED_LINUX @@ -465,7 +465,7 @@ static poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, int sockfd, stru poll_obj_t *obj; tcp_priv_t *tcp, *server_tcp; - // Ŭ���̾�Ʈ ������ ������ �ľ��Ѵ�. + // 클라이언트 접속의 개수를 파악한다. server_tcp = (tcp_priv_t *)obj_server->priv; if ( tlist_getcount(server_tcp->client_list) >= server_tcp->client_max ) { @@ -474,12 +474,12 @@ static poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, int sockfd, stru return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tcp = (tcp_priv_t *)malloc( sizeof(tcp_priv_t) ); tcp->sock_type = SOCK_TYPE_SERVER_CLIENT; tcp->port = -1; - tcp->obj_server = obj_server; // Ŭ���̾�Ʈ ������ �Ҵ��� �������� + tcp->obj_server = obj_server; // 클라이언트 소켓을 할당한 서버정보 tcp->life_sec = get_cur_sec() + tcp_live_sec; #ifdef _USE_SEND_THREAD_ pthread_mutex_init( &tcp->mutex_send, NULL ); @@ -491,14 +491,14 @@ static poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, int sockfd, stru sprintf( tcp->host, "%s", inet_ntoa( paddr->sin_addr) ); memcpy( &tcp->addr, paddr, sizeof(struct sockaddr_in) ); - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. obj = poll_add( sockfd ); if ( obj ) { - // ������ ���ӵ� Ŭ���̾�Ʈ�� ����Ʈ�� ��� + // 서버에 접속된 클라이언트를 리스트에 등록 tlist_add( server_tcp->client_list, obj ); - // ���ӽð� ������ �ʿ��ϴٸ� + // 접속시간 관리가 필요하다면 if ( bf_policy & (BF_POLICY_CLOSE_TIMEOUT | BF_POLICY_CLOSE_OFF_LINK) ) { obj->on_timeout = tcp_check_time; @@ -524,7 +524,7 @@ static poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, SOCKET hSockClie tcp_priv_t *tcp, *server_tcp; fd_t pSock; - // Ŭ���̾�Ʈ ������ ������ �ľ��Ѵ�. + // 클라이언트 접속의 개수를 파악한다. server_tcp = (tcp_priv_t *)obj_server->priv; if ( tlist_getcount(server_tcp->client_list) >= server_tcp->client_max ) { @@ -533,12 +533,12 @@ static poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, SOCKET hSockClie return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tcp = (tcp_priv_t *)malloc( sizeof(tcp_priv_t) ); tcp->sock_type = SOCK_TYPE_SERVER_CLIENT; tcp->port = -1; - tcp->obj_server = obj_server; // Ŭ���̾�Ʈ ������ �Ҵ��� �������� + tcp->obj_server = obj_server; // 클라이언트 소켓을 할당한 서버정보 tcp->life_sec = get_cur_sec() + tcp_live_sec; #ifdef _USE_SEND_THREAD_ pthread_mutex_init( &tcp->mutex_send, NULL ); @@ -550,15 +550,15 @@ static poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, SOCKET hSockClie sprintf( tcp->host, "%s", inet_ntoa( sckAddr->sin_addr) ); memcpy( &tcp->addr, sckAddr, sizeof(struct sockaddr_in) ); - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. pSock = malloc( sizeof( SOCKET)); *( SOCKET*)pSock = hSockClient; obj = poll_add( pSock ); if ( obj ){ - // ������ ���ӵ� Ŭ���̾�Ʈ�� ����Ʈ�� ��� + // 서버에 접속된 클라이언트를 리스트에 등록 tlist_add( server_tcp->client_list, obj ); - // ���ӽð� ������ �ʿ��ϴٸ� + // 접속시간 관리가 필요하다면 if ( bf_policy & (BF_POLICY_CLOSE_TIMEOUT | BF_POLICY_CLOSE_OFF_LINK) ) { obj->on_timeout = tcp_check_time; @@ -579,14 +579,14 @@ static poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, SOCKET hSockClie #endif //------------------------------------------------------------------------------ -/** @brief tcp ������ close �Ѵ�. - @param obj ����ü ������ +/** @brief tcp 소켓을 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void tcp_close( poll_obj_t *obj ) { tcp_priv_t *tcp, *server_tcp; - // ���� �������� ����ڿ��� �˸���. + // 소켓 끊어짐을 사용자에게 알린다. if ( obj->on_disconnect ) { obj->on_disconnect( obj ); @@ -598,7 +598,7 @@ void tcp_close( poll_obj_t *obj ) { case SOCK_TYPE_SERVER_CLIENT : { - // ������ �����ϴ� Ŭ���̾�Ʈ�� ����Ʈ���� ���� + // 서버가 관리하는 클라이언트를 리스트에서 삭제 server_tcp = (tcp_priv_t *)(tcp->obj_server->priv); if ( server_tcp ) { @@ -609,7 +609,7 @@ void tcp_close( poll_obj_t *obj ) case SOCK_TYPE_SERVER : { - // ������ �����ϴ� Ŭ���̾�Ʈ�� server_tcp �� ��� NULL �� �����. + // 서버가 관리하는 클라이언트의 server_tcp 를 모두 NULL 로 만든다. // @@@@@@@@@@ tlist_free( tcp->client_list ); } @@ -623,7 +623,7 @@ void tcp_close( poll_obj_t *obj ) #else closesocket( *( ( SOCKET *)obj->fd)); - free( obj->fd); // SOCKET * �� �����Ѵ�. + free( obj->fd); // SOCKET * 를 해제한다. #endif @@ -639,9 +639,9 @@ void tcp_close( poll_obj_t *obj ) } //------------------------------------------------------------------------------ -/** @brief tcp ������ ���ӿ䱸�� ó������ Ŭ���̾�Ʈ������ ����Ѵ�. - @param obj_server tcp ���� ����ü ������ - @return tcp Ŭ���̾�Ʈ ����ü ������ +/** @brief tcp 소켓의 접속요구를 처리한후 클라이언트소켓을 등록한다. + @param obj_server tcp 서버 폴객체 포인터 + @return tcp 클라이언트 폴객체 포인터 *///---------------------------------------------------------------------------- #ifdef EMBEDDED_LINUX @@ -676,14 +676,14 @@ poll_obj_t *tcp_accept_client( poll_obj_t *obj_server ) #endif //------------------------------------------------------------------------------ -/** @brief tcp ������ ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� - @remark ������ ���� ó���� �ؾ��Ѵ�. - tcp_close( obj ) �� ȣ���Ͽ� ������ ���� ����� �Ϲ����̴�. - BF_POLICY_AUTO_CLOSE �ɼ��� ������� �ڵ����� ������ �ݴ´�. +/** @brief tcp 소켓을 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 + @remark 에러에 대한 처리를 해야한다. + tcp_close( obj ) 를 호출하여 접속을 끊는 방법이 일반적이다. + BF_POLICY_AUTO_CLOSE 옵션이 있을경우 자동으로 소켓을 닫는다. *///---------------------------------------------------------------------------- int tcp_write( poll_obj_t *obj, char *buf, int len ) { @@ -692,7 +692,7 @@ int tcp_write( poll_obj_t *obj, char *buf, int len ) #ifdef EMBEDDED_LINUX - // NON ���� �ɼ��� �ִٸ� + // NON 블럭 옵션이 있다면 if ( bf_policy & BF_POLICY_WRITE_NONBLOCK ) { wrcnt = send( obj->fd, buf, len, MSG_DONTWAIT); @@ -718,7 +718,7 @@ int tcp_write( poll_obj_t *obj, char *buf, int len ) } else { - // ��å�� ���� ������ �Ѵ�. + // 정책에 대한 결정을 한다. tcp = (tcp_priv_t *)obj->priv; if ( tcp->sock_type == SOCK_TYPE_SERVER_CLIENT ) { @@ -733,8 +733,8 @@ int tcp_write( poll_obj_t *obj, char *buf, int len ) } #ifdef _USE_SEND_THREAD_ //------------------------------------------------------------------------------ -/** @brief ���� �������Լ��̴�. - @param obj ����ü ������ +/** @brief 전송 쓰레드함수이다. + @param obj 폴객체 포인터 @return *///---------------------------------------------------------------------------- static void *thread_write_func( poll_obj_t *obj ) @@ -760,17 +760,17 @@ static void *thread_write_func( poll_obj_t *obj ) } //------------------------------------------------------------------------------ -/** @brief �����带 �����Ͽ� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� +/** @brief 쓰레드를 생성하여 데이타를 전송한다. + @param obj 폴객체 포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int tcp_write_thread( poll_obj_t *obj, char *buf, int len ) { - obj = obj; // jwjw: warning�� ���ϱ� ���� - buf = buf; // jwjw: warning�� ���ϱ� ���� - len = len; // jwjw: warning�� ���ϱ� ���� + obj = obj; // jwjw: warning을 피하기 위해 + buf = buf; // jwjw: warning을 피하기 위해 + len = len; // jwjw: warning을 피하기 위해 #ifdef _USE_SEND_THREAD_ tcp_priv_t *tcp; @@ -779,10 +779,10 @@ int tcp_write_thread( poll_obj_t *obj, char *buf, int len ) pthread_mutex_lock( &tcp->mutex_send ); - // �������� �����尡 ��� �ִ°�? + // 전송중인 쓰레드가 살아 있는가? if ( 0 == tcp->send_cnt ) { - // ������ ũ�Ⱑ �۴ٸ� �� �Ҵ��Ѵ�. + // 버퍼의 크기가 작다면 재 할당한다. if ( len > tcp->send_buf_len ) { if ( tcp->send_buf ) free( tcp->send_buf ); @@ -794,17 +794,17 @@ int tcp_write_thread( poll_obj_t *obj, char *buf, int len ) tcp->send_cnt = len; memcpy( tcp->send_buf, buf, tcp->send_cnt ); - // ������ ���� + // 쓰레드 생성 { pthread_t thr_id; pthread_attr_t thr_attributes; int thr_status; - // ������ ������ ���μ����� �и� + // 쓰레드 생성시 프로세스와 분리 pthread_attr_init( &thr_attributes ); pthread_attr_setdetachstate( &thr_attributes, PTHREAD_CREATE_DETACHED ); - // ������ ���� + // 쓰레드 생성 thr_status = pthread_create( &thr_id, &thr_attributes, thread_write_func, (void *)obj ); if ( thr_status != 0 ) { @@ -837,13 +837,13 @@ int tcp_write_thread( poll_obj_t *obj, char *buf, int len ) #endif //------------------------------------------------------------------------------ -/** @brief tcp ������ ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param len ������ ���� - @return ���۵� ����Ÿ ���� - @remark ������ ���� ó���� �ؾ��Ѵ�. - tcp_close( obj ) �� ȣ���Ͽ� ������ ���� ����� �Ϲ����̴�. - BF_POLICY_AUTO_CLOSE �ɼ��� ������� �ڵ����� ������ �ݴ´�. +/** @brief tcp 소켓을 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 + @remark 에러에 대한 처리를 해야한다. + tcp_close( obj ) 를 호출하여 접속을 끊는 방법이 일반적이다. + BF_POLICY_AUTO_CLOSE 옵션이 있을경우 자동으로 소켓을 닫는다. *///---------------------------------------------------------------------------- int tcp_read( poll_obj_t *obj, char *buf, int len ) { @@ -891,7 +891,7 @@ int tcp_read( poll_obj_t *obj, char *buf, int len ) } } - // ��å�� ���� ������ �Ѵ�. + // 정책에 대한 결정을 한다. tcp = (tcp_priv_t *)obj->priv; if ( tcp->sock_type == SOCK_TYPE_SERVER_CLIENT ) { @@ -904,17 +904,17 @@ int tcp_read( poll_obj_t *obj, char *buf, int len ) return rdcnt; } //------------------------------------------------------------------------------ -/** @brief �����ð��� �������� ȣ��Ǹ� tcp ��å�� ���� ���� �����Ѵ�. - @remark BF_POLICY_CLOSE_TIMEOUT, BF_POLICY_CLOSE_OFF_LINK �ɼ��� ����Ѵٸ� - ���Լ��� �ڵ� ��ϵǾ� ����ȴ�. - link-off ó���� ���� �ʴ´�. - @return ���ϰ��� �ǹ̾��� +/** @brief 일정시간이 지난을때 호출되며 tcp 정책에 의해 일을 수행한다. + @remark BF_POLICY_CLOSE_TIMEOUT, BF_POLICY_CLOSE_OFF_LINK 옵션을 사용한다면 + 이함수가 자동 등록되어 수행된다. + link-off 처리는 되지 않는다. + @return 리턴값은 의미없다 *///---------------------------------------------------------------------------- int tcp_check_time( poll_obj_t *obj ) { tcp_priv_t *tcp; - // Ÿ�ӿ��� ó�� + // 타임오버 처리 if ( bf_policy & BF_POLICY_CLOSE_TIMEOUT ) { tcp = (tcp_priv_t *)obj->priv; @@ -926,7 +926,7 @@ int tcp_check_time( poll_obj_t *obj ) } } - // ��ũ off ó�� + // 링크 off 처리 if ( bf_policy & BF_POLICY_CLOSE_OFF_LINK ) { // @@ -936,9 +936,9 @@ int tcp_check_time( poll_obj_t *obj ) } //------------------------------------------------------------------------------ -/** @brief tcp �������� ���ӵ� ������ ������ ��´�. - @param obj_server tcp ���� ����ü ������ - @return ���ӵ� Ŭ���̾�Ʈ ���� +/** @brief tcp 서버에서 접속된 소켓의 개수를 얻는다. + @param obj_server tcp 서버 폴객체 포인터 + @return 접속된 클라이언트 개수 *///---------------------------------------------------------------------------- int tcp_client_count( poll_obj_t *obj_server ) { @@ -953,10 +953,10 @@ int tcp_client_count( poll_obj_t *obj_server ) return 0; } //------------------------------------------------------------------------------ -/** @brief tcp �������� �ε����� ���ӵ� ���� �� ��ü�� ��´�. - @param obj_server tcp ���� ����ü ������ - @param idx �ε��� - @return Ŭ���̾�Ʈ ����ü +/** @brief tcp 서버에서 인덱스로 접속된 소켓 폴 객체를 얻는다. + @param obj_server tcp 서버 폴객체 포인터 + @param idx 인덱스 + @return 클라이언트 폴객체 *///---------------------------------------------------------------------------- poll_obj_t *tcp_get_client( poll_obj_t *obj_server, int idx ) { @@ -974,9 +974,9 @@ poll_obj_t *tcp_get_client( poll_obj_t *obj_server, int idx ) return NULL; } //------------------------------------------------------------------------------ -/** @brief tcp Ŭ���̾�Ʈ ����ü���� ������ü�� ��´�. - @param obj_client tcp Ŭ���̾�Ʈ ����ü ������ - @return ���� ����ü +/** @brief tcp 클라이언트 폴객체에서 서버객체를 얻는다. + @param obj_client tcp 클라이언트 폴객체 포인터 + @return 서버 폴객체 *///---------------------------------------------------------------------------- poll_obj_t *tcp_get_server( poll_obj_t *obj_client ) { @@ -987,9 +987,9 @@ poll_obj_t *tcp_get_server( poll_obj_t *obj_client ) return tcp->obj_server; } //------------------------------------------------------------------------------ -/** @brief ����� ������� IP ���ڿ��� ��´�. - @param obj_client tcp Ŭ���̾�Ʈ ����ü ������ - @return ����� ip�� ���ڿ��� �����ش�. ������ NULL +/** @brief 연결된 상대편의 IP 문자열을 얻는다. + @param obj_client tcp 클라이언트 폴객체 포인터 + @return 연결된 ip를 문자열로 돌려준다. 없으면 NULL *///---------------------------------------------------------------------------- const char *tcp_peer_ip_string( poll_obj_t *obj_client ) { diff --git a/app/app-prime-modbus/lib/fanet/tipc.c b/app/app-prime-modbus/lib/fanet/tipc.c index 1e36f6b..230af12 100644 --- a/app/app-prime-modbus/lib/fanet/tipc.c +++ b/app/app-prime-modbus/lib/fanet/tipc.c @@ -30,22 +30,22 @@ #include <pollmng.h> #include <tipc.h> -/// tcp ������ ���¸� �����Ѵ�. +/// tcp 소켓의 형태를 구분한다. #define SOCK_TYPE_CLIENT 0 #define SOCK_TYPE_SERVER 1 #define SOCK_TYPE_SERVER_CLIENT 2 -/// tcp ���� ����ü +/// tcp 개별 구조체 typedef struct { int type; int inst; - // ������ ���� + // 서버용 정보 tlist *client_list; int client_max; int sock_type; - poll_obj_t *obj_server; // �������� �и��� Ŭ���̾�Ʈ�� ���� + poll_obj_t *obj_server; // 서버에서 분리된 클라이언트를 위해 } tipc_priv_t; @@ -79,7 +79,7 @@ poll_obj_t *tipc_open_server( int type, int inst, int client_max) return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tipc_priv_t *tipc = (tipc_priv_t *)malloc( sizeof(tipc_priv_t) ); tipc->sock_type = SOCK_TYPE_SERVER; @@ -88,7 +88,7 @@ poll_obj_t *tipc_open_server( int type, int inst, int client_max) tipc->client_max = client_max; tipc->client_list = tlist_create(); - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. poll_obj_t *obj = poll_add( sockfd ); obj->type = STYP_TIPC; obj->priv = (void *)tipc; @@ -129,7 +129,7 @@ poll_obj_t *tipc_open_client( int type, int inst ) tipc->type = type; tipc->inst = inst; - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. obj = poll_add( sockfd ); obj->type = STYP_TIPC; obj->priv = (void *)tipc; @@ -138,14 +138,14 @@ poll_obj_t *tipc_open_client( int type, int inst ) } //------------------------------------------------------------------------------ -/** @brief tcp ������ close �Ѵ�. - @param obj ����ü ������ +/** @brief tcp 소켓을 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void tipc_close( poll_obj_t *obj ) { tipc_priv_t *tipc, *server_tipc; - if ( obj->on_disconnect ){ // ���� �������� ����ڿ��� �˸���. + if ( obj->on_disconnect ){ // 소켓 끊어짐을 사용자에게 알린다. obj->on_disconnect( obj ); } @@ -154,14 +154,14 @@ void tipc_close( poll_obj_t *obj ) switch( tipc->sock_type ) { case SOCK_TYPE_SERVER_CLIENT : - // ������ �����ϴ� Ŭ���̾�Ʈ�� ����Ʈ���� ���� + // 서버가 관리하는 클라이언트를 리스트에서 삭제 server_tipc = (tipc_priv_t *)(tipc->obj_server->priv); if ( server_tipc ){ tlist_remove( server_tipc->client_list, obj ); } break; case SOCK_TYPE_SERVER : - tlist_free( tipc->client_list ); // ������ �����ϴ� Ŭ���̾�Ʈ�� server_tipc �� ��� NULL �� �����. + tlist_free( tipc->client_list ); // 서버가 관리하는 클라이언트의 server_tipc 를 모두 NULL 로 만든다. break; } @@ -177,7 +177,7 @@ void tipc_close( poll_obj_t *obj ) static poll_obj_t *tipc_connect_client( poll_obj_t *obj_server, int sockfd) { - // Ŭ���̾�Ʈ ������ ������ �ľ��Ѵ�. + // 클라이언트 접속의 개수를 파악한다. tipc_priv_t *server_tipc = (tipc_priv_t *)obj_server->priv; if ( tlist_getcount(server_tipc->client_list) >= server_tipc->client_max ){ shutdown(sockfd, SHUT_RDWR); @@ -186,16 +186,16 @@ static poll_obj_t *tipc_connect_client( poll_obj_t *obj_server, int sockfd) return NULL; } - // tipc ���� ������ �����Ѵ�. + // tipc 만의 정보를 설정한다. tipc_priv_t *tipc = (tipc_priv_t *)malloc( sizeof(tipc_priv_t) ); tipc->sock_type = SOCK_TYPE_SERVER_CLIENT; - tipc->obj_server = obj_server; // Ŭ���̾�Ʈ ������ �Ҵ��� �������� + tipc->obj_server = obj_server; // 클라이언트 소켓을 할당한 서버정보 - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. poll_obj_t *obj = poll_add( sockfd ); if ( obj ){ - // ������ ���ӵ� Ŭ���̾�Ʈ�� ����Ʈ�� ��� + // 서버에 접속된 클라이언트를 리스트에 등록 tlist_add( server_tipc->client_list, obj ); obj->type = STYP_TIPC; @@ -222,14 +222,14 @@ poll_obj_t *tipc_accept_client( poll_obj_t *obj_server ) } //------------------------------------------------------------------------------ -/** @brief tipc ������ ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� - @remark ������ ���� ó���� �ؾ��Ѵ�. - tipc_close( obj ) �� ȣ���Ͽ� ������ ���� ����� �Ϲ����̴�. - BF_POLICY_AUTO_CLOSE �ɼ��� ������� �ڵ����� ������ �ݴ´�. +/** @brief tipc 소켓을 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 + @remark 에러에 대한 처리를 해야한다. + tipc_close( obj ) 를 호출하여 접속을 끊는 방법이 일반적이다. + BF_POLICY_AUTO_CLOSE 옵션이 있을경우 자동으로 소켓을 닫는다. *///---------------------------------------------------------------------------- int tipc_write( poll_obj_t *obj, char *buf, int len ) { @@ -244,13 +244,13 @@ int tipc_write( poll_obj_t *obj, char *buf, int len ) } //------------------------------------------------------------------------------ -/** @brief tipc ������ ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param len ������ ���� - @return ���۵� ����Ÿ ���� - @remark ������ ���� ó���� �ؾ��Ѵ�. - tipc_close( obj ) �� ȣ���Ͽ� ������ ���� ����� �Ϲ����̴�. - BF_POLICY_AUTO_CLOSE �ɼ��� ������� �ڵ����� ������ �ݴ´�. +/** @brief tipc 소켓을 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 + @remark 에러에 대한 처리를 해야한다. + tipc_close( obj ) 를 호출하여 접속을 끊는 방법이 일반적이다. + BF_POLICY_AUTO_CLOSE 옵션이 있을경우 자동으로 소켓을 닫는다. *///---------------------------------------------------------------------------- int tipc_read( poll_obj_t *obj, char *buf, int len ) { @@ -290,7 +290,7 @@ int tipc_read( poll_obj_t *obj, char *buf, int len ) } } - // ��å�� ���� ������ �Ѵ�. + // 정책에 대한 결정을 한다. tipc_priv_t *tipc = (tipc_priv_t *)obj->priv; if ( tipc->sock_type == SOCK_TYPE_SERVER_CLIENT ) { diff --git a/app/app-prime-modbus/lib/fanet/tipc_bcast.c b/app/app-prime-modbus/lib/fanet/tipc_bcast.c index ae4e6dd..b0af64e 100644 --- a/app/app-prime-modbus/lib/fanet/tipc_bcast.c +++ b/app/app-prime-modbus/lib/fanet/tipc_bcast.c @@ -1,8 +1,8 @@ /** @file tipc_bcast.c @date 2015-08-31 - @author ��漮 jks@falinux.com - @brief TIPC-DGRAM ������ ����Ͽ� ��Ƽij��Ʈ�� ������ ����� ����Ѵ�. + @author 장길석 jks@falinux.com + @brief TIPC-DGRAM 소켓을 사용하여 멀티캐스트가 가능한 통신을 담당한다. @modify @todo @@ -12,8 +12,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- @@ -34,7 +34,7 @@ char desc_tipc_bcast[] = "falinux tipc broadcast ver 0.0.1"; -/// tipc_bcast ���� ����ü +/// tipc_bcast 개별 구조체 typedef struct { int type; // server type int lower; // port lower @@ -42,9 +42,9 @@ typedef struct { } tipc_bcast_priv_t; //------------------------------------------------------------------------------ -/** @brief tipc_bcast ������ �������·� open �Ѵ�. - @param port ��Ʈ��ȣ - @return poll_obj_t ������ ������ +/** @brief tipc_bcast 소켓을 서버형태로 open 한다. + @param port 포트번호 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *tipc_bcast_open( int type, int lower, int upper ) @@ -70,7 +70,7 @@ poll_obj_t *tipc_bcast_open( int type, int lower, int upper ) tipc_bcast_priv_t *tipc_bcast; poll_obj_t *obj; - // tipc_bcast ���� ������ �����Ѵ�. + // tipc_bcast 만의 정보를 설정한다. tipc_bcast = (tipc_bcast_priv_t *)malloc( sizeof(tipc_bcast_priv_t) ); tipc_bcast->type = type; tipc_bcast->lower = lower; @@ -84,8 +84,8 @@ poll_obj_t *tipc_bcast_open( int type, int lower, int upper ) } //------------------------------------------------------------------------------ -/** @brief tipc_bcast ������ close �Ѵ�. - @param obj ����ü ������ +/** @brief tipc_bcast 소켓을 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void tipc_bcast_close( poll_obj_t *obj ) { @@ -98,13 +98,13 @@ void tipc_bcast_close( poll_obj_t *obj ) poll_delete( obj ); } //------------------------------------------------------------------------------ -/** @brief tipc_bcast ������ ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param host ���� IP �� ȣ��Ʈ�̸� ���ڿ������� - @param port ���� ��Ʈ��ȣ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� +/** @brief tipc_bcast 소켓을 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param host 상대방 IP 나 호스트이름 문자열포인터 + @param port 상대방 포트번호 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int tipc_bcast_write( poll_obj_t *obj, int type, int lower, int upper, char *buf, int len ) { @@ -122,10 +122,10 @@ int tipc_bcast_write( poll_obj_t *obj, int type, int lower, int upper, char *bu return wrcnt; } //------------------------------------------------------------------------------ -/** @brief tipc_bcast ������ ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param len ������ ���� - @return ���۵� ����Ÿ ���� +/** @brief tipc_bcast 소켓을 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 *///---------------------------------------------------------------------------- int tipc_bcast_read( poll_obj_t *obj, char *buf, int len ) { diff --git a/app/app-prime-modbus/lib/fanet/tipc_stream.c b/app/app-prime-modbus/lib/fanet/tipc_stream.c index 53f50e3..99426a4 100644 --- a/app/app-prime-modbus/lib/fanet/tipc_stream.c +++ b/app/app-prime-modbus/lib/fanet/tipc_stream.c @@ -30,22 +30,22 @@ #include <pollmng.h> #include <tipc.h> -/// tcp ������ ���¸� �����Ѵ�. +/// tcp 소켓의 형태를 구분한다. #define SOCK_TYPE_CLIENT 0 #define SOCK_TYPE_SERVER 1 #define SOCK_TYPE_SERVER_CLIENT 2 -/// tcp ���� ����ü +/// tcp 개별 구조체 typedef struct { int type; int inst; - // ������ ���� + // 서버용 정보 tlist *client_list; int client_max; int sock_type; - poll_obj_t *obj_server; // �������� �и��� Ŭ���̾�Ʈ�� ���� + poll_obj_t *obj_server; // 서버에서 분리된 클라이언트를 위해 } tipc_stream_priv_t; @@ -79,7 +79,7 @@ poll_obj_t *tipc_stream_open_server( int type, int inst, int client_max) return NULL; } - // tcp ���� ������ �����Ѵ�. + // tcp 만의 정보를 설정한다. tipc_stream_priv_t *tipc = (tipc_stream_priv_t *)malloc( sizeof(tipc_stream_priv_t) ); tipc->sock_type = SOCK_TYPE_SERVER; @@ -88,7 +88,7 @@ poll_obj_t *tipc_stream_open_server( int type, int inst, int client_max) tipc->client_max = client_max; tipc->client_list = tlist_create(); - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. poll_obj_t *obj = poll_add( sockfd ); obj->type = STYP_TIPC; obj->priv = (void *)tipc; @@ -129,7 +129,7 @@ poll_obj_t *tipc_stream_open_client( int type, int inst ) tipc->type = type; tipc->inst = inst; - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. obj = poll_add( sockfd ); obj->type = STYP_TIPC; obj->priv = (void *)tipc; @@ -138,14 +138,14 @@ poll_obj_t *tipc_stream_open_client( int type, int inst ) } //------------------------------------------------------------------------------ -/** @brief tcp ������ close �Ѵ�. - @param obj ����ü ������ +/** @brief tcp 소켓을 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void tipc_stream_close( poll_obj_t *obj ) { tipc_stream_priv_t *tipc, *server_tipc; - if ( obj->on_disconnect ){ // ���� �������� ����ڿ��� �˸���. + if ( obj->on_disconnect ){ // 소켓 끊어짐을 사용자에게 알린다. obj->on_disconnect( obj ); } tipc = (tipc_stream_priv_t *)obj->priv; @@ -153,14 +153,14 @@ void tipc_stream_close( poll_obj_t *obj ) switch( tipc->sock_type ) { case SOCK_TYPE_SERVER_CLIENT : - // ������ �����ϴ� Ŭ���̾�Ʈ�� ����Ʈ���� ���� + // 서버가 관리하는 클라이언트를 리스트에서 삭제 server_tipc = (tipc_stream_priv_t *)(tipc->obj_server->priv); if ( server_tipc ){ tlist_remove( server_tipc->client_list, obj ); } break; case SOCK_TYPE_SERVER : - tlist_free( tipc->client_list ); // ������ �����ϴ� Ŭ���̾�Ʈ�� server_tipc �� ��� NULL �� �����. + tlist_free( tipc->client_list ); // 서버가 관리하는 클라이언트의 server_tipc 를 모두 NULL 로 만든다. break; } @@ -176,7 +176,7 @@ void tipc_stream_close( poll_obj_t *obj ) static poll_obj_t *tipc_stream_connect_client( poll_obj_t *obj_server, int sockfd) { - // Ŭ���̾�Ʈ ������ ������ �ľ��Ѵ�. + // 클라이언트 접속의 개수를 파악한다. tipc_stream_priv_t *server_tipc = (tipc_stream_priv_t *)obj_server->priv; if ( tlist_getcount(server_tipc->client_list) >= server_tipc->client_max ){ shutdown(sockfd, SHUT_RDWR); @@ -185,16 +185,16 @@ static poll_obj_t *tipc_stream_connect_client( poll_obj_t *obj_server, int sock return NULL; } - // tipc ���� ������ �����Ѵ�. + // tipc 만의 정보를 설정한다. tipc_stream_priv_t *tipc = (tipc_stream_priv_t *)malloc( sizeof(tipc_stream_priv_t) ); tipc->sock_type = SOCK_TYPE_SERVER_CLIENT; - tipc->obj_server = obj_server; // Ŭ���̾�Ʈ ������ �Ҵ��� �������� + tipc->obj_server = obj_server; // 클라이언트 소켓을 할당한 서버정보 - // ��������ü�� ����Ѵ�. + // 폴관리객체에 등록한다. poll_obj_t *obj = poll_add( sockfd ); if ( obj ){ - // ������ ���ӵ� Ŭ���̾�Ʈ�� ����Ʈ�� ��� + // 서버에 접속된 클라이언트를 리스트에 등록 tlist_add( server_tipc->client_list, obj ); obj->type = STYP_TIPC; @@ -221,14 +221,14 @@ poll_obj_t *tipc_stream_accept_client( poll_obj_t *obj_server ) } //------------------------------------------------------------------------------ -/** @brief tipc ������ ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� - @remark ������ ���� ó���� �ؾ��Ѵ�. - tipc_stream_close( obj ) �� ȣ���Ͽ� ������ ���� ����� �Ϲ����̴�. - BF_POLICY_AUTO_CLOSE �ɼ��� ������� �ڵ����� ������ �ݴ´�. +/** @brief tipc 소켓을 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 + @remark 에러에 대한 처리를 해야한다. + tipc_stream_close( obj ) 를 호출하여 접속을 끊는 방법이 일반적이다. + BF_POLICY_AUTO_CLOSE 옵션이 있을경우 자동으로 소켓을 닫는다. *///---------------------------------------------------------------------------- int tipc_stream_write( poll_obj_t *obj, char *buf, int len ) { @@ -243,13 +243,13 @@ int tipc_stream_write( poll_obj_t *obj, char *buf, int len ) } //------------------------------------------------------------------------------ -/** @brief tipc ������ ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param len ������ ���� - @return ���۵� ����Ÿ ���� - @remark ������ ���� ó���� �ؾ��Ѵ�. - tipc_stream_close( obj ) �� ȣ���Ͽ� ������ ���� ����� �Ϲ����̴�. - BF_POLICY_AUTO_CLOSE �ɼ��� ������� �ڵ����� ������ �ݴ´�. +/** @brief tipc 소켓을 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 + @remark 에러에 대한 처리를 해야한다. + tipc_stream_close( obj ) 를 호출하여 접속을 끊는 방법이 일반적이다. + BF_POLICY_AUTO_CLOSE 옵션이 있을경우 자동으로 소켓을 닫는다. *///---------------------------------------------------------------------------- int tipc_stream_read( poll_obj_t *obj, char *buf, int len ) { diff --git a/app/app-prime-modbus/lib/fanet/uart-packet-dle.c b/app/app-prime-modbus/lib/fanet/uart-packet-dle.c index 59055d3..c634477 100644 --- a/app/app-prime-modbus/lib/fanet/uart-packet-dle.c +++ b/app/app-prime-modbus/lib/fanet/uart-packet-dle.c @@ -1,8 +1,8 @@ /** @file uart-packet-dle.h @date 2010-09-17 - @author ����� freefrug@falinux.com - @brief uart ������¸� �м��ϰ� �����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief uart 통신형태를 분석하고 관리한다. dle / stx / data(crc16) / dle / etx @@ -14,8 +14,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- #include <stdio.h> @@ -39,10 +39,10 @@ char desc_uart_packet_dle[] = "falinux uart-packet-dle ver 0.1.0"; #define TRACE() printf( ".. %s(%d)\n", __FUNCTION__,__LINE__ ) //------------------------------------------------------------------------------ -/** @brief �⺻ crc16 �Լ� - @param buf ����Ÿ���� - @param count ����Ÿ���� - @return ����� ����Ÿ ���� +/** @brief 기본 crc16 함수 + @param buf 데이타버퍼 + @param count 데이타개수 + @return 복사된 데이타 길이 *///---------------------------------------------------------------------------- static unsigned short upacket_dle_def_make_crc16( char *buf, int count ) { @@ -50,9 +50,9 @@ static unsigned short upacket_dle_def_make_crc16( char *buf, int count ) } //------------------------------------------------------------------------------ -/** @brief uart ���� ���� ��ü ���� - @param obj uart ����ü ������ - @param callback ������ ����������� ȣ��Ǵ� �Լ� +/** @brief uart 패켓 관린 객체 생성 + @param obj uart 폴객체 포인터 + @param callback 패켓이 만들어졌을대 호출되는 함수 *///---------------------------------------------------------------------------- void upacket_dle_create( poll_obj_t *obj, on_uart_packet_t callback ) { @@ -73,8 +73,8 @@ void upacket_dle_create( poll_obj_t *obj, on_uart_packet_t callback ) obj->user = (void *)up; } //------------------------------------------------------------------------------ -/** @brief uart ���� ���� ��ü ���� - @param obj uart ����ü ������ +/** @brief uart 패켓 관린 객체 해제 + @param obj uart 폴객체 포인터 *///---------------------------------------------------------------------------- void upacket_dle_free( poll_obj_t *obj ) { @@ -82,8 +82,8 @@ void upacket_dle_free( poll_obj_t *obj ) obj->user = NULL; } //------------------------------------------------------------------------------ -/** @brief uart ���Ϻм� Ŭ���� - @param obj uart ����ü ������ +/** @brief uart 패켓분석 클리어 + @param obj uart 폴객체 포인터 *///---------------------------------------------------------------------------- void upacket_dle_clear( uart_packet_analysis_t *up ) { @@ -94,16 +94,16 @@ void upacket_dle_clear( uart_packet_analysis_t *up ) up->error = 0; } //------------------------------------------------------------------------------ -/** @brief uart ������ �м��ϰ� ������ ����� ���� �ݹ��Լ��� ȣ���Ѵ�. - @param obj uart ����ü ������ - @return ����� ������ ���� +/** @brief uart 패켓을 분석하고 패켓이 만들어 지면 콜백함수를 호출한다. + @param obj uart 폴객체 포인터 + @return 사용한 버퍼의 개수 *///---------------------------------------------------------------------------- static int upacket_dle_analysis( uart_packet_analysis_t *up, char *buf, int count ) { char *wp, uc; int make_packet = 0; - // ����Ÿ ���� + // 데이타 저장 void data_put( uart_packet_analysis_t *up, char data ) { up->data_buf[up->an_cnt++] = data; @@ -161,7 +161,7 @@ static int upacket_dle_analysis( uart_packet_analysis_t *up, char *buf, int cou { unsigned short crc_calc, crc_recv; - up->an_cnt -= 2; // crc ���� + up->an_cnt -= 2; // crc 제거 crc_recv = up->data_buf[up->an_cnt]<<8 | up->data_buf[up->an_cnt+1]; crc_calc = up->make_crc16( up->data_buf, up->an_cnt ); @@ -184,11 +184,11 @@ static int upacket_dle_analysis( uart_packet_analysis_t *up, char *buf, int cou return wp - buf; } //------------------------------------------------------------------------------ -/** @brief uart ���� ����Ÿ�� �о� ������ �м��� �� ������ ��������� - ��ϵ� �ݹ��Լ��� ȣ���Ѵ�. - @param obj ����ü ������ - @param callback ������ ����������� ȣ��Ǵ� �Լ�, NULL �̸� ���� �ݹ��Լ��� �����ȴ�. - @return ���� ����Ÿ ���� +/** @brief uart 에서 데이타를 읽어 패켓을 분석한 후 패켓이 만들어지면 + 등록된 콜백함수를 호출한다. + @param obj 폴객체 포인터 + @param callback 패켓이 만들어졌을대 호출되는 함수, NULL 이면 기존 콜백함수가 유지된다. + @return 받은 데이타 개수 *///---------------------------------------------------------------------------- int upacket_dle_read_from_uart( poll_obj_t *obj, on_uart_packet_t callback ) { @@ -202,14 +202,14 @@ int upacket_dle_read_from_uart( poll_obj_t *obj, on_uart_packet_t callback ) up = (uart_packet_analysis_t *)obj->user; - // �ݹ��Լ� ��� + // 콜백함수 등록 save_cb = up->on_packet; if ( callback ) { up->on_packet = callback; } - // ���� �м� + // 패켓 분석 wp = buf; while( 0 < count ) { @@ -219,18 +219,18 @@ int upacket_dle_read_from_uart( poll_obj_t *obj, on_uart_packet_t callback ) } - // �ݹ��Լ� ���� + // 콜백함수 복귀 up->on_packet = save_cb; return rdcnt; } //------------------------------------------------------------------------------ -/** @brief uart ������ �м��ϰ� ������ ����� ���� �ݹ��Լ��� ȣ���Ѵ�. - @param up upacket ���� ����ü - @param snd_buf ���� ���۵� ����, �̰��� ����Ÿ�� ���������. - @param src_buf ����Ÿ ���� - @param src_cnt ����Ÿ ������ ���� - @return ������� ������ ���� +/** @brief uart 패켓을 분석하고 패켓이 만들어 지면 콜백함수를 호출한다. + @param up upacket 관리 구조체 + @param snd_buf 실제 전송될 버퍼, 이곳에 데이타가 만들어진다. + @param src_buf 데이타 버퍼 + @param src_cnt 데이타 버퍼의 개수 + @return 만들어진 버퍼의 개수 *///---------------------------------------------------------------------------- static int upacket_dle_make_packet( uart_packet_analysis_t *up, char *snd_buf, char *src_buf, int src_cnt ) { @@ -275,11 +275,11 @@ static int upacket_dle_make_packet( uart_packet_analysis_t *up, char *snd_buf, return count; } //------------------------------------------------------------------------------ -/** @brief uart �� ������ ����� �����Ѵ�. - @param obj ����ü ������ - @param data_buf ������ ����Ÿ ���� - @param count ������ ����Ÿ ������ ���� - @return ������ ����Ÿ ���� +/** @brief uart 에 패켓을 만들어 전송한다. + @param obj 폴객체 포인터 + @param data_buf 전송할 데이타 버퍼 + @param count 전송할 데이타 버퍼의 개수 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int upacket_dle_write_to_uart( poll_obj_t *obj, const char *data_buf, int count ) { diff --git a/app/app-prime-modbus/lib/fanet/uart.c b/app/app-prime-modbus/lib/fanet/uart.c index 639ff2e..6613815 100644 --- a/app/app-prime-modbus/lib/fanet/uart.c +++ b/app/app-prime-modbus/lib/fanet/uart.c @@ -1,11 +1,11 @@ /** @file uart.c @date 2009-03-19 - @author ����� freefrug@falinux.com - @brief uart �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief uart 를 사용한 통신을 담당한다. @modify - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug @remark @@ -13,11 +13,11 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -48,10 +48,10 @@ char desc_uart[] = "falinux uart ver 0.2.1"; -/// uart ���� ����ü +/// uart 개별 구조체 typedef struct { - // ���۰��� + // 버퍼관리 char recv_fifo[UART_RECV_FIFO_MAX]; int fifo_rcnt; @@ -60,9 +60,9 @@ typedef struct { } uart_priv_t; //------------------------------------------------------------------------------ -/** @brief uart �� open �Ѵ�. - @param fname ���ڿ� �����̸� - @return poll_obj_t ������ ������ +/** @brief uart 을 open 한다. + @param fname 문자열 파일이름 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit) { @@ -74,21 +74,21 @@ poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit) struct termios newtio; - // �ø�����Ʈ�� ����. - // parity 'T' �̸� �̳��������� ����. + // 시리얼포트를 연다. + // parity 'T' 이면 터미널형식으로 연다. if ( 'T' == parity ) fd = open( dev_name, O_RDWR ); else fd = open( dev_name, O_RDWR | O_NOCTTY ); if ( fd < 0 ) { - // ȭ�� ���� ���� + // 화일 열기 실패 printf( "device open fail %s : ", dev_name ); perror(""); return NULL; } - // �ø��� ��Ʈ ȯ���� �����Ѵ�. + // 시리얼 포트 환경을 설정한다. memset(&newtio, 0, sizeof(newtio) ); // data 8bit @@ -111,7 +111,7 @@ poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit) } // parity - switch( parity | 0x20 ) // �ҹ��� ó�� + switch( parity | 0x20 ) // 소문자 처리 { case 'o' : newtio.c_cflag |= (PARENB |PARODD ); break; case 'e' : newtio.c_cflag |= PARENB ; break; @@ -186,7 +186,7 @@ poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit) COMMTIMEOUTS cto; - cto.ReadIntervalTimeout = MAXDWORD; // �� ���� �־�� 1 �� ����Ʈ�� ��� �͵� �̺�Ʈ �� + cto.ReadIntervalTimeout = MAXDWORD; // 이 값을 주어야 1 개 바이트가 들어 와도 이벤트 발생 cto.ReadTotalTimeoutMultiplier = 0; cto.ReadTotalTimeoutConstant = 0; cto.WriteTotalTimeoutConstant = 0; @@ -199,16 +199,16 @@ poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit) return NULL; } - // ���� ���� + // 버퍼 비우기 PurgeComm( fd,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); - // �̺�Ʈ ���� + // 이벤트 설정 SetCommMask( fd,EV_RXCHAR); #endif - // uart ���� ������ �����Ѵ�. + // uart 만의 정보를 설정한다. uart = (uart_priv_t *)malloc( sizeof(uart_priv_t) ); memset( (void *)uart, 0, sizeof(uart_priv_t) ); strcpy( uart->port, dev_name ); @@ -226,11 +226,11 @@ poll_obj_t *uart_open( char *dev_name, int baud, char parity, int stop_bit) return obj; } //------------------------------------------------------------------------------ -/** @brief uart �� �� ��������� open �Ѵ�. - @param fname ���ڿ� �����̸� - @param fname ���ڿ� �����̸� - @param fname ���ڿ� �����̸� - @return poll_obj_t ������ ������ +/** @brief uart 를 모뎀 제어용으로 open 한다. + @param fname 문자열 파일이름 + @param fname 문자열 파일이름 + @param fname 문자열 파일이름 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *uart_open_modem( char *dev_name, int baud, char parity ) { @@ -243,18 +243,18 @@ poll_obj_t *uart_open_modem( char *dev_name, int baud, char parity ) struct termios newtio; printf( "[%s:%d] \n",__FILE__,__LINE__); - // �ø�����Ʈ�� ����. + // 시리얼포트를 연다. fd = open( dev_name, O_RDWR | O_NOCTTY ); if ( fd < 0 ) { - // ȭ�� ���� ���� + // 화일 열기 실패 printf( "device open fail %s : ", dev_name ); perror(""); return NULL; } printf( "[%s:%d] \n",__FILE__,__LINE__); - // �ø��� ��Ʈ ȯ���� �����Ѵ�. + // 시리얼 포트 환경을 설정한다. memset(&newtio, 0, sizeof(newtio) ); // data 8bit @@ -275,7 +275,7 @@ poll_obj_t *uart_open_modem( char *dev_name, int baud, char parity ) } // parity - switch( parity | 0x20 ) // �ҹ��� ó�� + switch( parity | 0x20 ) // 소문자 처리 { case 'o' : newtio.c_cflag |= (PARENB |PARODD ); break; case 'e' : newtio.c_cflag |= PARENB ; break; @@ -295,7 +295,7 @@ poll_obj_t *uart_open_modem( char *dev_name, int baud, char parity ) tcflush ( fd, TCIFLUSH ); tcsetattr( fd, TCSANOW, &newtio ); - // uart modem ���� ������ �����Ѵ�. + // uart modem 만의 정보를 설정한다. uart = (uart_priv_t *)malloc( sizeof(uart_priv_t) ); memset( (void *)uart, 0, sizeof(uart_priv_t) ); strcpy( uart->port, dev_name ); @@ -314,8 +314,8 @@ poll_obj_t *uart_open_modem( char *dev_name, int baud, char parity ) //------------------------------------------------------------------------------ -/** @brief uart �� close �Ѵ�. - @param obj ����ü ������ +/** @brief uart 를 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void uart_close( poll_obj_t *obj ) { @@ -337,9 +337,9 @@ void uart_close( poll_obj_t *obj ) poll_delete( obj ); } //------------------------------------------------------------------------------ -/** @brief uart ����ü�� �����̸����� ã�´�. - @param fname ���ڿ� �����̸� - @return obj ����ü ������ +/** @brief uart 폴객체를 파일이름으로 찾는다. + @param fname 문자열 파일이름 + @return obj 폴객체 포인터 *///---------------------------------------------------------------------------- poll_obj_t *uart_get_byport( char *fname ) { @@ -368,17 +368,17 @@ poll_obj_t *uart_get_byport( char *fname ) return NULL; } //------------------------------------------------------------------------------ -/** @brief uart �� ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� +/** @brief uart 를 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int uart_write( poll_obj_t *obj, char *buf, int len ) { int wrcnt; - // �����Ѵ�. + // 전송한다. #ifdef EMBEDDED_LINUX wrcnt = write( obj->fd, buf, len ); @@ -397,17 +397,17 @@ int uart_write( poll_obj_t *obj, char *buf, int len ) return wrcnt; } //------------------------------------------------------------------------------ -/** @brief uart �� ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param buf �ϱ���� - @param len ������ ���� - @return ���� ����Ÿ ���� +/** @brief uart 를 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param buf 일기버퍼 + @param len 버퍼의 길이 + @return 읽은 데이타 개수 *///---------------------------------------------------------------------------- int uart_read( poll_obj_t *obj, char *buf, int len ) { int rdcnt; - // ����Ÿ�� �д´�. + // 데이타를 읽는다. #ifdef EMBEDDED_LINUX rdcnt = read( obj->fd, buf, len ); @@ -426,9 +426,9 @@ int uart_read( poll_obj_t *obj, char *buf, int len ) return rdcnt; } //------------------------------------------------------------------------------ -/** @brief uart ���� ���Ź��ۿ� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @return ���μ��Ź����� �� ����Ÿ ���� +/** @brief uart 내부 수신버퍼에 데이타를 저장한다. + @param obj 폴객체 포인터 + @return 내부수신버퍼의 총 데이타 길이 *///---------------------------------------------------------------------------- int uart_read_into_fifo( poll_obj_t *obj ) { @@ -464,12 +464,12 @@ int uart_read_into_fifo( poll_obj_t *obj ) } //------------------------------------------------------------------------------ -/** @brief uart ���� ���Ź��ۿ��� ����Ÿ�� �о�´�. - @param obj ����ü ������ - @param buf ����Ÿ�� ��ƿ� ���� - @param len ������ ���� - @return ����� ����Ÿ ���� - @remark ����Ÿ�� ������ �� ������ ũ�⸸ŭ ������ �������� ����Ÿ�� �̵��Ѵ�. +/** @brief uart 내부 수신버퍼에서 데이타를 읽어온다. + @param obj 폴객체 포인터 + @param buf 데이타를 담아올 버퍼 + @param len 버퍼의 길이 + @return 복사된 데이타 길이 + @remark 데이타를 복사한 후 복사한 크기만큼 버퍼의 앞쪽으로 데이타를 이동한다. *///---------------------------------------------------------------------------- int uart_copy_recv_fifo( poll_obj_t *obj, char *buf, int len ) { @@ -490,9 +490,9 @@ int uart_copy_recv_fifo( poll_obj_t *obj, char *buf, int len ) return len; } //------------------------------------------------------------------------------ -/** @brief uart ���� ���Ź����� ������ ��´�. - @param obj ����ü ������ - @return uart ���� ���Ź����� ������ +/** @brief uart 내부 수신버퍼의 포인터를 얻는다. + @param obj 폴객체 포인터 + @return uart 내부 수신버퍼의 포인터 *///---------------------------------------------------------------------------- char *uart_get_recv_fifo( poll_obj_t *obj ) { @@ -502,9 +502,9 @@ char *uart_get_recv_fifo( poll_obj_t *obj ) return uart->recv_fifo; } //------------------------------------------------------------------------------ -/** @brief uart ���� ���Ź��ۿ� ����� ����Ÿ�� ������ ��´�. - @param obj ����ü ������ - @return ���Ź��ۿ� ����� ����Ÿ�� ���� +/** @brief uart 내부 수신버퍼에 저장된 데이타의 갯수를 얻는다. + @param obj 폴객체 포인터 + @return 수신버퍼에 저장된 데이타의 갯수 *///---------------------------------------------------------------------------- int uart_get_recv_fifo_count( poll_obj_t *obj ) { @@ -514,10 +514,10 @@ int uart_get_recv_fifo_count( poll_obj_t *obj ) return uart->fifo_rcnt; } //------------------------------------------------------------------------------ -/** @brief uart ���� ���Ź��ۿ��� ������ ����Ÿ�� ������ �� ������ ����Ÿ�� �̵��Ѵ�. - @param obj ����ü ������ - @param len ���ŵ� ����Ÿ ���� - @return ���Ź��ۿ� �����ִ� ����Ÿ�� ���� +/** @brief uart 내부 수신버퍼에서 앞쪽의 데이타를 제거한 후 뒤쪽의 데이타를 이동한다. + @param obj 폴객체 포인터 + @param len 제거될 데이타 개수 + @return 수신버퍼에 남아있는 데이타의 갯수 *///---------------------------------------------------------------------------- int uart_checkout_recv_fifo( poll_obj_t *obj, int len ) { @@ -535,20 +535,20 @@ int uart_checkout_recv_fifo( poll_obj_t *obj, int len ) return uart->fifo_rcnt; } //------------------------------------------------------------------------------ -/** @brief uart ���� ���Ź��۸� ����. - @param obj ����ü ������ +/** @brief uart 내부 수신버퍼를 비운다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void uart_clear_recv_fifo( poll_obj_t *obj ) { uart_checkout_recv_fifo( obj, uart_get_recv_fifo_count( obj ) ); } //------------------------------------------------------------------------------ -/** @brief uart���� ����Ÿ�� ���ŵɶ����� �����Ѵ�. - @param obj ����ü ������ - @param match ���� ���� - @param match_len ���� ������ ũ�� - @param tmout_msec Ÿ�Ӿƿ� �ð� - @return ���� 0, ���� -1 +/** @brief uart에서 비교데이타가 수신될때까지 감시한다. + @param obj 폴객체 포인터 + @param match 비교할 버퍼 + @param match_len 비교할 버퍼의 크기 + @param tmout_msec 타임아웃 시간 + @return 성공 0, 실패 -1 *///---------------------------------------------------------------------------- int uart_recv_wait_fifo( poll_obj_t *obj, unsigned char *match, int match_len, int tmout_msec ) { @@ -557,21 +557,21 @@ int uart_recv_wait_fifo( poll_obj_t *obj, unsigned char *match, int match_len, deep_wait = 0; - // ������ ����Ÿ�� ��� ���ش�. - // 2011-05-25 ���� + // 과거의 데이타를 모두 없앤다. + // 2011-05-25 제거 // uart_checkout_recv_fifo( obj, uart_get_recv_fifo_count( obj ) ); while( 0 < tmout_msec ) { - // ���ŵ���Ÿ�� �����Ѵ�. + // 수신데이타를 감시한다. poll_ret = poll_do_one( obj->fd, POLLIN, 100 ); - // �̺�Ʈ�� �����ٸ� �ð��� ���ҽ�Ų��. + // 이벤트가 없었다면 시간을 감소시킨다. if ( poll_ret != POLL_EVENTED ) { tmout_msec -= 100; - // 1�� ���� ����Ÿ�� �����ٸ� ���Ź��� clear + // 1초 동안 데이타가 없었다면 수신버퍼 clear deep_wait ++; if ( 10 < deep_wait ) { @@ -581,17 +581,17 @@ int uart_recv_wait_fifo( poll_obj_t *obj, unsigned char *match, int match_len, continue; } - // ����� ���Դٸ� 1mse �� ���ҽ�Ų��. + // 통신이 들어왔다면 1mse 만 감소시킨다. tmout_msec --; deep_wait = 0; - // ����Ÿ�� ���ۿ� �ִ´�. + // 데이타를 버퍼에 넣는다. rdcnt = uart_read_into_fifo( obj ); rbuf = uart_get_recv_fifo ( obj ); while( match_len <= rdcnt ) { - // �Ʒ� ������ ���� ��Ʈ�� ���ߴ�. + // 아래 문장은 아직 테스트를 못했다. // if ( 0 == memcmp( rbuf, match, match_len ) ) { diff --git a/app/app-prime-modbus/lib/fanet/udp.c b/app/app-prime-modbus/lib/fanet/udp.c index 2d97f8d..6b0708a 100644 --- a/app/app-prime-modbus/lib/fanet/udp.c +++ b/app/app-prime-modbus/lib/fanet/udp.c @@ -1,11 +1,11 @@ /** @file udp.c @date 2009-03-19 - @author ����� freefrug@falinux.com - @brief udp �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief udp 를 사용한 통신을 담당한다. @modify - 2010-08-18 (��漮) mingw�� �Բ� ����� �� �ִ� �ڵ� �߰� + 2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가 @todo @bug @remark @@ -13,11 +13,11 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- -#define EMBEDDED_LINUX // �̷��� ó������ ������ EClipse���� C ������ ȸ�� ������ �� +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -53,7 +53,7 @@ char desc_udp[] = "falinux udp ver 0.2.0"; -/// udp ���� ����ü +/// udp 개별 구조체 typedef struct { int port; @@ -61,13 +61,13 @@ typedef struct { struct sockaddr_in addr; } udp_priv_t; -static poll_obj_t *tmp_udp_poll = NULL; // poll ������ü���� �����Լ��� ���� +static poll_obj_t *tmp_udp_poll = NULL; // poll 관리객체없이 전송함수를 위해 //------------------------------------------------------------------------------ -/** @brief udp ������ �������·� open �Ѵ�. - @param port ��Ʈ��ȣ - @return poll_obj_t ������ ������ +/** @brief udp 소켓을 서버형태로 open 한다. + @param port 포트번호 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- #ifdef EMBEDDED_LINUX @@ -87,12 +87,12 @@ poll_obj_t *udp_open_server( int port ) return NULL; } - // TIME-WAIT ���¿� �ִ� ���Ͽ� �Ҵ�Ǿ� �ִ� IP �ּҿ� ��Ʈ�� �ٷ� ����� �� �ֵ��� - // SO_REUSEADDR �� �ɼ� ���� TRUE �� + // TIME-WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 포트를 바로 사용할 수 있도록 + // SO_REUSEADDR 의 옵션 값을 TRUE 로 option = 1; setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); - // ������ �ý��ۿ� �����Ѵ�. + // 소켓을 시스템에 연결한다. bzero( &addr_svr, sizeof(struct sockaddr_in) ); addr_svr.sin_family = AF_INET; addr_svr.sin_addr.s_addr = htonl( INADDR_ANY ); @@ -105,7 +105,7 @@ poll_obj_t *udp_open_server( int port ) return NULL; } - // udp ���� ������ �����Ѵ�. + // udp 만의 정보를 설정한다. udp = (udp_priv_t *)malloc( sizeof(udp_priv_t) ); udp->im_server = 1; udp->port = port; @@ -136,12 +136,12 @@ poll_obj_t *udp_open_server( int port ) return NULL; } - // TIME-WAIT ���¿� �ִ� ���Ͽ� �Ҵ�Ǿ� �ִ� IP �ּҿ� ��Ʈ�� �ٷ� ����� �� �ֵ��� - // SO_REUSEADDR �� �ɼ� ���� TRUE �� + // TIME-WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 포트를 바로 사용할 수 있도록 + // SO_REUSEADDR 의 옵션 값을 TRUE 로 option = 1; setsockopt( hSock, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); - // ������ �ý��ۿ� �����Ѵ�. + // 소켓을 시스템에 연결한다. memset( &sckAddr, 0, sizeof( sckAddr)); sckAddr.sin_family = AF_INET; sckAddr.sin_addr.s_addr = htonl( INADDR_ANY ); @@ -154,7 +154,7 @@ poll_obj_t *udp_open_server( int port ) return NULL; } - // udp ���� ������ �����Ѵ�. + // udp 만의 정보를 설정한다. udp = (udp_priv_t *)malloc( sizeof(udp_priv_t) ); udp->im_server = 1; udp->port = port; @@ -174,8 +174,8 @@ poll_obj_t *udp_open_server( int port ) //------------------------------------------------------------------------------ -/** @brief udp ������ Ŭ���̾�Ʈ ���·� open �Ѵ�. - @return poll_obj_t ������ ������ +/** @brief udp 소켓을 클라이언트 형태로 open 한다. + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- #ifdef EMBEDDED_LINUX @@ -193,7 +193,7 @@ poll_obj_t *udp_open_client( void ) return NULL; } - // udp ���� ������ �����Ѵ�. + // udp 만의 정보를 설정한다. udp = (udp_priv_t *)malloc( sizeof(udp_priv_t) ); udp->im_server = 0; udp->port = -1; @@ -222,7 +222,7 @@ poll_obj_t *udp_open_client( void ) return NULL; } - // udp ���� ������ �����Ѵ�. + // udp 만의 정보를 설정한다. udp = (udp_priv_t *)malloc( sizeof(udp_priv_t) ); udp->im_server = FALSE; udp->port = -1; @@ -241,8 +241,8 @@ poll_obj_t *udp_open_client( void ) #endif //------------------------------------------------------------------------------ -/** @brief udp ������ close �Ѵ�. - @param obj ����ü ������ +/** @brief udp 소켓을 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void udp_close( poll_obj_t *obj ) { @@ -253,7 +253,7 @@ void udp_close( poll_obj_t *obj ) #else closesocket( *( ( SOCKET *)obj->fd)); - free( obj->fd); // SOCKET * �� �����Ѵ�. + free( obj->fd); // SOCKET * 를 해제한다. #endif @@ -267,9 +267,9 @@ void udp_close( poll_obj_t *obj ) if ( tmp_udp_poll == obj ) tmp_udp_poll = NULL; } //------------------------------------------------------------------------------ -/** @brief udp ����ü�� ��Ʈ��ȣ�� ã�´�. - @param port ��Ʈ��ȣ - @return obj ����ü ������ +/** @brief udp 폴객체를 포트번호로 찾는다. + @param port 포트번호 + @return obj 폴객체 포인터 *///---------------------------------------------------------------------------- poll_obj_t *udp_get_byport( int port ) { @@ -295,10 +295,10 @@ poll_obj_t *udp_get_byport( int port ) return NULL; } //------------------------------------------------------------------------------ -/** @brief �ڷḦ �۽��� Ŭ���̾�Ʈ�� ������ �� �����Ѵ� - @param obj ����ü ������ - @param len ������ ���� - @return ���۵� ����Ÿ ���� +/** @brief 자료를 송신한 클라이언트로 데에터를 재 전송한다 + @param obj 폴객체 포인터 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 *///---------------------------------------------------------------------------- int udp_echo( poll_obj_t *obj, char *buf, int len ) { @@ -328,26 +328,26 @@ int udp_echo( poll_obj_t *obj, char *buf, int len ) return wrcnt; } //------------------------------------------------------------------------------ -/** @brief udp ������ ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param host ���� IP �� ȣ��Ʈ�̸� ���ڿ������� - @param port ���� ��Ʈ��ȣ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� +/** @brief udp 소켓을 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param host 상대방 IP 나 호스트이름 문자열포인터 + @param port 상대방 포트번호 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int udp_write( poll_obj_t *obj, char *host, int port, char *buf, int len ) { struct sockaddr_in udp_addr; int wrcnt; - // ����� �ּҸ� �����Ѵ�. + // 상대편 주소를 설정한다. memset( &udp_addr, 0, sizeof( struct sockaddr_in) ); udp_addr.sin_family = AF_INET; udp_addr.sin_addr.s_addr = inet_addr( host ); udp_addr.sin_port = htons( port ); - // �����Ѵ�. + // 전송한다. #ifdef EMBEDDED_LINUX @@ -368,10 +368,10 @@ int udp_write( poll_obj_t *obj, char *host, int port, char *buf, int len ) return wrcnt; } //------------------------------------------------------------------------------ -/** @brief udp ������ ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param len ������ ���� - @return ���۵� ����Ÿ ���� +/** @brief udp 소켓을 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 *///---------------------------------------------------------------------------- int udp_read( poll_obj_t *obj, char *buf, int len ) { @@ -383,7 +383,7 @@ int udp_read( poll_obj_t *obj, char *buf, int len ) udp = (udp_priv_t *)(obj->priv); paddr = &(udp->addr); - // ����Ÿ�� �д´�. + // 데이타를 읽는다. addr_len = sizeof( struct sockaddr_in); #ifdef EMBEDDED_LINUX @@ -406,11 +406,11 @@ int udp_read( poll_obj_t *obj, char *buf, int len ) return rdcnt; } //------------------------------------------------------------------------------ -/** @brief udp �������� ���������� ������ ȣ��Ʈ�� ã�´�. - @param obj ����ü ������ - @param host ����� ȣ��Ʈ�� ������ ���ڿ� ������ - @param port ����� ȣ��Ʈ�� ����� ��Ʈ��ȣ�� ������ ������ ������ - @return �ǹ̾��� +/** @brief udp 소켓으로 마지막으로 수신한 호스트를 찾는다. + @param obj 폴객체 포인터 + @param host 상대편 호스트를 돌려줄 문자열 포인터 + @param port 상대편 호스트가 사용한 포트번호를 돌려줄 정수형 포인터 + @return 의미없음 *///---------------------------------------------------------------------------- int udp_get_remote_host( poll_obj_t *obj, char *host, int *port ) { @@ -424,13 +424,13 @@ int udp_get_remote_host( poll_obj_t *obj, char *host, int *port ) return 0; } //------------------------------------------------------------------------------ -/** @brief poll ��ü���� udp ������ ���� ����Ÿ�� �����Ѵ�. - @param host ���� IP �� ȣ��Ʈ�̸� ���ڿ������� - @param port ���� ��Ʈ��ȣ - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� - @remark udp_open_server(), udp_open_client() �Լ��� �ѹ� ȣ��Ǿ�� �Ѵ�. +/** @brief poll 객체없이 udp 소켓을 통해 데이타를 전송한다. + @param host 상대방 IP 나 호스트이름 문자열포인터 + @param port 상대방 포트번호 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 + @remark udp_open_server(), udp_open_client() 함수는 한번 호출되어야 한다. *///---------------------------------------------------------------------------- int udp_write_simple( char *host, int port, char *buf, int len ) { @@ -442,11 +442,11 @@ int udp_write_simple( char *host, int port, char *buf, int len ) return -1; } //------------------------------------------------------------------------------ -/** @brief poll ��ü���� udp ������ ���� ����Ÿ�� �д´�. - @param buf ���۹��� - @param len ������ ���� - @return ���۵� ����Ÿ ���� - @remark udp_open_server(), udp_open_client() �Լ��� �ѹ� ȣ��Ǿ�� �Ѵ�. +/** @brief poll 객체없이 udp 소켓을 통해 데이타를 읽는다. + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 + @remark udp_open_server(), udp_open_client() 함수는 한번 호출되어야 한다. *///---------------------------------------------------------------------------- int udp_read_simple( char *buf, int len ) { diff --git a/app/app-prime-modbus/lib/fanet/uds.c b/app/app-prime-modbus/lib/fanet/uds.c index 1b9ce2b..72c6226 100644 --- a/app/app-prime-modbus/lib/fanet/uds.c +++ b/app/app-prime-modbus/lib/fanet/uds.c @@ -1,13 +1,13 @@ /** @file uds.c @date 2009-03-19 - @author ����� freefrug@falinux.com - @brief uds �� ����� ����� ����Ѵ�. + @author 오재경 freefrug@falinux.com + @brief uds 를 사용한 통신을 담당한다. - @modify 2009-12-11 (�����) - uds_open_client() �Լ��� ���� ���Ǽ��� �����ߴ�. - uds_open_client() �Լ� ȣ��� ������ �����̸��� uds_write() �Լ����� - �������� NULL �� ��� �������� ��ġ�ȴ�. + @modify 2009-12-11 (오재경) + uds_open_client() 함수에 대한 편의성을 가미했다. + uds_open_client() 함수 호출시 인자의 파일이름은 uds_write() 함수에서 + 목적지가 NULL 일 경우 목적지로 대치된다. @todo @bug @remark @@ -15,8 +15,8 @@ @warning */ // -// ���۱� �������̸�����(��) -// �ܺΰ��� ���� +// 저작권 에프에이리눅스(주) +// 외부공개 금지 // //---------------------------------------------------------------------------- #include <stdio.h> @@ -37,7 +37,7 @@ char desc_uds[] = "falinux uds ver 0.2.0"; -/// uds ���� ����ü +/// uds 개별 구조체 typedef struct { char port[256]; @@ -45,13 +45,13 @@ typedef struct { } uds_priv_t; -static poll_obj_t *tmp_uds_poll = NULL; // poll ������ü���� �����Լ��� ���� +static poll_obj_t *tmp_uds_poll = NULL; // poll 관리객체없이 전송함수를 위해 //------------------------------------------------------------------------------ -/** @brief uds ������ �������·� open �Ѵ�. - @param fname ���ڿ� �����̸� - @return poll_obj_t ������ ������ +/** @brief uds 소켓을 서버형태로 open 한다. + @param fname 문자열 파일이름 + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *uds_open_server( char *fname ) { @@ -68,15 +68,15 @@ poll_obj_t *uds_open_server( char *fname ) return NULL; } - // �̹� ���Ͽ� ȭ�Ͽ� ��ũ�Ǿ� �ִٸ� �����Ѵ�. + // 이미 소켓용 화일에 링크되어 있다면 제거한다. unlink ( fname ); - // TIME-WAIT ���¿� �ִ� ���Ͽ� �Ҵ�Ǿ� �ִ� IP �ּҿ� ��Ʈ�� �ٷ� ����� �� �ֵ��� - // SO_REUSEADDR �� �ɼ� ���� TRUE �� + // TIME-WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 포트를 바로 사용할 수 있도록 + // SO_REUSEADDR 의 옵션 값을 TRUE 로 option = 1; setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); - // ������ �ý��ۿ� �����Ѵ�. + // 소켓을 시스템에 연결한다. bzero( &addr_svr, sizeof(struct sockaddr_un) ); addr_svr.sun_family = AF_UNIX; strcpy( addr_svr.sun_path, fname ); @@ -88,7 +88,7 @@ poll_obj_t *uds_open_server( char *fname ) return NULL; } - // uds ���� ������ �����Ѵ�. + // uds 만의 정보를 설정한다. uds = (uds_priv_t *)malloc( sizeof(uds_priv_t) ); uds->im_server = 1; strcpy( uds->port, fname ); @@ -102,9 +102,9 @@ poll_obj_t *uds_open_server( char *fname ) return obj; } //------------------------------------------------------------------------------ -/** @brief uds ������ Ŭ���̾�Ʈ ���·� open �Ѵ�. - @param fname ���ڿ� �����̸�, Ȯ���� ���� �����ϸ� NULL �� ����Ͽ��� �ȴ�. - @return poll_obj_t ������ ������ +/** @brief uds 소켓을 클라이언트 형태로 open 한다. + @param fname 문자열 파일이름, 확장을 위해 존재하며 NULL 을 사용하여도 된다. + @return poll_obj_t 형태의 포인터 *///---------------------------------------------------------------------------- poll_obj_t *uds_open_client( char *fname ) { @@ -119,7 +119,7 @@ poll_obj_t *uds_open_client( char *fname ) return NULL; } - // uds ���� ������ �����Ѵ�. + // uds 만의 정보를 설정한다. uds = (uds_priv_t *)malloc( sizeof(uds_priv_t) ); uds->im_server = 0; if (fname) @@ -136,8 +136,8 @@ poll_obj_t *uds_open_client( char *fname ) return obj; } //------------------------------------------------------------------------------ -/** @brief uds ������ close �Ѵ�. - @param obj ����ü ������ +/** @brief uds 소켓을 close 한다. + @param obj 폴객체 포인터 *///---------------------------------------------------------------------------- void uds_close( poll_obj_t *obj ) { @@ -153,9 +153,9 @@ void uds_close( poll_obj_t *obj ) if ( tmp_uds_poll == obj ) tmp_uds_poll = NULL; } //------------------------------------------------------------------------------ -/** @brief uds ����ü�� �����̸����� ã�´�. - @param fname ���ڿ� �����̸� - @return obj ����ü ������ +/** @brief uds 폴객체를 파일이름으로 찾는다. + @param fname 문자열 파일이름 + @return obj 폴객체 포인터 *///---------------------------------------------------------------------------- poll_obj_t *uds_get_byport( char *fname ) { @@ -181,12 +181,12 @@ poll_obj_t *uds_get_byport( char *fname ) return NULL; } //------------------------------------------------------------------------------ -/** @brief uds ������ ���� ����Ÿ�� �����Ѵ�. - @param obj ����ü ������ - @param to ���� �����̸� ���ڿ������� - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� +/** @brief uds 소켓을 통해 데이타를 전송한다. + @param obj 폴객체 포인터 + @param to 상대방 파일이름 문자열포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 *///---------------------------------------------------------------------------- int uds_write( poll_obj_t *obj, char *to, char *buf, int len ) { @@ -197,19 +197,19 @@ int uds_write( poll_obj_t *obj, char *to, char *buf, int len ) uds = (uds_priv_t *)obj->priv; - // Ŭ���̾�Ʈ�� �����ְų� �������� �������� ������ ����� ��Ʈ�� �����Ѵ�. + // 클라이언트로 열려있거나 목적지가 존재하지 않으면 저장된 포트로 전송한다. dst = to; if ( ( 0 == uds->im_server ) && ( NULL == dst ) ) { dst = uds->port; } - // ����� �ּҸ� �����Ѵ�. + // 상대편 주소를 설정한다. bzero( &uds_addr, sizeof(struct sockaddr_un) ); uds_addr.sun_family = AF_UNIX; strcpy( uds_addr.sun_path, dst ); - // �����Ѵ�. + // 전송한다. wrcnt = sendto( obj->fd, buf, len, 0, (struct sockaddr *)&uds_addr, sizeof(uds_addr) ); if ( 0 > wrcnt ) @@ -223,11 +223,11 @@ int uds_write( poll_obj_t *obj, char *to, char *buf, int len ) return wrcnt; } //------------------------------------------------------------------------------ -/** @brief uds ������ ���� ����Ÿ�� �д´�. - @param obj ����ü ������ - @param buf ���۹��� - @param len ������ ���� - @return ���۵� ����Ÿ ���� +/** @brief uds 소켓을 통해 데이타를 읽는다. + @param obj 폴객체 포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 *///---------------------------------------------------------------------------- int uds_read( poll_obj_t *obj, char *buf, int len ) { @@ -235,7 +235,7 @@ int uds_read( poll_obj_t *obj, char *buf, int len ) int addr_len; int rdcnt; - // ����Ÿ�� �д´�. + // 데이타를 읽는다. addr_len = sizeof(uds_addr); rdcnt = recvfrom( obj->fd, buf, len, 0, (struct sockaddr *)&uds_addr, (socklen_t *)&addr_len ); @@ -252,12 +252,12 @@ int uds_read( poll_obj_t *obj, char *buf, int len ) } //------------------------------------------------------------------------------ -/** @brief poll ��ü���� uds ������ ���� ����Ÿ�� �����Ѵ�. - @param to ���� �����̸� ���ڿ������� - @param buf ���۹��� - @param len ������ ���� - @return ������ ����Ÿ ���� - @remark uds_open_server(), uds_open_client() �Լ��� �ѹ� ȣ��Ǿ�� �Ѵ�. +/** @brief poll 객체없이 uds 소켓을 통해 데이타를 전송한다. + @param to 상대방 파일이름 문자열포인터 + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송한 데이타 개수 + @remark uds_open_server(), uds_open_client() 함수는 한번 호출되어야 한다. *///---------------------------------------------------------------------------- int uds_write_simple( char *to, char *buf, int len ) { @@ -269,11 +269,11 @@ int uds_write_simple( char *to, char *buf, int len ) return -1; } //------------------------------------------------------------------------------ -/** @brief poll ��ü���� uds ������ ���� ����Ÿ�� �д´�. - @param buf ���۹��� - @param len ������ ���� - @return ���۵� ����Ÿ ���� - @remark uds_open_server(), uds_open_client() �Լ��� �ѹ� ȣ��Ǿ�� �Ѵ�. +/** @brief poll 객체없이 uds 소켓을 통해 데이타를 읽는다. + @param buf 전송버퍼 + @param len 버퍼의 길이 + @return 전송된 데이타 개수 + @remark uds_open_server(), uds_open_client() 함수는 한번 호출되어야 한다. *///---------------------------------------------------------------------------- int uds_read_simple( char *buf, int len ) { diff --git a/app/app-prime-modbus/lib/fanet/ux_gui.c b/app/app-prime-modbus/lib/fanet/ux_gui.c index 3e32d31..9e517db 100644 --- a/app/app-prime-modbus/lib/fanet/ux_gui.c +++ b/app/app-prime-modbus/lib/fanet/ux_gui.c @@ -1,9 +1,9 @@ //------------------------------------------------------------------------------ /** @file ux_gui.C - @brief GUI ó�� ���̺귯�� - @author ����â bmfrog2@gmail.com - @date 2009�� 1�� 17�� + @brief GUI 처리 라이브러리 + @author 유영창 bmfrog2@gmail.com + @date 2009년 1월 17일 @license *///---------------------------------------------------------------------------- @@ -18,7 +18,7 @@ #include <linux/input.h> #include <linux/limits.h> // PATH_MAX -#include <fcntl.h> // O_RDWR , O_NOCTTY ���� ��� ���� +#include <fcntl.h> // O_RDWR , O_NOCTTY 등의 상수 정의 #include <time.h> #include <linux/kdev_t.h> // MKDEV @@ -35,10 +35,10 @@ #include <ux_gui.h> //------------------------------------------------------------------------------ -/** @brief GUI ó���� �ʿ��� ���̺귯���� �ʱ�ȭ �Ѵ�. - @param exit_flag : �ʱ�ȭ ���н� ���α� ���� ���� , 1 �̸� ���α� ���� +/** @brief GUI 처리에 필요한 라이브러리를 초기화 한다. + @param exit_flag : 초기화 실패시 프로그램 종료 여부 , 1 이면 프로그램 종료 @return - @remark ���� + @remark 없음 *///---------------------------------------------------------------------------- int ux_gui_lib_init( int exit_flag ) { @@ -80,10 +80,10 @@ static int map_last_y = 0; //------------------------------------------------------------------------------ -/** @brief ���� ���� �о� �´�. - @param fileaname : ��Ʈ�� ���ϸ� - @return ���� 0 - @return ���� -1 +/** @brief 전경 그림을 읽어 온다. + @param fileaname : 비트맵 파일명 + @return 정상 0 + @return 실패 -1 @remark *///---------------------------------------------------------------------------- int ux_gui_screen_map_load_front_bitmap( char *filename ) @@ -95,9 +95,9 @@ int ux_gui_screen_map_load_front_bitmap( char *filename ) } //-------------------------------------------------------------- -// ���� : ��� ���� �о� �´�. -// �Ű� : fileaname : ��Ʈ�� ���ϸ� -// ��ȯ : ���� 0 , ���� -1 +// 설명 : 배경 그림을 읽어 온다. +// 매계 : fileaname : 비트맵 파일명 +// 반환 : 정상 0 , 실패 -1 //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -114,9 +114,9 @@ int ux_gui_screen_map_load_back_bitmap( char *filename ) } //-------------------------------------------------------------- -// ���� : ����ũ ���� �о� �´�. -// �Ű� : fileaname : ��Ʈ�� ���ϸ� -// ��ȯ : ���� 0 , ���� -1 +// 설명 : 마스크 그림을 읽어 온다. +// 매계 : fileaname : 비트맵 파일명 +// 반환 : 정상 0 , 실패 -1 //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -133,9 +133,9 @@ int ux_gui_screen_map_load_mask_bitmap( char *filename ) } //-------------------------------------------------------------- -// ���� : GUI ��ũ�� ���� ó�� �ϴ� ������ �о� �ʱ�ȭ �Ѵ�. -// �Ű� : exit_flag �ʱ�ȭ ���н� ���α� ���� ���� -// 1 �̸� ���α� ���� +// 설명 : GUI 스크린 맵을 처리 하는 파일을 읽어 초기화 한다. +// 매계 : exit_flag 초기화 실패시 프로그램 종료 여부 +// 1 이면 프로그램 종료 //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -175,12 +175,12 @@ int ux_gui_screen_map_load( char *filename ) str++; } - if( readbuff[0] == 'E' && readbuff[1] == 'D' ) break; // ���� �� ���� �̸� ó�� ���� - if( readbuff[0] == 'R' && readbuff[1] == 'M' ) continue; // remark �����̸� ���� + if( readbuff[0] == 'E' && readbuff[1] == 'D' ) break; // 파일 끝 명령 이면 처리 종료 + if( readbuff[0] == 'R' && readbuff[1] == 'M' ) continue; // remark 명령이면 무시 - printf( "[%s]\n", readbuff ); // ����� ǥ�� + printf( "[%s]\n", readbuff ); // 디버그로 표시 - // �� ���� �б� ��û�̸� �̿� ���� ó�� + // 그림 파일 읽기 요청이면 이에 대한 처리 if( readbuff[0] == 'B' ) { switch( readbuff[1] ) @@ -194,7 +194,7 @@ int ux_gui_screen_map_load( char *filename ) continue; } - // �� ���� ó�� + // 색 정보 처리 if( readbuff[0] == 'C' && readbuff[1] == 'M' ) { sscanf( &readbuff[3], "%d,%d,%d,%d", &index, &r,&g,&b ); @@ -207,7 +207,7 @@ int ux_gui_screen_map_load( char *filename ) } continue; } - // ���� ���� ó�� + // 영역 정보 처리 if( readbuff[0] == 'A' && readbuff[1] == 'R' ) { sscanf( &readbuff[3], "%d,%d,%d,%d,%d", &index, &left,&top,&right, &bottom ); @@ -237,7 +237,7 @@ int ux_gui_screen_map_load( char *filename ) //-------------------------------------------------------------- -// ���� : GUI ��ũ�� ���� ó�� �ϴ� ������ �о� �ʱ�ȭ �Ѵ�. +// 설명 : GUI 스크린 맵을 처리 하는 파일을 읽어 초기화 한다. //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -252,7 +252,7 @@ int ux_gui_screen_map_set_dc( dc_t *dc ) } //-------------------------------------------------------------- -// ���� : ���� ȭ���� ����. +// 설명 : 전경 화면을 그린다. //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -267,7 +267,7 @@ int ux_gui_screen_map_draw_front( void ) } //-------------------------------------------------------------- -// ���� : �̺�Ʈ ������ �Ѱ� ���� ó�� �Ѵ�. +// 설명 : 이벤트 데이터를 넘겨 사전 처리 한다. //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -277,7 +277,7 @@ int ux_gui_screen_map_draw_front( void ) *///---------------------------------------------------------------------------- int ux_gui_screen_map_put_ie_event( ie_event_t *event_data ) { - // ���콺 ��ǥ�� ���Ѵ�. + // 마우스 좌표를 구한다. switch(event_data->type) { case IE_MOUSE_DOWN : @@ -292,7 +292,7 @@ int ux_gui_screen_map_put_ie_event( ie_event_t *event_data ) } //-------------------------------------------------------------- -// ���� : ���� �ε����� ���Ѵ�. +// 설명 : 영역 인덱스를 구한다. //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -330,7 +330,7 @@ int ux_gui_screen_map_get_area( void ) } //-------------------------------------------------------------- -// ���� : ���� ������ ����. +// 설명 : 전경 영역을 그린다. //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -360,7 +360,7 @@ int ux_gui_screen_map_draw_area_front ( int area_index ) //------------------------------------------------------------------------------ -/** @brief ��� ������ ����. +/** @brief 배경 영역을 그린다. @param @return @remark @@ -385,7 +385,7 @@ int ux_gui_screen_map_draw_area_back ( int area_index ) } //------------------------------------------------------------------------------ -/** @brief ��ũ�� �� �����ڿ��� ��ư �������� ǥ�� �Ѵ�. +/** @brief 스크립 맵 관리자에게 버튼 영역임을 표기 한다. @param @return @remark @@ -404,7 +404,7 @@ int ux_gui_screen_map_mark_button( int area_index ) } //------------------------------------------------------------------------------ -/** @brief ��ư�� �ٿ�� ����� ����. +/** @brief 버튼이 다운된 모습을 그린다. @param @return @remark @@ -433,7 +433,7 @@ int ux_gui_screen_map_draw_button_down( int area_index ) } //-------------------------------------------------------------- -// ���� : ��ư�� msec ����� ���� ����� ����. +// 설명 : 버튼이 msec 대기후 업된 모습을 그린다. //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief @@ -448,7 +448,7 @@ int ux_gui_screen_map_draw_button_up ( int area_index , int msec_delay ) int x1, x2, y1,y2; //dprintf("ux_gui_screen_map_draw_button_up : area_index = %d\n", area_index); - // ��� ó�� + // 대기 처리 for( lp = 0; lp < map_areas_count; lp++ ) { if( map_areas[ lp ][MAP_AREA_COLOR ] != area_index ) continue; @@ -457,7 +457,7 @@ int ux_gui_screen_map_draw_button_up ( int area_index , int msec_delay ) break; } - // ǥ�� ó�� + // 표출 처리 for( lp = 0; lp < map_areas_count; lp++ ) { if( map_areas[ lp ][MAP_AREA_COLOR ] != area_index ) continue; @@ -477,7 +477,7 @@ int ux_gui_screen_map_draw_button_up ( int area_index , int msec_delay ) //-------------------------------------------------------------- -// ���� : ���콺 ��ġ�� ��´�. +// 설명 : 마우스 위치를 얻는다. //-------------------------------------------------------------- //------------------------------------------------------------------------------ /** @brief