4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
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>
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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.
36 #if !GLIB_CHECK_VERSION (2, 31, 0)
37 #include <glib/gmacros.h>
42 #include"alarm-internal.h"
44 #define SIG_TIMER 0x32
46 #define MAX_GCONF_PATH_LEN 256
47 #define MAX_QUERY_LEN 4096
49 extern __alarm_server_context_t alarm_context;
50 extern sqlite3 *alarmmgr_db;
53 extern bool enable_power_on_alarm;
56 bool _save_alarms(__alarm_info_t *__alarm_info);
57 bool _update_alarms(__alarm_info_t *__alarm_info);
58 bool _delete_alarms(alarm_id_t alarm_id);
60 bool _update_power_on(bool on_off);
62 bool _load_alarms_from_registry(void);
64 bool _save_alarms(__alarm_info_t *__alarm_info)
66 char *error_message = NULL;
67 alarm_info_t *alarm_info =
68 (alarm_info_t *) &(__alarm_info->alarm_info);
69 alarm_date_t *start = &alarm_info->start;
70 alarm_mode_t *mode = &alarm_info->mode;
72 char *query = sqlite3_mprintf("insert into alarmmgr( alarm_id, start,\
73 end, pid, app_unique_name, app_service_name, app_service_name_mod, bundle, year,\
74 month, day, hour, min, sec, day_of_week, repeat,\
75 alarm_type, reserved_info, dst_service_name, dst_service_name_mod)\
76 values (%d,%d,%d,%d,%Q,%Q,%Q,%Q,%d,%d,%d,%d,%d,%d,%d,%d,\
78 __alarm_info->alarm_id,
79 (int)__alarm_info->start,
80 (int)__alarm_info->end,
82 (char *)g_quark_to_string(
83 __alarm_info->quark_app_unique_name),
84 (char *)g_quark_to_string(
85 __alarm_info->quark_app_service_name),
86 (char *)g_quark_to_string(
87 __alarm_info->quark_app_service_name_mod),
88 (char *)g_quark_to_string(
89 __alarm_info->quark_bundle),
96 mode->u_interval.day_of_week,
98 alarm_info->alarm_type,
99 alarm_info->reserved_info,
100 (char *)g_quark_to_string(
101 __alarm_info->quark_dst_service_name),
102 (char *)g_quark_to_string(
103 __alarm_info->quark_dst_service_name_mod));
106 sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
108 "Don't execute query = %s, error message = %s\n", query,
118 bool _update_alarms(__alarm_info_t *__alarm_info)
120 char *error_message = NULL;
121 alarm_info_t *alarm_info =
122 (alarm_info_t *) &(__alarm_info->alarm_info);
123 alarm_date_t *start = &alarm_info->start;
124 alarm_mode_t *mode = &alarm_info->mode;
126 char *query = sqlite3_mprintf("update alarmmgr set start=%d, end=%d,\
127 pid=%d, app_unique_name=%Q, app_service_name=%Q, app_service_name_mod=%Q,\
128 bundle=%Q, year=%d, month=%d, day=%d, hour=%d, min=%d, sec=%d,\
129 day_of_week=%d, repeat=%d, alarm_type=%d,\
130 reserved_info=%d, dst_service_name=%Q, dst_service_name_mod=%Q\
132 (int)__alarm_info->start,
133 (int)__alarm_info->end,
135 (char *)g_quark_to_string(
136 __alarm_info->quark_app_unique_name),
137 (char *)g_quark_to_string(
138 __alarm_info->quark_app_service_name),
139 (char *)g_quark_to_string(
140 __alarm_info->quark_app_service_name_mod),
141 (char *)g_quark_to_string(
142 __alarm_info->quark_bundle),
149 mode->u_interval.day_of_week,
151 alarm_info->alarm_type,
152 alarm_info->reserved_info,
153 (char *)g_quark_to_string(
154 __alarm_info->quark_dst_service_name),
155 (char *)g_quark_to_string(
156 __alarm_info->quark_dst_service_name_mod),
157 __alarm_info->alarm_id);
160 sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
162 "Don't execute query = %s, error message = %s\n", query,
172 bool _delete_alarms(alarm_id_t alarm_id)
174 char *error_message = NULL;
175 char *query = sqlite3_mprintf("delete from alarmmgr where alarm_id=%d", alarm_id);
178 sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
180 "Don't execute query = %s, error message = %s\n", query,
191 bool _update_power_on(bool on_off)
193 /* GConfClient* pGCC;
194 char key[MAX_GCONF_PATH_LEN];
195 GError* error = NULL;
198 pGCC = gconf_client_get_default();
202 ALARM_MGR_EXCEPTION_PRINT(" gconf get failed.. \n");
206 sprintf(key,"/Services/AlarmMgr/Auto_poweron");
209 if(!gconf_client_set_bool(pGCC, key, on_off, &error))
211 ALARM_MGR_EXCEPTION_PRINT("set string has failed...\n");
215 gconf_client_suggest_sync(pGCC, NULL);
216 g_object_unref(pGCC);
222 bool _load_alarms_from_registry()
225 char query[MAX_QUERY_LEN] = {0,};
226 sqlite3_stmt *stmt = NULL;
227 const char *tail = NULL;
228 alarm_info_t *alarm_info = NULL;
229 __alarm_info_t *__alarm_info = NULL;
230 alarm_date_t *start = NULL;
231 alarm_mode_t *mode = NULL;
232 char app_unique_name[MAX_SERVICE_NAME_LEN] = {0,};
233 char app_service_name[MAX_SERVICE_NAME_LEN] = {0,};
234 char app_service_name_mod[MAX_SERVICE_NAME_LEN] = {0,};
235 char dst_service_name[MAX_SERVICE_NAME_LEN] = {0,};
236 char dst_service_name_mod[MAX_SERVICE_NAME_LEN] = {0,};
237 char bundle[MAX_BUNDLE_NAME_LEN] = {0,};
240 /*sprintf(path, "/Services/AlarmMgr/Auto_poweron"); */
242 enable_power_on_alarm = 0;
243 /*gconf_client_get_bool(pGCC, path, NULL); */
246 snprintf(query, MAX_QUERY_LEN, "select * from alarmmgr");
249 sqlite3_prepare(alarmmgr_db, query, strlen(query), &stmt, &tail)) {
250 ALARM_MGR_EXCEPTION_PRINT("sqlite3_prepare error\n");
254 for (i = 0; SQLITE_ROW == sqlite3_step(stmt); i++) {
255 __alarm_info = malloc(sizeof(__alarm_info_t));
257 if (G_UNLIKELY(__alarm_info == NULL)){
258 ALARM_MGR_EXCEPTION_PRINT("[alarm-server]:Malloc failed\n");
261 alarm_info = (alarm_info_t *) &(__alarm_info->alarm_info);
262 start = &alarm_info->start;
263 mode = &alarm_info->mode;
265 memset(app_service_name, 0, MAX_SERVICE_NAME_LEN);
266 memset(app_service_name_mod, 0, MAX_SERVICE_NAME_LEN);
267 memset(dst_service_name, 0, MAX_SERVICE_NAME_LEN);
268 memset(dst_service_name_mod, 0, MAX_SERVICE_NAME_LEN);
270 __alarm_info->alarm_id = sqlite3_column_int(stmt, 0);
271 __alarm_info->start = sqlite3_column_int(stmt, 1);
272 __alarm_info->end = sqlite3_column_int(stmt, 2);
273 __alarm_info->pid = sqlite3_column_int(stmt, 3);
274 strncpy(app_unique_name, (const char *)sqlite3_column_text(stmt, 4),
275 MAX_SERVICE_NAME_LEN - 1);
276 strncpy(app_service_name, (const char *)sqlite3_column_text(stmt, 5),
277 MAX_SERVICE_NAME_LEN - 1);
278 strncpy(app_service_name_mod, (const char *)sqlite3_column_text(stmt, 6),
279 MAX_SERVICE_NAME_LEN - 1);
280 strncpy(bundle, (const char *)sqlite3_column_text(stmt, 7),
281 MAX_BUNDLE_NAME_LEN - 1);
282 start->year = sqlite3_column_int(stmt, 8);
283 start->month = sqlite3_column_int(stmt, 9);
284 start->day = sqlite3_column_int(stmt, 10);
285 start->hour = sqlite3_column_int(stmt, 11);
286 start->min = sqlite3_column_int(stmt, 12);
287 start->sec = sqlite3_column_int(stmt, 13);
288 mode->u_interval.day_of_week = sqlite3_column_int(stmt, 14);
289 mode->repeat = sqlite3_column_int(stmt, 15);
290 alarm_info->alarm_type = sqlite3_column_int(stmt, 16);
291 alarm_info->reserved_info = sqlite3_column_int(stmt, 17);
292 strncpy(dst_service_name, (const char *)sqlite3_column_text(stmt, 18),
293 MAX_SERVICE_NAME_LEN - 1);
294 strncpy(dst_service_name_mod, (const char *)sqlite3_column_text(stmt, 19),
295 MAX_SERVICE_NAME_LEN - 1);
297 __alarm_info->quark_app_unique_name =
298 g_quark_from_string(app_unique_name);
299 __alarm_info->quark_app_service_name =
300 g_quark_from_string(app_service_name);
301 __alarm_info->quark_app_service_name_mod=
302 g_quark_from_string(app_service_name_mod);
303 __alarm_info->quark_dst_service_name =
304 g_quark_from_string(dst_service_name);
305 __alarm_info->quark_dst_service_name_mod=
306 g_quark_from_string(dst_service_name_mod);
307 __alarm_info->quark_bundle = g_quark_from_string(bundle);
309 _alarm_next_duetime(__alarm_info);
310 alarm_context.alarms =
311 g_slist_append(alarm_context.alarms, __alarm_info);
314 if (SQLITE_OK != sqlite3_finalize(stmt)) {
315 ALARM_MGR_EXCEPTION_PRINT("error : sqlite3_finalize\n");