Merge pull request #4328 from B3n30/remove_current_module
remove GetCurrentModule() functions in HLE Services
This commit is contained in:
		| @@ -246,7 +246,8 @@ void ConfigureSystem::setConfiguration() { | |||||||
|     ui->edit_init_time->setDateTime(date_time); |     ui->edit_init_time->setDateTime(date_time); | ||||||
|  |  | ||||||
|     if (!enabled) { |     if (!enabled) { | ||||||
|         cfg = Service::CFG::GetCurrentModule(); |         cfg = Service::CFG::GetModule(Core::System::GetInstance()); | ||||||
|  |         ASSERT_MSG(cfg, "CFG Module missing!"); | ||||||
|         ReadSystemSettings(); |         ReadSystemSettings(); | ||||||
|         ui->group_system_settings->setEnabled(false); |         ui->group_system_settings->setEnabled(false); | ||||||
|     } else { |     } else { | ||||||
|   | |||||||
| @@ -135,7 +135,10 @@ ValidationError SoftwareKeyboard::Finalize(const std::string& text, u8 button) { | |||||||
|  |  | ||||||
| void DefaultKeyboard::Setup(const Frontend::KeyboardConfig* config) { | void DefaultKeyboard::Setup(const Frontend::KeyboardConfig* config) { | ||||||
|     SoftwareKeyboard::Setup(config); |     SoftwareKeyboard::Setup(config); | ||||||
|     std::string username = Common::UTF16ToUTF8(Service::CFG::GetCurrentModule()->GetUsername()); |  | ||||||
|  |     auto cfg = Service::CFG::GetModule(Core::System::GetInstance()); | ||||||
|  |     ASSERT_MSG(cfg, "CFG Module missing!"); | ||||||
|  |     std::string username = Common::UTF16ToUTF8(cfg->GetUsername()); | ||||||
|     switch (this->config.button_config) { |     switch (this->config.button_config) { | ||||||
|     case ButtonConfig::None: |     case ButtonConfig::None: | ||||||
|     case ButtonConfig::Single: |     case ButtonConfig::Single: | ||||||
|   | |||||||
| @@ -69,7 +69,7 @@ static constexpr std::array<AppletTitleData, NumApplets> applet_titleids = {{ | |||||||
|     // TODO(Subv): Fill in the rest of the titleids |     // TODO(Subv): Fill in the rest of the titleids | ||||||
| }}; | }}; | ||||||
|  |  | ||||||
| static u64 GetTitleIdForApplet(AppletId id) { | static u64 GetTitleIdForApplet(AppletId id, u32 region_value) { | ||||||
|     ASSERT_MSG(id != AppletId::None, "Invalid applet id"); |     ASSERT_MSG(id != AppletId::None, "Invalid applet id"); | ||||||
|  |  | ||||||
|     auto itr = std::find_if(applet_titleids.begin(), applet_titleids.end(), |     auto itr = std::find_if(applet_titleids.begin(), applet_titleids.end(), | ||||||
| @@ -79,7 +79,7 @@ static u64 GetTitleIdForApplet(AppletId id) { | |||||||
|  |  | ||||||
|     ASSERT_MSG(itr != applet_titleids.end(), "Unknown applet id 0x{:#05X}", static_cast<u32>(id)); |     ASSERT_MSG(itr != applet_titleids.end(), "Unknown applet id 0x{:#05X}", static_cast<u32>(id)); | ||||||
|  |  | ||||||
|     return itr->title_ids[CFG::GetCurrentModule()->GetRegionValue()]; |     return itr->title_ids[region_value]; | ||||||
| } | } | ||||||
|  |  | ||||||
| AppletManager::AppletSlotData* AppletManager::GetAppletSlotData(AppletId id) { | AppletManager::AppletSlotData* AppletManager::GetAppletSlotData(AppletId id) { | ||||||
| @@ -327,8 +327,8 @@ ResultCode AppletManager::PrepareToStartLibraryApplet(AppletId applet_id) { | |||||||
|     // There are some problems with LLE applets. The rasterizer cache gets out of sync |     // There are some problems with LLE applets. The rasterizer cache gets out of sync | ||||||
|     // when the applet is closed. To avoid breaking applications because of the issue, |     // when the applet is closed. To avoid breaking applications because of the issue, | ||||||
|     // we are going to disable loading LLE applets before further fixes are done. |     // we are going to disable loading LLE applets before further fixes are done. | ||||||
|     //    auto process = NS::LaunchTitle(FS::MediaType::NAND, GetTitleIdForApplet(applet_id)); |     //    auto process = NS::LaunchTitle(FS::MediaType::NAND, GetTitleIdForApplet(applet_id, | ||||||
|     //    if (process) { |     //    region_value)); if (process) { | ||||||
|     //        return RESULT_SUCCESS; |     //        return RESULT_SUCCESS; | ||||||
|     //    } |     //    } | ||||||
|  |  | ||||||
| @@ -354,8 +354,8 @@ ResultCode AppletManager::PreloadLibraryApplet(AppletId applet_id) { | |||||||
|     // There are some problems with LLE applets. The rasterizer cache gets out of sync |     // There are some problems with LLE applets. The rasterizer cache gets out of sync | ||||||
|     // when the applet is closed. To avoid breaking applications because of the issue, |     // when the applet is closed. To avoid breaking applications because of the issue, | ||||||
|     // we are going to disable loading LLE applets before further fixes are done. |     // we are going to disable loading LLE applets before further fixes are done. | ||||||
|     //    auto process = NS::LaunchTitle(FS::MediaType::NAND, GetTitleIdForApplet(applet_id)); |     //    auto process = NS::LaunchTitle(FS::MediaType::NAND, GetTitleIdForApplet(applet_id, | ||||||
|     //    if (process) { |     //    region_value)); if (process) { | ||||||
|     //        return RESULT_SUCCESS; |     //        return RESULT_SUCCESS; | ||||||
|     //    } |     //    } | ||||||
|  |  | ||||||
| @@ -465,8 +465,12 @@ ResultVal<AppletManager::AppletInfo> AppletManager::GetAppletInfo(AppletId app_i | |||||||
|                           ErrorLevel::Status); |                           ErrorLevel::Status); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return MakeResult<AppletInfo>({GetTitleIdForApplet(app_id), Service::FS::MediaType::NAND, |     auto cfg = Service::CFG::GetModule(system); | ||||||
|                                    slot->registered, slot->loaded, slot->attributes.raw}); |     ASSERT_MSG(cfg, "CFG Module missing!"); | ||||||
|  |     u32 region_value = cfg->GetRegionValue(); | ||||||
|  |     return MakeResult<AppletInfo>({GetTitleIdForApplet(app_id, region_value), | ||||||
|  |                                    Service::FS::MediaType::NAND, slot->registered, slot->loaded, | ||||||
|  |                                    slot->attributes.raw}); | ||||||
| } | } | ||||||
|  |  | ||||||
| ResultCode AppletManager::PrepareToDoApplicationJump(u64 title_id, FS::MediaType media_type, | ResultCode AppletManager::PrepareToDoApplicationJump(u64 title_id, FS::MediaType media_type, | ||||||
| @@ -548,7 +552,10 @@ void AppletManager::EnsureHomeMenuLoaded() { | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     u64 menu_title_id = GetTitleIdForApplet(AppletId::HomeMenu); |     auto cfg = Service::CFG::GetModule(system); | ||||||
|  |     ASSERT_MSG(cfg, "CFG Module missing!"); | ||||||
|  |     u32 region_value = cfg->GetRegionValue(); | ||||||
|  |     u64 menu_title_id = GetTitleIdForApplet(AppletId::HomeMenu, region_value); | ||||||
|     auto process = NS::LaunchTitle(FS::MediaType::NAND, menu_title_id); |     auto process = NS::LaunchTitle(FS::MediaType::NAND, menu_title_id); | ||||||
|     if (!process) { |     if (!process) { | ||||||
|         LOG_WARNING(Service_APT, |         LOG_WARNING(Service_APT, | ||||||
|   | |||||||
| @@ -103,7 +103,9 @@ static u32 DecompressLZ11(const u8* in, u8* out) { | |||||||
|  |  | ||||||
| bool Module::LoadSharedFont() { | bool Module::LoadSharedFont() { | ||||||
|     u8 font_region_code; |     u8 font_region_code; | ||||||
|     switch (CFG::GetCurrentModule()->GetRegionValue()) { |     auto cfg = Service::CFG::GetModule(Core::System::GetInstance()); | ||||||
|  |     ASSERT_MSG(cfg, "CFG Module missing!"); | ||||||
|  |     switch (cfg->GetRegionValue()) { | ||||||
|     case 4: // CHN |     case 4: // CHN | ||||||
|         font_region_code = 2; |         font_region_code = 2; | ||||||
|         break; |         break; | ||||||
|   | |||||||
| @@ -22,8 +22,6 @@ | |||||||
|  |  | ||||||
| namespace Service::CAM { | namespace Service::CAM { | ||||||
|  |  | ||||||
| static std::weak_ptr<Module> current_cam; |  | ||||||
|  |  | ||||||
| // built-in resolution parameters | // built-in resolution parameters | ||||||
| constexpr std::array<Resolution, 8> PRESET_RESOLUTION{{ | constexpr std::array<Resolution, 8> PRESET_RESOLUTION{{ | ||||||
|     {640, 480, 0, 0, 639, 479},  // VGA |     {640, 480, 0, 0, 639, 479},  // VGA | ||||||
| @@ -200,6 +198,10 @@ Module::Interface::Interface(std::shared_ptr<Module> cam, const char* name, u32 | |||||||
|  |  | ||||||
| Module::Interface::~Interface() = default; | Module::Interface::~Interface() = default; | ||||||
|  |  | ||||||
|  | std::shared_ptr<Module> Module::Interface::GetModule() const { | ||||||
|  |     return cam; | ||||||
|  | } | ||||||
|  |  | ||||||
| void Module::Interface::StartCapture(Kernel::HLERequestContext& ctx) { | void Module::Interface::StartCapture(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp(ctx, 0x01, 1, 0); |     IPC::RequestParser rp(ctx, 0x01, 1, 0); | ||||||
|     const PortSet port_select(rp.Pop<u8>()); |     const PortSet port_select(rp.Pop<u8>()); | ||||||
| @@ -1050,15 +1052,16 @@ void Module::LoadCameraImplementation(CameraConfig& camera, int camera_id) { | |||||||
|     camera.impl->SetResolution(camera.contexts[0].resolution); |     camera.impl->SetResolution(camera.contexts[0].resolution); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ReloadCameraDevices() { | std::shared_ptr<Module> GetModule(Core::System& system) { | ||||||
|     if (auto cam = current_cam.lock()) |     auto cam = system.ServiceManager().GetService<Service::CAM::Module::Interface>("cam:u"); | ||||||
|         cam->ReloadCameraDevices(); |     if (!cam) | ||||||
|  |         return nullptr; | ||||||
|  |     return cam->GetModule(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system) { | void InstallInterfaces(Core::System& system) { | ||||||
|     auto& service_manager = system.ServiceManager(); |     auto& service_manager = system.ServiceManager(); | ||||||
|     auto cam = std::make_shared<Module>(); |     auto cam = std::make_shared<Module>(); | ||||||
|     current_cam = cam; |  | ||||||
|  |  | ||||||
|     std::make_shared<CAM_U>(cam)->InstallAsService(service_manager); |     std::make_shared<CAM_U>(cam)->InstallAsService(service_manager); | ||||||
|     std::make_shared<CAM_S>(cam)->InstallAsService(service_manager); |     std::make_shared<CAM_S>(cam)->InstallAsService(service_manager); | ||||||
|   | |||||||
| @@ -250,6 +250,8 @@ public: | |||||||
|         Interface(std::shared_ptr<Module> cam, const char* name, u32 max_session); |         Interface(std::shared_ptr<Module> cam, const char* name, u32 max_session); | ||||||
|         ~Interface(); |         ~Interface(); | ||||||
|  |  | ||||||
|  |         std::shared_ptr<Module> GetModule() const; | ||||||
|  |  | ||||||
|     protected: |     protected: | ||||||
|         /** |         /** | ||||||
|          * Starts capturing at the selected port. |          * Starts capturing at the selected port. | ||||||
| @@ -783,8 +785,7 @@ private: | |||||||
|     std::atomic<bool> is_camera_reload_pending{false}; |     std::atomic<bool> is_camera_reload_pending{false}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /// Reload camera devices. Used when input configuration changed | std::shared_ptr<Module> GetModule(Core::System& system); | ||||||
| void ReloadCameraDevices(); |  | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system); | void InstallInterfaces(Core::System& system); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -114,14 +114,6 @@ static const std::vector<u8> cfg_system_savedata_id = { | |||||||
|     0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x01, 0x00, |     0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x01, 0x00, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| static std::weak_ptr<Module> current_cfg; |  | ||||||
|  |  | ||||||
| std::shared_ptr<Module> GetCurrentModule() { |  | ||||||
|     auto cfg = current_cfg.lock(); |  | ||||||
|     ASSERT_MSG(cfg, "No CFG module running!"); |  | ||||||
|     return cfg; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Module::Interface::Interface(std::shared_ptr<Module> cfg, const char* name, u32 max_session) | Module::Interface::Interface(std::shared_ptr<Module> cfg, const char* name, u32 max_session) | ||||||
|     : ServiceFramework(name, max_session), cfg(std::move(cfg)) {} |     : ServiceFramework(name, max_session), cfg(std::move(cfg)) {} | ||||||
|  |  | ||||||
| @@ -145,6 +137,10 @@ void Module::Interface::GetCountryCodeString(Kernel::HLERequestContext& ctx) { | |||||||
|     rb.Push<u32>(country_codes[country_code_id]); |     rb.Push<u32>(country_codes[country_code_id]); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | std::shared_ptr<Module> Module::Interface::Interface::GetModule() const { | ||||||
|  |     return cfg; | ||||||
|  | } | ||||||
|  |  | ||||||
| void Module::Interface::GetCountryCodeID(Kernel::HLERequestContext& ctx) { | void Module::Interface::GetCountryCodeID(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp(ctx, 0x0A, 1, 0); |     IPC::RequestParser rp(ctx, 0x0A, 1, 0); | ||||||
|     u16 country_code = rp.Pop<u16>(); |     u16 country_code = rp.Pop<u16>(); | ||||||
| @@ -722,6 +718,13 @@ u64 Module::GetConsoleUniqueId() { | |||||||
|     return console_id_le; |     return console_id_le; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | std::shared_ptr<Module> GetModule(Core::System& system) { | ||||||
|  |     auto cfg = system.ServiceManager().GetService<Service::CFG::Module::Interface>("cfg:u"); | ||||||
|  |     if (!cfg) | ||||||
|  |         return nullptr; | ||||||
|  |     return cfg->GetModule(); | ||||||
|  | } | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system) { | void InstallInterfaces(Core::System& system) { | ||||||
|     auto& service_manager = system.ServiceManager(); |     auto& service_manager = system.ServiceManager(); | ||||||
|     auto cfg = std::make_shared<Module>(); |     auto cfg = std::make_shared<Module>(); | ||||||
| @@ -729,7 +732,6 @@ void InstallInterfaces(Core::System& system) { | |||||||
|     std::make_shared<CFG_S>(cfg)->InstallAsService(service_manager); |     std::make_shared<CFG_S>(cfg)->InstallAsService(service_manager); | ||||||
|     std::make_shared<CFG_U>(cfg)->InstallAsService(service_manager); |     std::make_shared<CFG_U>(cfg)->InstallAsService(service_manager); | ||||||
|     std::make_shared<CFG_NOR>()->InstallAsService(service_manager); |     std::make_shared<CFG_NOR>()->InstallAsService(service_manager); | ||||||
|     current_cfg = cfg; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| } // namespace Service::CFG | } // namespace Service::CFG | ||||||
|   | |||||||
| @@ -97,6 +97,8 @@ public: | |||||||
|         Interface(std::shared_ptr<Module> cfg, const char* name, u32 max_session); |         Interface(std::shared_ptr<Module> cfg, const char* name, u32 max_session); | ||||||
|         ~Interface(); |         ~Interface(); | ||||||
|  |  | ||||||
|  |         std::shared_ptr<Module> GetModule() const; | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * CFG::GetCountryCodeString service function |          * CFG::GetCountryCodeString service function | ||||||
|          *  Inputs: |          *  Inputs: | ||||||
| @@ -117,8 +119,6 @@ public: | |||||||
|          */ |          */ | ||||||
|         void GetCountryCodeID(Kernel::HLERequestContext& ctx); |         void GetCountryCodeID(Kernel::HLERequestContext& ctx); | ||||||
|  |  | ||||||
|         u32 GetRegionValue(); |  | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * CFG::SecureInfoGetRegion service function |          * CFG::SecureInfoGetRegion service function | ||||||
|          *  Inputs: |          *  Inputs: | ||||||
| @@ -411,7 +411,8 @@ private: | |||||||
|     u32 preferred_region_code = 0; |     u32 preferred_region_code = 0; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | std::shared_ptr<Module> GetModule(Core::System& system); | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system); | void InstallInterfaces(Core::System& system); | ||||||
| std::shared_ptr<Module> GetCurrentModule(); |  | ||||||
|  |  | ||||||
| } // namespace Service::CFG | } // namespace Service::CFG | ||||||
|   | |||||||
| @@ -21,8 +21,6 @@ | |||||||
|  |  | ||||||
| namespace Service::HID { | namespace Service::HID { | ||||||
|  |  | ||||||
| static std::weak_ptr<Module> current_module; |  | ||||||
|  |  | ||||||
| // Updating period for each HID device. These empirical values are measured from a 11.2 3DS. | // Updating period for each HID device. These empirical values are measured from a 11.2 3DS. | ||||||
| constexpr u64 pad_update_ticks = BASE_CLOCK_RATE_ARM11 / 234; | constexpr u64 pad_update_ticks = BASE_CLOCK_RATE_ARM11 / 234; | ||||||
| constexpr u64 accelerometer_update_ticks = BASE_CLOCK_RATE_ARM11 / 104; | constexpr u64 accelerometer_update_ticks = BASE_CLOCK_RATE_ARM11 / 104; | ||||||
| @@ -354,6 +352,10 @@ void Module::Interface::GetSoundVolume(Kernel::HLERequestContext& ctx) { | |||||||
| Module::Interface::Interface(std::shared_ptr<Module> hid, const char* name, u32 max_session) | Module::Interface::Interface(std::shared_ptr<Module> hid, const char* name, u32 max_session) | ||||||
|     : ServiceFramework(name, max_session), hid(std::move(hid)) {} |     : ServiceFramework(name, max_session), hid(std::move(hid)) {} | ||||||
|  |  | ||||||
|  | std::shared_ptr<Module> Module::Interface::GetModule() const { | ||||||
|  |     return hid; | ||||||
|  | } | ||||||
|  |  | ||||||
| Module::Module(Core::System& system) : system(system) { | Module::Module(Core::System& system) : system(system) { | ||||||
|     using namespace Kernel; |     using namespace Kernel; | ||||||
|  |  | ||||||
| @@ -388,9 +390,11 @@ void Module::ReloadInputDevices() { | |||||||
|     is_device_reload_pending.store(true); |     is_device_reload_pending.store(true); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ReloadInputDevices() { | std::shared_ptr<Module> GetModule(Core::System& system) { | ||||||
|     if (auto hid = current_module.lock()) |     auto hid = system.ServiceManager().GetService<Service::HID::Module::Interface>("hid:USER"); | ||||||
|         hid->ReloadInputDevices(); |     if (!hid) | ||||||
|  |         return nullptr; | ||||||
|  |     return hid->GetModule(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system) { | void InstallInterfaces(Core::System& system) { | ||||||
| @@ -398,7 +402,6 @@ void InstallInterfaces(Core::System& system) { | |||||||
|     auto hid = std::make_shared<Module>(system); |     auto hid = std::make_shared<Module>(system); | ||||||
|     std::make_shared<User>(hid)->InstallAsService(service_manager); |     std::make_shared<User>(hid)->InstallAsService(service_manager); | ||||||
|     std::make_shared<Spvr>(hid)->InstallAsService(service_manager); |     std::make_shared<Spvr>(hid)->InstallAsService(service_manager); | ||||||
|     current_module = hid; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| } // namespace Service::HID | } // namespace Service::HID | ||||||
|   | |||||||
| @@ -208,6 +208,8 @@ public: | |||||||
|     public: |     public: | ||||||
|         Interface(std::shared_ptr<Module> hid, const char* name, u32 max_session); |         Interface(std::shared_ptr<Module> hid, const char* name, u32 max_session); | ||||||
|  |  | ||||||
|  |         std::shared_ptr<Module> GetModule() const; | ||||||
|  |  | ||||||
|     protected: |     protected: | ||||||
|         /** |         /** | ||||||
|          * HID::GetIPCHandles service function |          * HID::GetIPCHandles service function | ||||||
| @@ -335,8 +337,7 @@ private: | |||||||
|     std::unique_ptr<Input::TouchDevice> touch_device; |     std::unique_ptr<Input::TouchDevice> touch_device; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system); | std::shared_ptr<Module> GetModule(Core::System& system); | ||||||
|  |  | ||||||
| /// Reload input devices. Used when input configuration changed | void InstallInterfaces(Core::System& system); | ||||||
| void ReloadInputDevices(); |  | ||||||
| } // namespace Service::HID | } // namespace Service::HID | ||||||
|   | |||||||
| @@ -12,28 +12,15 @@ | |||||||
|  |  | ||||||
| namespace Service::IR { | namespace Service::IR { | ||||||
|  |  | ||||||
| static std::weak_ptr<IR_RST> current_ir_rst; |  | ||||||
| static std::weak_ptr<IR_USER> current_ir_user; |  | ||||||
|  |  | ||||||
| void ReloadInputDevices() { |  | ||||||
|     if (auto ir_user = current_ir_user.lock()) |  | ||||||
|         ir_user->ReloadInputDevices(); |  | ||||||
|  |  | ||||||
|     if (auto ir_rst = current_ir_rst.lock()) |  | ||||||
|         ir_rst->ReloadInputDevices(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system) { | void InstallInterfaces(Core::System& system) { | ||||||
|     auto& service_manager = system.ServiceManager(); |     auto& service_manager = system.ServiceManager(); | ||||||
|     std::make_shared<IR_U>()->InstallAsService(service_manager); |     std::make_shared<IR_U>()->InstallAsService(service_manager); | ||||||
|  |  | ||||||
|     auto ir_user = std::make_shared<IR_USER>(); |     auto ir_user = std::make_shared<IR_USER>(); | ||||||
|     ir_user->InstallAsService(service_manager); |     ir_user->InstallAsService(service_manager); | ||||||
|     current_ir_user = ir_user; |  | ||||||
|  |  | ||||||
|     auto ir_rst = std::make_shared<IR_RST>(); |     auto ir_rst = std::make_shared<IR_RST>(); | ||||||
|     ir_rst->InstallAsService(service_manager); |     ir_rst->InstallAsService(service_manager); | ||||||
|     current_ir_rst = ir_rst; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| } // namespace Service::IR | } // namespace Service::IR | ||||||
|   | |||||||
| @@ -14,9 +14,6 @@ class ServiceManager; | |||||||
|  |  | ||||||
| namespace Service::IR { | namespace Service::IR { | ||||||
|  |  | ||||||
| /// Reload input devices. Used when input configuration changed |  | ||||||
| void ReloadInputDevices(); |  | ||||||
|  |  | ||||||
| void InstallInterfaces(Core::System& system); | void InstallInterfaces(Core::System& system); | ||||||
|  |  | ||||||
| } // namespace Service::IR | } // namespace Service::IR | ||||||
|   | |||||||
| @@ -143,7 +143,9 @@ void AppLoader_NCCH::ParseRegionLockoutInfo() { | |||||||
|             } |             } | ||||||
|             region_lockout >>= 1; |             region_lockout >>= 1; | ||||||
|         } |         } | ||||||
|         Service::CFG::GetCurrentModule()->SetPreferredRegionCodes(regions); |         auto cfg = Service::CFG::GetModule(Core::System::GetInstance()); | ||||||
|  |         ASSERT_MSG(cfg, "CFG Module missing!"); | ||||||
|  |         cfg->SetPreferredRegionCodes(regions); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,7 +6,8 @@ | |||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/gdbstub/gdbstub.h" | #include "core/gdbstub/gdbstub.h" | ||||||
| #include "core/hle/service/hid/hid.h" | #include "core/hle/service/hid/hid.h" | ||||||
| #include "core/hle/service/ir/ir.h" | #include "core/hle/service/ir/ir_rst.h" | ||||||
|  | #include "core/hle/service/ir/ir_user.h" | ||||||
| #include "core/settings.h" | #include "core/settings.h" | ||||||
| #include "video_core/renderer_base.h" | #include "video_core/renderer_base.h" | ||||||
| #include "video_core/video_core.h" | #include "video_core/video_core.h" | ||||||
| @@ -32,14 +33,29 @@ void Apply() { | |||||||
|  |  | ||||||
|     VideoCore::g_renderer_bg_color_update_requested = true; |     VideoCore::g_renderer_bg_color_update_requested = true; | ||||||
|  |  | ||||||
|     if (Core::System::GetInstance().IsPoweredOn()) { |     auto& system = Core::System::GetInstance(); | ||||||
|  |     if (system.IsPoweredOn()) { | ||||||
|         Core::DSP().SetSink(values.sink_id, values.audio_device_id); |         Core::DSP().SetSink(values.sink_id, values.audio_device_id); | ||||||
|         Core::DSP().EnableStretching(values.enable_audio_stretching); |         Core::DSP().EnableStretching(values.enable_audio_stretching); | ||||||
|  |  | ||||||
|  |         auto hid = Service::HID::GetModule(system); | ||||||
|  |         if (hid) { | ||||||
|  |             hid->ReloadInputDevices(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     Service::HID::ReloadInputDevices(); |         auto sm = system.ServiceManager(); | ||||||
|     Service::IR::ReloadInputDevices(); |         auto ir_user = sm.GetService<Service::IR::IR_USER>("ir:USER"); | ||||||
|     Service::CAM::ReloadCameraDevices(); |         if (ir_user) | ||||||
|  |             ir_user->ReloadInputDevices(); | ||||||
|  |         auto ir_rst = sm.GetService<Service::IR::IR_RST>("ir:rst"); | ||||||
|  |         if (ir_rst) | ||||||
|  |             ir_rst->ReloadInputDevices(); | ||||||
|  |  | ||||||
|  |         auto cam = Service::CAM::GetModule(system); | ||||||
|  |         if (cam) { | ||||||
|  |             cam->ReloadCameraDevices(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| template <typename T> | template <typename T> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user