From 335127af6921ce298a6dd63682895768c6b06e86 Mon Sep 17 00:00:00 2001 From: David Marcec Date: Sun, 16 Jun 2019 19:06:33 +1000 Subject: Impl'd IsUserAccountSwitchLocked, SetAudioOutVolume, GetAudioOutVolume & Partial impl of GetAccumulatedSuspendedTickChangedEvent IPC-100 was changed to InitializeApplicationInfoOld instead of InitializeApplicationInfo. IPC-150 makes an indentical call to IPC-100 however does extra processing. They should not have the same name as it's quite confusing to debug. --- src/core/file_sys/control_metadata.cpp | 4 ++++ src/core/file_sys/control_metadata.h | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/core/file_sys') diff --git a/src/core/file_sys/control_metadata.cpp b/src/core/file_sys/control_metadata.cpp index 04da30825..735526b1c 100644 --- a/src/core/file_sys/control_metadata.cpp +++ b/src/core/file_sys/control_metadata.cpp @@ -87,6 +87,10 @@ u64 NACP::GetDefaultJournalSaveSize() const { return raw.user_account_save_data_journal_size; } +bool NACP::GetUserAccountSwitchLock() const { + return raw.user_account_switch_lock == 1; +} + u32 NACP::GetSupportedLanguages() const { return raw.supported_languages; } diff --git a/src/core/file_sys/control_metadata.h b/src/core/file_sys/control_metadata.h index 1be34ed55..2d8c251ac 100644 --- a/src/core/file_sys/control_metadata.h +++ b/src/core/file_sys/control_metadata.h @@ -30,7 +30,8 @@ struct RawNACP { std::array language_entries; std::array isbn; u8 startup_user_account; - INSERT_PADDING_BYTES(2); + u8 user_account_switch_lock; + u8 addon_content_registration_type; u32_le application_attribute; u32_le supported_languages; u32_le parental_control; @@ -111,6 +112,7 @@ public: u64 GetDefaultJournalSaveSize() const; u32 GetSupportedLanguages() const; std::vector GetRawBytes() const; + bool GetUserAccountSwitchLock() const; private: RawNACP raw{}; -- cgit v1.2.3 From 6ca20ad7ba594fd01c01e8d56e5e02d84609d9e1 Mon Sep 17 00:00:00 2001 From: David Marcec Date: Mon, 17 Jun 2019 08:17:26 +1000 Subject: Addressed issues --- src/core/file_sys/control_metadata.cpp | 2 +- src/core/hle/service/acc/acc.cpp | 17 +++++++++++------ src/core/hle/service/acc/acc.h | 2 +- src/core/hle/service/service.cpp | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) (limited to 'src/core/file_sys') diff --git a/src/core/file_sys/control_metadata.cpp b/src/core/file_sys/control_metadata.cpp index 735526b1c..f155a1341 100644 --- a/src/core/file_sys/control_metadata.cpp +++ b/src/core/file_sys/control_metadata.cpp @@ -88,7 +88,7 @@ u64 NACP::GetDefaultJournalSaveSize() const { } bool NACP::GetUserAccountSwitchLock() const { - return raw.user_account_switch_lock == 1; + return raw.user_account_switch_lock != 0; } u32 NACP::GetSupportedLanguages() const { diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index f02f54f91..025714e5a 100644 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp @@ -243,6 +243,8 @@ void Module::Interface::IsUserAccountSwitchLocked(Kernel::HLERequestContext& ctx if (nacp_unique != nullptr) { is_locked = nacp_unique->GetUserAccountSwitchLock(); + } else { + LOG_ERROR(Service_ACC, "nacp_unique is null!"); } } else { is_locked = nacp.GetUserAccountSwitchLock(); @@ -285,15 +287,18 @@ Module::Interface::Interface(std::shared_ptr module, Module::Interface::~Interface() = default; -void InstallInterfaces(SM::ServiceManager& service_manager) { +void InstallInterfaces(Core::System& system) { auto module = std::make_shared(); auto profile_manager = std::make_shared(); - Core::System& system = Core::System::GetInstance(); - std::make_shared(module, profile_manager, system)->InstallAsService(service_manager); - std::make_shared(module, profile_manager, system)->InstallAsService(service_manager); - std::make_shared(module, profile_manager, system)->InstallAsService(service_manager); - std::make_shared(module, profile_manager, system)->InstallAsService(service_manager); + std::make_shared(module, profile_manager, system) + ->InstallAsService(system.ServiceManager()); + std::make_shared(module, profile_manager, system) + ->InstallAsService(system.ServiceManager()); + std::make_shared(module, profile_manager, system) + ->InstallAsService(system.ServiceManager()); + std::make_shared(module, profile_manager, system) + ->InstallAsService(system.ServiceManager()); } } // namespace Service::Account diff --git a/src/core/hle/service/acc/acc.h b/src/core/hle/service/acc/acc.h index 47a7c46d7..350f123a0 100644 --- a/src/core/hle/service/acc/acc.h +++ b/src/core/hle/service/acc/acc.h @@ -39,6 +39,6 @@ public: }; /// Registers all ACC services with the specified service manager. -void InstallInterfaces(SM::ServiceManager& service_manager); +void InstallInterfaces(Core::System& system); } // namespace Service::Account diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 00806b0ed..6c69f899e 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp @@ -200,7 +200,7 @@ void Init(std::shared_ptr& sm, Core::System& system, SM::ServiceManager::InstallInterfaces(sm); - Account::InstallInterfaces(*sm); + Account::InstallInterfaces(system); AM::InstallInterfaces(*sm, nv_flinger); AOC::InstallInterfaces(*sm); APM::InstallInterfaces(*sm); -- cgit v1.2.3