ISettingsServer.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using Ryujinx.Common.Logging;
  2. using Ryujinx.HLE.HOS.SystemState;
  3. using System;
  4. namespace Ryujinx.HLE.HOS.Services.Set
  5. {
  6. [Service("set")]
  7. class ISettingsServer : IpcService
  8. {
  9. public ISettingsServer(ServiceCtx context) { }
  10. [Command(0)]
  11. // GetLanguageCode() -> nn::settings::LanguageCode
  12. public ResultCode GetLanguageCode(ServiceCtx context)
  13. {
  14. context.ResponseData.Write(context.Device.System.State.DesiredLanguageCode);
  15. return ResultCode.Success;
  16. }
  17. [Command(1)]
  18. // GetAvailableLanguageCodes() -> (u32, buffer<nn::settings::LanguageCode, 0xa>)
  19. public ResultCode GetAvailableLanguageCodes(ServiceCtx context)
  20. {
  21. return GetAvailableLanguagesCodesImpl(
  22. context,
  23. context.Request.RecvListBuff[0].Position,
  24. context.Request.RecvListBuff[0].Size,
  25. 0xF);
  26. }
  27. [Command(2)] // 4.0.0+
  28. // MakeLanguageCode(nn::settings::Language language_index) -> nn::settings::LanguageCode
  29. public ResultCode MakeLanguageCode(ServiceCtx context)
  30. {
  31. int languageIndex = context.RequestData.ReadInt32();
  32. if ((uint)languageIndex >= (uint)SystemStateMgr.LanguageCodes.Length)
  33. {
  34. return ResultCode.LanguageOutOfRange;
  35. }
  36. context.ResponseData.Write(SystemStateMgr.GetLanguageCode(languageIndex));
  37. return ResultCode.Success;
  38. }
  39. [Command(3)]
  40. // GetAvailableLanguageCodeCount() -> u32
  41. public ResultCode GetAvailableLanguageCodeCount(ServiceCtx context)
  42. {
  43. context.ResponseData.Write(Math.Min(SystemStateMgr.LanguageCodes.Length, 0xF));
  44. return ResultCode.Success;
  45. }
  46. [Command(5)]
  47. // GetAvailableLanguageCodes2() -> (u32, buffer<nn::settings::LanguageCode, 6>)
  48. public ResultCode GetAvailableLanguageCodes2(ServiceCtx context)
  49. {
  50. return GetAvailableLanguagesCodesImpl(
  51. context,
  52. context.Request.ReceiveBuff[0].Position,
  53. context.Request.ReceiveBuff[0].Size,
  54. SystemStateMgr.LanguageCodes.Length);
  55. }
  56. [Command(6)]
  57. // GetAvailableLanguageCodeCount2() -> u32
  58. public ResultCode GetAvailableLanguageCodeCount2(ServiceCtx context)
  59. {
  60. context.ResponseData.Write(SystemStateMgr.LanguageCodes.Length);
  61. return ResultCode.Success;
  62. }
  63. [Command(8)] // 5.0.0+
  64. // GetQuestFlag() -> bool
  65. public ResultCode GetQuestFlag(ServiceCtx context)
  66. {
  67. context.ResponseData.Write(false);
  68. Logger.PrintStub(LogClass.ServiceSet);
  69. return ResultCode.Success;
  70. }
  71. public ResultCode GetAvailableLanguagesCodesImpl(ServiceCtx context, long position, long size, int maxSize)
  72. {
  73. int count = (int)(size / 8);
  74. if (count > maxSize)
  75. {
  76. count = maxSize;
  77. }
  78. for (int index = 0; index < count; index++)
  79. {
  80. context.Memory.WriteInt64(position, SystemStateMgr.GetLanguageCode(index));
  81. position += 8;
  82. }
  83. context.ResponseData.Write(count);
  84. return ResultCode.Success;
  85. }
  86. }
  87. }