From f9cf24f12404a2ea38d7e591e1cc50eb202337b0 Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Fri, 22 Sep 2017 20:42:54 +0900 Subject: [PATCH] Modified NTP to work with NITZ Change-Id: Ibebfe509646fa0c90ae38b39c2aa25aa0273ade8 Signed-off-by: Jaehyun Kim --- include/util.h | 2 +- src/network-clock.c | 86 +++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 72 insertions(+), 16 deletions(-) diff --git a/include/util.h b/include/util.h index b1dc6f5..4115fc4 100755 --- a/include/util.h +++ b/include/util.h @@ -112,6 +112,6 @@ extern tizen_profile_t _get_tizen_profile(); #define TIZEN_TELEPHONY_ENABLE (_get_tizen_profile() == TIZEN_PROFILE_MOBILE) #define TIZEN_WLAN_BOARD_SPRD (_get_tizen_profile() == TIZEN_PROFILE_MOBILE) #define TIZEN_TV (_get_tizen_profile() == TIZEN_PROFILE_TV) -#define TIZEN_NTP_ENABLE (_get_tizen_profile() == TIZEN_PROFILE_IVI) +#define TIZEN_NTP_ENABLE 1 /* 1: enable, 0: disable */ #endif /* __NETCONFIG_UTIL_H__ */ diff --git a/src/network-clock.c b/src/network-clock.c index 0ac5d25..98bf2e8 100755 --- a/src/network-clock.c +++ b/src/network-clock.c @@ -77,9 +77,41 @@ static void __netconfig_clock_set_timeserver(const char *server) return; } +static void __netconfig_clock_unset_timeserver(void) +{ + GVariant* reply = NULL; + const char param0[] = "Timeservers"; + const char server[] = ""; + GVariant *params = NULL; + GVariantBuilder *builder; + + builder = g_variant_builder_new(G_VARIANT_TYPE("as")); + g_variant_builder_add(builder, "s", server); + + params = g_variant_new("(sv)", param0, g_variant_builder_end(builder)); + g_variant_builder_unref(builder); + + reply = netconfig_invoke_dbus_method(CONNMAN_SERVICE, + CONNMAN_MANAGER_PATH, CONNMAN_CLOCK_INTERFACE, + "SetProperty", params); + + if (reply == NULL) + ERR("Failed to clear NTP server"); + else + g_variant_unref(reply); + + return; +} + static void __netconfig_set_timeserver(void) { guint timeserver_clear_timer = 0; + int nitz_updated = 0; + + netconfig_vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &nitz_updated); + + if (nitz_updated != 0) + return; __netconfig_clock_set_timeserver((const char *)NTP_SERVER); @@ -87,12 +119,17 @@ static void __netconfig_set_timeserver(void) NULL, ×erver_clear_timer); } -static void __netconfig_clock( - wifi_service_state_e state, void *user_data) +static void __network_changed_cb(keynode_t *node, void *user_data) { + int status = VCONFKEY_NETWORK_OFF; gboolean automatic_time_update = 0; - if (state != NETCONFIG_WIFI_CONNECTED) + if (node != NULL) + status = vconf_keynode_get_int(node); + else + netconfig_vconf_get_int(VCONFKEY_NETWORK_STATUS, &status); + + if (status == VCONFKEY_NETWORK_OFF) return; netconfig_vconf_get_bool( @@ -107,15 +144,10 @@ static void __netconfig_clock( __netconfig_set_timeserver(); } -static wifi_state_notifier netconfig_clock_notifier = { - .wifi_state_changed = __netconfig_clock, - .user_data = NULL, -}; - static void __automatic_time_update_changed_cb(keynode_t *node, void *user_data) { + int status = VCONFKEY_NETWORK_OFF; gboolean automatic_time_update = FALSE; - wifi_service_state_e wifi_state = NETCONFIG_WIFI_UNKNOWN; if (node != NULL) automatic_time_update = vconf_keynode_get_bool(node); @@ -124,29 +156,53 @@ static void __automatic_time_update_changed_cb(keynode_t *node, void *user_data) if (automatic_time_update == FALSE) { INFO("Automatic time update is changed to 'FALSE'"); + __netconfig_clock_unset_timeserver(); return; } - wifi_state = wifi_state_get_service_state(); + netconfig_vconf_get_int(VCONFKEY_NETWORK_STATUS, &status); - if (wifi_state != NETCONFIG_WIFI_CONNECTED) { - INFO("WiFi state is not NETCONFIG_WIFI_CONNECTED"); + if (status == VCONFKEY_NETWORK_OFF) { + INFO("There is no connection"); return; } __netconfig_set_timeserver(); } +static void __nitz_event_cb(keynode_t *node, void *user_data) +{ + int nitz_updated = 0; + + if (node != NULL) + nitz_updated = vconf_keynode_get_int(node); + else + netconfig_vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &nitz_updated); + + if (nitz_updated != 0) { + INFO("Time is updated by NITZ"); + __netconfig_clock_unset_timeserver(); + return; + } +} + void netconfig_clock_init(void) { INFO("netconfig_clock_init is called"); vconf_notify_key_changed(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, __automatic_time_update_changed_cb, NULL); - - wifi_state_notifier_register(&netconfig_clock_notifier); + vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, + __nitz_event_cb, NULL); + vconf_notify_key_changed(VCONFKEY_NETWORK_STATUS, + __network_changed_cb, NULL); } void netconfig_clock_deinit(void) { - wifi_state_notifier_unregister(&netconfig_clock_notifier); + vconf_ignore_key_changed(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, + __automatic_time_update_changed_cb); + vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, + __nitz_event_cb); + vconf_ignore_key_changed(VCONFKEY_NETWORK_STATUS, + __network_changed_cb); } -- 2.7.4