mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	remove GetCurrentModule() functions in HLE Services
This commit is contained in:
		
							parent
							
								
									4ee914c7a8
								
							
						
					
					
						commit
						9d53136f20
					
				
					 14 changed files with 99 additions and 69 deletions
				
			
		|  | @ -246,7 +246,13 @@ 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(); | 
 | ||||||
|  |         auto cfg_interface = Core::System::GetInstance() | ||||||
|  |                                  .ServiceManager() | ||||||
|  |                                  .GetService<Service::CFG::Module::Interface>("cfg:u"); | ||||||
|  |         ASSERT_MSG(cfg_interface, "cfg:u not started!"); | ||||||
|  |         cfg = cfg_interface->GetModule(); | ||||||
|  |         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,14 @@ 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 = | ||||||
|  |         Core::System::GetInstance().ServiceManager().GetService<Service::CFG::Module::Interface>( | ||||||
|  |             "cfg:u"); | ||||||
|  |     ASSERT_MSG(cfg, "cfg:u not started!"); | ||||||
|  |     auto cfg_module = cfg->GetModule(); | ||||||
|  |     ASSERT_MSG(cfg_module, "CFG Module missing!"); | ||||||
|  |     std::string username = Common::UTF16ToUTF8(cfg_module->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,14 @@ ResultVal<AppletManager::AppletInfo> AppletManager::GetAppletInfo(AppletId app_i | ||||||
|                           ErrorLevel::Status); |                           ErrorLevel::Status); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return MakeResult<AppletInfo>({GetTitleIdForApplet(app_id), Service::FS::MediaType::NAND, |     auto cfg = system.ServiceManager().GetService<Service::CFG::Module::Interface>("cfg:u"); | ||||||
|                                    slot->registered, slot->loaded, slot->attributes.raw}); |     ASSERT_MSG(cfg, "cfg:u not started!"); | ||||||
|  |     auto cfg_module = cfg->GetModule(); | ||||||
|  |     ASSERT_MSG(cfg_module, "CFG Module missing!"); | ||||||
|  |     u32 region_value = cfg_module->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 +554,12 @@ void AppletManager::EnsureHomeMenuLoaded() { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     u64 menu_title_id = GetTitleIdForApplet(AppletId::HomeMenu); |     auto cfg = system.ServiceManager().GetService<Service::CFG::Module::Interface>("cfg:u"); | ||||||
|  |     ASSERT_MSG(cfg, "cfg:u not started!"); | ||||||
|  |     auto cfg_module = cfg->GetModule(); | ||||||
|  |     ASSERT_MSG(cfg_module, "CFG Module missing!"); | ||||||
|  |     u32 region_value = cfg_module->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, | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
| #include "common/common_paths.h" | #include "common/common_paths.h" | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
|  | #include "common/string_util.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/file_sys/archive_ncch.h" | #include "core/file_sys/archive_ncch.h" | ||||||
| #include "core/file_sys/file_backend.h" | #include "core/file_sys/file_backend.h" | ||||||
|  | @ -103,7 +104,14 @@ 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 = | ||||||
|  |         Core::System::GetInstance().ServiceManager().GetService<Service::CFG::Module::Interface>( | ||||||
|  |             "cfg:u"); | ||||||
|  |     ASSERT_MSG(cfg, "cfg:u not started!"); | ||||||
|  |     auto cfg_module = cfg->GetModule(); | ||||||
|  |     ASSERT_MSG(cfg_module, "CFG Module missing!"); | ||||||
|  |     std::string username = Common::UTF16ToUTF8(cfg_module->GetUsername()); | ||||||
|  |     switch (cfg_module->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,9 @@ void Module::LoadCameraImplementation(CameraConfig& camera, int camera_id) { | ||||||
|     camera.impl->SetResolution(camera.contexts[0].resolution); |     camera.impl->SetResolution(camera.contexts[0].resolution); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ReloadCameraDevices() { |  | ||||||
|     if (auto cam = current_cam.lock()) |  | ||||||
|         cam->ReloadCameraDevices(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 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,9 +785,6 @@ 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
 |  | ||||||
| void ReloadCameraDevices(); |  | ||||||
| 
 |  | ||||||
| void InstallInterfaces(Core::System& system); | void InstallInterfaces(Core::System& system); | ||||||
| 
 | 
 | ||||||
| } // namespace Service::CAM
 | } // namespace Service::CAM
 | ||||||
|  |  | ||||||
|  | @ -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::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>(); | ||||||
|  | @ -729,7 +725,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: | ||||||
|  | @ -412,6 +412,5 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 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,17 +390,11 @@ void Module::ReloadInputDevices() { | ||||||
|     is_device_reload_pending.store(true); |     is_device_reload_pending.store(true); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ReloadInputDevices() { |  | ||||||
|     if (auto hid = current_module.lock()) |  | ||||||
|         hid->ReloadInputDevices(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void InstallInterfaces(Core::System& system) { | void InstallInterfaces(Core::System& system) { | ||||||
|     auto& service_manager = system.ServiceManager(); |     auto& service_manager = system.ServiceManager(); | ||||||
|     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 | ||||||
|  | @ -336,7 +338,4 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void InstallInterfaces(Core::System& system); | void InstallInterfaces(Core::System& system); | ||||||
| 
 |  | ||||||
| /// Reload input devices. Used when input configuration changed
 |  | ||||||
| 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
 | ||||||
|  |  | ||||||
|  | @ -144,7 +144,13 @@ void AppLoader_NCCH::ParseRegionLockoutInfo() { | ||||||
|             } |             } | ||||||
|             region_lockout >>= 1; |             region_lockout >>= 1; | ||||||
|         } |         } | ||||||
|         Service::CFG::GetCurrentModule()->SetPreferredRegionCodes(regions); |         auto cfg = Core::System::GetInstance() | ||||||
|  |                        .ServiceManager() | ||||||
|  |                        .GetService<Service::CFG::Module::Interface>("cfg:u"); | ||||||
|  |         ASSERT_MSG(cfg, "cfg:u not started!"); | ||||||
|  |         auto cfg_module = cfg->GetModule(); | ||||||
|  |         ASSERT_MSG(cfg_module, "CFG Module missing!"); | ||||||
|  |         cfg_module->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,37 @@ 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); | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     Service::HID::ReloadInputDevices(); |         auto& sm = system.ServiceManager(); | ||||||
|     Service::IR::ReloadInputDevices(); | 
 | ||||||
|     Service::CAM::ReloadCameraDevices(); |         auto hid = sm.GetService<Service::HID::Module::Interface>("hid:USER"); | ||||||
|  |         if (hid) { | ||||||
|  |             auto hid_module = hid->GetModule(); | ||||||
|  |             if (hid_module) { | ||||||
|  |                 hid_module->ReloadInputDevices(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         auto ir_user = sm.GetService<Service::IR::IR_USER>("ir:USER"); | ||||||
|  |         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 = sm.GetService<Service::CAM::Module::Interface>("cam:u"); | ||||||
|  |         if (cam) { | ||||||
|  |             auto cam_module = cam->GetModule(); | ||||||
|  |             if (cam_module) { | ||||||
|  |                 cam_module->ReloadCameraDevices(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <typename T> | template <typename T> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue