summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-06-24 13:09:00 +0200
committerEugen Wissner <belka@caraus.de>2024-06-24 13:09:00 +0200
commitb11e18e560edc9f363c4a98ddb5f5da3d66a7881 (patch)
treee81ae9b6a10ced2652a179151ce5ad3553fd39a0
parent3a85891f2ef081fe9b548bdf3132a48ee4780d89 (diff)
downloadslack-timedate-b11e18e560edc9f363c4a98ddb5f5da3d66a7881.tar.gz
Implement TimeUSecRTC property
-rw-r--r--data/org.freedesktop.timedate1.xml1
-rw-r--r--src/timedate.cpp16
-rw-r--r--src/timedate.h5
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
{