settings: Use std::chrono::seconds instead of s64 for RTC
This commit is contained in:
parent
dbb1eb9c29
commit
05dbb47af5
6 changed files with 21 additions and 17 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue