ILibraryAppletSelfAccessor.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Ryujinx.Common;
  2. using System;
  3. namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.LibraryAppletProxy
  4. {
  5. class ILibraryAppletSelfAccessor : IpcService
  6. {
  7. private AppletStandalone _appletStandalone = new AppletStandalone();
  8. public ILibraryAppletSelfAccessor(ServiceCtx context)
  9. {
  10. if (context.Device.Application.TitleId == 0x0100000000001009)
  11. {
  12. // Create MiiEdit data.
  13. _appletStandalone = new AppletStandalone()
  14. {
  15. AppletId = AppletId.MiiEdit,
  16. LibraryAppletMode = LibraryAppletMode.AllForeground
  17. };
  18. byte[] miiEditInputData = new byte[0x100];
  19. miiEditInputData[0] = 0x03; // Hardcoded unknown value.
  20. _appletStandalone.InputData.Enqueue(miiEditInputData);
  21. }
  22. else
  23. {
  24. throw new NotImplementedException($"{context.Device.Application.TitleId} applet is not implemented.");
  25. }
  26. }
  27. [CommandHipc(0)]
  28. // PopInData() -> object<nn::am::service::IStorage>
  29. public ResultCode PopInData(ServiceCtx context)
  30. {
  31. byte[] appletData = _appletStandalone.InputData.Dequeue();
  32. if (appletData.Length == 0)
  33. {
  34. return ResultCode.NotAvailable;
  35. }
  36. MakeObject(context, new IStorage(appletData));
  37. return ResultCode.Success;
  38. }
  39. [CommandHipc(11)]
  40. // GetLibraryAppletInfo() -> nn::am::service::LibraryAppletInfo
  41. public ResultCode GetLibraryAppletInfo(ServiceCtx context)
  42. {
  43. LibraryAppletInfo libraryAppletInfo = new LibraryAppletInfo()
  44. {
  45. AppletId = _appletStandalone.AppletId,
  46. LibraryAppletMode = _appletStandalone.LibraryAppletMode
  47. };
  48. context.ResponseData.WriteStruct(libraryAppletInfo);
  49. return ResultCode.Success;
  50. }
  51. [CommandHipc(14)]
  52. // GetCallerAppletIdentityInfo() -> nn::am::service::AppletIdentityInfo
  53. public ResultCode GetCallerAppletIdentityInfo(ServiceCtx context)
  54. {
  55. AppletIdentifyInfo appletIdentifyInfo = new AppletIdentifyInfo()
  56. {
  57. AppletId = AppletId.QLaunch,
  58. TitleId = 0x0100000000001000
  59. };
  60. context.ResponseData.WriteStruct(appletIdentifyInfo);
  61. return ResultCode.Success;
  62. }
  63. }
  64. }