// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "core/hle/service/am/am_types.h" #include "core/hle/service/apm/apm_controller.h" #include "core/hle/service/cmif_types.h" #include "core/hle/service/pm/pm.h" #include "core/hle/service/service.h" namespace Kernel { class KReadableEvent; } namespace Service::AM { struct Applet; class ILockAccessor; class ICommonStateGetter final : public ServiceFramework { public: explicit ICommonStateGetter(Core::System& system_, std::shared_ptr applet_); ~ICommonStateGetter() override; private: Result GetEventHandle(OutCopyHandle out_event); Result ReceiveMessage(Out out_applet_message); Result GetCurrentFocusState(Out out_focus_state); Result RequestToAcquireSleepLock(); Result GetAcquiredSleepLockEvent(OutCopyHandle out_event); Result GetReaderLockAccessorEx(Out> out_lock_accessor, u32 button_type); Result GetWriterLockAccessorEx(Out> out_lock_accessor, u32 button_type); Result GetDefaultDisplayResolutionChangeEvent(OutCopyHandle out_event); Result GetOperationMode(Out out_operation_mode); Result GetPerformanceMode(Out out_performance_mode); Result GetBootMode(Out out_boot_mode); Result IsVrModeEnabled(Out out_is_vr_mode_enabled); Result SetVrModeEnabled(bool is_vr_mode_enabled); Result SetLcdBacklighOffEnabled(bool is_lcd_backlight_off_enabled); Result BeginVrModeEx(); Result EndVrModeEx(); Result IsInControllerFirmwareUpdateSection( Out out_is_in_controller_firmware_update_section); Result GetDefaultDisplayResolution(Out out_width, Out out_height); Result GetBuiltInDisplayType(Out out_display_type); Result PerformSystemButtonPressingIfInFocus(SystemButtonType type); Result GetOperationModeSystemInfo(Out out_operation_mode_system_info); Result GetAppletLaunchedHistory(Out out_count, OutArray out_applet_ids); Result GetSettingsPlatformRegion(Out out_settings_platform_region); Result SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(); void SetCpuBoostMode(HLERequestContext& ctx); const std::shared_ptr m_applet; }; } // namespace Service::AM