mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	service: Stub multiple functions to increase stability of album applet
This commit is contained in:
		
							parent
							
								
									c334959440
								
							
						
					
					
						commit
						0bb7990c49
					
				| @ -764,6 +764,66 @@ void AppletMessageQueue::OperationModeChanged() { | ||||
|     on_operation_mode_changed->Signal(); | ||||
| } | ||||
| 
 | ||||
| ILockAccessor::ILockAccessor(Core::System& system_) | ||||
|     : ServiceFramework{system_, "ILockAccessor"}, service_context{system_, "ILockAccessor"} { | ||||
|     // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {1, &ILockAccessor::TryLock, "TryLock"}, | ||||
|             {2, &ILockAccessor::Unlock, "Unlock"}, | ||||
|             {3, &ILockAccessor::GetEvent, "GetEvent"}, | ||||
|             {4,&ILockAccessor::IsLocked, "IsLocked"}, | ||||
|         }; | ||||
|     // clang-format on
 | ||||
| 
 | ||||
|     RegisterHandlers(functions); | ||||
| 
 | ||||
|     lock_event = service_context.CreateEvent("ILockAccessor::LockEvent"); | ||||
| } | ||||
| 
 | ||||
| ILockAccessor::~ILockAccessor() = default; | ||||
| 
 | ||||
| void ILockAccessor::TryLock(HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto return_handle = rp.Pop<bool>(); | ||||
| 
 | ||||
|     LOG_WARNING(Service_AM, "(STUBBED) called, return_handle={}", return_handle); | ||||
| 
 | ||||
|     // TODO: When return_handle is true this function should return the lock handle
 | ||||
| 
 | ||||
|     is_locked = true; | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 3}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.Push<u8>(is_locked); | ||||
| } | ||||
| 
 | ||||
| void ILockAccessor::Unlock(HLERequestContext& ctx) { | ||||
|     LOG_INFO(Service_AM, "called"); | ||||
| 
 | ||||
|     is_locked = false; | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(ResultSuccess); | ||||
| } | ||||
| 
 | ||||
| void ILockAccessor::GetEvent(HLERequestContext& ctx) { | ||||
|     LOG_INFO(Service_AM, "called"); | ||||
| 
 | ||||
|     lock_event->Signal(); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 1}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.PushCopyObjects(lock_event->GetReadableEvent()); | ||||
| } | ||||
| 
 | ||||
| void ILockAccessor::IsLocked(HLERequestContext& ctx) { | ||||
|     LOG_INFO(Service_AM, "called"); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.Push<u8>(is_locked); | ||||
| } | ||||
| 
 | ||||
| ICommonStateGetter::ICommonStateGetter(Core::System& system_, | ||||
|                                        std::shared_ptr<AppletMessageQueue> msg_queue_) | ||||
|     : ServiceFramework{system_, "ICommonStateGetter"}, msg_queue{std::move(msg_queue_)}, | ||||
| @ -787,7 +847,7 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, | ||||
|         {14, nullptr, "GetWakeupCount"}, | ||||
|         {20, nullptr, "PushToGeneralChannel"}, | ||||
|         {30, nullptr, "GetHomeButtonReaderLockAccessor"}, | ||||
|         {31, nullptr, "GetReaderLockAccessorEx"}, | ||||
|         {31, &ICommonStateGetter::GetReaderLockAccessorEx, "GetReaderLockAccessorEx"}, | ||||
|         {32, nullptr, "GetWriterLockAccessorEx"}, | ||||
|         {40, nullptr, "GetCradleFwVersion"}, | ||||
|         {50, &ICommonStateGetter::IsVrModeEnabled, "IsVrModeEnabled"}, | ||||
| @ -805,7 +865,7 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, | ||||
|         {65, nullptr, "GetApplicationIdByContentActionName"}, | ||||
|         {66, &ICommonStateGetter::SetCpuBoostMode, "SetCpuBoostMode"}, | ||||
|         {67, nullptr, "CancelCpuBoostMode"}, | ||||
|         {68, nullptr, "GetBuiltInDisplayType"}, | ||||
|         {68, &ICommonStateGetter::GetBuiltInDisplayType, "GetBuiltInDisplayType"}, | ||||
|         {80, &ICommonStateGetter::PerformSystemButtonPressingIfInFocus, "PerformSystemButtonPressingIfInFocus"}, | ||||
|         {90, nullptr, "SetPerformanceConfigurationChangedNotification"}, | ||||
|         {91, nullptr, "GetCurrentPerformanceConfiguration"}, | ||||
| @ -886,6 +946,18 @@ void ICommonStateGetter::RequestToAcquireSleepLock(HLERequestContext& ctx) { | ||||
|     rb.Push(ResultSuccess); | ||||
| } | ||||
| 
 | ||||
| void ICommonStateGetter::GetReaderLockAccessorEx(HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto unknown = rp.Pop<u32>(); | ||||
| 
 | ||||
|     LOG_INFO(Service_AM, "called, unknown={}", unknown); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
| 
 | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.PushIpcInterface<ILockAccessor>(system); | ||||
| } | ||||
| 
 | ||||
| void ICommonStateGetter::GetAcquiredSleepLockEvent(HLERequestContext& ctx) { | ||||
|     LOG_WARNING(Service_AM, "called"); | ||||
| 
 | ||||
| @ -970,6 +1042,14 @@ void ICommonStateGetter::SetCpuBoostMode(HLERequestContext& ctx) { | ||||
|     apm_sys->SetCpuBoostMode(ctx); | ||||
| } | ||||
| 
 | ||||
| void ICommonStateGetter::GetBuiltInDisplayType(HLERequestContext& ctx) { | ||||
|     LOG_WARNING(Service_AM, "(STUBBED) called"); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 3}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.Push(0); | ||||
| } | ||||
| 
 | ||||
| void ICommonStateGetter::PerformSystemButtonPressingIfInFocus(HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto system_button{rp.PopEnum<SystemButtonType>()}; | ||||
|  | ||||
| @ -195,6 +195,23 @@ private: | ||||
|     ScreenshotPermission screenshot_permission = ScreenshotPermission::Inherit; | ||||
| }; | ||||
| 
 | ||||
| class ILockAccessor final : public ServiceFramework<ILockAccessor> { | ||||
| public: | ||||
|     explicit ILockAccessor(Core::System& system_); | ||||
|     ~ILockAccessor() override; | ||||
| 
 | ||||
| private: | ||||
|     void TryLock(HLERequestContext& ctx); | ||||
|     void Unlock(HLERequestContext& ctx); | ||||
|     void GetEvent(HLERequestContext& ctx); | ||||
|     void IsLocked(HLERequestContext& ctx); | ||||
| 
 | ||||
|     bool is_locked{}; | ||||
| 
 | ||||
|     Kernel::KEvent* lock_event; | ||||
|     KernelHelpers::ServiceContext service_context; | ||||
| }; | ||||
| 
 | ||||
| class ICommonStateGetter final : public ServiceFramework<ICommonStateGetter> { | ||||
| public: | ||||
|     explicit ICommonStateGetter(Core::System& system_, | ||||
| @ -237,6 +254,7 @@ private: | ||||
|     void GetCurrentFocusState(HLERequestContext& ctx); | ||||
|     void RequestToAcquireSleepLock(HLERequestContext& ctx); | ||||
|     void GetAcquiredSleepLockEvent(HLERequestContext& ctx); | ||||
|     void GetReaderLockAccessorEx(HLERequestContext& ctx); | ||||
|     void GetDefaultDisplayResolutionChangeEvent(HLERequestContext& ctx); | ||||
|     void GetOperationMode(HLERequestContext& ctx); | ||||
|     void GetPerformanceMode(HLERequestContext& ctx); | ||||
| @ -248,6 +266,7 @@ private: | ||||
|     void EndVrModeEx(HLERequestContext& ctx); | ||||
|     void GetDefaultDisplayResolution(HLERequestContext& ctx); | ||||
|     void SetCpuBoostMode(HLERequestContext& ctx); | ||||
|     void GetBuiltInDisplayType(HLERequestContext& ctx); | ||||
|     void PerformSystemButtonPressingIfInFocus(HLERequestContext& ctx); | ||||
|     void GetSettingsPlatformRegion(HLERequestContext& ctx); | ||||
|     void SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(HLERequestContext& ctx); | ||||
|  | ||||
| @ -28,8 +28,8 @@ public: | ||||
|             {11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, | ||||
|             {20, &ILibraryAppletProxy::OpenLibraryAppletSelfAccessor, "OpenLibraryAppletSelfAccessor"}, | ||||
|             {21, &ILibraryAppletProxy::GetAppletCommonFunctions, "GetAppletCommonFunctions"}, | ||||
|             {22, nullptr, "GetHomeMenuFunctions"}, | ||||
|             {23, nullptr, "GetGlobalStateController"}, | ||||
|             {22, &ILibraryAppletProxy::GetHomeMenuFunctions, "GetHomeMenuFunctions"}, | ||||
|             {23, &ILibraryAppletProxy::GetGlobalStateController, "GetGlobalStateController"}, | ||||
|             {1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"}, | ||||
|         }; | ||||
|         // clang-format on
 | ||||
| @ -110,6 +110,22 @@ private: | ||||
|         rb.PushIpcInterface<IAppletCommonFunctions>(system); | ||||
|     } | ||||
| 
 | ||||
|     void GetHomeMenuFunctions(HLERequestContext& ctx) { | ||||
|         LOG_DEBUG(Service_AM, "called"); | ||||
| 
 | ||||
|         IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|         rb.Push(ResultSuccess); | ||||
|         rb.PushIpcInterface<IHomeMenuFunctions>(system); | ||||
|     } | ||||
| 
 | ||||
|     void GetGlobalStateController(HLERequestContext& ctx) { | ||||
|         LOG_DEBUG(Service_AM, "called"); | ||||
| 
 | ||||
|         IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|         rb.Push(ResultSuccess); | ||||
|         rb.PushIpcInterface<IGlobalStateController>(system); | ||||
|     } | ||||
| 
 | ||||
|     void GetDebugFunctions(HLERequestContext& ctx) { | ||||
|         LOG_DEBUG(Service_AM, "called"); | ||||
| 
 | ||||
|  | ||||
| @ -138,6 +138,10 @@ void Error::Initialize() { | ||||
|         CopyArgumentData(data, args->application_error); | ||||
|         error_code = Result(args->application_error.error_code); | ||||
|         break; | ||||
|     case ErrorAppletMode::ShowErrorPctl: | ||||
|         CopyArgumentData(data, args->error_record); | ||||
|         error_code = Decode64BitError(args->error_record.error_code_64); | ||||
|         break; | ||||
|     case ErrorAppletMode::ShowErrorRecord: | ||||
|         CopyArgumentData(data, args->error_record); | ||||
|         error_code = Decode64BitError(args->error_record.error_code_64); | ||||
| @ -191,6 +195,7 @@ void Error::Execute() { | ||||
|         frontend.ShowCustomErrorText(error_code, main_text_string, detail_text_string, callback); | ||||
|         break; | ||||
|     } | ||||
|     case ErrorAppletMode::ShowErrorPctl: | ||||
|     case ErrorAppletMode::ShowErrorRecord: | ||||
|         reporter.SaveErrorReport(title_id, error_code, | ||||
|                                  fmt::format("{:016X}", args->error_record.posix_time)); | ||||
|  | ||||
| @ -545,6 +545,16 @@ void IGeneralService::IsAnyInternetRequestAccepted(HLERequestContext& ctx) { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void IGeneralService::IsAnyForegroundRequestAccepted(HLERequestContext& ctx) { | ||||
|     const bool is_accepted{}; | ||||
| 
 | ||||
|     LOG_WARNING(Service_NIFM, "(STUBBED) called, is_accepted={}", is_accepted); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 3}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.Push<u8>(is_accepted); | ||||
| } | ||||
| 
 | ||||
| IGeneralService::IGeneralService(Core::System& system_) | ||||
|     : ServiceFramework{system_, "IGeneralService"}, network{system_.GetRoomNetwork()} { | ||||
|     // clang-format off
 | ||||
| @ -569,7 +579,7 @@ IGeneralService::IGeneralService(Core::System& system_) | ||||
|         {19, nullptr, "SetEthernetCommunicationEnabled"}, | ||||
|         {20, &IGeneralService::IsEthernetCommunicationEnabled, "IsEthernetCommunicationEnabled"}, | ||||
|         {21, &IGeneralService::IsAnyInternetRequestAccepted, "IsAnyInternetRequestAccepted"}, | ||||
|         {22, nullptr, "IsAnyForegroundRequestAccepted"}, | ||||
|         {22, &IGeneralService::IsAnyForegroundRequestAccepted, "IsAnyForegroundRequestAccepted"}, | ||||
|         {23, nullptr, "PutToSleep"}, | ||||
|         {24, nullptr, "WakeUp"}, | ||||
|         {25, nullptr, "GetSsidListVersion"}, | ||||
|  | ||||
| @ -35,6 +35,7 @@ private: | ||||
|     void GetInternetConnectionStatus(HLERequestContext& ctx); | ||||
|     void IsEthernetCommunicationEnabled(HLERequestContext& ctx); | ||||
|     void IsAnyInternetRequestAccepted(HLERequestContext& ctx); | ||||
|     void IsAnyForegroundRequestAccepted(HLERequestContext& ctx); | ||||
| 
 | ||||
|     Network::RoomNetwork& network; | ||||
| }; | ||||
|  | ||||
| @ -33,7 +33,7 @@ public: | ||||
|             {1001, &IParentalControlService::CheckFreeCommunicationPermission, "CheckFreeCommunicationPermission"}, | ||||
|             {1002, nullptr, "ConfirmLaunchApplicationPermission"}, | ||||
|             {1003, nullptr, "ConfirmResumeApplicationPermission"}, | ||||
|             {1004, nullptr, "ConfirmSnsPostPermission"}, | ||||
|             {1004, &IParentalControlService::ConfirmSnsPostPermission, "ConfirmSnsPostPermission"}, | ||||
|             {1005, nullptr, "ConfirmSystemSettingsPermission"}, | ||||
|             {1006, &IParentalControlService::IsRestrictionTemporaryUnlocked, "IsRestrictionTemporaryUnlocked"}, | ||||
|             {1007, nullptr, "RevertRestrictionTemporaryUnlocked"}, | ||||
| @ -236,6 +236,13 @@ private: | ||||
|         states.free_communication = true; | ||||
|     } | ||||
| 
 | ||||
|     void ConfirmSnsPostPermission(HLERequestContext& ctx) { | ||||
|         LOG_WARNING(Service_PCTL, "(STUBBED) called"); | ||||
| 
 | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(Error::ResultNoFreeCommunication); | ||||
|     } | ||||
| 
 | ||||
|     void IsRestrictionTemporaryUnlocked(HLERequestContext& ctx) { | ||||
|         const bool is_temporary_unlocked = false; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user