[hle/ui] Add cmds and fix invalid handle return, remove Starter applet from UI (#3376)

This fixes qlaunch "+ Options" :)

More:
- Remove Starter-Applet from menu (Starter is started by qlaunch)
- Stub OLSC cmds and add IStopperObject
- Fail-safe invalid handle return for system applets
- Stub IHomeMenuFunctions::IsSleepEnabled (closes qlaunch now when hitting sleep)
- Lower BuiltInNews timeout from 10s to 2s
- Use proper Event instead of KEvent in npns

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3376
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-committed-by: Maufeat <sahyno1996@gmail.com>
This commit is contained in:
Maufeat 2026-01-24 14:15:08 +01:00 committed by crueter
parent 29fad5a89e
commit ddbb6f2219
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
20 changed files with 210 additions and 62 deletions

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
@ -928,6 +928,8 @@ add_library(core STATIC
hle/service/olsc/olsc.h
hle/service/olsc/remote_storage_controller.cpp
hle/service/olsc/remote_storage_controller.h
hle/service/olsc/stopper_object.cpp
hle/service/olsc/stopper_object.h
hle/service/olsc/transfer_task_list_controller.cpp
hle/service/olsc/transfer_task_list_controller.h
hle/service/omm/omm.cpp

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
@ -9,7 +9,6 @@
#include "core/hle/kernel/k_event.h"
#include "core/hle/kernel/k_process.h"
#include "core/hle/kernel/k_scoped_resource_reservation.h"
#include "core/hle/kernel/kernel.h"
#include "core/hle/kernel/svc.h"
namespace Kernel::Svc {
@ -20,6 +19,20 @@ Result SignalEvent(Core::System& system, Handle event_handle) {
// Get the current handle table.
const KHandleTable& handle_table = GetCurrentProcess(system.Kernel()).GetHandleTable();
// Fail-safe for system applets
const auto program_id = GetCurrentProcess(system.Kernel()).GetProgramId();
if ((program_id & 0xFFFFFFFFFFFFFF00ull) == 0x0100000000001000ull) {
KScopedAutoObject event = handle_table.GetObject<KEvent>(event_handle);
if (event.IsNotNull()) {
event->Signal();
} else {
LOG_WARNING(Kernel_SVC, "SignalEvent best-effort unknown handle=0x{:08X} (ignored)",
event_handle);
}
R_SUCCEED();
}
// Get the event.
KScopedAutoObject event = handle_table.GetObject<KEvent>(event_handle);
R_UNLESS(event.IsNotNull(), ResultInvalidHandle);

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
@ -27,7 +27,7 @@ IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_, std::shared_ptr<Ap
{21, D<&IHomeMenuFunctions::GetPopFromGeneralChannelEvent>, "GetPopFromGeneralChannelEvent"},
{30, nullptr, "GetHomeButtonWriterLockAccessor"},
{31, nullptr, "GetWriterLockAccessorEx"},
{40, nullptr, "IsSleepEnabled"},
{40, D<&IHomeMenuFunctions::IsSleepEnabled>, "IsSleepEnabled"},
{41, D<&IHomeMenuFunctions::IsRebootEnabled>, "IsRebootEnabled"},
{50, nullptr, "LaunchSystemApplet"},
{51, nullptr, "LaunchStarter"},
@ -80,6 +80,12 @@ Result IHomeMenuFunctions::GetPopFromGeneralChannelEvent(
R_SUCCEED();
}
Result IHomeMenuFunctions::IsSleepEnabled(Out<bool> out_is_sleep_enbaled) {
LOG_INFO(Service_AM, "called");
*out_is_sleep_enbaled = false;
R_SUCCEED();
}
Result IHomeMenuFunctions::IsRebootEnabled(Out<bool> out_is_reboot_enbaled) {
LOG_INFO(Service_AM, "called");
*out_is_reboot_enbaled = true;

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
@ -29,6 +29,7 @@ private:
Result UnlockForeground();
Result PopFromGeneralChannel(Out<SharedPointer<IStorage>> out_storage);
Result GetPopFromGeneralChannelEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
Result IsSleepEnabled(Out<bool> out_is_sleep_enbaled);
Result IsRebootEnabled(Out<bool> out_is_reboot_enbaled);
Result IsForceTerminateApplicationDisabledForDebug(
Out<bool> out_is_force_terminate_application_disabled_for_debug);

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#include "core/hle/service/bcat/news/builtin_news.h"
@ -108,8 +108,8 @@ std::vector<u8> DownloadImage(const std::string& url_path, const std::filesystem
try {
httplib::Client cli("https://eden-emu.dev");
cli.set_follow_location(true);
cli.set_connection_timeout(std::chrono::seconds(10));
cli.set_read_timeout(std::chrono::seconds(30));
cli.set_connection_timeout(std::chrono::seconds(2));
cli.set_read_timeout(std::chrono::seconds(2));
#ifdef YUZU_BUNDLED_OPENSSL
cli.load_ca_cert_store(kCert, sizeof(kCert));

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
@ -18,7 +18,8 @@ namespace Service::NPNS {
class INpnsSystem final : public ServiceFramework<INpnsSystem> {
public:
explicit INpnsSystem(Core::System& system_)
: ServiceFramework{system_, "npns:s"}, service_context{system, "npns:s"} {
: ServiceFramework{system_, "npns:s"}, service_context{system, "npns:s"},
get_receive_event{service_context}, get_request_change_state_cancel_event{service_context} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "ListenAll"},
@ -91,16 +92,9 @@ public:
// clang-format on
RegisterHandlers(functions);
get_receive_event = service_context.CreateEvent("npns:s:GetReceiveEvent");
get_request_change_state_cancel_event =
service_context.CreateEvent("npns:s:GetRequestChangeStateCancelEvent");
}
~INpnsSystem() override {
service_context.CloseEvent(get_receive_event);
service_context.CloseEvent(get_request_change_state_cancel_event);
}
~INpnsSystem() override = default;
private:
Result ListenTo(u32 program_id) {
@ -111,7 +105,7 @@ private:
Result GetReceiveEvent(OutCopyHandle<Kernel::KReadableEvent> out_event) {
LOG_WARNING(Service_NPNS, "(STUBBED) called");
*out_event = &get_receive_event->GetReadableEvent();
*out_event = get_receive_event.GetHandle();
R_SUCCEED();
}
@ -141,20 +135,20 @@ private:
// TODO (jarrodnorwell)
*out_event = &get_request_change_state_cancel_event->GetReadableEvent();
*out_event = get_request_change_state_cancel_event.GetHandle();
R_SUCCEED();
}
KernelHelpers::ServiceContext service_context;
Kernel::KEvent* get_receive_event;
Kernel::KEvent* get_request_change_state_cancel_event;
Event get_receive_event;
Event get_request_change_state_cancel_event;
};
class INpnsUser final : public ServiceFramework<INpnsUser> {
public:
explicit INpnsUser(Core::System& system_)
: ServiceFramework{system_, "npns:u"}, service_context{system, "npns:u"} {
: ServiceFramework{system_, "npns:u"}, service_context{system, "npns:u"}, get_receive_event{service_context} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "ListenAll"},
@ -182,12 +176,6 @@ public:
// clang-format on
RegisterHandlers(functions);
get_receive_event = service_context.CreateEvent("npns:u:GetReceiveEvent");
}
~INpnsUser() override {
service_context.CloseEvent(get_receive_event);
}
private:
@ -203,12 +191,12 @@ private:
Result GetReceiveEvent(OutCopyHandle<Kernel::KReadableEvent> out_event) {
LOG_DEBUG(Service_NPNS, "called");
*out_event = &get_receive_event->GetReadableEvent();
*out_event = get_receive_event.GetHandle();
R_SUCCEED();
}
KernelHelpers::ServiceContext service_context;
Kernel::KEvent* get_receive_event;
Event get_receive_event;
};
void LoopProcess(Core::System& system) {

View File

@ -21,7 +21,7 @@ IDaemonController::IDaemonController(Core::System& system_)
{5, D<&IDaemonController::GetGlobalAutoDownloadSetting>, "GetGlobalAutoDownloadSetting"}, // 11.0.0+
{6, D<&IDaemonController::SetGlobalAutoDownloadSetting>, "SetGlobalAutoDownloadSetting"}, // 11.0.0+
{10, nullptr, "CreateForbiddenSaveDataInidication"},
{11, nullptr, "StopAutonomyTaskExecution"},
{11, D<&IDaemonController::StopAutonomyTaskExecution>, "StopAutonomyTaskExecution"},
{12, D<&IDaemonController::GetAutonomyTaskStatus>, "GetAutonomyTaskStatus"},
{13, nullptr, "Unknown13_20_0_0_Plus"}, // 20.0.0+
};
@ -92,6 +92,13 @@ Result IDaemonController::SetGlobalAutoDownloadSetting(bool is_enabled, Common::
R_SUCCEED();
}
Result IDaemonController::StopAutonomyTaskExecution(Out<SharedPointer<IStopperObject>> out_stopper) {
LOG_WARNING(Service_OLSC, "(STUBBED) called");
*out_stopper = std::make_shared<IStopperObject>(system);
R_SUCCEED();
}
Result IDaemonController::GetAutonomyTaskStatus(Out<u8> out_status, Common::UUID user_id) {
LOG_INFO(Service_OLSC, "called, user_id={}", user_id.FormattedString());

View File

@ -1,4 +1,3 @@
#pragma once
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
@ -9,6 +8,7 @@
#include "common/uuid.h"
#include "core/hle/service/cmif_types.h"
#include "core/hle/service/olsc/stopper_object.h"
#include "core/hle/service/service.h"
namespace Service::OLSC {
@ -32,6 +32,8 @@ private:
Result GetGlobalAutoDownloadSetting(Out<bool> out_is_enabled, Common::UUID user_id);
Result SetGlobalAutoDownloadSetting(bool is_enabled, Common::UUID user_id);
Result StopAutonomyTaskExecution(Out<SharedPointer<IStopperObject>> out_stopper);
Result GetAutonomyTaskStatus(Out<u8> out_status, Common::UUID user_id);
// Internal in-memory state to back the above APIs

View File

@ -1,13 +1,20 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/olsc/native_handle_holder.h"
#include "core/hle/kernel/k_event.h"
#include "core/hle/kernel/k_readable_event.h"
namespace Service::OLSC {
INativeHandleHolder::INativeHandleHolder(Core::System& system_)
: ServiceFramework{system_, "INativeHandleHolder"} {
: ServiceFramework{system_, "INativeHandleHolder"}, service_context{system_, "OLSC"} {
event = service_context.CreateEvent("OLSC::INativeHandleHolder");
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&INativeHandleHolder::GetNativeHandle>, "GetNativeHandle"},
@ -17,11 +24,19 @@ INativeHandleHolder::INativeHandleHolder(Core::System& system_)
RegisterHandlers(functions);
}
INativeHandleHolder::~INativeHandleHolder() = default;
INativeHandleHolder::~INativeHandleHolder() {
service_context.CloseEvent(event);
event = nullptr;
}
Result INativeHandleHolder::GetNativeHandle(OutCopyHandle<Kernel::KReadableEvent> out_event) {
LOG_WARNING(Service_OLSC, "(STUBBED) called");
*out_event = nullptr;
if (event) {
event->Signal();
*out_event = std::addressof(event->GetReadableEvent());
} else {
*out_event = nullptr;
}
R_SUCCEED();
}

View File

@ -1,11 +1,17 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "core/hle/service/cmif_types.h"
#include "core/hle/service/service.h"
#include "core/hle/service/kernel_helpers.h"
namespace Kernel {
class KReadableEvent;
class KEvent;
}
namespace Service::OLSC {
@ -17,6 +23,9 @@ public:
private:
Result GetNativeHandle(OutCopyHandle<Kernel::KReadableEvent> out_event);
Service::KernelHelpers::ServiceContext service_context;
Kernel::KEvent* event{};
};
} // namespace Service::OLSC

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
@ -28,7 +28,7 @@ IOlscServiceForSystemService::IOlscServiceForSystemService(Core::System& system_
{102, nullptr, "RemoveLastErrorInfoOld"},
{103, nullptr, "GetLastErrorInfo"},
{104, nullptr, "GetLastErrorEventHolder"},
{105, nullptr, "GetLastTransferTaskErrorInfo"},
{105, D<&IOlscServiceForSystemService::GetTransferTaskErrorInfo>, "GetTransferTaskErrorInfo"},
{200, D<&IOlscServiceForSystemService::GetDataTransferPolicy>, "GetDataTransferPolicy"},
{201, nullptr, "DeleteDataTransferPolicyCache"},
{202, nullptr, "Unknown202"},
@ -116,6 +116,24 @@ Result IOlscServiceForSystemService::GetDataTransferPolicy(
R_SUCCEED();
}
Result IOlscServiceForSystemService::GetTransferTaskErrorInfo(Out<TransferTaskErrorInfo> out_info,
Common::UUID uuid, u64 application_id) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, uuid={} application_id={:016X}",
uuid.FormattedString(), application_id);
TransferTaskErrorInfo info{};
info.uid = uuid;
info.application_id = application_id;
info.unknown_0x18 = 0;
info.reserved_0x19.fill(0);
info.unknown_0x20 = 0;
info.error_code = 0;
info.reserved_0x2C = 0;
*out_info = info;
R_SUCCEED();
}
Result IOlscServiceForSystemService::GetOlscServiceForSystemService(
Out<SharedPointer<IOlscServiceForSystemService>> out_interface) {
LOG_INFO(Service_OLSC, "called");

View File

@ -1,9 +1,12 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <array>
#include "common/uuid.h"
#include "core/hle/service/cmif_types.h"
#include "core/hle/service/service.h"
@ -18,6 +21,17 @@ struct DataTransferPolicy {
u8 download_policy;
};
struct TransferTaskErrorInfo {
Common::UUID uid;
u64 application_id;
u8 unknown_0x18;
std::array<u8, 7> reserved_0x19;
u64 unknown_0x20;
u32 error_code;
u32 reserved_0x2C;
};
static_assert(sizeof(TransferTaskErrorInfo) == 0x30, "TransferTaskErrorInfo has incorrect size.");
class IOlscServiceForSystemService final : public ServiceFramework<IOlscServiceForSystemService> {
public:
explicit IOlscServiceForSystemService(Core::System& system_);
@ -29,7 +43,9 @@ private:
Result GetRemoteStorageController(Out<SharedPointer<IRemoteStorageController>> out_interface);
Result GetDaemonController(Out<SharedPointer<IDaemonController>> out_interface);
Result GetDataTransferPolicy(Out<DataTransferPolicy> out_policy, u64 application_id);
Result GetOlscServiceForSystemService(Out<SharedPointer<IOlscServiceForSystemService>> out_interface);
Result GetTransferTaskErrorInfo(Out<TransferTaskErrorInfo> out_info, Common::UUID uid, u64 application_id);
Result GetOlscServiceForSystemService(
Out<SharedPointer<IOlscServiceForSystemService>> out_interface);
};
} // namespace Service::OLSC

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
@ -24,7 +24,7 @@ IRemoteStorageController::IRemoteStorageController(Core::System& system_)
{11, nullptr, "CreateDeleteDataTask"},
{12, nullptr, "DeleteSeriesInfo"},
{13, nullptr, "CreateRegisterNotificationTokenTask"},
{14, nullptr, "UpdateSeriesInfo"},
{14, D<&IRemoteStorageController::GetDataNewnessByApplicationId>, "GetDataNewnessByApplicationId"},
{15, nullptr, "RegisterUploadSaveDataTransferTaskForAutonomyRegistration"},
{16, nullptr, "CreateCleanupToDeleteSaveDataArchiveInfoTask"},
{17, nullptr, "ListDataInfo"},
@ -37,7 +37,7 @@ IRemoteStorageController::IRemoteStorageController(Core::System& system_)
{24, nullptr, "GetSecondarySaveDataInfo"},
{25, nullptr, "RegisterDownloadSaveDataTransferTaskForAutonomyRegistration"},
{26, nullptr, "Unknown26"}, //20.0.0+
{27, nullptr, "Unknown27"}, //20.0.0+
{27, D<&IRemoteStorageController::Unknown27>, "Unknown27"}, //20.0.0+
{28, nullptr, "Unknown28"}, //20.0.0+
{29, nullptr, "Unknown29"}, //21.0.0+
{800, nullptr, "Unknown800"}, //20.0.0+
@ -60,4 +60,17 @@ Result IRemoteStorageController::GetSecondarySave(Out<bool> out_has_secondary_sa
R_SUCCEED();
}
Result IRemoteStorageController::GetDataNewnessByApplicationId(Out<u8> out_newness,
u64 application_id) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, application_id={:016X}", application_id);
*out_newness = 0;
R_SUCCEED();
}
Result IRemoteStorageController::Unknown27(Out<std::array<u8, 0x38>> out_data, u64 application_id) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, application_id={:016X}", application_id);
out_data->fill(0);
R_SUCCEED();
}
} // namespace Service::OLSC

View File

@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@ -14,6 +17,8 @@ public:
private:
Result GetSecondarySave(Out<bool> out_has_secondary_save, Out<std::array<u64, 3>> out_unknown,
u64 application_id);
Result GetDataNewnessByApplicationId(Out<u8> out_newness, u64 application_id);
Result Unknown27(Out<std::array<u8, 0x38>> out_data, u64 application_id);
};
} // namespace Service::OLSC

View File

@ -0,0 +1,15 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/olsc/stopper_object.h"
namespace Service::OLSC {
IStopperObject::IStopperObject(Core::System& system_) : ServiceFramework{system_, "IStopperObject"} {
// TODO(Maufeat): If ever needed, add cmds
}
IStopperObject::~IStopperObject() = default;
} // namespace Service::OLSC

View File

@ -0,0 +1,17 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include "core/hle/service/cmif_types.h"
#include "core/hle/service/service.h"
namespace Service::OLSC {
class IStopperObject final : public ServiceFramework<IStopperObject> {
public:
explicit IStopperObject(Core::System& system_);
~IStopperObject() override;
};
} // namespace Service::OLSC

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
@ -6,6 +6,7 @@
#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/olsc/native_handle_holder.h"
#include "core/hle/service/olsc/stopper_object.h"
#include "core/hle/service/olsc/transfer_task_list_controller.h"
namespace Service::OLSC {
@ -22,7 +23,7 @@ ITransferTaskListController::ITransferTaskListController(Core::System& system_)
{5, D<&ITransferTaskListController::GetTransferTaskEndEventNativeHandleHolder>, "GetTransferTaskEndEventNativeHandleHolder"},
{6, nullptr, "GetTransferTaskProgressForOcean"},
{7, nullptr, "GetTransferTaskLastResultForOcean"},
{8, nullptr, "StopNextTransferTaskExecution"},
{8, D<&ITransferTaskListController::StopNextTransferTaskExecution>, "StopNextTransferTaskExecution"},
{9, D<&ITransferTaskListController::GetTransferTaskStartEventNativeHandleHolder>, "GetTransferTaskStartEventNativeHandleHolder"},
{10, nullptr, "SuspendTransferTaskForOcean"},
{11, nullptr, "GetCurrentTransferTaskInfoForOcean"},
@ -30,7 +31,7 @@ ITransferTaskListController::ITransferTaskListController(Core::System& system_)
{13, nullptr, "CancelCurrentRepairTransferTask"},
{14, nullptr, "GetRepairTransferTaskProgress"},
{15, nullptr, "EnsureExecutableForRepairTransferTask"},
{16, nullptr, "GetTransferTaskCount"},
{16, D<&ITransferTaskListController::GetTransferTaskCount>, "GetTransferTaskCount"},
{17, nullptr, "GetTransferTaskInfo"},
{18, nullptr, "ListTransferTaskInfo"},
{19, nullptr, "DeleteTransferTask"},
@ -38,8 +39,8 @@ ITransferTaskListController::ITransferTaskListController(Core::System& system_)
{21, nullptr, "GetTransferTaskProgress"},
{22, nullptr, "GetTransferTaskLastResult"},
{23, nullptr, "SuspendTransferTask"},
{24, nullptr, "GetCurrentTransferTaskInfo"},
{25, nullptr, "Unknown25"}, //20.1.0+
{24, D<&ITransferTaskListController::GetCurrentTransferTaskInfo>, "GetCurrentTransferTaskInfo"},
{25, D<&ITransferTaskListController::FindTransferTaskInfo>, "FindTransferTaskInfo"},
{26, nullptr, "Unknown26"}, //20.1.0+
{27, nullptr, "Unknown27"}, //20.1.0+
{28, nullptr, "Unknown28"}, //20.1.0+
@ -60,6 +61,13 @@ Result ITransferTaskListController::GetTransferTaskEndEventNativeHandleHolder(
R_SUCCEED();
}
Result ITransferTaskListController::StopNextTransferTaskExecution(
Out<SharedPointer<IStopperObject>> out_stopper) {
LOG_WARNING(Service_OLSC, "(STUBBED) called");
*out_stopper = std::make_shared<IStopperObject>(system);
R_SUCCEED();
}
Result ITransferTaskListController::GetTransferTaskStartEventNativeHandleHolder(
Out<SharedPointer<INativeHandleHolder>> out_holder) {
LOG_WARNING(Service_OLSC, "(STUBBED) called");
@ -67,4 +75,24 @@ Result ITransferTaskListController::GetTransferTaskStartEventNativeHandleHolder(
R_SUCCEED();
}
Result ITransferTaskListController::GetCurrentTransferTaskInfo(Out<std::array<u8, 0x30>> out_info,
u8 unknown) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, unknown={:#x}", unknown);
out_info->fill(0);
R_SUCCEED();
}
Result ITransferTaskListController::FindTransferTaskInfo(Out<std::array<u8, 0x30>> out_info,
InBuffer<BufferAttr_HipcAutoSelect> in) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, in_size={}", in.size());
out_info->fill(0);
R_SUCCEED();
}
Result ITransferTaskListController::GetTransferTaskCount(Out<u32> out_count, u8 unknown) {
LOG_WARNING(Service_OLSC, "(STUBBED) called, unknown={:#x}", unknown);
*out_count = 0;
R_SUCCEED();
}
} // namespace Service::OLSC

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
@ -10,6 +10,7 @@
namespace Service::OLSC {
class INativeHandleHolder;
class IStopperObject;
class ITransferTaskListController final : public ServiceFramework<ITransferTaskListController> {
public:
@ -19,6 +20,10 @@ public:
private:
Result GetTransferTaskEndEventNativeHandleHolder(Out<SharedPointer<INativeHandleHolder>> out_holder);
Result GetTransferTaskStartEventNativeHandleHolder(Out<SharedPointer<INativeHandleHolder>> out_holder);
Result StopNextTransferTaskExecution(Out<SharedPointer<IStopperObject>> out_stopper);
Result GetTransferTaskCount(Out<u32> out_count, u8 unknown);
Result GetCurrentTransferTaskInfo(Out<std::array<u8, 0x30>> out_info, u8 unknown);
Result FindTransferTaskInfo(Out<std::array<u8, 0x30>> out_info, InBuffer<BufferAttr_HipcAutoSelect> in);
};
} // namespace Service::OLSC

View File

@ -172,7 +172,6 @@
<addaction name="action_Launch_QLaunch"/>
<addaction name="action_Launch_MiiEdit"/>
<addaction name="action_Launch_Controller"/>
<addaction name="action_Launch_Setup"/>
<addaction name="action_Launch_PhotoViewer"/>
</widget>
<widget class="QMenu" name="menuTAS">
@ -508,14 +507,6 @@
<string>&amp;Home Menu</string>
</property>
</action>
<action name="action_Launch_Setup">
<property name="text">
<string>&amp;Setup</string>
</property>
<property name="menuRole">
<enum>QAction::MenuRole::TextHeuristicRole</enum>
</property>
</action>
<action name="action_Desktop">
<property name="text">
<string>&amp;Desktop</string>

View File

@ -1630,9 +1630,6 @@ void MainWindow::ConnectMenuEvents() {
connect_menu(ui->action_Launch_QLaunch, [this]{
LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::QLaunch), std::nullopt);
});
connect_menu(ui->action_Launch_Setup, [this]{
LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::Starter), std::nullopt);
});
// Tools (cabinet)
connect_menu(ui->action_Launch_Cabinet_Nickname_Owner, [this]{
LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::Cabinet), {Service::NFP::CabinetMode::StartNicknameAndOwnerSettings});