Blame view

app/app-prime-modbus/include/fanet/pollmng.h 4.35 KB
8c2952457   김태훈   응용 프로그램 추가
1
2
3
  /**    
      @file     pollmng.c
      @date     2009/3/19
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
4
5
      @author   오재경 freefrug@falinux.com  FALinux.Co.,Ltd.
      @brief    poll 을 관리한다.
8c2952457   김태훈   응용 프로그램 추가
6
  
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
7
8
      @modify   2010/01/04 (오재경)  poll_obj_t 구조체에서 poll_ndx 멤버변수 제거
                2010/08/18 (장길서) mingw와 함께 사용할 수 있는 코드 추가
8c2952457   김태훈   응용 프로그램 추가
9
10
11
12
13
14
15
16
17
                 
      @todo    
      @bug     
      @remark   
      
      
      @warning 
  */
  //
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
18
19
  //  저작권    에프에이리눅스(주)
  //            외부공개 금지
8c2952457   김태훈   응용 프로그램 추가
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  //
  //----------------------------------------------------------------------------
  
  #ifndef _POLL_MNG_H_
  #define _POLL_MNG_H_
  
  #define EMBEDDED_LINUX
  
  #ifdef MS_WIN32
      #undef EMBEDDED_LINUX
  #endif
  
  #define POLL_MAX_COUNT             256
  #define POLL_RECURSIVE_COUNT       8
  
  
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
36
  /// 관리하는 함수들의 리턴값
8c2952457   김태훈   응용 프로그램 추가
37
38
39
40
41
42
  #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
                              
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
43
  /// poll 로 관리되는 파일핸들의 형태
8c2952457   김태훈   응용 프로그램 추가
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  #define STYP_NONE                   0
  #define STYP_TCP                    1
  #define STYP_UDP                    2
  #define STYP_UDS                    3
  #define STYP_UART                   4
  #define STYP_FILE                   5
  #define STYP_FABIND                 6
  #define STYP_CAN                    7
  #define STYP_TIPC                   8
  #define STYP_TIPC_DGRAM             9
  
  #ifdef EMBEDDED_LINUX
  
  	typedef int	    fd_t;
  
  #else
  
  	typedef HANDLE	fd_t;
  
  #endif
  
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
65
  /// poll 관리 객체
8c2952457   김태훈   응용 프로그램 추가
66
67
68
69
70
71
  typedef struct poll_obj_t_ poll_obj_t;
  struct poll_obj_t_
  {
  	fd_t   fd;
  	int    type;
  	int    tag;
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
72
73
  	void  *priv;               // tcp, udp, uds 등에서 사용되는 포인터
  	void  *user;               // 사용자 포인터
8c2952457   김태훈   응용 프로그램 추가
74
75
76
77
78
79
80
81
82
83
84
85
86
  
  #ifdef  MS_WIN32
  
  	int     is_serial;
  
  #endif
  
  	int    (*on_poll_in )( poll_obj_t *obj);   
  	int    (*on_poll_out)( poll_obj_t *obj);   
  	int    (*on_poll_err)( poll_obj_t *obj);   
  	int    (*on_poll_hup)( poll_obj_t *obj);   
  	
  	int    (*on_timeout )( poll_obj_t *obj);   
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
87
  	int    (*on_disconnect )( poll_obj_t *obj);   // tcp 에서 소켓접속이 끊어지면 호출
8c2952457   김태훈   응용 프로그램 추가
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  };
  
  #ifdef	MS_WIN32
  
  	#define POLLIN		0x001		/* There is data to read.  */
  	#define POLLPRI		0x002		/* There is urgent data to read.  */
  	#define POLLOUT		0x004		/* Writing now will not block.  */
  
  	#define POLLERR		0x008		/* Error condition.  */
  	#define POLLHUP		0x010		/* Hung up.  */
  
  	struct pollfd{
  
  		fd_t 		fd;			/* File descriptor to poll.  */
      	short int 	events;		/* Types of events poller cares about.  */
      	short int 	revents;	/* Types of events that actually occurred.  */
  
  #ifdef MS_WIN32
      	int         is_serial;
  #endif
  
  	};
  
  #endif
  
  
  
  #ifdef __cplusplus 
  extern "C" { 
  #endif 	
  
  /// @{
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
  /// @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 번호로 찾아 폴객체를 반환한다.
8c2952457   김태훈   응용 프로그램 추가
135
136
137
138
139
140
141
  /// @}
  
  #ifdef __cplusplus 
  }
  #endif 
  
  #endif