2 * Copyright (c) 2011 - 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
29 #include <app_alarm.h>
30 #include <app_control_internal.h>
32 #include <notification.h>
38 #define LOG_TAG "CAPI_APPFW_APPLICATION_ALARM"
41 alarm_registered_alarm_cb cb;
44 } alarm_foreach_item_cb_context;
46 static int alarm_registered_alarm_cb_broker(int alarm_id, void *user_data)
48 alarm_foreach_item_cb_context *foreach_cb_context = NULL;
50 if (user_data == NULL)
53 foreach_cb_context = (alarm_foreach_item_cb_context *)user_data;
55 if (foreach_cb_context != NULL && *(foreach_cb_context->foreach_break) == false) {
56 if (foreach_cb_context->cb(alarm_id, foreach_cb_context->user_data) == false)
57 *(foreach_cb_context->foreach_break) = true;
64 static int convert_error_code_to_alarm(const char *function, alarm_error_t alarm_error)
66 switch (alarm_error) {
67 case ERR_ALARM_INVALID_PARAM:
68 case ERR_ALARM_INVALID_REPEAT:
69 LOGE("[%s] INVALID_PARAMETER(0x%08x)", function, ALARM_ERROR_INVALID_PARAMETER);
70 return ALARM_ERROR_INVALID_PARAMETER;
72 case ERR_ALARM_INVALID_ID:
73 LOGE("[%s] INVALID_PARAMETER(0x%08x)", function, ALARM_ERROR_INVALID_PARAMETER);
74 return ALARM_ERROR_INVALID_PARAMETER;
76 case ERR_ALARM_INVALID_TIME:
77 LOGE("[%s] INVALID_TIME(0x%08x)", function, ALARM_ERROR_INVALID_TIME);
78 return ALARM_ERROR_INVALID_TIME;
80 case ERR_ALARM_INVALID_DATE:
81 LOGE("[%s] INVALID_DATE(0x%08x)", function, ALARM_ERROR_INVALID_DATE);
82 return ALARM_ERROR_INVALID_DATE;
84 case ERR_ALARM_NO_SERVICE_NAME:
85 LOGE("[%s] INVALID_PARAMETER(0x%08x)", function, ALARM_ERROR_INVALID_PARAMETER);
86 return ALARM_ERROR_INVALID_PARAMETER;
88 case ERR_ALARM_SYSTEM_FAIL:
89 LOGE("[%s] CONNECTION_FAIL(0x%08x)", function, ALARM_ERROR_CONNECTION_FAIL);
90 return ALARM_ERROR_CONNECTION_FAIL;
92 case ERR_ALARM_NO_PERMISSION:
93 LOGE("[%s] PERMISSION_DENIED(0x%08x)", function, ALARM_ERROR_PERMISSION_DENIED);
94 return ALARM_ERROR_PERMISSION_DENIED;
96 case ERR_ALARM_NOT_PERMITTED_APP:
97 LOGE("[%s] NOT_PERMITTED_APP(0x%08x)", function, ALARM_ERROR_NOT_PERMITTED_APP);
98 return ALARM_ERROR_NOT_PERMITTED_APP;
100 case ALARMMGR_RESULT_SUCCESS:
101 return ALARM_ERROR_NONE;
104 return ALARM_ERROR_INVALID_PARAMETER;
109 int alarm_get_scheduled_date(int alarm_id, struct tm *date)
111 alarm_error_t result;
115 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
116 return ALARM_ERROR_INVALID_PARAMETER;
119 result = alarmmgr_get_next_duetime(alarm_id, &due_time);
120 if (result != ALARMMGR_RESULT_SUCCESS)
121 return convert_error_code_to_alarm(__FUNCTION__, result);
123 localtime_r(&due_time, date);
125 return ALARM_ERROR_NONE;
128 int alarm_get_scheduled_period(int alarm_id, int *period)
130 alarm_error_t result;
131 alarm_entry_t *entry = NULL;
132 alarm_repeat_mode_t mode;
135 if (period == NULL) {
136 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
137 return ALARM_ERROR_INVALID_PARAMETER;
140 entry = alarmmgr_create_alarm();
142 result = alarmmgr_get_info(alarm_id, entry);
143 if (result != ALARMMGR_RESULT_SUCCESS) {
145 alarmmgr_free_alarm(entry);
147 return convert_error_code_to_alarm(__FUNCTION__, result);
150 result = alarmmgr_get_repeat_mode(entry, &mode, &value);
151 if (result != ALARMMGR_RESULT_SUCCESS) {
153 alarmmgr_free_alarm(entry);
155 return convert_error_code_to_alarm(__FUNCTION__, result);
158 alarmmgr_free_alarm(entry);
162 return ALARM_ERROR_NONE;
165 int alarm_schedule_after_delay(app_control_h app_control, int delay, int period, int *alarm_id)
170 if (app_control == NULL) {
171 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
172 return ALARM_ERROR_INVALID_PARAMETER;
175 if (app_control_to_bundle(app_control, &bundle_data) != APP_CONTROL_ERROR_NONE) {
176 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
177 return ALARM_ERROR_INVALID_PARAMETER;
180 result = alarmmgr_add_alarm_appsvc(ALARM_TYPE_DEFAULT | ALARM_TYPE_INEXACT, delay, period, bundle_data, alarm_id);
182 return convert_error_code_to_alarm(__FUNCTION__, result);
185 int alarm_schedule_noti_after_delay(notification_h noti, int delay, int period, int *alarm_id)
190 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
191 return ALARM_ERROR_INVALID_PARAMETER;
194 result = alarmmgr_add_alarm_noti(ALARM_TYPE_DEFAULT | ALARM_TYPE_INEXACT, delay, period, noti, alarm_id);
196 return convert_error_code_to_alarm(__FUNCTION__, result);
199 int alarm_schedule_at_date(app_control_h app_control, struct tm *date, int period_in_second, int *alarm_id)
201 dlog_print(DLOG_WARN, LOG_TAG, "DEPRECATION WARNING: alarm_schedule_at_date() is deprecated and will be removed from next release. Use alarm_schedule_once_at_date() instead.");
202 alarm_date_t internal_time;
203 alarm_entry_t *alarm_info;
207 if (app_control == NULL || date == NULL) {
208 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
209 return ALARM_ERROR_INVALID_PARAMETER;
212 if (app_control_to_bundle(app_control, &bundle_data) != APP_CONTROL_ERROR_NONE) {
213 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
214 return ALARM_ERROR_INVALID_PARAMETER;
217 alarm_info = alarmmgr_create_alarm();
219 internal_time.year = date->tm_year + 1900;
220 internal_time.month = date->tm_mon + 1;
221 internal_time.day = date->tm_mday;
223 internal_time.hour = date->tm_hour;
224 internal_time.min = date->tm_min;
225 internal_time.sec = date->tm_sec;
227 result = alarmmgr_set_time(alarm_info, internal_time);
230 alarmmgr_free_alarm(alarm_info);
231 return convert_error_code_to_alarm(__FUNCTION__, result);
235 if (period_in_second > 0)
236 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_REPEAT, period_in_second);
238 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, period_in_second);
241 alarmmgr_free_alarm(alarm_info);
242 return convert_error_code_to_alarm(__FUNCTION__, result);
245 result = alarmmgr_set_type(alarm_info, ALARM_TYPE_DEFAULT);
247 alarmmgr_free_alarm(alarm_info);
248 return convert_error_code_to_alarm(__FUNCTION__, result);
251 result = alarmmgr_add_alarm_appsvc_with_localtime(alarm_info, bundle_data, alarm_id);
253 alarmmgr_free_alarm(alarm_info);
254 return convert_error_code_to_alarm(__FUNCTION__, result);
257 alarmmgr_free_alarm(alarm_info);
258 return ALARM_ERROR_NONE;
261 int alarm_schedule_once_after_delay(app_control_h app_control, int delay, int *alarm_id)
266 if (app_control == NULL) {
267 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
268 return ALARM_ERROR_INVALID_PARAMETER;
271 if (app_control_to_bundle(app_control, &bundle_data) != APP_CONTROL_ERROR_NONE) {
272 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
273 return ALARM_ERROR_INVALID_PARAMETER;
276 result = alarmmgr_add_alarm_appsvc(ALARM_TYPE_DEFAULT, delay, 0, bundle_data, alarm_id);
278 return convert_error_code_to_alarm(__FUNCTION__, result);
281 int alarm_schedule_noti_once_after_delay(notification_h noti, int delay, int *alarm_id)
286 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
287 return ALARM_ERROR_INVALID_PARAMETER;
290 result = alarmmgr_add_alarm_noti(ALARM_TYPE_DEFAULT, delay, 0, noti, alarm_id);
292 return convert_error_code_to_alarm(__FUNCTION__, result);
295 int alarm_schedule_once_at_date(app_control_h app_control, struct tm *date, int *alarm_id)
297 alarm_date_t internal_time;
298 alarm_entry_t *alarm_info;
302 if (app_control == NULL || date == NULL) {
303 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
304 return ALARM_ERROR_INVALID_PARAMETER;
307 if (app_control_to_bundle(app_control, &bundle_data) != APP_CONTROL_ERROR_NONE) {
308 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
309 return ALARM_ERROR_INVALID_PARAMETER;
312 alarm_info = alarmmgr_create_alarm();
313 if (alarm_info == NULL) {
314 /* LCOV_EXCL_START */
315 LOGE("OUT_OF_MEMORY(0x%08x)", ALARM_ERROR_OUT_OF_MEMORY);
316 return ALARM_ERROR_OUT_OF_MEMORY;
320 internal_time.year = date->tm_year + 1900;
321 internal_time.month = date->tm_mon + 1;
322 internal_time.day = date->tm_mday;
324 internal_time.hour = date->tm_hour;
325 internal_time.min = date->tm_min;
326 internal_time.sec = date->tm_sec;
328 result = alarmmgr_set_time(alarm_info, internal_time);
331 alarmmgr_free_alarm(alarm_info);
332 return convert_error_code_to_alarm(__FUNCTION__, result);
335 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0);
337 alarmmgr_free_alarm(alarm_info);
338 return convert_error_code_to_alarm(__FUNCTION__, result);
341 result = alarmmgr_set_type(alarm_info, ALARM_TYPE_DEFAULT);
343 alarmmgr_free_alarm(alarm_info);
344 return convert_error_code_to_alarm(__FUNCTION__, result);
347 result = alarmmgr_add_alarm_appsvc_with_localtime(alarm_info, bundle_data, alarm_id);
349 alarmmgr_free_alarm(alarm_info);
350 return convert_error_code_to_alarm(__FUNCTION__, result);
353 alarmmgr_free_alarm(alarm_info);
354 return ALARM_ERROR_NONE;
357 int alarm_schedule_noti_once_at_date(notification_h noti, struct tm *date, int *alarm_id)
359 alarm_date_t internal_time;
360 alarm_entry_t *alarm_info;
363 if (noti == NULL || date == NULL) {
364 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
365 return ALARM_ERROR_INVALID_PARAMETER;
368 alarm_info = alarmmgr_create_alarm();
369 if (alarm_info == NULL) {
370 /* LCOV_EXCL_START */
371 LOGE("OUT_OF_MEMORY(0x%08x)", ALARM_ERROR_OUT_OF_MEMORY);
372 return ALARM_ERROR_OUT_OF_MEMORY;
376 internal_time.year = date->tm_year + 1900;
377 internal_time.month = date->tm_mon + 1;
378 internal_time.day = date->tm_mday;
380 internal_time.hour = date->tm_hour;
381 internal_time.min = date->tm_min;
382 internal_time.sec = date->tm_sec;
384 result = alarmmgr_set_time(alarm_info, internal_time);
386 alarmmgr_free_alarm(alarm_info);
387 return convert_error_code_to_alarm(__FUNCTION__, result);
390 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0);
392 alarmmgr_free_alarm(alarm_info);
393 return convert_error_code_to_alarm(__FUNCTION__, result);
396 result = alarmmgr_set_type(alarm_info, ALARM_TYPE_DEFAULT);
398 alarmmgr_free_alarm(alarm_info);
399 return convert_error_code_to_alarm(__FUNCTION__, result);
402 result = alarmmgr_add_alarm_noti_with_localtime(alarm_info, noti, alarm_id);
404 alarmmgr_free_alarm(alarm_info);
405 return convert_error_code_to_alarm(__FUNCTION__, result);
408 alarmmgr_free_alarm(alarm_info);
409 return ALARM_ERROR_NONE;
412 int alarm_cancel(int alarm_id)
416 result = alarmmgr_remove_alarm(alarm_id);
418 return convert_error_code_to_alarm(__FUNCTION__, result);
421 int alarm_cancel_all()
425 result = alarmmgr_remove_all();
427 return convert_error_code_to_alarm(__FUNCTION__, result);
430 int alarm_foreach_registered_alarm(alarm_registered_alarm_cb callback, void *user_data)
433 bool foreach_break = false;
435 if (callback == NULL) {
436 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
437 return ALARM_ERROR_INVALID_PARAMETER;
440 /* alarm_registered_alarm_cb_broker */
441 alarm_foreach_item_cb_context foreach_cb_context = {
443 .user_data = user_data,
444 .foreach_break = &foreach_break
447 result = alarmmgr_enum_alarm_ids(alarm_registered_alarm_cb_broker, &foreach_cb_context);
449 return convert_error_code_to_alarm(__FUNCTION__, result);
452 int alarm_get_current_time(struct tm *date)
457 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
458 return ALARM_ERROR_INVALID_PARAMETER;
462 localtime_r(&now, date);
463 return ALARM_ERROR_NONE;
466 int alarm_schedule_with_recurrence_week_flag(app_control_h app_control, struct tm *date, int week_flag, int *alarm_id)
468 alarm_date_t internal_time;
469 alarm_entry_t *alarm_info;
473 if (app_control == NULL || date == NULL) {
474 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
475 return ALARM_ERROR_INVALID_PARAMETER;
478 if (app_control_to_bundle(app_control, &bundle_data) != APP_CONTROL_ERROR_NONE) {
479 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
480 return ALARM_ERROR_INVALID_PARAMETER;
483 alarm_info = alarmmgr_create_alarm();
485 internal_time.year = date->tm_year + 1900;
486 internal_time.month = date->tm_mon + 1;
487 internal_time.day = date->tm_mday;
489 internal_time.hour = date->tm_hour;
490 internal_time.min = date->tm_min;
491 internal_time.sec = date->tm_sec;
493 result = alarmmgr_set_time(alarm_info, internal_time);
495 alarmmgr_free_alarm(alarm_info);
496 return convert_error_code_to_alarm(__FUNCTION__, result);
500 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_WEEKLY, week_flag);
502 alarmmgr_free_alarm(alarm_info);
503 return convert_error_code_to_alarm(__FUNCTION__, result);
507 result = alarmmgr_set_type(alarm_info, ALARM_TYPE_DEFAULT);
509 alarmmgr_free_alarm(alarm_info);
510 return convert_error_code_to_alarm(__FUNCTION__, result);
513 result = alarmmgr_add_alarm_appsvc_with_localtime(alarm_info, bundle_data, alarm_id);
514 alarmmgr_free_alarm(alarm_info);
516 return convert_error_code_to_alarm(__FUNCTION__, result);
519 int alarm_schedule_noti_with_recurrence_week_flag(notification_h noti, struct tm *date, int week_flag, int *alarm_id)
521 alarm_date_t internal_time;
522 alarm_entry_t *alarm_info;
525 if (noti == NULL || date == NULL) {
526 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
527 return ALARM_ERROR_INVALID_PARAMETER;
530 alarm_info = alarmmgr_create_alarm();
532 internal_time.year = date->tm_year + 1900;
533 internal_time.month = date->tm_mon + 1;
534 internal_time.day = date->tm_mday;
536 internal_time.hour = date->tm_hour;
537 internal_time.min = date->tm_min;
538 internal_time.sec = date->tm_sec;
540 result = alarmmgr_set_time(alarm_info, internal_time);
542 alarmmgr_free_alarm(alarm_info);
543 return convert_error_code_to_alarm(__FUNCTION__, result);
547 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_WEEKLY, week_flag);
550 alarmmgr_free_alarm(alarm_info);
551 return convert_error_code_to_alarm(__FUNCTION__, result);
554 result = alarmmgr_set_type(alarm_info, ALARM_TYPE_DEFAULT);
556 alarmmgr_free_alarm(alarm_info);
557 return convert_error_code_to_alarm(__FUNCTION__, result);
560 result = alarmmgr_add_alarm_noti_with_localtime(alarm_info, noti, alarm_id);
561 alarmmgr_free_alarm(alarm_info);
563 return convert_error_code_to_alarm(__FUNCTION__, result);
566 int alarm_get_scheduled_recurrence_week_flag(int alarm_id, int *week_flag)
568 alarm_error_t result;
569 alarm_entry_t *entry = NULL;
570 alarm_repeat_mode_t mode;
573 if (week_flag == NULL) {
574 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
575 return ALARM_ERROR_INVALID_PARAMETER;
578 entry = alarmmgr_create_alarm();
580 result = alarmmgr_get_info(alarm_id, entry);
581 if (result != ALARMMGR_RESULT_SUCCESS) {
583 alarmmgr_free_alarm(entry);
585 return convert_error_code_to_alarm(__FUNCTION__, result);
588 result = alarmmgr_get_repeat_mode(entry, &mode, &value);
590 if (mode != ALARM_REPEAT_MODE_WEEKLY) {
592 alarmmgr_free_alarm(entry);
594 return ALARM_ERROR_INVALID_PARAMETER;
597 if (result != ALARMMGR_RESULT_SUCCESS) {
599 alarmmgr_free_alarm(entry);
601 return convert_error_code_to_alarm(__FUNCTION__, result);
604 alarmmgr_free_alarm(entry);
606 (*week_flag) = value;
608 return ALARM_ERROR_NONE;
611 int alarm_get_app_control(int alarm_id, app_control_h *app_control)
616 if (app_control == NULL)
617 return ALARM_ERROR_INVALID_PARAMETER;
619 b = alarmmgr_get_alarm_appsvc_info(alarm_id, &error_code);
620 if (error_code != ALARMMGR_RESULT_SUCCESS)
621 return convert_error_code_to_alarm(__FUNCTION__, error_code);
624 return ALARM_ERROR_INVALID_PARAMETER;
626 error_code = app_control_create_request(b, app_control);
627 if (error_code != APP_CONTROL_ERROR_NONE) {
628 /* LCOV_EXCL_START */
630 return ALARM_ERROR_OUT_OF_MEMORY;
636 return ALARM_ERROR_NONE;
639 int alarm_get_notification(int alarm_id, notification_h *noti)
643 error_code = alarmmgr_get_alarm_noti_info(alarm_id, noti);
644 if (error_code != ALARMMGR_RESULT_SUCCESS)
645 return convert_error_code_to_alarm(__FUNCTION__, error_code);
647 return ALARM_ERROR_NONE;
650 int alarm_set_global(int alarm_id, bool global)
654 ret = alarmmgr_set_global(alarm_id, global);
656 return convert_error_code_to_alarm(__FUNCTION__, ret);
659 int alarm_get_global(int alarm_id, bool *global)
663 ret = alarmmgr_get_global(alarm_id, global);
665 return convert_error_code_to_alarm(__FUNCTION__, ret);
669 int alarm_schedule_service_once_after_delay(app_control_h app_control, int delay, int *alarm_id)
674 if (app_control == NULL) {
675 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
676 return ALARM_ERROR_INVALID_PARAMETER;
679 if (app_control_to_bundle(app_control, &bundle_data) != APP_CONTROL_ERROR_NONE) {
680 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
681 return ALARM_ERROR_INVALID_PARAMETER;
684 result = alarmmgr_add_alarm_appsvc(ALARM_TYPE_DEFAULT | ALARM_TYPE_EXACT_SERVICE_APP, delay, 0, bundle_data, alarm_id);
686 return convert_error_code_to_alarm(__FUNCTION__, result);
689 int alarm_schedule_service_once_at_date(app_control_h app_control, struct tm *date, int *alarm_id)
691 alarm_date_t internal_time;
692 alarm_entry_t* alarm_info;
696 if (app_control == NULL || date == NULL) {
697 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
698 return ALARM_ERROR_INVALID_PARAMETER;
701 if (app_control_to_bundle(app_control, &bundle_data) != APP_CONTROL_ERROR_NONE) {
702 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
703 return ALARM_ERROR_INVALID_PARAMETER;
706 alarm_info = alarmmgr_create_alarm();
708 internal_time.year = date->tm_year + 1900;
709 internal_time.month = date->tm_mon + 1;
710 internal_time.day = date->tm_mday;
712 internal_time.hour = date->tm_hour;
713 internal_time.min = date->tm_min;
714 internal_time.sec = date->tm_sec;
716 result = alarmmgr_set_time(alarm_info, internal_time);
719 alarmmgr_free_alarm(alarm_info);
720 return convert_error_code_to_alarm(__FUNCTION__, result);
723 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0);
726 alarmmgr_free_alarm(alarm_info);
727 return convert_error_code_to_alarm(__FUNCTION__, result);
730 result = alarmmgr_set_type(alarm_info, ALARM_TYPE_DEFAULT | ALARM_TYPE_EXACT_SERVICE_APP);
733 alarmmgr_free_alarm(alarm_info);
734 return convert_error_code_to_alarm(__FUNCTION__, result);
737 result = alarmmgr_add_alarm_appsvc_with_localtime(alarm_info, bundle_data, alarm_id);
740 alarmmgr_free_alarm(alarm_info);
741 return convert_error_code_to_alarm(__FUNCTION__, result);
744 alarmmgr_free_alarm(alarm_info);
745 return ALARM_ERROR_NONE;
748 int alarm_update_delay(int alarm_id, int delay)
750 alarm_date_t internal_time;
751 alarm_entry_t *alarm_info;
753 struct timeval current_time;
756 if (delay < 0 || alarm_id < 0) {
757 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
758 return ALARM_ERROR_INVALID_PARAMETER;
761 gettimeofday(¤t_time, NULL);
762 if (current_time.tv_usec > 500 * 1000)
763 current_time.tv_sec += (delay + 1);
765 current_time.tv_sec += delay;
767 localtime_r(¤t_time.tv_sec, &date);
769 internal_time.year = date.tm_year + 1900;
770 internal_time.month = date.tm_mon + 1;
771 internal_time.day = date.tm_mday;
773 internal_time.hour = date.tm_hour;
774 internal_time.min = date.tm_min;
775 internal_time.sec = date.tm_sec;
777 alarm_info = alarmmgr_create_alarm();
778 if (alarm_info == NULL) {
779 /* LCOV_EXCL_START */
780 LOGE("OUT_OF_MEMORY(0x%08x)", ALARM_ERROR_OUT_OF_MEMORY);
781 return ALARM_ERROR_OUT_OF_MEMORY;
785 result = alarmmgr_set_time(alarm_info, internal_time);
787 alarmmgr_free_alarm(alarm_info);
788 return convert_error_code_to_alarm(__FUNCTION__, result);
791 result = alarmmgr_update_alarm(alarm_id, alarm_info,
792 ALARM_UPDATE_FLAG_TIME);
793 alarmmgr_free_alarm(alarm_info);
795 return convert_error_code_to_alarm(__FUNCTION__, result);
798 int alarm_update_date(int alarm_id, struct tm *date)
800 alarm_date_t internal_time;
801 alarm_entry_t *alarm_info;
804 if (date == NULL || alarm_id < 0) {
805 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
806 return ALARM_ERROR_INVALID_PARAMETER;
809 alarm_info = alarmmgr_create_alarm();
810 if (alarm_info == NULL) {
811 /* LCOV_EXCL_START */
812 LOGE("OUT_OF_MEMORY(0x%08x)", ALARM_ERROR_OUT_OF_MEMORY);
813 return ALARM_ERROR_OUT_OF_MEMORY;
817 internal_time.year = date->tm_year + 1900;
818 internal_time.month = date->tm_mon + 1;
819 internal_time.day = date->tm_mday;
821 internal_time.hour = date->tm_hour;
822 internal_time.min = date->tm_min;
823 internal_time.sec = date->tm_sec;
825 result = alarmmgr_set_time(alarm_info, internal_time);
827 alarmmgr_free_alarm(alarm_info);
828 return convert_error_code_to_alarm(__FUNCTION__, result);
831 result = alarmmgr_update_alarm(alarm_id, alarm_info,
832 ALARM_UPDATE_FLAG_TIME);
833 alarmmgr_free_alarm(alarm_info);
835 return convert_error_code_to_alarm(__FUNCTION__, result);
838 int alarm_update_period(int alarm_id, int period)
840 alarm_entry_t *alarm_info;
843 if (period < 0 || alarm_id < 0) {
844 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
845 return ALARM_ERROR_INVALID_PARAMETER;
848 alarm_info = alarmmgr_create_alarm();
849 if (alarm_info == NULL) {
850 /* LCOV_EXCL_START */
851 LOGE("OUT_OF_MEMORY(0x%08x)", ALARM_ERROR_OUT_OF_MEMORY);
852 return ALARM_ERROR_OUT_OF_MEMORY;
857 result = alarmmgr_update_alarm(alarm_id, alarm_info,
858 ALARM_UPDATE_FLAG_CLEAR_PERIOD);
859 alarmmgr_free_alarm(alarm_info);
860 return convert_error_code_to_alarm(__FUNCTION__, result);
863 result = alarmmgr_set_repeat_mode(alarm_info,
864 ALARM_REPEAT_MODE_REPEAT, period);
866 alarmmgr_free_alarm(alarm_info);
867 return convert_error_code_to_alarm(__FUNCTION__, result);
870 result = alarmmgr_update_alarm(alarm_id, alarm_info,
871 ALARM_UPDATE_FLAG_PERIOD);
872 alarmmgr_free_alarm(alarm_info);
874 return convert_error_code_to_alarm(__FUNCTION__, result);
877 int alarm_update_week_flag(int alarm_id, int week_flag)
879 alarm_entry_t *alarm_info;
882 if (week_flag < 0 || alarm_id < 0) {
883 LOGE("INVALID_PARAMETER(0x%08x)", ALARM_ERROR_INVALID_PARAMETER);
884 return ALARM_ERROR_INVALID_PARAMETER;
887 alarm_info = alarmmgr_create_alarm();
888 if (alarm_info == NULL) {
889 /* LCOV_EXCL_START */
890 LOGE("OUT_OF_MEMORY(0x%08x)", ALARM_ERROR_OUT_OF_MEMORY);
891 return ALARM_ERROR_OUT_OF_MEMORY;
895 if (week_flag == 0) {
896 result = alarmmgr_update_alarm(alarm_id, alarm_info,
897 ALARM_UPDATE_FLAG_CLEAR_WEEK_FLAG);
898 alarmmgr_free_alarm(alarm_info);
899 return convert_error_code_to_alarm(__FUNCTION__, result);
902 result = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_WEEKLY, week_flag);
904 alarmmgr_free_alarm(alarm_info);
905 return convert_error_code_to_alarm(__FUNCTION__, result);
908 result = alarmmgr_update_alarm(alarm_id, alarm_info,
909 ALARM_UPDATE_FLAG_WEEK);
910 alarmmgr_free_alarm(alarm_info);
912 return convert_error_code_to_alarm(__FUNCTION__, result);
915 int alarm_set_systime(int new_time)
919 result = alarmmgr_set_systime(new_time);
921 return convert_error_code_to_alarm(__FUNCTION__, result);
923 return ALARM_ERROR_NONE;
926 int alarm_set_systime_with_propagation_delay(struct timespec new_time, struct timespec req_time)
930 result = alarmmgr_set_systime_with_propagation_delay(new_time, req_time);
932 return convert_error_code_to_alarm(__FUNCTION__, result);
934 return ALARM_ERROR_NONE;
937 int alarm_set_timezone(char *tzpath_str)
941 result = alarmmgr_set_timezone(tzpath_str);
943 return convert_error_code_to_alarm(__FUNCTION__, result);
945 return ALARM_ERROR_NONE;