Qlauncher firmware 19
This commit is contained in:
parent
d6eff706f2
commit
b66ebe638b
15 changed files with 288 additions and 67 deletions
|
@ -99,6 +99,7 @@ public:
|
||||||
{140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+
|
{140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+
|
||||||
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
||||||
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
||||||
|
{143, D<&IManagerForSystemService::GetNetworkServiceLicenseCacheEx>, "GetNetworkServiceLicenseCacheEx"}, // 15.0.0+
|
||||||
{150, nullptr, "CreateAuthorizationRequest"},
|
{150, nullptr, "CreateAuthorizationRequest"},
|
||||||
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
|
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
|
||||||
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
|
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
|
||||||
|
@ -122,6 +123,14 @@ private:
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result GetNetworkServiceLicenseCacheEx() {
|
||||||
|
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
|
R_RETURN(ResultUnknown);
|
||||||
|
}
|
||||||
|
|
||||||
Common::UUID account_id;
|
Common::UUID account_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -318,30 +327,73 @@ public:
|
||||||
explicit IProfileCommon(Core::System& system_, const char* name, bool editor_commands,
|
explicit IProfileCommon(Core::System& system_, const char* name, bool editor_commands,
|
||||||
Common::UUID user_id_, ProfileManager& profile_manager_)
|
Common::UUID user_id_, ProfileManager& profile_manager_)
|
||||||
: ServiceFramework{system_, name}, profile_manager{profile_manager_}, user_id{user_id_} {
|
: ServiceFramework{system_, name}, profile_manager{profile_manager_}, user_id{user_id_} {
|
||||||
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IProfileCommon::Get, "Get"},
|
{0, &IProfileCommon::Get, "Get"},
|
||||||
{1, &IProfileCommon::GetBase, "GetBase"},
|
{1, &IProfileCommon::GetBase, "GetBase"},
|
||||||
{10, &IProfileCommon::GetImageSize, "GetImageSize"},
|
{10, &IProfileCommon::GetImageSize, "GetImageSize"},
|
||||||
{11, &IProfileCommon::LoadImage, "LoadImage"},
|
{11, &IProfileCommon::LoadImage, "LoadImage"},
|
||||||
{20, nullptr, "GetLargeImageSize"}, // 18.0.0+
|
{20, &IProfileCommon::Unknown20, "Unknown20"},
|
||||||
{21, nullptr, "LoadLargeImage"}, // 18.0.0+
|
{21, &IProfileCommon::Unknown21, "Unknown21"},
|
||||||
{30, nullptr, "GetImageId"} // 18.0.0+
|
{30, &IProfileCommon::Unknown30, "Unknown30"}
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
if (editor_commands) {
|
if (editor_commands) {
|
||||||
|
// clang-format off
|
||||||
static const FunctionInfo editor_functions[] = {
|
static const FunctionInfo editor_functions[] = {
|
||||||
{100, &IProfileCommon::Store, "Store"},
|
{100, &IProfileCommon::Store, "Store"},
|
||||||
{101, &IProfileCommon::StoreWithImage, "StoreWithImage"},
|
{101, &IProfileCommon::StoreWithImage, "StoreWithImage"},
|
||||||
{110, nullptr, "StoreWithLargeImage"} // 18.0.0+
|
{110, &IProfileCommon::Unknown110, "Unknown110"}
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
RegisterHandlers(editor_functions);
|
RegisterHandlers(editor_functions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void Unknown20(HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
// inbytes: 0x0, outbytes: 0x4
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Unknown21(HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
// buffers: [0x6], inbytes: 0x0, outbytes: 0x4
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Unknown30(HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
// inbytes: 0x0, outbytes: 0x10
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Unknown110(HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
// buffer_entry_sizes: [0x80, 0x0], buffers: [0x19, 0x5], inbytes: 0x38, outbytes: 0x0
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void Get(HLERequestContext& ctx) {
|
void Get(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString());
|
LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString());
|
||||||
ProfileBase profile_base{};
|
ProfileBase profile_base{};
|
||||||
|
@ -1020,6 +1072,29 @@ void Module::Interface::StoreSaveDataThumbnail(HLERequestContext& ctx, const Com
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Module::Interface::TrySelectUserWithoutInteractionDeprecated(HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_ACC, "called");
|
||||||
|
// A u8 is passed into this function which we can safely ignore. It's to determine if we have
|
||||||
|
// access to use the network or not by the looks of it
|
||||||
|
IPC::ResponseBuilder rb{ctx, 6};
|
||||||
|
if (profile_manager->GetUserCount() != 1) {
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushRaw(Common::InvalidUUID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto user_list = profile_manager->GetAllUsers();
|
||||||
|
if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) {
|
||||||
|
rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code
|
||||||
|
rb.PushRaw(Common::InvalidUUID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select the first user we have
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushRaw(profile_manager->GetUser(0)->uuid);
|
||||||
|
}
|
||||||
|
|
||||||
void Module::Interface::TrySelectUserWithoutInteraction(HLERequestContext& ctx) {
|
void Module::Interface::TrySelectUserWithoutInteraction(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_ACC, "called");
|
LOG_DEBUG(Service_ACC, "called");
|
||||||
// A u8 is passed into this function which we can safely ignore. It's to determine if we have
|
// A u8 is passed into this function which we can safely ignore. It's to determine if we have
|
||||||
|
@ -1046,8 +1121,8 @@ void Module::Interface::TrySelectUserWithoutInteraction(HLERequestContext& ctx)
|
||||||
Module::Interface::Interface(std::shared_ptr<Module> module_,
|
Module::Interface::Interface(std::shared_ptr<Module> module_,
|
||||||
std::shared_ptr<ProfileManager> profile_manager_,
|
std::shared_ptr<ProfileManager> profile_manager_,
|
||||||
Core::System& system_, const char* name)
|
Core::System& system_, const char* name)
|
||||||
: ServiceFramework{system_, name}, module{std::move(module_)}, profile_manager{std::move(
|
: ServiceFramework{system_, name}, module{std::move(module_)},
|
||||||
profile_manager_)} {}
|
profile_manager{std::move(profile_manager_)} {}
|
||||||
|
|
||||||
Module::Interface::~Interface() = default;
|
Module::Interface::~Interface() = default;
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ public:
|
||||||
void InitializeApplicationInfoRestricted(HLERequestContext& ctx);
|
void InitializeApplicationInfoRestricted(HLERequestContext& ctx);
|
||||||
void GetBaasAccountManagerForApplication(HLERequestContext& ctx);
|
void GetBaasAccountManagerForApplication(HLERequestContext& ctx);
|
||||||
void IsUserRegistrationRequestPermitted(HLERequestContext& ctx);
|
void IsUserRegistrationRequestPermitted(HLERequestContext& ctx);
|
||||||
|
void TrySelectUserWithoutInteractionDeprecated(HLERequestContext& ctx);
|
||||||
void TrySelectUserWithoutInteraction(HLERequestContext& ctx);
|
void TrySelectUserWithoutInteraction(HLERequestContext& ctx);
|
||||||
void IsUserAccountSwitchLocked(HLERequestContext& ctx);
|
void IsUserAccountSwitchLocked(HLERequestContext& ctx);
|
||||||
void InitializeApplicationInfoV2(HLERequestContext& ctx);
|
void InitializeApplicationInfoV2(HLERequestContext& ctx);
|
||||||
|
|
|
@ -18,7 +18,8 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
|
||||||
{5, &ACC_SU::GetProfile, "GetProfile"},
|
{5, &ACC_SU::GetProfile, "GetProfile"},
|
||||||
{6, nullptr, "GetProfileDigest"},
|
{6, nullptr, "GetProfileDigest"},
|
||||||
{50, &ACC_SU::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"},
|
{50, &ACC_SU::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"},
|
||||||
{51, &ACC_SU::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"},
|
{51, &ACC_SU::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"},
|
||||||
|
{52, &ACC_SU::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, // 19.0.0+
|
||||||
{60, &ACC_SU::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"},
|
{60, &ACC_SU::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"},
|
||||||
{99, nullptr, "DebugActivateOpenContextRetention"},
|
{99, nullptr, "DebugActivateOpenContextRetention"},
|
||||||
{100, nullptr, "GetUserRegistrationNotifier"},
|
{100, nullptr, "GetUserRegistrationNotifier"},
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/hle/service/am/applet_manager.h"
|
#include "core/hle/service/am/applet_manager.h"
|
||||||
#include "core/hle/service/am/service/all_system_applet_proxies_service.h"
|
#include "core/hle/service/am/service/all_system_applet_proxies_service.h"
|
||||||
|
#include "core/hle/service/am/service/application_proxy.h"
|
||||||
#include "core/hle/service/am/service/library_applet_proxy.h"
|
#include "core/hle/service/am/service/library_applet_proxy.h"
|
||||||
#include "core/hle/service/am/service/system_applet_proxy.h"
|
#include "core/hle/service/am/service/system_applet_proxy.h"
|
||||||
#include "core/hle/service/am/window_system.h"
|
#include "core/hle/service/am/window_system.h"
|
||||||
|
@ -20,9 +21,10 @@ IAllSystemAppletProxiesService::IAllSystemAppletProxiesService(Core::System& sys
|
||||||
{200, D<&IAllSystemAppletProxiesService::OpenLibraryAppletProxyOld>, "OpenLibraryAppletProxyOld"},
|
{200, D<&IAllSystemAppletProxiesService::OpenLibraryAppletProxyOld>, "OpenLibraryAppletProxyOld"},
|
||||||
{201, D<&IAllSystemAppletProxiesService::OpenLibraryAppletProxy>, "OpenLibraryAppletProxy"},
|
{201, D<&IAllSystemAppletProxiesService::OpenLibraryAppletProxy>, "OpenLibraryAppletProxy"},
|
||||||
{300, nullptr, "OpenOverlayAppletProxy"},
|
{300, nullptr, "OpenOverlayAppletProxy"},
|
||||||
{350, nullptr, "OpenSystemApplicationProxy"},
|
{350, D<&IAllSystemAppletProxiesService::OpenSystemApplicationProxy>, "OpenSystemApplicationProxy"},
|
||||||
{400, nullptr, "CreateSelfLibraryAppletCreatorForDevelop"},
|
{400, nullptr, "CreateSelfLibraryAppletCreatorForDevelop"},
|
||||||
{410, nullptr, "GetSystemAppletControllerForDebug"},
|
{410, nullptr, "GetSystemAppletControllerForDebug"},
|
||||||
|
{450, D<&IAllSystemAppletProxiesService::GetSystemProcessCommonFunctions>, "GetSystemProcessCommonFunctions"}, // 19.0.0+
|
||||||
{1000, nullptr, "GetDebugFunctions"},
|
{1000, nullptr, "GetDebugFunctions"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
@ -63,6 +65,22 @@ Result IAllSystemAppletProxiesService::OpenLibraryAppletProxy(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result IAllSystemAppletProxiesService::OpenSystemApplicationProxy(
|
||||||
|
Out<SharedPointer<IApplicationProxy>> out_system_application_proxy, ClientProcessId pid,
|
||||||
|
InCopyHandle<Kernel::KProcess> process_handle,
|
||||||
|
InLargeData<AppletAttribute, BufferAttr_HipcMapAlias> attribute) {
|
||||||
|
LOG_DEBUG(Service_AM, "called");
|
||||||
|
|
||||||
|
if (const auto applet = this->GetAppletFromProcessId(pid); applet) {
|
||||||
|
*out_system_application_proxy = std::make_shared<IApplicationProxy>(
|
||||||
|
system, applet, process_handle.Get(), m_window_system);
|
||||||
|
R_SUCCEED();
|
||||||
|
} else {
|
||||||
|
UNIMPLEMENTED();
|
||||||
|
R_THROW(ResultUnknown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Result IAllSystemAppletProxiesService::OpenLibraryAppletProxyOld(
|
Result IAllSystemAppletProxiesService::OpenLibraryAppletProxyOld(
|
||||||
Out<SharedPointer<ILibraryAppletProxy>> out_library_applet_proxy, ClientProcessId pid,
|
Out<SharedPointer<ILibraryAppletProxy>> out_library_applet_proxy, ClientProcessId pid,
|
||||||
InCopyHandle<Kernel::KProcess> process_handle) {
|
InCopyHandle<Kernel::KProcess> process_handle) {
|
||||||
|
@ -73,6 +91,14 @@ Result IAllSystemAppletProxiesService::OpenLibraryAppletProxyOld(
|
||||||
this->OpenLibraryAppletProxy(out_library_applet_proxy, pid, process_handle, attribute));
|
this->OpenLibraryAppletProxy(out_library_applet_proxy, pid, process_handle, attribute));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result IAllSystemAppletProxiesService::GetSystemProcessCommonFunctions() {
|
||||||
|
LOG_DEBUG(Service_AM, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<Applet> IAllSystemAppletProxiesService::GetAppletFromProcessId(
|
std::shared_ptr<Applet> IAllSystemAppletProxiesService::GetAppletFromProcessId(
|
||||||
ProcessId process_id) {
|
ProcessId process_id) {
|
||||||
return m_window_system.GetByAppletResourceUserId(process_id.pid);
|
return m_window_system.GetByAppletResourceUserId(process_id.pid);
|
||||||
|
|
|
@ -12,6 +12,7 @@ namespace AM {
|
||||||
|
|
||||||
struct Applet;
|
struct Applet;
|
||||||
struct AppletAttribute;
|
struct AppletAttribute;
|
||||||
|
class IApplicationProxy;
|
||||||
class ILibraryAppletProxy;
|
class ILibraryAppletProxy;
|
||||||
class ISystemAppletProxy;
|
class ISystemAppletProxy;
|
||||||
class WindowSystem;
|
class WindowSystem;
|
||||||
|
@ -33,6 +34,11 @@ private:
|
||||||
Result OpenLibraryAppletProxyOld(
|
Result OpenLibraryAppletProxyOld(
|
||||||
Out<SharedPointer<ILibraryAppletProxy>> out_library_applet_proxy, ClientProcessId pid,
|
Out<SharedPointer<ILibraryAppletProxy>> out_library_applet_proxy, ClientProcessId pid,
|
||||||
InCopyHandle<Kernel::KProcess> process_handle);
|
InCopyHandle<Kernel::KProcess> process_handle);
|
||||||
|
Result OpenSystemApplicationProxy(
|
||||||
|
Out<SharedPointer<IApplicationProxy>> out_system_application_proxy, ClientProcessId pid,
|
||||||
|
InCopyHandle<Kernel::KProcess> process_handle,
|
||||||
|
InLargeData<AppletAttribute, BufferAttr_HipcMapAlias> attribute);
|
||||||
|
Result GetSystemProcessCommonFunctions();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<Applet> GetAppletFromProcessId(ProcessId pid);
|
std::shared_ptr<Applet> GetAppletFromProcessId(ProcessId pid);
|
||||||
|
|
|
@ -57,6 +57,7 @@ IAudioController::IAudioController(Core::System& system_)
|
||||||
{40, nullptr, "GetSystemInformationForDebug"},
|
{40, nullptr, "GetSystemInformationForDebug"},
|
||||||
{41, nullptr, "SetVolumeButtonLongPressTime"},
|
{41, nullptr, "SetVolumeButtonLongPressTime"},
|
||||||
{42, nullptr, "SetNativeVolumeForDebug"},
|
{42, nullptr, "SetNativeVolumeForDebug"},
|
||||||
|
{5000, D<&IAudioController::Unknown5000>, "Unknown5000"},
|
||||||
{10000, nullptr, "NotifyAudioOutputTargetForPlayReport"},
|
{10000, nullptr, "NotifyAudioOutputTargetForPlayReport"},
|
||||||
{10001, nullptr, "NotifyAudioOutputChannelCountForPlayReport"},
|
{10001, nullptr, "NotifyAudioOutputChannelCountForPlayReport"},
|
||||||
{10002, nullptr, "NotifyUnsupportedUsbOutputDeviceAttachedForPlayReport"},
|
{10002, nullptr, "NotifyUnsupportedUsbOutputDeviceAttachedForPlayReport"},
|
||||||
|
@ -68,6 +69,9 @@ IAudioController::IAudioController(Core::System& system_)
|
||||||
{10105, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
|
{10105, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
|
||||||
{10106, nullptr, "GetDefaultAudioOutputTargetForPlayReport"},
|
{10106, nullptr, "GetDefaultAudioOutputTargetForPlayReport"},
|
||||||
{50000, nullptr, "SetAnalogInputBoostGainForPrototyping"},
|
{50000, nullptr, "SetAnalogInputBoostGainForPrototyping"},
|
||||||
|
{50001, nullptr, "OverrideDefaultTargetForDebug"},
|
||||||
|
{50003, nullptr, "SetForceOverrideExternalDeviceNameForDebug"},
|
||||||
|
{50004, nullptr, "ClearForceOverrideExternalDeviceNameForDebug"}
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -175,5 +179,12 @@ Result IAudioController::AcquireTargetNotification(
|
||||||
*out_notification_event = ¬ification_event->GetReadableEvent();
|
*out_notification_event = ¬ification_event->GetReadableEvent();
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
Result IAudioController::Unknown5000(Out<SharedPointer<IAudioController>> out_audio_controller) {
|
||||||
|
LOG_DEBUG(Audio, "Creating duplicate audio controller interface");
|
||||||
|
|
||||||
|
// Return a new reference to this controller instance
|
||||||
|
*out_audio_controller = std::static_pointer_cast<IAudioController>(shared_from_this());
|
||||||
|
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
} // namespace Service::Audio
|
} // namespace Service::Audio
|
||||||
|
|
|
@ -49,6 +49,7 @@ private:
|
||||||
Result SetSpeakerAutoMuteEnabled(bool is_speaker_auto_mute_enabled);
|
Result SetSpeakerAutoMuteEnabled(bool is_speaker_auto_mute_enabled);
|
||||||
Result IsSpeakerAutoMuteEnabled(Out<bool> out_is_speaker_auto_mute_enabled);
|
Result IsSpeakerAutoMuteEnabled(Out<bool> out_is_speaker_auto_mute_enabled);
|
||||||
Result AcquireTargetNotification(OutCopyHandle<Kernel::KReadableEvent> out_notification_event);
|
Result AcquireTargetNotification(OutCopyHandle<Kernel::KReadableEvent> out_notification_event);
|
||||||
|
Result Unknown5000(Out<SharedPointer<IAudioController>> out_audio_controller);
|
||||||
|
|
||||||
KernelHelpers::ServiceContext service_context;
|
KernelHelpers::ServiceContext service_context;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace Service::News {
|
||||||
INewsService::INewsService(Core::System& system_) : ServiceFramework{system_, "INewsService"} {
|
INewsService::INewsService(Core::System& system_) : ServiceFramework{system_, "INewsService"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{10100, nullptr, "PostLocalNews"},
|
{10100, D<&INewsService::PostLocalNews>, "PostLocalNews"},
|
||||||
{20100, nullptr, "SetPassphrase"},
|
{20100, nullptr, "SetPassphrase"},
|
||||||
{30100, D<&INewsService::GetSubscriptionStatus>, "GetSubscriptionStatus"},
|
{30100, D<&INewsService::GetSubscriptionStatus>, "GetSubscriptionStatus"},
|
||||||
{30101, nullptr, "GetTopicList"},
|
{30101, nullptr, "GetTopicList"},
|
||||||
|
@ -36,6 +36,12 @@ INewsService::INewsService(Core::System& system_) : ServiceFramework{system_, "I
|
||||||
|
|
||||||
INewsService::~INewsService() = default;
|
INewsService::~INewsService() = default;
|
||||||
|
|
||||||
|
Result INewsService::PostLocalNews(InBuffer<BufferAttr_HipcAutoSelect> buffer_data) {
|
||||||
|
LOG_WARNING(Service_BCAT, "(STUBBED) called, buffer_size={}", buffer_data.size());
|
||||||
|
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
Result INewsService::GetSubscriptionStatus(Out<u32> out_status,
|
Result INewsService::GetSubscriptionStatus(Out<u32> out_status,
|
||||||
InBuffer<BufferAttr_HipcPointer> buffer_data) {
|
InBuffer<BufferAttr_HipcPointer> buffer_data) {
|
||||||
LOG_WARNING(Service_BCAT, "(STUBBED) called, buffer_size={}", buffer_data.size());
|
LOG_WARNING(Service_BCAT, "(STUBBED) called, buffer_size={}", buffer_data.size());
|
||||||
|
|
|
@ -18,6 +18,8 @@ public:
|
||||||
~INewsService() override;
|
~INewsService() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Result PostLocalNews(InBuffer<BufferAttr_HipcAutoSelect> buffer_data);
|
||||||
|
|
||||||
Result GetSubscriptionStatus(Out<u32> out_status, InBuffer<BufferAttr_HipcPointer> buffer_data);
|
Result GetSubscriptionStatus(Out<u32> out_status, InBuffer<BufferAttr_HipcPointer> buffer_data);
|
||||||
|
|
||||||
Result IsSystemUpdateRequired(Out<bool> out_is_system_update_required);
|
Result IsSystemUpdateRequired(Out<bool> out_is_system_update_required);
|
||||||
|
|
|
@ -419,24 +419,24 @@ void IGeneralService::GetCurrentNetworkProfile(HLERequestContext& ctx) {
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IGeneralService::EnumerateNetworkInterfaces(HLERequestContext& ctx) {
|
void IGeneralService::EnumerateNetworkInterfaces(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_NIFM, "(STUBBED) called.");
|
LOG_DEBUG(Service_NIFM, "(STUBBED) called.");
|
||||||
|
|
||||||
// TODO (jarrodnorwell)
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IGeneralService::EnumerateNetworkProfiles(HLERequestContext& ctx) {
|
void IGeneralService::EnumerateNetworkProfiles(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_NIFM, "(STUBBED) called.");
|
LOG_DEBUG(Service_NIFM, "(STUBBED) called.");
|
||||||
|
|
||||||
// TODO (jarrodnorwell)
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IGeneralService::RemoveNetworkProfile(HLERequestContext& ctx) {
|
void IGeneralService::RemoveNetworkProfile(HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
|
@ -583,24 +583,65 @@ void IGeneralService::IsAnyForegroundRequestAccepted(HLERequestContext& ctx) {
|
||||||
rb.Push<u8>(is_accepted);
|
rb.Push<u8>(is_accepted);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IGeneralService::ConfirmSystemAvailability(HLERequestContext& ctx) {
|
void IGeneralService::GetSsidListVersion(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_NIFM, "(STUBBED) called.");
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
// TODO (jarrodnorwell)
|
constexpr u32 ssid_list_version = 0;
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
rb.Push(ssid_list_version);
|
||||||
|
}
|
||||||
void IGeneralService::SetBackgroundRequestEnabled(HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_NIFM, "(STUBBED) called.");
|
void IGeneralService::ConfirmSystemAvailability(HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_NIFM, "(STUBBED) called.");
|
||||||
// TODO (jarrodnorwell)
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(ResultSuccess);
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
}
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IGeneralService::SetBackgroundRequestEnabled(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_NIFM, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IGeneralService::GetCurrentAccessPoint(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
|
struct AccessPointInfo {
|
||||||
|
u8 ssid_length{};
|
||||||
|
std::array<char, 0x20> ssid{};
|
||||||
|
u8 unknown_1{};
|
||||||
|
u8 unknown_2{};
|
||||||
|
u8 unknown_3{};
|
||||||
|
std::array<char, 0x41> passphrase{};
|
||||||
|
};
|
||||||
|
static_assert(sizeof(AccessPointInfo) == 0x65, "AccessPointInfo has incorrect size.");
|
||||||
|
|
||||||
|
const auto net_iface = Network::GetSelectedNetworkInterface();
|
||||||
|
AccessPointInfo access_point_info{};
|
||||||
|
|
||||||
|
if (net_iface) {
|
||||||
|
const std::string ssid = "yuzu Network";
|
||||||
|
access_point_info.ssid_length = static_cast<u8>(ssid.size());
|
||||||
|
std::memcpy(access_point_info.ssid.data(), ssid.c_str(), ssid.size());
|
||||||
|
|
||||||
|
const std::string passphrase = "yuzupassword";
|
||||||
|
std::memcpy(access_point_info.passphrase.data(), passphrase.c_str(), passphrase.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.WriteBuffer(access_point_info);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
IGeneralService::IGeneralService(Core::System& system_)
|
IGeneralService::IGeneralService(Core::System& system_)
|
||||||
: ServiceFramework{system_, "IGeneralService"}, network{system_.GetRoomNetwork()} {
|
: ServiceFramework{system_, "IGeneralService"}, network{system_.GetRoomNetwork()} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
@ -609,8 +650,8 @@ IGeneralService::IGeneralService(Core::System& system_)
|
||||||
{2, &IGeneralService::CreateScanRequest, "CreateScanRequest"},
|
{2, &IGeneralService::CreateScanRequest, "CreateScanRequest"},
|
||||||
{4, &IGeneralService::CreateRequest, "CreateRequest"},
|
{4, &IGeneralService::CreateRequest, "CreateRequest"},
|
||||||
{5, &IGeneralService::GetCurrentNetworkProfile, "GetCurrentNetworkProfile"},
|
{5, &IGeneralService::GetCurrentNetworkProfile, "GetCurrentNetworkProfile"},
|
||||||
{6, &IGeneralService::EnumerateNetworkInterfaces, "EnumerateNetworkInterfaces"},
|
{6, &IGeneralService::EnumerateNetworkInterfaces, "EnumerateNetworkInterfaces"},
|
||||||
{7, &IGeneralService::EnumerateNetworkProfiles, "EnumerateNetworkProfiles"},
|
{7, &IGeneralService::EnumerateNetworkProfiles, "EnumerateNetworkProfiles"},
|
||||||
{8, nullptr, "GetNetworkProfile"},
|
{8, nullptr, "GetNetworkProfile"},
|
||||||
{9, nullptr, "SetNetworkProfile"},
|
{9, nullptr, "SetNetworkProfile"},
|
||||||
{10, &IGeneralService::RemoveNetworkProfile, "RemoveNetworkProfile"},
|
{10, &IGeneralService::RemoveNetworkProfile, "RemoveNetworkProfile"},
|
||||||
|
@ -628,7 +669,7 @@ IGeneralService::IGeneralService(Core::System& system_)
|
||||||
{22, &IGeneralService::IsAnyForegroundRequestAccepted, "IsAnyForegroundRequestAccepted"},
|
{22, &IGeneralService::IsAnyForegroundRequestAccepted, "IsAnyForegroundRequestAccepted"},
|
||||||
{23, nullptr, "PutToSleep"},
|
{23, nullptr, "PutToSleep"},
|
||||||
{24, nullptr, "WakeUp"},
|
{24, nullptr, "WakeUp"},
|
||||||
{25, nullptr, "GetSsidListVersion"},
|
{25, &IGeneralService::GetSsidListVersion, "GetSsidListVersion"},
|
||||||
{26, nullptr, "SetExclusiveClient"},
|
{26, nullptr, "SetExclusiveClient"},
|
||||||
{27, nullptr, "GetDefaultIpSetting"},
|
{27, nullptr, "GetDefaultIpSetting"},
|
||||||
{28, nullptr, "SetDefaultIpSetting"},
|
{28, nullptr, "SetDefaultIpSetting"},
|
||||||
|
@ -636,10 +677,10 @@ IGeneralService::IGeneralService(Core::System& system_)
|
||||||
{30, nullptr, "SetEthernetCommunicationEnabledForTest"},
|
{30, nullptr, "SetEthernetCommunicationEnabledForTest"},
|
||||||
{31, nullptr, "GetTelemetorySystemEventReadableHandle"},
|
{31, nullptr, "GetTelemetorySystemEventReadableHandle"},
|
||||||
{32, nullptr, "GetTelemetryInfo"},
|
{32, nullptr, "GetTelemetryInfo"},
|
||||||
{33, &IGeneralService::ConfirmSystemAvailability, "ConfirmSystemAvailability"}, // 2.0.0+
|
{33, &IGeneralService::ConfirmSystemAvailability, "ConfirmSystemAvailability"}, // 2.0.0+
|
||||||
{34, &IGeneralService::SetBackgroundRequestEnabled, "SetBackgroundRequestEnabled"}, // 4.0.0+
|
{34, &IGeneralService::SetBackgroundRequestEnabled, "SetBackgroundRequestEnabled"}, // 4.0.0+
|
||||||
{35, nullptr, "GetScanData"},
|
{35, nullptr, "GetScanData"},
|
||||||
{36, nullptr, "GetCurrentAccessPoint"},
|
{36, &IGeneralService::GetCurrentAccessPoint, "GetCurrentAccessPoint"},
|
||||||
{37, nullptr, "Shutdown"},
|
{37, nullptr, "Shutdown"},
|
||||||
{38, nullptr, "GetAllowedChannels"},
|
{38, nullptr, "GetAllowedChannels"},
|
||||||
{39, nullptr, "NotifyApplicationSuspended"},
|
{39, nullptr, "NotifyApplicationSuspended"},
|
||||||
|
|
|
@ -27,8 +27,8 @@ private:
|
||||||
void CreateScanRequest(HLERequestContext& ctx);
|
void CreateScanRequest(HLERequestContext& ctx);
|
||||||
void CreateRequest(HLERequestContext& ctx);
|
void CreateRequest(HLERequestContext& ctx);
|
||||||
void GetCurrentNetworkProfile(HLERequestContext& ctx);
|
void GetCurrentNetworkProfile(HLERequestContext& ctx);
|
||||||
void EnumerateNetworkInterfaces(HLERequestContext& ctx);
|
void EnumerateNetworkInterfaces(HLERequestContext& ctx);
|
||||||
void EnumerateNetworkProfiles(HLERequestContext& ctx);
|
void EnumerateNetworkProfiles(HLERequestContext& ctx);
|
||||||
void RemoveNetworkProfile(HLERequestContext& ctx);
|
void RemoveNetworkProfile(HLERequestContext& ctx);
|
||||||
void GetCurrentIpAddress(HLERequestContext& ctx);
|
void GetCurrentIpAddress(HLERequestContext& ctx);
|
||||||
void CreateTemporaryNetworkProfile(HLERequestContext& ctx);
|
void CreateTemporaryNetworkProfile(HLERequestContext& ctx);
|
||||||
|
@ -38,8 +38,10 @@ private:
|
||||||
void IsEthernetCommunicationEnabled(HLERequestContext& ctx);
|
void IsEthernetCommunicationEnabled(HLERequestContext& ctx);
|
||||||
void IsAnyInternetRequestAccepted(HLERequestContext& ctx);
|
void IsAnyInternetRequestAccepted(HLERequestContext& ctx);
|
||||||
void IsAnyForegroundRequestAccepted(HLERequestContext& ctx);
|
void IsAnyForegroundRequestAccepted(HLERequestContext& ctx);
|
||||||
void ConfirmSystemAvailability(HLERequestContext& ctx);
|
void GetSsidListVersion(HLERequestContext& ctx);
|
||||||
void SetBackgroundRequestEnabled(HLERequestContext& ctx);
|
void ConfirmSystemAvailability(HLERequestContext& ctx);
|
||||||
|
void SetBackgroundRequestEnabled(HLERequestContext& ctx);
|
||||||
|
void GetCurrentAccessPoint(HLERequestContext& ctx);
|
||||||
|
|
||||||
Network::RoomNetwork& network;
|
Network::RoomNetwork& network;
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
{5, C<&INpnsSystem::GetReceiveEvent>, "GetReceiveEvent"},
|
{5, C<&INpnsSystem::GetReceiveEvent>, "GetReceiveEvent"},
|
||||||
{6, nullptr, "ListenUndelivered"},
|
{6, nullptr, "ListenUndelivered"},
|
||||||
{7, nullptr, "GetStateChangeEvent"},
|
{7, nullptr, "GetStateChangeEvent"},
|
||||||
{8, nullptr, "ListenToByName"}, // 18.0.0+
|
{8, C<&INpnsSystem::ListenToByName>, "ListenToByName"},
|
||||||
{11, nullptr, "SubscribeTopic"},
|
{11, nullptr, "SubscribeTopic"},
|
||||||
{12, nullptr, "UnsubscribeTopic"},
|
{12, nullptr, "UnsubscribeTopic"},
|
||||||
{13, nullptr, "QueryIsTopicExist"},
|
{13, nullptr, "QueryIsTopicExist"},
|
||||||
|
@ -57,10 +57,10 @@ public:
|
||||||
{51, nullptr, "DeleteDigitalTwinKeyValue"}, // 18.0.0+
|
{51, nullptr, "DeleteDigitalTwinKeyValue"}, // 18.0.0+
|
||||||
{101, nullptr, "Suspend"},
|
{101, nullptr, "Suspend"},
|
||||||
{102, nullptr, "Resume"},
|
{102, nullptr, "Resume"},
|
||||||
{103, nullptr, "GetState"},
|
{103, C<&INpnsSystem::GetState>, "GetState"},
|
||||||
{104, nullptr, "GetStatistics"},
|
{104, nullptr, "GetStatistics"},
|
||||||
{105, nullptr, "GetPlayReportRequestEvent"},
|
{105, nullptr, "GetPlayReportRequestEvent"},
|
||||||
{106, nullptr, "GetLastNotifiedTime"}, // 18.0.0+
|
{106, C<&INpnsSystem::GetLastNotifiedTime>, "GetLastNotifiedTime"}, // 18.0.0+
|
||||||
{107, nullptr, "SetLastNotifiedTime"}, // 18.0.0+
|
{107, nullptr, "SetLastNotifiedTime"}, // 18.0.0+
|
||||||
{111, nullptr, "GetJid"},
|
{111, nullptr, "GetJid"},
|
||||||
{112, nullptr, "CreateJid"},
|
{112, nullptr, "CreateJid"},
|
||||||
|
@ -74,7 +74,7 @@ public:
|
||||||
{154, nullptr, "CreateTokenAsync"},
|
{154, nullptr, "CreateTokenAsync"},
|
||||||
{155, nullptr, "CreateTokenAsyncWithApplicationId"},
|
{155, nullptr, "CreateTokenAsyncWithApplicationId"},
|
||||||
{156, nullptr, "CreateTokenWithNameAsync"}, // 18.0.0+
|
{156, nullptr, "CreateTokenWithNameAsync"}, // 18.0.0+
|
||||||
{161, nullptr, "GetRequestChangeStateCancelEvent"},
|
{161, C<&INpnsSystem::GetRequestChangeStateCancelEvent>, "GetRequestChangeStateCancelEvent"}, // 10.0.0+
|
||||||
{162, nullptr, "RequestChangeStateForceTimedWithCancelEvent"},
|
{162, nullptr, "RequestChangeStateForceTimedWithCancelEvent"},
|
||||||
{201, nullptr, "RequestChangeStateForceTimed"},
|
{201, nullptr, "RequestChangeStateForceTimed"},
|
||||||
{202, nullptr, "RequestChangeStateForceAsync"},
|
{202, nullptr, "RequestChangeStateForceAsync"},
|
||||||
|
@ -90,27 +90,62 @@ public:
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
get_receive_event = service_context.CreateEvent("npns:s:GetReceiveEvent");
|
get_receive_event = service_context.CreateEvent("npns:s:GetReceiveEvent");
|
||||||
|
get_request_change_state_cancel_event =
|
||||||
|
service_context.CreateEvent("npns:s:GetRequestChangeStateCancelEvent");
|
||||||
}
|
}
|
||||||
|
|
||||||
~INpnsSystem() override {
|
~INpnsSystem() override {
|
||||||
service_context.CloseEvent(get_receive_event);
|
service_context.CloseEvent(get_receive_event);
|
||||||
|
service_context.CloseEvent(get_request_change_state_cancel_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Result ListenTo(u32 program_id) {
|
Result ListenTo(u32 program_id) {
|
||||||
LOG_WARNING(Service_AM, "(STUBBED) called, program_id={}", program_id);
|
LOG_WARNING(Service_NPNS, "(STUBBED) called, program_id={}", program_id);
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result GetReceiveEvent(OutCopyHandle<Kernel::KReadableEvent> out_event) {
|
Result GetReceiveEvent(OutCopyHandle<Kernel::KReadableEvent> out_event) {
|
||||||
LOG_WARNING(Service_AM, "(STUBBED) called");
|
LOG_WARNING(Service_NPNS, "(STUBBED) called");
|
||||||
|
|
||||||
*out_event = &get_receive_event->GetReadableEvent();
|
*out_event = &get_receive_event->GetReadableEvent();
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result ListenToByName() {
|
||||||
|
LOG_DEBUG(Service_NPNS, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result GetState(Out<u32> out_state) {
|
||||||
|
LOG_WARNING(Service_NPNS, "(STUBBED) called");
|
||||||
|
*out_state = 0;
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result GetLastNotifiedTime(Out<s64> out_last_notified_time) {
|
||||||
|
LOG_WARNING(Service_NPNS, "(STUBBED) called");
|
||||||
|
|
||||||
|
*out_last_notified_time = 0;
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result GetRequestChangeStateCancelEvent(OutCopyHandle<Kernel::KReadableEvent> out_event) {
|
||||||
|
LOG_DEBUG(Service_NPNS, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
|
*out_event = &get_request_change_state_cancel_event->GetReadableEvent();
|
||||||
|
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
KernelHelpers::ServiceContext service_context;
|
KernelHelpers::ServiceContext service_context;
|
||||||
Kernel::KEvent* get_receive_event;
|
Kernel::KEvent* get_receive_event;
|
||||||
|
Kernel::KEvent* get_request_change_state_cancel_event;
|
||||||
};
|
};
|
||||||
|
|
||||||
class INpnsUser final : public ServiceFramework<INpnsUser> {
|
class INpnsUser final : public ServiceFramework<INpnsUser> {
|
||||||
|
|
|
@ -71,6 +71,12 @@ NvResult nvhost_ctrl_gpu::Ioctl3(DeviceFD fd, Ioctl command, std::span<const u8>
|
||||||
case 0x6:
|
case 0x6:
|
||||||
return WrapFixedInlOut(this, &nvhost_ctrl_gpu::GetTPCMasks3, input, output,
|
return WrapFixedInlOut(this, &nvhost_ctrl_gpu::GetTPCMasks3, input, output,
|
||||||
inline_output);
|
inline_output);
|
||||||
|
case 0x13:
|
||||||
|
LOG_DEBUG(Service_NVDRV, "(STUBBED) called.");
|
||||||
|
|
||||||
|
// TODO (jarrodnorwell)
|
||||||
|
|
||||||
|
return NvResult::NotImplemented;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +84,8 @@ NvResult nvhost_ctrl_gpu::Ioctl3(DeviceFD fd, Ioctl command, std::span<const u8>
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw);
|
UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}, group={:01X}, command={:01X}", command.raw,
|
||||||
|
command.group, command.cmd);
|
||||||
return NvResult::NotImplemented;
|
return NvResult::NotImplemented;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ IParentalControlService::IParentalControlService(Core::System& system_, Capabili
|
||||||
{1453, D<&IParentalControlService::IsPlayTimerEnabled>, "IsPlayTimerEnabled"},
|
{1453, D<&IParentalControlService::IsPlayTimerEnabled>, "IsPlayTimerEnabled"},
|
||||||
{1454, nullptr, "GetPlayTimerRemainingTime"},
|
{1454, nullptr, "GetPlayTimerRemainingTime"},
|
||||||
{1455, D<&IParentalControlService::IsRestrictedByPlayTimer>, "IsRestrictedByPlayTimer"},
|
{1455, D<&IParentalControlService::IsRestrictedByPlayTimer>, "IsRestrictedByPlayTimer"},
|
||||||
{1456, D<&IParentalControlService::GetPlayTimerSettings>, "GetPlayTimerSettings"},
|
{1456, D<&IParentalControlService::GetPlayTimerSettingsOld>, "GetPlayTimerSettingsOld"},
|
||||||
{1457, D<&IParentalControlService::GetPlayTimerEventToRequestSuspension>, "GetPlayTimerEventToRequestSuspension"},
|
{1457, D<&IParentalControlService::GetPlayTimerEventToRequestSuspension>, "GetPlayTimerEventToRequestSuspension"},
|
||||||
{1458, D<&IParentalControlService::IsPlayTimerAlarmDisabled>, "IsPlayTimerAlarmDisabled"},
|
{1458, D<&IParentalControlService::IsPlayTimerAlarmDisabled>, "IsPlayTimerAlarmDisabled"},
|
||||||
{1471, nullptr, "NotifyWrongPinCodeInputManyTimes"},
|
{1471, nullptr, "NotifyWrongPinCodeInputManyTimes"},
|
||||||
|
@ -122,8 +122,7 @@ IParentalControlService::IParentalControlService(Core::System& system_, Capabili
|
||||||
{2014, nullptr, "FinishSynchronizeParentalControlSettings"},
|
{2014, nullptr, "FinishSynchronizeParentalControlSettings"},
|
||||||
{2015, nullptr, "FinishSynchronizeParentalControlSettingsWithLastUpdated"},
|
{2015, nullptr, "FinishSynchronizeParentalControlSettingsWithLastUpdated"},
|
||||||
{2016, nullptr, "RequestUpdateExemptionListAsync"},
|
{2016, nullptr, "RequestUpdateExemptionListAsync"},
|
||||||
{145601, nullptr, "GetPlayTimerSettingsVer2"}, // 18.0.0+
|
{145601, D<&IParentalControlService::GetPlayTimerSettings>, "GetPlayTimerSettings"} // 18.0.0+
|
||||||
{195101, nullptr, "SetPlayTimerSettingsForDebugVer2"} // 18.0.0+
|
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
@ -377,6 +376,13 @@ Result IParentalControlService::IsRestrictedByPlayTimer(Out<bool> out_is_restric
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result IParentalControlService::GetPlayTimerSettingsOld(
|
||||||
|
Out<PlayTimerSettings> out_play_timer_settings) {
|
||||||
|
LOG_WARNING(Service_PCTL, "(STUBBED) called");
|
||||||
|
*out_play_timer_settings = {};
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
Result IParentalControlService::GetPlayTimerSettings(
|
Result IParentalControlService::GetPlayTimerSettings(
|
||||||
Out<PlayTimerSettings> out_play_timer_settings) {
|
Out<PlayTimerSettings> out_play_timer_settings) {
|
||||||
LOG_WARNING(Service_PCTL, "(STUBBED) called");
|
LOG_WARNING(Service_PCTL, "(STUBBED) called");
|
||||||
|
|
|
@ -46,13 +46,14 @@ private:
|
||||||
Result StopPlayTimer();
|
Result StopPlayTimer();
|
||||||
Result IsPlayTimerEnabled(Out<bool> out_is_play_timer_enabled);
|
Result IsPlayTimerEnabled(Out<bool> out_is_play_timer_enabled);
|
||||||
Result IsRestrictedByPlayTimer(Out<bool> out_is_restricted_by_play_timer);
|
Result IsRestrictedByPlayTimer(Out<bool> out_is_restricted_by_play_timer);
|
||||||
Result GetPlayTimerSettings(Out<PlayTimerSettings> out_play_timer_settings);
|
Result GetPlayTimerSettingsOld(Out<PlayTimerSettings> out_play_timer_settings);
|
||||||
Result GetPlayTimerEventToRequestSuspension(OutCopyHandle<Kernel::KReadableEvent> out_event);
|
Result GetPlayTimerEventToRequestSuspension(OutCopyHandle<Kernel::KReadableEvent> out_event);
|
||||||
Result IsPlayTimerAlarmDisabled(Out<bool> out_play_timer_alarm_disabled);
|
Result IsPlayTimerAlarmDisabled(Out<bool> out_play_timer_alarm_disabled);
|
||||||
Result GetUnlinkedEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
|
Result GetUnlinkedEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
|
||||||
Result GetStereoVisionRestriction(Out<bool> out_stereo_vision_restriction);
|
Result GetStereoVisionRestriction(Out<bool> out_stereo_vision_restriction);
|
||||||
Result SetStereoVisionRestriction(bool stereo_vision_restriction);
|
Result SetStereoVisionRestriction(bool stereo_vision_restriction);
|
||||||
Result ResetConfirmedStereoVisionPermission();
|
Result ResetConfirmedStereoVisionPermission();
|
||||||
|
Result GetPlayTimerSettings(Out<PlayTimerSettings> out_play_timer_settings);
|
||||||
|
|
||||||
struct States {
|
struct States {
|
||||||
u64 current_tid{};
|
u64 current_tid{};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue