Adjusting millisecond 30/214130/3
authorInkyun Kil <inkyun.kil@samsung.com>
Mon, 9 Sep 2019 07:38:56 +0000 (16:38 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Wed, 18 Sep 2019 09:35:03 +0000 (18:35 +0900)
- When the millisecond part of the current_time is bigger than 500ms,
  adds extra 1sec

Change-Id: Ibf30d91c5361db0a2a732d05b014628d59d27ada
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
lib/alarm-lib.c

index 068a204..2d59ea4 100644 (file)
@@ -462,6 +462,44 @@ static int __compare_api_version(int *result, uid_t uid)
        return ret;
 }
 
+static void __adjust_current_milliseconds(alarm_info_t *alarm_info)
+{
+       struct timeval current_time;
+       struct tm start_tm;
+       time_t start;
+
+       gettimeofday(&current_time, NULL);
+       if (current_time.tv_usec > 500 * 1000) {
+               /* When the millisecond part of the current_time is bigger than 500ms,
+                * the duetime increases by extra 1sec. */
+
+               start_tm.tm_year = alarm_info->start.year - 1900;
+               start_tm.tm_mon = alarm_info->start.month - 1;
+               start_tm.tm_mday = alarm_info->start.day;
+               start_tm.tm_hour = alarm_info->start.hour;
+               start_tm.tm_min = alarm_info->start.min;
+               start_tm.tm_sec = alarm_info->start.sec;
+
+               start = mktime(&start_tm);
+
+               if (current_time.tv_sec == start) {
+                       start += 1;
+
+                       localtime_r(&start, &start_tm);
+                       alarm_info->start.year = start_tm.tm_year + 1900;
+                       alarm_info->start.month = start_tm.tm_mon + 1;
+                       alarm_info->start.day = start_tm.tm_mday;
+                       alarm_info->start.hour = start_tm.tm_hour;
+                       alarm_info->start.min = start_tm.tm_min;
+                       alarm_info->start.sec = start_tm.tm_sec;
+
+                       LOGW("adjusted start(%d-%d-%d, %02d:%02d:%02d),",
+                                       alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,
+                                       alarm_info->start.hour, alarm_info->start.min, alarm_info->start.sec);
+               }
+       }
+}
+
 EXPORT_API int alarmmgr_init(const char *appid)
 {
        SECURE_LOGD("Enter");
@@ -867,6 +905,7 @@ EXPORT_API int alarmmgr_set_rtc_time(alarm_date_t *time)
 EXPORT_API int alarmmgr_add_alarm_appsvc_with_localtime(alarm_entry_t *alarm, void *bundle_data, alarm_id_t *alarm_id)
 {
        alarm_info_t *alarm_info = NULL;
+       alarm_mode_t *mode;
        const char *operation = NULL;
        int error_code = 0;
        const char *appid = NULL;
@@ -874,8 +913,13 @@ EXPORT_API int alarmmgr_add_alarm_appsvc_with_localtime(alarm_entry_t *alarm, vo
 
        LOGD("[alarm-lib]:alarm_create() is called\n");
 
-       if (alarm == NULL)
+       alarm_info = (alarm_info_t *)alarm;
+       if (alarm_info == NULL || alarm_id == NULL) {
+               LOGE("Invalid parameter\n");
                return ERR_ALARM_INVALID_PARAM;
+       }
+
+       __adjust_current_milliseconds(alarm_info);
 
        b = (bundle *)bundle_data;
        if (b == NULL) {
@@ -892,7 +936,6 @@ EXPORT_API int alarmmgr_add_alarm_appsvc_with_localtime(alarm_entry_t *alarm, vo
                return ERR_ALARM_SYSTEM_FAIL;
        }
 
-       alarm_info = (alarm_info_t *)alarm;
        appid = appsvc_get_appid(b);
        if ((appid == NULL && (alarm_info->alarm_type & ALARM_TYPE_NOLAUNCH)) ||
                        (appid == NULL && operation && !strcmp(operation, APPSVC_OPERATION_DEFAULT))) {
@@ -904,7 +947,8 @@ EXPORT_API int alarmmgr_add_alarm_appsvc_with_localtime(alarm_entry_t *alarm, vo
                LOGE("Invalid parameter\n");
                return ERR_ALARM_INVALID_PARAM;
        }
-       alarm_mode_t *mode = &alarm_info->mode;
+
+       mode = &alarm_info->mode;
 
        LOGW("start(%d-%d-%d, %02d:%02d:%02d), end(%d-%d-%d), repeat(%d), interval(%ld), type(%d)",
                        alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,
@@ -944,7 +988,9 @@ EXPORT_API int alarmmgr_add_alarm_with_localtime(alarm_entry_t *alarm,
        char dst_service_name[MAX_SERVICE_NAME_LEN] = { 0 };
        char dst_service_name_mod[MAX_SERVICE_NAME_LEN] = { 0 };
        alarm_info_t *alarm_info = NULL;
+       alarm_mode_t *mode;
        int ret;
+       int error_code;
        int i = 0;
        int j = 0;
 
@@ -954,11 +1000,14 @@ EXPORT_API int alarmmgr_add_alarm_with_localtime(alarm_entry_t *alarm,
                return ERR_ALARM_INVALID_PARAM;
 
        alarm_info = (alarm_info_t *) alarm;
-       if (alarm_info == NULL || alarm_id == NULL)
+       if (alarm_info == NULL || alarm_id == NULL) {
+               LOGE("Invalid parameter bundle\n");
                return ERR_ALARM_INVALID_PARAM;
+       }
 
-       int error_code;
-       alarm_mode_t *mode = &alarm_info->mode;
+       __adjust_current_milliseconds(alarm_info);
+
+       mode = &alarm_info->mode;
 
        ret = __sub_init();
        if (ret < 0)
@@ -1024,9 +1073,15 @@ EXPORT_API int alarmmgr_add_alarm_noti_with_localtime(alarm_entry_t *alarm, noti
 {
        alarm_info_t *alarm_info = NULL;
        int error_code = 0;
+       alarm_info = (alarm_info_t *)alarm;
+       alarm_mode_t *mode;
 
-       if (alarm == NULL)
+       if (alarm_info == NULL || alarm_id == NULL) {
+               LOGE("Invalid parameter\n");
                return ERR_ALARM_INVALID_PARAM;
+       }
+
+       __adjust_current_milliseconds(alarm_info);
 
        if (__alarmmgr_init_appsvc() < 0) {
                LOGE("Unable to initialize dbus!!!\n");
@@ -1039,7 +1094,7 @@ EXPORT_API int alarmmgr_add_alarm_noti_with_localtime(alarm_entry_t *alarm, noti
                return ERR_ALARM_INVALID_PARAM;
        }
 
-       alarm_mode_t *mode = &alarm_info->mode;
+       mode = &alarm_info->mode;
 
        LOGW("start(%d-%d-%d, %02d:%02d:%02d), end(%d-%d-%d), repeat(%d), interval(%ld), type(%d)",
                        alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,