IPsmSession.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Ryujinx.Common.Logging;
  2. using Ryujinx.HLE.HOS.Ipc;
  3. using Ryujinx.HLE.HOS.Kernel.Common;
  4. using Ryujinx.HLE.HOS.Kernel.Threading;
  5. namespace Ryujinx.HLE.HOS.Services.Ptm.Psm
  6. {
  7. class IPsmSession : IpcService
  8. {
  9. private KEvent _stateChangeEvent;
  10. private int _stateChangeEventHandle;
  11. public IPsmSession(Horizon system)
  12. {
  13. _stateChangeEvent = new KEvent(system.KernelContext);
  14. _stateChangeEventHandle = -1;
  15. }
  16. [CommandHipc(0)]
  17. // BindStateChangeEvent() -> KObject
  18. public ResultCode BindStateChangeEvent(ServiceCtx context)
  19. {
  20. if (_stateChangeEventHandle == -1)
  21. {
  22. KernelResult resultCode = context.Process.HandleTable.GenerateHandle(_stateChangeEvent.ReadableEvent, out int stateChangeEventHandle);
  23. if (resultCode != KernelResult.Success)
  24. {
  25. return (ResultCode)resultCode;
  26. }
  27. }
  28. context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_stateChangeEventHandle);
  29. Logger.Stub?.PrintStub(LogClass.ServicePsm);
  30. return ResultCode.Success;
  31. }
  32. [CommandHipc(1)]
  33. // UnbindStateChangeEvent()
  34. public ResultCode UnbindStateChangeEvent(ServiceCtx context)
  35. {
  36. if (_stateChangeEventHandle != -1)
  37. {
  38. context.Process.HandleTable.CloseHandle(_stateChangeEventHandle);
  39. _stateChangeEventHandle = -1;
  40. }
  41. Logger.Stub?.PrintStub(LogClass.ServicePsm);
  42. return ResultCode.Success;
  43. }
  44. [CommandHipc(2)]
  45. // SetChargerTypeChangeEventEnabled(u8)
  46. public ResultCode SetChargerTypeChangeEventEnabled(ServiceCtx context)
  47. {
  48. bool chargerTypeChangeEventEnabled = context.RequestData.ReadBoolean();
  49. Logger.Stub?.PrintStub(LogClass.ServicePsm, new { chargerTypeChangeEventEnabled });
  50. return ResultCode.Success;
  51. }
  52. [CommandHipc(3)]
  53. // SetPowerSupplyChangeEventEnabled(u8)
  54. public ResultCode SetPowerSupplyChangeEventEnabled(ServiceCtx context)
  55. {
  56. bool powerSupplyChangeEventEnabled = context.RequestData.ReadBoolean();
  57. Logger.Stub?.PrintStub(LogClass.ServicePsm, new { powerSupplyChangeEventEnabled });
  58. return ResultCode.Success;
  59. }
  60. [CommandHipc(4)]
  61. // SetBatteryVoltageStateChangeEventEnabled(u8)
  62. public ResultCode SetBatteryVoltageStateChangeEventEnabled(ServiceCtx context)
  63. {
  64. bool batteryVoltageStateChangeEventEnabled = context.RequestData.ReadBoolean();
  65. Logger.Stub?.PrintStub(LogClass.ServicePsm, new { batteryVoltageStateChangeEventEnabled });
  66. return ResultCode.Success;
  67. }
  68. }
  69. }