2331e1af971dc5c5f58f17da273d1c8db2a0e158
[framework/appfw/alarm-manager.git] / include / alarm-internal.h
1 /*
2  *  alarm-manager
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Venkatesha Sarpangala <sarpangala.v@samsung.com>, Jayoun Lee <airjany@samsung.com>,
7  * Sewook Park <sewook7.park@samsung.com>, Jaeho Lee <jaeho81.lee@samsung.com>
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */
22
23
24
25
26 #ifndef _ALARM_INTERNAL_H
27 #define _ALARM_INTERNAL_H
28
29 #define MAX_SNOOZE_CNT 5
30 #define REPEAT_MODE_ONCE 0x80
31
32 #define SIG_TIMER 0x32
33 #define ALARM_INFO_MAX 100
34
35 #include "alarm.h"
36 #include <dbus/dbus-glib.h>
37 #include <glib.h>
38 #include <dlog.h>
39 #include <bundle.h>
40 #include <appsvc.h>
41
42 #define INIT_ALARM_LIST_SIZE 64
43 #define INIT_SCHEDULED_ALARM_LIST_SIZE 32
44 #define MAX_BUNDLE_NAME_LEN 2048
45 #define MAX_SERVICE_NAME_LEN 256
46 #define MAX_PKG_NAME_LEN MAX_SERVICE_NAME_LEN-8
47
48 #ifdef LOG_TAG
49 #undef LOG_TAG
50 #endif
51 #define LOG_TAG "ALARM_MANAGER"
52
53 /*Application ID for native application which is not launched by application 
54 server.*/
55 #define ALARM_NATIVE_APP_ID 99999
56 /*  Application Instance ID for native application which is not launched by 
57 application server.*/
58 #define ALARM_NATIVE_APP_INST_ID 99999
59 /*  Prefix of dbus service name of native application.*/
60 #define ALARM_NATIVE_APP_DBUS_SVC_NAME_PREFIX "NATIVE"
61
62 /* how to send expire event : gproxy or low level dbus
63 * if you want to use gproxy for receiving expire_event, please enable 
64 * _EXPIRE_ALARM_INTERFACE_IS_DBUS_GPROXY_ feature
65 * otherwise, lowlevel dbus interface will be used for receiving expire_event.
66 * Now we use low level dbus instead of gproxy
67 */
68 /*#define       _EXPIRE_ALARM_INTERFACE_IS_DBUS_GPROXY_ */
69
70 typedef struct {
71         DBusGConnection *bus;
72         DBusGProxy *proxy;
73         alarm_cb_t alarm_handler;
74         void *user_param;
75         int pid;                /* this specifies pid*/
76         GQuark quark_app_service_name;  /*dbus_service_name is converted 
77          to quark value*/
78          GQuark quark_app_service_name_mod;
79 } alarm_context_t;
80
81 typedef union {
82         int day_of_week;                        /**< days of a week */
83         time_t interval;
84 } alarm_interval_u;
85
86 /**
87 * This struct has mode of an alarm
88 */
89 typedef struct {
90         alarm_interval_u u_interval;
91         alarm_repeat_mode_t repeat;     /**< repeat mode */
92 } alarm_mode_t;
93
94 /**
95 *  This enumeration has alarm type
96
97 typedef enum
98 {
99         ALARM_TYPE_DEFAULT = 0x0,       
100         ALARM_TYPE_RELATIVE = 0x01,     
101         ALARM_TYPE_VOLATILE = 0x02,     
102 }alarm_type_t;
103 */
104 #define ALARM_TYPE_RELATIVE             0x80000000      /**< relative  */
105
106 /**
107 * This struct has the information of an alarm
108 */
109
110 typedef struct {
111         alarm_date_t start; /**< start time of the alarm */
112         alarm_date_t end;   /**< end time of the alarm */
113         alarm_mode_t mode;      /**< mode of alarm */
114         int alarm_type;     /**< alarm type*/
115         int reserved_info;
116 } alarm_info_t;
117
118 bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm,
119                          alarm_id_t *id, const char *dst_service_name,const char *dst_service_name_mod,
120                          int *error_code);
121 bool _send_alarm_create_appsvc(alarm_context_t context, alarm_info_t *alarm_info,
122                         alarm_id_t *alarm_id, bundle *b,int *error_code);
123 bool _send_alarm_update(alarm_context_t context, int pid, alarm_id_t alarm_id,
124                          alarm_info_t *alarm_info, int *error_code);
125 bool _send_alarm_delete(alarm_context_t context, alarm_id_t alarm_id,
126                          int *error_code);
127 bool _send_alarm_get_list_of_ids(alarm_context_t context, int maxnum_of_ids,
128                                   alarm_id_t *alarm_id, int *num_of_ids,
129                                   int *error_code);
130 bool _send_alarm_get_number_of_ids(alarm_context_t context, int *num_of_ids,
131                                     int *error_code);
132 bool _send_alarm_get_info(alarm_context_t context, alarm_id_t alarm_id,
133                            alarm_info_t *alarm_info, int *error_code);
134 bool _send_alarm_reset(alarm_context_t context, int *error_code);
135
136 bool _send_alarm_power_on(alarm_context_t context, bool on_off,
137                            int *error_code);
138 bool _send_alarm_check_next_duetime(alarm_context_t context, int *error_code);
139 bool _send_alarm_power_off(alarm_context_t context, int *error_code);
140 bool _remove_from_scheduled_alarm_list(int pid, alarm_id_t alarm_id);
141 bool _load_alarms_from_registry();
142 bool _alarm_find_mintime_power_on(time_t *min_time);
143
144 /*  alarm manager*/
145 typedef struct {
146         time_t start;
147         time_t end;
148
149         int alarm_id;
150         int pid;
151         GQuark quark_app_unique_name;   /*the fullpath of application's pid is
152                 converted to quark value.*/
153         GQuark quark_app_service_name;  /*dbus_service_name is converted  to
154                 quark value.app_service_name is a service name  of application
155                 that creates alarm_info.*/
156         GQuark quark_app_service_name_mod;
157         GQuark quark_dst_service_name;  /*dbus_service_name is converted to 
158                 quark value.app_service_name is a service name  for 
159                 dst_service_name of alarm_create_extend().*/
160         GQuark quark_dst_service_name_mod;
161         time_t due_time;
162
163         GQuark quark_bundle;    /*Bundle Content containing app-svc info*/
164
165         alarm_info_t alarm_info;
166
167 } __alarm_info_t;
168
169 typedef struct {
170         bool used;
171         __alarm_info_t *__alarm_info;
172 } __alarm_entry_t;
173
174 typedef struct {
175         timer_t timer;
176         time_t c_due_time;
177         GSList *alarms;
178         int gmt_idx;
179         int dst;
180         DBusGConnection *bus;
181 } __alarm_server_context_t;
182
183 typedef struct {
184         bool used;
185         alarm_id_t alarm_id;
186         int pid;
187         __alarm_info_t *__alarm_info;
188 } __scheduled_alarm_t;
189
190 typedef struct {
191         char service_name[MAX_SERVICE_NAME_LEN];
192         alarm_id_t alarm_id;
193 } __expired_alarm_t;
194
195 time_t _alarm_next_duetime(__alarm_info_t *alarm_info);
196 bool _alarm_schedule();
197 bool _clear_scheduled_alarm_list();
198 bool _add_to_scheduled_alarm_list(__alarm_info_t *__alarm_info);
199
200 bool _save_alarms(__alarm_info_t *__alarm_info);
201 bool _delete_alarms(alarm_id_t alarm_id);
202 bool _update_alarms(__alarm_info_t *__alarm_info);
203
204 timer_t _alarm_create_timer();
205 bool _alarm_destory_timer(timer_t timer);
206 bool _alarm_set_timer(__alarm_server_context_t *alarm_context, timer_t timer,
207                        time_t due_time, alarm_id_t id);
208 bool _alarm_disable_timer(__alarm_server_context_t alarm_context);
209 bool _init_scheduled_alarm_list();
210
211 int _set_rtc_time(time_t _time);
212 int _set_sys_time(time_t _time);
213 int _set_time(time_t _time);
214
215
216 #ifdef _DEBUG_MODE_
217 #define ALARM_MGR_LOG_PRINT(FMT, ARG...)  do { printf("%5d", getpid()); printf
218         ("%s() : "FMT"\n", __FUNCTION__, ##ARG); } while (false)
219 #define ALARM_MGR_EXCEPTION_PRINT(FMT, ARG...)  do { printf("%5d", getpid()); 
220         printf("%s() : "FMT"\n", __FUNCTION__, ##ARG); } while (false)
221 #define ALARM_MGR_ASSERT_PRINT(FMT, ARG...) do { printf("%5d", getpid()); printf
222         ("%s() : "FMT"\n", __FUNCTION__, ##ARG); } while (false)
223 #else
224 #define ALARM_MGR_LOG_PRINT(FMT, ARG...) SLOGD(FMT, ##ARG);
225 #define ALARM_MGR_EXCEPTION_PRINT(FMT, ARG...) SLOGW(FMT, ##ARG);
226 #define ALARM_MGR_ASSERT_PRINT(FMT, ARG...) SLOGE(FMT, ##ARG);
227 #endif
228
229 /* int alarmmgr_check_next_duetime();*/
230
231
232 #endif /*_ALARM_INTERNAL_H*/