ISteadyClock.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using Ryujinx.Common;
  2. using Ryujinx.HLE.HOS.Services.Time.Clock;
  3. namespace Ryujinx.HLE.HOS.Services.Time
  4. {
  5. class ISteadyClock : IpcService
  6. {
  7. [Command(0)]
  8. // GetCurrentTimePoint() -> nn::time::SteadyClockTimePoint
  9. public ResultCode GetCurrentTimePoint(ServiceCtx context)
  10. {
  11. SteadyClockTimePoint currentTimePoint = StandardSteadyClockCore.Instance.GetCurrentTimePoint(context.Thread);
  12. context.ResponseData.WriteStruct(currentTimePoint);
  13. return ResultCode.Success;
  14. }
  15. [Command(1)]
  16. // GetTestOffset() -> nn::TimeSpanType
  17. public ResultCode GetTestOffset(ServiceCtx context)
  18. {
  19. context.ResponseData.WriteStruct(StandardSteadyClockCore.Instance.GetTestOffset());
  20. return ResultCode.Success;
  21. }
  22. [Command(2)]
  23. // SetTestOffset(nn::TimeSpanType)
  24. public ResultCode SetTestOffset(ServiceCtx context)
  25. {
  26. TimeSpanType testOffset = context.RequestData.ReadStruct<TimeSpanType>();
  27. StandardSteadyClockCore.Instance.SetTestOffset(testOffset);
  28. return 0;
  29. }
  30. [Command(100)] // 2.0.0+
  31. // GetRtcValue() -> u64
  32. public ResultCode GetRtcValue(ServiceCtx context)
  33. {
  34. ResultCode result = StandardSteadyClockCore.Instance.GetRtcValue(out ulong rtcValue);
  35. if (result == ResultCode.Success)
  36. {
  37. context.ResponseData.Write(rtcValue);
  38. }
  39. return result;
  40. }
  41. [Command(101)] // 2.0.0+
  42. // IsRtcResetDetected() -> bool
  43. public ResultCode IsRtcResetDetected(ServiceCtx context)
  44. {
  45. context.ResponseData.Write(StandardSteadyClockCore.Instance.IsRtcResetDetected());
  46. return ResultCode.Success;
  47. }
  48. [Command(102)] // 2.0.0+
  49. // GetSetupResultValue() -> u32
  50. public ResultCode GetSetupResultValue(ServiceCtx context)
  51. {
  52. context.ResponseData.Write((uint)StandardSteadyClockCore.Instance.GetSetupResultValue());
  53. return ResultCode.Success;
  54. }
  55. [Command(200)] // 3.0.0+
  56. // GetInternalOffset() -> nn::TimeSpanType
  57. public ResultCode GetInternalOffset(ServiceCtx context)
  58. {
  59. context.ResponseData.WriteStruct(StandardSteadyClockCore.Instance.GetInternalOffset());
  60. return ResultCode.Success;
  61. }
  62. [Command(201)] // 3.0.0-3.0.2
  63. // SetInternalOffset(nn::TimeSpanType)
  64. public ResultCode SetInternalOffset(ServiceCtx context)
  65. {
  66. TimeSpanType internalOffset = context.RequestData.ReadStruct<TimeSpanType>();
  67. StandardSteadyClockCore.Instance.SetInternalOffset(internalOffset);
  68. return ResultCode.Success;
  69. }
  70. }
  71. }