am: Implement VR related APIs
Implement (and stub) VR related APIs in AM sysmodule. This fixes issue #2938
This commit is contained in:
		| @@ -52,6 +52,11 @@ enum class LaunchParameterKind : u32 { | |||||||
|     AccountPreselectedUser = 2, |     AccountPreselectedUser = 2, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | enum class VrMode : u8 { | ||||||
|  |     Disabled = 0, | ||||||
|  |     Enabled = 1, | ||||||
|  | }; | ||||||
|  |  | ||||||
| constexpr u32 LAUNCH_PARAMETER_ACCOUNT_PRESELECTED_USER_MAGIC = 0xC79497CA; | constexpr u32 LAUNCH_PARAMETER_ACCOUNT_PRESELECTED_USER_MAGIC = 0xC79497CA; | ||||||
|  |  | ||||||
| struct LaunchParameterAccountPreselectedUser { | struct LaunchParameterAccountPreselectedUser { | ||||||
| @@ -605,11 +610,11 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system, | |||||||
|         {30, nullptr, "GetHomeButtonReaderLockAccessor"}, |         {30, nullptr, "GetHomeButtonReaderLockAccessor"}, | ||||||
|         {31, nullptr, "GetReaderLockAccessorEx"}, |         {31, nullptr, "GetReaderLockAccessorEx"}, | ||||||
|         {40, nullptr, "GetCradleFwVersion"}, |         {40, nullptr, "GetCradleFwVersion"}, | ||||||
|         {50, nullptr, "IsVrModeEnabled"}, |         {50, &ICommonStateGetter::IsVrModeEnabled, "IsVrModeEnabled"}, | ||||||
|         {51, nullptr, "SetVrModeEnabled"}, |         {51, &ICommonStateGetter::SetVrModeEnabled, "SetVrModeEnabled"}, | ||||||
|         {52, &ICommonStateGetter::SetLcdBacklighOffEnabled, "SetLcdBacklighOffEnabled"}, |         {52, &ICommonStateGetter::SetLcdBacklighOffEnabled, "SetLcdBacklighOffEnabled"}, | ||||||
|         {53, nullptr, "BeginVrModeEx"}, |         {53, nullptr, "BeginVrModeEx"}, | ||||||
|         {54, nullptr, "EndVrModeEx"}, |         {54, &ICommonStateGetter::EndVrModeEx, "EndVrModeEx"}, | ||||||
|         {55, nullptr, "IsInControllerFirmwareUpdateSection"}, |         {55, nullptr, "IsInControllerFirmwareUpdateSection"}, | ||||||
|         {60, &ICommonStateGetter::GetDefaultDisplayResolution, "GetDefaultDisplayResolution"}, |         {60, &ICommonStateGetter::GetDefaultDisplayResolution, "GetDefaultDisplayResolution"}, | ||||||
|         {61, &ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent, "GetDefaultDisplayResolutionChangeEvent"}, |         {61, &ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent, "GetDefaultDisplayResolutionChangeEvent"}, | ||||||
| @@ -672,6 +677,30 @@ void ICommonStateGetter::GetCurrentFocusState(Kernel::HLERequestContext& ctx) { | |||||||
|     rb.Push(static_cast<u8>(FocusState::InFocus)); |     rb.Push(static_cast<u8>(FocusState::InFocus)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void ICommonStateGetter::IsVrModeEnabled(Kernel::HLERequestContext& ctx) { | ||||||
|  |     LOG_WARNING(Service_AM, "(STUBBED) called"); | ||||||
|  |  | ||||||
|  |     IPC::ResponseBuilder rb{ctx, 3}; | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  |     rb.PushEnum(VrMode::Disabled); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void ICommonStateGetter::SetVrModeEnabled(Kernel::HLERequestContext& ctx) { | ||||||
|  |     IPC::RequestParser rp{ctx}; | ||||||
|  |     const auto is_vr_mode_enabled = rp.Pop<bool>(); | ||||||
|  |  | ||||||
|  |     LOG_WARNING(Service_AM, "(STUBBED) called. is_vr_mode_enabled={}", is_vr_mode_enabled); | ||||||
|  |  | ||||||
|  |     IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |     if (!is_vr_mode_enabled) { | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |     } else { | ||||||
|  |         // TODO: Find better error code for this | ||||||
|  |         UNIMPLEMENTED_MSG("is_vr_mode_enabled={}", is_vr_mode_enabled); | ||||||
|  |         rb.Push(RESULT_UNKNOWN); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void ICommonStateGetter::SetLcdBacklighOffEnabled(Kernel::HLERequestContext& ctx) { | void ICommonStateGetter::SetLcdBacklighOffEnabled(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp{ctx}; |     IPC::RequestParser rp{ctx}; | ||||||
|     const auto is_lcd_backlight_off_enabled = rp.Pop<bool>(); |     const auto is_lcd_backlight_off_enabled = rp.Pop<bool>(); | ||||||
| @@ -683,6 +712,13 @@ void ICommonStateGetter::SetLcdBacklighOffEnabled(Kernel::HLERequestContext& ctx | |||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void ICommonStateGetter::EndVrModeEx(Kernel::HLERequestContext& ctx) { | ||||||
|  |     LOG_WARNING(Service_AM, "(STUBBED) called"); | ||||||
|  |  | ||||||
|  |     IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  | } | ||||||
|  |  | ||||||
| void ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(Kernel::HLERequestContext& ctx) { | void ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_DEBUG(Service_AM, "called"); |     LOG_DEBUG(Service_AM, "called"); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -182,7 +182,10 @@ private: | |||||||
|     void GetOperationMode(Kernel::HLERequestContext& ctx); |     void GetOperationMode(Kernel::HLERequestContext& ctx); | ||||||
|     void GetPerformanceMode(Kernel::HLERequestContext& ctx); |     void GetPerformanceMode(Kernel::HLERequestContext& ctx); | ||||||
|     void GetBootMode(Kernel::HLERequestContext& ctx); |     void GetBootMode(Kernel::HLERequestContext& ctx); | ||||||
|  |     void IsVrModeEnabled(Kernel::HLERequestContext& ctx); | ||||||
|  |     void SetVrModeEnabled(Kernel::HLERequestContext& ctx); | ||||||
|     void SetLcdBacklighOffEnabled(Kernel::HLERequestContext& ctx); |     void SetLcdBacklighOffEnabled(Kernel::HLERequestContext& ctx); | ||||||
|  |     void EndVrModeEx(Kernel::HLERequestContext& ctx); | ||||||
|     void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx); |     void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx); | ||||||
|     void SetCpuBoostMode(Kernel::HLERequestContext& ctx); |     void SetCpuBoostMode(Kernel::HLERequestContext& ctx); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user