| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using Ryujinx.HLE.HOS.Kernel.Threading;
- namespace Ryujinx.HLE.HOS.Services.Time.Clock
- {
- class StandardUserSystemClockCore : SystemClockCore
- {
- private StandardLocalSystemClockCore _localSystemClockCore;
- private StandardNetworkSystemClockCore _networkSystemClockCore;
- private bool _autoCorrectionEnabled;
- private static StandardUserSystemClockCore _instance;
- public static StandardUserSystemClockCore Instance
- {
- get
- {
- if (_instance == null)
- {
- _instance = new StandardUserSystemClockCore(StandardLocalSystemClockCore.Instance, StandardNetworkSystemClockCore.Instance);
- }
- return _instance;
- }
- }
- public StandardUserSystemClockCore(StandardLocalSystemClockCore localSystemClockCore, StandardNetworkSystemClockCore networkSystemClockCore) : base(localSystemClockCore.GetSteadyClockCore())
- {
- _localSystemClockCore = localSystemClockCore;
- _networkSystemClockCore = networkSystemClockCore;
- _autoCorrectionEnabled = false;
- }
- public override ResultCode Flush(SystemClockContext context)
- {
- return ResultCode.NotImplemented;
- }
- public override ResultCode GetSystemClockContext(KThread thread, out SystemClockContext context)
- {
- ResultCode result = ApplyAutomaticCorrection(thread, false);
- context = new SystemClockContext();
- if (result == ResultCode.Success)
- {
- return _localSystemClockCore.GetSystemClockContext(thread, out context);
- }
- return result;
- }
- public override ResultCode SetSystemClockContext(SystemClockContext context)
- {
- return ResultCode.NotImplemented;
- }
- private ResultCode ApplyAutomaticCorrection(KThread thread, bool autoCorrectionEnabled)
- {
- ResultCode result = ResultCode.Success;
- if (_autoCorrectionEnabled != autoCorrectionEnabled && _networkSystemClockCore.IsClockSetup(thread))
- {
- result = _networkSystemClockCore.GetSystemClockContext(thread, out SystemClockContext context);
- if (result == ResultCode.Success)
- {
- _localSystemClockCore.SetSystemClockContext(context);
- }
- }
- return result;
- }
- public ResultCode SetAutomaticCorrectionEnabled(KThread thread, bool autoCorrectionEnabled)
- {
- ResultCode result = ApplyAutomaticCorrection(thread, autoCorrectionEnabled);
- if (result == ResultCode.Success)
- {
- _autoCorrectionEnabled = autoCorrectionEnabled;
- }
- return result;
- }
- public bool IsAutomaticCorrectionEnabled()
- {
- return _autoCorrectionEnabled;
- }
- }
- }
|