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 /** ---------------------------------------------------------------------------- -@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 #include -#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 #include -#define EMBEDDED_LINUX // ̷ ó EClipse C ȸ +#define EMBEDDED_LINUX // 이렇게 처리하지 않으면 EClipse에서 C 영역이 회색 바탕이 됨 #ifdef MS_WIN32 #undef EMBEDDED_LINUX @@ -64,7 +64,7 @@ #include -/// α׷ +/// 프로그램 실행상태 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 -/// 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 -/// 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 -/// 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 //------------------------------------------------------------------------------ -// : +// 설명 : 전역 변수 //------------------------------------------------------------------------------ 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 @@ -32,11 +32,11 @@ #include //------------------------------------------------------------------------------ -/** @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 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 #include @@ -21,22 +21,22 @@ #include //------------------------------------------------------------------------------ -// : ũ +// 설명 : 매크로 상수 #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 @@ -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<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<ofs_dat ); - // + // 출력 rval = *(reg_dat); rval &= ~(1<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<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 #include -/// 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 -/// 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; idxftlst; - // ڿ ü Ѵ. + // 문자열 객체를 해제한다. for (loop=0; loopfcount; 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 @@ -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 @@ -33,22 +33,22 @@ #include #include -/// 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 -/// @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 #include @@ -29,7 +29,7 @@ #include #include // PATH_MAX -#include // O_RDWR , O_NOCTTY +#include // O_RDWR , O_NOCTTY 등의 상수 정의 #include #include // 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 ȴ. 2ix_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= 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 @@ -34,19 +34,19 @@ #include -/// ޸ ü +/// 공유메모리 관리를 위한 구조체 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 #include -/// 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 #include -/// 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 @@ -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 @@ -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 #include // PATH_MAX -#include // O_RDWR , O_NOCTTY +#include // O_RDWR , O_NOCTTY 등의 상수 정의 #include #include // MKDEV @@ -35,10 +35,10 @@ #include //------------------------------------------------------------------------------ -/** @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