X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fntp.c;fp=src%2Fntp.c;h=11512a02fb8d80a4587d0a3ff3b33ec8a6a14baa;hb=30602f521a85820a9f6b7ac04876400e00c68b15;hp=0e80c3e565187ac859a866bd6b05739d5e24781f;hpb=9362752a471a5c892d679548fbf2828d5fc5684b;p=platform%2Fupstream%2Fconnman.git diff --git a/src/ntp.c b/src/ntp.c old mode 100644 new mode 100755 index 0e80c3e..11512a0 --- a/src/ntp.c +++ b/src/ntp.c @@ -251,8 +251,9 @@ static void decode_msg(void *base, size_t len, struct timeval *tv, double m_delta, org, rec, xmt, dst; double delay, offset; static guint transmit_delay; +#if !defined TIZEN_EXT struct timex tmx = {}; - +#endif if (len < sizeof(*msg)) { connman_error("Invalid response from time server"); return; @@ -341,6 +342,66 @@ static void decode_msg(void *base, size_t len, struct timeval *tv, poll_id = g_timeout_add_seconds(transmit_delay, next_poll, NULL); +#if defined TIZEN_EXT + //send the dbus message to alram-manager + { +#define TIME_BUS_NAME "org.tizen.alarm.manager" +#define TIME_INTERFACE "org.tizen.alarm.manager" +#define TIME_PATH "/org/tizen/alarm/manager" +#define TIME_METHOD "alarm_set_time_with_propagation_delay" + + struct timespec cur = {0}; + struct timespec req = {0}; + double dtime; + + DBusConnection *connection = NULL; + DBusMessage *msg = NULL, *reply = NULL; + DBusError error; + + dbus_error_init(&error); + + connection = connman_dbus_get_connection(); + if(!connection){ + DBG("dbus connection does not exist"); + return; + } + + clock_gettime(CLOCK_REALTIME, &cur); + dtime = offset + cur.tv_sec + 1.0e-9 * cur.tv_nsec; + cur.tv_sec = (long) dtime; + cur.tv_nsec = (dtime - cur.tv_sec) * 1000000000; + + clock_gettime(CLOCK_REALTIME, &req); + msg = dbus_message_new_method_call(TIME_BUS_NAME, TIME_PATH, + TIME_INTERFACE, TIME_METHOD); + dbus_message_append_args(msg, DBUS_TYPE_UINT32, &(cur.tv_sec), + DBUS_TYPE_UINT32, &(cur.tv_nsec), + DBUS_TYPE_UINT32, &(req.tv_sec), + DBUS_TYPE_UINT32, &(req.tv_nsec), DBUS_TYPE_INVALID); + reply = dbus_connection_send_with_reply_and_block(connection, msg, + DBUS_TIMEOUT_USE_DEFAULT, &error); + if(reply == NULL){ + if(dbus_error_is_set(&error)){ + DBG("%s", error.message); + dbus_error_free(&error); + } + else{ + DBG("Failed to request set time"); + } + dbus_connection_unref(connection); + dbus_message_unref(msg); + return; + } + + dbus_message_unref(msg); + dbus_message_unref(reply); + dbus_connection_unref(connection); + + DBG("%lu cur seconds, %lu cur nsecs, %lu req seconds, %lu req nsecs", + cur.tv_sec, cur.tv_nsec, req.tv_sec, req.tv_nsec); + DBG("setting time"); + } +#else if (offset < STEPTIME_MIN_OFFSET && offset > -STEPTIME_MIN_OFFSET) { tmx.modes = ADJ_STATUS | ADJ_NANO | ADJ_OFFSET | ADJ_TIMECONST | ADJ_MAXERROR | ADJ_ESTERROR; tmx.status = STA_PLL; @@ -379,7 +440,8 @@ static void decode_msg(void *base, size_t len, struct timeval *tv, } DBG("interval/delta/delay/drift %fs/%+.3fs/%.3fs/%+ldppm", - LOGTOD(msg->poll), offset, delay, tmx.freq / 65536); + LOGTOD(msg->poll), offset, delay, tmx.freq / 65536); +#endif } static gboolean received_data(GIOChannel *channel, GIOCondition condition,