aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/service/olsc/daemon_controller.cpp
diff options
context:
space:
mode:
authorMaufeat <sahyno1996@gmail.com>2025-11-27 19:46:41 +0100
committercrueter <crueter@eden-emu.dev>2025-11-27 19:46:41 +0100
commitf58097e814ebb000f23acbe26f096c8c4368da73 (patch)
tree815402cc40eb6ce1f69cd977d411257c49f347ce /src/core/hle/service/olsc/daemon_controller.cpp
parent1efef853529074adc4c7c1b43bcd3288e4b43004 (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.cpp95
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();
}