diff options
| -rw-r--r-- | data/org.freedesktop.timedate1.xml | 1 | ||||
| -rw-r--r-- | src/timedate.cpp | 16 | ||||
| -rw-r--r-- | src/timedate.h | 5 |
3 files changed, 18 insertions, 4 deletions
diff --git a/data/org.freedesktop.timedate1.xml b/data/org.freedesktop.timedate1.xml index c0ffaa1..ab148da 100644 --- a/data/org.freedesktop.timedate1.xml +++ b/data/org.freedesktop.timedate1.xml @@ -7,6 +7,7 @@ <property name="NTP" type="b" access="read"/> <property name="CanNTP" type="b" access="read"/> <property name="NTPSynchronized" type="b" access="read"/> + <property name="TimeUSecRTC" type="t" access="read"/> <method name="SetTime"> <arg name="usec_utc" type="x" direction="in"/> <arg name="relative" type="b" direction="in"/> diff --git a/src/timedate.cpp b/src/timedate.cpp index 59812ad..42bacf6 100644 --- a/src/timedate.cpp +++ b/src/timedate.cpp @@ -125,12 +125,16 @@ static void slack_get_property(Glib::VariantBase& result, const Glib::RefPtr<Gio { result = Glib::Variant<bool>::create(dlackware::timedate::ntp_synchronized()); } + else if (prop_name == "TimeUSecRTC") + { + result = Glib::Variant<std::uint64_t>::create(dlackware::timedate::time_usec_rtc()); + } } namespace dlackware::timedate { - constexpr const std::int32_t usec_per_sec = 1000000ULL; - constexpr const std::int32_t nsec_per_usec = 1000ULL; + constexpr const std::uint64_t usec_per_sec = 1000000ULL; + constexpr const std::uint64_t nsec_per_usec = 1000ULL; timedate1::timedate1() : interface_vtable{ &slack_method_call, &slack_get_property } @@ -247,7 +251,7 @@ namespace dlackware::timedate } } - void set_time(gint64 seconds_since_epoch, bool relative, bool) + void set_time(std::int64_t seconds_since_epoch, bool relative, bool) { timespec ts; @@ -333,4 +337,10 @@ namespace dlackware::timedate } return ntp_result != TIME_ERROR && (buffer.status & STA_UNSYNC) == 0; } + + std::uint64_t time_usec_rtc() + { + return std::chrono::duration_cast<std::chrono::microseconds>( + std::chrono::system_clock::now().time_since_epoch()).count(); + } } diff --git a/src/timedate.h b/src/timedate.h index 2b2d1a2..952209c 100644 --- a/src/timedate.h +++ b/src/timedate.h @@ -43,6 +43,9 @@ namespace dlackware::timedate // Shows whether the kernel reports the time as synchronized. bool ntp_synchronized(); + // Shows the current time in the RTC. + std::uint64_t time_usec_rtc(); + // Returns the timezones available on the system. std::vector<Glib::ustring> list_timezones(); @@ -57,7 +60,7 @@ namespace dlackware::timedate // Changes the date/time // Takes the amount of seconds since UNIX epoche and // Throws std::system_error. - void set_time(gint64 seconds_since_epoch, bool relative, bool user_interaction); + void set_time(std::int64_t seconds_since_epoch, bool relative, bool user_interaction); class timedate1 { |
