// Copyright 2018 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include "core/hle/service/service.h" namespace Kernel { class Event; } namespace Service { namespace NVFlinger { class NVFlinger; } namespace AM { enum SystemLanguage { Japanese = 0, English = 1, // en-US French = 2, German = 3, Italian = 4, Spanish = 5, Chinese = 6, Korean = 7, Dutch = 8, Portuguese = 9, Russian = 10, Taiwanese = 11, BritishEnglish = 12, // en-GB CanadianFrench = 13, LatinAmericanSpanish = 14, // es-419 // 4.0.0+ SimplifiedChinese = 15, TraditionalChinese = 16, }; class AppletMessageQueue { public: enum class AppletMessage : u32 { NoMessage = 0, FocusStateChanged = 15, OperationModeChanged = 30, PerformanceModeChanged = 31, }; AppletMessageQueue(); ~AppletMessageQueue(); const Kernel::SharedPtr& GetMesssageRecieveEvent() const; const Kernel::SharedPtr& GetOperationModeChangedEvent() const; void PushMessage(AppletMessage msg); AppletMessage PopMessage(); std::size_t GetMessageCount() const; void OperationModeChanged(); private: std::queue messages; Kernel::SharedPtr on_new_message; Kernel::SharedPtr on_operation_mode_changed; }; class IWindowController final : public ServiceFramework { public: IWindowController(); ~IWindowController() override; private: void GetAppletResourceUserId(Kernel::HLERequestContext& ctx); void AcquireForegroundRights(Kernel::HLERequestContext& ctx); }; class IAudioController final : public ServiceFramework { public: IAudioController(); ~IAudioController() override; private: void SetExpectedMasterVolume(Kernel::HLERequestContext& ctx); void GetMainAppletExpectedMasterVolume(Kernel::HLERequestContext& ctx); void GetLibraryAppletExpectedMasterVolume(Kernel::HLERequestContext& ctx); u32 volume{100}; }; class IDisplayController final : public ServiceFramework { public: IDisplayController(); ~IDisplayController() override; }; class IDebugFunctions final : public ServiceFramework { public: IDebugFunctions(); ~IDebugFunctions() override; }; class ISelfController final : public ServiceFramework { public: explicit ISelfController(std::shared_ptr nvflinger); ~ISelfController() override; private: void SetFocusHandlingMode(Kernel::HLERequestContext& ctx); void SetRestartMessageEnabled(Kernel::HLERequestContext& ctx); void SetPerformanceModeChangedNotification(Kernel::HLERequestContext& ctx); void SetOperationModeChangedNotification(Kernel::HLERequestContext& ctx); void SetOutOfFocusSuspendingEnabled(Kernel::HLERequestContext& ctx); void LockExit(Kernel::HLERequestContext& ctx); void UnlockExit(Kernel::HLERequestContext& ctx); void GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& ctx); void SetScreenShotImageOrientation(Kernel::HLERequestContext& ctx); void CreateManagedDisplayLayer(Kernel::HLERequestContext& ctx); void SetScreenShotPermission(Kernel::HLERequestContext& ctx); void SetHandlesRequestToDisplay(Kernel::HLERequestContext& ctx); void SetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx); void GetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx); std::shared_ptr nvflinger; Kernel::SharedPtr launchable_event; u32 idle_time_detection_extension = 0; }; class ICommonStateGetter final : public ServiceFramework { public: explicit ICommonStateGetter(std::shared_ptr msg_queue); ~ICommonStateGetter() override; private: enum class FocusState : u8 { InFocus = 1, NotInFocus = 2, }; enum class OperationMode : u8 { Handheld = 0, Docked = 1, }; void GetEventHandle(Kernel::HLERequestContext& ctx); void ReceiveMessage(Kernel::HLERequestContext& ctx); void GetCurrentFocusState(Kernel::HLERequestContext& ctx); void GetDefaultDisplayResolutionChangeEvent(Kernel::HLERequestContext& ctx); void GetOperationMode(Kernel::HLERequestContext& ctx); void GetPerformanceMode(Kernel::HLERequestContext& ctx); void GetBootMode(Kernel::HLERequestContext& ctx); void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx); Kernel::SharedPtr event; std::shared_ptr msg_queue; }; class IStorage final : public ServiceFramework { public: explicit IStorage(std::vector buffer); ~IStorage() override; const std::vector& GetData() const; private: void Open(Kernel::HLERequestContext& ctx); std::vector buffer; friend class IStorageAccessor; }; class IStorageAccessor final : public ServiceFramework { public: explicit IStorageAccessor(IStorage& backing); ~IStorageAccessor() override; private: void GetSize(Kernel::HLERequestContext& ctx); void Write(Kernel::HLERequestContext& ctx); void Read(Kernel::HLERequestContext& ctx); IStorage& backing; }; class ILibraryAppletCreator final : public ServiceFramework { public: ILibraryAppletCreator(); ~ILibraryAppletCreator() override; private: void CreateLibraryApplet(Kernel::HLERequestContext& ctx); void CreateStorage(Kernel::HLERequestContext& ctx); void CreateTransferMemoryStorage(Kernel::HLERequestContext& ctx); }; class IApplicationFunctions final : public ServiceFramework { public: IApplicationFunctions(); ~IApplicationFunctions() override; private: void PopLaunchParameter(Kernel::HLERequestContext& ctx); void CreateApplicationAndRequestToStartForQuest(Kernel::HLERequestContext& ctx); void EnsureSaveData(Kernel::HLERequestContext& ctx); void SetTerminateResult(Kernel::HLERequestContext& ctx); void GetDisplayVersion(Kernel::HLERequestContext& ctx); void GetDesiredLanguage(Kernel::HLERequestContext& ctx); void InitializeGamePlayRecording(Kernel::HLERequestContext& ctx); void SetGamePlayRecordingState(Kernel::HLERequestContext& ctx); void NotifyRunning(Kernel::HLERequestContext& ctx); void GetPseudoDeviceId(Kernel::HLERequestContext& ctx); void BeginBlockingHomeButtonShortAndLongPressed(Kernel::HLERequestContext& ctx); void EndBlockingHomeButtonShortAndLongPressed(Kernel::HLERequestContext& ctx); void BeginBlockingHomeButton(Kernel::HLERequestContext& ctx); void EndBlockingHomeButton(Kernel::HLERequestContext& ctx); void EnableApplicationCrashReport(Kernel::HLERequestContext& ctx); }; class IHomeMenuFunctions final : public ServiceFramework { public: IHomeMenuFunctions(); ~IHomeMenuFunctions() override; private: void RequestToGetForeground(Kernel::HLERequestContext& ctx); }; class IGlobalStateController final : public ServiceFramework { public: IGlobalStateController(); ~IGlobalStateController() override; }; class IApplicationCreator final : public ServiceFramework { public: IApplicationCreator(); ~IApplicationCreator() override; }; class IProcessWindingController final : public ServiceFramework { public: IProcessWindingController(); ~IProcessWindingController() override; }; /// Registers all AM services with the specified service manager. void InstallInterfaces(SM::ServiceManager& service_manager, std::shared_ptr nvflinger); } // namespace AM } // namespace Service