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 );
}
|