Blame view

app/app-prime-modbus/lib/fanet/alarm.c 3.76 KB
8c2952457   김태훈   응용 프로그램 추가
1
2
3
  /**    
      @file     alarm.c
      @date     2009-04-09
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
4
5
      @author   오재경 freefrug@falinux.com
      @brief    알람디바이스 드라이버를 열고 관리한다.
8c2952457   김태훈   응용 프로그램 추가
6
7
8
9
10
11
12
13
14
  
      @modify   
      @todo    
      @bug     
      @remark   
      
      @warning 
  */
  //
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
15
16
  //  저작권    에프에이리눅스(주)
  //            외부공개 금지
8c2952457   김태훈   응용 프로그램 추가
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  //
  //----------------------------------------------------------------------------
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include <fcntl.h>
  #include <errno.h>
  #include <sys/types.h>
  #include <sys/un.h> 
  #include <sys/socket.h>
  #include <sys/ioctl.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
  
  #include <pollmng.h>
  #include <util.h>
  #include <ioctl-alarm.h>
  #include <alarm.h>                        
  
  char desc_alarm[] = "falinux alarm ver 0.1.0";
  
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
39
  /// alarm 개별 구조체
8c2952457   김태훈   응용 프로그램 추가
40
41
42
43
44
45
46
47
48
  typedef struct {
  	
  	int   count;
  	unsigned int per_msec;
  	
  } alarm_priv_t;
  
  
  //------------------------------------------------------------------------------
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
49
50
51
52
  /** @brief    알람 디바이스 드라이버를 open 한다.
      @param    count     알람발생회수, 0보다 작으면 지속적인 알람이다.
      @param    per_msec  알람발생 텀
      @return   poll_obj_t 형태의 포인터
8c2952457   김태훈   응용 프로그램 추가
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  *///----------------------------------------------------------------------------
  poll_obj_t  *alarm_open( int count, unsigned int per_msec )
  {
  	poll_obj_t *obj;
  	alarm_priv_t *alarm;
  	int  dev;
  	
  	dev = dev_open( "/dev/falinux-alarm", ALARM_MSG_MAJOR_DEF, 0 );
  	if ( dev < 0 )
  	{
  		perror( "dev open error:" );
  		return NULL;	
  	}
  
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
67
  	// alarm 만의 정보를 설정한다.
8c2952457   김태훈   응용 프로그램 추가
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  	alarm = (alarm_priv_t *)malloc( sizeof(alarm_priv_t) );
  	alarm->count    = count;
  	alarm->per_msec = per_msec;
  
  	obj = poll_add( dev );
  	obj->type = STYP_FILE;
  	obj->priv = (void *)alarm;
  
  	
  	if ( ( 0 < count ) || ( count == ENDLESS_ALARM_NOTIFY ) )
  	{
  		alarm_restart( obj );
  	}
  	
  	return obj;
  }
  //------------------------------------------------------------------------------
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
85
86
  /** @brief    알람을 중지한다.
      @param    obj  폴객체 포인터
8c2952457   김태훈   응용 프로그램 추가
87
88
89
90
91
92
  *///----------------------------------------------------------------------------
  void  alarm_stop( poll_obj_t *obj )
  {
  	ioctl( obj->fd, IOCTL_ALARM_CLR, 0 );
  }	
  //------------------------------------------------------------------------------
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
93
94
95
96
  /** @brief    알람을 재시작한다.
      @param    obj  폴객체 포인터
      @param    count     알람발생회수, 0보다 작으면 지속적인 알람이다.
      @param    per_msec  알람발생 텀
8c2952457   김태훈   응용 프로그램 추가
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  *///----------------------------------------------------------------------------
  void  alarm_restart( poll_obj_t *obj )
  {
  	ioctl_alarm_set_t  alarm_set;
  	alarm_priv_t      *alarm;
  	
  	alarm = (alarm_priv_t *)obj->priv;
  
  	alarm_set.count    = alarm->count;
  	alarm_set.per_msec = alarm->per_msec; 
  	
  	ioctl( obj->fd, IOCTL_ALARM_SET, &alarm_set );
  }	
  //------------------------------------------------------------------------------
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
111
112
113
  /** @brief    알람을 확인한다.(알람이 발생하면 반드시 호출하여야 한다.)
      @param    obj  폴객체 포인터
      @remark   알람이 발생하면 반드시 호출하여야 한다.
8c2952457   김태훈   응용 프로그램 추가
114
115
116
117
118
119
120
121
  *///----------------------------------------------------------------------------
  void  alarm_handled( poll_obj_t *obj )
  {
  	char buf[4];
  	
  	read( obj->fd, buf, 1  );
  }	
  //------------------------------------------------------------------------------
3061c73f6   김태훈   인코딩 변경 EUC-KR -> ...
122
123
  /** @brief    alarm 드라이버를 close 한다.
      @param    obj  폴객체 포인터
8c2952457   김태훈   응용 프로그램 추가
124
125
126
127
128
129
130
131
132
133
134
135
136
137
  *///----------------------------------------------------------------------------
  void alarm_close( poll_obj_t *obj )
  {
  	close( obj->fd );
  	
  	if ( obj->priv )
  	{
  		free( obj->priv );
  	}
  	
  	poll_delete( obj );
  }