settings: Use std::chrono::seconds instead of s64 for RTC

This commit is contained in:
Zach Hilman 2018-12-28 20:24:24 -05:00
parent dbb1eb9c29
commit 05dbb47af5
6 changed files with 21 additions and 17 deletions

View file

@ -96,8 +96,7 @@ struct System::Impl {
kernel.Initialize(); kernel.Initialize();
const auto current_time = std::chrono::duration_cast<std::chrono::seconds>( const auto current_time = std::chrono::duration_cast<std::chrono::seconds>(
std::chrono::system_clock::now().time_since_epoch()) std::chrono::system_clock::now().time_since_epoch());
.count();
Settings::values.custom_rtc_differential = Settings::values.custom_rtc_differential =
Settings::values.custom_rtc.value_or(current_time) - current_time; Settings::values.custom_rtc.value_or(current_time) - current_time;

View file

@ -16,10 +16,9 @@
namespace Service::Time { namespace Service::Time {
static s64 GetSecondsSinceEpoch() { static std::chrono::seconds GetSecondsSinceEpoch() {
return std::chrono::duration_cast<std::chrono::seconds>( return std::chrono::duration_cast<std::chrono::seconds>(
std::chrono::system_clock::now().time_since_epoch()) std::chrono::system_clock::now().time_since_epoch()) +
.count() +
Settings::values.custom_rtc_differential; Settings::values.custom_rtc_differential;
} }
@ -76,7 +75,7 @@ public:
private: private:
void GetCurrentTime(Kernel::HLERequestContext& ctx) { void GetCurrentTime(Kernel::HLERequestContext& ctx) {
const s64 time_since_epoch{GetSecondsSinceEpoch()}; const s64 time_since_epoch{GetSecondsSinceEpoch().count()};
LOG_DEBUG(Service_Time, "called"); LOG_DEBUG(Service_Time, "called");
IPC::ResponseBuilder rb{ctx, 4}; IPC::ResponseBuilder rb{ctx, 4};
@ -272,8 +271,7 @@ void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx}; IPC::RequestParser rp{ctx};
const auto initial_type = rp.PopRaw<u8>(); const auto initial_type = rp.PopRaw<u8>();
const s64 time_since_epoch{GetSecondsSinceEpoch()}; const s64 time_since_epoch{GetSecondsSinceEpoch().count()};
const std::time_t time(time_since_epoch); const std::time_t time(time_since_epoch);
const std::tm* tm = std::localtime(&time); const std::tm* tm = std::localtime(&time);
if (tm == nullptr) { if (tm == nullptr) {

View file

@ -6,6 +6,7 @@
#include <array> #include <array>
#include <atomic> #include <atomic>
#include <chrono>
#include <map> #include <map>
#include <optional> #include <optional>
#include <string> #include <string>
@ -350,9 +351,10 @@ struct Values {
bool use_docked_mode; bool use_docked_mode;
bool enable_nfc; bool enable_nfc;
std::optional<u32> rng_seed; std::optional<u32> rng_seed;
std::optional<s64> custom_rtc; // Measured in seconds since epoch std::optional<std::chrono::seconds> custom_rtc; // Measured in seconds since epoch
s64 custom_rtc_differential; // Set on game boot, reset on stop. Seconds difference between std::chrono::seconds
// current time and `custom_rtc` custom_rtc_differential; // Set on game boot, reset on stop. Seconds difference between
// current time and `custom_rtc`
s32 current_user; s32 current_user;
s32 language_index; s32 language_index;

View file

@ -428,7 +428,8 @@ void Config::ReadValues() {
const auto custom_rtc_enabled = qt_config->value("custom_rtc_enabled", false).toBool(); const auto custom_rtc_enabled = qt_config->value("custom_rtc_enabled", false).toBool();
if (custom_rtc_enabled) { if (custom_rtc_enabled) {
Settings::values.custom_rtc = qt_config->value("custom_rtc", 0).toULongLong(); Settings::values.custom_rtc =
std::chrono::seconds(qt_config->value("custom_rtc", 0).toULongLong());
} else { } else {
Settings::values.custom_rtc = std::nullopt; Settings::values.custom_rtc = std::nullopt;
} }
@ -661,7 +662,8 @@ void Config::SaveValues() {
qt_config->setValue("rng_seed", Settings::values.rng_seed.value_or(0)); qt_config->setValue("rng_seed", Settings::values.rng_seed.value_or(0));
qt_config->setValue("custom_rtc_enabled", Settings::values.custom_rtc.has_value()); qt_config->setValue("custom_rtc_enabled", Settings::values.custom_rtc.has_value());
qt_config->setValue("custom_rtc", Settings::values.custom_rtc.value_or(0)); qt_config->setValue("custom_rtc",
Settings::values.custom_rtc.value_or(std::chrono::seconds{}).count());
qt_config->endGroup(); qt_config->endGroup();

View file

@ -77,8 +77,9 @@ void ConfigureSystem::setConfiguration() {
ui->custom_rtc_checkbox->setChecked(Settings::values.custom_rtc.has_value()); ui->custom_rtc_checkbox->setChecked(Settings::values.custom_rtc.has_value());
ui->custom_rtc_edit->setEnabled(Settings::values.custom_rtc.has_value()); ui->custom_rtc_edit->setEnabled(Settings::values.custom_rtc.has_value());
const auto rtc_time = Settings::values.custom_rtc.value_or(QDateTime::currentSecsSinceEpoch()); const auto rtc_time = Settings::values.custom_rtc.value_or(
ui->custom_rtc_edit->setDateTime(QDateTime::fromSecsSinceEpoch(rtc_time)); std::chrono::seconds(QDateTime::currentSecsSinceEpoch()));
ui->custom_rtc_edit->setDateTime(QDateTime::fromSecsSinceEpoch(rtc_time.count()));
} }
void ConfigureSystem::ReadSystemSettings() {} void ConfigureSystem::ReadSystemSettings() {}
@ -95,7 +96,8 @@ void ConfigureSystem::applyConfiguration() {
Settings::values.rng_seed = std::nullopt; Settings::values.rng_seed = std::nullopt;
if (ui->custom_rtc_checkbox->isChecked()) if (ui->custom_rtc_checkbox->isChecked())
Settings::values.custom_rtc = ui->custom_rtc_edit->dateTime().toSecsSinceEpoch(); Settings::values.custom_rtc =
std::chrono::seconds(ui->custom_rtc_edit->dateTime().toSecsSinceEpoch());
else else
Settings::values.custom_rtc = std::nullopt; Settings::values.custom_rtc = std::nullopt;

View file

@ -334,7 +334,8 @@ void Config::ReadValues() {
const auto custom_rtc_enabled = sdl2_config->GetBoolean("System", "custom_rtc_enabled", false); const auto custom_rtc_enabled = sdl2_config->GetBoolean("System", "custom_rtc_enabled", false);
if (custom_rtc_enabled) { if (custom_rtc_enabled) {
Settings::values.custom_rtc = sdl2_config->GetInteger("System", "custom_rtc", 0); Settings::values.custom_rtc =
std::chrono::seconds(sdl2_config->GetInteger("System", "custom_rtc", 0));
} else { } else {
Settings::values.custom_rtc = std::nullopt; Settings::values.custom_rtc = std::nullopt;
} }