diff options
| author | Maufeat <sahyno1996@gmail.com> | 2025-11-27 19:46:41 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-11-27 19:46:41 +0100 |
| commit | f58097e814ebb000f23acbe26f096c8c4368da73 (patch) | |
| tree | 815402cc40eb6ce1f69cd977d411257c49f347ce /src/core/hle/service/olsc/daemon_controller.cpp | |
| parent | 1efef853529074adc4c7c1b43bcd3288e4b43004 (diff) | |
[hle,display,overlay,starter,hid] add overlay functions, starter applet (initially), HID handheld for system applets and fw21 stubs (#3080)
Adds fully functional overlay display.
- Enable Overlay Applet via "View" -> "Enable Overlay Display Applet"
- Open the overlay by pressing the home button for over 1s
- Can adjust volume
- Can toggle airplane mode (if on WiFi, maybe if overlay is enabled pretend to be on WiFi?)
- Future TODO(?): Adjust Brightness implementation for host system
- Inputs are properly registered. e.g. if overlay open, application does not register inputs.
You can control volume and airplane mode outside of the emulator window
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3080
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-committed-by: Maufeat <sahyno1996@gmail.com>
Diffstat (limited to 'src/core/hle/service/olsc/daemon_controller.cpp')
| -rw-r--r-- | src/core/hle/service/olsc/daemon_controller.cpp | 95 |
1 files changed, 75 insertions, 20 deletions
diff --git a/src/core/hle/service/olsc/daemon_controller.cpp b/src/core/hle/service/olsc/daemon_controller.cpp index fe4252c24a..45f0f75b94 100644 --- a/src/core/hle/service/olsc/daemon_controller.cpp +++ b/src/core/hle/service/olsc/daemon_controller.cpp @@ -13,16 +13,17 @@ IDaemonController::IDaemonController(Core::System& system_) : ServiceFramework{system_, "IDaemonController"} { // clang-format off static const FunctionInfo functions[] = { - {0, D<&IDaemonController::GetAutoTransferEnabledForAccountAndApplication>, "GetAutoTransferEnabledForAccountAndApplication"}, - {1, nullptr, "SetAutoTransferEnabledForAccountAndApplication"}, - {2, nullptr, "GetGlobalUploadEnabledForAccount"}, - {3, nullptr, "SetGlobalUploadEnabledForAccount"}, - {4, nullptr, "TouchAccount"}, - {5, nullptr, "GetGlobalDownloadEnabledForAccount"}, - {6, nullptr, "SetGlobalDownloadEnabledForAccount"}, - {10, nullptr, "GetForbiddenSaveDataIndication"}, - {11, nullptr, "GetStopperObject"}, - {12, D<&IDaemonController::GetState>, "GetState"}, + {0, D<&IDaemonController::GetApplicationAutoTransferSetting>, "GetApplicationAutoTransferSetting"}, + {1, D<&IDaemonController::SetApplicationAutoTransferSetting>, "SetApplicationAutoTransferSetting"}, + {2, D<&IDaemonController::GetGlobalAutoUploadSetting>, "GetGlobalAutoUploadSetting"}, + {3, D<&IDaemonController::SetGlobalAutoUploadSetting>, "SetGlobalAutoUploadSetting"}, + {4, D<&IDaemonController::RunTransferTaskAutonomyRegistration>, "RunTransferTaskAutonomyRegistration"}, + {5, D<&IDaemonController::GetGlobalAutoDownloadSetting>, "GetGlobalAutoDownloadSetting"}, // 11.0.0+ + {6, D<&IDaemonController::SetGlobalAutoDownloadSetting>, "SetGlobalAutoDownloadSetting"}, // 11.0.0+ + {10, nullptr, "CreateForbiddenSaveDataInidication"}, + {11, nullptr, "StopAutonomyTaskExecution"}, + {12, D<&IDaemonController::GetAutonomyTaskStatus>, "GetAutonomyTaskStatus"}, + {13, nullptr, "Unknown13_20_0_0_Plus"}, // 20.0.0+ }; // clang-format on @@ -31,19 +32,73 @@ IDaemonController::IDaemonController(Core::System& system_) IDaemonController::~IDaemonController() = default; -Result IDaemonController::GetAutoTransferEnabledForAccountAndApplication(Out<bool> out_is_enabled, - Common::UUID user_id, - u64 application_id) { - LOG_WARNING(Service_OLSC, "(STUBBED) called, user_id={} application_id={:016X}", - user_id.FormattedString(), application_id); - *out_is_enabled = false; +Result IDaemonController::GetApplicationAutoTransferSetting(Out<bool> out_is_enabled, + Common::UUID user_id, + u64 application_id) { + LOG_INFO(Service_OLSC, "called, user_id={} application_id={:016X}", user_id.FormattedString(), + application_id); + AppKey key{user_id, application_id}; + const auto it = app_auto_transfer_.find(key); + *out_is_enabled = (it != app_auto_transfer_.end()) ? it->second : false; R_SUCCEED(); } -Result IDaemonController::GetState(Out<u8> state, Common::UUID user_id, u64 application_id) { - LOG_WARNING(Service_OLSC, "(STUBBED) called, user_id={} application_id={:016X}", - user_id.FormattedString(), application_id); - *state = 0; +Result IDaemonController::SetApplicationAutoTransferSetting(bool is_enabled, Common::UUID user_id, + u64 application_id) { + LOG_INFO(Service_OLSC, "called, user_id={} application_id={:016X} is_enabled={}", + user_id.FormattedString(), application_id, is_enabled); + AppKey key{user_id, application_id}; + app_auto_transfer_[key] = is_enabled; + R_SUCCEED(); +} + +Result IDaemonController::GetGlobalAutoUploadSetting(Out<bool> out_is_enabled, + Common::UUID user_id) { + LOG_INFO(Service_OLSC, "called, user_id={}", user_id.FormattedString()); + const auto it = global_auto_upload_.find(user_id); + *out_is_enabled = (it != global_auto_upload_.end()) ? it->second : false; + R_SUCCEED(); +} + +Result IDaemonController::SetGlobalAutoUploadSetting(bool is_enabled, Common::UUID user_id) { + LOG_INFO(Service_OLSC, "called, user_id={} is_enabled={}", user_id.FormattedString(), is_enabled); + global_auto_upload_[user_id] = is_enabled; + R_SUCCEED(); +} + +Result IDaemonController::RunTransferTaskAutonomyRegistration(Common::UUID user_id, + u64 application_id) { + LOG_INFO(Service_OLSC, "called, user_id={} application_id={:016X}", user_id.FormattedString(), + application_id); + // Simulate starting an autonomy task: set status to 1 (running) then back to 0 (idle) + AppKey key{user_id, application_id}; + autonomy_task_status_[key] = 1; // running + // TODO: In a real implementation this would be asynchronous. We'll immediately set to idle. + autonomy_task_status_[key] = 0; // idle + R_SUCCEED(); +} + +Result IDaemonController::GetGlobalAutoDownloadSetting(Out<bool> out_is_enabled, + Common::UUID user_id) { + LOG_INFO(Service_OLSC, "called, user_id={}", user_id.FormattedString()); + const auto it = global_auto_download_.find(user_id); + *out_is_enabled = (it != global_auto_download_.end()) ? it->second : false; + R_SUCCEED(); +} + +Result IDaemonController::SetGlobalAutoDownloadSetting(bool is_enabled, Common::UUID user_id) { + LOG_INFO(Service_OLSC, "called, user_id={} is_enabled={}", user_id.FormattedString(), is_enabled); + global_auto_download_[user_id] = is_enabled; + R_SUCCEED(); +} + +Result IDaemonController::GetAutonomyTaskStatus(Out<u8> out_state, Common::UUID user_id, + u64 application_id) { + LOG_INFO(Service_OLSC, "called, user_id={} application_id={:016X}", user_id.FormattedString(), + application_id); + AppKey key{user_id, application_id}; + const auto it = autonomy_task_status_.find(key); + *out_state = (it != autonomy_task_status_.end()) ? it->second : 0; // default idle R_SUCCEED(); } |
