hle: Eliminate need to specify command headers for IPC. (#6678)

This commit is contained in:
Steveice10 2023-07-14 17:32:59 -07:00 committed by GitHub
parent 0bedb28bdc
commit e043caac27
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
96 changed files with 2691 additions and 2707 deletions

View file

@ -210,14 +210,8 @@ inline void RequestBuilder::PushMappedBuffer(const Kernel::MappedBuffer& mapped_
class RequestParser : public RequestHelperBase { class RequestParser : public RequestHelperBase {
public: public:
RequestParser(Kernel::HLERequestContext& context, Header desired_header) RequestParser(Kernel::HLERequestContext& context)
: RequestHelperBase(context, desired_header) {} : RequestHelperBase(context, context.CommandHeader()) {}
RequestParser(Kernel::HLERequestContext& context, u16 command_id, unsigned normal_params_size,
unsigned translate_params_size)
: RequestParser(context,
Header{MakeHeader(command_id, normal_params_size, translate_params_size)}) {
}
RequestBuilder MakeBuilder(u32 normal_params_size, u32 translate_params_size, RequestBuilder MakeBuilder(u32 normal_params_size, u32 translate_params_size,
bool validateHeader = true) { bool validateHeader = true) {

View file

@ -207,6 +207,11 @@ public:
return cmd_buf.data(); return cmd_buf.data();
} }
/// Returns the command header from the IPC command buffer.
IPC::Header CommandHeader() const {
return {cmd_buf[0]};
}
/** /**
* Returns the session through which this request was made. This can be used as a map key to * Returns the session through which this request was made. This can be used as a map key to
* access per-client data on services. * access per-client data on services.

View file

@ -100,7 +100,7 @@ void Recorder::SetRequestInfo(const std::shared_ptr<Kernel::Thread>& client_thre
record.function_name = std::dynamic_pointer_cast<Service::ServiceFrameworkBase>( record.function_name = std::dynamic_pointer_cast<Service::ServiceFrameworkBase>(
client_session->parent->port->GetServerPort()->hle_handler) client_session->parent->port->GetServerPort()->hle_handler)
->GetFunctionName(record.untranslated_request_cmdbuf[0]); ->GetFunctionName({record.untranslated_request_cmdbuf[0]});
} }
client_session_map.erase(thread_id); client_session_map.erase(thread_id);

View file

@ -21,7 +21,7 @@
namespace Service::AC { namespace Service::AC {
void Module::Interface::CreateDefaultConfig(Kernel::HLERequestContext& ctx) { void Module::Interface::CreateDefaultConfig(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 0, 0); IPC::RequestParser rp(ctx);
std::vector<u8> buffer(sizeof(ACConfig)); std::vector<u8> buffer(sizeof(ACConfig));
std::memcpy(buffer.data(), &ac->default_config, buffer.size()); std::memcpy(buffer.data(), &ac->default_config, buffer.size());
@ -34,7 +34,7 @@ void Module::Interface::CreateDefaultConfig(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ConnectAsync(Kernel::HLERequestContext& ctx) { void Module::Interface::ConnectAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4, 0, 6); IPC::RequestParser rp(ctx);
rp.Skip(2, false); // ProcessId descriptor rp.Skip(2, false); // ProcessId descriptor
ac->connect_event = rp.PopObject<Kernel::Event>(); ac->connect_event = rp.PopObject<Kernel::Event>();
@ -53,7 +53,7 @@ void Module::Interface::ConnectAsync(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetConnectResult(Kernel::HLERequestContext& ctx) { void Module::Interface::GetConnectResult(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 0, 2); IPC::RequestParser rp(ctx);
rp.Skip(2, false); // ProcessId descriptor rp.Skip(2, false); // ProcessId descriptor
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -61,7 +61,7 @@ void Module::Interface::GetConnectResult(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::CloseAsync(Kernel::HLERequestContext& ctx) { void Module::Interface::CloseAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x8, 0, 4); IPC::RequestParser rp(ctx);
rp.Skip(2, false); // ProcessId descriptor rp.Skip(2, false); // ProcessId descriptor
ac->close_event = rp.PopObject<Kernel::Event>(); ac->close_event = rp.PopObject<Kernel::Event>();
@ -82,7 +82,7 @@ void Module::Interface::CloseAsync(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetCloseResult(Kernel::HLERequestContext& ctx) { void Module::Interface::GetCloseResult(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 0, 2); IPC::RequestParser rp(ctx);
rp.Skip(2, false); // ProcessId descriptor rp.Skip(2, false); // ProcessId descriptor
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -92,7 +92,7 @@ void Module::Interface::GetCloseResult(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetWifiStatus(Kernel::HLERequestContext& ctx) { void Module::Interface::GetWifiStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xD, 0, 0); IPC::RequestParser rp(ctx);
bool can_reach_internet = false; bool can_reach_internet = false;
std::shared_ptr<SOC::SOC_U> socu_module = SOC::GetService(Core::System::GetInstance()); std::shared_ptr<SOC::SOC_U> socu_module = SOC::GetService(Core::System::GetInstance());
@ -109,7 +109,7 @@ void Module::Interface::GetWifiStatus(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetInfraPriority(Kernel::HLERequestContext& ctx) { void Module::Interface::GetInfraPriority(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x27, 0, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const std::vector<u8>& ac_config = rp.PopStaticBuffer(); [[maybe_unused]] const std::vector<u8>& ac_config = rp.PopStaticBuffer();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -120,7 +120,7 @@ void Module::Interface::GetInfraPriority(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetRequestEulaVersion(Kernel::HLERequestContext& ctx) { void Module::Interface::SetRequestEulaVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2D, 2, 2); IPC::RequestParser rp(ctx);
u32 major = rp.Pop<u8>(); u32 major = rp.Pop<u8>();
u32 minor = rp.Pop<u8>(); u32 minor = rp.Pop<u8>();
@ -137,7 +137,7 @@ void Module::Interface::SetRequestEulaVersion(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::RegisterDisconnectEvent(Kernel::HLERequestContext& ctx) { void Module::Interface::RegisterDisconnectEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x30, 0, 4); IPC::RequestParser rp(ctx);
rp.Skip(2, false); // ProcessId descriptor rp.Skip(2, false); // ProcessId descriptor
ac->disconnect_event = rp.PopObject<Kernel::Event>(); ac->disconnect_event = rp.PopObject<Kernel::Event>();
@ -152,7 +152,7 @@ void Module::Interface::RegisterDisconnectEvent(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::IsConnected(Kernel::HLERequestContext& ctx) { void Module::Interface::IsConnected(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3E, 1, 2); IPC::RequestParser rp(ctx);
u32 unk = rp.Pop<u32>(); u32 unk = rp.Pop<u32>();
u32 unk_descriptor = rp.Pop<u32>(); u32 unk_descriptor = rp.Pop<u32>();
u32 unk_param = rp.Pop<u32>(); u32 unk_param = rp.Pop<u32>();
@ -166,7 +166,7 @@ void Module::Interface::IsConnected(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetClientVersion(Kernel::HLERequestContext& ctx) { void Module::Interface::SetClientVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x40, 1, 2); IPC::RequestParser rp(ctx);
u32 version = rp.Pop<u32>(); u32 version = rp.Pop<u32>();
rp.Skip(2, false); // ProcessId descriptor rp.Skip(2, false); // ProcessId descriptor

View file

@ -10,26 +10,26 @@ namespace Service::AC {
AC_I::AC_I(std::shared_ptr<Module> ac) : Module::Interface(std::move(ac), "ac:i", 10) { AC_I::AC_I(std::shared_ptr<Module> ac) : Module::Interface(std::move(ac), "ac:i", 10) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 0), &AC_I::CreateDefaultConfig, "CreateDefaultConfig"}, {0x0001, &AC_I::CreateDefaultConfig, "CreateDefaultConfig"},
{IPC::MakeHeader(0x0004, 0, 6), &AC_I::ConnectAsync, "ConnectAsync"}, {0x0004, &AC_I::ConnectAsync, "ConnectAsync"},
{IPC::MakeHeader(0x0005, 0, 2), &AC_I::GetConnectResult, "GetConnectResult"}, {0x0005, &AC_I::GetConnectResult, "GetConnectResult"},
{IPC::MakeHeader(0x0007, 0, 2), nullptr, "CancelConnectAsync"}, {0x0007, nullptr, "CancelConnectAsync"},
{IPC::MakeHeader(0x0008, 0, 4), &AC_I::CloseAsync, "CloseAsync"}, {0x0008, &AC_I::CloseAsync, "CloseAsync"},
{IPC::MakeHeader(0x0009, 0, 2), &AC_I::GetCloseResult, "GetCloseResult"}, {0x0009, &AC_I::GetCloseResult, "GetCloseResult"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetLastErrorCode"}, {0x000A, nullptr, "GetLastErrorCode"},
{IPC::MakeHeader(0x000C, 0, 0), nullptr, "GetStatus"}, {0x000C, nullptr, "GetStatus"},
{IPC::MakeHeader(0x000D, 0, 0), &AC_I::GetWifiStatus, "GetWifiStatus"}, {0x000D, &AC_I::GetWifiStatus, "GetWifiStatus"},
{IPC::MakeHeader(0x000E, 1, 2), nullptr, "GetCurrentAPInfo"}, {0x000E, nullptr, "GetCurrentAPInfo"},
{IPC::MakeHeader(0x0010, 1, 2), nullptr, "GetCurrentNZoneInfo"}, {0x0010, nullptr, "GetCurrentNZoneInfo"},
{IPC::MakeHeader(0x0011, 1, 2), nullptr, "GetNZoneApNumService"}, {0x0011, nullptr, "GetNZoneApNumService"},
{IPC::MakeHeader(0x001D, 1, 2), nullptr, "ScanAPs"}, {0x001D, nullptr, "ScanAPs"},
{IPC::MakeHeader(0x0024, 1, 2), nullptr, "AddDenyApType"}, {0x0024, nullptr, "AddDenyApType"},
{IPC::MakeHeader(0x0027, 0, 2), &AC_I::GetInfraPriority, "GetInfraPriority"}, {0x0027, &AC_I::GetInfraPriority, "GetInfraPriority"},
{IPC::MakeHeader(0x002D, 2, 2), &AC_I::SetRequestEulaVersion, "SetRequestEulaVersion"}, {0x002D, &AC_I::SetRequestEulaVersion, "SetRequestEulaVersion"},
{IPC::MakeHeader(0x0030, 0, 4), &AC_I::RegisterDisconnectEvent, "RegisterDisconnectEvent"}, {0x0030, &AC_I::RegisterDisconnectEvent, "RegisterDisconnectEvent"},
{IPC::MakeHeader(0x003C, 1, 2), nullptr, "GetAPSSIDList"}, {0x003C, nullptr, "GetAPSSIDList"},
{IPC::MakeHeader(0x003E, 1, 2), &AC_I::IsConnected, "IsConnected"}, {0x003E, &AC_I::IsConnected, "IsConnected"},
{IPC::MakeHeader(0x0040, 1, 2), &AC_I::SetClientVersion, "SetClientVersion"}, {0x0040, &AC_I::SetClientVersion, "SetClientVersion"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -10,26 +10,26 @@ namespace Service::AC {
AC_U::AC_U(std::shared_ptr<Module> ac) : Module::Interface(std::move(ac), "ac:u", 10) { AC_U::AC_U(std::shared_ptr<Module> ac) : Module::Interface(std::move(ac), "ac:u", 10) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 0), &AC_U::CreateDefaultConfig, "CreateDefaultConfig"}, {0x0001, &AC_U::CreateDefaultConfig, "CreateDefaultConfig"},
{IPC::MakeHeader(0x0004, 0, 6), &AC_U::ConnectAsync, "ConnectAsync"}, {0x0004, &AC_U::ConnectAsync, "ConnectAsync"},
{IPC::MakeHeader(0x0005, 0, 2), &AC_U::GetConnectResult, "GetConnectResult"}, {0x0005, &AC_U::GetConnectResult, "GetConnectResult"},
{IPC::MakeHeader(0x0007, 0, 2), nullptr, "CancelConnectAsync"}, {0x0007, nullptr, "CancelConnectAsync"},
{IPC::MakeHeader(0x0008, 0, 4), &AC_U::CloseAsync, "CloseAsync"}, {0x0008, &AC_U::CloseAsync, "CloseAsync"},
{IPC::MakeHeader(0x0009, 0, 2), &AC_U::GetCloseResult, "GetCloseResult"}, {0x0009, &AC_U::GetCloseResult, "GetCloseResult"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetLastErrorCode"}, {0x000A, nullptr, "GetLastErrorCode"},
{IPC::MakeHeader(0x000C, 0, 0), nullptr, "GetStatus"}, {0x000C, nullptr, "GetStatus"},
{IPC::MakeHeader(0x000D, 0, 0), &AC_U::GetWifiStatus, "GetWifiStatus"}, {0x000D, &AC_U::GetWifiStatus, "GetWifiStatus"},
{IPC::MakeHeader(0x000E, 1, 2), nullptr, "GetCurrentAPInfo"}, {0x000E, nullptr, "GetCurrentAPInfo"},
{IPC::MakeHeader(0x0010, 1, 2), nullptr, "GetCurrentNZoneInfo"}, {0x0010, nullptr, "GetCurrentNZoneInfo"},
{IPC::MakeHeader(0x0011, 1, 2), nullptr, "GetNZoneApNumService"}, {0x0011, nullptr, "GetNZoneApNumService"},
{IPC::MakeHeader(0x001D, 1, 2), nullptr, "ScanAPs"}, {0x001D, nullptr, "ScanAPs"},
{IPC::MakeHeader(0x0024, 1, 2), nullptr, "AddDenyApType"}, {0x0024, nullptr, "AddDenyApType"},
{IPC::MakeHeader(0x0027, 0, 2), &AC_U::GetInfraPriority, "GetInfraPriority"}, {0x0027, &AC_U::GetInfraPriority, "GetInfraPriority"},
{IPC::MakeHeader(0x002D, 2, 2), &AC_U::SetRequestEulaVersion, "SetRequestEulaVersion"}, {0x002D, &AC_U::SetRequestEulaVersion, "SetRequestEulaVersion"},
{IPC::MakeHeader(0x0030, 0, 4), &AC_U::RegisterDisconnectEvent, "RegisterDisconnectEvent"}, {0x0030, &AC_U::RegisterDisconnectEvent, "RegisterDisconnectEvent"},
{IPC::MakeHeader(0x003C, 1, 2), nullptr, "GetAPSSIDList"}, {0x003C, nullptr, "GetAPSSIDList"},
{IPC::MakeHeader(0x003E, 1, 2), &AC_U::IsConnected, "IsConnected"}, {0x003E, &AC_U::IsConnected, "IsConnected"},
{IPC::MakeHeader(0x0040, 1, 2), &AC_U::SetClientVersion, "SetClientVersion"}, {0x0040, &AC_U::SetClientVersion, "SetClientVersion"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -16,7 +16,7 @@ Module::Interface::Interface(std::shared_ptr<Module> act, const char* name)
Module::Interface::~Interface() = default; Module::Interface::~Interface() = default;
void Module::Interface::Initialize(Kernel::HLERequestContext& ctx) { void Module::Interface::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 2, 4); // 0x10084 IPC::RequestParser rp(ctx);
const auto sdk_version = rp.Pop<u32>(); const auto sdk_version = rp.Pop<u32>();
const auto shared_memory_size = rp.Pop<u32>(); const auto shared_memory_size = rp.Pop<u32>();
const auto caller_pid = rp.PopPID(); const auto caller_pid = rp.PopPID();
@ -31,7 +31,7 @@ void Module::Interface::Initialize(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetAccountDataBlock(Kernel::HLERequestContext& ctx) { void Module::Interface::GetAccountDataBlock(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x6, 3, 2); // 0x600C2 IPC::RequestParser rp(ctx);
const auto unknown = rp.Pop<u8>(); const auto unknown = rp.Pop<u8>();
const auto size = rp.Pop<u32>(); const auto size = rp.Pop<u32>();
const auto block_id = rp.Pop<u32>(); const auto block_id = rp.Pop<u32>();

View file

@ -11,16 +11,16 @@ ACT_A::ACT_A(std::shared_ptr<Module> act) : Module::Interface(std::move(act), "a
const FunctionInfo functions[] = { const FunctionInfo functions[] = {
// act:u shared commands // act:u shared commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 4), &ACT_A::Initialize, "Initialize"}, {0x0001, &ACT_A::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 1, 0), nullptr, "GetErrorCode"}, {0x0002, nullptr, "GetErrorCode"},
{IPC::MakeHeader(0x0006, 3, 2), &ACT_A::GetAccountDataBlock, "GetAccountDataBlock"}, {0x0006, &ACT_A::GetAccountDataBlock, "GetAccountDataBlock"},
{IPC::MakeHeader(0x000B, 1, 2), nullptr, "AcquireEulaList"}, {0x000B, nullptr, "AcquireEulaList"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "GenerateUuid"}, {0x000D, nullptr, "GenerateUuid"},
// act:a // act:a
{IPC::MakeHeader(0x0413, 3, 2), nullptr, "UpdateMiiImage"}, {0x0413, nullptr, "UpdateMiiImage"},
{IPC::MakeHeader(0x041B, 5, 2), nullptr, "AgreeEula"}, {0x041B, nullptr, "AgreeEula"},
{IPC::MakeHeader(0x0421, 1, 2), nullptr, "UploadMii"}, {0x0421, nullptr, "UploadMii"},
{IPC::MakeHeader(0x0423, 2, 2), nullptr, "ValidateMailAddress"}, {0x0423, nullptr, "ValidateMailAddress"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -10,11 +10,11 @@ namespace Service::ACT {
ACT_U::ACT_U(std::shared_ptr<Module> act) : Module::Interface(std::move(act), "act:u") { ACT_U::ACT_U(std::shared_ptr<Module> act) : Module::Interface(std::move(act), "act:u") {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 4), &ACT_U::Initialize, "Initialize"}, {0x0001, &ACT_U::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 1, 0), nullptr, "GetErrorCode"}, {0x0002, nullptr, "GetErrorCode"},
{IPC::MakeHeader(0x0006, 3, 2), &ACT_U::GetAccountDataBlock, "GetAccountDataBlock"}, {0x0006, &ACT_U::GetAccountDataBlock, "GetAccountDataBlock"},
{IPC::MakeHeader(0x000B, 1, 2), nullptr, "AcquireEulaList"}, {0x000B, nullptr, "AcquireEulaList"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "GenerateUuid"}, {0x000D, nullptr, "GenerateUuid"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -684,7 +684,7 @@ Module::Interface::Interface(std::shared_ptr<Module> am, const char* name, u32 m
Module::Interface::~Interface() = default; Module::Interface::~Interface() = default;
void Module::Interface::GetNumPrograms(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNumPrograms(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0001, 1, 0); // 0x00010040 IPC::RequestParser rp(ctx);
u32 media_type = rp.Pop<u8>(); u32 media_type = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -693,7 +693,7 @@ void Module::Interface::GetNumPrograms(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::FindDLCContentInfos(Kernel::HLERequestContext& ctx) { void Module::Interface::FindDLCContentInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1002, 4, 4); // 0x10020104 IPC::RequestParser rp(ctx);
auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>()); auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>());
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
@ -758,7 +758,7 @@ void Module::Interface::FindDLCContentInfos(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ListDLCContentInfos(Kernel::HLERequestContext& ctx) { void Module::Interface::ListDLCContentInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1003, 5, 2); // 0x10030142 IPC::RequestParser rp(ctx);
u32 content_count = rp.Pop<u32>(); u32 content_count = rp.Pop<u32>();
auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>()); auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>());
@ -811,7 +811,7 @@ void Module::Interface::ListDLCContentInfos(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteContents(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteContents(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1004, 4, 2); // 0x10040102 IPC::RequestParser rp(ctx);
u8 media_type = rp.Pop<u8>(); u8 media_type = rp.Pop<u8>();
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
u32 content_count = rp.Pop<u32>(); u32 content_count = rp.Pop<u32>();
@ -825,7 +825,7 @@ void Module::Interface::DeleteContents(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetProgramList(Kernel::HLERequestContext& ctx) { void Module::Interface::GetProgramList(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0002, 2, 2); // 0x00020082 IPC::RequestParser rp(ctx);
u32 count = rp.Pop<u32>(); u32 count = rp.Pop<u32>();
u8 media_type = rp.Pop<u8>(); u8 media_type = rp.Pop<u8>();
@ -879,7 +879,7 @@ ResultCode GetTitleInfoFromList(std::span<const u64> title_id_list,
} }
void Module::Interface::GetProgramInfos(Kernel::HLERequestContext& ctx) { void Module::Interface::GetProgramInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0003, 2, 4); // 0x00030084 IPC::RequestParser rp(ctx);
auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>()); auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>());
u32 title_count = rp.Pop<u32>(); u32 title_count = rp.Pop<u32>();
@ -898,7 +898,7 @@ void Module::Interface::GetProgramInfos(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteUserProgram(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteUserProgram(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0004, 3, 0); IPC::RequestParser rp(ctx);
auto media_type = rp.PopEnum<FS::MediaType>(); auto media_type = rp.PopEnum<FS::MediaType>();
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -926,7 +926,7 @@ void Module::Interface::DeleteUserProgram(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetProductCode(Kernel::HLERequestContext& ctx) { void Module::Interface::GetProductCode(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0005, 3, 0); IPC::RequestParser rp(ctx);
FS::MediaType media_type = rp.PopEnum<FS::MediaType>(); FS::MediaType media_type = rp.PopEnum<FS::MediaType>();
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
std::string path = GetTitleContentPath(media_type, title_id); std::string path = GetTitleContentPath(media_type, title_id);
@ -952,7 +952,7 @@ void Module::Interface::GetProductCode(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetDLCTitleInfos(Kernel::HLERequestContext& ctx) { void Module::Interface::GetDLCTitleInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1005, 2, 4); // 0x10050084 IPC::RequestParser rp(ctx);
auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>()); auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>());
u32 title_count = rp.Pop<u32>(); u32 title_count = rp.Pop<u32>();
@ -985,7 +985,7 @@ void Module::Interface::GetDLCTitleInfos(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetPatchTitleInfos(Kernel::HLERequestContext& ctx) { void Module::Interface::GetPatchTitleInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x100D, 2, 4); // 0x100D0084 IPC::RequestParser rp(ctx);
auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>()); auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>());
u32 title_count = rp.Pop<u32>(); u32 title_count = rp.Pop<u32>();
@ -1018,7 +1018,7 @@ void Module::Interface::GetPatchTitleInfos(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ListDataTitleTicketInfos(Kernel::HLERequestContext& ctx) { void Module::Interface::ListDataTitleTicketInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1007, 4, 2); // 0x10070102 IPC::RequestParser rp(ctx);
u32 ticket_count = rp.Pop<u32>(); u32 ticket_count = rp.Pop<u32>();
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
u32 start_index = rp.Pop<u32>(); u32 start_index = rp.Pop<u32>();
@ -1046,7 +1046,7 @@ void Module::Interface::ListDataTitleTicketInfos(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::GetDLCContentInfoCount(Kernel::HLERequestContext& ctx) { void Module::Interface::GetDLCContentInfoCount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1001, 3, 0); // 0x100100C0 IPC::RequestParser rp(ctx);
auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>()); auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>());
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
@ -1076,7 +1076,7 @@ void Module::Interface::GetDLCContentInfoCount(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteTicket(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteTicket(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0007, 2, 0); // 0x00070080 IPC::RequestParser rp(ctx);
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -1085,7 +1085,7 @@ void Module::Interface::DeleteTicket(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNumTickets(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNumTickets(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0008, 0, 0); // 0x00080000 IPC::RequestParser rp(ctx);
u32 ticket_count = 0; u32 ticket_count = 0;
for (const auto& title_list : am->am_title_list) { for (const auto& title_list : am->am_title_list) {
@ -1099,7 +1099,7 @@ void Module::Interface::GetNumTickets(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTicketList(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTicketList(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0009, 2, 2); // 0x00090082 IPC::RequestParser rp(ctx);
u32 ticket_list_count = rp.Pop<u32>(); u32 ticket_list_count = rp.Pop<u32>();
u32 ticket_index = rp.Pop<u32>(); u32 ticket_index = rp.Pop<u32>();
auto& ticket_tids_out = rp.PopMappedBuffer(); auto& ticket_tids_out = rp.PopMappedBuffer();
@ -1122,7 +1122,7 @@ void Module::Interface::GetTicketList(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::NeedsCleanup(Kernel::HLERequestContext& ctx) { void Module::Interface::NeedsCleanup(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0013, 1, 0); // 0x00130040 IPC::RequestParser rp(ctx);
const auto media_type = rp.Pop<u8>(); const auto media_type = rp.Pop<u8>();
LOG_DEBUG(Service_AM, "(STUBBED) media_type=0x{:02x}", media_type); LOG_DEBUG(Service_AM, "(STUBBED) media_type=0x{:02x}", media_type);
@ -1133,7 +1133,7 @@ void Module::Interface::NeedsCleanup(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::QueryAvailableTitleDatabase(Kernel::HLERequestContext& ctx) { void Module::Interface::QueryAvailableTitleDatabase(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0019, 1, 0); // 0x190040 IPC::RequestParser rp(ctx);
u8 media_type = rp.Pop<u8>(); u8 media_type = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -1144,7 +1144,7 @@ void Module::Interface::QueryAvailableTitleDatabase(Kernel::HLERequestContext& c
} }
void Module::Interface::CheckContentRights(Kernel::HLERequestContext& ctx) { void Module::Interface::CheckContentRights(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0025, 3, 0); // 0x2500C0 IPC::RequestParser rp(ctx);
u64 tid = rp.Pop<u64>(); u64 tid = rp.Pop<u64>();
u16 content_index = rp.Pop<u16>(); u16 content_index = rp.Pop<u16>();
@ -1161,7 +1161,7 @@ void Module::Interface::CheckContentRights(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::CheckContentRightsIgnorePlatform(Kernel::HLERequestContext& ctx) { void Module::Interface::CheckContentRightsIgnorePlatform(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x002D, 3, 0); // 0x2D00C0 IPC::RequestParser rp(ctx);
u64 tid = rp.Pop<u64>(); u64 tid = rp.Pop<u64>();
u16 content_index = rp.Pop<u16>(); u16 content_index = rp.Pop<u16>();
@ -1177,7 +1177,7 @@ void Module::Interface::CheckContentRightsIgnorePlatform(Kernel::HLERequestConte
} }
void Module::Interface::BeginImportProgram(Kernel::HLERequestContext& ctx) { void Module::Interface::BeginImportProgram(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0402, 1, 0); // 0x04020040 IPC::RequestParser rp(ctx);
auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>()); auto media_type = static_cast<Service::FS::MediaType>(rp.Pop<u8>());
if (am->cia_installing) { if (am->cia_installing) {
@ -1203,7 +1203,7 @@ void Module::Interface::BeginImportProgram(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::BeginImportProgramTemporarily(Kernel::HLERequestContext& ctx) { void Module::Interface::BeginImportProgramTemporarily(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0403, 0, 0); // 0x04030000 IPC::RequestParser rp(ctx);
if (am->cia_installing) { if (am->cia_installing) {
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -1230,7 +1230,7 @@ void Module::Interface::BeginImportProgramTemporarily(Kernel::HLERequestContext&
} }
void Module::Interface::EndImportProgram(Kernel::HLERequestContext& ctx) { void Module::Interface::EndImportProgram(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0405, 0, 2); // 0x04050002 IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto cia = rp.PopObject<Kernel::ClientSession>(); [[maybe_unused]] const auto cia = rp.PopObject<Kernel::ClientSession>();
am->ScanForAllTitles(); am->ScanForAllTitles();
@ -1241,7 +1241,7 @@ void Module::Interface::EndImportProgram(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::EndImportProgramWithoutCommit(Kernel::HLERequestContext& ctx) { void Module::Interface::EndImportProgramWithoutCommit(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0406, 0, 2); // 0x04060002 IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto cia = rp.PopObject<Kernel::ClientSession>(); [[maybe_unused]] const auto cia = rp.PopObject<Kernel::ClientSession>();
// Note: This function is basically a no-op for us since we don't use title.db or ticket.db // Note: This function is basically a no-op for us since we don't use title.db or ticket.db
@ -1254,7 +1254,7 @@ void Module::Interface::EndImportProgramWithoutCommit(Kernel::HLERequestContext&
} }
void Module::Interface::CommitImportPrograms(Kernel::HLERequestContext& ctx) { void Module::Interface::CommitImportPrograms(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0407, 3, 2); // 0x040700C2 IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>()); [[maybe_unused]] const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>());
[[maybe_unused]] const u32 title_count = rp.Pop<u32>(); [[maybe_unused]] const u32 title_count = rp.Pop<u32>();
[[maybe_unused]] const u8 database = rp.Pop<u8>(); [[maybe_unused]] const u8 database = rp.Pop<u8>();
@ -1341,7 +1341,7 @@ ResultVal<std::unique_ptr<AMFileWrapper>> GetFileFromSession(
} }
void Module::Interface::GetProgramInfoFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetProgramInfoFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0408, 1, 2); // 0x04080042 IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>()); [[maybe_unused]] const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>());
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();
@ -1378,7 +1378,7 @@ void Module::Interface::GetProgramInfoFromCia(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetSystemMenuDataFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetSystemMenuDataFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0409, 0, 4); // 0x04090004 IPC::RequestParser rp(ctx);
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();
auto& output_buffer = rp.PopMappedBuffer(); auto& output_buffer = rp.PopMappedBuffer();
@ -1422,7 +1422,7 @@ void Module::Interface::GetSystemMenuDataFromCia(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::GetDependencyListFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetDependencyListFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x040A, 0, 2); // 0x040A0002 IPC::RequestParser rp(ctx);
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();
auto file_res = GetFileFromSession(cia); auto file_res = GetFileFromSession(cia);
@ -1449,7 +1449,7 @@ void Module::Interface::GetDependencyListFromCia(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::GetTransferSizeFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTransferSizeFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x040B, 0, 2); // 0x040B0002 IPC::RequestParser rp(ctx);
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();
auto file_res = GetFileFromSession(cia); auto file_res = GetFileFromSession(cia);
@ -1473,7 +1473,7 @@ void Module::Interface::GetTransferSizeFromCia(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetCoreVersionFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetCoreVersionFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x040C, 0, 2); // 0x040C0002 IPC::RequestParser rp(ctx);
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();
auto file_res = GetFileFromSession(cia); auto file_res = GetFileFromSession(cia);
@ -1497,7 +1497,7 @@ void Module::Interface::GetCoreVersionFromCia(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetRequiredSizeFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetRequiredSizeFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x040D, 1, 2); // 0x040D0042 IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>()); [[maybe_unused]] const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>());
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();
@ -1525,7 +1525,7 @@ void Module::Interface::GetRequiredSizeFromCia(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteProgram(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteProgram(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0410, 3, 0); IPC::RequestParser rp(ctx);
auto media_type = rp.PopEnum<FS::MediaType>(); auto media_type = rp.PopEnum<FS::MediaType>();
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
LOG_INFO(Service_AM, "Deleting title 0x{:016x}", title_id); LOG_INFO(Service_AM, "Deleting title 0x{:016x}", title_id);
@ -1545,7 +1545,7 @@ void Module::Interface::DeleteProgram(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetSystemUpdaterMutex(Kernel::HLERequestContext& ctx) { void Module::Interface::GetSystemUpdaterMutex(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x412, 0, 0); // 0x04120000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -1553,7 +1553,7 @@ void Module::Interface::GetSystemUpdaterMutex(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetMetaSizeFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetMetaSizeFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0413, 0, 2); // 0x04130002 IPC::RequestParser rp(ctx);
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();
auto file_res = GetFileFromSession(cia); auto file_res = GetFileFromSession(cia);
@ -1578,7 +1578,7 @@ void Module::Interface::GetMetaSizeFromCia(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetMetaDataFromCia(Kernel::HLERequestContext& ctx) { void Module::Interface::GetMetaDataFromCia(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0414, 1, 4); // 0x04140044 IPC::RequestParser rp(ctx);
u32 output_size = rp.Pop<u32>(); u32 output_size = rp.Pop<u32>();
auto cia = rp.PopObject<Kernel::ClientSession>(); auto cia = rp.PopObject<Kernel::ClientSession>();

View file

@ -10,19 +10,19 @@ namespace Service::AM {
AM_APP::AM_APP(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:app", 5) { AM_APP::AM_APP(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:app", 5) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x1001, 3, 0), &AM_APP::GetDLCContentInfoCount, "GetDLCContentInfoCount"}, {0x1001, &AM_APP::GetDLCContentInfoCount, "GetDLCContentInfoCount"},
{IPC::MakeHeader(0x1002, 4, 4), &AM_APP::FindDLCContentInfos, "FindDLCContentInfos"}, {0x1002, &AM_APP::FindDLCContentInfos, "FindDLCContentInfos"},
{IPC::MakeHeader(0x1003, 5, 2), &AM_APP::ListDLCContentInfos, "ListDLCContentInfos"}, {0x1003, &AM_APP::ListDLCContentInfos, "ListDLCContentInfos"},
{IPC::MakeHeader(0x1004, 4, 2), &AM_APP::DeleteContents, "DeleteContents"}, {0x1004, &AM_APP::DeleteContents, "DeleteContents"},
{IPC::MakeHeader(0x1005, 2, 4), &AM_APP::GetDLCTitleInfos, "GetDLCTitleInfos"}, {0x1005, &AM_APP::GetDLCTitleInfos, "GetDLCTitleInfos"},
{IPC::MakeHeader(0x1006, 2, 0), nullptr, "GetNumDataTitleTickets"}, {0x1006, nullptr, "GetNumDataTitleTickets"},
{IPC::MakeHeader(0x1007, 4, 2), &AM_APP::ListDataTitleTicketInfos, "ListDataTitleTicketInfos"}, {0x1007, &AM_APP::ListDataTitleTicketInfos, "ListDataTitleTicketInfos"},
{IPC::MakeHeader(0x1008, 7, 2), nullptr, "GetItemRights"}, {0x1008, nullptr, "GetItemRights"},
{IPC::MakeHeader(0x1009, 3, 0), nullptr, "IsDataTitleInUse"}, {0x1009, nullptr, "IsDataTitleInUse"},
{IPC::MakeHeader(0x100A, 0, 0), nullptr, "IsExternalTitleDatabaseInitialized"}, {0x100A, nullptr, "IsExternalTitleDatabaseInitialized"},
{IPC::MakeHeader(0x100B, 3, 0), nullptr, "GetNumExistingContentInfos"}, {0x100B, nullptr, "GetNumExistingContentInfos"},
{IPC::MakeHeader(0x100C, 5, 2), nullptr, "ListExistingContentInfos"}, {0x100C, nullptr, "ListExistingContentInfos"},
{IPC::MakeHeader(0x100D, 2, 4), &AM_APP::GetPatchTitleInfos, "GetPatchTitleInfos"}, {0x100D, &AM_APP::GetPatchTitleInfos, "GetPatchTitleInfos"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -10,116 +10,116 @@ namespace Service::AM {
AM_NET::AM_NET(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:net", 5) { AM_NET::AM_NET(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:net", 5) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &AM_NET::GetNumPrograms, "GetNumPrograms"}, {0x0001, &AM_NET::GetNumPrograms, "GetNumPrograms"},
{IPC::MakeHeader(0x0002, 2, 2), &AM_NET::GetProgramList, "GetProgramList"}, {0x0002, &AM_NET::GetProgramList, "GetProgramList"},
{IPC::MakeHeader(0x0003, 2, 4), &AM_NET::GetProgramInfos, "GetProgramInfos"}, {0x0003, &AM_NET::GetProgramInfos, "GetProgramInfos"},
{IPC::MakeHeader(0x0004, 3, 0), &AM_NET::DeleteUserProgram, "DeleteUserProgram"}, {0x0004, &AM_NET::DeleteUserProgram, "DeleteUserProgram"},
{IPC::MakeHeader(0x0005, 3, 0), &AM_NET::GetProductCode, "GetProductCode"}, {0x0005, &AM_NET::GetProductCode, "GetProductCode"},
{IPC::MakeHeader(0x0006, 3, 0), nullptr, "GetStorageId"}, {0x0006, nullptr, "GetStorageId"},
{IPC::MakeHeader(0x0007, 2, 0), &AM_NET::DeleteTicket, "DeleteTicket"}, {0x0007, &AM_NET::DeleteTicket, "DeleteTicket"},
{IPC::MakeHeader(0x0008, 0, 0), &AM_NET::GetNumTickets, "GetNumTickets"}, {0x0008, &AM_NET::GetNumTickets, "GetNumTickets"},
{IPC::MakeHeader(0x0009, 2, 2), &AM_NET::GetTicketList, "GetTicketList"}, {0x0009, &AM_NET::GetTicketList, "GetTicketList"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetDeviceID"}, {0x000A, nullptr, "GetDeviceID"},
{IPC::MakeHeader(0x000B, 1, 0), nullptr, "GetNumImportTitleContexts"}, {0x000B, nullptr, "GetNumImportTitleContexts"},
{IPC::MakeHeader(0x000C, 2, 2), nullptr, "GetImportTitleContextList"}, {0x000C, nullptr, "GetImportTitleContextList"},
{IPC::MakeHeader(0x000D, 2, 4), nullptr, "GetImportTitleContexts"}, {0x000D, nullptr, "GetImportTitleContexts"},
{IPC::MakeHeader(0x000E, 3, 0), nullptr, "DeleteImportTitleContext"}, {0x000E, nullptr, "DeleteImportTitleContext"},
{IPC::MakeHeader(0x000F, 3, 0), nullptr, "GetNumImportContentContexts"}, {0x000F, nullptr, "GetNumImportContentContexts"},
{IPC::MakeHeader(0x0010, 4, 2), nullptr, "GetImportContentContextList"}, {0x0010, nullptr, "GetImportContentContextList"},
{IPC::MakeHeader(0x0011, 4, 4), nullptr, "GetImportContentContexts"}, {0x0011, nullptr, "GetImportContentContexts"},
{IPC::MakeHeader(0x0012, 4, 2), nullptr, "DeleteImportContentContexts"}, {0x0012, nullptr, "DeleteImportContentContexts"},
{IPC::MakeHeader(0x0013, 1, 0), &AM_NET::NeedsCleanup, "NeedsCleanup"}, {0x0013, &AM_NET::NeedsCleanup, "NeedsCleanup"},
{IPC::MakeHeader(0x0014, 1, 0), nullptr, "DoCleanup"}, {0x0014, nullptr, "DoCleanup"},
{IPC::MakeHeader(0x0015, 1, 0), nullptr, "DeleteAllImportContexts"}, {0x0015, nullptr, "DeleteAllImportContexts"},
{IPC::MakeHeader(0x0016, 0, 0), nullptr, "DeleteAllTemporaryPrograms"}, {0x0016, nullptr, "DeleteAllTemporaryPrograms"},
{IPC::MakeHeader(0x0017, 1, 4), nullptr, "ImportTwlBackupLegacy"}, {0x0017, nullptr, "ImportTwlBackupLegacy"},
{IPC::MakeHeader(0x0018, 2, 0), nullptr, "InitializeTitleDatabase"}, {0x0018, nullptr, "InitializeTitleDatabase"},
{IPC::MakeHeader(0x0019, 1, 0), nullptr, "QueryAvailableTitleDatabase"}, {0x0019, nullptr, "QueryAvailableTitleDatabase"},
{IPC::MakeHeader(0x001A, 3, 0), nullptr, "CalcTwlBackupSize"}, {0x001A, nullptr, "CalcTwlBackupSize"},
{IPC::MakeHeader(0x001B, 5, 4), nullptr, "ExportTwlBackup"}, {0x001B, nullptr, "ExportTwlBackup"},
{IPC::MakeHeader(0x001C, 2, 4), nullptr, "ImportTwlBackup"}, {0x001C, nullptr, "ImportTwlBackup"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "DeleteAllTwlUserPrograms"}, {0x001D, nullptr, "DeleteAllTwlUserPrograms"},
{IPC::MakeHeader(0x001E, 3, 8), nullptr, "ReadTwlBackupInfo"}, {0x001E, nullptr, "ReadTwlBackupInfo"},
{IPC::MakeHeader(0x001F, 1, 0), nullptr, "DeleteAllExpiredUserPrograms"}, {0x001F, nullptr, "DeleteAllExpiredUserPrograms"},
{IPC::MakeHeader(0x0020, 0, 0), nullptr, "GetTwlArchiveResourceInfo"}, {0x0020, nullptr, "GetTwlArchiveResourceInfo"},
{IPC::MakeHeader(0x0021, 1, 2), nullptr, "GetPersonalizedTicketInfoList"}, {0x0021, nullptr, "GetPersonalizedTicketInfoList"},
{IPC::MakeHeader(0x0022, 2, 0), nullptr, "DeleteAllImportContextsFiltered"}, {0x0022, nullptr, "DeleteAllImportContextsFiltered"},
{IPC::MakeHeader(0x0023, 2, 0), nullptr, "GetNumImportTitleContextsFiltered"}, {0x0023, nullptr, "GetNumImportTitleContextsFiltered"},
{IPC::MakeHeader(0x0024, 3, 2), nullptr, "GetImportTitleContextListFiltered"}, {0x0024, nullptr, "GetImportTitleContextListFiltered"},
{IPC::MakeHeader(0x0025, 3, 0), nullptr, "CheckContentRights"}, {0x0025, nullptr, "CheckContentRights"},
{IPC::MakeHeader(0x0026, 1, 4), nullptr, "GetTicketLimitInfos"}, {0x0026, nullptr, "GetTicketLimitInfos"},
{IPC::MakeHeader(0x0027, 1, 4), nullptr, "GetDemoLaunchInfos"}, {0x0027, nullptr, "GetDemoLaunchInfos"},
{IPC::MakeHeader(0x0028, 4, 8), nullptr, "ReadTwlBackupInfoEx"}, {0x0028, nullptr, "ReadTwlBackupInfoEx"},
{IPC::MakeHeader(0x0029, 2, 2), nullptr, "DeleteUserProgramsAtomically"}, {0x0029, nullptr, "DeleteUserProgramsAtomically"},
{IPC::MakeHeader(0x002A, 3, 0), nullptr, "GetNumExistingContentInfosSystem"}, {0x002A, nullptr, "GetNumExistingContentInfosSystem"},
{IPC::MakeHeader(0x002B, 5, 2), nullptr, "ListExistingContentInfosSystem"}, {0x002B, nullptr, "ListExistingContentInfosSystem"},
{IPC::MakeHeader(0x002C, 2, 4), nullptr, "GetProgramInfosIgnorePlatform"}, {0x002C, nullptr, "GetProgramInfosIgnorePlatform"},
{IPC::MakeHeader(0x002D, 3, 0), nullptr, "CheckContentRightsIgnorePlatform"}, {0x002D, nullptr, "CheckContentRightsIgnorePlatform"},
{IPC::MakeHeader(0x0401, 2, 0), nullptr, "UpdateFirmwareTo"}, {0x0401, nullptr, "UpdateFirmwareTo"},
{IPC::MakeHeader(0x0402, 1, 0), &AM_NET::BeginImportProgram, "BeginImportProgram"}, {0x0402, &AM_NET::BeginImportProgram, "BeginImportProgram"},
{IPC::MakeHeader(0x0403, 0, 0), nullptr, "BeginImportProgramTemporarily"}, {0x0403, nullptr, "BeginImportProgramTemporarily"},
{IPC::MakeHeader(0x0404, 0, 2), nullptr, "CancelImportProgram"}, {0x0404, nullptr, "CancelImportProgram"},
{IPC::MakeHeader(0x0405, 0, 2), &AM_NET::EndImportProgram, "EndImportProgram"}, {0x0405, &AM_NET::EndImportProgram, "EndImportProgram"},
{IPC::MakeHeader(0x0406, 0, 2), nullptr, "EndImportProgramWithoutCommit"}, {0x0406, nullptr, "EndImportProgramWithoutCommit"},
{IPC::MakeHeader(0x0407, 3, 2), nullptr, "CommitImportPrograms"}, {0x0407, nullptr, "CommitImportPrograms"},
{IPC::MakeHeader(0x0408, 1, 2), &AM_NET::GetProgramInfoFromCia, "GetProgramInfoFromCia"}, {0x0408, &AM_NET::GetProgramInfoFromCia, "GetProgramInfoFromCia"},
{IPC::MakeHeader(0x0409, 0, 4), &AM_NET::GetSystemMenuDataFromCia, "GetSystemMenuDataFromCia"}, {0x0409, &AM_NET::GetSystemMenuDataFromCia, "GetSystemMenuDataFromCia"},
{IPC::MakeHeader(0x040A, 0, 2), &AM_NET::GetDependencyListFromCia, "GetDependencyListFromCia"}, {0x040A, &AM_NET::GetDependencyListFromCia, "GetDependencyListFromCia"},
{IPC::MakeHeader(0x040B, 0, 2), &AM_NET::GetTransferSizeFromCia, "GetTransferSizeFromCia"}, {0x040B, &AM_NET::GetTransferSizeFromCia, "GetTransferSizeFromCia"},
{IPC::MakeHeader(0x040C, 0, 2), &AM_NET::GetCoreVersionFromCia, "GetCoreVersionFromCia"}, {0x040C, &AM_NET::GetCoreVersionFromCia, "GetCoreVersionFromCia"},
{IPC::MakeHeader(0x040D, 1, 2), &AM_NET::GetRequiredSizeFromCia, "GetRequiredSizeFromCia"}, {0x040D, &AM_NET::GetRequiredSizeFromCia, "GetRequiredSizeFromCia"},
{IPC::MakeHeader(0x040E, 3, 2), nullptr, "CommitImportProgramsAndUpdateFirmwareAuto"}, {0x040E, nullptr, "CommitImportProgramsAndUpdateFirmwareAuto"},
{IPC::MakeHeader(0x040F, 0, 0), nullptr, "UpdateFirmwareAuto"}, {0x040F, nullptr, "UpdateFirmwareAuto"},
{IPC::MakeHeader(0x0410, 3, 0), &AM_NET::DeleteProgram, "DeleteProgram"}, {0x0410, &AM_NET::DeleteProgram, "DeleteProgram"},
{IPC::MakeHeader(0x0411, 1, 4), nullptr, "GetTwlProgramListForReboot"}, {0x0411, nullptr, "GetTwlProgramListForReboot"},
{IPC::MakeHeader(0x0412, 0, 0), nullptr, "GetSystemUpdaterMutex"}, {0x0412, nullptr, "GetSystemUpdaterMutex"},
{IPC::MakeHeader(0x0413, 0, 2), &AM_NET::GetMetaSizeFromCia, "GetMetaSizeFromCia"}, {0x0413, &AM_NET::GetMetaSizeFromCia, "GetMetaSizeFromCia"},
{IPC::MakeHeader(0x0414, 1, 4), &AM_NET::GetMetaDataFromCia, "GetMetaDataFromCia"}, {0x0414, &AM_NET::GetMetaDataFromCia, "GetMetaDataFromCia"},
{IPC::MakeHeader(0x0415, 2, 0), nullptr, "CheckDemoLaunchRights"}, {0x0415, nullptr, "CheckDemoLaunchRights"},
{IPC::MakeHeader(0x0416, 3, 0), nullptr, "GetInternalTitleLocationInfo"}, {0x0416, nullptr, "GetInternalTitleLocationInfo"},
{IPC::MakeHeader(0x0417, 3, 0), nullptr, "PerpetuateAgbSaveData"}, {0x0417, nullptr, "PerpetuateAgbSaveData"},
{IPC::MakeHeader(0x0418, 1, 0), nullptr, "BeginImportProgramForOverWrite"}, {0x0418, nullptr, "BeginImportProgramForOverWrite"},
{IPC::MakeHeader(0x0419, 0, 0), nullptr, "BeginImportSystemProgram"}, {0x0419, nullptr, "BeginImportSystemProgram"},
{IPC::MakeHeader(0x0801, 0, 0), nullptr, "BeginImportTicket"}, {0x0801, nullptr, "BeginImportTicket"},
{IPC::MakeHeader(0x0802, 0, 2), nullptr, "CancelImportTicket"}, {0x0802, nullptr, "CancelImportTicket"},
{IPC::MakeHeader(0x0803, 0, 2), nullptr, "EndImportTicket"}, {0x0803, nullptr, "EndImportTicket"},
{IPC::MakeHeader(0x0804, 4, 0), nullptr, "BeginImportTitle"}, {0x0804, nullptr, "BeginImportTitle"},
{IPC::MakeHeader(0x0805, 0, 0), nullptr, "StopImportTitle"}, {0x0805, nullptr, "StopImportTitle"},
{IPC::MakeHeader(0x0806, 3, 0), nullptr, "ResumeImportTitle"}, {0x0806, nullptr, "ResumeImportTitle"},
{IPC::MakeHeader(0x0807, 0, 0), nullptr, "CancelImportTitle"}, {0x0807, nullptr, "CancelImportTitle"},
{IPC::MakeHeader(0x0808, 0, 0), nullptr, "EndImportTitle"}, {0x0808, nullptr, "EndImportTitle"},
{IPC::MakeHeader(0x0809, 3, 2), nullptr, "CommitImportTitles"}, {0x0809, nullptr, "CommitImportTitles"},
{IPC::MakeHeader(0x080A, 0, 0), nullptr, "BeginImportTmd"}, {0x080A, nullptr, "BeginImportTmd"},
{IPC::MakeHeader(0x080B, 0, 2), nullptr, "CancelImportTmd"}, {0x080B, nullptr, "CancelImportTmd"},
{IPC::MakeHeader(0x080C, 1, 2), nullptr, "EndImportTmd"}, {0x080C, nullptr, "EndImportTmd"},
{IPC::MakeHeader(0x080D, 1, 2), nullptr, "CreateImportContentContexts"}, {0x080D, nullptr, "CreateImportContentContexts"},
{IPC::MakeHeader(0x080E, 1, 0), nullptr, "BeginImportContent"}, {0x080E, nullptr, "BeginImportContent"},
{IPC::MakeHeader(0x080F, 0, 2), nullptr, "StopImportContent"}, {0x080F, nullptr, "StopImportContent"},
{IPC::MakeHeader(0x0810, 1, 0), nullptr, "ResumeImportContent"}, {0x0810, nullptr, "ResumeImportContent"},
{IPC::MakeHeader(0x0811, 0, 2), nullptr, "CancelImportContent"}, {0x0811, nullptr, "CancelImportContent"},
{IPC::MakeHeader(0x0812, 0, 2), nullptr, "EndImportContent"}, {0x0812, nullptr, "EndImportContent"},
{IPC::MakeHeader(0x0813, 0, 0), nullptr, "GetNumCurrentImportContentContexts"}, {0x0813, nullptr, "GetNumCurrentImportContentContexts"},
{IPC::MakeHeader(0x0814, 1, 2), nullptr, "GetCurrentImportContentContextList"}, {0x0814, nullptr, "GetCurrentImportContentContextList"},
{IPC::MakeHeader(0x0815, 1, 4), nullptr, "GetCurrentImportContentContexts"}, {0x0815, nullptr, "GetCurrentImportContentContexts"},
{IPC::MakeHeader(0x0816, 5, 6), nullptr, "Sign"}, {0x0816, nullptr, "Sign"},
{IPC::MakeHeader(0x0817, 5, 6), nullptr, "Verify"}, {0x0817, nullptr, "Verify"},
{IPC::MakeHeader(0x0818, 1, 2), nullptr, "GetDeviceCert"}, {0x0818, nullptr, "GetDeviceCert"},
{IPC::MakeHeader(0x0819, 4, 8), nullptr, "ImportCertificates"}, {0x0819, nullptr, "ImportCertificates"},
{IPC::MakeHeader(0x081A, 1, 2), nullptr, "ImportCertificate"}, {0x081A, nullptr, "ImportCertificate"},
{IPC::MakeHeader(0x081B, 3, 2), nullptr, "CommitImportTitlesAndUpdateFirmwareAuto"}, {0x081B, nullptr, "CommitImportTitlesAndUpdateFirmwareAuto"},
{IPC::MakeHeader(0x081C, 4, 0), nullptr, "DeleteTicketId"}, {0x081C, nullptr, "DeleteTicketId"},
{IPC::MakeHeader(0x081D, 2, 0), nullptr, "GetNumTicketIds"}, {0x081D, nullptr, "GetNumTicketIds"},
{IPC::MakeHeader(0x081E, 4, 2), nullptr, "GetTicketIdList"}, {0x081E, nullptr, "GetTicketIdList"},
{IPC::MakeHeader(0x081F, 2, 0), nullptr, "GetNumTicketsOfProgram"}, {0x081F, nullptr, "GetNumTicketsOfProgram"},
{IPC::MakeHeader(0x0820, 4, 2), nullptr, "ListTicketInfos"}, {0x0820, nullptr, "ListTicketInfos"},
{IPC::MakeHeader(0x0821, 5, 2), nullptr, "GetRightsOnlyTicketData"}, {0x0821, nullptr, "GetRightsOnlyTicketData"},
{IPC::MakeHeader(0x0822, 0, 0), nullptr, "GetNumCurrentContentInfos"}, {0x0822, nullptr, "GetNumCurrentContentInfos"},
{IPC::MakeHeader(0x0823, 1, 4), nullptr, "FindCurrentContentInfos"}, {0x0823, nullptr, "FindCurrentContentInfos"},
{IPC::MakeHeader(0x0824, 2, 2), nullptr, "ListCurrentContentInfos"}, {0x0824, nullptr, "ListCurrentContentInfos"},
{IPC::MakeHeader(0x0825, 4, 2), nullptr, "CalculateContextRequiredSize"}, {0x0825, nullptr, "CalculateContextRequiredSize"},
{IPC::MakeHeader(0x0826, 1, 2), nullptr, "UpdateImportContentContexts"}, {0x0826, nullptr, "UpdateImportContentContexts"},
{IPC::MakeHeader(0x0827, 0, 0), nullptr, "DeleteAllDemoLaunchInfos"}, {0x0827, nullptr, "DeleteAllDemoLaunchInfos"},
{IPC::MakeHeader(0x0828, 3, 0), nullptr, "BeginImportTitleForOverWrite"}, {0x0828, nullptr, "BeginImportTitleForOverWrite"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -10,64 +10,64 @@ namespace Service::AM {
AM_SYS::AM_SYS(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:sys", 5) { AM_SYS::AM_SYS(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:sys", 5) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &AM_SYS::GetNumPrograms, "GetNumPrograms"}, {0x0001, &AM_SYS::GetNumPrograms, "GetNumPrograms"},
{IPC::MakeHeader(0x0002, 2, 2), &AM_SYS::GetProgramList, "GetProgramList"}, {0x0002, &AM_SYS::GetProgramList, "GetProgramList"},
{IPC::MakeHeader(0x0003, 2, 4), &AM_SYS::GetProgramInfos, "GetProgramInfos"}, {0x0003, &AM_SYS::GetProgramInfos, "GetProgramInfos"},
{IPC::MakeHeader(0x0004, 3, 0), &AM_SYS::DeleteUserProgram, "DeleteUserProgram"}, {0x0004, &AM_SYS::DeleteUserProgram, "DeleteUserProgram"},
{IPC::MakeHeader(0x0005, 3, 0), &AM_SYS::GetProductCode, "GetProductCode"}, {0x0005, &AM_SYS::GetProductCode, "GetProductCode"},
{IPC::MakeHeader(0x0006, 3, 0), nullptr, "GetStorageId"}, {0x0006, nullptr, "GetStorageId"},
{IPC::MakeHeader(0x0007, 2, 0), &AM_SYS::DeleteTicket, "DeleteTicket"}, {0x0007, &AM_SYS::DeleteTicket, "DeleteTicket"},
{IPC::MakeHeader(0x0008, 0, 0), &AM_SYS::GetNumTickets, "GetNumTickets"}, {0x0008, &AM_SYS::GetNumTickets, "GetNumTickets"},
{IPC::MakeHeader(0x0009, 2, 2), &AM_SYS::GetTicketList, "GetTicketList"}, {0x0009, &AM_SYS::GetTicketList, "GetTicketList"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetDeviceID"}, {0x000A, nullptr, "GetDeviceID"},
{IPC::MakeHeader(0x000B, 1, 0), nullptr, "GetNumImportTitleContexts"}, {0x000B, nullptr, "GetNumImportTitleContexts"},
{IPC::MakeHeader(0x000C, 2, 2), nullptr, "GetImportTitleContextList"}, {0x000C, nullptr, "GetImportTitleContextList"},
{IPC::MakeHeader(0x000D, 2, 4), nullptr, "GetImportTitleContexts"}, {0x000D, nullptr, "GetImportTitleContexts"},
{IPC::MakeHeader(0x000E, 3, 0), nullptr, "DeleteImportTitleContext"}, {0x000E, nullptr, "DeleteImportTitleContext"},
{IPC::MakeHeader(0x000F, 3, 0), nullptr, "GetNumImportContentContexts"}, {0x000F, nullptr, "GetNumImportContentContexts"},
{IPC::MakeHeader(0x0010, 4, 2), nullptr, "GetImportContentContextList"}, {0x0010, nullptr, "GetImportContentContextList"},
{IPC::MakeHeader(0x0011, 4, 4), nullptr, "GetImportContentContexts"}, {0x0011, nullptr, "GetImportContentContexts"},
{IPC::MakeHeader(0x0012, 4, 2), nullptr, "DeleteImportContentContexts"}, {0x0012, nullptr, "DeleteImportContentContexts"},
{IPC::MakeHeader(0x0013, 1, 0), &AM_SYS::NeedsCleanup, "NeedsCleanup"}, {0x0013, &AM_SYS::NeedsCleanup, "NeedsCleanup"},
{IPC::MakeHeader(0x0014, 1, 0), nullptr, "DoCleanup"}, {0x0014, nullptr, "DoCleanup"},
{IPC::MakeHeader(0x0015, 1, 0), nullptr, "DeleteAllImportContexts"}, {0x0015, nullptr, "DeleteAllImportContexts"},
{IPC::MakeHeader(0x0016, 0, 0), nullptr, "DeleteAllTemporaryPrograms"}, {0x0016, nullptr, "DeleteAllTemporaryPrograms"},
{IPC::MakeHeader(0x0017, 1, 4), nullptr, "ImportTwlBackupLegacy"}, {0x0017, nullptr, "ImportTwlBackupLegacy"},
{IPC::MakeHeader(0x0018, 2, 0), nullptr, "InitializeTitleDatabase"}, {0x0018, nullptr, "InitializeTitleDatabase"},
{IPC::MakeHeader(0x0019, 1, 0), &AM_SYS::QueryAvailableTitleDatabase, "QueryAvailableTitleDatabase"}, {0x0019, &AM_SYS::QueryAvailableTitleDatabase, "QueryAvailableTitleDatabase"},
{IPC::MakeHeader(0x001A, 3, 0), nullptr, "CalcTwlBackupSize"}, {0x001A, nullptr, "CalcTwlBackupSize"},
{IPC::MakeHeader(0x001B, 5, 4), nullptr, "ExportTwlBackup"}, {0x001B, nullptr, "ExportTwlBackup"},
{IPC::MakeHeader(0x001C, 2, 4), nullptr, "ImportTwlBackup"}, {0x001C, nullptr, "ImportTwlBackup"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "DeleteAllTwlUserPrograms"}, {0x001D, nullptr, "DeleteAllTwlUserPrograms"},
{IPC::MakeHeader(0x001E, 3, 8), nullptr, "ReadTwlBackupInfo"}, {0x001E, nullptr, "ReadTwlBackupInfo"},
{IPC::MakeHeader(0x001F, 1, 0), nullptr, "DeleteAllExpiredUserPrograms"}, {0x001F, nullptr, "DeleteAllExpiredUserPrograms"},
{IPC::MakeHeader(0x0020, 0, 0), nullptr, "GetTwlArchiveResourceInfo"}, {0x0020, nullptr, "GetTwlArchiveResourceInfo"},
{IPC::MakeHeader(0x0021, 1, 2), nullptr, "GetPersonalizedTicketInfoList"}, {0x0021, nullptr, "GetPersonalizedTicketInfoList"},
{IPC::MakeHeader(0x0022, 2, 0), nullptr, "DeleteAllImportContextsFiltered"}, {0x0022, nullptr, "DeleteAllImportContextsFiltered"},
{IPC::MakeHeader(0x0023, 2, 0), nullptr, "GetNumImportTitleContextsFiltered"}, {0x0023, nullptr, "GetNumImportTitleContextsFiltered"},
{IPC::MakeHeader(0x0024, 3, 2), nullptr, "GetImportTitleContextListFiltered"}, {0x0024, nullptr, "GetImportTitleContextListFiltered"},
{IPC::MakeHeader(0x0025, 3, 0), &AM_SYS::CheckContentRights, "CheckContentRights"}, {0x0025, &AM_SYS::CheckContentRights, "CheckContentRights"},
{IPC::MakeHeader(0x0026, 1, 4), nullptr, "GetTicketLimitInfos"}, {0x0026, nullptr, "GetTicketLimitInfos"},
{IPC::MakeHeader(0x0027, 1, 4), nullptr, "GetDemoLaunchInfos"}, {0x0027, nullptr, "GetDemoLaunchInfos"},
{IPC::MakeHeader(0x0028, 4, 8), nullptr, "ReadTwlBackupInfoEx"}, {0x0028, nullptr, "ReadTwlBackupInfoEx"},
{IPC::MakeHeader(0x0029, 2, 2), nullptr, "DeleteUserProgramsAtomically"}, {0x0029, nullptr, "DeleteUserProgramsAtomically"},
{IPC::MakeHeader(0x002A, 3, 0), nullptr, "GetNumExistingContentInfosSystem"}, {0x002A, nullptr, "GetNumExistingContentInfosSystem"},
{IPC::MakeHeader(0x002B, 5, 2), nullptr, "ListExistingContentInfosSystem"}, {0x002B, nullptr, "ListExistingContentInfosSystem"},
{IPC::MakeHeader(0x002C, 2, 4), nullptr, "GetProgramInfosIgnorePlatform"}, {0x002C, nullptr, "GetProgramInfosIgnorePlatform"},
{IPC::MakeHeader(0x002D, 3, 0), &AM_SYS::CheckContentRightsIgnorePlatform, "CheckContentRightsIgnorePlatform"}, {0x002D, &AM_SYS::CheckContentRightsIgnorePlatform, "CheckContentRightsIgnorePlatform"},
{IPC::MakeHeader(0x1001, 3, 0), &AM_SYS::GetDLCContentInfoCount, "GetDLCContentInfoCount"}, {0x1001, &AM_SYS::GetDLCContentInfoCount, "GetDLCContentInfoCount"},
{IPC::MakeHeader(0x1002, 4, 4), &AM_SYS::FindDLCContentInfos, "FindDLCContentInfos"}, {0x1002, &AM_SYS::FindDLCContentInfos, "FindDLCContentInfos"},
{IPC::MakeHeader(0x1003, 5, 2), &AM_SYS::ListDLCContentInfos, "ListDLCContentInfos"}, {0x1003, &AM_SYS::ListDLCContentInfos, "ListDLCContentInfos"},
{IPC::MakeHeader(0x1004, 4, 2), &AM_SYS::DeleteContents, "DeleteContents"}, {0x1004, &AM_SYS::DeleteContents, "DeleteContents"},
{IPC::MakeHeader(0x1005, 2, 4), &AM_SYS::GetDLCTitleInfos, "GetDLCTitleInfos"}, {0x1005, &AM_SYS::GetDLCTitleInfos, "GetDLCTitleInfos"},
{IPC::MakeHeader(0x1006, 2, 0), nullptr, "GetNumDataTitleTickets"}, {0x1006, nullptr, "GetNumDataTitleTickets"},
{IPC::MakeHeader(0x1007, 4, 2), &AM_SYS::ListDataTitleTicketInfos, "ListDataTitleTicketInfos"}, {0x1007, &AM_SYS::ListDataTitleTicketInfos, "ListDataTitleTicketInfos"},
{IPC::MakeHeader(0x1008, 7, 2), nullptr, "GetItemRights"}, {0x1008, nullptr, "GetItemRights"},
{IPC::MakeHeader(0x1009, 3, 0), nullptr, "IsDataTitleInUse"}, {0x1009, nullptr, "IsDataTitleInUse"},
{IPC::MakeHeader(0x100A, 0, 0), nullptr, "IsExternalTitleDatabaseInitialized"}, {0x100A, nullptr, "IsExternalTitleDatabaseInitialized"},
{IPC::MakeHeader(0x100B, 3, 0), nullptr, "GetNumExistingContentInfos"}, {0x100B, nullptr, "GetNumExistingContentInfos"},
{IPC::MakeHeader(0x100C, 5, 2), nullptr, "ListExistingContentInfos"}, {0x100C, nullptr, "ListExistingContentInfos"},
{IPC::MakeHeader(0x100D, 2, 4), &AM_SYS::GetPatchTitleInfos, "GetPatchTitleInfos"}, {0x100D, &AM_SYS::GetPatchTitleInfos, "GetPatchTitleInfos"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -10,76 +10,76 @@ namespace Service::AM {
AM_U::AM_U(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:u", 5) { AM_U::AM_U(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:u", 5) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &AM_U::GetNumPrograms, "GetNumPrograms"}, {0x0001, &AM_U::GetNumPrograms, "GetNumPrograms"},
{IPC::MakeHeader(0x0002, 2, 2), &AM_U::GetProgramList, "GetProgramList"}, {0x0002, &AM_U::GetProgramList, "GetProgramList"},
{IPC::MakeHeader(0x0003, 2, 4), &AM_U::GetProgramInfos, "GetProgramInfos"}, {0x0003, &AM_U::GetProgramInfos, "GetProgramInfos"},
{IPC::MakeHeader(0x0004, 3, 0), &AM_U::DeleteUserProgram, "DeleteUserProgram"}, {0x0004, &AM_U::DeleteUserProgram, "DeleteUserProgram"},
{IPC::MakeHeader(0x0005, 3, 0), &AM_U::GetProductCode, "GetProductCode"}, {0x0005, &AM_U::GetProductCode, "GetProductCode"},
{IPC::MakeHeader(0x0006, 3, 0), nullptr, "GetStorageId"}, {0x0006, nullptr, "GetStorageId"},
{IPC::MakeHeader(0x0007, 2, 0), &AM_U::DeleteTicket, "DeleteTicket"}, {0x0007, &AM_U::DeleteTicket, "DeleteTicket"},
{IPC::MakeHeader(0x0008, 0, 0), &AM_U::GetNumTickets, "GetNumTickets"}, {0x0008, &AM_U::GetNumTickets, "GetNumTickets"},
{IPC::MakeHeader(0x0009, 2, 2), &AM_U::GetTicketList, "GetTicketList"}, {0x0009, &AM_U::GetTicketList, "GetTicketList"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetDeviceID"}, {0x000A, nullptr, "GetDeviceID"},
{IPC::MakeHeader(0x000B, 1, 0), nullptr, "GetNumImportTitleContexts"}, {0x000B, nullptr, "GetNumImportTitleContexts"},
{IPC::MakeHeader(0x000C, 2, 2), nullptr, "GetImportTitleContextList"}, {0x000C, nullptr, "GetImportTitleContextList"},
{IPC::MakeHeader(0x000D, 2, 4), nullptr, "GetImportTitleContexts"}, {0x000D, nullptr, "GetImportTitleContexts"},
{IPC::MakeHeader(0x000E, 3, 0), nullptr, "DeleteImportTitleContext"}, {0x000E, nullptr, "DeleteImportTitleContext"},
{IPC::MakeHeader(0x000F, 3, 0), nullptr, "GetNumImportContentContexts"}, {0x000F, nullptr, "GetNumImportContentContexts"},
{IPC::MakeHeader(0x0010, 4, 2), nullptr, "GetImportContentContextList"}, {0x0010, nullptr, "GetImportContentContextList"},
{IPC::MakeHeader(0x0011, 4, 4), nullptr, "GetImportContentContexts"}, {0x0011, nullptr, "GetImportContentContexts"},
{IPC::MakeHeader(0x0012, 4, 2), nullptr, "DeleteImportContentContexts"}, {0x0012, nullptr, "DeleteImportContentContexts"},
{IPC::MakeHeader(0x0013, 1, 0), &AM_U::NeedsCleanup, "NeedsCleanup"}, {0x0013, &AM_U::NeedsCleanup, "NeedsCleanup"},
{IPC::MakeHeader(0x0014, 1, 0), nullptr, "DoCleanup"}, {0x0014, nullptr, "DoCleanup"},
{IPC::MakeHeader(0x0015, 1, 0), nullptr, "DeleteAllImportContexts"}, {0x0015, nullptr, "DeleteAllImportContexts"},
{IPC::MakeHeader(0x0016, 0, 0), nullptr, "DeleteAllTemporaryPrograms"}, {0x0016, nullptr, "DeleteAllTemporaryPrograms"},
{IPC::MakeHeader(0x0017, 1, 4), nullptr, "ImportTwlBackupLegacy"}, {0x0017, nullptr, "ImportTwlBackupLegacy"},
{IPC::MakeHeader(0x0018, 2, 0), nullptr, "InitializeTitleDatabase"}, {0x0018, nullptr, "InitializeTitleDatabase"},
{IPC::MakeHeader(0x0019, 1, 0), nullptr, "QueryAvailableTitleDatabase"}, {0x0019, nullptr, "QueryAvailableTitleDatabase"},
{IPC::MakeHeader(0x001A, 3, 0), nullptr, "CalcTwlBackupSize"}, {0x001A, nullptr, "CalcTwlBackupSize"},
{IPC::MakeHeader(0x001B, 5, 4), nullptr, "ExportTwlBackup"}, {0x001B, nullptr, "ExportTwlBackup"},
{IPC::MakeHeader(0x001C, 2, 4), nullptr, "ImportTwlBackup"}, {0x001C, nullptr, "ImportTwlBackup"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "DeleteAllTwlUserPrograms"}, {0x001D, nullptr, "DeleteAllTwlUserPrograms"},
{IPC::MakeHeader(0x001E, 3, 8), nullptr, "ReadTwlBackupInfo"}, {0x001E, nullptr, "ReadTwlBackupInfo"},
{IPC::MakeHeader(0x001F, 1, 0), nullptr, "DeleteAllExpiredUserPrograms"}, {0x001F, nullptr, "DeleteAllExpiredUserPrograms"},
{IPC::MakeHeader(0x0020, 0, 0), nullptr, "GetTwlArchiveResourceInfo"}, {0x0020, nullptr, "GetTwlArchiveResourceInfo"},
{IPC::MakeHeader(0x0021, 1, 2), nullptr, "GetPersonalizedTicketInfoList"}, {0x0021, nullptr, "GetPersonalizedTicketInfoList"},
{IPC::MakeHeader(0x0022, 2, 0), nullptr, "DeleteAllImportContextsFiltered"}, {0x0022, nullptr, "DeleteAllImportContextsFiltered"},
{IPC::MakeHeader(0x0023, 2, 0), nullptr, "GetNumImportTitleContextsFiltered"}, {0x0023, nullptr, "GetNumImportTitleContextsFiltered"},
{IPC::MakeHeader(0x0024, 3, 2), nullptr, "GetImportTitleContextListFiltered"}, {0x0024, nullptr, "GetImportTitleContextListFiltered"},
{IPC::MakeHeader(0x0025, 3, 0), nullptr, "CheckContentRights"}, {0x0025, nullptr, "CheckContentRights"},
{IPC::MakeHeader(0x0026, 1, 4), nullptr, "GetTicketLimitInfos"}, {0x0026, nullptr, "GetTicketLimitInfos"},
{IPC::MakeHeader(0x0027, 1, 4), nullptr, "GetDemoLaunchInfos"}, {0x0027, nullptr, "GetDemoLaunchInfos"},
{IPC::MakeHeader(0x0028, 4, 8), nullptr, "ReadTwlBackupInfoEx"}, {0x0028, nullptr, "ReadTwlBackupInfoEx"},
{IPC::MakeHeader(0x0029, 2, 2), nullptr, "DeleteUserProgramsAtomically"}, {0x0029, nullptr, "DeleteUserProgramsAtomically"},
{IPC::MakeHeader(0x002A, 3, 0), nullptr, "GetNumExistingContentInfosSystem"}, {0x002A, nullptr, "GetNumExistingContentInfosSystem"},
{IPC::MakeHeader(0x002B, 5, 2), nullptr, "ListExistingContentInfosSystem"}, {0x002B, nullptr, "ListExistingContentInfosSystem"},
{IPC::MakeHeader(0x002C, 2, 4), nullptr, "GetProgramInfosIgnorePlatform"}, {0x002C, nullptr, "GetProgramInfosIgnorePlatform"},
{IPC::MakeHeader(0x002D, 3, 0), nullptr, "CheckContentRightsIgnorePlatform"}, {0x002D, nullptr, "CheckContentRightsIgnorePlatform"},
{IPC::MakeHeader(0x0401, 2, 0), nullptr, "UpdateFirmwareTo"}, {0x0401, nullptr, "UpdateFirmwareTo"},
{IPC::MakeHeader(0x0402, 1, 0), &AM_U::BeginImportProgram, "BeginImportProgram"}, {0x0402, &AM_U::BeginImportProgram, "BeginImportProgram"},
{IPC::MakeHeader(0x0403, 0, 0), &AM_U::BeginImportProgramTemporarily, "BeginImportProgramTemporarily"}, {0x0403, &AM_U::BeginImportProgramTemporarily, "BeginImportProgramTemporarily"},
{IPC::MakeHeader(0x0404, 0, 2), nullptr, "CancelImportProgram"}, {0x0404, nullptr, "CancelImportProgram"},
{IPC::MakeHeader(0x0405, 0, 2), &AM_U::EndImportProgram, "EndImportProgram"}, {0x0405, &AM_U::EndImportProgram, "EndImportProgram"},
{IPC::MakeHeader(0x0406, 0, 2), &AM_U::EndImportProgramWithoutCommit, "EndImportProgramWithoutCommit"}, {0x0406, &AM_U::EndImportProgramWithoutCommit, "EndImportProgramWithoutCommit"},
{IPC::MakeHeader(0x0407, 3, 2), &AM_U::CommitImportPrograms, "CommitImportPrograms"}, {0x0407, &AM_U::CommitImportPrograms, "CommitImportPrograms"},
{IPC::MakeHeader(0x0408, 1, 2), &AM_U::GetProgramInfoFromCia, "GetProgramInfoFromCia"}, {0x0408, &AM_U::GetProgramInfoFromCia, "GetProgramInfoFromCia"},
{IPC::MakeHeader(0x0409, 0, 4), &AM_U::GetSystemMenuDataFromCia, "GetSystemMenuDataFromCia"}, {0x0409, &AM_U::GetSystemMenuDataFromCia, "GetSystemMenuDataFromCia"},
{IPC::MakeHeader(0x040A, 0, 2), &AM_U::GetDependencyListFromCia, "GetDependencyListFromCia"}, {0x040A, &AM_U::GetDependencyListFromCia, "GetDependencyListFromCia"},
{IPC::MakeHeader(0x040B, 0, 2), &AM_U::GetTransferSizeFromCia, "GetTransferSizeFromCia"}, {0x040B, &AM_U::GetTransferSizeFromCia, "GetTransferSizeFromCia"},
{IPC::MakeHeader(0x040C, 0, 2), &AM_U::GetCoreVersionFromCia, "GetCoreVersionFromCia"}, {0x040C, &AM_U::GetCoreVersionFromCia, "GetCoreVersionFromCia"},
{IPC::MakeHeader(0x040D, 1, 2), &AM_U::GetRequiredSizeFromCia, "GetRequiredSizeFromCia"}, {0x040D, &AM_U::GetRequiredSizeFromCia, "GetRequiredSizeFromCia"},
{IPC::MakeHeader(0x040E, 3, 2), nullptr, "CommitImportProgramsAndUpdateFirmwareAuto"}, {0x040E, nullptr, "CommitImportProgramsAndUpdateFirmwareAuto"},
{IPC::MakeHeader(0x040F, 0, 0), nullptr, "UpdateFirmwareAuto"}, {0x040F, nullptr, "UpdateFirmwareAuto"},
{IPC::MakeHeader(0x0410, 3, 0), &AM_U::DeleteProgram, "DeleteProgram"}, {0x0410, &AM_U::DeleteProgram, "DeleteProgram"},
{IPC::MakeHeader(0x0411, 1, 4), nullptr, "GetTwlProgramListForReboot"}, {0x0411, nullptr, "GetTwlProgramListForReboot"},
{IPC::MakeHeader(0x0412, 0, 0), &AM_U::GetSystemUpdaterMutex, "GetSystemUpdaterMutex"}, {0x0412, &AM_U::GetSystemUpdaterMutex, "GetSystemUpdaterMutex"},
{IPC::MakeHeader(0x0413, 0, 2), &AM_U::GetMetaSizeFromCia, "GetMetaSizeFromCia"}, {0x0413, &AM_U::GetMetaSizeFromCia, "GetMetaSizeFromCia"},
{IPC::MakeHeader(0x0414, 1, 4), &AM_U::GetMetaDataFromCia, "GetMetaDataFromCia"}, {0x0414, &AM_U::GetMetaDataFromCia, "GetMetaDataFromCia"},
{IPC::MakeHeader(0x0415, 2, 0), nullptr, "CheckDemoLaunchRights"}, {0x0415, nullptr, "CheckDemoLaunchRights"},
{IPC::MakeHeader(0x0416, 3, 0), nullptr, "GetInternalTitleLocationInfo"}, {0x0416, nullptr, "GetInternalTitleLocationInfo"},
{IPC::MakeHeader(0x0417, 3, 0), nullptr, "PerpetuateAgbSaveData"}, {0x0417, nullptr, "PerpetuateAgbSaveData"},
{IPC::MakeHeader(0x0418, 1, 0), nullptr, "BeginImportProgramForOverWrite"}, {0x0418, nullptr, "BeginImportProgramForOverWrite"},
{IPC::MakeHeader(0x0419, 0, 0), nullptr, "BeginImportSystemProgram"}, {0x0419, nullptr, "BeginImportSystemProgram"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -61,7 +61,7 @@ std::shared_ptr<Module> Module::NSInterface::GetModule() const {
} }
void Module::NSInterface::SetWirelessRebootInfo(Kernel::HLERequestContext& ctx) { void Module::NSInterface::SetWirelessRebootInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 1, 2); // 0x00060042 IPC::RequestParser rp(ctx);
const auto size = rp.Pop<u32>(); const auto size = rp.Pop<u32>();
const auto buffer = rp.PopStaticBuffer(); const auto buffer = rp.PopStaticBuffer();
@ -74,7 +74,7 @@ void Module::NSInterface::SetWirelessRebootInfo(Kernel::HLERequestContext& ctx)
} }
void Module::NSInterface::ShutdownAsync(Kernel::HLERequestContext& ctx) { void Module::NSInterface::ShutdownAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xE, 0, 0); // 0xE0000 IPC::RequestParser rp(ctx);
LOG_INFO(Service_APT, "called"); LOG_INFO(Service_APT, "called");
@ -85,7 +85,7 @@ void Module::NSInterface::ShutdownAsync(Kernel::HLERequestContext& ctx) {
} }
void Module::NSInterface::RebootSystem(Kernel::HLERequestContext& ctx) { void Module::NSInterface::RebootSystem(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 6, 0); // 0x100180 IPC::RequestParser rp(ctx);
const auto launch_title = rp.Pop<u8>() != 0; const auto launch_title = rp.Pop<u8>() != 0;
const auto title_id = rp.Pop<u64>(); const auto title_id = rp.Pop<u64>();
const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>()); const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>());
@ -104,7 +104,7 @@ void Module::NSInterface::RebootSystem(Kernel::HLERequestContext& ctx) {
} }
void Module::NSInterface::RebootSystemClean(Kernel::HLERequestContext& ctx) { void Module::NSInterface::RebootSystemClean(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 0, 0); // 0x160000 IPC::RequestParser rp(ctx);
LOG_INFO(Service_APT, "called"); LOG_INFO(Service_APT, "called");
@ -115,7 +115,7 @@ void Module::NSInterface::RebootSystemClean(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::Initialize(Kernel::HLERequestContext& ctx) { void Module::APTInterface::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2, 2, 0); // 0x20080 IPC::RequestParser rp(ctx);
const auto app_id = rp.PopEnum<AppletId>(); const auto app_id = rp.PopEnum<AppletId>();
const auto attributes = rp.Pop<u32>(); const auto attributes = rp.Pop<u32>();
@ -266,7 +266,7 @@ bool Module::LoadLegacySharedFont() {
} }
void Module::APTInterface::GetSharedFont(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetSharedFont(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x44, 0, 0); // 0x00440000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 2); IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
// Log in telemetry if the game uses the shared font // Log in telemetry if the game uses the shared font
@ -318,7 +318,7 @@ void Module::APTInterface::GetSharedFont(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::GetWirelessRebootInfo(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetWirelessRebootInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x45, 1, 0); // 0x00450040 IPC::RequestParser rp(ctx);
const auto size = rp.Pop<u32>(); const auto size = rp.Pop<u32>();
LOG_WARNING(Service_APT, "called size={:08X}", size); LOG_WARNING(Service_APT, "called size={:08X}", size);
@ -329,7 +329,7 @@ void Module::APTInterface::GetWirelessRebootInfo(Kernel::HLERequestContext& ctx)
} }
void Module::APTInterface::NotifyToWait(Kernel::HLERequestContext& ctx) { void Module::APTInterface::NotifyToWait(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x43, 1, 0); // 0x430040 IPC::RequestParser rp(ctx);
const auto app_id = rp.Pop<u32>(); const auto app_id = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -339,7 +339,7 @@ void Module::APTInterface::NotifyToWait(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::GetLockHandle(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetLockHandle(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 1, 0); // 0x10040 IPC::RequestParser rp(ctx);
// Bits [0:2] are the applet type (System, Library, etc) // Bits [0:2] are the applet type (System, Library, etc)
// Bit 5 tells the application that there's a pending APT parameter, // Bit 5 tells the application that there's a pending APT parameter,
@ -362,7 +362,7 @@ void Module::APTInterface::GetLockHandle(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::Enable(Kernel::HLERequestContext& ctx) { void Module::APTInterface::Enable(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3, 1, 0); // 0x30040 IPC::RequestParser rp(ctx);
const auto attributes = rp.Pop<u32>(); const auto attributes = rp.Pop<u32>();
LOG_DEBUG(Service_APT, "called attributes={:#010X}", attributes); LOG_DEBUG(Service_APT, "called attributes={:#010X}", attributes);
@ -372,7 +372,7 @@ void Module::APTInterface::Enable(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::GetAppletManInfo(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetAppletManInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 1, 0); // 0x50040 IPC::RequestParser rp(ctx);
auto applet_pos = rp.PopEnum<AppletPos>(); auto applet_pos = rp.PopEnum<AppletPos>();
LOG_DEBUG(Service_APT, "called, applet_pos={:08X}", applet_pos); LOG_DEBUG(Service_APT, "called, applet_pos={:08X}", applet_pos);
@ -392,7 +392,7 @@ void Module::APTInterface::GetAppletManInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::IsRegistered(Kernel::HLERequestContext& ctx) { void Module::APTInterface::IsRegistered(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 1, 0); // 0x90040 IPC::RequestParser rp(ctx);
const auto app_id = rp.PopEnum<AppletId>(); const auto app_id = rp.PopEnum<AppletId>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -403,7 +403,7 @@ void Module::APTInterface::IsRegistered(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::InquireNotification(Kernel::HLERequestContext& ctx) { void Module::APTInterface::InquireNotification(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 1, 0); // 0xB0040 IPC::RequestParser rp(ctx);
const auto app_id = rp.PopEnum<AppletId>(); const auto app_id = rp.PopEnum<AppletId>();
LOG_DEBUG(Service_APT, "called app_id={:#010X}", app_id); LOG_DEBUG(Service_APT, "called app_id={:#010X}", app_id);
@ -420,7 +420,7 @@ void Module::APTInterface::InquireNotification(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::SendParameter(Kernel::HLERequestContext& ctx) { void Module::APTInterface::SendParameter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xC, 4, 4); // 0xC0104 IPC::RequestParser rp(ctx);
const auto src_app_id = rp.PopEnum<AppletId>(); const auto src_app_id = rp.PopEnum<AppletId>();
const auto dst_app_id = rp.PopEnum<AppletId>(); const auto dst_app_id = rp.PopEnum<AppletId>();
const auto signal_type = rp.PopEnum<SignalType>(); const auto signal_type = rp.PopEnum<SignalType>();
@ -444,7 +444,7 @@ void Module::APTInterface::SendParameter(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::ReceiveParameter(Kernel::HLERequestContext& ctx) { void Module::APTInterface::ReceiveParameter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xD, 2, 0); // 0xD0080 IPC::RequestParser rp(ctx);
const auto app_id = rp.PopEnum<AppletId>(); const auto app_id = rp.PopEnum<AppletId>();
const auto buffer_size = rp.Pop<u32>(); const auto buffer_size = rp.Pop<u32>();
@ -470,7 +470,7 @@ void Module::APTInterface::ReceiveParameter(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::GlanceParameter(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GlanceParameter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xE, 2, 0); // 0xE0080 IPC::RequestParser rp(ctx);
const auto app_id = rp.PopEnum<AppletId>(); const auto app_id = rp.PopEnum<AppletId>();
const u32 buffer_size = rp.Pop<u32>(); const u32 buffer_size = rp.Pop<u32>();
@ -496,7 +496,7 @@ void Module::APTInterface::GlanceParameter(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::CancelParameter(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CancelParameter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xF, 4, 0); // 0xF0100 IPC::RequestParser rp(ctx);
const auto check_sender = rp.Pop<bool>(); const auto check_sender = rp.Pop<bool>();
const auto sender_appid = rp.PopEnum<AppletId>(); const auto sender_appid = rp.PopEnum<AppletId>();
const auto check_receiver = rp.Pop<bool>(); const auto check_receiver = rp.Pop<bool>();
@ -514,7 +514,7 @@ void Module::APTInterface::CancelParameter(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::PrepareToDoApplicationJump(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToDoApplicationJump(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x31, 4, 0); // 0x00310100 IPC::RequestParser rp(ctx);
auto flags = rp.PopEnum<ApplicationJumpFlags>(); auto flags = rp.PopEnum<ApplicationJumpFlags>();
u64 title_id = rp.Pop<u64>(); u64 title_id = rp.Pop<u64>();
u8 media_type = rp.Pop<u8>(); u8 media_type = rp.Pop<u8>();
@ -530,7 +530,7 @@ void Module::APTInterface::PrepareToDoApplicationJump(Kernel::HLERequestContext&
} }
void Module::APTInterface::DoApplicationJump(Kernel::HLERequestContext& ctx) { void Module::APTInterface::DoApplicationJump(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x32, 2, 4); // 0x00320084 IPC::RequestParser rp(ctx);
const auto param_size = rp.Pop<u32>(); const auto param_size = rp.Pop<u32>();
const auto hmac_size = rp.Pop<u32>(); const auto hmac_size = rp.Pop<u32>();
const auto param = rp.PopStaticBuffer(); const auto param = rp.PopStaticBuffer();
@ -543,7 +543,7 @@ void Module::APTInterface::DoApplicationJump(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::GetProgramIdOnApplicationJump(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetProgramIdOnApplicationJump(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x33, 0, 0); // 0x00330000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -558,7 +558,7 @@ void Module::APTInterface::GetProgramIdOnApplicationJump(Kernel::HLERequestConte
} }
void Module::APTInterface::ReceiveDeliverArg(Kernel::HLERequestContext& ctx) { void Module::APTInterface::ReceiveDeliverArg(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x35, 2, 0); // 0x00350080 IPC::RequestParser rp(ctx);
const auto param_size = rp.Pop<u32>(); const auto param_size = rp.Pop<u32>();
const auto hmac_size = rp.Pop<u32>(); const auto hmac_size = rp.Pop<u32>();
@ -577,7 +577,7 @@ void Module::APTInterface::ReceiveDeliverArg(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::PrepareToStartApplication(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToStartApplication(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 5, 0); // 0x00150140 IPC::RequestParser rp(ctx);
const auto title_id = rp.Pop<u64>(); const auto title_id = rp.Pop<u64>();
const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>()); const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>());
rp.Skip(1, false); // Padding rp.Skip(1, false); // Padding
@ -591,7 +591,7 @@ void Module::APTInterface::PrepareToStartApplication(Kernel::HLERequestContext&
} }
void Module::APTInterface::StartApplication(Kernel::HLERequestContext& ctx) { void Module::APTInterface::StartApplication(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1B, 3, 4); // 0x001B00C4 IPC::RequestParser rp(ctx);
const auto parameter_size = rp.Pop<u32>(); const auto parameter_size = rp.Pop<u32>();
const auto hmac_size = rp.Pop<u32>(); const auto hmac_size = rp.Pop<u32>();
const auto paused = rp.Pop<bool>(); const auto paused = rp.Pop<bool>();
@ -606,7 +606,7 @@ void Module::APTInterface::StartApplication(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::WakeupApplication(Kernel::HLERequestContext& ctx) { void Module::APTInterface::WakeupApplication(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1C, 0, 0); // 0x001C0000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -615,7 +615,7 @@ void Module::APTInterface::WakeupApplication(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::CancelApplication(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CancelApplication(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1D, 0, 0); // 0x001D0000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -624,7 +624,7 @@ void Module::APTInterface::CancelApplication(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::AppletUtility(Kernel::HLERequestContext& ctx) { void Module::APTInterface::AppletUtility(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4B, 3, 2); // 0x004B00C2 IPC::RequestParser rp(ctx);
// These are from 3dbrew - I'm not really sure what they're used for. // These are from 3dbrew - I'm not really sure what they're used for.
const auto utility_command = rp.Pop<u32>(); const auto utility_command = rp.Pop<u32>();
@ -651,7 +651,7 @@ void Module::APTInterface::AppletUtility(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::SetAppCpuTimeLimit(Kernel::HLERequestContext& ctx) { void Module::APTInterface::SetAppCpuTimeLimit(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4F, 2, 0); // 0x4F0080 IPC::RequestParser rp(ctx);
const auto must_be_one = rp.Pop<u32>(); const auto must_be_one = rp.Pop<u32>();
const auto value = rp.Pop<u32>(); const auto value = rp.Pop<u32>();
@ -667,7 +667,7 @@ void Module::APTInterface::SetAppCpuTimeLimit(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::GetAppCpuTimeLimit(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetAppCpuTimeLimit(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x50, 1, 0); // 0x500040 IPC::RequestParser rp(ctx);
const auto must_be_one = rp.Pop<u32>(); const auto must_be_one = rp.Pop<u32>();
LOG_WARNING(Service_APT, "(STUBBED) called, must_be_one={}", must_be_one); LOG_WARNING(Service_APT, "(STUBBED) called, must_be_one={}", must_be_one);
@ -681,7 +681,7 @@ void Module::APTInterface::GetAppCpuTimeLimit(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::PrepareToStartLibraryApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToStartLibraryApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 1, 0); // 0x180040 IPC::RequestParser rp(ctx);
const auto applet_id = rp.PopEnum<AppletId>(); const auto applet_id = rp.PopEnum<AppletId>();
LOG_DEBUG(Service_APT, "called, applet_id={:08X}", applet_id); LOG_DEBUG(Service_APT, "called, applet_id={:08X}", applet_id);
@ -691,7 +691,7 @@ void Module::APTInterface::PrepareToStartLibraryApplet(Kernel::HLERequestContext
} }
void Module::APTInterface::PrepareToStartSystemApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToStartSystemApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x19, 1, 0); // 0x190040 IPC::RequestParser rp(ctx);
const auto applet_id = rp.PopEnum<AppletId>(); const auto applet_id = rp.PopEnum<AppletId>();
LOG_DEBUG(Service_APT, "called, applet_id={:08X}", applet_id); LOG_DEBUG(Service_APT, "called, applet_id={:08X}", applet_id);
@ -701,7 +701,7 @@ void Module::APTInterface::PrepareToStartSystemApplet(Kernel::HLERequestContext&
} }
void Module::APTInterface::PrepareToStartNewestHomeMenu(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToStartNewestHomeMenu(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 0, 0); // 0x1A0000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -715,7 +715,7 @@ void Module::APTInterface::PrepareToStartNewestHomeMenu(Kernel::HLERequestContex
} }
void Module::APTInterface::PreloadLibraryApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PreloadLibraryApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 1, 0); // 0x160040 IPC::RequestParser rp(ctx);
const auto applet_id = rp.PopEnum<AppletId>(); const auto applet_id = rp.PopEnum<AppletId>();
LOG_DEBUG(Service_APT, "called, applet_id={:08X}", applet_id); LOG_DEBUG(Service_APT, "called, applet_id={:08X}", applet_id);
@ -725,7 +725,7 @@ void Module::APTInterface::PreloadLibraryApplet(Kernel::HLERequestContext& ctx)
} }
void Module::APTInterface::FinishPreloadingLibraryApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::FinishPreloadingLibraryApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 1, 0); // 0x00170040 IPC::RequestParser rp(ctx);
const auto applet_id = rp.PopEnum<AppletId>(); const auto applet_id = rp.PopEnum<AppletId>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -735,7 +735,7 @@ void Module::APTInterface::FinishPreloadingLibraryApplet(Kernel::HLERequestConte
} }
void Module::APTInterface::StartLibraryApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::StartLibraryApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1E, 2, 4); // 0x1E0084 IPC::RequestParser rp(ctx);
const auto applet_id = rp.PopEnum<AppletId>(); const auto applet_id = rp.PopEnum<AppletId>();
const auto buffer_size = rp.Pop<u32>(); const auto buffer_size = rp.Pop<u32>();
const auto object = rp.PopGenericObject(); const auto object = rp.PopGenericObject();
@ -748,7 +748,7 @@ void Module::APTInterface::StartLibraryApplet(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::StartSystemApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::StartSystemApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1F, 2, 4); // 0x1F0084 IPC::RequestParser rp(ctx);
const auto applet_id = rp.PopEnum<AppletId>(); const auto applet_id = rp.PopEnum<AppletId>();
const auto buffer_size = rp.Pop<u32>(); const auto buffer_size = rp.Pop<u32>();
const auto object = rp.PopGenericObject(); const auto object = rp.PopGenericObject();
@ -761,7 +761,7 @@ void Module::APTInterface::StartSystemApplet(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::OrderToCloseApplication(Kernel::HLERequestContext& ctx) { void Module::APTInterface::OrderToCloseApplication(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x21, 0, 0); IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -770,7 +770,7 @@ void Module::APTInterface::OrderToCloseApplication(Kernel::HLERequestContext& ct
} }
void Module::APTInterface::PrepareToCloseApplication(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToCloseApplication(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x22, 1, 0); IPC::RequestParser rp(ctx);
const auto return_to_sys = rp.Pop<u8>() != 0; const auto return_to_sys = rp.Pop<u8>() != 0;
LOG_DEBUG(Service_APT, "called return_to_sys={}", return_to_sys); LOG_DEBUG(Service_APT, "called return_to_sys={}", return_to_sys);
@ -780,7 +780,7 @@ void Module::APTInterface::PrepareToCloseApplication(Kernel::HLERequestContext&
} }
void Module::APTInterface::CloseApplication(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CloseApplication(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x27, 1, 4); IPC::RequestParser rp(ctx);
const auto parameter_size = rp.Pop<u32>(); const auto parameter_size = rp.Pop<u32>();
const auto object = rp.PopGenericObject(); const auto object = rp.PopGenericObject();
const auto buffer = rp.PopStaticBuffer(); const auto buffer = rp.PopStaticBuffer();
@ -792,7 +792,7 @@ void Module::APTInterface::CloseApplication(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::CancelLibraryApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CancelLibraryApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3B, 1, 0); // 0x003B0040 IPC::RequestParser rp(ctx);
const auto app_exiting = rp.Pop<bool>(); const auto app_exiting = rp.Pop<bool>();
LOG_DEBUG(Service_APT, "called app_exiting={}", app_exiting); LOG_DEBUG(Service_APT, "called app_exiting={}", app_exiting);
@ -802,7 +802,7 @@ void Module::APTInterface::CancelLibraryApplet(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::PrepareToCloseLibraryApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToCloseLibraryApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x25, 3, 0); // 0x002500C0 IPC::RequestParser rp(ctx);
const auto not_pause = rp.Pop<bool>(); const auto not_pause = rp.Pop<bool>();
const auto exiting = rp.Pop<bool>(); const auto exiting = rp.Pop<bool>();
const auto jump_to_home = rp.Pop<bool>(); const auto jump_to_home = rp.Pop<bool>();
@ -815,7 +815,7 @@ void Module::APTInterface::PrepareToCloseLibraryApplet(Kernel::HLERequestContext
} }
void Module::APTInterface::PrepareToCloseSystemApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToCloseSystemApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x26, 0, 0); // 0x260000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -824,7 +824,7 @@ void Module::APTInterface::PrepareToCloseSystemApplet(Kernel::HLERequestContext&
} }
void Module::APTInterface::CloseLibraryApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CloseLibraryApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x28, 1, 4); // 0x00280044 IPC::RequestParser rp(ctx);
const auto parameter_size = rp.Pop<u32>(); const auto parameter_size = rp.Pop<u32>();
const auto object = rp.PopGenericObject(); const auto object = rp.PopGenericObject();
const auto buffer = rp.PopStaticBuffer(); const auto buffer = rp.PopStaticBuffer();
@ -836,7 +836,7 @@ void Module::APTInterface::CloseLibraryApplet(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::CloseSystemApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CloseSystemApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x29, 1, 4); // 0x00280044 IPC::RequestParser rp(ctx);
const auto parameter_size = rp.Pop<u32>(); const auto parameter_size = rp.Pop<u32>();
const auto object = rp.PopGenericObject(); const auto object = rp.PopGenericObject();
const auto buffer = rp.PopStaticBuffer(); const auto buffer = rp.PopStaticBuffer();
@ -848,7 +848,7 @@ void Module::APTInterface::CloseSystemApplet(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::OrderToCloseSystemApplet(Kernel::HLERequestContext& ctx) { void Module::APTInterface::OrderToCloseSystemApplet(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2A, 0, 0); // 0x2A0000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -857,7 +857,7 @@ void Module::APTInterface::OrderToCloseSystemApplet(Kernel::HLERequestContext& c
} }
void Module::APTInterface::PrepareToJumpToHomeMenu(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToJumpToHomeMenu(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2B, 0, 0); // 0x2B0000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -866,7 +866,7 @@ void Module::APTInterface::PrepareToJumpToHomeMenu(Kernel::HLERequestContext& ct
} }
void Module::APTInterface::JumpToHomeMenu(Kernel::HLERequestContext& ctx) { void Module::APTInterface::JumpToHomeMenu(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2C, 1, 4); // 0x2C0044 IPC::RequestParser rp(ctx);
const auto parameter_size = rp.Pop<u32>(); const auto parameter_size = rp.Pop<u32>();
const auto object = rp.PopGenericObject(); const auto object = rp.PopGenericObject();
const auto buffer = rp.PopStaticBuffer(); const auto buffer = rp.PopStaticBuffer();
@ -878,7 +878,7 @@ void Module::APTInterface::JumpToHomeMenu(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::PrepareToLeaveHomeMenu(Kernel::HLERequestContext& ctx) { void Module::APTInterface::PrepareToLeaveHomeMenu(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2D, 0, 0); // 0x2D0000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -887,7 +887,7 @@ void Module::APTInterface::PrepareToLeaveHomeMenu(Kernel::HLERequestContext& ctx
} }
void Module::APTInterface::LeaveHomeMenu(Kernel::HLERequestContext& ctx) { void Module::APTInterface::LeaveHomeMenu(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2E, 1, 4); // 0x2E0044 IPC::RequestParser rp(ctx);
const auto parameter_size = rp.Pop<u32>(); const auto parameter_size = rp.Pop<u32>();
const auto object = rp.PopGenericObject(); const auto object = rp.PopGenericObject();
const auto buffer = rp.PopStaticBuffer(); const auto buffer = rp.PopStaticBuffer();
@ -899,7 +899,7 @@ void Module::APTInterface::LeaveHomeMenu(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::LoadSysMenuArg(Kernel::HLERequestContext& ctx) { void Module::APTInterface::LoadSysMenuArg(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x36, 1, 0); // 0x00360040 IPC::RequestParser rp(ctx);
const auto size = std::min(std::size_t{rp.Pop<u32>()}, SysMenuArgSize); const auto size = std::min(std::size_t{rp.Pop<u32>()}, SysMenuArgSize);
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -914,7 +914,7 @@ void Module::APTInterface::LoadSysMenuArg(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::StoreSysMenuArg(Kernel::HLERequestContext& ctx) { void Module::APTInterface::StoreSysMenuArg(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x37, 1, 2); // 0x00370042 IPC::RequestParser rp(ctx);
const auto size = std::min(std::size_t{rp.Pop<u32>()}, SysMenuArgSize); const auto size = std::min(std::size_t{rp.Pop<u32>()}, SysMenuArgSize);
const auto& buffer = rp.PopStaticBuffer(); const auto& buffer = rp.PopStaticBuffer();
@ -928,7 +928,7 @@ void Module::APTInterface::StoreSysMenuArg(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::SendCaptureBufferInfo(Kernel::HLERequestContext& ctx) { void Module::APTInterface::SendCaptureBufferInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x40, 1, 2); // 0x00400042 IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto size = rp.Pop<u32>(); [[maybe_unused]] const auto size = rp.Pop<u32>();
const auto buffer = rp.PopStaticBuffer(); const auto buffer = rp.PopStaticBuffer();
@ -941,7 +941,7 @@ void Module::APTInterface::SendCaptureBufferInfo(Kernel::HLERequestContext& ctx)
} }
void Module::APTInterface::ReceiveCaptureBufferInfo(Kernel::HLERequestContext& ctx) { void Module::APTInterface::ReceiveCaptureBufferInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x41, 1, 0); // 0x00410040 IPC::RequestParser rp(ctx);
const auto size = rp.Pop<u32>(); const auto size = rp.Pop<u32>();
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -957,7 +957,7 @@ void Module::APTInterface::ReceiveCaptureBufferInfo(Kernel::HLERequestContext& c
} }
void Module::APTInterface::GetCaptureInfo(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetCaptureInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4A, 1, 0); // 0x004A0040 IPC::RequestParser rp(ctx);
const auto size = rp.Pop<u32>(); const auto size = rp.Pop<u32>();
LOG_DEBUG(Service_APT, "called"); LOG_DEBUG(Service_APT, "called");
@ -973,7 +973,7 @@ void Module::APTInterface::GetCaptureInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::SetScreenCapPostPermission(Kernel::HLERequestContext& ctx) { void Module::APTInterface::SetScreenCapPostPermission(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x55, 1, 0); // 0x00550040 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "called, screen_capture_post_permission={}", LOG_DEBUG(Service_APT, "called, screen_capture_post_permission={}",
apt->screen_capture_post_permission); apt->screen_capture_post_permission);
@ -985,7 +985,7 @@ void Module::APTInterface::SetScreenCapPostPermission(Kernel::HLERequestContext&
} }
void Module::APTInterface::GetScreenCapPostPermission(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetScreenCapPostPermission(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x56, 0, 0); // 0x00560000 IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_APT, "(STUBBED) called, screen_capture_post_permission={}", LOG_DEBUG(Service_APT, "(STUBBED) called, screen_capture_post_permission={}",
apt->screen_capture_post_permission); apt->screen_capture_post_permission);
@ -996,7 +996,7 @@ void Module::APTInterface::GetScreenCapPostPermission(Kernel::HLERequestContext&
} }
void Module::APTInterface::GetAppletInfo(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetAppletInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x6, 1, 0); // 0x60040 IPC::RequestParser rp(ctx);
const auto app_id = rp.PopEnum<AppletId>(); const auto app_id = rp.PopEnum<AppletId>();
LOG_DEBUG(Service_APT, "called, app_id={:08X}", app_id); LOG_DEBUG(Service_APT, "called, app_id={:08X}", app_id);
@ -1017,7 +1017,7 @@ void Module::APTInterface::GetAppletInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::GetStartupArgument(Kernel::HLERequestContext& ctx) { void Module::APTInterface::GetStartupArgument(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x51, 2, 0); // 0x00510080 IPC::RequestParser rp(ctx);
const auto parameter_size = rp.Pop<u32>(); const auto parameter_size = rp.Pop<u32>();
const auto startup_argument_type = static_cast<StartupArgumentType>(rp.Pop<u8>()); const auto startup_argument_type = static_cast<StartupArgumentType>(rp.Pop<u8>());
@ -1058,7 +1058,7 @@ void Module::APTInterface::GetStartupArgument(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::Wrap(Kernel::HLERequestContext& ctx) { void Module::APTInterface::Wrap(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x46, 4, 4); IPC::RequestParser rp(ctx);
const auto output_size = rp.Pop<u32>(); const auto output_size = rp.Pop<u32>();
const auto input_size = rp.Pop<u32>(); const auto input_size = rp.Pop<u32>();
const auto nonce_offset = rp.Pop<u32>(); const auto nonce_offset = rp.Pop<u32>();
@ -1103,7 +1103,7 @@ void Module::APTInterface::Wrap(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::Unwrap(Kernel::HLERequestContext& ctx) { void Module::APTInterface::Unwrap(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x47, 4, 4); IPC::RequestParser rp(ctx);
const auto output_size = rp.Pop<u32>(); const auto output_size = rp.Pop<u32>();
const auto input_size = rp.Pop<u32>(); const auto input_size = rp.Pop<u32>();
const auto nonce_offset = rp.Pop<u32>(); const auto nonce_offset = rp.Pop<u32>();
@ -1155,7 +1155,7 @@ void Module::APTInterface::Unwrap(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::CheckNew3DSApp(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CheckNew3DSApp(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x101, 0, 0); // 0x01010000 IPC::RequestParser rp(ctx);
LOG_WARNING(Service_APT, "(STUBBED) called"); LOG_WARNING(Service_APT, "(STUBBED) called");
@ -1169,7 +1169,7 @@ void Module::APTInterface::CheckNew3DSApp(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::CheckNew3DS(Kernel::HLERequestContext& ctx) { void Module::APTInterface::CheckNew3DS(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x102, 0, 0); // 0x01020000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
LOG_WARNING(Service_APT, "(STUBBED) called"); LOG_WARNING(Service_APT, "(STUBBED) called");
@ -1178,7 +1178,7 @@ void Module::APTInterface::CheckNew3DS(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::Unknown0x0103(Kernel::HLERequestContext& ctx) { void Module::APTInterface::Unknown0x0103(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x103, 0, 0); // 0x01030000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
LOG_WARNING(Service_APT, "(STUBBED) called"); LOG_WARNING(Service_APT, "(STUBBED) called");
@ -1188,7 +1188,7 @@ void Module::APTInterface::Unknown0x0103(Kernel::HLERequestContext& ctx) {
} }
void Module::APTInterface::IsTitleAllowed(Kernel::HLERequestContext& ctx) { void Module::APTInterface::IsTitleAllowed(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x105, 4, 0); // 0x01050100 IPC::RequestParser rp(ctx);
const auto program_id = rp.Pop<u64>(); const auto program_id = rp.Pop<u64>();
const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>()); const auto media_type = static_cast<FS::MediaType>(rp.Pop<u8>());
rp.Skip(1, false); // Padding rp.Skip(1, false); // Padding

View file

@ -11,98 +11,98 @@ APT_A::APT_A(std::shared_ptr<Module> apt)
: Module::APTInterface(std::move(apt), "APT:A", MaxAPTSessions) { : Module::APTInterface(std::move(apt), "APT:A", MaxAPTSessions) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &APT_A::GetLockHandle, "GetLockHandle"}, {0x0001, &APT_A::GetLockHandle, "GetLockHandle"},
{IPC::MakeHeader(0x0002, 2, 0), &APT_A::Initialize, "Initialize"}, {0x0002, &APT_A::Initialize, "Initialize"},
{IPC::MakeHeader(0x0003, 1, 0), &APT_A::Enable, "Enable"}, {0x0003, &APT_A::Enable, "Enable"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "Finalize"}, {0x0004, nullptr, "Finalize"},
{IPC::MakeHeader(0x0005, 1, 0), &APT_A::GetAppletManInfo, "GetAppletManInfo"}, {0x0005, &APT_A::GetAppletManInfo, "GetAppletManInfo"},
{IPC::MakeHeader(0x0006, 1, 0), &APT_A::GetAppletInfo, "GetAppletInfo"}, {0x0006, &APT_A::GetAppletInfo, "GetAppletInfo"},
{IPC::MakeHeader(0x0007, 0, 0), nullptr, "GetLastSignaledAppletId"}, {0x0007, nullptr, "GetLastSignaledAppletId"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "CountRegisteredApplet"}, {0x0008, nullptr, "CountRegisteredApplet"},
{IPC::MakeHeader(0x0009, 1, 0), &APT_A::IsRegistered, "IsRegistered"}, {0x0009, &APT_A::IsRegistered, "IsRegistered"},
{IPC::MakeHeader(0x000A, 1, 0), nullptr, "GetAttribute"}, {0x000A, nullptr, "GetAttribute"},
{IPC::MakeHeader(0x000B, 1, 0), &APT_A::InquireNotification, "InquireNotification"}, {0x000B, &APT_A::InquireNotification, "InquireNotification"},
{IPC::MakeHeader(0x000C, 4, 4), &APT_A::SendParameter, "SendParameter"}, {0x000C, &APT_A::SendParameter, "SendParameter"},
{IPC::MakeHeader(0x000D, 2, 0), &APT_A::ReceiveParameter, "ReceiveParameter"}, {0x000D, &APT_A::ReceiveParameter, "ReceiveParameter"},
{IPC::MakeHeader(0x000E, 2, 0), &APT_A::GlanceParameter, "GlanceParameter"}, {0x000E, &APT_A::GlanceParameter, "GlanceParameter"},
{IPC::MakeHeader(0x000F, 4, 0), &APT_A::CancelParameter, "CancelParameter"}, {0x000F, &APT_A::CancelParameter, "CancelParameter"},
{IPC::MakeHeader(0x0010, 3, 2), nullptr, "DebugFunc"}, {0x0010, nullptr, "DebugFunc"},
{IPC::MakeHeader(0x0011, 3, 0), nullptr, "MapProgramIdForDebug"}, {0x0011, nullptr, "MapProgramIdForDebug"},
{IPC::MakeHeader(0x0012, 1, 0), nullptr, "SetHomeMenuAppletIdForDebug"}, {0x0012, nullptr, "SetHomeMenuAppletIdForDebug"},
{IPC::MakeHeader(0x0013, 0, 0), nullptr, "GetPreparationState"}, {0x0013, nullptr, "GetPreparationState"},
{IPC::MakeHeader(0x0014, 1, 0), nullptr, "SetPreparationState"}, {0x0014, nullptr, "SetPreparationState"},
{IPC::MakeHeader(0x0015, 5, 0), &APT_A::PrepareToStartApplication, "PrepareToStartApplication"}, {0x0015, &APT_A::PrepareToStartApplication, "PrepareToStartApplication"},
{IPC::MakeHeader(0x0016, 1, 0), &APT_A::PreloadLibraryApplet, "PreloadLibraryApplet"}, {0x0016, &APT_A::PreloadLibraryApplet, "PreloadLibraryApplet"},
{IPC::MakeHeader(0x0017, 1, 0), &APT_A::FinishPreloadingLibraryApplet, "FinishPreloadingLibraryApplet"}, {0x0017, &APT_A::FinishPreloadingLibraryApplet, "FinishPreloadingLibraryApplet"},
{IPC::MakeHeader(0x0018, 1, 0), &APT_A::PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, {0x0018, &APT_A::PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
{IPC::MakeHeader(0x0019, 1, 0), &APT_A::PrepareToStartSystemApplet, "PrepareToStartSystemApplet"}, {0x0019, &APT_A::PrepareToStartSystemApplet, "PrepareToStartSystemApplet"},
{IPC::MakeHeader(0x001A, 0, 0), &APT_A::PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"}, {0x001A, &APT_A::PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"},
{IPC::MakeHeader(0x001B, 3, 4), &APT_A::StartApplication, "StartApplication"}, {0x001B, &APT_A::StartApplication, "StartApplication"},
{IPC::MakeHeader(0x001C, 0, 0), &APT_A::WakeupApplication, "WakeupApplication"}, {0x001C, &APT_A::WakeupApplication, "WakeupApplication"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "CancelApplication"}, {0x001D, nullptr, "CancelApplication"},
{IPC::MakeHeader(0x001E, 2, 4), &APT_A::StartLibraryApplet, "StartLibraryApplet"}, {0x001E, &APT_A::StartLibraryApplet, "StartLibraryApplet"},
{IPC::MakeHeader(0x001F, 2, 4), &APT_A::StartSystemApplet, "StartSystemApplet"}, {0x001F, &APT_A::StartSystemApplet, "StartSystemApplet"},
{IPC::MakeHeader(0x0020, 1, 4), nullptr, "StartNewestHomeMenu"}, {0x0020, nullptr, "StartNewestHomeMenu"},
{IPC::MakeHeader(0x0021, 0, 0), &APT_A::OrderToCloseApplication, "OrderToCloseApplication"}, {0x0021, &APT_A::OrderToCloseApplication, "OrderToCloseApplication"},
{IPC::MakeHeader(0x0022, 1, 0), &APT_A::PrepareToCloseApplication, "PrepareToCloseApplication"}, {0x0022, &APT_A::PrepareToCloseApplication, "PrepareToCloseApplication"},
{IPC::MakeHeader(0x0023, 1, 0), nullptr, "PrepareToJumpToApplication"}, {0x0023, nullptr, "PrepareToJumpToApplication"},
{IPC::MakeHeader(0x0024, 1, 4), nullptr, "JumpToApplication"}, {0x0024, nullptr, "JumpToApplication"},
{IPC::MakeHeader(0x0025, 3, 0), &APT_A::PrepareToCloseLibraryApplet, "PrepareToCloseLibraryApplet"}, {0x0025, &APT_A::PrepareToCloseLibraryApplet, "PrepareToCloseLibraryApplet"},
{IPC::MakeHeader(0x0026, 0, 0), &APT_A::PrepareToCloseSystemApplet, "PrepareToCloseSystemApplet"}, {0x0026, &APT_A::PrepareToCloseSystemApplet, "PrepareToCloseSystemApplet"},
{IPC::MakeHeader(0x0027, 1, 4), &APT_A::CloseApplication, "CloseApplication"}, {0x0027, &APT_A::CloseApplication, "CloseApplication"},
{IPC::MakeHeader(0x0028, 1, 4), &APT_A::CloseLibraryApplet, "CloseLibraryApplet"}, {0x0028, &APT_A::CloseLibraryApplet, "CloseLibraryApplet"},
{IPC::MakeHeader(0x0029, 1, 4), &APT_A::CloseSystemApplet, "CloseSystemApplet"}, {0x0029, &APT_A::CloseSystemApplet, "CloseSystemApplet"},
{IPC::MakeHeader(0x002A, 0, 0), &APT_A::OrderToCloseSystemApplet, "OrderToCloseSystemApplet"}, {0x002A, &APT_A::OrderToCloseSystemApplet, "OrderToCloseSystemApplet"},
{IPC::MakeHeader(0x002B, 0, 0), &APT_A::PrepareToJumpToHomeMenu, "PrepareToJumpToHomeMenu"}, {0x002B, &APT_A::PrepareToJumpToHomeMenu, "PrepareToJumpToHomeMenu"},
{IPC::MakeHeader(0x002C, 1, 4), &APT_A::JumpToHomeMenu, "JumpToHomeMenu"}, {0x002C, &APT_A::JumpToHomeMenu, "JumpToHomeMenu"},
{IPC::MakeHeader(0x002D, 0, 0), &APT_A::PrepareToLeaveHomeMenu, "PrepareToLeaveHomeMenu"}, {0x002D, &APT_A::PrepareToLeaveHomeMenu, "PrepareToLeaveHomeMenu"},
{IPC::MakeHeader(0x002E, 1, 4), &APT_A::LeaveHomeMenu, "LeaveHomeMenu"}, {0x002E, &APT_A::LeaveHomeMenu, "LeaveHomeMenu"},
{IPC::MakeHeader(0x002F, 1, 0), nullptr, "PrepareToLeaveResidentApplet"}, {0x002F, nullptr, "PrepareToLeaveResidentApplet"},
{IPC::MakeHeader(0x0030, 1, 4), nullptr, "LeaveResidentApplet"}, {0x0030, nullptr, "LeaveResidentApplet"},
{IPC::MakeHeader(0x0031, 4, 0), &APT_A::PrepareToDoApplicationJump, "PrepareToDoApplicationJump"}, {0x0031, &APT_A::PrepareToDoApplicationJump, "PrepareToDoApplicationJump"},
{IPC::MakeHeader(0x0032, 2, 4), &APT_A::DoApplicationJump, "DoApplicationJump"}, {0x0032, &APT_A::DoApplicationJump, "DoApplicationJump"},
{IPC::MakeHeader(0x0033, 0, 0), &APT_A::GetProgramIdOnApplicationJump, "GetProgramIdOnApplicationJump"}, {0x0033, &APT_A::GetProgramIdOnApplicationJump, "GetProgramIdOnApplicationJump"},
{IPC::MakeHeader(0x0034, 2, 4), nullptr, "SendDeliverArg"}, {0x0034, nullptr, "SendDeliverArg"},
{IPC::MakeHeader(0x0035, 2, 0), &APT_A::ReceiveDeliverArg, "ReceiveDeliverArg"}, {0x0035, &APT_A::ReceiveDeliverArg, "ReceiveDeliverArg"},
{IPC::MakeHeader(0x0036, 1, 0), &APT_A::LoadSysMenuArg, "LoadSysMenuArg"}, {0x0036, &APT_A::LoadSysMenuArg, "LoadSysMenuArg"},
{IPC::MakeHeader(0x0037, 1, 2), &APT_A::StoreSysMenuArg, "StoreSysMenuArg"}, {0x0037, &APT_A::StoreSysMenuArg, "StoreSysMenuArg"},
{IPC::MakeHeader(0x0038, 1, 0), nullptr, "PreloadResidentApplet"}, {0x0038, nullptr, "PreloadResidentApplet"},
{IPC::MakeHeader(0x0039, 1, 0), nullptr, "PrepareToStartResidentApplet"}, {0x0039, nullptr, "PrepareToStartResidentApplet"},
{IPC::MakeHeader(0x003A, 1, 4), nullptr, "StartResidentApplet"}, {0x003A, nullptr, "StartResidentApplet"},
{IPC::MakeHeader(0x003B, 1, 0), &APT_A::CancelLibraryApplet, "CancelLibraryApplet"}, {0x003B, &APT_A::CancelLibraryApplet, "CancelLibraryApplet"},
{IPC::MakeHeader(0x003C, 1, 2), nullptr, "SendDspSleep"}, {0x003C, nullptr, "SendDspSleep"},
{IPC::MakeHeader(0x003D, 1, 2), nullptr, "SendDspWakeUp"}, {0x003D, nullptr, "SendDspWakeUp"},
{IPC::MakeHeader(0x003E, 2, 0), nullptr, "ReplySleepQuery"}, {0x003E, nullptr, "ReplySleepQuery"},
{IPC::MakeHeader(0x003F, 1, 0), nullptr, "ReplySleepNotificationComplete"}, {0x003F, nullptr, "ReplySleepNotificationComplete"},
{IPC::MakeHeader(0x0040, 1, 2), &APT_A::SendCaptureBufferInfo, "SendCaptureBufferInfo"}, {0x0040, &APT_A::SendCaptureBufferInfo, "SendCaptureBufferInfo"},
{IPC::MakeHeader(0x0041, 1, 0), &APT_A::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"}, {0x0041, &APT_A::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"},
{IPC::MakeHeader(0x0042, 2, 0), nullptr, "SleepSystem"}, {0x0042, nullptr, "SleepSystem"},
{IPC::MakeHeader(0x0043, 1, 0), &APT_A::NotifyToWait, "NotifyToWait"}, {0x0043, &APT_A::NotifyToWait, "NotifyToWait"},
{IPC::MakeHeader(0x0044, 0, 0), &APT_A::GetSharedFont, "GetSharedFont"}, {0x0044, &APT_A::GetSharedFont, "GetSharedFont"},
{IPC::MakeHeader(0x0045, 1, 0), &APT_A::GetWirelessRebootInfo, "GetWirelessRebootInfo"}, {0x0045, &APT_A::GetWirelessRebootInfo, "GetWirelessRebootInfo"},
{IPC::MakeHeader(0x0046, 4, 4), &APT_A::Wrap, "Wrap"}, {0x0046, &APT_A::Wrap, "Wrap"},
{IPC::MakeHeader(0x0047, 4, 4), &APT_A::Unwrap, "Unwrap"}, {0x0047, &APT_A::Unwrap, "Unwrap"},
{IPC::MakeHeader(0x0048, 4, 0), nullptr, "GetProgramInfo"}, {0x0048, nullptr, "GetProgramInfo"},
{IPC::MakeHeader(0x0049, 6, 0), nullptr, "Reboot"}, {0x0049, nullptr, "Reboot"},
{IPC::MakeHeader(0x004A, 1, 0), &APT_A::GetCaptureInfo, "GetCaptureInfo"}, {0x004A, &APT_A::GetCaptureInfo, "GetCaptureInfo"},
{IPC::MakeHeader(0x004B, 3, 2), &APT_A::AppletUtility, "AppletUtility"}, {0x004B, &APT_A::AppletUtility, "AppletUtility"},
{IPC::MakeHeader(0x004C, 0, 0), nullptr, "SetFatalErrDispMode"}, {0x004C, nullptr, "SetFatalErrDispMode"},
{IPC::MakeHeader(0x004D, 2, 0), nullptr, "GetAppletProgramInfo"}, {0x004D, nullptr, "GetAppletProgramInfo"},
{IPC::MakeHeader(0x004E, 0, 0), nullptr, "HardwareResetAsync"}, {0x004E, nullptr, "HardwareResetAsync"},
{IPC::MakeHeader(0x004F, 2, 0), &APT_A::SetAppCpuTimeLimit, "SetAppCpuTimeLimit"}, {0x004F, &APT_A::SetAppCpuTimeLimit, "SetAppCpuTimeLimit"},
{IPC::MakeHeader(0x0050, 1, 0), &APT_A::GetAppCpuTimeLimit, "GetAppCpuTimeLimit"}, {0x0050, &APT_A::GetAppCpuTimeLimit, "GetAppCpuTimeLimit"},
{IPC::MakeHeader(0x0051, 2, 0), &APT_A::GetStartupArgument, "GetStartupArgument"}, {0x0051, &APT_A::GetStartupArgument, "GetStartupArgument"},
{IPC::MakeHeader(0x0052, 4, 4), nullptr, "Wrap1"}, {0x0052, nullptr, "Wrap1"},
{IPC::MakeHeader(0x0053, 4, 4), nullptr, "Unwrap1"}, {0x0053, nullptr, "Unwrap1"},
{IPC::MakeHeader(0x0055, 1, 0), &APT_A::SetScreenCapPostPermission, "SetScreenCapPostPermission"}, {0x0055, &APT_A::SetScreenCapPostPermission, "SetScreenCapPostPermission"},
{IPC::MakeHeader(0x0056, 0, 0), &APT_A::GetScreenCapPostPermission, "GetScreenCapPostPermission"}, {0x0056, &APT_A::GetScreenCapPostPermission, "GetScreenCapPostPermission"},
{IPC::MakeHeader(0x0057, 1, 4), nullptr, "WakeupApplication2"}, {0x0057, nullptr, "WakeupApplication2"},
{IPC::MakeHeader(0x0058, 0, 2), nullptr, "GetProgramID"}, {0x0058, nullptr, "GetProgramID"},
{IPC::MakeHeader(0x0101, 0, 0), &APT_A::CheckNew3DSApp, "CheckNew3DSApp"}, {0x0101, &APT_A::CheckNew3DSApp, "CheckNew3DSApp"},
{IPC::MakeHeader(0x0102, 0, 0), &APT_A::CheckNew3DS, "CheckNew3DS"}, {0x0102, &APT_A::CheckNew3DS, "CheckNew3DS"},
{IPC::MakeHeader(0x0103, 0, 0), &APT_A::Unknown0x0103, "Unknown0x0103"}, {0x0103, &APT_A::Unknown0x0103, "Unknown0x0103"},
{IPC::MakeHeader(0x0104, 0, 0), nullptr, "IsStandardMemoryLayout"}, {0x0104, nullptr, "IsStandardMemoryLayout"},
{IPC::MakeHeader(0x0105, 4, 0), &APT_A::IsTitleAllowed, "IsTitleAllowed"}, {0x0105, &APT_A::IsTitleAllowed, "IsTitleAllowed"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -11,98 +11,98 @@ APT_S::APT_S(std::shared_ptr<Module> apt)
: Module::APTInterface(std::move(apt), "APT:S", MaxAPTSessions) { : Module::APTInterface(std::move(apt), "APT:S", MaxAPTSessions) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &APT_S::GetLockHandle, "GetLockHandle"}, {0x0001, &APT_S::GetLockHandle, "GetLockHandle"},
{IPC::MakeHeader(0x0002, 2, 0), &APT_S::Initialize, "Initialize"}, {0x0002, &APT_S::Initialize, "Initialize"},
{IPC::MakeHeader(0x0003, 1, 0), &APT_S::Enable, "Enable"}, {0x0003, &APT_S::Enable, "Enable"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "Finalize"}, {0x0004, nullptr, "Finalize"},
{IPC::MakeHeader(0x0005, 1, 0), &APT_S::GetAppletManInfo, "GetAppletManInfo"}, {0x0005, &APT_S::GetAppletManInfo, "GetAppletManInfo"},
{IPC::MakeHeader(0x0006, 1, 0), &APT_S::GetAppletInfo, "GetAppletInfo"}, {0x0006, &APT_S::GetAppletInfo, "GetAppletInfo"},
{IPC::MakeHeader(0x0007, 0, 0), nullptr, "GetLastSignaledAppletId"}, {0x0007, nullptr, "GetLastSignaledAppletId"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "CountRegisteredApplet"}, {0x0008, nullptr, "CountRegisteredApplet"},
{IPC::MakeHeader(0x0009, 1, 0), &APT_S::IsRegistered, "IsRegistered"}, {0x0009, &APT_S::IsRegistered, "IsRegistered"},
{IPC::MakeHeader(0x000A, 1, 0), nullptr, "GetAttribute"}, {0x000A, nullptr, "GetAttribute"},
{IPC::MakeHeader(0x000B, 1, 0), &APT_S::InquireNotification, "InquireNotification"}, {0x000B, &APT_S::InquireNotification, "InquireNotification"},
{IPC::MakeHeader(0x000C, 4, 4), &APT_S::SendParameter, "SendParameter"}, {0x000C, &APT_S::SendParameter, "SendParameter"},
{IPC::MakeHeader(0x000D, 2, 0), &APT_S::ReceiveParameter, "ReceiveParameter"}, {0x000D, &APT_S::ReceiveParameter, "ReceiveParameter"},
{IPC::MakeHeader(0x000E, 2, 0), &APT_S::GlanceParameter, "GlanceParameter"}, {0x000E, &APT_S::GlanceParameter, "GlanceParameter"},
{IPC::MakeHeader(0x000F, 4, 0), &APT_S::CancelParameter, "CancelParameter"}, {0x000F, &APT_S::CancelParameter, "CancelParameter"},
{IPC::MakeHeader(0x0010, 3, 2), nullptr, "DebugFunc"}, {0x0010, nullptr, "DebugFunc"},
{IPC::MakeHeader(0x0011, 3, 0), nullptr, "MapProgramIdForDebug"}, {0x0011, nullptr, "MapProgramIdForDebug"},
{IPC::MakeHeader(0x0012, 1, 0), nullptr, "SetHomeMenuAppletIdForDebug"}, {0x0012, nullptr, "SetHomeMenuAppletIdForDebug"},
{IPC::MakeHeader(0x0013, 0, 0), nullptr, "GetPreparationState"}, {0x0013, nullptr, "GetPreparationState"},
{IPC::MakeHeader(0x0014, 1, 0), nullptr, "SetPreparationState"}, {0x0014, nullptr, "SetPreparationState"},
{IPC::MakeHeader(0x0015, 5, 0), &APT_S::PrepareToStartApplication, "PrepareToStartApplication"}, {0x0015, &APT_S::PrepareToStartApplication, "PrepareToStartApplication"},
{IPC::MakeHeader(0x0016, 1, 0), &APT_S::PreloadLibraryApplet, "PreloadLibraryApplet"}, {0x0016, &APT_S::PreloadLibraryApplet, "PreloadLibraryApplet"},
{IPC::MakeHeader(0x0017, 1, 0), &APT_S::FinishPreloadingLibraryApplet, "FinishPreloadingLibraryApplet"}, {0x0017, &APT_S::FinishPreloadingLibraryApplet, "FinishPreloadingLibraryApplet"},
{IPC::MakeHeader(0x0018, 1, 0), &APT_S::PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, {0x0018, &APT_S::PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
{IPC::MakeHeader(0x0019, 1, 0), &APT_S::PrepareToStartSystemApplet, "PrepareToStartSystemApplet"}, {0x0019, &APT_S::PrepareToStartSystemApplet, "PrepareToStartSystemApplet"},
{IPC::MakeHeader(0x001A, 0, 0), &APT_S::PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"}, {0x001A, &APT_S::PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"},
{IPC::MakeHeader(0x001B, 3, 4), &APT_S::StartApplication, "StartApplication"}, {0x001B, &APT_S::StartApplication, "StartApplication"},
{IPC::MakeHeader(0x001C, 0, 0), &APT_S::WakeupApplication, "WakeupApplication"}, {0x001C, &APT_S::WakeupApplication, "WakeupApplication"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "CancelApplication"}, {0x001D, nullptr, "CancelApplication"},
{IPC::MakeHeader(0x001E, 2, 4), &APT_S::StartLibraryApplet, "StartLibraryApplet"}, {0x001E, &APT_S::StartLibraryApplet, "StartLibraryApplet"},
{IPC::MakeHeader(0x001F, 2, 4), &APT_S::StartSystemApplet, "StartSystemApplet"}, {0x001F, &APT_S::StartSystemApplet, "StartSystemApplet"},
{IPC::MakeHeader(0x0020, 1, 4), nullptr, "StartNewestHomeMenu"}, {0x0020, nullptr, "StartNewestHomeMenu"},
{IPC::MakeHeader(0x0021, 0, 0), &APT_S::OrderToCloseApplication, "OrderToCloseApplication"}, {0x0021, &APT_S::OrderToCloseApplication, "OrderToCloseApplication"},
{IPC::MakeHeader(0x0022, 1, 0), &APT_S::PrepareToCloseApplication, "PrepareToCloseApplication"}, {0x0022, &APT_S::PrepareToCloseApplication, "PrepareToCloseApplication"},
{IPC::MakeHeader(0x0023, 1, 0), nullptr, "PrepareToJumpToApplication"}, {0x0023, nullptr, "PrepareToJumpToApplication"},
{IPC::MakeHeader(0x0024, 1, 4), nullptr, "JumpToApplication"}, {0x0024, nullptr, "JumpToApplication"},
{IPC::MakeHeader(0x0025, 3, 0), &APT_S::PrepareToCloseLibraryApplet, "PrepareToCloseLibraryApplet"}, {0x0025, &APT_S::PrepareToCloseLibraryApplet, "PrepareToCloseLibraryApplet"},
{IPC::MakeHeader(0x0026, 0, 0), &APT_S::PrepareToCloseSystemApplet, "PrepareToCloseSystemApplet"}, {0x0026, &APT_S::PrepareToCloseSystemApplet, "PrepareToCloseSystemApplet"},
{IPC::MakeHeader(0x0027, 1, 4), &APT_S::CloseApplication, "CloseApplication"}, {0x0027, &APT_S::CloseApplication, "CloseApplication"},
{IPC::MakeHeader(0x0028, 1, 4), &APT_S::CloseLibraryApplet, "CloseLibraryApplet"}, {0x0028, &APT_S::CloseLibraryApplet, "CloseLibraryApplet"},
{IPC::MakeHeader(0x0029, 1, 4), &APT_S::CloseSystemApplet, "CloseSystemApplet"}, {0x0029, &APT_S::CloseSystemApplet, "CloseSystemApplet"},
{IPC::MakeHeader(0x002A, 0, 0), &APT_S::OrderToCloseSystemApplet, "OrderToCloseSystemApplet"}, {0x002A, &APT_S::OrderToCloseSystemApplet, "OrderToCloseSystemApplet"},
{IPC::MakeHeader(0x002B, 0, 0), &APT_S::PrepareToJumpToHomeMenu, "PrepareToJumpToHomeMenu"}, {0x002B, &APT_S::PrepareToJumpToHomeMenu, "PrepareToJumpToHomeMenu"},
{IPC::MakeHeader(0x002C, 1, 4), &APT_S::JumpToHomeMenu, "JumpToHomeMenu"}, {0x002C, &APT_S::JumpToHomeMenu, "JumpToHomeMenu"},
{IPC::MakeHeader(0x002D, 0, 0), &APT_S::PrepareToLeaveHomeMenu, "PrepareToLeaveHomeMenu"}, {0x002D, &APT_S::PrepareToLeaveHomeMenu, "PrepareToLeaveHomeMenu"},
{IPC::MakeHeader(0x002E, 1, 4), &APT_S::LeaveHomeMenu, "LeaveHomeMenu"}, {0x002E, &APT_S::LeaveHomeMenu, "LeaveHomeMenu"},
{IPC::MakeHeader(0x002F, 1, 0), nullptr, "PrepareToLeaveResidentApplet"}, {0x002F, nullptr, "PrepareToLeaveResidentApplet"},
{IPC::MakeHeader(0x0030, 1, 4), nullptr, "LeaveResidentApplet"}, {0x0030, nullptr, "LeaveResidentApplet"},
{IPC::MakeHeader(0x0031, 4, 0), &APT_S::PrepareToDoApplicationJump, "PrepareToDoApplicationJump"}, {0x0031, &APT_S::PrepareToDoApplicationJump, "PrepareToDoApplicationJump"},
{IPC::MakeHeader(0x0032, 2, 4), &APT_S::DoApplicationJump, "DoApplicationJump"}, {0x0032, &APT_S::DoApplicationJump, "DoApplicationJump"},
{IPC::MakeHeader(0x0033, 0, 0), &APT_S::GetProgramIdOnApplicationJump, "GetProgramIdOnApplicationJump"}, {0x0033, &APT_S::GetProgramIdOnApplicationJump, "GetProgramIdOnApplicationJump"},
{IPC::MakeHeader(0x0034, 2, 4), nullptr, "SendDeliverArg"}, {0x0034, nullptr, "SendDeliverArg"},
{IPC::MakeHeader(0x0035, 2, 0), &APT_S::ReceiveDeliverArg, "ReceiveDeliverArg"}, {0x0035, &APT_S::ReceiveDeliverArg, "ReceiveDeliverArg"},
{IPC::MakeHeader(0x0036, 1, 0), &APT_S::LoadSysMenuArg, "LoadSysMenuArg"}, {0x0036, &APT_S::LoadSysMenuArg, "LoadSysMenuArg"},
{IPC::MakeHeader(0x0037, 1, 2), &APT_S::StoreSysMenuArg, "StoreSysMenuArg"}, {0x0037, &APT_S::StoreSysMenuArg, "StoreSysMenuArg"},
{IPC::MakeHeader(0x0038, 1, 0), nullptr, "PreloadResidentApplet"}, {0x0038, nullptr, "PreloadResidentApplet"},
{IPC::MakeHeader(0x0039, 1, 0), nullptr, "PrepareToStartResidentApplet"}, {0x0039, nullptr, "PrepareToStartResidentApplet"},
{IPC::MakeHeader(0x003A, 1, 4), nullptr, "StartResidentApplet"}, {0x003A, nullptr, "StartResidentApplet"},
{IPC::MakeHeader(0x003B, 1, 0), &APT_S::CancelLibraryApplet, "CancelLibraryApplet"}, {0x003B, &APT_S::CancelLibraryApplet, "CancelLibraryApplet"},
{IPC::MakeHeader(0x003C, 1, 2), nullptr, "SendDspSleep"}, {0x003C, nullptr, "SendDspSleep"},
{IPC::MakeHeader(0x003D, 1, 2), nullptr, "SendDspWakeUp"}, {0x003D, nullptr, "SendDspWakeUp"},
{IPC::MakeHeader(0x003E, 2, 0), nullptr, "ReplySleepQuery"}, {0x003E, nullptr, "ReplySleepQuery"},
{IPC::MakeHeader(0x003F, 1, 0), nullptr, "ReplySleepNotificationComplete"}, {0x003F, nullptr, "ReplySleepNotificationComplete"},
{IPC::MakeHeader(0x0040, 1, 2), &APT_S::SendCaptureBufferInfo, "SendCaptureBufferInfo"}, {0x0040, &APT_S::SendCaptureBufferInfo, "SendCaptureBufferInfo"},
{IPC::MakeHeader(0x0041, 1, 0), &APT_S::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"}, {0x0041, &APT_S::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"},
{IPC::MakeHeader(0x0042, 2, 0), nullptr, "SleepSystem"}, {0x0042, nullptr, "SleepSystem"},
{IPC::MakeHeader(0x0043, 1, 0), &APT_S::NotifyToWait, "NotifyToWait"}, {0x0043, &APT_S::NotifyToWait, "NotifyToWait"},
{IPC::MakeHeader(0x0044, 0, 0), &APT_S::GetSharedFont, "GetSharedFont"}, {0x0044, &APT_S::GetSharedFont, "GetSharedFont"},
{IPC::MakeHeader(0x0045, 1, 0), &APT_S::GetWirelessRebootInfo, "GetWirelessRebootInfo"}, {0x0045, &APT_S::GetWirelessRebootInfo, "GetWirelessRebootInfo"},
{IPC::MakeHeader(0x0046, 4, 4), &APT_S::Wrap, "Wrap"}, {0x0046, &APT_S::Wrap, "Wrap"},
{IPC::MakeHeader(0x0047, 4, 4), &APT_S::Unwrap, "Unwrap"}, {0x0047, &APT_S::Unwrap, "Unwrap"},
{IPC::MakeHeader(0x0048, 4, 0), nullptr, "GetProgramInfo"}, {0x0048, nullptr, "GetProgramInfo"},
{IPC::MakeHeader(0x0049, 6, 0), nullptr, "Reboot"}, {0x0049, nullptr, "Reboot"},
{IPC::MakeHeader(0x004A, 1, 0), &APT_S::GetCaptureInfo, "GetCaptureInfo"}, {0x004A, &APT_S::GetCaptureInfo, "GetCaptureInfo"},
{IPC::MakeHeader(0x004B, 3, 2), &APT_S::AppletUtility, "AppletUtility"}, {0x004B, &APT_S::AppletUtility, "AppletUtility"},
{IPC::MakeHeader(0x004C, 0, 0), nullptr, "SetFatalErrDispMode"}, {0x004C, nullptr, "SetFatalErrDispMode"},
{IPC::MakeHeader(0x004D, 2, 0), nullptr, "GetAppletProgramInfo"}, {0x004D, nullptr, "GetAppletProgramInfo"},
{IPC::MakeHeader(0x004E, 0, 0), nullptr, "HardwareResetAsync"}, {0x004E, nullptr, "HardwareResetAsync"},
{IPC::MakeHeader(0x004F, 2, 0), &APT_S::SetAppCpuTimeLimit, "SetAppCpuTimeLimit"}, {0x004F, &APT_S::SetAppCpuTimeLimit, "SetAppCpuTimeLimit"},
{IPC::MakeHeader(0x0050, 1, 0), &APT_S::GetAppCpuTimeLimit, "GetAppCpuTimeLimit"}, {0x0050, &APT_S::GetAppCpuTimeLimit, "GetAppCpuTimeLimit"},
{IPC::MakeHeader(0x0051, 2, 0), &APT_S::GetStartupArgument, "GetStartupArgument"}, {0x0051, &APT_S::GetStartupArgument, "GetStartupArgument"},
{IPC::MakeHeader(0x0052, 4, 4), nullptr, "Wrap1"}, {0x0052, nullptr, "Wrap1"},
{IPC::MakeHeader(0x0053, 4, 4), nullptr, "Unwrap1"}, {0x0053, nullptr, "Unwrap1"},
{IPC::MakeHeader(0x0055, 1, 0), &APT_S::SetScreenCapPostPermission, "SetScreenCapPostPermission"}, {0x0055, &APT_S::SetScreenCapPostPermission, "SetScreenCapPostPermission"},
{IPC::MakeHeader(0x0056, 0, 0), &APT_S::GetScreenCapPostPermission, "GetScreenCapPostPermission"}, {0x0056, &APT_S::GetScreenCapPostPermission, "GetScreenCapPostPermission"},
{IPC::MakeHeader(0x0057, 1, 4), nullptr, "WakeupApplication2"}, {0x0057, nullptr, "WakeupApplication2"},
{IPC::MakeHeader(0x0058, 0, 2), nullptr, "GetProgramID"}, {0x0058, nullptr, "GetProgramID"},
{IPC::MakeHeader(0x0101, 0, 0), &APT_S::CheckNew3DSApp, "CheckNew3DSApp"}, {0x0101, &APT_S::CheckNew3DSApp, "CheckNew3DSApp"},
{IPC::MakeHeader(0x0102, 0, 0), &APT_S::CheckNew3DS, "CheckNew3DS"}, {0x0102, &APT_S::CheckNew3DS, "CheckNew3DS"},
{IPC::MakeHeader(0x0103, 0, 0), &APT_S::Unknown0x0103, "Unknown0x0103"}, {0x0103, &APT_S::Unknown0x0103, "Unknown0x0103"},
{IPC::MakeHeader(0x0104, 0, 0), nullptr, "IsStandardMemoryLayout"}, {0x0104, nullptr, "IsStandardMemoryLayout"},
{IPC::MakeHeader(0x0105, 4, 0), &APT_S::IsTitleAllowed, "IsTitleAllowed"}, {0x0105, &APT_S::IsTitleAllowed, "IsTitleAllowed"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -11,98 +11,98 @@ APT_U::APT_U(std::shared_ptr<Module> apt)
: Module::APTInterface(std::move(apt), "APT:U", MaxAPTSessions) { : Module::APTInterface(std::move(apt), "APT:U", MaxAPTSessions) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &APT_U::GetLockHandle, "GetLockHandle"}, {0x0001, &APT_U::GetLockHandle, "GetLockHandle"},
{IPC::MakeHeader(0x0002, 2, 0), &APT_U::Initialize, "Initialize"}, {0x0002, &APT_U::Initialize, "Initialize"},
{IPC::MakeHeader(0x0003, 1, 0), &APT_U::Enable, "Enable"}, {0x0003, &APT_U::Enable, "Enable"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "Finalize"}, {0x0004, nullptr, "Finalize"},
{IPC::MakeHeader(0x0005, 1, 0), &APT_U::GetAppletManInfo, "GetAppletManInfo"}, {0x0005, &APT_U::GetAppletManInfo, "GetAppletManInfo"},
{IPC::MakeHeader(0x0006, 1, 0), &APT_U::GetAppletInfo, "GetAppletInfo"}, {0x0006, &APT_U::GetAppletInfo, "GetAppletInfo"},
{IPC::MakeHeader(0x0007, 0, 0), nullptr, "GetLastSignaledAppletId"}, {0x0007, nullptr, "GetLastSignaledAppletId"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "CountRegisteredApplet"}, {0x0008, nullptr, "CountRegisteredApplet"},
{IPC::MakeHeader(0x0009, 1, 0), &APT_U::IsRegistered, "IsRegistered"}, {0x0009, &APT_U::IsRegistered, "IsRegistered"},
{IPC::MakeHeader(0x000A, 1, 0), nullptr, "GetAttribute"}, {0x000A, nullptr, "GetAttribute"},
{IPC::MakeHeader(0x000B, 1, 0), &APT_U::InquireNotification, "InquireNotification"}, {0x000B, &APT_U::InquireNotification, "InquireNotification"},
{IPC::MakeHeader(0x000C, 4, 4), &APT_U::SendParameter, "SendParameter"}, {0x000C, &APT_U::SendParameter, "SendParameter"},
{IPC::MakeHeader(0x000D, 2, 0), &APT_U::ReceiveParameter, "ReceiveParameter"}, {0x000D, &APT_U::ReceiveParameter, "ReceiveParameter"},
{IPC::MakeHeader(0x000E, 2, 0), &APT_U::GlanceParameter, "GlanceParameter"}, {0x000E, &APT_U::GlanceParameter, "GlanceParameter"},
{IPC::MakeHeader(0x000F, 4, 0), &APT_U::CancelParameter, "CancelParameter"}, {0x000F, &APT_U::CancelParameter, "CancelParameter"},
{IPC::MakeHeader(0x0010, 3, 2), nullptr, "DebugFunc"}, {0x0010, nullptr, "DebugFunc"},
{IPC::MakeHeader(0x0011, 3, 0), nullptr, "MapProgramIdForDebug"}, {0x0011, nullptr, "MapProgramIdForDebug"},
{IPC::MakeHeader(0x0012, 1, 0), nullptr, "SetHomeMenuAppletIdForDebug"}, {0x0012, nullptr, "SetHomeMenuAppletIdForDebug"},
{IPC::MakeHeader(0x0013, 0, 0), nullptr, "GetPreparationState"}, {0x0013, nullptr, "GetPreparationState"},
{IPC::MakeHeader(0x0014, 1, 0), nullptr, "SetPreparationState"}, {0x0014, nullptr, "SetPreparationState"},
{IPC::MakeHeader(0x0015, 5, 0), &APT_U::PrepareToStartApplication, "PrepareToStartApplication"}, {0x0015, &APT_U::PrepareToStartApplication, "PrepareToStartApplication"},
{IPC::MakeHeader(0x0016, 1, 0), &APT_U::PreloadLibraryApplet, "PreloadLibraryApplet"}, {0x0016, &APT_U::PreloadLibraryApplet, "PreloadLibraryApplet"},
{IPC::MakeHeader(0x0017, 1, 0), &APT_U::FinishPreloadingLibraryApplet, "FinishPreloadingLibraryApplet"}, {0x0017, &APT_U::FinishPreloadingLibraryApplet, "FinishPreloadingLibraryApplet"},
{IPC::MakeHeader(0x0018, 1, 0), &APT_U::PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, {0x0018, &APT_U::PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
{IPC::MakeHeader(0x0019, 1, 0), &APT_U::PrepareToStartSystemApplet, "PrepareToStartSystemApplet"}, {0x0019, &APT_U::PrepareToStartSystemApplet, "PrepareToStartSystemApplet"},
{IPC::MakeHeader(0x001A, 0, 0), &APT_U::PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"}, {0x001A, &APT_U::PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"},
{IPC::MakeHeader(0x001B, 3, 4), &APT_U::StartApplication, "StartApplication"}, {0x001B, &APT_U::StartApplication, "StartApplication"},
{IPC::MakeHeader(0x001C, 0, 0), &APT_U::WakeupApplication, "WakeupApplication"}, {0x001C, &APT_U::WakeupApplication, "WakeupApplication"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "CancelApplication"}, {0x001D, nullptr, "CancelApplication"},
{IPC::MakeHeader(0x001E, 2, 4), &APT_U::StartLibraryApplet, "StartLibraryApplet"}, {0x001E, &APT_U::StartLibraryApplet, "StartLibraryApplet"},
{IPC::MakeHeader(0x001F, 2, 4), &APT_U::StartSystemApplet, "StartSystemApplet"}, {0x001F, &APT_U::StartSystemApplet, "StartSystemApplet"},
{IPC::MakeHeader(0x0020, 1, 4), nullptr, "StartNewestHomeMenu"}, {0x0020, nullptr, "StartNewestHomeMenu"},
{IPC::MakeHeader(0x0021, 0, 0), &APT_U::OrderToCloseApplication, "OrderToCloseApplication"}, {0x0021, &APT_U::OrderToCloseApplication, "OrderToCloseApplication"},
{IPC::MakeHeader(0x0022, 1, 0), &APT_U::PrepareToCloseApplication, "PrepareToCloseApplication"}, {0x0022, &APT_U::PrepareToCloseApplication, "PrepareToCloseApplication"},
{IPC::MakeHeader(0x0023, 1, 0), nullptr, "PrepareToJumpToApplication"}, {0x0023, nullptr, "PrepareToJumpToApplication"},
{IPC::MakeHeader(0x0024, 1, 4), nullptr, "JumpToApplication"}, {0x0024, nullptr, "JumpToApplication"},
{IPC::MakeHeader(0x0025, 3, 0), &APT_U::PrepareToCloseLibraryApplet, "PrepareToCloseLibraryApplet"}, {0x0025, &APT_U::PrepareToCloseLibraryApplet, "PrepareToCloseLibraryApplet"},
{IPC::MakeHeader(0x0026, 0, 0), &APT_U::PrepareToCloseSystemApplet, "PrepareToCloseSystemApplet"}, {0x0026, &APT_U::PrepareToCloseSystemApplet, "PrepareToCloseSystemApplet"},
{IPC::MakeHeader(0x0027, 1, 4), &APT_U::CloseApplication, "CloseApplication"}, {0x0027, &APT_U::CloseApplication, "CloseApplication"},
{IPC::MakeHeader(0x0028, 1, 4), &APT_U::CloseLibraryApplet, "CloseLibraryApplet"}, {0x0028, &APT_U::CloseLibraryApplet, "CloseLibraryApplet"},
{IPC::MakeHeader(0x0029, 1, 4), &APT_U::CloseSystemApplet, "CloseSystemApplet"}, {0x0029, &APT_U::CloseSystemApplet, "CloseSystemApplet"},
{IPC::MakeHeader(0x002A, 0, 0), &APT_U::OrderToCloseSystemApplet, "OrderToCloseSystemApplet"}, {0x002A, &APT_U::OrderToCloseSystemApplet, "OrderToCloseSystemApplet"},
{IPC::MakeHeader(0x002B, 0, 0), &APT_U::PrepareToJumpToHomeMenu, "PrepareToJumpToHomeMenu"}, {0x002B, &APT_U::PrepareToJumpToHomeMenu, "PrepareToJumpToHomeMenu"},
{IPC::MakeHeader(0x002C, 1, 4), &APT_U::JumpToHomeMenu, "JumpToHomeMenu"}, {0x002C, &APT_U::JumpToHomeMenu, "JumpToHomeMenu"},
{IPC::MakeHeader(0x002D, 0, 0), &APT_U::PrepareToLeaveHomeMenu, "PrepareToLeaveHomeMenu"}, {0x002D, &APT_U::PrepareToLeaveHomeMenu, "PrepareToLeaveHomeMenu"},
{IPC::MakeHeader(0x002E, 1, 4), &APT_U::LeaveHomeMenu, "LeaveHomeMenu"}, {0x002E, &APT_U::LeaveHomeMenu, "LeaveHomeMenu"},
{IPC::MakeHeader(0x002F, 1, 0), nullptr, "PrepareToLeaveResidentApplet"}, {0x002F, nullptr, "PrepareToLeaveResidentApplet"},
{IPC::MakeHeader(0x0030, 1, 4), nullptr, "LeaveResidentApplet"}, {0x0030, nullptr, "LeaveResidentApplet"},
{IPC::MakeHeader(0x0031, 4, 0), &APT_U::PrepareToDoApplicationJump, "PrepareToDoApplicationJump"}, {0x0031, &APT_U::PrepareToDoApplicationJump, "PrepareToDoApplicationJump"},
{IPC::MakeHeader(0x0032, 2, 4), &APT_U::DoApplicationJump, "DoApplicationJump"}, {0x0032, &APT_U::DoApplicationJump, "DoApplicationJump"},
{IPC::MakeHeader(0x0033, 0, 0), &APT_U::GetProgramIdOnApplicationJump, "GetProgramIdOnApplicationJump"}, {0x0033, &APT_U::GetProgramIdOnApplicationJump, "GetProgramIdOnApplicationJump"},
{IPC::MakeHeader(0x0034, 2, 4), nullptr, "SendDeliverArg"}, {0x0034, nullptr, "SendDeliverArg"},
{IPC::MakeHeader(0x0035, 2, 0), &APT_U::ReceiveDeliverArg, "ReceiveDeliverArg"}, {0x0035, &APT_U::ReceiveDeliverArg, "ReceiveDeliverArg"},
{IPC::MakeHeader(0x0036, 1, 0), &APT_U::LoadSysMenuArg, "LoadSysMenuArg"}, {0x0036, &APT_U::LoadSysMenuArg, "LoadSysMenuArg"},
{IPC::MakeHeader(0x0037, 1, 2), &APT_U::StoreSysMenuArg, "StoreSysMenuArg"}, {0x0037, &APT_U::StoreSysMenuArg, "StoreSysMenuArg"},
{IPC::MakeHeader(0x0038, 1, 0), nullptr, "PreloadResidentApplet"}, {0x0038, nullptr, "PreloadResidentApplet"},
{IPC::MakeHeader(0x0039, 1, 0), nullptr, "PrepareToStartResidentApplet"}, {0x0039, nullptr, "PrepareToStartResidentApplet"},
{IPC::MakeHeader(0x003A, 1, 4), nullptr, "StartResidentApplet"}, {0x003A, nullptr, "StartResidentApplet"},
{IPC::MakeHeader(0x003B, 1, 0), &APT_U::CancelLibraryApplet, "CancelLibraryApplet"}, {0x003B, &APT_U::CancelLibraryApplet, "CancelLibraryApplet"},
{IPC::MakeHeader(0x003C, 1, 2), nullptr, "SendDspSleep"}, {0x003C, nullptr, "SendDspSleep"},
{IPC::MakeHeader(0x003D, 1, 2), nullptr, "SendDspWakeUp"}, {0x003D, nullptr, "SendDspWakeUp"},
{IPC::MakeHeader(0x003E, 2, 0), nullptr, "ReplySleepQuery"}, {0x003E, nullptr, "ReplySleepQuery"},
{IPC::MakeHeader(0x003F, 1, 0), nullptr, "ReplySleepNotificationComplete"}, {0x003F, nullptr, "ReplySleepNotificationComplete"},
{IPC::MakeHeader(0x0040, 1, 2), &APT_U::SendCaptureBufferInfo, "SendCaptureBufferInfo"}, {0x0040, &APT_U::SendCaptureBufferInfo, "SendCaptureBufferInfo"},
{IPC::MakeHeader(0x0041, 1, 0), &APT_U::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"}, {0x0041, &APT_U::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"},
{IPC::MakeHeader(0x0042, 2, 0), nullptr, "SleepSystem"}, {0x0042, nullptr, "SleepSystem"},
{IPC::MakeHeader(0x0043, 1, 0), &APT_U::NotifyToWait, "NotifyToWait"}, {0x0043, &APT_U::NotifyToWait, "NotifyToWait"},
{IPC::MakeHeader(0x0044, 0, 0), &APT_U::GetSharedFont, "GetSharedFont"}, {0x0044, &APT_U::GetSharedFont, "GetSharedFont"},
{IPC::MakeHeader(0x0045, 1, 0), &APT_U::GetWirelessRebootInfo, "GetWirelessRebootInfo"}, {0x0045, &APT_U::GetWirelessRebootInfo, "GetWirelessRebootInfo"},
{IPC::MakeHeader(0x0046, 4, 4), &APT_U::Wrap, "Wrap"}, {0x0046, &APT_U::Wrap, "Wrap"},
{IPC::MakeHeader(0x0047, 4, 4), &APT_U::Unwrap, "Unwrap"}, {0x0047, &APT_U::Unwrap, "Unwrap"},
{IPC::MakeHeader(0x0048, 4, 0), nullptr, "GetProgramInfo"}, {0x0048, nullptr, "GetProgramInfo"},
{IPC::MakeHeader(0x0049, 6, 0), nullptr, "Reboot"}, {0x0049, nullptr, "Reboot"},
{IPC::MakeHeader(0x004A, 1, 0), &APT_U::GetCaptureInfo, "GetCaptureInfo"}, {0x004A, &APT_U::GetCaptureInfo, "GetCaptureInfo"},
{IPC::MakeHeader(0x004B, 3, 2), &APT_U::AppletUtility, "AppletUtility"}, {0x004B, &APT_U::AppletUtility, "AppletUtility"},
{IPC::MakeHeader(0x004C, 0, 0), nullptr, "SetFatalErrDispMode"}, {0x004C, nullptr, "SetFatalErrDispMode"},
{IPC::MakeHeader(0x004D, 2, 0), nullptr, "GetAppletProgramInfo"}, {0x004D, nullptr, "GetAppletProgramInfo"},
{IPC::MakeHeader(0x004E, 0, 0), nullptr, "HardwareResetAsync"}, {0x004E, nullptr, "HardwareResetAsync"},
{IPC::MakeHeader(0x004F, 2, 0), &APT_U::SetAppCpuTimeLimit, "SetAppCpuTimeLimit"}, {0x004F, &APT_U::SetAppCpuTimeLimit, "SetAppCpuTimeLimit"},
{IPC::MakeHeader(0x0050, 1, 0), &APT_U::GetAppCpuTimeLimit, "GetAppCpuTimeLimit"}, {0x0050, &APT_U::GetAppCpuTimeLimit, "GetAppCpuTimeLimit"},
{IPC::MakeHeader(0x0051, 2, 0), &APT_U::GetStartupArgument, "GetStartupArgument"}, {0x0051, &APT_U::GetStartupArgument, "GetStartupArgument"},
{IPC::MakeHeader(0x0052, 4, 4), nullptr, "Wrap1"}, {0x0052, nullptr, "Wrap1"},
{IPC::MakeHeader(0x0053, 4, 4), nullptr, "Unwrap1"}, {0x0053, nullptr, "Unwrap1"},
{IPC::MakeHeader(0x0055, 1, 0), &APT_U::SetScreenCapPostPermission, "SetScreenCapPostPermission"}, {0x0055, &APT_U::SetScreenCapPostPermission, "SetScreenCapPostPermission"},
{IPC::MakeHeader(0x0056, 0, 0), &APT_U::GetScreenCapPostPermission, "GetScreenCapPostPermission"}, {0x0056, &APT_U::GetScreenCapPostPermission, "GetScreenCapPostPermission"},
{IPC::MakeHeader(0x0057, 1, 4), nullptr, "WakeupApplication2"}, {0x0057, nullptr, "WakeupApplication2"},
{IPC::MakeHeader(0x0058, 0, 2), nullptr, "GetProgramID"}, {0x0058, nullptr, "GetProgramID"},
{IPC::MakeHeader(0x0101, 0, 0), &APT_U::CheckNew3DSApp, "CheckNew3DSApp"}, {0x0101, &APT_U::CheckNew3DSApp, "CheckNew3DSApp"},
{IPC::MakeHeader(0x0102, 0, 0), &APT_U::CheckNew3DS, "CheckNew3DS"}, {0x0102, &APT_U::CheckNew3DS, "CheckNew3DS"},
{IPC::MakeHeader(0x0103, 0, 0), &APT_U::Unknown0x0103, "Unknown0x0103"}, {0x0103, &APT_U::Unknown0x0103, "Unknown0x0103"},
{IPC::MakeHeader(0x0104, 0, 0), nullptr, "IsStandardMemoryLayout"}, {0x0104, nullptr, "IsStandardMemoryLayout"},
{IPC::MakeHeader(0x0105, 4, 0), &APT_U::IsTitleAllowed, "IsTitleAllowed"}, {0x0105, &APT_U::IsTitleAllowed, "IsTitleAllowed"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -11,8 +11,8 @@ NS_C::NS_C(std::shared_ptr<Service::APT::Module> apt)
: Service::APT::Module::NSInterface(std::move(apt), "ns:c", 1) { : Service::APT::Module::NSInterface(std::move(apt), "ns:c", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 4, 0), nullptr, "LockSpecialContent"}, {0x0001, nullptr, "LockSpecialContent"},
{IPC::MakeHeader(0x0002, 4, 0), nullptr, "UnlockSpecialContent"}, {0x0002, nullptr, "UnlockSpecialContent"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -11,21 +11,21 @@ NS_S::NS_S(std::shared_ptr<Service::APT::Module> apt)
: Service::APT::Module::NSInterface(std::move(apt), "ns:s", 3) { : Service::APT::Module::NSInterface(std::move(apt), "ns:s", 3) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 0), nullptr, "LaunchFIRM"}, {0x0001, nullptr, "LaunchFIRM"},
{IPC::MakeHeader(0x0002, 3, 0), nullptr, "LaunchTitle"}, {0x0002, nullptr, "LaunchTitle"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "TerminateApplication"}, {0x0003, nullptr, "TerminateApplication"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "TerminateProcess"}, {0x0004, nullptr, "TerminateProcess"},
{IPC::MakeHeader(0x0005, 3, 0), nullptr, "LaunchApplicationFIRM"}, {0x0005, nullptr, "LaunchApplicationFIRM"},
{IPC::MakeHeader(0x0006, 1, 2), &NS_S::SetWirelessRebootInfo, "SetWirelessRebootInfo"}, {0x0006, &NS_S::SetWirelessRebootInfo, "SetWirelessRebootInfo"},
{IPC::MakeHeader(0x0007, 1, 2), nullptr, "CardUpdateInitialize"}, {0x0007, nullptr, "CardUpdateInitialize"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "CardUpdateShutdown"}, {0x0008, nullptr, "CardUpdateShutdown"},
{IPC::MakeHeader(0x000D, 5, 0), nullptr, "SetTWLBannerHMAC"}, {0x000D, nullptr, "SetTWLBannerHMAC"},
{IPC::MakeHeader(0x000E, 0, 0), &NS_S::ShutdownAsync, "ShutdownAsync"}, {0x000E, &NS_S::ShutdownAsync, "ShutdownAsync"},
{IPC::MakeHeader(0x0010, 6, 0), &NS_S::RebootSystem, "RebootSystem"}, {0x0010, &NS_S::RebootSystem, "RebootSystem"},
{IPC::MakeHeader(0x0011, 4, 0), nullptr, "TerminateTitle"}, {0x0011, nullptr, "TerminateTitle"},
{IPC::MakeHeader(0x0012, 3, 0), nullptr, "SetApplicationCpuTimeLimit"}, {0x0012, nullptr, "SetApplicationCpuTimeLimit"},
{IPC::MakeHeader(0x0015, 5, 0), nullptr, "LaunchApplication"}, {0x0015, nullptr, "LaunchApplication"},
{IPC::MakeHeader(0x0016, 0, 0), &NS_S::RebootSystemClean, "RebootSystemClean"}, {0x0016, &NS_S::RebootSystemClean, "RebootSystemClean"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -13,7 +13,7 @@
namespace Service::BOSS { namespace Service::BOSS {
void Module::Interface::InitializeSession(Kernel::HLERequestContext& ctx) { void Module::Interface::InitializeSession(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 2, 2); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
rp.PopPID(); rp.PopPID();
@ -24,7 +24,7 @@ void Module::Interface::InitializeSession(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetStorageInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::SetStorageInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 4, 0); IPC::RequestParser rp(ctx);
const u64 extdata_id = rp.Pop<u64>(); const u64 extdata_id = rp.Pop<u64>();
const u32 boss_size = rp.Pop<u32>(); const u32 boss_size = rp.Pop<u32>();
const u8 extdata_type = rp.Pop<u8>(); /// 0 = NAND, 1 = SD const u8 extdata_type = rp.Pop<u8>(); /// 0 = NAND, 1 = SD
@ -38,7 +38,7 @@ void Module::Interface::SetStorageInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::UnregisterStorage(Kernel::HLERequestContext& ctx) { void Module::Interface::UnregisterStorage(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -47,7 +47,7 @@ void Module::Interface::UnregisterStorage(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetStorageInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetStorageInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -57,7 +57,7 @@ void Module::Interface::GetStorageInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::RegisterPrivateRootCa(Kernel::HLERequestContext& ctx) { void Module::Interface::RegisterPrivateRootCa(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 1, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const u32 size = rp.Pop<u32>(); [[maybe_unused]] const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -69,7 +69,7 @@ void Module::Interface::RegisterPrivateRootCa(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::RegisterPrivateClientCert(Kernel::HLERequestContext& ctx) { void Module::Interface::RegisterPrivateClientCert(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 2, 4); IPC::RequestParser rp(ctx);
const u32 buffer1_size = rp.Pop<u32>(); const u32 buffer1_size = rp.Pop<u32>();
const u32 buffer2_size = rp.Pop<u32>(); const u32 buffer2_size = rp.Pop<u32>();
auto& buffer1 = rp.PopMappedBuffer(); auto& buffer1 = rp.PopMappedBuffer();
@ -85,7 +85,7 @@ void Module::Interface::RegisterPrivateClientCert(Kernel::HLERequestContext& ctx
} }
void Module::Interface::GetNewArrivalFlag(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNewArrivalFlag(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -95,7 +95,7 @@ void Module::Interface::GetNewArrivalFlag(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::RegisterNewArrivalEvent(Kernel::HLERequestContext& ctx) { void Module::Interface::RegisterNewArrivalEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 0, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto event = rp.PopObject<Kernel::Event>(); [[maybe_unused]] const auto event = rp.PopObject<Kernel::Event>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -105,7 +105,7 @@ void Module::Interface::RegisterNewArrivalEvent(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::SetOptoutFlag(Kernel::HLERequestContext& ctx) { void Module::Interface::SetOptoutFlag(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 1, 0); IPC::RequestParser rp(ctx);
output_flag = rp.Pop<u8>(); output_flag = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -115,7 +115,7 @@ void Module::Interface::SetOptoutFlag(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetOptoutFlag(Kernel::HLERequestContext& ctx) { void Module::Interface::GetOptoutFlag(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0A, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -125,7 +125,7 @@ void Module::Interface::GetOptoutFlag(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::RegisterTask(Kernel::HLERequestContext& ctx) { void Module::Interface::RegisterTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0B, 3, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 unk_param2 = rp.Pop<u8>(); const u8 unk_param2 = rp.Pop<u8>();
const u8 unk_param3 = rp.Pop<u8>(); const u8 unk_param3 = rp.Pop<u8>();
@ -140,7 +140,7 @@ void Module::Interface::RegisterTask(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::UnregisterTask(Kernel::HLERequestContext& ctx) { void Module::Interface::UnregisterTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0C, 2, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 unk_param2 = rp.Pop<u8>(); const u8 unk_param2 = rp.Pop<u8>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -153,7 +153,7 @@ void Module::Interface::UnregisterTask(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ReconfigureTask(Kernel::HLERequestContext& ctx) { void Module::Interface::ReconfigureTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 2, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 unk_param2 = rp.Pop<u8>(); const u8 unk_param2 = rp.Pop<u8>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -166,7 +166,7 @@ void Module::Interface::ReconfigureTask(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskIdList(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskIdList(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0E, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -175,7 +175,7 @@ void Module::Interface::GetTaskIdList(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetStepIdList(Kernel::HLERequestContext& ctx) { void Module::Interface::GetStepIdList(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -187,7 +187,7 @@ void Module::Interface::GetStepIdList(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataIdList(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataIdList(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 4, 2); IPC::RequestParser rp(ctx);
const u32 filter = rp.Pop<u32>(); const u32 filter = rp.Pop<u32>();
const u32 max_entries = rp.Pop<u32>(); /// buffer size in words const u32 max_entries = rp.Pop<u32>(); /// buffer size in words
const u16 word_index_start = rp.Pop<u16>(); const u16 word_index_start = rp.Pop<u16>();
@ -207,7 +207,7 @@ void Module::Interface::GetNsDataIdList(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataIdList1(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataIdList1(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 4, 2); IPC::RequestParser rp(ctx);
const u32 filter = rp.Pop<u32>(); const u32 filter = rp.Pop<u32>();
const u32 max_entries = rp.Pop<u32>(); /// buffer size in words const u32 max_entries = rp.Pop<u32>(); /// buffer size in words
const u16 word_index_start = rp.Pop<u16>(); const u16 word_index_start = rp.Pop<u16>();
@ -227,7 +227,7 @@ void Module::Interface::GetNsDataIdList1(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataIdList2(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataIdList2(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 4, 2); IPC::RequestParser rp(ctx);
const u32 filter = rp.Pop<u32>(); const u32 filter = rp.Pop<u32>();
const u32 max_entries = rp.Pop<u32>(); /// buffer size in words const u32 max_entries = rp.Pop<u32>(); /// buffer size in words
const u16 word_index_start = rp.Pop<u16>(); const u16 word_index_start = rp.Pop<u16>();
@ -247,7 +247,7 @@ void Module::Interface::GetNsDataIdList2(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataIdList3(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataIdList3(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 4, 2); IPC::RequestParser rp(ctx);
const u32 filter = rp.Pop<u32>(); const u32 filter = rp.Pop<u32>();
const u32 max_entries = rp.Pop<u32>(); /// buffer size in words const u32 max_entries = rp.Pop<u32>(); /// buffer size in words
const u16 word_index_start = rp.Pop<u16>(); const u16 word_index_start = rp.Pop<u16>();
@ -267,7 +267,7 @@ void Module::Interface::GetNsDataIdList3(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SendProperty(Kernel::HLERequestContext& ctx) { void Module::Interface::SendProperty(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 2, 2); IPC::RequestParser rp(ctx);
const u16 property_id = rp.Pop<u16>(); const u16 property_id = rp.Pop<u16>();
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -280,7 +280,7 @@ void Module::Interface::SendProperty(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SendPropertyHandle(Kernel::HLERequestContext& ctx) { void Module::Interface::SendPropertyHandle(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 1, 2); IPC::RequestParser rp(ctx);
const u16 property_id = rp.Pop<u16>(); const u16 property_id = rp.Pop<u16>();
[[maybe_unused]] const std::shared_ptr<Kernel::Object> object = rp.PopGenericObject(); [[maybe_unused]] const std::shared_ptr<Kernel::Object> object = rp.PopGenericObject();
@ -291,7 +291,7 @@ void Module::Interface::SendPropertyHandle(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ReceiveProperty(Kernel::HLERequestContext& ctx) { void Module::Interface::ReceiveProperty(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 2, 2); IPC::RequestParser rp(ctx);
const u16 property_id = rp.Pop<u16>(); const u16 property_id = rp.Pop<u16>();
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -305,7 +305,7 @@ void Module::Interface::ReceiveProperty(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::UpdateTaskInterval(Kernel::HLERequestContext& ctx) { void Module::Interface::UpdateTaskInterval(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 2, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u16 unk_param2 = rp.Pop<u16>(); const u16 unk_param2 = rp.Pop<u16>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -318,7 +318,7 @@ void Module::Interface::UpdateTaskInterval(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::UpdateTaskCount(Kernel::HLERequestContext& ctx) { void Module::Interface::UpdateTaskCount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 2, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u32 unk_param2 = rp.Pop<u32>(); const u32 unk_param2 = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -331,7 +331,7 @@ void Module::Interface::UpdateTaskCount(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskInterval(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskInterval(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x19, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -344,7 +344,7 @@ void Module::Interface::GetTaskInterval(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskCount(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskCount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -357,7 +357,7 @@ void Module::Interface::GetTaskCount(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskServiceStatus(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskServiceStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1B, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -370,7 +370,7 @@ void Module::Interface::GetTaskServiceStatus(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::StartTask(Kernel::HLERequestContext& ctx) { void Module::Interface::StartTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1C, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -382,7 +382,7 @@ void Module::Interface::StartTask(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::StartTaskImmediate(Kernel::HLERequestContext& ctx) { void Module::Interface::StartTaskImmediate(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1D, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -394,7 +394,7 @@ void Module::Interface::StartTaskImmediate(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::CancelTask(Kernel::HLERequestContext& ctx) { void Module::Interface::CancelTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1E, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -406,7 +406,7 @@ void Module::Interface::CancelTask(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskFinishHandle(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskFinishHandle(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1F, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -416,7 +416,7 @@ void Module::Interface::GetTaskFinishHandle(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskState(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x20, 2, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 state = rp.Pop<u8>(); const u8 state = rp.Pop<u8>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -432,7 +432,7 @@ void Module::Interface::GetTaskState(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskResult(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskResult(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x21, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -447,7 +447,7 @@ void Module::Interface::GetTaskResult(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskCommErrorCode(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskCommErrorCode(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x22, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -462,7 +462,7 @@ void Module::Interface::GetTaskCommErrorCode(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskStatus(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x23, 3, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 unk_param2 = rp.Pop<u8>(); const u8 unk_param2 = rp.Pop<u8>();
const u8 unk_param3 = rp.Pop<u8>(); const u8 unk_param3 = rp.Pop<u8>();
@ -478,7 +478,7 @@ void Module::Interface::GetTaskStatus(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskError(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskError(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x24, 2, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 unk_param2 = rp.Pop<u8>(); const u8 unk_param2 = rp.Pop<u8>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -492,7 +492,7 @@ void Module::Interface::GetTaskError(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x25, 2, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 unk_param2 = rp.Pop<u8>(); const u8 unk_param2 = rp.Pop<u8>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -505,7 +505,7 @@ void Module::Interface::GetTaskInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteNsData(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteNsData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x26, 1, 0); IPC::RequestParser rp(ctx);
const u32 ns_data_id = rp.Pop<u32>(); const u32 ns_data_id = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -515,7 +515,7 @@ void Module::Interface::DeleteNsData(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataHeaderInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataHeaderInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x27, 3, 2); IPC::RequestParser rp(ctx);
const u32 ns_data_id = rp.Pop<u32>(); const u32 ns_data_id = rp.Pop<u32>();
const u8 type = rp.Pop<u8>(); const u8 type = rp.Pop<u8>();
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
@ -530,7 +530,7 @@ void Module::Interface::GetNsDataHeaderInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ReadNsData(Kernel::HLERequestContext& ctx) { void Module::Interface::ReadNsData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x28, 4, 2); IPC::RequestParser rp(ctx);
const u32 ns_data_id = rp.Pop<u32>(); const u32 ns_data_id = rp.Pop<u32>();
const u64 offset = rp.Pop<u64>(); const u64 offset = rp.Pop<u64>();
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
@ -547,7 +547,7 @@ void Module::Interface::ReadNsData(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetNsDataAdditionalInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::SetNsDataAdditionalInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x29, 2, 0); IPC::RequestParser rp(ctx);
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();
const u32 unk_param2 = rp.Pop<u32>(); const u32 unk_param2 = rp.Pop<u32>();
@ -559,7 +559,7 @@ void Module::Interface::SetNsDataAdditionalInfo(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::GetNsDataAdditionalInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataAdditionalInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2A, 1, 0); IPC::RequestParser rp(ctx);
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -570,7 +570,7 @@ void Module::Interface::GetNsDataAdditionalInfo(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::SetNsDataNewFlag(Kernel::HLERequestContext& ctx) { void Module::Interface::SetNsDataNewFlag(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2B, 2, 0); IPC::RequestParser rp(ctx);
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();
ns_data_new_flag = rp.Pop<u8>(); ns_data_new_flag = rp.Pop<u8>();
@ -582,7 +582,7 @@ void Module::Interface::SetNsDataNewFlag(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataNewFlag(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataNewFlag(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2C, 1, 0); IPC::RequestParser rp(ctx);
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -594,7 +594,7 @@ void Module::Interface::GetNsDataNewFlag(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataLastUpdate(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataLastUpdate(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2D, 1, 0); IPC::RequestParser rp(ctx);
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
@ -606,7 +606,7 @@ void Module::Interface::GetNsDataLastUpdate(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetErrorCode(Kernel::HLERequestContext& ctx) { void Module::Interface::GetErrorCode(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2E, 1, 0); IPC::RequestParser rp(ctx);
const u8 input = rp.Pop<u8>(); const u8 input = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -617,7 +617,7 @@ void Module::Interface::GetErrorCode(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::RegisterStorageEntry(Kernel::HLERequestContext& ctx) { void Module::Interface::RegisterStorageEntry(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2F, 5, 0); IPC::RequestParser rp(ctx);
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();
const u32 unk_param2 = rp.Pop<u32>(); const u32 unk_param2 = rp.Pop<u32>();
const u32 unk_param3 = rp.Pop<u32>(); const u32 unk_param3 = rp.Pop<u32>();
@ -634,7 +634,7 @@ void Module::Interface::RegisterStorageEntry(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetStorageEntryInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetStorageEntryInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x30, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -645,7 +645,7 @@ void Module::Interface::GetStorageEntryInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetStorageOption(Kernel::HLERequestContext& ctx) { void Module::Interface::SetStorageOption(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x31, 4, 0); IPC::RequestParser rp(ctx);
const u8 unk_param1 = rp.Pop<u8>(); const u8 unk_param1 = rp.Pop<u8>();
const u32 unk_param2 = rp.Pop<u32>(); const u32 unk_param2 = rp.Pop<u32>();
const u16 unk_param3 = rp.Pop<u16>(); const u16 unk_param3 = rp.Pop<u16>();
@ -661,7 +661,7 @@ void Module::Interface::SetStorageOption(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetStorageOption(Kernel::HLERequestContext& ctx) { void Module::Interface::GetStorageOption(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x32, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0); IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -674,7 +674,7 @@ void Module::Interface::GetStorageOption(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::StartBgImmediate(Kernel::HLERequestContext& ctx) { void Module::Interface::StartBgImmediate(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x33, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -686,7 +686,7 @@ void Module::Interface::StartBgImmediate(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskProperty0(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskProperty0(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x34, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -699,7 +699,7 @@ void Module::Interface::GetTaskProperty0(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::RegisterImmediateTask(Kernel::HLERequestContext& ctx) { void Module::Interface::RegisterImmediateTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x35, 3, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u8 unk_param2 = rp.Pop<u8>(); const u8 unk_param2 = rp.Pop<u8>();
const u8 unk_param3 = rp.Pop<u8>(); const u8 unk_param3 = rp.Pop<u8>();
@ -714,7 +714,7 @@ void Module::Interface::RegisterImmediateTask(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetTaskQuery(Kernel::HLERequestContext& ctx) { void Module::Interface::SetTaskQuery(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x36, 2, 4); IPC::RequestParser rp(ctx);
const u32 buffer1_size = rp.Pop<u32>(); const u32 buffer1_size = rp.Pop<u32>();
const u32 buffer2_size = rp.Pop<u32>(); const u32 buffer2_size = rp.Pop<u32>();
auto& buffer1 = rp.PopMappedBuffer(); auto& buffer1 = rp.PopMappedBuffer();
@ -730,7 +730,7 @@ void Module::Interface::SetTaskQuery(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTaskQuery(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTaskQuery(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x37, 2, 4); IPC::RequestParser rp(ctx);
const u32 buffer1_size = rp.Pop<u32>(); const u32 buffer1_size = rp.Pop<u32>();
const u32 buffer2_size = rp.Pop<u32>(); const u32 buffer2_size = rp.Pop<u32>();
auto& buffer1 = rp.PopMappedBuffer(); auto& buffer1 = rp.PopMappedBuffer();
@ -746,7 +746,7 @@ void Module::Interface::GetTaskQuery(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::InitializeSessionPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::InitializeSessionPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x401, 2, 2); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
rp.PopPID(); rp.PopPID();
@ -757,7 +757,7 @@ void Module::Interface::InitializeSessionPrivileged(Kernel::HLERequestContext& c
} }
void Module::Interface::GetAppNewFlag(Kernel::HLERequestContext& ctx) { void Module::Interface::GetAppNewFlag(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x404, 2, 0); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -768,7 +768,7 @@ void Module::Interface::GetAppNewFlag(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataIdListPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataIdListPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x40D, 6, 2); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
const u32 filter = rp.Pop<u32>(); const u32 filter = rp.Pop<u32>();
const u32 max_entries = rp.Pop<u32>(); /// buffer size in words const u32 max_entries = rp.Pop<u32>(); /// buffer size in words
@ -789,7 +789,7 @@ void Module::Interface::GetNsDataIdListPrivileged(Kernel::HLERequestContext& ctx
} }
void Module::Interface::GetNsDataIdListPrivileged1(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataIdListPrivileged1(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x40E, 6, 2); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
const u32 filter = rp.Pop<u32>(); const u32 filter = rp.Pop<u32>();
const u32 max_entries = rp.Pop<u32>(); /// buffer size in words const u32 max_entries = rp.Pop<u32>(); /// buffer size in words
@ -810,7 +810,7 @@ void Module::Interface::GetNsDataIdListPrivileged1(Kernel::HLERequestContext& ct
} }
void Module::Interface::SendPropertyPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::SendPropertyPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x413, 2, 2); IPC::RequestParser rp(ctx);
const u16 property_id = rp.Pop<u16>(); const u16 property_id = rp.Pop<u16>();
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -823,7 +823,7 @@ void Module::Interface::SendPropertyPrivileged(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteNsDataPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteNsDataPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x415, 3, 0); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
const u32 ns_data_id = rp.Pop<u32>(); const u32 ns_data_id = rp.Pop<u32>();
@ -835,7 +835,7 @@ void Module::Interface::DeleteNsDataPrivileged(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNsDataHeaderInfoPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataHeaderInfoPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x416, 5, 2); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
const u32 ns_data_id = rp.Pop<u32>(); const u32 ns_data_id = rp.Pop<u32>();
const u8 type = rp.Pop<u8>(); const u8 type = rp.Pop<u8>();
@ -852,7 +852,7 @@ void Module::Interface::GetNsDataHeaderInfoPrivileged(Kernel::HLERequestContext&
} }
void Module::Interface::ReadNsDataPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::ReadNsDataPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x417, 6, 2); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
const u32 ns_data_id = rp.Pop<u32>(); const u32 ns_data_id = rp.Pop<u32>();
const u64 offset = rp.Pop<u64>(); const u64 offset = rp.Pop<u64>();
@ -871,7 +871,7 @@ void Module::Interface::ReadNsDataPrivileged(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::SetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x41A, 4, 0); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();
ns_data_new_flag_privileged = rp.Pop<u8>(); ns_data_new_flag_privileged = rp.Pop<u8>();
@ -886,7 +886,7 @@ void Module::Interface::SetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ct
} }
void Module::Interface::GetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x41B, 3, 0); IPC::RequestParser rp(ctx);
const u64 programID = rp.Pop<u64>(); const u64 programID = rp.Pop<u64>();
const u32 unk_param1 = rp.Pop<u32>(); const u32 unk_param1 = rp.Pop<u32>();

View file

@ -12,72 +12,72 @@ BOSS_P::BOSS_P(std::shared_ptr<Module> boss)
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// boss:u shared commands // boss:u shared commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 2), &BOSS_P::InitializeSession, "InitializeSession"}, {0x0001, &BOSS_P::InitializeSession, "InitializeSession"},
{IPC::MakeHeader(0x0002, 4, 0), &BOSS_P::SetStorageInfo, "RegisterStorage"}, {0x0002, &BOSS_P::SetStorageInfo, "RegisterStorage"},
{IPC::MakeHeader(0x0003, 0, 0), &BOSS_P::UnregisterStorage, "UnregisterStorage"}, {0x0003, &BOSS_P::UnregisterStorage, "UnregisterStorage"},
{IPC::MakeHeader(0x0004, 0, 0), &BOSS_P::GetStorageInfo, "GetStorageInfo"}, {0x0004, &BOSS_P::GetStorageInfo, "GetStorageInfo"},
{IPC::MakeHeader(0x0005, 1, 2), &BOSS_P::RegisterPrivateRootCa, "RegisterPrivateRootCa"}, {0x0005, &BOSS_P::RegisterPrivateRootCa, "RegisterPrivateRootCa"},
{IPC::MakeHeader(0x0006, 2, 4), &BOSS_P::RegisterPrivateClientCert, "RegisterPrivateClientCert"}, {0x0006, &BOSS_P::RegisterPrivateClientCert, "RegisterPrivateClientCert"},
{IPC::MakeHeader(0x0007, 0, 0), &BOSS_P::GetNewArrivalFlag, "GetNewArrivalFlag"}, {0x0007, &BOSS_P::GetNewArrivalFlag, "GetNewArrivalFlag"},
{IPC::MakeHeader(0x0008, 0, 2), &BOSS_P::RegisterNewArrivalEvent, "RegisterNewArrivalEvent"}, {0x0008, &BOSS_P::RegisterNewArrivalEvent, "RegisterNewArrivalEvent"},
{IPC::MakeHeader(0x0009, 1, 0), &BOSS_P::SetOptoutFlag, "SetOptoutFlag"}, {0x0009, &BOSS_P::SetOptoutFlag, "SetOptoutFlag"},
{IPC::MakeHeader(0x000A, 0, 0), &BOSS_P::GetOptoutFlag, "GetOptoutFlag"}, {0x000A, &BOSS_P::GetOptoutFlag, "GetOptoutFlag"},
{IPC::MakeHeader(0x000B, 3, 2), &BOSS_P::RegisterTask, "RegisterTask"}, {0x000B, &BOSS_P::RegisterTask, "RegisterTask"},
{IPC::MakeHeader(0x000C, 2, 2), &BOSS_P::UnregisterTask, "UnregisterTask"}, {0x000C, &BOSS_P::UnregisterTask, "UnregisterTask"},
{IPC::MakeHeader(0x000D, 2, 2), &BOSS_P::ReconfigureTask, "ReconfigureTask"}, {0x000D, &BOSS_P::ReconfigureTask, "ReconfigureTask"},
{IPC::MakeHeader(0x000E, 0, 0), &BOSS_P::GetTaskIdList, "GetTaskIdList"}, {0x000E, &BOSS_P::GetTaskIdList, "GetTaskIdList"},
{IPC::MakeHeader(0x000F, 1, 2), &BOSS_P::GetStepIdList, "GetStepIdList"}, {0x000F, &BOSS_P::GetStepIdList, "GetStepIdList"},
{IPC::MakeHeader(0x0010, 4, 2), &BOSS_P::GetNsDataIdList, "GetNsDataIdList"}, {0x0010, &BOSS_P::GetNsDataIdList, "GetNsDataIdList"},
{IPC::MakeHeader(0x0011, 4, 2), &BOSS_P::GetNsDataIdList1, "GetNsDataIdList1"}, {0x0011, &BOSS_P::GetNsDataIdList1, "GetNsDataIdList1"},
{IPC::MakeHeader(0x0012, 4, 2), &BOSS_P::GetNsDataIdList2, "GetNsDataIdList2"}, {0x0012, &BOSS_P::GetNsDataIdList2, "GetNsDataIdList2"},
{IPC::MakeHeader(0x0013, 4, 2), &BOSS_P::GetNsDataIdList3, "GetNsDataIdList3"}, {0x0013, &BOSS_P::GetNsDataIdList3, "GetNsDataIdList3"},
{IPC::MakeHeader(0x0014, 2, 2), &BOSS_P::SendProperty, "SendProperty"}, {0x0014, &BOSS_P::SendProperty, "SendProperty"},
{IPC::MakeHeader(0x0015, 1, 2), &BOSS_P::SendPropertyHandle, "SendPropertyHandle"}, {0x0015, &BOSS_P::SendPropertyHandle, "SendPropertyHandle"},
{IPC::MakeHeader(0x0016, 2, 2), &BOSS_P::ReceiveProperty, "ReceiveProperty"}, {0x0016, &BOSS_P::ReceiveProperty, "ReceiveProperty"},
{IPC::MakeHeader(0x0017, 2, 2), &BOSS_P::UpdateTaskInterval, "UpdateTaskInterval"}, {0x0017, &BOSS_P::UpdateTaskInterval, "UpdateTaskInterval"},
{IPC::MakeHeader(0x0018, 2, 2), &BOSS_P::UpdateTaskCount, "UpdateTaskCount"}, {0x0018, &BOSS_P::UpdateTaskCount, "UpdateTaskCount"},
{IPC::MakeHeader(0x0019, 1, 2), &BOSS_P::GetTaskInterval, "GetTaskInterval"}, {0x0019, &BOSS_P::GetTaskInterval, "GetTaskInterval"},
{IPC::MakeHeader(0x001A, 1, 2), &BOSS_P::GetTaskCount, "GetTaskCount"}, {0x001A, &BOSS_P::GetTaskCount, "GetTaskCount"},
{IPC::MakeHeader(0x001B, 1, 2), &BOSS_P::GetTaskServiceStatus, "GetTaskServiceStatus"}, {0x001B, &BOSS_P::GetTaskServiceStatus, "GetTaskServiceStatus"},
{IPC::MakeHeader(0x001C, 1, 2), &BOSS_P::StartTask, "StartTask"}, {0x001C, &BOSS_P::StartTask, "StartTask"},
{IPC::MakeHeader(0x001D, 1, 2), &BOSS_P::StartTaskImmediate, "StartTaskImmediate"}, {0x001D, &BOSS_P::StartTaskImmediate, "StartTaskImmediate"},
{IPC::MakeHeader(0x001E, 1, 2), &BOSS_P::CancelTask, "CancelTask"}, {0x001E, &BOSS_P::CancelTask, "CancelTask"},
{IPC::MakeHeader(0x001F, 0, 0), &BOSS_P::GetTaskFinishHandle, "GetTaskFinishHandle"}, {0x001F, &BOSS_P::GetTaskFinishHandle, "GetTaskFinishHandle"},
{IPC::MakeHeader(0x0020, 2, 2), &BOSS_P::GetTaskState, "GetTaskState"}, {0x0020, &BOSS_P::GetTaskState, "GetTaskState"},
{IPC::MakeHeader(0x0021, 1, 2), &BOSS_P::GetTaskResult, "GetTaskResult"}, {0x0021, &BOSS_P::GetTaskResult, "GetTaskResult"},
{IPC::MakeHeader(0x0022, 1, 2), &BOSS_P::GetTaskCommErrorCode, "GetTaskCommErrorCode"}, {0x0022, &BOSS_P::GetTaskCommErrorCode, "GetTaskCommErrorCode"},
{IPC::MakeHeader(0x0023, 3, 2), &BOSS_P::GetTaskStatus, "GetTaskStatus"}, {0x0023, &BOSS_P::GetTaskStatus, "GetTaskStatus"},
{IPC::MakeHeader(0x0024, 2, 2), &BOSS_P::GetTaskError, "GetTaskError"}, {0x0024, &BOSS_P::GetTaskError, "GetTaskError"},
{IPC::MakeHeader(0x0025, 2, 2), &BOSS_P::GetTaskInfo, "GetTaskInfo"}, {0x0025, &BOSS_P::GetTaskInfo, "GetTaskInfo"},
{IPC::MakeHeader(0x0026, 1, 0), &BOSS_P::DeleteNsData, "DeleteNsData"}, {0x0026, &BOSS_P::DeleteNsData, "DeleteNsData"},
{IPC::MakeHeader(0x0027, 3, 2), &BOSS_P::GetNsDataHeaderInfo, "GetNsDataHeaderInfo"}, {0x0027, &BOSS_P::GetNsDataHeaderInfo, "GetNsDataHeaderInfo"},
{IPC::MakeHeader(0x0028, 4, 2), &BOSS_P::ReadNsData, "ReadNsData"}, {0x0028, &BOSS_P::ReadNsData, "ReadNsData"},
{IPC::MakeHeader(0x0029, 2, 0), &BOSS_P::SetNsDataAdditionalInfo, "SetNsDataAdditionalInfo"}, {0x0029, &BOSS_P::SetNsDataAdditionalInfo, "SetNsDataAdditionalInfo"},
{IPC::MakeHeader(0x002A, 1, 0), &BOSS_P::GetNsDataAdditionalInfo, "GetNsDataAdditionalInfo"}, {0x002A, &BOSS_P::GetNsDataAdditionalInfo, "GetNsDataAdditionalInfo"},
{IPC::MakeHeader(0x002B, 2, 0), &BOSS_P::SetNsDataNewFlag, "SetNsDataNewFlag"}, {0x002B, &BOSS_P::SetNsDataNewFlag, "SetNsDataNewFlag"},
{IPC::MakeHeader(0x002C, 1, 0), &BOSS_P::GetNsDataNewFlag, "GetNsDataNewFlag"}, {0x002C, &BOSS_P::GetNsDataNewFlag, "GetNsDataNewFlag"},
{IPC::MakeHeader(0x002D, 1, 0), &BOSS_P::GetNsDataLastUpdate, "GetNsDataLastUpdate"}, {0x002D, &BOSS_P::GetNsDataLastUpdate, "GetNsDataLastUpdate"},
{IPC::MakeHeader(0x002E, 1, 0), &BOSS_P::GetErrorCode, "GetErrorCode"}, {0x002E, &BOSS_P::GetErrorCode, "GetErrorCode"},
{IPC::MakeHeader(0x002F, 5, 0), &BOSS_P::RegisterStorageEntry, "RegisterStorageEntry"}, {0x002F, &BOSS_P::RegisterStorageEntry, "RegisterStorageEntry"},
{IPC::MakeHeader(0x0030, 0, 0), &BOSS_P::GetStorageEntryInfo, "GetStorageEntryInfo"}, {0x0030, &BOSS_P::GetStorageEntryInfo, "GetStorageEntryInfo"},
{IPC::MakeHeader(0x0031, 4, 0), &BOSS_P::SetStorageOption, "SetStorageOption"}, {0x0031, &BOSS_P::SetStorageOption, "SetStorageOption"},
{IPC::MakeHeader(0x0032, 0, 0), &BOSS_P::GetStorageOption, "GetStorageOption"}, {0x0032, &BOSS_P::GetStorageOption, "GetStorageOption"},
{IPC::MakeHeader(0x0033, 1, 2), &BOSS_P::StartBgImmediate, "StartBgImmediate"}, {0x0033, &BOSS_P::StartBgImmediate, "StartBgImmediate"},
{IPC::MakeHeader(0x0034, 1, 2), &BOSS_P::GetTaskProperty0, "GetTaskProperty0"}, {0x0034, &BOSS_P::GetTaskProperty0, "GetTaskProperty0"},
{IPC::MakeHeader(0x0035, 3, 2), &BOSS_P::RegisterImmediateTask, "RegisterImmediateTask"}, {0x0035, &BOSS_P::RegisterImmediateTask, "RegisterImmediateTask"},
{IPC::MakeHeader(0x0036, 2, 4), &BOSS_P::SetTaskQuery, "SetTaskQuery"}, {0x0036, &BOSS_P::SetTaskQuery, "SetTaskQuery"},
{IPC::MakeHeader(0x0037, 2, 4), &BOSS_P::GetTaskQuery, "GetTaskQuery"}, {0x0037, &BOSS_P::GetTaskQuery, "GetTaskQuery"},
// boss:p // boss:p
{IPC::MakeHeader(0x0401, 2, 2), &BOSS_P::InitializeSessionPrivileged, "InitializeSessionPrivileged"}, {0x0401, &BOSS_P::InitializeSessionPrivileged, "InitializeSessionPrivileged"},
{IPC::MakeHeader(0x0404, 2, 0), &BOSS_P::GetAppNewFlag, "GetAppNewFlag"}, {0x0404, &BOSS_P::GetAppNewFlag, "GetAppNewFlag"},
{IPC::MakeHeader(0x040D, 6, 2), &BOSS_P::GetNsDataIdListPrivileged, "GetNsDataIdListPrivileged"}, {0x040D, &BOSS_P::GetNsDataIdListPrivileged, "GetNsDataIdListPrivileged"},
{IPC::MakeHeader(0x040E, 6, 2), &BOSS_P::GetNsDataIdListPrivileged1, "GetNsDataIdListPrivileged1"}, {0x040E, &BOSS_P::GetNsDataIdListPrivileged1, "GetNsDataIdListPrivileged1"},
{IPC::MakeHeader(0x0413, 2, 2), &BOSS_P::SendPropertyPrivileged, "SendPropertyPrivileged"}, {0x0413, &BOSS_P::SendPropertyPrivileged, "SendPropertyPrivileged"},
{IPC::MakeHeader(0x0415, 3, 0), &BOSS_P::DeleteNsDataPrivileged, "DeleteNsDataPrivileged"}, {0x0415, &BOSS_P::DeleteNsDataPrivileged, "DeleteNsDataPrivileged"},
{IPC::MakeHeader(0x0416, 5, 2), &BOSS_P::GetNsDataHeaderInfoPrivileged, "GetNsDataHeaderInfoPrivileged"}, {0x0416, &BOSS_P::GetNsDataHeaderInfoPrivileged, "GetNsDataHeaderInfoPrivileged"},
{IPC::MakeHeader(0x0417, 6, 2), &BOSS_P::ReadNsDataPrivileged, "ReadNsDataPrivileged"}, {0x0417, &BOSS_P::ReadNsDataPrivileged, "ReadNsDataPrivileged"},
{IPC::MakeHeader(0x041A, 4, 0), &BOSS_P::SetNsDataNewFlagPrivileged, "SetNsDataNewFlagPrivileged"}, {0x041A, &BOSS_P::SetNsDataNewFlagPrivileged, "SetNsDataNewFlagPrivileged"},
{IPC::MakeHeader(0x041B, 3, 0), &BOSS_P::GetNsDataNewFlagPrivileged, "GetNsDataNewFlagPrivileged"}, {0x041B, &BOSS_P::GetNsDataNewFlagPrivileged, "GetNsDataNewFlagPrivileged"},
// clang-format on // clang-format on
}; };

View file

@ -11,61 +11,61 @@ BOSS_U::BOSS_U(std::shared_ptr<Module> boss)
: Module::Interface(std::move(boss), "boss:U", DefaultMaxSessions) { : Module::Interface(std::move(boss), "boss:U", DefaultMaxSessions) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 2), &BOSS_U::InitializeSession, "InitializeSession"}, {0x0001, &BOSS_U::InitializeSession, "InitializeSession"},
{IPC::MakeHeader(0x0002, 4, 0), &BOSS_U::SetStorageInfo, "SetStorageInfo"}, {0x0002, &BOSS_U::SetStorageInfo, "SetStorageInfo"},
{IPC::MakeHeader(0x0003, 0, 0), &BOSS_U::UnregisterStorage, "UnregisterStorage"}, {0x0003, &BOSS_U::UnregisterStorage, "UnregisterStorage"},
{IPC::MakeHeader(0x0004, 0, 0), &BOSS_U::GetStorageInfo, "GetStorageInfo"}, {0x0004, &BOSS_U::GetStorageInfo, "GetStorageInfo"},
{IPC::MakeHeader(0x0005, 1, 2), &BOSS_U::RegisterPrivateRootCa, "RegisterPrivateRootCa"}, {0x0005, &BOSS_U::RegisterPrivateRootCa, "RegisterPrivateRootCa"},
{IPC::MakeHeader(0x0006, 2, 4), &BOSS_U::RegisterPrivateClientCert, "RegisterPrivateClientCert"}, {0x0006, &BOSS_U::RegisterPrivateClientCert, "RegisterPrivateClientCert"},
{IPC::MakeHeader(0x0007, 0, 0), &BOSS_U::GetNewArrivalFlag, "GetNewArrivalFlag"}, {0x0007, &BOSS_U::GetNewArrivalFlag, "GetNewArrivalFlag"},
{IPC::MakeHeader(0x0008, 0, 2), &BOSS_U::RegisterNewArrivalEvent, "RegisterNewArrivalEvent"}, {0x0008, &BOSS_U::RegisterNewArrivalEvent, "RegisterNewArrivalEvent"},
{IPC::MakeHeader(0x0009, 1, 0), &BOSS_U::SetOptoutFlag, "SetOptoutFlag"}, {0x0009, &BOSS_U::SetOptoutFlag, "SetOptoutFlag"},
{IPC::MakeHeader(0x000A, 0, 0), &BOSS_U::GetOptoutFlag, "GetOptoutFlag"}, {0x000A, &BOSS_U::GetOptoutFlag, "GetOptoutFlag"},
{IPC::MakeHeader(0x000B, 3, 2), &BOSS_U::RegisterTask, "RegisterTask"}, {0x000B, &BOSS_U::RegisterTask, "RegisterTask"},
{IPC::MakeHeader(0x000C, 2, 2), &BOSS_U::UnregisterTask, "UnregisterTask"}, {0x000C, &BOSS_U::UnregisterTask, "UnregisterTask"},
{IPC::MakeHeader(0x000D, 2, 2), &BOSS_U::ReconfigureTask, "ReconfigureTask"}, {0x000D, &BOSS_U::ReconfigureTask, "ReconfigureTask"},
{IPC::MakeHeader(0x000E, 0, 0), &BOSS_U::GetTaskIdList, "GetTaskIdList"}, {0x000E, &BOSS_U::GetTaskIdList, "GetTaskIdList"},
{IPC::MakeHeader(0x000F, 1, 2), &BOSS_U::GetStepIdList, "GetStepIdList"}, {0x000F, &BOSS_U::GetStepIdList, "GetStepIdList"},
{IPC::MakeHeader(0x0010, 4, 2), &BOSS_U::GetNsDataIdList, "GetNsDataIdList"}, {0x0010, &BOSS_U::GetNsDataIdList, "GetNsDataIdList"},
{IPC::MakeHeader(0x0011, 4, 2), &BOSS_U::GetNsDataIdList1, "GetNsDataIdList1"}, {0x0011, &BOSS_U::GetNsDataIdList1, "GetNsDataIdList1"},
{IPC::MakeHeader(0x0012, 4, 2), &BOSS_U::GetNsDataIdList2, "GetNsDataIdList2"}, {0x0012, &BOSS_U::GetNsDataIdList2, "GetNsDataIdList2"},
{IPC::MakeHeader(0x0013, 4, 2), &BOSS_U::GetNsDataIdList3, "GetNsDataIdList3"}, {0x0013, &BOSS_U::GetNsDataIdList3, "GetNsDataIdList3"},
{IPC::MakeHeader(0x0014, 2, 2), &BOSS_U::SendProperty, "SendProperty"}, {0x0014, &BOSS_U::SendProperty, "SendProperty"},
{IPC::MakeHeader(0x0015, 1, 2), &BOSS_U::SendPropertyHandle, "SendPropertyHandle"}, {0x0015, &BOSS_U::SendPropertyHandle, "SendPropertyHandle"},
{IPC::MakeHeader(0x0016, 2, 2), &BOSS_U::ReceiveProperty, "ReceiveProperty"}, {0x0016, &BOSS_U::ReceiveProperty, "ReceiveProperty"},
{IPC::MakeHeader(0x0017, 2, 2), &BOSS_U::UpdateTaskInterval, "UpdateTaskInterval"}, {0x0017, &BOSS_U::UpdateTaskInterval, "UpdateTaskInterval"},
{IPC::MakeHeader(0x0018, 2, 2), &BOSS_U::UpdateTaskCount, "UpdateTaskCount"}, {0x0018, &BOSS_U::UpdateTaskCount, "UpdateTaskCount"},
{IPC::MakeHeader(0x0019, 1, 2), &BOSS_U::GetTaskInterval, "GetTaskInterval"}, {0x0019, &BOSS_U::GetTaskInterval, "GetTaskInterval"},
{IPC::MakeHeader(0x001A, 1, 2), &BOSS_U::GetTaskCount, "GetTaskCount"}, {0x001A, &BOSS_U::GetTaskCount, "GetTaskCount"},
{IPC::MakeHeader(0x001B, 1, 2), &BOSS_U::GetTaskServiceStatus, "GetTaskServiceStatus"}, {0x001B, &BOSS_U::GetTaskServiceStatus, "GetTaskServiceStatus"},
{IPC::MakeHeader(0x001C, 1, 2), &BOSS_U::StartTask, "StartTask"}, {0x001C, &BOSS_U::StartTask, "StartTask"},
{IPC::MakeHeader(0x001D, 1, 2), &BOSS_U::StartTaskImmediate, "StartTaskImmediate"}, {0x001D, &BOSS_U::StartTaskImmediate, "StartTaskImmediate"},
{IPC::MakeHeader(0x001E, 1, 2), &BOSS_U::CancelTask, "CancelTask"}, {0x001E, &BOSS_U::CancelTask, "CancelTask"},
{IPC::MakeHeader(0x001F, 0, 0), &BOSS_U::GetTaskFinishHandle, "GetTaskFinishHandle"}, {0x001F, &BOSS_U::GetTaskFinishHandle, "GetTaskFinishHandle"},
{IPC::MakeHeader(0x0020, 2, 2), &BOSS_U::GetTaskState, "GetTaskState"}, {0x0020, &BOSS_U::GetTaskState, "GetTaskState"},
{IPC::MakeHeader(0x0021, 1, 2), &BOSS_U::GetTaskResult, "GetTaskResult"}, {0x0021, &BOSS_U::GetTaskResult, "GetTaskResult"},
{IPC::MakeHeader(0x0022, 1, 2), &BOSS_U::GetTaskCommErrorCode, "GetTaskCommErrorCode"}, {0x0022, &BOSS_U::GetTaskCommErrorCode, "GetTaskCommErrorCode"},
{IPC::MakeHeader(0x0023, 3, 2), &BOSS_U::GetTaskStatus, "GetTaskStatus"}, {0x0023, &BOSS_U::GetTaskStatus, "GetTaskStatus"},
{IPC::MakeHeader(0x0024, 2, 2), &BOSS_U::GetTaskError, "GetTaskError"}, {0x0024, &BOSS_U::GetTaskError, "GetTaskError"},
{IPC::MakeHeader(0x0025, 2, 2), &BOSS_U::GetTaskInfo, "GetTaskInfo"}, {0x0025, &BOSS_U::GetTaskInfo, "GetTaskInfo"},
{IPC::MakeHeader(0x0026, 1, 0), &BOSS_U::DeleteNsData, "DeleteNsData"}, {0x0026, &BOSS_U::DeleteNsData, "DeleteNsData"},
{IPC::MakeHeader(0x0027, 3, 2), &BOSS_U::GetNsDataHeaderInfo, "GetNsDataHeaderInfo"}, {0x0027, &BOSS_U::GetNsDataHeaderInfo, "GetNsDataHeaderInfo"},
{IPC::MakeHeader(0x0028, 4, 2), &BOSS_U::ReadNsData, "ReadNsData"}, {0x0028, &BOSS_U::ReadNsData, "ReadNsData"},
{IPC::MakeHeader(0x0029, 2, 0), &BOSS_U::SetNsDataAdditionalInfo, "SetNsDataAdditionalInfo"}, {0x0029, &BOSS_U::SetNsDataAdditionalInfo, "SetNsDataAdditionalInfo"},
{IPC::MakeHeader(0x002A, 1, 0), &BOSS_U::GetNsDataAdditionalInfo, "GetNsDataAdditionalInfo"}, {0x002A, &BOSS_U::GetNsDataAdditionalInfo, "GetNsDataAdditionalInfo"},
{IPC::MakeHeader(0x002B, 2, 0), &BOSS_U::SetNsDataNewFlag, "SetNsDataNewFlag"}, {0x002B, &BOSS_U::SetNsDataNewFlag, "SetNsDataNewFlag"},
{IPC::MakeHeader(0x002C, 1, 0), &BOSS_U::GetNsDataNewFlag, "GetNsDataNewFlag"}, {0x002C, &BOSS_U::GetNsDataNewFlag, "GetNsDataNewFlag"},
{IPC::MakeHeader(0x002D, 1, 0), &BOSS_U::GetNsDataLastUpdate, "GetNsDataLastUpdate"}, {0x002D, &BOSS_U::GetNsDataLastUpdate, "GetNsDataLastUpdate"},
{IPC::MakeHeader(0x002E, 1, 0), &BOSS_U::GetErrorCode, "GetErrorCode"}, {0x002E, &BOSS_U::GetErrorCode, "GetErrorCode"},
{IPC::MakeHeader(0x002F, 5, 0), &BOSS_U::RegisterStorageEntry, "RegisterStorageEntry"}, {0x002F, &BOSS_U::RegisterStorageEntry, "RegisterStorageEntry"},
{IPC::MakeHeader(0x0030, 0, 0), &BOSS_U::GetStorageEntryInfo, "GetStorageEntryInfo"}, {0x0030, &BOSS_U::GetStorageEntryInfo, "GetStorageEntryInfo"},
{IPC::MakeHeader(0x0031, 4, 0), &BOSS_U::SetStorageOption, "SetStorageOption"}, {0x0031, &BOSS_U::SetStorageOption, "SetStorageOption"},
{IPC::MakeHeader(0x0032, 0, 0), &BOSS_U::GetStorageOption, "GetStorageOption"}, {0x0032, &BOSS_U::GetStorageOption, "GetStorageOption"},
{IPC::MakeHeader(0x0033, 1, 2), &BOSS_U::StartBgImmediate, "StartBgImmediate"}, {0x0033, &BOSS_U::StartBgImmediate, "StartBgImmediate"},
{IPC::MakeHeader(0x0034, 1, 2), &BOSS_U::GetTaskProperty0, "GetTaskProperty0"}, {0x0034, &BOSS_U::GetTaskProperty0, "GetTaskProperty0"},
{IPC::MakeHeader(0x0035, 3, 2), &BOSS_U::RegisterImmediateTask, "RegisterImmediateTask"}, {0x0035, &BOSS_U::RegisterImmediateTask, "RegisterImmediateTask"},
{IPC::MakeHeader(0x0036, 2, 4), &BOSS_U::SetTaskQuery, "SetTaskQuery"}, {0x0036, &BOSS_U::SetTaskQuery, "SetTaskQuery"},
{IPC::MakeHeader(0x0037, 2, 4), &BOSS_U::GetTaskQuery, "GetTaskQuery"}, {0x0037, &BOSS_U::GetTaskQuery, "GetTaskQuery"},
// clang-format on // clang-format on
}; };

View file

@ -258,7 +258,7 @@ std::shared_ptr<Module> Module::Interface::GetModule() const {
} }
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);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -292,7 +292,7 @@ void Module::Interface::StartCapture(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::StopCapture(Kernel::HLERequestContext& ctx) { void Module::Interface::StopCapture(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -317,7 +317,7 @@ void Module::Interface::StopCapture(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::IsBusy(Kernel::HLERequestContext& ctx) { void Module::Interface::IsBusy(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -340,7 +340,7 @@ void Module::Interface::IsBusy(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ClearBuffer(Kernel::HLERequestContext& ctx) { void Module::Interface::ClearBuffer(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -350,7 +350,7 @@ void Module::Interface::ClearBuffer(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetVsyncInterruptEvent(Kernel::HLERequestContext& ctx) { void Module::Interface::GetVsyncInterruptEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
@ -368,7 +368,7 @@ void Module::Interface::GetVsyncInterruptEvent(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetBufferErrorInterruptEvent(Kernel::HLERequestContext& ctx) { void Module::Interface::GetBufferErrorInterruptEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
@ -386,7 +386,7 @@ void Module::Interface::GetBufferErrorInterruptEvent(Kernel::HLERequestContext&
} }
void Module::Interface::SetReceiving(Kernel::HLERequestContext& ctx) { void Module::Interface::SetReceiving(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 4, 2); IPC::RequestParser rp(ctx);
const VAddr dest = rp.Pop<u32>(); const VAddr dest = rp.Pop<u32>();
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
const u32 image_size = rp.Pop<u32>(); const u32 image_size = rp.Pop<u32>();
@ -422,7 +422,7 @@ void Module::Interface::SetReceiving(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::IsFinishedReceiving(Kernel::HLERequestContext& ctx) { void Module::Interface::IsFinishedReceiving(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -441,7 +441,7 @@ void Module::Interface::IsFinishedReceiving(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetTransferLines(Kernel::HLERequestContext& ctx) { void Module::Interface::SetTransferLines(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 4, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
const u16 transfer_lines = rp.Pop<u16>(); const u16 transfer_lines = rp.Pop<u16>();
const u16 width = rp.Pop<u16>(); const u16 width = rp.Pop<u16>();
@ -463,7 +463,7 @@ void Module::Interface::SetTransferLines(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetMaxLines(Kernel::HLERequestContext& ctx) { void Module::Interface::GetMaxLines(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0A, 2, 0); IPC::RequestParser rp(ctx);
const u16 width = rp.Pop<u16>(); const u16 width = rp.Pop<u16>();
const u16 height = rp.Pop<u16>(); const u16 height = rp.Pop<u16>();
@ -496,7 +496,7 @@ void Module::Interface::GetMaxLines(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetTransferBytes(Kernel::HLERequestContext& ctx) { void Module::Interface::SetTransferBytes(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0B, 4, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
const u16 transfer_bytes = rp.Pop<u16>(); const u16 transfer_bytes = rp.Pop<u16>();
const u16 width = rp.Pop<u16>(); const u16 width = rp.Pop<u16>();
@ -518,7 +518,7 @@ void Module::Interface::SetTransferBytes(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTransferBytes(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTransferBytes(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0C, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -536,7 +536,7 @@ void Module::Interface::GetTransferBytes(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetMaxBytes(Kernel::HLERequestContext& ctx) { void Module::Interface::GetMaxBytes(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 2, 0); IPC::RequestParser rp(ctx);
const u16 width = rp.Pop<u16>(); const u16 width = rp.Pop<u16>();
const u16 height = rp.Pop<u16>(); const u16 height = rp.Pop<u16>();
@ -563,7 +563,7 @@ void Module::Interface::GetMaxBytes(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetTrimming(Kernel::HLERequestContext& ctx) { void Module::Interface::SetTrimming(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0E, 2, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
const bool trim = rp.Pop<bool>(); const bool trim = rp.Pop<bool>();
@ -582,7 +582,7 @@ void Module::Interface::SetTrimming(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::IsTrimming(Kernel::HLERequestContext& ctx) { void Module::Interface::IsTrimming(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -600,7 +600,7 @@ void Module::Interface::IsTrimming(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetTrimmingParams(Kernel::HLERequestContext& ctx) { void Module::Interface::SetTrimmingParams(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 5, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
const u16 x0 = rp.Pop<u16>(); const u16 x0 = rp.Pop<u16>();
const u16 y0 = rp.Pop<u16>(); const u16 y0 = rp.Pop<u16>();
@ -626,7 +626,7 @@ void Module::Interface::SetTrimmingParams(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTrimmingParams(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTrimmingParams(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 1, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0); IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
@ -647,7 +647,7 @@ void Module::Interface::GetTrimmingParams(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetTrimmingParamsCenter(Kernel::HLERequestContext& ctx) { void Module::Interface::SetTrimmingParamsCenter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 5, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
const u16 trim_w = rp.Pop<u16>(); const u16 trim_w = rp.Pop<u16>();
const u16 trim_h = rp.Pop<u16>(); const u16 trim_h = rp.Pop<u16>();
@ -673,7 +673,7 @@ void Module::Interface::SetTrimmingParamsCenter(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::Activate(Kernel::HLERequestContext& ctx) { void Module::Interface::Activate(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 1, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -713,7 +713,7 @@ void Module::Interface::Activate(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SwitchContext(Kernel::HLERequestContext& ctx) { void Module::Interface::SwitchContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 2, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
const ContextSet context_select(rp.Pop<u8>()); const ContextSet context_select(rp.Pop<u8>());
@ -740,7 +740,7 @@ void Module::Interface::SwitchContext(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::FlipImage(Kernel::HLERequestContext& ctx) { void Module::Interface::FlipImage(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1D, 3, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
const Flip flip = static_cast<Flip>(rp.Pop<u8>()); const Flip flip = static_cast<Flip>(rp.Pop<u8>());
const ContextSet context_select(rp.Pop<u8>()); const ContextSet context_select(rp.Pop<u8>());
@ -767,7 +767,7 @@ void Module::Interface::FlipImage(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetDetailSize(Kernel::HLERequestContext& ctx) { void Module::Interface::SetDetailSize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1E, 8, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
Resolution resolution; Resolution resolution;
resolution.width = rp.Pop<u16>(); resolution.width = rp.Pop<u16>();
@ -803,7 +803,7 @@ void Module::Interface::SetDetailSize(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetSize(Kernel::HLERequestContext& ctx) { void Module::Interface::SetSize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1F, 3, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
const u8 size = rp.Pop<u8>(); const u8 size = rp.Pop<u8>();
const ContextSet context_select(rp.Pop<u8>()); const ContextSet context_select(rp.Pop<u8>());
@ -830,7 +830,7 @@ void Module::Interface::SetSize(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetFrameRate(Kernel::HLERequestContext& ctx) { void Module::Interface::SetFrameRate(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x20, 2, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
const FrameRate frame_rate = static_cast<FrameRate>(rp.Pop<u8>()); const FrameRate frame_rate = static_cast<FrameRate>(rp.Pop<u8>());
@ -851,7 +851,7 @@ void Module::Interface::SetFrameRate(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetEffect(Kernel::HLERequestContext& ctx) { void Module::Interface::SetEffect(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x22, 3, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
const Effect effect = static_cast<Effect>(rp.Pop<u8>()); const Effect effect = static_cast<Effect>(rp.Pop<u8>());
const ContextSet context_select(rp.Pop<u8>()); const ContextSet context_select(rp.Pop<u8>());
@ -878,7 +878,7 @@ void Module::Interface::SetEffect(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetOutputFormat(Kernel::HLERequestContext& ctx) { void Module::Interface::SetOutputFormat(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x25, 3, 0); IPC::RequestParser rp(ctx);
const CameraSet camera_select(rp.Pop<u8>()); const CameraSet camera_select(rp.Pop<u8>());
const OutputFormat format = static_cast<OutputFormat>(rp.Pop<u8>()); const OutputFormat format = static_cast<OutputFormat>(rp.Pop<u8>());
const ContextSet context_select(rp.Pop<u8>()); const ContextSet context_select(rp.Pop<u8>());
@ -905,7 +905,7 @@ void Module::Interface::SetOutputFormat(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SynchronizeVsyncTiming(Kernel::HLERequestContext& ctx) { void Module::Interface::SynchronizeVsyncTiming(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x29, 2, 0); IPC::RequestParser rp(ctx);
const u8 camera_select1 = rp.Pop<u8>(); const u8 camera_select1 = rp.Pop<u8>();
const u8 camera_select2 = rp.Pop<u8>(); const u8 camera_select2 = rp.Pop<u8>();
@ -917,7 +917,7 @@ void Module::Interface::SynchronizeVsyncTiming(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetLatestVsyncTiming(Kernel::HLERequestContext& ctx) { void Module::Interface::GetLatestVsyncTiming(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2A, 2, 0); IPC::RequestParser rp(ctx);
const PortSet port_select(rp.Pop<u8>()); const PortSet port_select(rp.Pop<u8>());
const u32 count = rp.Pop<u32>(); const u32 count = rp.Pop<u32>();
@ -945,7 +945,8 @@ void Module::Interface::GetLatestVsyncTiming(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetStereoCameraCalibrationData(Kernel::HLERequestContext& ctx) { void Module::Interface::GetStereoCameraCalibrationData(Kernel::HLERequestContext& ctx) {
IPC::RequestBuilder rb = IPC::RequestParser(ctx, 0x2B, 0, 0).MakeBuilder(17, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(17, 0);
// Default values taken from yuriks' 3DS. Valid data is required here or games using the // Default values taken from yuriks' 3DS. Valid data is required here or games using the
// calibration get stuck in an infinite CPU loop. // calibration get stuck in an infinite CPU loop.
@ -971,7 +972,7 @@ void Module::Interface::GetStereoCameraCalibrationData(Kernel::HLERequestContext
} }
void Module::Interface::SetPackageParameterWithoutContext(Kernel::HLERequestContext& ctx) { void Module::Interface::SetPackageParameterWithoutContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x33, 11, 0); IPC::RequestParser rp(ctx);
PackageParameterWithoutContext package; PackageParameterWithoutContext package;
rp.PopRaw(package); rp.PopRaw(package);
@ -1015,7 +1016,7 @@ Resolution PackageParameterWithContext::GetResolution() const {
} }
void Module::Interface::SetPackageParameterWithContext(Kernel::HLERequestContext& ctx) { void Module::Interface::SetPackageParameterWithContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x34, 5, 0); IPC::RequestParser rp(ctx);
PackageParameterWithContext package; PackageParameterWithContext package;
rp.PopRaw(package); rp.PopRaw(package);
@ -1028,7 +1029,7 @@ void Module::Interface::SetPackageParameterWithContext(Kernel::HLERequestContext
} }
void Module::Interface::SetPackageParameterWithContextDetail(Kernel::HLERequestContext& ctx) { void Module::Interface::SetPackageParameterWithContextDetail(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x35, 7, 0); IPC::RequestParser rp(ctx);
PackageParameterWithContextDetail package; PackageParameterWithContextDetail package;
rp.PopRaw(package); rp.PopRaw(package);
@ -1041,7 +1042,7 @@ void Module::Interface::SetPackageParameterWithContextDetail(Kernel::HLERequestC
} }
void Module::Interface::GetSuitableY2rStandardCoefficient(Kernel::HLERequestContext& ctx) { void Module::Interface::GetSuitableY2rStandardCoefficient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x36, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push<u32>(0); rb.Push<u32>(0);
@ -1050,7 +1051,7 @@ void Module::Interface::GetSuitableY2rStandardCoefficient(Kernel::HLERequestCont
} }
void Module::Interface::PlayShutterSound(Kernel::HLERequestContext& ctx) { void Module::Interface::PlayShutterSound(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x38, 1, 0); IPC::RequestParser rp(ctx);
u8 sound_id = rp.Pop<u8>(); u8 sound_id = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -1060,7 +1061,7 @@ void Module::Interface::PlayShutterSound(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DriverInitialize(Kernel::HLERequestContext& ctx) { void Module::Interface::DriverInitialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x39, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
for (int camera_id = 0; camera_id < NumCameras; ++camera_id) { for (int camera_id = 0; camera_id < NumCameras; ++camera_id) {
@ -1090,7 +1091,7 @@ void Module::Interface::DriverInitialize(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DriverFinalize(Kernel::HLERequestContext& ctx) { void Module::Interface::DriverFinalize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3A, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
cam->CancelReceiving(0); cam->CancelReceiving(0);

View file

@ -11,68 +11,68 @@ namespace Service::CAM {
CAM_C::CAM_C(std::shared_ptr<Module> cam) : Module::Interface(std::move(cam), "cam:c", 1) { CAM_C::CAM_C(std::shared_ptr<Module> cam) : Module::Interface(std::move(cam), "cam:c", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &CAM_C::StartCapture, "StartCapture"}, {0x0001, &CAM_C::StartCapture, "StartCapture"},
{IPC::MakeHeader(0x0002, 1, 0), &CAM_C::StopCapture, "StopCapture"}, {0x0002, &CAM_C::StopCapture, "StopCapture"},
{IPC::MakeHeader(0x0003, 1, 0), &CAM_C::IsBusy, "IsBusy"}, {0x0003, &CAM_C::IsBusy, "IsBusy"},
{IPC::MakeHeader(0x0004, 1, 0), &CAM_C::ClearBuffer, "ClearBuffer"}, {0x0004, &CAM_C::ClearBuffer, "ClearBuffer"},
{IPC::MakeHeader(0x0005, 1, 0), &CAM_C::GetVsyncInterruptEvent, "GetVsyncInterruptEvent"}, {0x0005, &CAM_C::GetVsyncInterruptEvent, "GetVsyncInterruptEvent"},
{IPC::MakeHeader(0x0006, 1, 0), &CAM_C::GetBufferErrorInterruptEvent, "GetBufferErrorInterruptEvent"}, {0x0006, &CAM_C::GetBufferErrorInterruptEvent, "GetBufferErrorInterruptEvent"},
{IPC::MakeHeader(0x0007, 4, 2), &CAM_C::SetReceiving, "SetReceiving"}, {0x0007, &CAM_C::SetReceiving, "SetReceiving"},
{IPC::MakeHeader(0x0008, 1, 0), &CAM_C::IsFinishedReceiving, "IsFinishedReceiving"}, {0x0008, &CAM_C::IsFinishedReceiving, "IsFinishedReceiving"},
{IPC::MakeHeader(0x0009, 4, 0), &CAM_C::SetTransferLines, "SetTransferLines"}, {0x0009, &CAM_C::SetTransferLines, "SetTransferLines"},
{IPC::MakeHeader(0x000A, 2, 0), &CAM_C::GetMaxLines, "GetMaxLines"}, {0x000A, &CAM_C::GetMaxLines, "GetMaxLines"},
{IPC::MakeHeader(0x000B, 4, 0), &CAM_C::SetTransferBytes, "SetTransferBytes"}, {0x000B, &CAM_C::SetTransferBytes, "SetTransferBytes"},
{IPC::MakeHeader(0x000C, 1, 0), &CAM_C::GetTransferBytes, "GetTransferBytes"}, {0x000C, &CAM_C::GetTransferBytes, "GetTransferBytes"},
{IPC::MakeHeader(0x000D, 2, 0), &CAM_C::GetMaxBytes, "GetMaxBytes"}, {0x000D, &CAM_C::GetMaxBytes, "GetMaxBytes"},
{IPC::MakeHeader(0x000E, 2, 0), &CAM_C::SetTrimming, "SetTrimming"}, {0x000E, &CAM_C::SetTrimming, "SetTrimming"},
{IPC::MakeHeader(0x000F, 1, 0), &CAM_C::IsTrimming, "IsTrimming"}, {0x000F, &CAM_C::IsTrimming, "IsTrimming"},
{IPC::MakeHeader(0x0010, 5, 0), &CAM_C::SetTrimmingParams, "SetTrimmingParams"}, {0x0010, &CAM_C::SetTrimmingParams, "SetTrimmingParams"},
{IPC::MakeHeader(0x0011, 1, 0), &CAM_C::GetTrimmingParams, "GetTrimmingParams"}, {0x0011, &CAM_C::GetTrimmingParams, "GetTrimmingParams"},
{IPC::MakeHeader(0x0012, 5, 0), &CAM_C::SetTrimmingParamsCenter, "SetTrimmingParamsCenter"}, {0x0012, &CAM_C::SetTrimmingParamsCenter, "SetTrimmingParamsCenter"},
{IPC::MakeHeader(0x0013, 1, 0), &CAM_C::Activate, "Activate"}, {0x0013, &CAM_C::Activate, "Activate"},
{IPC::MakeHeader(0x0014, 2, 0), &CAM_C::SwitchContext, "SwitchContext"}, {0x0014, &CAM_C::SwitchContext, "SwitchContext"},
{IPC::MakeHeader(0x0015, 2, 0), nullptr, "SetExposure"}, {0x0015, nullptr, "SetExposure"},
{IPC::MakeHeader(0x0016, 2, 0), nullptr, "SetWhiteBalance"}, {0x0016, nullptr, "SetWhiteBalance"},
{IPC::MakeHeader(0x0017, 2, 0), nullptr, "SetWhiteBalanceWithoutBaseUp"}, {0x0017, nullptr, "SetWhiteBalanceWithoutBaseUp"},
{IPC::MakeHeader(0x0018, 2, 0), nullptr, "SetSharpness"}, {0x0018, nullptr, "SetSharpness"},
{IPC::MakeHeader(0x0019, 2, 0), nullptr, "SetAutoExposure"}, {0x0019, nullptr, "SetAutoExposure"},
{IPC::MakeHeader(0x001A, 1, 0), nullptr, "IsAutoExposure"}, {0x001A, nullptr, "IsAutoExposure"},
{IPC::MakeHeader(0x001B, 2, 0), nullptr, "SetAutoWhiteBalance"}, {0x001B, nullptr, "SetAutoWhiteBalance"},
{IPC::MakeHeader(0x001C, 1, 0), nullptr, "IsAutoWhiteBalance"}, {0x001C, nullptr, "IsAutoWhiteBalance"},
{IPC::MakeHeader(0x001D, 3, 0), &CAM_C::FlipImage, "FlipImage"}, {0x001D, &CAM_C::FlipImage, "FlipImage"},
{IPC::MakeHeader(0x001E, 8, 0), &CAM_C::SetDetailSize, "SetDetailSize"}, {0x001E, &CAM_C::SetDetailSize, "SetDetailSize"},
{IPC::MakeHeader(0x001F, 3, 0), &CAM_C::SetSize, "SetSize"}, {0x001F, &CAM_C::SetSize, "SetSize"},
{IPC::MakeHeader(0x0020, 2, 0), &CAM_C::SetFrameRate, "SetFrameRate"}, {0x0020, &CAM_C::SetFrameRate, "SetFrameRate"},
{IPC::MakeHeader(0x0021, 2, 0), nullptr, "SetPhotoMode"}, {0x0021, nullptr, "SetPhotoMode"},
{IPC::MakeHeader(0x0022, 3, 0), &CAM_C::SetEffect, "SetEffect"}, {0x0022, &CAM_C::SetEffect, "SetEffect"},
{IPC::MakeHeader(0x0023, 2, 0), nullptr, "SetContrast"}, {0x0023, nullptr, "SetContrast"},
{IPC::MakeHeader(0x0024, 2, 0), nullptr, "SetLensCorrection"}, {0x0024, nullptr, "SetLensCorrection"},
{IPC::MakeHeader(0x0025, 3, 0), &CAM_C::SetOutputFormat, "SetOutputFormat"}, {0x0025, &CAM_C::SetOutputFormat, "SetOutputFormat"},
{IPC::MakeHeader(0x0026, 5, 0), nullptr, "SetAutoExposureWindow"}, {0x0026, nullptr, "SetAutoExposureWindow"},
{IPC::MakeHeader(0x0027, 5, 0), nullptr, "SetAutoWhiteBalanceWindow"}, {0x0027, nullptr, "SetAutoWhiteBalanceWindow"},
{IPC::MakeHeader(0x0028, 2, 0), nullptr, "SetNoiseFilter"}, {0x0028, nullptr, "SetNoiseFilter"},
{IPC::MakeHeader(0x0029, 2, 0), &CAM_C::SynchronizeVsyncTiming, "SynchronizeVsyncTiming"}, {0x0029, &CAM_C::SynchronizeVsyncTiming, "SynchronizeVsyncTiming"},
{IPC::MakeHeader(0x002A, 2, 0), &CAM_C::GetLatestVsyncTiming, "GetLatestVsyncTiming"}, {0x002A, &CAM_C::GetLatestVsyncTiming, "GetLatestVsyncTiming"},
{IPC::MakeHeader(0x002B, 0, 0), &CAM_C::GetStereoCameraCalibrationData, "GetStereoCameraCalibrationData"}, {0x002B, &CAM_C::GetStereoCameraCalibrationData, "GetStereoCameraCalibrationData"},
{IPC::MakeHeader(0x002C, 16, 0), nullptr, "SetStereoCameraCalibrationData"}, {0x002C, nullptr, "SetStereoCameraCalibrationData"},
{IPC::MakeHeader(0x002D, 3, 0), nullptr, "WriteRegisterI2c"}, {0x002D, nullptr, "WriteRegisterI2c"},
{IPC::MakeHeader(0x002E, 3, 0), nullptr, "WriteMcuVariableI2c"}, {0x002E, nullptr, "WriteMcuVariableI2c"},
{IPC::MakeHeader(0x002F, 2, 0), nullptr, "ReadRegisterI2cExclusive"}, {0x002F, nullptr, "ReadRegisterI2cExclusive"},
{IPC::MakeHeader(0x0030, 2, 0), nullptr, "ReadMcuVariableI2cExclusive"}, {0x0030, nullptr, "ReadMcuVariableI2cExclusive"},
{IPC::MakeHeader(0x0031, 6, 0), nullptr, "SetImageQualityCalibrationData"}, {0x0031, nullptr, "SetImageQualityCalibrationData"},
{IPC::MakeHeader(0x0032, 0, 0), nullptr, "GetImageQualityCalibrationData"}, {0x0032, nullptr, "GetImageQualityCalibrationData"},
{IPC::MakeHeader(0x0033, 11, 0), &CAM_C::SetPackageParameterWithoutContext, "SetPackageParameterWithoutContext"}, {0x0033, &CAM_C::SetPackageParameterWithoutContext, "SetPackageParameterWithoutContext"},
{IPC::MakeHeader(0x0034, 5, 0), &CAM_C::SetPackageParameterWithContext, "SetPackageParameterWithContext"}, {0x0034, &CAM_C::SetPackageParameterWithContext, "SetPackageParameterWithContext"},
{IPC::MakeHeader(0x0035, 7, 0), &CAM_C::SetPackageParameterWithContextDetail, "SetPackageParameterWithContextDetail"}, {0x0035, &CAM_C::SetPackageParameterWithContextDetail, "SetPackageParameterWithContextDetail"},
{IPC::MakeHeader(0x0036, 0, 0), &CAM_C::GetSuitableY2rStandardCoefficient, "GetSuitableY2rStandardCoefficient"}, {0x0036, &CAM_C::GetSuitableY2rStandardCoefficient, "GetSuitableY2rStandardCoefficient"},
{IPC::MakeHeader(0x0037, 8, 2), nullptr, "PlayShutterSoundWithWave"}, {0x0037, nullptr, "PlayShutterSoundWithWave"},
{IPC::MakeHeader(0x0038, 1, 0), &CAM_C::PlayShutterSound, "PlayShutterSound"}, {0x0038, &CAM_C::PlayShutterSound, "PlayShutterSound"},
{IPC::MakeHeader(0x0039, 0, 0), &CAM_C::DriverInitialize, "DriverInitialize"}, {0x0039, &CAM_C::DriverInitialize, "DriverInitialize"},
{IPC::MakeHeader(0x003A, 0, 0), &CAM_C::DriverFinalize, "DriverFinalize"}, {0x003A, &CAM_C::DriverFinalize, "DriverFinalize"},
{IPC::MakeHeader(0x003B, 0, 0), nullptr, "GetActivatedCamera"}, {0x003B, nullptr, "GetActivatedCamera"},
{IPC::MakeHeader(0x003C, 0, 0), nullptr, "GetSleepCamera"}, {0x003C, nullptr, "GetSleepCamera"},
{IPC::MakeHeader(0x003D, 1, 0), nullptr, "SetSleepCamera"}, {0x003D, nullptr, "SetSleepCamera"},
{IPC::MakeHeader(0x003E, 1, 0), nullptr, "SetBrightnessSynchronization"}, {0x003E, nullptr, "SetBrightnessSynchronization"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -11,68 +11,68 @@ namespace Service::CAM {
CAM_S::CAM_S(std::shared_ptr<Module> cam) : Module::Interface(std::move(cam), "cam:s", 1) { CAM_S::CAM_S(std::shared_ptr<Module> cam) : Module::Interface(std::move(cam), "cam:s", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &CAM_S::StartCapture, "StartCapture"}, {0x0001, &CAM_S::StartCapture, "StartCapture"},
{IPC::MakeHeader(0x0002, 1, 0), &CAM_S::StopCapture, "StopCapture"}, {0x0002, &CAM_S::StopCapture, "StopCapture"},
{IPC::MakeHeader(0x0003, 1, 0), &CAM_S::IsBusy, "IsBusy"}, {0x0003, &CAM_S::IsBusy, "IsBusy"},
{IPC::MakeHeader(0x0004, 1, 0), &CAM_S::ClearBuffer, "ClearBuffer"}, {0x0004, &CAM_S::ClearBuffer, "ClearBuffer"},
{IPC::MakeHeader(0x0005, 1, 0), &CAM_S::GetVsyncInterruptEvent, "GetVsyncInterruptEvent"}, {0x0005, &CAM_S::GetVsyncInterruptEvent, "GetVsyncInterruptEvent"},
{IPC::MakeHeader(0x0006, 1, 0), &CAM_S::GetBufferErrorInterruptEvent, "GetBufferErrorInterruptEvent"}, {0x0006, &CAM_S::GetBufferErrorInterruptEvent, "GetBufferErrorInterruptEvent"},
{IPC::MakeHeader(0x0007, 4, 2), &CAM_S::SetReceiving, "SetReceiving"}, {0x0007, &CAM_S::SetReceiving, "SetReceiving"},
{IPC::MakeHeader(0x0008, 1, 0), &CAM_S::IsFinishedReceiving, "IsFinishedReceiving"}, {0x0008, &CAM_S::IsFinishedReceiving, "IsFinishedReceiving"},
{IPC::MakeHeader(0x0009, 4, 0), &CAM_S::SetTransferLines, "SetTransferLines"}, {0x0009, &CAM_S::SetTransferLines, "SetTransferLines"},
{IPC::MakeHeader(0x000A, 2, 0), &CAM_S::GetMaxLines, "GetMaxLines"}, {0x000A, &CAM_S::GetMaxLines, "GetMaxLines"},
{IPC::MakeHeader(0x000B, 4, 0), &CAM_S::SetTransferBytes, "SetTransferBytes"}, {0x000B, &CAM_S::SetTransferBytes, "SetTransferBytes"},
{IPC::MakeHeader(0x000C, 1, 0), &CAM_S::GetTransferBytes, "GetTransferBytes"}, {0x000C, &CAM_S::GetTransferBytes, "GetTransferBytes"},
{IPC::MakeHeader(0x000D, 2, 0), &CAM_S::GetMaxBytes, "GetMaxBytes"}, {0x000D, &CAM_S::GetMaxBytes, "GetMaxBytes"},
{IPC::MakeHeader(0x000E, 2, 0), &CAM_S::SetTrimming, "SetTrimming"}, {0x000E, &CAM_S::SetTrimming, "SetTrimming"},
{IPC::MakeHeader(0x000F, 1, 0), &CAM_S::IsTrimming, "IsTrimming"}, {0x000F, &CAM_S::IsTrimming, "IsTrimming"},
{IPC::MakeHeader(0x0010, 5, 0), &CAM_S::SetTrimmingParams, "SetTrimmingParams"}, {0x0010, &CAM_S::SetTrimmingParams, "SetTrimmingParams"},
{IPC::MakeHeader(0x0011, 1, 0), &CAM_S::GetTrimmingParams, "GetTrimmingParams"}, {0x0011, &CAM_S::GetTrimmingParams, "GetTrimmingParams"},
{IPC::MakeHeader(0x0012, 5, 0), &CAM_S::SetTrimmingParamsCenter, "SetTrimmingParamsCenter"}, {0x0012, &CAM_S::SetTrimmingParamsCenter, "SetTrimmingParamsCenter"},
{IPC::MakeHeader(0x0013, 1, 0), &CAM_S::Activate, "Activate"}, {0x0013, &CAM_S::Activate, "Activate"},
{IPC::MakeHeader(0x0014, 2, 0), &CAM_S::SwitchContext, "SwitchContext"}, {0x0014, &CAM_S::SwitchContext, "SwitchContext"},
{IPC::MakeHeader(0x0015, 2, 0), nullptr, "SetExposure"}, {0x0015, nullptr, "SetExposure"},
{IPC::MakeHeader(0x0016, 2, 0), nullptr, "SetWhiteBalance"}, {0x0016, nullptr, "SetWhiteBalance"},
{IPC::MakeHeader(0x0017, 2, 0), nullptr, "SetWhiteBalanceWithoutBaseUp"}, {0x0017, nullptr, "SetWhiteBalanceWithoutBaseUp"},
{IPC::MakeHeader(0x0018, 2, 0), nullptr, "SetSharpness"}, {0x0018, nullptr, "SetSharpness"},
{IPC::MakeHeader(0x0019, 2, 0), nullptr, "SetAutoExposure"}, {0x0019, nullptr, "SetAutoExposure"},
{IPC::MakeHeader(0x001A, 1, 0), nullptr, "IsAutoExposure"}, {0x001A, nullptr, "IsAutoExposure"},
{IPC::MakeHeader(0x001B, 2, 0), nullptr, "SetAutoWhiteBalance"}, {0x001B, nullptr, "SetAutoWhiteBalance"},
{IPC::MakeHeader(0x001C, 1, 0), nullptr, "IsAutoWhiteBalance"}, {0x001C, nullptr, "IsAutoWhiteBalance"},
{IPC::MakeHeader(0x001D, 3, 0), &CAM_S::FlipImage, "FlipImage"}, {0x001D, &CAM_S::FlipImage, "FlipImage"},
{IPC::MakeHeader(0x001E, 8, 0), &CAM_S::SetDetailSize, "SetDetailSize"}, {0x001E, &CAM_S::SetDetailSize, "SetDetailSize"},
{IPC::MakeHeader(0x001F, 3, 0), &CAM_S::SetSize, "SetSize"}, {0x001F, &CAM_S::SetSize, "SetSize"},
{IPC::MakeHeader(0x0020, 2, 0), &CAM_S::SetFrameRate, "SetFrameRate"}, {0x0020, &CAM_S::SetFrameRate, "SetFrameRate"},
{IPC::MakeHeader(0x0021, 2, 0), nullptr, "SetPhotoMode"}, {0x0021, nullptr, "SetPhotoMode"},
{IPC::MakeHeader(0x0022, 3, 0), &CAM_S::SetEffect, "SetEffect"}, {0x0022, &CAM_S::SetEffect, "SetEffect"},
{IPC::MakeHeader(0x0023, 2, 0), nullptr, "SetContrast"}, {0x0023, nullptr, "SetContrast"},
{IPC::MakeHeader(0x0024, 2, 0), nullptr, "SetLensCorrection"}, {0x0024, nullptr, "SetLensCorrection"},
{IPC::MakeHeader(0x0025, 3, 0), &CAM_S::SetOutputFormat, "SetOutputFormat"}, {0x0025, &CAM_S::SetOutputFormat, "SetOutputFormat"},
{IPC::MakeHeader(0x0026, 5, 0), nullptr, "SetAutoExposureWindow"}, {0x0026, nullptr, "SetAutoExposureWindow"},
{IPC::MakeHeader(0x0027, 5, 0), nullptr, "SetAutoWhiteBalanceWindow"}, {0x0027, nullptr, "SetAutoWhiteBalanceWindow"},
{IPC::MakeHeader(0x0028, 2, 0), nullptr, "SetNoiseFilter"}, {0x0028, nullptr, "SetNoiseFilter"},
{IPC::MakeHeader(0x0029, 2, 0), &CAM_S::SynchronizeVsyncTiming, "SynchronizeVsyncTiming"}, {0x0029, &CAM_S::SynchronizeVsyncTiming, "SynchronizeVsyncTiming"},
{IPC::MakeHeader(0x002A, 2, 0), &CAM_S::GetLatestVsyncTiming, "GetLatestVsyncTiming"}, {0x002A, &CAM_S::GetLatestVsyncTiming, "GetLatestVsyncTiming"},
{IPC::MakeHeader(0x002B, 0, 0), &CAM_S::GetStereoCameraCalibrationData, "GetStereoCameraCalibrationData"}, {0x002B, &CAM_S::GetStereoCameraCalibrationData, "GetStereoCameraCalibrationData"},
{IPC::MakeHeader(0x002C, 16, 0), nullptr, "SetStereoCameraCalibrationData"}, {0x002C, nullptr, "SetStereoCameraCalibrationData"},
{IPC::MakeHeader(0x002D, 3, 0), nullptr, "WriteRegisterI2c"}, {0x002D, nullptr, "WriteRegisterI2c"},
{IPC::MakeHeader(0x002E, 3, 0), nullptr, "WriteMcuVariableI2c"}, {0x002E, nullptr, "WriteMcuVariableI2c"},
{IPC::MakeHeader(0x002F, 2, 0), nullptr, "ReadRegisterI2cExclusive"}, {0x002F, nullptr, "ReadRegisterI2cExclusive"},
{IPC::MakeHeader(0x0030, 2, 0), nullptr, "ReadMcuVariableI2cExclusive"}, {0x0030, nullptr, "ReadMcuVariableI2cExclusive"},
{IPC::MakeHeader(0x0031, 6, 0), nullptr, "SetImageQualityCalibrationData"}, {0x0031, nullptr, "SetImageQualityCalibrationData"},
{IPC::MakeHeader(0x0032, 0, 0), nullptr, "GetImageQualityCalibrationData"}, {0x0032, nullptr, "GetImageQualityCalibrationData"},
{IPC::MakeHeader(0x0033, 11, 0), &CAM_S::SetPackageParameterWithoutContext, "SetPackageParameterWithoutContext"}, {0x0033, &CAM_S::SetPackageParameterWithoutContext, "SetPackageParameterWithoutContext"},
{IPC::MakeHeader(0x0034, 5, 0), &CAM_S::SetPackageParameterWithContext, "SetPackageParameterWithContext"}, {0x0034, &CAM_S::SetPackageParameterWithContext, "SetPackageParameterWithContext"},
{IPC::MakeHeader(0x0035, 7, 0), &CAM_S::SetPackageParameterWithContextDetail, "SetPackageParameterWithContextDetail"}, {0x0035, &CAM_S::SetPackageParameterWithContextDetail, "SetPackageParameterWithContextDetail"},
{IPC::MakeHeader(0x0036, 0, 0), &CAM_S::GetSuitableY2rStandardCoefficient, "GetSuitableY2rStandardCoefficient"}, {0x0036, &CAM_S::GetSuitableY2rStandardCoefficient, "GetSuitableY2rStandardCoefficient"},
{IPC::MakeHeader(0x0037, 8, 2), nullptr, "PlayShutterSoundWithWave"}, {0x0037, nullptr, "PlayShutterSoundWithWave"},
{IPC::MakeHeader(0x0038, 1, 0), &CAM_S::PlayShutterSound, "PlayShutterSound"}, {0x0038, &CAM_S::PlayShutterSound, "PlayShutterSound"},
{IPC::MakeHeader(0x0039, 0, 0), &CAM_S::DriverInitialize, "DriverInitialize"}, {0x0039, &CAM_S::DriverInitialize, "DriverInitialize"},
{IPC::MakeHeader(0x003A, 0, 0), &CAM_S::DriverFinalize, "DriverFinalize"}, {0x003A, &CAM_S::DriverFinalize, "DriverFinalize"},
{IPC::MakeHeader(0x003B, 0, 0), nullptr, "GetActivatedCamera"}, {0x003B, nullptr, "GetActivatedCamera"},
{IPC::MakeHeader(0x003C, 0, 0), nullptr, "GetSleepCamera"}, {0x003C, nullptr, "GetSleepCamera"},
{IPC::MakeHeader(0x003D, 1, 0), nullptr, "SetSleepCamera"}, {0x003D, nullptr, "SetSleepCamera"},
{IPC::MakeHeader(0x003E, 1, 0), nullptr, "SetBrightnessSynchronization"}, {0x003E, nullptr, "SetBrightnessSynchronization"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -11,68 +11,68 @@ namespace Service::CAM {
CAM_U::CAM_U(std::shared_ptr<Module> cam) : Module::Interface(std::move(cam), "cam:u", 1) { CAM_U::CAM_U(std::shared_ptr<Module> cam) : Module::Interface(std::move(cam), "cam:u", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &CAM_U::StartCapture, "StartCapture"}, {0x0001, &CAM_U::StartCapture, "StartCapture"},
{IPC::MakeHeader(0x0002, 1, 0), &CAM_U::StopCapture, "StopCapture"}, {0x0002, &CAM_U::StopCapture, "StopCapture"},
{IPC::MakeHeader(0x0003, 1, 0), &CAM_U::IsBusy, "IsBusy"}, {0x0003, &CAM_U::IsBusy, "IsBusy"},
{IPC::MakeHeader(0x0004, 1, 0), &CAM_U::ClearBuffer, "ClearBuffer"}, {0x0004, &CAM_U::ClearBuffer, "ClearBuffer"},
{IPC::MakeHeader(0x0005, 1, 0), &CAM_U::GetVsyncInterruptEvent, "GetVsyncInterruptEvent"}, {0x0005, &CAM_U::GetVsyncInterruptEvent, "GetVsyncInterruptEvent"},
{IPC::MakeHeader(0x0006, 1, 0), &CAM_U::GetBufferErrorInterruptEvent, "GetBufferErrorInterruptEvent"}, {0x0006, &CAM_U::GetBufferErrorInterruptEvent, "GetBufferErrorInterruptEvent"},
{IPC::MakeHeader(0x0007, 4, 2), &CAM_U::SetReceiving, "SetReceiving"}, {0x0007, &CAM_U::SetReceiving, "SetReceiving"},
{IPC::MakeHeader(0x0008, 1, 0), &CAM_U::IsFinishedReceiving, "IsFinishedReceiving"}, {0x0008, &CAM_U::IsFinishedReceiving, "IsFinishedReceiving"},
{IPC::MakeHeader(0x0009, 4, 0), &CAM_U::SetTransferLines, "SetTransferLines"}, {0x0009, &CAM_U::SetTransferLines, "SetTransferLines"},
{IPC::MakeHeader(0x000A, 2, 0), &CAM_U::GetMaxLines, "GetMaxLines"}, {0x000A, &CAM_U::GetMaxLines, "GetMaxLines"},
{IPC::MakeHeader(0x000B, 4, 0), &CAM_U::SetTransferBytes, "SetTransferBytes"}, {0x000B, &CAM_U::SetTransferBytes, "SetTransferBytes"},
{IPC::MakeHeader(0x000C, 1, 0), &CAM_U::GetTransferBytes, "GetTransferBytes"}, {0x000C, &CAM_U::GetTransferBytes, "GetTransferBytes"},
{IPC::MakeHeader(0x000D, 2, 0), &CAM_U::GetMaxBytes, "GetMaxBytes"}, {0x000D, &CAM_U::GetMaxBytes, "GetMaxBytes"},
{IPC::MakeHeader(0x000E, 2, 0), &CAM_U::SetTrimming, "SetTrimming"}, {0x000E, &CAM_U::SetTrimming, "SetTrimming"},
{IPC::MakeHeader(0x000F, 1, 0), &CAM_U::IsTrimming, "IsTrimming"}, {0x000F, &CAM_U::IsTrimming, "IsTrimming"},
{IPC::MakeHeader(0x0010, 5, 0), &CAM_U::SetTrimmingParams, "SetTrimmingParams"}, {0x0010, &CAM_U::SetTrimmingParams, "SetTrimmingParams"},
{IPC::MakeHeader(0x0011, 1, 0), &CAM_U::GetTrimmingParams, "GetTrimmingParams"}, {0x0011, &CAM_U::GetTrimmingParams, "GetTrimmingParams"},
{IPC::MakeHeader(0x0012, 5, 0), &CAM_U::SetTrimmingParamsCenter, "SetTrimmingParamsCenter"}, {0x0012, &CAM_U::SetTrimmingParamsCenter, "SetTrimmingParamsCenter"},
{IPC::MakeHeader(0x0013, 1, 0), &CAM_U::Activate, "Activate"}, {0x0013, &CAM_U::Activate, "Activate"},
{IPC::MakeHeader(0x0014, 2, 0), &CAM_U::SwitchContext, "SwitchContext"}, {0x0014, &CAM_U::SwitchContext, "SwitchContext"},
{IPC::MakeHeader(0x0015, 2, 0), nullptr, "SetExposure"}, {0x0015, nullptr, "SetExposure"},
{IPC::MakeHeader(0x0016, 2, 0), nullptr, "SetWhiteBalance"}, {0x0016, nullptr, "SetWhiteBalance"},
{IPC::MakeHeader(0x0017, 2, 0), nullptr, "SetWhiteBalanceWithoutBaseUp"}, {0x0017, nullptr, "SetWhiteBalanceWithoutBaseUp"},
{IPC::MakeHeader(0x0018, 2, 0), nullptr, "SetSharpness"}, {0x0018, nullptr, "SetSharpness"},
{IPC::MakeHeader(0x0019, 2, 0), nullptr, "SetAutoExposure"}, {0x0019, nullptr, "SetAutoExposure"},
{IPC::MakeHeader(0x001A, 1, 0), nullptr, "IsAutoExposure"}, {0x001A, nullptr, "IsAutoExposure"},
{IPC::MakeHeader(0x001B, 2, 0), nullptr, "SetAutoWhiteBalance"}, {0x001B, nullptr, "SetAutoWhiteBalance"},
{IPC::MakeHeader(0x001C, 1, 0), nullptr, "IsAutoWhiteBalance"}, {0x001C, nullptr, "IsAutoWhiteBalance"},
{IPC::MakeHeader(0x001D, 3, 0), &CAM_U::FlipImage, "FlipImage"}, {0x001D, &CAM_U::FlipImage, "FlipImage"},
{IPC::MakeHeader(0x001E, 8, 0), &CAM_U::SetDetailSize, "SetDetailSize"}, {0x001E, &CAM_U::SetDetailSize, "SetDetailSize"},
{IPC::MakeHeader(0x001F, 3, 0), &CAM_U::SetSize, "SetSize"}, {0x001F, &CAM_U::SetSize, "SetSize"},
{IPC::MakeHeader(0x0020, 2, 0), &CAM_U::SetFrameRate, "SetFrameRate"}, {0x0020, &CAM_U::SetFrameRate, "SetFrameRate"},
{IPC::MakeHeader(0x0021, 2, 0), nullptr, "SetPhotoMode"}, {0x0021, nullptr, "SetPhotoMode"},
{IPC::MakeHeader(0x0022, 3, 0), &CAM_U::SetEffect, "SetEffect"}, {0x0022, &CAM_U::SetEffect, "SetEffect"},
{IPC::MakeHeader(0x0023, 2, 0), nullptr, "SetContrast"}, {0x0023, nullptr, "SetContrast"},
{IPC::MakeHeader(0x0024, 2, 0), nullptr, "SetLensCorrection"}, {0x0024, nullptr, "SetLensCorrection"},
{IPC::MakeHeader(0x0025, 3, 0), &CAM_U::SetOutputFormat, "SetOutputFormat"}, {0x0025, &CAM_U::SetOutputFormat, "SetOutputFormat"},
{IPC::MakeHeader(0x0026, 5, 0), nullptr, "SetAutoExposureWindow"}, {0x0026, nullptr, "SetAutoExposureWindow"},
{IPC::MakeHeader(0x0027, 5, 0), nullptr, "SetAutoWhiteBalanceWindow"}, {0x0027, nullptr, "SetAutoWhiteBalanceWindow"},
{IPC::MakeHeader(0x0028, 2, 0), nullptr, "SetNoiseFilter"}, {0x0028, nullptr, "SetNoiseFilter"},
{IPC::MakeHeader(0x0029, 2, 0), &CAM_U::SynchronizeVsyncTiming, "SynchronizeVsyncTiming"}, {0x0029, &CAM_U::SynchronizeVsyncTiming, "SynchronizeVsyncTiming"},
{IPC::MakeHeader(0x002A, 2, 0), &CAM_U::GetLatestVsyncTiming, "GetLatestVsyncTiming"}, {0x002A, &CAM_U::GetLatestVsyncTiming, "GetLatestVsyncTiming"},
{IPC::MakeHeader(0x002B, 0, 0), &CAM_U::GetStereoCameraCalibrationData, "GetStereoCameraCalibrationData"}, {0x002B, &CAM_U::GetStereoCameraCalibrationData, "GetStereoCameraCalibrationData"},
{IPC::MakeHeader(0x002C, 16, 0), nullptr, "SetStereoCameraCalibrationData"}, {0x002C, nullptr, "SetStereoCameraCalibrationData"},
{IPC::MakeHeader(0x002D, 3, 0), nullptr, "WriteRegisterI2c"}, {0x002D, nullptr, "WriteRegisterI2c"},
{IPC::MakeHeader(0x002E, 3, 0), nullptr, "WriteMcuVariableI2c"}, {0x002E, nullptr, "WriteMcuVariableI2c"},
{IPC::MakeHeader(0x002F, 2, 0), nullptr, "ReadRegisterI2cExclusive"}, {0x002F, nullptr, "ReadRegisterI2cExclusive"},
{IPC::MakeHeader(0x0030, 2, 0), nullptr, "ReadMcuVariableI2cExclusive"}, {0x0030, nullptr, "ReadMcuVariableI2cExclusive"},
{IPC::MakeHeader(0x0031, 6, 0), nullptr, "SetImageQualityCalibrationData"}, {0x0031, nullptr, "SetImageQualityCalibrationData"},
{IPC::MakeHeader(0x0032, 0, 0), nullptr, "GetImageQualityCalibrationData"}, {0x0032, nullptr, "GetImageQualityCalibrationData"},
{IPC::MakeHeader(0x0033, 11, 0), &CAM_U::SetPackageParameterWithoutContext, "SetPackageParameterWithoutContext"}, {0x0033, &CAM_U::SetPackageParameterWithoutContext, "SetPackageParameterWithoutContext"},
{IPC::MakeHeader(0x0034, 5, 0), &CAM_U::SetPackageParameterWithContext, "SetPackageParameterWithContext"}, {0x0034, &CAM_U::SetPackageParameterWithContext, "SetPackageParameterWithContext"},
{IPC::MakeHeader(0x0035, 7, 0), &CAM_U::SetPackageParameterWithContextDetail, "SetPackageParameterWithContextDetail"}, {0x0035, &CAM_U::SetPackageParameterWithContextDetail, "SetPackageParameterWithContextDetail"},
{IPC::MakeHeader(0x0036, 0, 0), &CAM_U::GetSuitableY2rStandardCoefficient, "GetSuitableY2rStandardCoefficient"}, {0x0036, &CAM_U::GetSuitableY2rStandardCoefficient, "GetSuitableY2rStandardCoefficient"},
{IPC::MakeHeader(0x0037, 8, 2), nullptr, "PlayShutterSoundWithWave"}, {0x0037, nullptr, "PlayShutterSoundWithWave"},
{IPC::MakeHeader(0x0038, 1, 0), &CAM_U::PlayShutterSound, "PlayShutterSound"}, {0x0038, &CAM_U::PlayShutterSound, "PlayShutterSound"},
{IPC::MakeHeader(0x0039, 0, 0), &CAM_U::DriverInitialize, "DriverInitialize"}, {0x0039, &CAM_U::DriverInitialize, "DriverInitialize"},
{IPC::MakeHeader(0x003A, 0, 0), &CAM_U::DriverFinalize, "DriverFinalize"}, {0x003A, &CAM_U::DriverFinalize, "DriverFinalize"},
{IPC::MakeHeader(0x003B, 0, 0), nullptr, "GetActivatedCamera"}, {0x003B, nullptr, "GetActivatedCamera"},
{IPC::MakeHeader(0x003C, 0, 0), nullptr, "GetSleepCamera"}, {0x003C, nullptr, "GetSleepCamera"},
{IPC::MakeHeader(0x003D, 1, 0), nullptr, "SetSleepCamera"}, {0x003D, nullptr, "SetSleepCamera"},
{IPC::MakeHeader(0x003E, 1, 0), nullptr, "SetBrightnessSynchronization"}, {0x003E, nullptr, "SetBrightnessSynchronization"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -46,7 +46,7 @@ using CecOpenMode = Module::CecOpenMode;
using CecSystemInfoType = Module::CecSystemInfoType; using CecSystemInfoType = Module::CecSystemInfoType;
void Module::Interface::Open(Kernel::HLERequestContext& ctx) { void Module::Interface::Open(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 3, 2); IPC::RequestParser rp(ctx);
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const CecDataPathType path_type = rp.PopEnum<CecDataPathType>(); const CecDataPathType path_type = rp.PopEnum<CecDataPathType>();
CecOpenMode open_mode; CecOpenMode open_mode;
@ -129,7 +129,7 @@ void Module::Interface::Open(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Read(Kernel::HLERequestContext& ctx) { void Module::Interface::Read(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 1, 2); IPC::RequestParser rp(ctx);
const u32 write_buffer_size = rp.Pop<u32>(); const u32 write_buffer_size = rp.Pop<u32>();
auto& write_buffer = rp.PopMappedBuffer(); auto& write_buffer = rp.PopMappedBuffer();
@ -171,7 +171,7 @@ void Module::Interface::Read(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ReadMessage(Kernel::HLERequestContext& ctx) { void Module::Interface::ReadMessage(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 4, 4); IPC::RequestParser rp(ctx);
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const bool is_outbox = rp.Pop<bool>(); const bool is_outbox = rp.Pop<bool>();
const u32 message_id_size = rp.Pop<u32>(); const u32 message_id_size = rp.Pop<u32>();
@ -240,7 +240,7 @@ void Module::Interface::ReadMessage(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ReadMessageWithHMAC(Kernel::HLERequestContext& ctx) { void Module::Interface::ReadMessageWithHMAC(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 4, 6); IPC::RequestParser rp(ctx);
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const bool is_outbox = rp.Pop<bool>(); const bool is_outbox = rp.Pop<bool>();
const u32 message_id_size = rp.Pop<u32>(); const u32 message_id_size = rp.Pop<u32>();
@ -334,7 +334,7 @@ void Module::Interface::ReadMessageWithHMAC(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Write(Kernel::HLERequestContext& ctx) { void Module::Interface::Write(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 1, 2); IPC::RequestParser rp(ctx);
const u32 read_buffer_size = rp.Pop<u32>(); const u32 read_buffer_size = rp.Pop<u32>();
auto& read_buffer = rp.PopMappedBuffer(); auto& read_buffer = rp.PopMappedBuffer();
@ -382,7 +382,7 @@ void Module::Interface::Write(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::WriteMessage(Kernel::HLERequestContext& ctx) { void Module::Interface::WriteMessage(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 4, 4); IPC::RequestParser rp(ctx);
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const bool is_outbox = rp.Pop<bool>(); const bool is_outbox = rp.Pop<bool>();
const u32 message_id_size = rp.Pop<u32>(); const u32 message_id_size = rp.Pop<u32>();
@ -452,7 +452,7 @@ void Module::Interface::WriteMessage(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::WriteMessageWithHMAC(Kernel::HLERequestContext& ctx) { void Module::Interface::WriteMessageWithHMAC(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 4, 6); IPC::RequestParser rp(ctx);
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const bool is_outbox = rp.Pop<bool>(); const bool is_outbox = rp.Pop<bool>();
const u32 message_id_size = rp.Pop<u32>(); const u32 message_id_size = rp.Pop<u32>();
@ -540,7 +540,7 @@ void Module::Interface::WriteMessageWithHMAC(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Delete(Kernel::HLERequestContext& ctx) { void Module::Interface::Delete(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 4, 2); IPC::RequestParser rp(ctx);
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const CecDataPathType path_type = rp.PopEnum<CecDataPathType>(); const CecDataPathType path_type = rp.PopEnum<CecDataPathType>();
const bool is_outbox = rp.Pop<bool>(); const bool is_outbox = rp.Pop<bool>();
@ -584,7 +584,7 @@ void Module::Interface::Delete(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetData(Kernel::HLERequestContext& ctx) { void Module::Interface::SetData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 3, 2); IPC::RequestParser rp(ctx);
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const u32 buffer_size = rp.Pop<u32>(); const u32 buffer_size = rp.Pop<u32>();
const u32 option = rp.Pop<u32>(); const u32 option = rp.Pop<u32>();
@ -619,7 +619,7 @@ void Module::Interface::SetData(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ReadData(Kernel::HLERequestContext& ctx) { void Module::Interface::ReadData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0A, 3, 4); IPC::RequestParser rp(ctx);
const u32 dest_buffer_size = rp.Pop<u32>(); const u32 dest_buffer_size = rp.Pop<u32>();
const CecSystemInfoType info_type = rp.PopEnum<CecSystemInfoType>(); const CecSystemInfoType info_type = rp.PopEnum<CecSystemInfoType>();
const u32 param_buffer_size = rp.Pop<u32>(); const u32 param_buffer_size = rp.Pop<u32>();
@ -658,7 +658,7 @@ void Module::Interface::ReadData(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Start(Kernel::HLERequestContext& ctx) { void Module::Interface::Start(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0B, 1, 0); IPC::RequestParser rp(ctx);
const CecCommand command = rp.PopEnum<CecCommand>(); const CecCommand command = rp.PopEnum<CecCommand>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -668,7 +668,7 @@ void Module::Interface::Start(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Stop(Kernel::HLERequestContext& ctx) { void Module::Interface::Stop(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0C, 1, 0); IPC::RequestParser rp(ctx);
const CecCommand command = rp.PopEnum<CecCommand>(); const CecCommand command = rp.PopEnum<CecCommand>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -678,7 +678,7 @@ void Module::Interface::Stop(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetCecInfoBuffer(Kernel::HLERequestContext& ctx) { void Module::Interface::GetCecInfoBuffer(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 2, 2); IPC::RequestParser rp(ctx);
const u32 buffer_size = rp.Pop<u32>(); const u32 buffer_size = rp.Pop<u32>();
const u32 possible_info_type = rp.Pop<u32>(); const u32 possible_info_type = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -692,7 +692,7 @@ void Module::Interface::GetCecInfoBuffer(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetCecdState(Kernel::HLERequestContext& ctx) { void Module::Interface::GetCecdState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0E, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -702,7 +702,7 @@ void Module::Interface::GetCecdState(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetCecInfoEventHandle(Kernel::HLERequestContext& ctx) { void Module::Interface::GetCecInfoEventHandle(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -712,7 +712,7 @@ void Module::Interface::GetCecInfoEventHandle(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetChangeStateEventHandle(Kernel::HLERequestContext& ctx) { void Module::Interface::GetChangeStateEventHandle(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -722,7 +722,7 @@ void Module::Interface::GetChangeStateEventHandle(Kernel::HLERequestContext& ctx
} }
void Module::Interface::OpenAndWrite(Kernel::HLERequestContext& ctx) { void Module::Interface::OpenAndWrite(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 4, 4); IPC::RequestParser rp(ctx);
const u32 buffer_size = rp.Pop<u32>(); const u32 buffer_size = rp.Pop<u32>();
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const CecDataPathType path_type = rp.PopEnum<CecDataPathType>(); const CecDataPathType path_type = rp.PopEnum<CecDataPathType>();
@ -782,7 +782,7 @@ void Module::Interface::OpenAndWrite(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::OpenAndRead(Kernel::HLERequestContext& ctx) { void Module::Interface::OpenAndRead(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 4, 4); IPC::RequestParser rp(ctx);
const u32 buffer_size = rp.Pop<u32>(); const u32 buffer_size = rp.Pop<u32>();
const u32 ncch_program_id = rp.Pop<u32>(); const u32 ncch_program_id = rp.Pop<u32>();
const CecDataPathType path_type = rp.PopEnum<CecDataPathType>(); const CecDataPathType path_type = rp.PopEnum<CecDataPathType>();

View file

@ -13,10 +13,10 @@ CECD_NDM::CECD_NDM(std::shared_ptr<Module> cecd)
: Module::Interface(std::move(cecd), "cecd:ndm", DefaultMaxSessions) { : Module::Interface(std::move(cecd), "cecd:ndm", DefaultMaxSessions) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 0), nullptr, "Initialize"}, {0x0001, nullptr, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Deinitialize"}, {0x0002, nullptr, "Deinitialize"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "ResumeDaemon"}, {0x0003, nullptr, "ResumeDaemon"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "SuspendDaemon"}, {0x0004, nullptr, "SuspendDaemon"},
// clang-format on // clang-format on
}; };

View file

@ -14,28 +14,28 @@ CECD_S::CECD_S(std::shared_ptr<Module> cecd)
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// cecd:u shared commands // cecd:u shared commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 2), &CECD_S::Open, "Open"}, {0x0001, &CECD_S::Open, "Open"},
{IPC::MakeHeader(0x0002, 1, 2), &CECD_S::Read, "Read"}, {0x0002, &CECD_S::Read, "Read"},
{IPC::MakeHeader(0x0003, 4, 4), &CECD_S::ReadMessage, "ReadMessage"}, {0x0003, &CECD_S::ReadMessage, "ReadMessage"},
{IPC::MakeHeader(0x0004, 4, 6), &CECD_S::ReadMessageWithHMAC, "ReadMessageWithHMAC"}, {0x0004, &CECD_S::ReadMessageWithHMAC, "ReadMessageWithHMAC"},
{IPC::MakeHeader(0x0005, 1, 2), &CECD_S::Write, "Write"}, {0x0005, &CECD_S::Write, "Write"},
{IPC::MakeHeader(0x0006, 4, 4), &CECD_S::WriteMessage, "WriteMessage"}, {0x0006, &CECD_S::WriteMessage, "WriteMessage"},
{IPC::MakeHeader(0x0007, 4, 6), &CECD_S::WriteMessageWithHMAC, "WriteMessageWithHMAC"}, {0x0007, &CECD_S::WriteMessageWithHMAC, "WriteMessageWithHMAC"},
{IPC::MakeHeader(0x0008, 4, 2), &CECD_S::Delete, "Delete"}, {0x0008, &CECD_S::Delete, "Delete"},
{IPC::MakeHeader(0x0009, 3, 2), &CECD_S::SetData, "SetData"}, {0x0009, &CECD_S::SetData, "SetData"},
{IPC::MakeHeader(0x000A, 3, 4), &CECD_S::ReadData, "ReadData"}, {0x000A, &CECD_S::ReadData, "ReadData"},
{IPC::MakeHeader(0x000B, 1, 0), &CECD_S::Start, "Start"}, {0x000B, &CECD_S::Start, "Start"},
{IPC::MakeHeader(0x000C, 1, 0), &CECD_S::Stop, "Stop"}, {0x000C, &CECD_S::Stop, "Stop"},
{IPC::MakeHeader(0x000D, 2, 2), &CECD_S::GetCecInfoBuffer, "GetCecInfoBuffer"}, {0x000D, &CECD_S::GetCecInfoBuffer, "GetCecInfoBuffer"},
{IPC::MakeHeader(0x000E, 0, 0), &CECD_S::GetCecdState, "GetCecdState"}, {0x000E, &CECD_S::GetCecdState, "GetCecdState"},
{IPC::MakeHeader(0x000F, 0, 0), &CECD_S::GetCecInfoEventHandle, "GetCecInfoEventHandle"}, {0x000F, &CECD_S::GetCecInfoEventHandle, "GetCecInfoEventHandle"},
{IPC::MakeHeader(0x0010, 0, 0), &CECD_S::GetChangeStateEventHandle, "GetChangeStateEventHandle"}, {0x0010, &CECD_S::GetChangeStateEventHandle, "GetChangeStateEventHandle"},
{IPC::MakeHeader(0x0011, 4, 4), &CECD_S::OpenAndWrite, "OpenAndWrite"}, {0x0011, &CECD_S::OpenAndWrite, "OpenAndWrite"},
{IPC::MakeHeader(0x0012, 4, 4), &CECD_S::OpenAndRead, "OpenAndRead"}, {0x0012, &CECD_S::OpenAndRead, "OpenAndRead"},
{IPC::MakeHeader(0x001E, 2, 2), nullptr, "GetEventLog"}, {0x001E, nullptr, "GetEventLog"},
{IPC::MakeHeader(0x001F, 0, 0), nullptr, "GetEventLogStart"}, {0x001F, nullptr, "GetEventLogStart"},
// cecd:s commands // cecd:s commands
{IPC::MakeHeader(0x0402, 0, 2), nullptr, "GetCecInfoEventHandleSys"}, {0x0402, nullptr, "GetCecInfoEventHandleSys"},
// clang-format on // clang-format on
}; };

View file

@ -14,26 +14,26 @@ CECD_U::CECD_U(std::shared_ptr<Module> cecd)
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// cecd:u shared commands // cecd:u shared commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 2), &CECD_U::Open, "Open"}, {0x0001, &CECD_U::Open, "Open"},
{IPC::MakeHeader(0x0002, 1, 2), &CECD_U::Read, "Read"}, {0x0002, &CECD_U::Read, "Read"},
{IPC::MakeHeader(0x0003, 4, 4), &CECD_U::ReadMessage, "ReadMessage"}, {0x0003, &CECD_U::ReadMessage, "ReadMessage"},
{IPC::MakeHeader(0x0004, 4, 6), &CECD_U::ReadMessageWithHMAC, "ReadMessageWithHMAC"}, {0x0004, &CECD_U::ReadMessageWithHMAC, "ReadMessageWithHMAC"},
{IPC::MakeHeader(0x0005, 1, 2), &CECD_U::Write, "Write"}, {0x0005, &CECD_U::Write, "Write"},
{IPC::MakeHeader(0x0006, 4, 4), &CECD_U::WriteMessage, "WriteMessage"}, {0x0006, &CECD_U::WriteMessage, "WriteMessage"},
{IPC::MakeHeader(0x0007, 4, 6), &CECD_U::WriteMessageWithHMAC, "WriteMessageWithHMAC"}, {0x0007, &CECD_U::WriteMessageWithHMAC, "WriteMessageWithHMAC"},
{IPC::MakeHeader(0x0008, 4, 2), &CECD_U::Delete, "Delete"}, {0x0008, &CECD_U::Delete, "Delete"},
{IPC::MakeHeader(0x0009, 3, 2), &CECD_U::SetData, "SetData"}, {0x0009, &CECD_U::SetData, "SetData"},
{IPC::MakeHeader(0x000A, 3, 4), &CECD_U::ReadData, "ReadData"}, {0x000A, &CECD_U::ReadData, "ReadData"},
{IPC::MakeHeader(0x000B, 1, 0), &CECD_U::Start, "Start"}, {0x000B, &CECD_U::Start, "Start"},
{IPC::MakeHeader(0x000C, 1, 0), &CECD_U::Stop, "Stop"}, {0x000C, &CECD_U::Stop, "Stop"},
{IPC::MakeHeader(0x000D, 2, 2), &CECD_U::GetCecInfoBuffer, "GetCecInfoBuffer"}, {0x000D, &CECD_U::GetCecInfoBuffer, "GetCecInfoBuffer"},
{IPC::MakeHeader(0x000E, 0, 0), &CECD_U::GetCecdState, "GetCecdState"}, {0x000E, &CECD_U::GetCecdState, "GetCecdState"},
{IPC::MakeHeader(0x000F, 0, 0), &CECD_U::GetCecInfoEventHandle, "GetCecInfoEventHandle"}, {0x000F, &CECD_U::GetCecInfoEventHandle, "GetCecInfoEventHandle"},
{IPC::MakeHeader(0x0010, 0, 0), &CECD_U::GetChangeStateEventHandle, "GetChangeStateEventHandle"}, {0x0010, &CECD_U::GetChangeStateEventHandle, "GetChangeStateEventHandle"},
{IPC::MakeHeader(0x0011, 4, 4), &CECD_U::OpenAndWrite, "OpenAndWrite"}, {0x0011, &CECD_U::OpenAndWrite, "OpenAndWrite"},
{IPC::MakeHeader(0x0012, 4, 4), &CECD_U::OpenAndRead, "OpenAndRead"}, {0x0012, &CECD_U::OpenAndRead, "OpenAndRead"},
{IPC::MakeHeader(0x001E, 2, 2), nullptr, "GetEventLog"}, {0x001E, nullptr, "GetEventLog"},
{IPC::MakeHeader(0x001F, 0, 0), nullptr, "GetEventLogStart"}, {0x001F, nullptr, "GetEventLogStart"},
// clang-format on // clang-format on
}; };

View file

@ -206,7 +206,7 @@ Module::Interface::Interface(std::shared_ptr<Module> cfg, const char* name, u32
Module::Interface::~Interface() = default; Module::Interface::~Interface() = default;
void Module::Interface::GetCountryCodeString(Kernel::HLERequestContext& ctx) { void Module::Interface::GetCountryCodeString(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 1, 0); IPC::RequestParser rp(ctx);
u16 country_code_id = rp.Pop<u16>(); u16 country_code_id = rp.Pop<u16>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -228,7 +228,7 @@ std::shared_ptr<Module> Module::Interface::Interface::GetModule() const {
} }
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);
u16 country_code = rp.Pop<u16>(); u16 country_code = rp.Pop<u16>();
u16 country_code_id = 0; u16 country_code_id = 0;
@ -263,16 +263,16 @@ u32 Module::GetRegionValue() {
return Settings::values.region_value.GetValue(); return Settings::values.region_value.GetValue();
} }
void Module::Interface::SecureInfoGetRegion(Kernel::HLERequestContext& ctx, u16 id) { void Module::Interface::SecureInfoGetRegion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, id, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push<u8>(static_cast<u8>(cfg->GetRegionValue())); rb.Push<u8>(static_cast<u8>(cfg->GetRegionValue()));
} }
void Module::Interface::SecureInfoGetByte101(Kernel::HLERequestContext& ctx, u16 id) { void Module::Interface::SecureInfoGetByte101(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, id, 0, 0); IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_CFG, "(STUBBED) called"); LOG_DEBUG(Service_CFG, "(STUBBED) called");
@ -283,7 +283,7 @@ void Module::Interface::SecureInfoGetByte101(Kernel::HLERequestContext& ctx, u16
} }
void Module::Interface::GenHashConsoleUnique(Kernel::HLERequestContext& ctx) { void Module::Interface::GenHashConsoleUnique(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 1, 0); IPC::RequestParser rp(ctx);
const u32 app_id_salt = rp.Pop<u32>() & 0x000FFFFF; const u32 app_id_salt = rp.Pop<u32>() & 0x000FFFFF;
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
@ -309,7 +309,7 @@ void Module::Interface::GenHashConsoleUnique(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetRegionCanadaUSA(Kernel::HLERequestContext& ctx) { void Module::Interface::GetRegionCanadaUSA(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -323,7 +323,7 @@ void Module::Interface::GetRegionCanadaUSA(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetSystemModel(Kernel::HLERequestContext& ctx) { void Module::Interface::GetSystemModel(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
u32 data{}; u32 data{};
@ -345,7 +345,7 @@ void Module::Interface::GetSystemModel(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetModelNintendo2DS(Kernel::HLERequestContext& ctx) { void Module::Interface::GetModelNintendo2DS(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
u32 data{}; u32 data{};
@ -356,7 +356,7 @@ void Module::Interface::GetModelNintendo2DS(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetConfigInfoBlk2(Kernel::HLERequestContext& ctx) { void Module::Interface::GetConfigInfoBlk2(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 2, 2); IPC::RequestParser rp(ctx);
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
u32 block_id = rp.Pop<u32>(); u32 block_id = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -368,8 +368,8 @@ void Module::Interface::GetConfigInfoBlk2(Kernel::HLERequestContext& ctx) {
rb.PushMappedBuffer(buffer); rb.PushMappedBuffer(buffer);
} }
void Module::Interface::GetConfigInfoBlk8(Kernel::HLERequestContext& ctx, u16 id) { void Module::Interface::GetConfigInfoBlk8(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, id, 2, 2); IPC::RequestParser rp(ctx);
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
u32 block_id = rp.Pop<u32>(); u32 block_id = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -381,8 +381,8 @@ void Module::Interface::GetConfigInfoBlk8(Kernel::HLERequestContext& ctx, u16 id
rb.PushMappedBuffer(buffer); rb.PushMappedBuffer(buffer);
} }
void Module::Interface::SetConfigInfoBlk4(Kernel::HLERequestContext& ctx, u16 id) { void Module::Interface::SetConfigInfoBlk4(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, id, 2, 2); IPC::RequestParser rp(ctx);
u32 block_id = rp.Pop<u32>(); u32 block_id = rp.Pop<u32>();
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -395,14 +395,14 @@ void Module::Interface::SetConfigInfoBlk4(Kernel::HLERequestContext& ctx, u16 id
rb.PushMappedBuffer(buffer); rb.PushMappedBuffer(buffer);
} }
void Module::Interface::UpdateConfigNANDSavegame(Kernel::HLERequestContext& ctx, u16 id) { void Module::Interface::UpdateConfigNANDSavegame(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, id, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(cfg->UpdateConfigNANDSavegame()); rb.Push(cfg->UpdateConfigNANDSavegame());
} }
void Module::Interface::FormatConfig(Kernel::HLERequestContext& ctx) { void Module::Interface::FormatConfig(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0806, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(cfg->FormatConfig()); rb.Push(cfg->FormatConfig());
} }

View file

@ -163,7 +163,7 @@ public:
* 1 : Result of function, 0 on success, otherwise error code * 1 : Result of function, 0 on success, otherwise error code
* 2 : Region value loaded from SecureInfo offset 0x100 * 2 : Region value loaded from SecureInfo offset 0x100
*/ */
void SecureInfoGetRegion(Kernel::HLERequestContext& ctx, u16 id); void SecureInfoGetRegion(Kernel::HLERequestContext& ctx);
/** /**
* CFG::SecureInfoGetByte101 service function * CFG::SecureInfoGetByte101 service function
@ -174,7 +174,7 @@ public:
* 1 : Result of function, 0 on success, otherwise error code * 1 : Result of function, 0 on success, otherwise error code
* 2 : Value loaded from SecureInfo offset 0x101 * 2 : Value loaded from SecureInfo offset 0x101
*/ */
void SecureInfoGetByte101(Kernel::HLERequestContext& ctx, u16 id); void SecureInfoGetByte101(Kernel::HLERequestContext& ctx);
/** /**
* CFG::GenHashConsoleUnique service function * CFG::GenHashConsoleUnique service function
@ -243,7 +243,7 @@ public:
* Outputs: * Outputs:
* 1 : Result of function, 0 on success, otherwise error code * 1 : Result of function, 0 on success, otherwise error code
*/ */
void GetConfigInfoBlk8(Kernel::HLERequestContext& ctx, u16 id); void GetConfigInfoBlk8(Kernel::HLERequestContext& ctx);
/** /**
* CFG::SetConfigInfoBlk4 service function * CFG::SetConfigInfoBlk4 service function
@ -259,7 +259,7 @@ public:
* The parameters order is different from GetConfigInfoBlk2/8's, * The parameters order is different from GetConfigInfoBlk2/8's,
* where Block ID and Size are switched. * where Block ID and Size are switched.
*/ */
void SetConfigInfoBlk4(Kernel::HLERequestContext& ctx, u16 id); void SetConfigInfoBlk4(Kernel::HLERequestContext& ctx);
/** /**
* CFG::UpdateConfigNANDSavegame service function * CFG::UpdateConfigNANDSavegame service function
@ -268,7 +268,7 @@ public:
* Outputs: * Outputs:
* 1 : Result of function, 0 on success, otherwise error code * 1 : Result of function, 0 on success, otherwise error code
*/ */
void UpdateConfigNANDSavegame(Kernel::HLERequestContext& ctx, u16 id); void UpdateConfigNANDSavegame(Kernel::HLERequestContext& ctx);
/** /**
* CFG::FormatConfig service function * CFG::FormatConfig service function
@ -279,12 +279,6 @@ public:
*/ */
void FormatConfig(Kernel::HLERequestContext& ctx); void FormatConfig(Kernel::HLERequestContext& ctx);
/// A helper function for dispatching service functions that have multiple IDs
template <void (Interface::*function)(Kernel::HLERequestContext& ctx, u16 id), u16 id>
void D(Kernel::HLERequestContext& ctx) {
(this->*function)(ctx, id);
}
protected: protected:
std::shared_ptr<Module> cfg; std::shared_ptr<Module> cfg;
}; };

View file

@ -13,50 +13,50 @@ CFG_I::CFG_I(std::shared_ptr<Module> cfg) : Module::Interface(std::move(cfg), "c
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// cfg common // cfg common
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 2), &CFG_I::GetConfigInfoBlk2, "GetConfigInfoBlk2"}, {0x0001, &CFG_I::GetConfigInfoBlk2, "GetConfigInfoBlk2"},
{IPC::MakeHeader(0x0002, 0, 0), &CFG_I::D<&CFG_I::SecureInfoGetRegion, 0x0002>, "SecureInfoGetRegion"}, {0x0002, &CFG_I::SecureInfoGetRegion, "SecureInfoGetRegion"},
{IPC::MakeHeader(0x0003, 1, 0), &CFG_I::GenHashConsoleUnique, "GenHashConsoleUnique"}, {0x0003, &CFG_I::GenHashConsoleUnique, "GenHashConsoleUnique"},
{IPC::MakeHeader(0x0004, 0, 0), &CFG_I::GetRegionCanadaUSA, "GetRegionCanadaUSA"}, {0x0004, &CFG_I::GetRegionCanadaUSA, "GetRegionCanadaUSA"},
{IPC::MakeHeader(0x0005, 0, 0), &CFG_I::GetSystemModel, "GetSystemModel"}, {0x0005, &CFG_I::GetSystemModel, "GetSystemModel"},
{IPC::MakeHeader(0x0006, 0, 0), &CFG_I::GetModelNintendo2DS, "GetModelNintendo2DS"}, {0x0006, &CFG_I::GetModelNintendo2DS, "GetModelNintendo2DS"},
{IPC::MakeHeader(0x0007, 1, 0), nullptr, "WriteToFirstByteCfgSavegame"}, {0x0007, nullptr, "WriteToFirstByteCfgSavegame"},
{IPC::MakeHeader(0x0008, 2, 0), nullptr, "GoThroughTable"}, {0x0008, nullptr, "GoThroughTable"},
{IPC::MakeHeader(0x0009, 1, 0), &CFG_I::GetCountryCodeString, "GetCountryCodeString"}, {0x0009, &CFG_I::GetCountryCodeString, "GetCountryCodeString"},
{IPC::MakeHeader(0x000A, 1, 0), &CFG_I::GetCountryCodeID, "GetCountryCodeID"}, {0x000A, &CFG_I::GetCountryCodeID, "GetCountryCodeID"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "IsFangateSupported"}, {0x000B, nullptr, "IsFangateSupported"},
// cfg:i // cfg:i
{IPC::MakeHeader(0x0401, 2, 2), &CFG_I::D<&CFG_I::GetConfigInfoBlk8, 0x0401>, "GetConfigInfoBlk8"}, {0x0401, &CFG_I::GetConfigInfoBlk8, "GetConfigInfoBlk8"},
{IPC::MakeHeader(0x0402, 2, 2), &CFG_I::D<&CFG_I::SetConfigInfoBlk4, 0x0402>, "SetConfigInfoBlk4"}, {0x0402, &CFG_I::SetConfigInfoBlk4, "SetConfigInfoBlk4"},
{IPC::MakeHeader(0x0403, 0, 0), &CFG_I::D<&CFG_I::UpdateConfigNANDSavegame, 0x0403>, "UpdateConfigNANDSavegame"}, {0x0403, &CFG_I::UpdateConfigNANDSavegame, "UpdateConfigNANDSavegame"},
{IPC::MakeHeader(0x0404, 1, 2), nullptr, "GetLocalFriendCodeSeedData"}, {0x0404, nullptr, "GetLocalFriendCodeSeedData"},
{IPC::MakeHeader(0x0405, 0, 0), nullptr, "GetLocalFriendCodeSeed"}, {0x0405, nullptr, "GetLocalFriendCodeSeed"},
{IPC::MakeHeader(0x0406, 0, 0), &CFG_I::D<&CFG_I::SecureInfoGetRegion, 0x0406>, "SecureInfoGetRegion"}, {0x0406, &CFG_I::SecureInfoGetRegion, "SecureInfoGetRegion"},
{IPC::MakeHeader(0x0407, 0, 0), &CFG_I::D<&CFG_I::SecureInfoGetByte101, 0x0407>, "SecureInfoGetByte101"}, {0x0407, &CFG_I::SecureInfoGetByte101, "SecureInfoGetByte101"},
{IPC::MakeHeader(0x0408, 1, 2), nullptr, "SecureInfoGetSerialNo"}, {0x0408, nullptr, "SecureInfoGetSerialNo"},
{IPC::MakeHeader(0x0409, 0, 0), nullptr, "UpdateConfigBlk00040003"}, {0x0409, nullptr, "UpdateConfigBlk00040003"},
{IPC::MakeHeader(0x0801, 2, 2), &CFG_I::D<&CFG_I::GetConfigInfoBlk8, 0x0801>, "GetConfigInfoBlk8"}, {0x0801, &CFG_I::GetConfigInfoBlk8, "GetConfigInfoBlk8"},
{IPC::MakeHeader(0x0802, 2, 2), &CFG_I::D<&CFG_I::SetConfigInfoBlk4, 0x0802>, "SetConfigInfoBlk4"}, {0x0802, &CFG_I::SetConfigInfoBlk4, "SetConfigInfoBlk4"},
{IPC::MakeHeader(0x0803, 0, 0), &CFG_I::D<&CFG_I::UpdateConfigNANDSavegame, 0x0803>, "UpdateConfigNANDSavegame"}, {0x0803, &CFG_I::UpdateConfigNANDSavegame, "UpdateConfigNANDSavegame"},
{IPC::MakeHeader(0x0804, 3, 2), nullptr, "CreateConfigInfoBlk"}, {0x0804, nullptr, "CreateConfigInfoBlk"},
{IPC::MakeHeader(0x0805, 0, 0), nullptr, "DeleteConfigNANDSavefile"}, {0x0805, nullptr, "DeleteConfigNANDSavefile"},
{IPC::MakeHeader(0x0806, 0, 0), &CFG_I::FormatConfig, "FormatConfig"}, {0x0806, &CFG_I::FormatConfig, "FormatConfig"},
{IPC::MakeHeader(0x0808, 0, 0), nullptr, "UpdateConfigBlk1"}, {0x0808, nullptr, "UpdateConfigBlk1"},
{IPC::MakeHeader(0x0809, 0, 0), nullptr, "UpdateConfigBlk2"}, {0x0809, nullptr, "UpdateConfigBlk2"},
{IPC::MakeHeader(0x080A, 0, 0), nullptr, "UpdateConfigBlk3"}, {0x080A, nullptr, "UpdateConfigBlk3"},
{IPC::MakeHeader(0x080B, 2, 2), nullptr, "SetGetLocalFriendCodeSeedData"}, {0x080B, nullptr, "SetGetLocalFriendCodeSeedData"},
{IPC::MakeHeader(0x080C, 1, 2), nullptr, "SetLocalFriendCodeSeedSignature"}, {0x080C, nullptr, "SetLocalFriendCodeSeedSignature"},
{IPC::MakeHeader(0x080D, 0, 0), nullptr, "DeleteCreateNANDLocalFriendCodeSeed"}, {0x080D, nullptr, "DeleteCreateNANDLocalFriendCodeSeed"},
{IPC::MakeHeader(0x080E, 0, 0), nullptr, "VerifySigLocalFriendCodeSeed"}, {0x080E, nullptr, "VerifySigLocalFriendCodeSeed"},
{IPC::MakeHeader(0x080F, 1, 2), nullptr, "GetLocalFriendCodeSeedData"}, {0x080F, nullptr, "GetLocalFriendCodeSeedData"},
{IPC::MakeHeader(0x0810, 0, 0), nullptr, "GetLocalFriendCodeSeed"}, {0x0810, nullptr, "GetLocalFriendCodeSeed"},
{IPC::MakeHeader(0x0811, 2, 4), nullptr, "SetSecureInfo"}, {0x0811, nullptr, "SetSecureInfo"},
{IPC::MakeHeader(0x0812, 0, 0), nullptr, "DeleteCreateNANDSecureInfo"}, {0x0812, nullptr, "DeleteCreateNANDSecureInfo"},
{IPC::MakeHeader(0x0813, 0, 0), nullptr, "VerifySigSecureInfo"}, {0x0813, nullptr, "VerifySigSecureInfo"},
{IPC::MakeHeader(0x0814, 1, 2), nullptr, "SecureInfoGetData"}, {0x0814, nullptr, "SecureInfoGetData"},
{IPC::MakeHeader(0x0815, 1, 2), nullptr, "SecureInfoGetSignature"}, {0x0815, nullptr, "SecureInfoGetSignature"},
{IPC::MakeHeader(0x0816, 0, 0), &CFG_I::D<&CFG_I::SecureInfoGetRegion, 0x0816>, "SecureInfoGetRegion"}, {0x0816, &CFG_I::SecureInfoGetRegion, "SecureInfoGetRegion"},
{IPC::MakeHeader(0x0817, 0, 0), &CFG_I::D<&CFG_I::SecureInfoGetByte101, 0x0817>, "SecureInfoGetByte101"}, {0x0817, &CFG_I::SecureInfoGetByte101, "SecureInfoGetByte101"},
{IPC::MakeHeader(0x0818, 1, 2), nullptr, "SecureInfoGetSerialNo"}, {0x0818, nullptr, "SecureInfoGetSerialNo"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,10 +12,10 @@ namespace Service::CFG {
CFG_NOR::CFG_NOR() : ServiceFramework("cfg:nor", 23) { CFG_NOR::CFG_NOR() : ServiceFramework("cfg:nor", 23) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), nullptr, "Initialize"}, {0x0001, nullptr, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Shutdown"}, {0x0002, nullptr, "Shutdown"},
{IPC::MakeHeader(0x0005, 2, 2), nullptr, "ReadData"}, {0x0005, nullptr, "ReadData"},
{IPC::MakeHeader(0x0006, 2, 2), nullptr, "WriteData"}, {0x0006, nullptr, "WriteData"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -13,27 +13,27 @@ CFG_S::CFG_S(std::shared_ptr<Module> cfg) : Module::Interface(std::move(cfg), "c
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// cfg common // cfg common
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 2), &CFG_S::GetConfigInfoBlk2, "GetConfigInfoBlk2"}, {0x0001, &CFG_S::GetConfigInfoBlk2, "GetConfigInfoBlk2"},
{IPC::MakeHeader(0x0002, 0, 0), &CFG_S::D<&CFG_S::SecureInfoGetRegion, 0x0002>, "SecureInfoGetRegion"}, {0x0002, &CFG_S::SecureInfoGetRegion, "SecureInfoGetRegion"},
{IPC::MakeHeader(0x0003, 1, 0), &CFG_S::GenHashConsoleUnique, "GenHashConsoleUnique"}, {0x0003, &CFG_S::GenHashConsoleUnique, "GenHashConsoleUnique"},
{IPC::MakeHeader(0x0004, 0, 0), &CFG_S::GetRegionCanadaUSA, "GetRegionCanadaUSA"}, {0x0004, &CFG_S::GetRegionCanadaUSA, "GetRegionCanadaUSA"},
{IPC::MakeHeader(0x0005, 0, 0), &CFG_S::GetSystemModel, "GetSystemModel"}, {0x0005, &CFG_S::GetSystemModel, "GetSystemModel"},
{IPC::MakeHeader(0x0006, 0, 0), &CFG_S::GetModelNintendo2DS, "GetModelNintendo2DS"}, {0x0006, &CFG_S::GetModelNintendo2DS, "GetModelNintendo2DS"},
{IPC::MakeHeader(0x0007, 1, 0), nullptr, "WriteToFirstByteCfgSavegame"}, {0x0007, nullptr, "WriteToFirstByteCfgSavegame"},
{IPC::MakeHeader(0x0008, 2, 0), nullptr, "GoThroughTable"}, {0x0008, nullptr, "GoThroughTable"},
{IPC::MakeHeader(0x0009, 1, 0), &CFG_S::GetCountryCodeString, "GetCountryCodeString"}, {0x0009, &CFG_S::GetCountryCodeString, "GetCountryCodeString"},
{IPC::MakeHeader(0x000A, 1, 0), &CFG_S::GetCountryCodeID, "GetCountryCodeID"}, {0x000A, &CFG_S::GetCountryCodeID, "GetCountryCodeID"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "IsFangateSupported"}, {0x000B, nullptr, "IsFangateSupported"},
// cfg:s // cfg:s
{IPC::MakeHeader(0x0401, 2, 2), &CFG_S::D<&CFG_S::GetConfigInfoBlk8, 0x0401>, "GetConfigInfoBlk8"}, {0x0401, &CFG_S::GetConfigInfoBlk8, "GetConfigInfoBlk8"},
{IPC::MakeHeader(0x0402, 2, 2), &CFG_S::D<&CFG_S::SetConfigInfoBlk4, 0x0402>, "SetConfigInfoBlk4"}, {0x0402, &CFG_S::SetConfigInfoBlk4, "SetConfigInfoBlk4"},
{IPC::MakeHeader(0x0403, 0, 0), &CFG_S::D<&CFG_S::UpdateConfigNANDSavegame, 0x0403>, "UpdateConfigNANDSavegame"}, {0x0403, &CFG_S::UpdateConfigNANDSavegame, "UpdateConfigNANDSavegame"},
{IPC::MakeHeader(0x0404, 1, 2), nullptr, "GetLocalFriendCodeSeedData"}, {0x0404, nullptr, "GetLocalFriendCodeSeedData"},
{IPC::MakeHeader(0x0405, 0, 0), nullptr, "GetLocalFriendCodeSeed"}, {0x0405, nullptr, "GetLocalFriendCodeSeed"},
{IPC::MakeHeader(0x0406, 0, 0), &CFG_S::D<&CFG_S::SecureInfoGetRegion, 0x0406>, "SecureInfoGetRegion"}, {0x0406, &CFG_S::SecureInfoGetRegion, "SecureInfoGetRegion"},
{IPC::MakeHeader(0x0407, 0, 0), &CFG_S::D<&CFG_S::SecureInfoGetByte101, 0x0407>, "SecureInfoGetByte101"}, {0x0407, &CFG_S::SecureInfoGetByte101, "SecureInfoGetByte101"},
{IPC::MakeHeader(0x0408, 1, 2), nullptr, "SecureInfoGetSerialNo"}, {0x0408, nullptr, "SecureInfoGetSerialNo"},
{IPC::MakeHeader(0x0409, 0, 0), nullptr, "UpdateConfigBlk00040003"}, {0x0409, nullptr, "UpdateConfigBlk00040003"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -13,17 +13,17 @@ CFG_U::CFG_U(std::shared_ptr<Module> cfg) : Module::Interface(std::move(cfg), "c
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// cfg common // cfg common
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 2), &CFG_U::GetConfigInfoBlk2, "GetConfigInfoBlk2"}, {0x0001, &CFG_U::GetConfigInfoBlk2, "GetConfigInfoBlk2"},
{IPC::MakeHeader(0x0002, 0, 0), &CFG_U::D<&CFG_U::SecureInfoGetRegion, 0x0002>, "SecureInfoGetRegion"}, {0x0002, &CFG_U::SecureInfoGetRegion, "SecureInfoGetRegion"},
{IPC::MakeHeader(0x0003, 1, 0), &CFG_U::GenHashConsoleUnique, "GenHashConsoleUnique"}, {0x0003, &CFG_U::GenHashConsoleUnique, "GenHashConsoleUnique"},
{IPC::MakeHeader(0x0004, 0, 0), &CFG_U::GetRegionCanadaUSA, "GetRegionCanadaUSA"}, {0x0004, &CFG_U::GetRegionCanadaUSA, "GetRegionCanadaUSA"},
{IPC::MakeHeader(0x0005, 0, 0), &CFG_U::GetSystemModel, "GetSystemModel"}, {0x0005, &CFG_U::GetSystemModel, "GetSystemModel"},
{IPC::MakeHeader(0x0006, 0, 0), &CFG_U::GetModelNintendo2DS, "GetModelNintendo2DS"}, {0x0006, &CFG_U::GetModelNintendo2DS, "GetModelNintendo2DS"},
{IPC::MakeHeader(0x0007, 1, 0), nullptr, "WriteToFirstByteCfgSavegame"}, {0x0007, nullptr, "WriteToFirstByteCfgSavegame"},
{IPC::MakeHeader(0x0008, 2, 0), nullptr, "GoThroughTable"}, {0x0008, nullptr, "GoThroughTable"},
{IPC::MakeHeader(0x0009, 1, 0), &CFG_U::GetCountryCodeString, "GetCountryCodeString"}, {0x0009, &CFG_U::GetCountryCodeString, "GetCountryCodeString"},
{IPC::MakeHeader(0x000A, 1, 0), &CFG_U::GetCountryCodeID, "GetCountryCodeID"}, {0x000A, &CFG_U::GetCountryCodeID, "GetCountryCodeID"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "IsFangateSupported"}, {0x000B, nullptr, "IsFangateSupported"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -191,7 +191,7 @@ struct CaptureState {
static_assert(sizeof(CaptureState) == 0x8, "CaptureState structure size is wrong"); static_assert(sizeof(CaptureState) == 0x8, "CaptureState structure size is wrong");
void CSND_SND::Initialize(Kernel::HLERequestContext& ctx) { void CSND_SND::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 5, 0); IPC::RequestParser rp(ctx);
const u32 size = Common::AlignUp(rp.Pop<u32>(), Memory::CITRA_PAGE_SIZE); const u32 size = Common::AlignUp(rp.Pop<u32>(), Memory::CITRA_PAGE_SIZE);
master_state_offset = rp.Pop<u32>(); master_state_offset = rp.Pop<u32>();
channel_state_offset = rp.Pop<u32>(); channel_state_offset = rp.Pop<u32>();
@ -219,7 +219,7 @@ void CSND_SND::Initialize(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::Shutdown(Kernel::HLERequestContext& ctx) { void CSND_SND::Shutdown(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 0, 0); IPC::RequestParser rp(ctx);
if (mutex) if (mutex)
mutex = nullptr; mutex = nullptr;
@ -233,7 +233,7 @@ void CSND_SND::Shutdown(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::ExecuteCommands(Kernel::HLERequestContext& ctx) { void CSND_SND::ExecuteCommands(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 1, 0); IPC::RequestParser rp(ctx);
const u32 addr = rp.Pop<u32>(); const u32 addr = rp.Pop<u32>();
LOG_WARNING(Service_CSND, "(STUBBED) called, addr=0x{:08X}", addr); LOG_WARNING(Service_CSND, "(STUBBED) called, addr=0x{:08X}", addr);
@ -397,7 +397,7 @@ void CSND_SND::ExecuteCommands(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::AcquireSoundChannels(Kernel::HLERequestContext& ctx) { void CSND_SND::AcquireSoundChannels(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 0, 0); IPC::RequestParser rp(ctx);
// This is "almost" hardcoded, as in CSND initializes this with some code during sysmodule // This is "almost" hardcoded, as in CSND initializes this with some code during sysmodule
// startup, but it always compute to the same value. // startup, but it always compute to the same value.
@ -411,7 +411,7 @@ void CSND_SND::AcquireSoundChannels(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::ReleaseSoundChannels(Kernel::HLERequestContext& ctx) { void CSND_SND::ReleaseSoundChannels(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 0, 0); IPC::RequestParser rp(ctx);
acquired_channel_mask = 0; acquired_channel_mask = 0;
@ -422,7 +422,7 @@ void CSND_SND::ReleaseSoundChannels(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::AcquireCapUnit(Kernel::HLERequestContext& ctx) { void CSND_SND::AcquireCapUnit(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x7, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
if (capture_units[0] && capture_units[1]) { if (capture_units[0] && capture_units[1]) {
@ -446,7 +446,7 @@ void CSND_SND::AcquireCapUnit(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::ReleaseCapUnit(Kernel::HLERequestContext& ctx) { void CSND_SND::ReleaseCapUnit(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x8, 1, 0); IPC::RequestParser rp(ctx);
const u32 index = rp.Pop<u32>(); const u32 index = rp.Pop<u32>();
capture_units[index] = false; capture_units[index] = false;
@ -458,7 +458,7 @@ void CSND_SND::ReleaseCapUnit(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::FlushDataCache(Kernel::HLERequestContext& ctx) { void CSND_SND::FlushDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 2, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const VAddr address = rp.Pop<u32>(); [[maybe_unused]] const VAddr address = rp.Pop<u32>();
[[maybe_unused]] const u32 size = rp.Pop<u32>(); [[maybe_unused]] const u32 size = rp.Pop<u32>();
const auto process = rp.PopObject<Kernel::Process>(); const auto process = rp.PopObject<Kernel::Process>();
@ -471,7 +471,7 @@ void CSND_SND::FlushDataCache(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::StoreDataCache(Kernel::HLERequestContext& ctx) { void CSND_SND::StoreDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 2, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const VAddr address = rp.Pop<u32>(); [[maybe_unused]] const VAddr address = rp.Pop<u32>();
[[maybe_unused]] const u32 size = rp.Pop<u32>(); [[maybe_unused]] const u32 size = rp.Pop<u32>();
const auto process = rp.PopObject<Kernel::Process>(); const auto process = rp.PopObject<Kernel::Process>();
@ -484,7 +484,7 @@ void CSND_SND::StoreDataCache(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::InvalidateDataCache(Kernel::HLERequestContext& ctx) { void CSND_SND::InvalidateDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 2, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const VAddr address = rp.Pop<u32>(); [[maybe_unused]] const VAddr address = rp.Pop<u32>();
[[maybe_unused]] const u32 size = rp.Pop<u32>(); [[maybe_unused]] const u32 size = rp.Pop<u32>();
const auto process = rp.PopObject<Kernel::Process>(); const auto process = rp.PopObject<Kernel::Process>();
@ -497,7 +497,7 @@ void CSND_SND::InvalidateDataCache(Kernel::HLERequestContext& ctx) {
} }
void CSND_SND::Reset(Kernel::HLERequestContext& ctx) { void CSND_SND::Reset(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xC, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -508,18 +508,18 @@ void CSND_SND::Reset(Kernel::HLERequestContext& ctx) {
CSND_SND::CSND_SND(Core::System& system) : ServiceFramework("csnd:SND", 4), system(system) { CSND_SND::CSND_SND(Core::System& system) : ServiceFramework("csnd:SND", 4), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 5, 0), &CSND_SND::Initialize, "Initialize"}, {0x0001, &CSND_SND::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), &CSND_SND::Shutdown, "Shutdown"}, {0x0002, &CSND_SND::Shutdown, "Shutdown"},
{IPC::MakeHeader(0x0003, 1, 0), &CSND_SND::ExecuteCommands, "ExecuteCommands"}, {0x0003, &CSND_SND::ExecuteCommands, "ExecuteCommands"},
{IPC::MakeHeader(0x0004, 2, 0), nullptr, "ExecuteType1Commands"}, {0x0004, nullptr, "ExecuteType1Commands"},
{IPC::MakeHeader(0x0005, 0, 0), &CSND_SND::AcquireSoundChannels, "AcquireSoundChannels"}, {0x0005, &CSND_SND::AcquireSoundChannels, "AcquireSoundChannels"},
{IPC::MakeHeader(0x0006, 0, 0), &CSND_SND::ReleaseSoundChannels, "ReleaseSoundChannels"}, {0x0006, &CSND_SND::ReleaseSoundChannels, "ReleaseSoundChannels"},
{IPC::MakeHeader(0x0007, 0, 0), &CSND_SND::AcquireCapUnit, "AcquireCapUnit"}, {0x0007, &CSND_SND::AcquireCapUnit, "AcquireCapUnit"},
{IPC::MakeHeader(0x0008, 1, 0), &CSND_SND::ReleaseCapUnit, "ReleaseCapUnit"}, {0x0008, &CSND_SND::ReleaseCapUnit, "ReleaseCapUnit"},
{IPC::MakeHeader(0x0009, 2, 2), &CSND_SND::FlushDataCache, "FlushDataCache"}, {0x0009, &CSND_SND::FlushDataCache, "FlushDataCache"},
{IPC::MakeHeader(0x000A, 2, 2), &CSND_SND::StoreDataCache, "StoreDataCache"}, {0x000A, &CSND_SND::StoreDataCache, "StoreDataCache"},
{IPC::MakeHeader(0x000B, 2, 2), &CSND_SND::InvalidateDataCache, "InvalidateDataCache"}, {0x000B, &CSND_SND::InvalidateDataCache, "InvalidateDataCache"},
{IPC::MakeHeader(0x000C, 0, 0), &CSND_SND::Reset, "Reset"}, {0x000C, &CSND_SND::Reset, "Reset"},
// clang-format on // clang-format on
}; };

View file

@ -13,26 +13,26 @@ namespace Service::DLP {
DLP_CLNT::DLP_CLNT() : ServiceFramework("dlp:CLNT", 1) { DLP_CLNT::DLP_CLNT() : ServiceFramework("dlp:CLNT", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 3), nullptr, "Initialize"}, {0x0001, nullptr, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Finalize"}, {0x0002, nullptr, "Finalize"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "GetEventDesc"}, {0x0003, nullptr, "GetEventDesc"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "GetChannel"}, {0x0004, nullptr, "GetChannel"},
{IPC::MakeHeader(0x0005, 6, 0), nullptr, "StartScan"}, {0x0005, nullptr, "StartScan"},
{IPC::MakeHeader(0x0006, 0, 0), nullptr, "StopScan"}, {0x0006, nullptr, "StopScan"},
{IPC::MakeHeader(0x0007, 2, 0), nullptr, "GetServerInfo"}, {0x0007, nullptr, "GetServerInfo"},
{IPC::MakeHeader(0x0008, 4, 0), nullptr, "GetTitleInfo"}, {0x0008, nullptr, "GetTitleInfo"},
{IPC::MakeHeader(0x0009, 1, 0), nullptr, "GetTitleInfoInOrder"}, {0x0009, nullptr, "GetTitleInfoInOrder"},
{IPC::MakeHeader(0x000A, 2, 0), nullptr, "DeleteScanInfo"}, {0x000A, nullptr, "DeleteScanInfo"},
{IPC::MakeHeader(0x000B, 4, 0), nullptr, "PrepareForSystemDownload"}, {0x000B, nullptr, "PrepareForSystemDownload"},
{IPC::MakeHeader(0x000C, 0, 0), nullptr, "StartSystemDownload"}, {0x000C, nullptr, "StartSystemDownload"},
{IPC::MakeHeader(0x000D, 4, 0), nullptr, "StartTitleDownload"}, {0x000D, nullptr, "StartTitleDownload"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetMyStatus"}, {0x000E, nullptr, "GetMyStatus"},
{IPC::MakeHeader(0x000F, 1, 0), nullptr, "GetConnectingNodes"}, {0x000F, nullptr, "GetConnectingNodes"},
{IPC::MakeHeader(0x0010, 1, 0), nullptr, "GetNodeInfo"}, {0x0010, nullptr, "GetNodeInfo"},
{IPC::MakeHeader(0x0011, 0, 0), nullptr, "GetWirelessRebootPassphrase"}, {0x0011, nullptr, "GetWirelessRebootPassphrase"},
{IPC::MakeHeader(0x0012, 0, 0), nullptr, "StopSession"}, {0x0012, nullptr, "StopSession"},
{IPC::MakeHeader(0x0013, 4, 0), nullptr, "GetCupVersion"}, {0x0013, nullptr, "GetCupVersion"},
{IPC::MakeHeader(0x0014, 4, 0), nullptr, "GetDupAvailability"}, {0x0014, nullptr, "GetDupAvailability"},
// clang-format on // clang-format on
}; };

View file

@ -13,23 +13,23 @@ namespace Service::DLP {
DLP_FKCL::DLP_FKCL() : ServiceFramework("dlp:FKCL", 1) { DLP_FKCL::DLP_FKCL() : ServiceFramework("dlp:FKCL", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 3), nullptr, "Initialize"}, {0x0001, nullptr, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Finalize"}, {0x0002, nullptr, "Finalize"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "GetEventDesc"}, {0x0003, nullptr, "GetEventDesc"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "GetChannels"}, {0x0004, nullptr, "GetChannels"},
{IPC::MakeHeader(0x0005, 6, 0), nullptr, "StartScan"}, {0x0005, nullptr, "StartScan"},
{IPC::MakeHeader(0x0006, 0, 0), nullptr, "StopScan"}, {0x0006, nullptr, "StopScan"},
{IPC::MakeHeader(0x0007, 2, 0), nullptr, "GetServerInfo"}, {0x0007, nullptr, "GetServerInfo"},
{IPC::MakeHeader(0x0008, 4, 0), nullptr, "GetTitleInfo"}, {0x0008, nullptr, "GetTitleInfo"},
{IPC::MakeHeader(0x0009, 1, 0), nullptr, "GetTitleInfoInOrder"}, {0x0009, nullptr, "GetTitleInfoInOrder"},
{IPC::MakeHeader(0x000A, 2, 0), nullptr, "DeleteScanInfo"}, {0x000A, nullptr, "DeleteScanInfo"},
{IPC::MakeHeader(0x000B, 4, 0), nullptr, "StartFakeSession"}, {0x000B, nullptr, "StartFakeSession"},
{IPC::MakeHeader(0x000C, 0, 0), nullptr, "GetMyStatus"}, {0x000C, nullptr, "GetMyStatus"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "GetConnectingNodes"}, {0x000D, nullptr, "GetConnectingNodes"},
{IPC::MakeHeader(0x000E, 1, 0), nullptr, "GetNodeInfo"}, {0x000E, nullptr, "GetNodeInfo"},
{IPC::MakeHeader(0x000F, 0, 0), nullptr, "GetWirelessRebootPassphrase"}, {0x000F, nullptr, "GetWirelessRebootPassphrase"},
{IPC::MakeHeader(0x0010, 0, 0), nullptr, "StopSession"}, {0x0010, nullptr, "StopSession"},
{IPC::MakeHeader(0x0011, 8, 3), nullptr, "Initialize2"}, {0x0011, nullptr, "Initialize2"},
// clang-format on // clang-format on
}; };

View file

@ -14,7 +14,7 @@ SERIALIZE_EXPORT_IMPL(Service::DLP::DLP_SRVR)
namespace Service::DLP { namespace Service::DLP {
void DLP_SRVR::IsChild(Kernel::HLERequestContext& ctx) { void DLP_SRVR::IsChild(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0E, 1, 0); IPC::RequestParser rp(ctx);
rp.Skip(1, false); rp.Skip(1, false);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -27,22 +27,22 @@ void DLP_SRVR::IsChild(Kernel::HLERequestContext& ctx) {
DLP_SRVR::DLP_SRVR() : ServiceFramework("dlp:SRVR", 1) { DLP_SRVR::DLP_SRVR() : ServiceFramework("dlp:SRVR", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 6, 3), nullptr, "Initialize"}, {0x0001, nullptr, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Finalize"}, {0x0002, nullptr, "Finalize"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "GetServerState"}, {0x0003, nullptr, "GetServerState"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "GetEventDescription"}, {0x0004, nullptr, "GetEventDescription"},
{IPC::MakeHeader(0x0005, 2, 0), nullptr, "StartAccepting"}, {0x0005, nullptr, "StartAccepting"},
{IPC::MakeHeader(0x0006, 0, 0), nullptr, "EndAccepting"}, {0x0006, nullptr, "EndAccepting"},
{IPC::MakeHeader(0x0007, 0, 0), nullptr, "StartDistribution"}, {0x0007, nullptr, "StartDistribution"},
{IPC::MakeHeader(0x0008, 3, 0), nullptr, "SendWirelessRebootPassphrase"}, {0x0008, nullptr, "SendWirelessRebootPassphrase"},
{IPC::MakeHeader(0x0009, 1, 0), nullptr, "AcceptClient"}, {0x0009, nullptr, "AcceptClient"},
{IPC::MakeHeader(0x000A, 1, 0), nullptr, "DisconnectClient"}, {0x000A, nullptr, "DisconnectClient"},
{IPC::MakeHeader(0x000B, 1, 2), nullptr, "GetConnectingClients"}, {0x000B, nullptr, "GetConnectingClients"},
{IPC::MakeHeader(0x000C, 1, 0), nullptr, "GetClientInfo"}, {0x000C, nullptr, "GetClientInfo"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "GetClientState"}, {0x000D, nullptr, "GetClientState"},
{IPC::MakeHeader(0x000E, 1, 0), &DLP_SRVR::IsChild, "IsChild"}, {0x000E, &DLP_SRVR::IsChild, "IsChild"},
{IPC::MakeHeader(0x000F, 12, 3), nullptr, "InitializeWithName"}, {0x000F, nullptr, "InitializeWithName"},
{IPC::MakeHeader(0x0010, 0, 0), nullptr, "GetDupNoticeNeed"}, {0x0010, nullptr, "GetDupNoticeNeed"},
// clang-format on // clang-format on
}; };

View file

@ -24,7 +24,7 @@ enum class DspPipe;
namespace Service::DSP { namespace Service::DSP {
void DSP_DSP::RecvData(Kernel::HLERequestContext& ctx) { void DSP_DSP::RecvData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 1, 0); IPC::RequestParser rp(ctx);
const u32 register_number = rp.Pop<u32>(); const u32 register_number = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -35,7 +35,7 @@ void DSP_DSP::RecvData(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::RecvDataIsReady(Kernel::HLERequestContext& ctx) { void DSP_DSP::RecvDataIsReady(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 1, 0); IPC::RequestParser rp(ctx);
const u32 register_number = rp.Pop<u32>(); const u32 register_number = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -46,7 +46,7 @@ void DSP_DSP::RecvDataIsReady(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::SetSemaphore(Kernel::HLERequestContext& ctx) { void DSP_DSP::SetSemaphore(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 1, 0); IPC::RequestParser rp(ctx);
const u16 semaphore_value = rp.Pop<u16>(); const u16 semaphore_value = rp.Pop<u16>();
system.DSP().SetSemaphore(semaphore_value); system.DSP().SetSemaphore(semaphore_value);
@ -58,7 +58,7 @@ void DSP_DSP::SetSemaphore(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::ConvertProcessAddressFromDspDram(Kernel::HLERequestContext& ctx) { void DSP_DSP::ConvertProcessAddressFromDspDram(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0C, 1, 0); IPC::RequestParser rp(ctx);
const u32 address = rp.Pop<u32>(); const u32 address = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -72,7 +72,7 @@ void DSP_DSP::ConvertProcessAddressFromDspDram(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::WriteProcessPipe(Kernel::HLERequestContext& ctx) { void DSP_DSP::WriteProcessPipe(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 2, 2); IPC::RequestParser rp(ctx);
const u32 channel = rp.Pop<u32>(); const u32 channel = rp.Pop<u32>();
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
auto buffer = rp.PopStaticBuffer(); auto buffer = rp.PopStaticBuffer();
@ -110,7 +110,7 @@ void DSP_DSP::WriteProcessPipe(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::ReadPipe(Kernel::HLERequestContext& ctx) { void DSP_DSP::ReadPipe(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0E, 3, 0); IPC::RequestParser rp(ctx);
const u32 channel = rp.Pop<u32>(); const u32 channel = rp.Pop<u32>();
const u32 peer = rp.Pop<u32>(); const u32 peer = rp.Pop<u32>();
const u16 size = rp.Pop<u16>(); const u16 size = rp.Pop<u16>();
@ -133,7 +133,7 @@ void DSP_DSP::ReadPipe(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::GetPipeReadableSize(Kernel::HLERequestContext& ctx) { void DSP_DSP::GetPipeReadableSize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 2, 0); IPC::RequestParser rp(ctx);
const u32 channel = rp.Pop<u32>(); const u32 channel = rp.Pop<u32>();
const u32 peer = rp.Pop<u32>(); const u32 peer = rp.Pop<u32>();
@ -149,7 +149,7 @@ void DSP_DSP::GetPipeReadableSize(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::ReadPipeIfPossible(Kernel::HLERequestContext& ctx) { void DSP_DSP::ReadPipeIfPossible(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 3, 0); IPC::RequestParser rp(ctx);
const u32 channel = rp.Pop<u32>(); const u32 channel = rp.Pop<u32>();
const u32 peer = rp.Pop<u32>(); const u32 peer = rp.Pop<u32>();
const u16 size = rp.Pop<u16>(); const u16 size = rp.Pop<u16>();
@ -172,7 +172,7 @@ void DSP_DSP::ReadPipeIfPossible(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::LoadComponent(Kernel::HLERequestContext& ctx) { void DSP_DSP::LoadComponent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 3, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const u32 prog_mask = rp.Pop<u32>(); const u32 prog_mask = rp.Pop<u32>();
const u32 data_mask = rp.Pop<u32>(); const u32 data_mask = rp.Pop<u32>();
@ -193,7 +193,7 @@ void DSP_DSP::LoadComponent(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::UnloadComponent(Kernel::HLERequestContext& ctx) { void DSP_DSP::UnloadComponent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 0, 0); IPC::RequestParser rp(ctx);
system.DSP().UnloadComponent(); system.DSP().UnloadComponent();
@ -204,7 +204,7 @@ void DSP_DSP::UnloadComponent(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::FlushDataCache(Kernel::HLERequestContext& ctx) { void DSP_DSP::FlushDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 2, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const VAddr address = rp.Pop<u32>(); [[maybe_unused]] const VAddr address = rp.Pop<u32>();
[[maybe_unused]] const u32 size = rp.Pop<u32>(); [[maybe_unused]] const u32 size = rp.Pop<u32>();
const auto process = rp.PopObject<Kernel::Process>(); const auto process = rp.PopObject<Kernel::Process>();
@ -217,7 +217,7 @@ void DSP_DSP::FlushDataCache(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::InvalidateDataCache(Kernel::HLERequestContext& ctx) { void DSP_DSP::InvalidateDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 2, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] const VAddr address = rp.Pop<u32>(); [[maybe_unused]] const VAddr address = rp.Pop<u32>();
[[maybe_unused]] const u32 size = rp.Pop<u32>(); [[maybe_unused]] const u32 size = rp.Pop<u32>();
const auto process = rp.PopObject<Kernel::Process>(); const auto process = rp.PopObject<Kernel::Process>();
@ -230,7 +230,7 @@ void DSP_DSP::InvalidateDataCache(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::RegisterInterruptEvents(Kernel::HLERequestContext& ctx) { void DSP_DSP::RegisterInterruptEvents(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 2, 2); IPC::RequestParser rp(ctx);
const u32 interrupt = rp.Pop<u32>(); const u32 interrupt = rp.Pop<u32>();
const u32 channel = rp.Pop<u32>(); const u32 channel = rp.Pop<u32>();
auto event = rp.PopObject<Kernel::Event>(); auto event = rp.PopObject<Kernel::Event>();
@ -265,7 +265,7 @@ void DSP_DSP::RegisterInterruptEvents(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::GetSemaphoreEventHandle(Kernel::HLERequestContext& ctx) { void DSP_DSP::GetSemaphoreEventHandle(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -275,7 +275,7 @@ void DSP_DSP::GetSemaphoreEventHandle(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::SetSemaphoreMask(Kernel::HLERequestContext& ctx) { void DSP_DSP::SetSemaphoreMask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 1, 0); IPC::RequestParser rp(ctx);
preset_semaphore = rp.Pop<u16>(); preset_semaphore = rp.Pop<u16>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -285,7 +285,7 @@ void DSP_DSP::SetSemaphoreMask(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::GetHeadphoneStatus(Kernel::HLERequestContext& ctx) { void DSP_DSP::GetHeadphoneStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1F, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -295,7 +295,7 @@ void DSP_DSP::GetHeadphoneStatus(Kernel::HLERequestContext& ctx) {
} }
void DSP_DSP::ForceHeadphoneOut(Kernel::HLERequestContext& ctx) { void DSP_DSP::ForceHeadphoneOut(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x20, 1, 0); IPC::RequestParser rp(ctx);
const u8 force = rp.Pop<u8>(); const u8 force = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -347,39 +347,39 @@ DSP_DSP::DSP_DSP(Core::System& system)
: ServiceFramework("dsp::DSP", DefaultMaxSessions), system(system) { : ServiceFramework("dsp::DSP", DefaultMaxSessions), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &DSP_DSP::RecvData, "RecvData"}, {0x0001, &DSP_DSP::RecvData, "RecvData"},
{IPC::MakeHeader(0x0002, 1, 0), &DSP_DSP::RecvDataIsReady, "RecvDataIsReady"}, {0x0002, &DSP_DSP::RecvDataIsReady, "RecvDataIsReady"},
{IPC::MakeHeader(0x0003, 2, 0), nullptr, "SendData"}, {0x0003, nullptr, "SendData"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "SendDataIsEmpty"}, {0x0004, nullptr, "SendDataIsEmpty"},
{IPC::MakeHeader(0x0005, 3, 2), nullptr, "SendFifoEx"}, {0x0005, nullptr, "SendFifoEx"},
{IPC::MakeHeader(0x0006, 3, 0), nullptr, "RecvFifoEx"}, {0x0006, nullptr, "RecvFifoEx"},
{IPC::MakeHeader(0x0007, 1, 0), &DSP_DSP::SetSemaphore, "SetSemaphore"}, {0x0007, &DSP_DSP::SetSemaphore, "SetSemaphore"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "GetSemaphore"}, {0x0008, nullptr, "GetSemaphore"},
{IPC::MakeHeader(0x0009, 1, 0), nullptr, "ClearSemaphore"}, {0x0009, nullptr, "ClearSemaphore"},
{IPC::MakeHeader(0x000A, 1, 0), nullptr, "MaskSemaphore"}, {0x000A, nullptr, "MaskSemaphore"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "CheckSemaphoreRequest"}, {0x000B, nullptr, "CheckSemaphoreRequest"},
{IPC::MakeHeader(0x000C, 1, 0), &DSP_DSP::ConvertProcessAddressFromDspDram, "ConvertProcessAddressFromDspDram"}, {0x000C, &DSP_DSP::ConvertProcessAddressFromDspDram, "ConvertProcessAddressFromDspDram"},
{IPC::MakeHeader(0x000D, 2, 2), &DSP_DSP::WriteProcessPipe, "WriteProcessPipe"}, {0x000D, &DSP_DSP::WriteProcessPipe, "WriteProcessPipe"},
{IPC::MakeHeader(0x000E, 3, 0), &DSP_DSP::ReadPipe, "ReadPipe"}, {0x000E, &DSP_DSP::ReadPipe, "ReadPipe"},
{IPC::MakeHeader(0x000F, 2, 0), &DSP_DSP::GetPipeReadableSize, "GetPipeReadableSize"}, {0x000F, &DSP_DSP::GetPipeReadableSize, "GetPipeReadableSize"},
{IPC::MakeHeader(0x0010, 3, 0), &DSP_DSP::ReadPipeIfPossible, "ReadPipeIfPossible"}, {0x0010, &DSP_DSP::ReadPipeIfPossible, "ReadPipeIfPossible"},
{IPC::MakeHeader(0x0011, 3, 2), &DSP_DSP::LoadComponent, "LoadComponent"}, {0x0011, &DSP_DSP::LoadComponent, "LoadComponent"},
{IPC::MakeHeader(0x0012, 0, 0), &DSP_DSP::UnloadComponent, "UnloadComponent"}, {0x0012, &DSP_DSP::UnloadComponent, "UnloadComponent"},
{IPC::MakeHeader(0x0013, 2, 2), &DSP_DSP::FlushDataCache, "FlushDataCache"}, {0x0013, &DSP_DSP::FlushDataCache, "FlushDataCache"},
{IPC::MakeHeader(0x0014, 2, 2), &DSP_DSP::InvalidateDataCache, "InvalidateDCache"}, {0x0014, &DSP_DSP::InvalidateDataCache, "InvalidateDCache"},
{IPC::MakeHeader(0x0015, 2, 2), &DSP_DSP::RegisterInterruptEvents, "RegisterInterruptEvents"}, {0x0015, &DSP_DSP::RegisterInterruptEvents, "RegisterInterruptEvents"},
{IPC::MakeHeader(0x0016, 0, 0), &DSP_DSP::GetSemaphoreEventHandle, "GetSemaphoreEventHandle"}, {0x0016, &DSP_DSP::GetSemaphoreEventHandle, "GetSemaphoreEventHandle"},
{IPC::MakeHeader(0x0017, 1, 0), &DSP_DSP::SetSemaphoreMask, "SetSemaphoreMask"}, {0x0017, &DSP_DSP::SetSemaphoreMask, "SetSemaphoreMask"},
{IPC::MakeHeader(0x0018, 1, 0), nullptr, "GetPhysicalAddress"}, {0x0018, nullptr, "GetPhysicalAddress"},
{IPC::MakeHeader(0x0019, 1, 0), nullptr, "GetVirtualAddress"}, {0x0019, nullptr, "GetVirtualAddress"},
{IPC::MakeHeader(0x001A, 1, 2), nullptr, "SetIirFilterI2S1_cmd1"}, {0x001A, nullptr, "SetIirFilterI2S1_cmd1"},
{IPC::MakeHeader(0x001B, 1, 2), nullptr, "SetIirFilterI2S1_cmd2"}, {0x001B, nullptr, "SetIirFilterI2S1_cmd2"},
{IPC::MakeHeader(0x001C, 2, 2), nullptr, "SetIirFilterEQ"}, {0x001C, nullptr, "SetIirFilterEQ"},
{IPC::MakeHeader(0x001D, 3, 0), nullptr, "ReadMultiEx_SPI2"}, {0x001D, nullptr, "ReadMultiEx_SPI2"},
{IPC::MakeHeader(0x001E, 3, 2), nullptr, "WriteMultiEx_SPI2"}, {0x001E, nullptr, "WriteMultiEx_SPI2"},
{IPC::MakeHeader(0x001F, 0, 0), &DSP_DSP::GetHeadphoneStatus, "GetHeadphoneStatus"}, {0x001F, &DSP_DSP::GetHeadphoneStatus, "GetHeadphoneStatus"},
{IPC::MakeHeader(0x0020, 1, 0), &DSP_DSP::ForceHeadphoneOut, "ForceHeadphoneOut"}, {0x0020, &DSP_DSP::ForceHeadphoneOut, "ForceHeadphoneOut"},
{IPC::MakeHeader(0x0021, 0, 0), nullptr, "GetIsDspOccupied"}, {0x0021, nullptr, "GetIsDspOccupied"},
// clang-format on // clang-format on
}; };

View file

@ -164,7 +164,7 @@ static void LogGenericInfo(const ErrInfo::ErrInfoCommon& errinfo_common) {
} }
void ERR_F::ThrowFatalError(Kernel::HLERequestContext& ctx) { void ERR_F::ThrowFatalError(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 1, 32, 0); IPC::RequestParser rp(ctx);
LOG_CRITICAL(Service_ERR, "Fatal error"); LOG_CRITICAL(Service_ERR, "Fatal error");
const ErrInfo errinfo = rp.PopRaw<ErrInfo>(); const ErrInfo errinfo = rp.PopRaw<ErrInfo>();
@ -250,8 +250,8 @@ void ERR_F::ThrowFatalError(Kernel::HLERequestContext& ctx) {
ERR_F::ERR_F(Core::System& system) : ServiceFramework("err:f", 1), system(system) { ERR_F::ERR_F(Core::System& system) : ServiceFramework("err:f", 1), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 32, 0), &ERR_F::ThrowFatalError, "ThrowFatalError"}, {0x0001, &ERR_F::ThrowFatalError, "ThrowFatalError"},
{IPC::MakeHeader(0x0002, 1, 2), nullptr, "SetUserString"}, {0x0002, nullptr, "SetUserString"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -26,7 +26,7 @@ Module::Interface::Interface(std::shared_ptr<Module> frd, const char* name, u32
Module::Interface::~Interface() = default; Module::Interface::~Interface() = default;
void Module::Interface::GetMyPresence(Kernel::HLERequestContext& ctx) { void Module::Interface::GetMyPresence(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 0, 0); IPC::RequestParser rp(ctx);
std::vector<u8> buffer(sizeof(MyPresence)); std::vector<u8> buffer(sizeof(MyPresence));
std::memcpy(buffer.data(), &frd->my_presence, buffer.size()); std::memcpy(buffer.data(), &frd->my_presence, buffer.size());
@ -39,7 +39,7 @@ void Module::Interface::GetMyPresence(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetFriendKeyList(Kernel::HLERequestContext& ctx) { void Module::Interface::GetFriendKeyList(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 2, 0); IPC::RequestParser rp(ctx);
const u32 unknown = rp.Pop<u32>(); const u32 unknown = rp.Pop<u32>();
const u32 frd_count = rp.Pop<u32>(); const u32 frd_count = rp.Pop<u32>();
@ -54,7 +54,7 @@ void Module::Interface::GetFriendKeyList(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetFriendProfile(Kernel::HLERequestContext& ctx) { void Module::Interface::GetFriendProfile(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 1, 2); IPC::RequestParser rp(ctx);
const u32 count = rp.Pop<u32>(); const u32 count = rp.Pop<u32>();
const std::vector<u8> frd_keys = rp.PopStaticBuffer(); const std::vector<u8> frd_keys = rp.PopStaticBuffer();
ASSERT(frd_keys.size() == count * sizeof(FriendKey)); ASSERT(frd_keys.size() == count * sizeof(FriendKey));
@ -69,7 +69,7 @@ void Module::Interface::GetFriendProfile(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetFriendAttributeFlags(Kernel::HLERequestContext& ctx) { void Module::Interface::GetFriendAttributeFlags(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 1, 2); IPC::RequestParser rp(ctx);
const u32 count = rp.Pop<u32>(); const u32 count = rp.Pop<u32>();
const std::vector<u8> frd_keys = rp.PopStaticBuffer(); const std::vector<u8> frd_keys = rp.PopStaticBuffer();
ASSERT(frd_keys.size() == count * sizeof(FriendKey)); ASSERT(frd_keys.size() == count * sizeof(FriendKey));
@ -84,7 +84,7 @@ void Module::Interface::GetFriendAttributeFlags(Kernel::HLERequestContext& ctx)
} }
void Module::Interface::GetMyFriendKey(Kernel::HLERequestContext& ctx) { void Module::Interface::GetMyFriendKey(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0); IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.PushRaw(frd->my_friend_key); rb.PushRaw(frd->my_friend_key);
@ -93,7 +93,7 @@ void Module::Interface::GetMyFriendKey(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetMyScreenName(Kernel::HLERequestContext& ctx) { void Module::Interface::GetMyScreenName(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(7, 0); IPC::RequestBuilder rb = rp.MakeBuilder(7, 0);
struct ScreenName { struct ScreenName {
@ -119,7 +119,7 @@ void Module::Interface::UnscrambleLocalFriendCode(Kernel::HLERequestContext& ctx
const std::size_t scrambled_friend_code_size = 12; const std::size_t scrambled_friend_code_size = 12;
const std::size_t friend_code_size = 8; const std::size_t friend_code_size = 8;
IPC::RequestParser rp(ctx, 0x1C, 1, 2); IPC::RequestParser rp(ctx);
const u32 friend_code_count = rp.Pop<u32>(); const u32 friend_code_count = rp.Pop<u32>();
const std::vector<u8> scrambled_friend_codes = rp.PopStaticBuffer(); const std::vector<u8> scrambled_friend_codes = rp.PopStaticBuffer();
ASSERT_MSG(scrambled_friend_codes.size() == (friend_code_count * scrambled_friend_code_size), ASSERT_MSG(scrambled_friend_codes.size() == (friend_code_count * scrambled_friend_code_size),
@ -147,7 +147,7 @@ void Module::Interface::UnscrambleLocalFriendCode(Kernel::HLERequestContext& ctx
} }
void Module::Interface::SetClientSdkVersion(Kernel::HLERequestContext& ctx) { void Module::Interface::SetClientSdkVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x32, 1, 2); IPC::RequestParser rp(ctx);
u32 version = rp.Pop<u32>(); u32 version = rp.Pop<u32>();
rp.PopPID(); rp.PopPID();

View file

@ -11,59 +11,59 @@ namespace Service::FRD {
FRD_A::FRD_A(std::shared_ptr<Module> frd) : Module::Interface(std::move(frd), "frd:a", 8) { FRD_A::FRD_A(std::shared_ptr<Module> frd) : Module::Interface(std::move(frd), "frd:a", 8) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{0x00010000, nullptr, "HasLoggedIn"}, {0x0001, nullptr, "HasLoggedIn"},
{0x00020000, nullptr, "IsOnline"}, {0x0002, nullptr, "IsOnline"},
{0x00030000, nullptr, "Login"}, {0x0003, nullptr, "Login"},
{0x00040000, nullptr, "Logout"}, {0x0004, nullptr, "Logout"},
{0x00050000, &FRD_A::GetMyFriendKey, "GetMyFriendKey"}, {0x0005, &FRD_A::GetMyFriendKey, "GetMyFriendKey"},
{0x00060000, nullptr, "GetMyPreference"}, {0x0006, nullptr, "GetMyPreference"},
{0x00070000, nullptr, "GetMyProfile"}, {0x0007, nullptr, "GetMyProfile"},
{0x00080000, &FRD_A::GetMyPresence, "GetMyPresence"}, {0x0008, &FRD_A::GetMyPresence, "GetMyPresence"},
{0x00090000, &FRD_A::GetMyScreenName, "GetMyScreenName"}, {0x0009, &FRD_A::GetMyScreenName, "GetMyScreenName"},
{0x000A0000, nullptr, "GetMyMii"}, {0x000A, nullptr, "GetMyMii"},
{0x000B0000, nullptr, "GetMyLocalAccountId"}, {0x000B, nullptr, "GetMyLocalAccountId"},
{0x000C0000, nullptr, "GetMyPlayingGame"}, {0x000C, nullptr, "GetMyPlayingGame"},
{0x000D0000, nullptr, "GetMyFavoriteGame"}, {0x000D, nullptr, "GetMyFavoriteGame"},
{0x000E0000, nullptr, "GetMyNcPrincipalId"}, {0x000E, nullptr, "GetMyNcPrincipalId"},
{0x000F0000, nullptr, "GetMyComment"}, {0x000F, nullptr, "GetMyComment"},
{0x00100040, nullptr, "GetMyPassword"}, {0x0010, nullptr, "GetMyPassword"},
{0x00110080, &FRD_A::GetFriendKeyList, "GetFriendKeyList"}, {0x0011, &FRD_A::GetFriendKeyList, "GetFriendKeyList"},
{0x00120042, nullptr, "GetFriendPresence"}, {0x0012, nullptr, "GetFriendPresence"},
{0x00130142, nullptr, "GetFriendScreenName"}, {0x0013, nullptr, "GetFriendScreenName"},
{0x00140044, nullptr, "GetFriendMii"}, {0x0014, nullptr, "GetFriendMii"},
{0x00150042, &FRD_A::GetFriendProfile, "GetFriendProfile"}, {0x0015, &FRD_A::GetFriendProfile, "GetFriendProfile"},
{0x00160042, nullptr, "GetFriendRelationship"}, {0x0016, nullptr, "GetFriendRelationship"},
{0x00170042, &FRD_A::GetFriendAttributeFlags, "GetFriendAttributeFlags"}, {0x0017, &FRD_A::GetFriendAttributeFlags, "GetFriendAttributeFlags"},
{0x00180044, nullptr, "GetFriendPlayingGame"}, {0x0018, nullptr, "GetFriendPlayingGame"},
{0x00190042, nullptr, "GetFriendFavoriteGame"}, {0x0019, nullptr, "GetFriendFavoriteGame"},
{0x001A00C4, nullptr, "GetFriendInfo"}, {0x001A, nullptr, "GetFriendInfo"},
{0x001B0080, nullptr, "IsIncludedInFriendList"}, {0x001B, nullptr, "IsIncludedInFriendList"},
{0x001C0042, &FRD_A::UnscrambleLocalFriendCode, "UnscrambleLocalFriendCode"}, {0x001C, &FRD_A::UnscrambleLocalFriendCode, "UnscrambleLocalFriendCode"},
{0x001D0002, nullptr, "UpdateGameModeDescription"}, {0x001D, nullptr, "UpdateGameModeDescription"},
{0x001E02C2, nullptr, "UpdateGameMode"}, {0x001E, nullptr, "UpdateGameMode"},
{0x001F0042, nullptr, "SendInvitation"}, {0x001F, nullptr, "SendInvitation"},
{0x00200002, nullptr, "AttachToEventNotification"}, {0x0020, nullptr, "AttachToEventNotification"},
{0x00210040, nullptr, "SetNotificationMask"}, {0x0021, nullptr, "SetNotificationMask"},
{0x00220040, nullptr, "GetEventNotification"}, {0x0022, nullptr, "GetEventNotification"},
{0x00230000, nullptr, "GetLastResponseResult"}, {0x0023, nullptr, "GetLastResponseResult"},
{0x00240040, nullptr, "PrincipalIdToFriendCode"}, {0x0024, nullptr, "PrincipalIdToFriendCode"},
{0x00250080, nullptr, "FriendCodeToPrincipalId"}, {0x0025, nullptr, "FriendCodeToPrincipalId"},
{0x00260080, nullptr, "IsValidFriendCode"}, {0x0026, nullptr, "IsValidFriendCode"},
{0x00270040, nullptr, "ResultToErrorCode"}, {0x0027, nullptr, "ResultToErrorCode"},
{0x00280244, nullptr, "RequestGameAuthentication"}, {0x0028, nullptr, "RequestGameAuthentication"},
{0x00290000, nullptr, "GetGameAuthenticationData"}, {0x0029, nullptr, "GetGameAuthenticationData"},
{0x002A0204, nullptr, "RequestServiceLocator"}, {0x002A, nullptr, "RequestServiceLocator"},
{0x002B0000, nullptr, "GetServiceLocatorData"}, {0x002B, nullptr, "GetServiceLocatorData"},
{0x002C0002, nullptr, "DetectNatProperties"}, {0x002C, nullptr, "DetectNatProperties"},
{0x002D0000, nullptr, "GetNatProperties"}, {0x002D, nullptr, "GetNatProperties"},
{0x002E0000, nullptr, "GetServerTimeInterval"}, {0x002E, nullptr, "GetServerTimeInterval"},
{0x002F0040, nullptr, "AllowHalfAwake"}, {0x002F, nullptr, "AllowHalfAwake"},
{0x00300000, nullptr, "GetServerTypes"}, {0x0030, nullptr, "GetServerTypes"},
{0x00310082, nullptr, "GetFriendComment"}, {0x0031, nullptr, "GetFriendComment"},
{0x00320042, &FRD_A::SetClientSdkVersion, "SetClientSdkVersion"}, {0x0032, &FRD_A::SetClientSdkVersion, "SetClientSdkVersion"},
{0x00330000, nullptr, "GetMyApproachContext"}, {0x0033, nullptr, "GetMyApproachContext"},
{0x00340046, nullptr, "AddFriendWithApproach"}, {0x0034, nullptr, "AddFriendWithApproach"},
{0x00350082, nullptr, "DecryptApproachContext"}, {0x0035, nullptr, "DecryptApproachContext"},
}; };
RegisterHandlers(functions); RegisterHandlers(functions);
} }

View file

@ -11,59 +11,59 @@ namespace Service::FRD {
FRD_U::FRD_U(std::shared_ptr<Module> frd) : Module::Interface(std::move(frd), "frd:u", 8) { FRD_U::FRD_U(std::shared_ptr<Module> frd) : Module::Interface(std::move(frd), "frd:u", 8) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{0x00010000, nullptr, "HasLoggedIn"}, {0x0001, nullptr, "HasLoggedIn"},
{0x00020000, nullptr, "IsOnline"}, {0x0002, nullptr, "IsOnline"},
{0x00030000, nullptr, "Login"}, {0x0003, nullptr, "Login"},
{0x00040000, nullptr, "Logout"}, {0x0004, nullptr, "Logout"},
{0x00050000, &FRD_U::GetMyFriendKey, "GetMyFriendKey"}, {0x0005, &FRD_U::GetMyFriendKey, "GetMyFriendKey"},
{0x00060000, nullptr, "GetMyPreference"}, {0x0006, nullptr, "GetMyPreference"},
{0x00070000, nullptr, "GetMyProfile"}, {0x0007, nullptr, "GetMyProfile"},
{0x00080000, &FRD_U::GetMyPresence, "GetMyPresence"}, {0x0008, &FRD_U::GetMyPresence, "GetMyPresence"},
{0x00090000, &FRD_U::GetMyScreenName, "GetMyScreenName"}, {0x0009, &FRD_U::GetMyScreenName, "GetMyScreenName"},
{0x000A0000, nullptr, "GetMyMii"}, {0x000A, nullptr, "GetMyMii"},
{0x000B0000, nullptr, "GetMyLocalAccountId"}, {0x000B, nullptr, "GetMyLocalAccountId"},
{0x000C0000, nullptr, "GetMyPlayingGame"}, {0x000C, nullptr, "GetMyPlayingGame"},
{0x000D0000, nullptr, "GetMyFavoriteGame"}, {0x000D, nullptr, "GetMyFavoriteGame"},
{0x000E0000, nullptr, "GetMyNcPrincipalId"}, {0x000E, nullptr, "GetMyNcPrincipalId"},
{0x000F0000, nullptr, "GetMyComment"}, {0x000F, nullptr, "GetMyComment"},
{0x00100040, nullptr, "GetMyPassword"}, {0x0010, nullptr, "GetMyPassword"},
{0x00110080, &FRD_U::GetFriendKeyList, "GetFriendKeyList"}, {0x0011, &FRD_U::GetFriendKeyList, "GetFriendKeyList"},
{0x00120042, nullptr, "GetFriendPresence"}, {0x0012, nullptr, "GetFriendPresence"},
{0x00130142, nullptr, "GetFriendScreenName"}, {0x0013, nullptr, "GetFriendScreenName"},
{0x00140044, nullptr, "GetFriendMii"}, {0x0014, nullptr, "GetFriendMii"},
{0x00150042, &FRD_U::GetFriendProfile, "GetFriendProfile"}, {0x0015, &FRD_U::GetFriendProfile, "GetFriendProfile"},
{0x00160042, nullptr, "GetFriendRelationship"}, {0x0016, nullptr, "GetFriendRelationship"},
{0x00170042, &FRD_U::GetFriendAttributeFlags, "GetFriendAttributeFlags"}, {0x0017, &FRD_U::GetFriendAttributeFlags, "GetFriendAttributeFlags"},
{0x00180044, nullptr, "GetFriendPlayingGame"}, {0x0018, nullptr, "GetFriendPlayingGame"},
{0x00190042, nullptr, "GetFriendFavoriteGame"}, {0x0019, nullptr, "GetFriendFavoriteGame"},
{0x001A00C4, nullptr, "GetFriendInfo"}, {0x001A, nullptr, "GetFriendInfo"},
{0x001B0080, nullptr, "IsIncludedInFriendList"}, {0x001B, nullptr, "IsIncludedInFriendList"},
{0x001C0042, &FRD_U::UnscrambleLocalFriendCode, "UnscrambleLocalFriendCode"}, {0x001C, &FRD_U::UnscrambleLocalFriendCode, "UnscrambleLocalFriendCode"},
{0x001D0002, nullptr, "UpdateGameModeDescription"}, {0x001D, nullptr, "UpdateGameModeDescription"},
{0x001E02C2, nullptr, "UpdateGameMode"}, {0x001E, nullptr, "UpdateGameMode"},
{0x001F0042, nullptr, "SendInvitation"}, {0x001F, nullptr, "SendInvitation"},
{0x00200002, nullptr, "AttachToEventNotification"}, {0x0020, nullptr, "AttachToEventNotification"},
{0x00210040, nullptr, "SetNotificationMask"}, {0x0021, nullptr, "SetNotificationMask"},
{0x00220040, nullptr, "GetEventNotification"}, {0x0022, nullptr, "GetEventNotification"},
{0x00230000, nullptr, "GetLastResponseResult"}, {0x0023, nullptr, "GetLastResponseResult"},
{0x00240040, nullptr, "PrincipalIdToFriendCode"}, {0x0024, nullptr, "PrincipalIdToFriendCode"},
{0x00250080, nullptr, "FriendCodeToPrincipalId"}, {0x0025, nullptr, "FriendCodeToPrincipalId"},
{0x00260080, nullptr, "IsValidFriendCode"}, {0x0026, nullptr, "IsValidFriendCode"},
{0x00270040, nullptr, "ResultToErrorCode"}, {0x0027, nullptr, "ResultToErrorCode"},
{0x00280244, nullptr, "RequestGameAuthentication"}, {0x0028, nullptr, "RequestGameAuthentication"},
{0x00290000, nullptr, "GetGameAuthenticationData"}, {0x0029, nullptr, "GetGameAuthenticationData"},
{0x002A0204, nullptr, "RequestServiceLocator"}, {0x002A, nullptr, "RequestServiceLocator"},
{0x002B0000, nullptr, "GetServiceLocatorData"}, {0x002B, nullptr, "GetServiceLocatorData"},
{0x002C0002, nullptr, "DetectNatProperties"}, {0x002C, nullptr, "DetectNatProperties"},
{0x002D0000, nullptr, "GetNatProperties"}, {0x002D, nullptr, "GetNatProperties"},
{0x002E0000, nullptr, "GetServerTimeInterval"}, {0x002E, nullptr, "GetServerTimeInterval"},
{0x002F0040, nullptr, "AllowHalfAwake"}, {0x002F, nullptr, "AllowHalfAwake"},
{0x00300000, nullptr, "GetServerTypes"}, {0x0030, nullptr, "GetServerTypes"},
{0x00310082, nullptr, "GetFriendComment"}, {0x0031, nullptr, "GetFriendComment"},
{0x00320042, &FRD_U::SetClientSdkVersion, "SetClientSdkVersion"}, {0x0032, &FRD_U::SetClientSdkVersion, "SetClientSdkVersion"},
{0x00330000, nullptr, "GetMyApproachContext"}, {0x0033, nullptr, "GetMyApproachContext"},
{0x00340046, nullptr, "AddFriendWithApproach"}, {0x0034, nullptr, "AddFriendWithApproach"},
{0x00350082, nullptr, "DecryptApproachContext"}, {0x0035, nullptr, "DecryptApproachContext"},
}; };
RegisterHandlers(functions); RegisterHandlers(functions);
} }

View file

@ -31,8 +31,8 @@ Directory::Directory(std::unique_ptr<FileSys::DirectoryBackend>&& backend,
Directory::Directory() : ServiceFramework("", 1), path(""), backend(nullptr) { Directory::Directory() : ServiceFramework("", 1), path(""), backend(nullptr) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{0x08010042, &Directory::Read, "Read"}, {0x0801, &Directory::Read, "Read"},
{0x08020000, &Directory::Close, "Close"}, {0x0802, &Directory::Close, "Close"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);
@ -41,7 +41,7 @@ Directory::Directory() : ServiceFramework("", 1), path(""), backend(nullptr) {
Directory::~Directory() {} Directory::~Directory() {}
void Directory::Read(Kernel::HLERequestContext& ctx) { void Directory::Read(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0801, 1, 2); IPC::RequestParser rp(ctx);
u32 count = rp.Pop<u32>(); u32 count = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
std::vector<FileSys::Entry> entries(count); std::vector<FileSys::Entry> entries(count);
@ -57,7 +57,7 @@ void Directory::Read(Kernel::HLERequestContext& ctx) {
} }
void Directory::Close(Kernel::HLERequestContext& ctx) { void Directory::Close(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0802, 0, 0); IPC::RequestParser rp(ctx);
LOG_TRACE(Service_FS, "Close {}", GetName()); LOG_TRACE(Service_FS, "Close {}", GetName());
backend->Close(); backend->Close();

View file

@ -39,22 +39,22 @@ File::File(Kernel::KernelSystem& kernel, std::unique_ptr<FileSys::FileBackend>&&
File::File(Kernel::KernelSystem& kernel) File::File(Kernel::KernelSystem& kernel)
: ServiceFramework("", 1), path(""), backend(nullptr), kernel(kernel) { : ServiceFramework("", 1), path(""), backend(nullptr), kernel(kernel) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{0x08010100, &File::OpenSubFile, "OpenSubFile"}, {0x0801, &File::OpenSubFile, "OpenSubFile"},
{0x080200C2, &File::Read, "Read"}, {0x0802, &File::Read, "Read"},
{0x08030102, &File::Write, "Write"}, {0x0803, &File::Write, "Write"},
{0x08040000, &File::GetSize, "GetSize"}, {0x0804, &File::GetSize, "GetSize"},
{0x08050080, &File::SetSize, "SetSize"}, {0x0805, &File::SetSize, "SetSize"},
{0x08080000, &File::Close, "Close"}, {0x0808, &File::Close, "Close"},
{0x08090000, &File::Flush, "Flush"}, {0x0809, &File::Flush, "Flush"},
{0x080A0040, &File::SetPriority, "SetPriority"}, {0x080A, &File::SetPriority, "SetPriority"},
{0x080B0000, &File::GetPriority, "GetPriority"}, {0x080B, &File::GetPriority, "GetPriority"},
{0x080C0000, &File::OpenLinkFile, "OpenLinkFile"}, {0x080C, &File::OpenLinkFile, "OpenLinkFile"},
}; };
RegisterHandlers(functions); RegisterHandlers(functions);
} }
void File::Read(Kernel::HLERequestContext& ctx) { void File::Read(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0802, 3, 2); IPC::RequestParser rp(ctx);
u64 offset = rp.Pop<u64>(); u64 offset = rp.Pop<u64>();
u32 length = rp.Pop<u32>(); u32 length = rp.Pop<u32>();
auto& buffer = rp.PopMappedBuffer(); auto& buffer = rp.PopMappedBuffer();
@ -95,7 +95,7 @@ void File::Read(Kernel::HLERequestContext& ctx) {
} }
void File::Write(Kernel::HLERequestContext& ctx) { void File::Write(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0803, 4, 2); IPC::RequestParser rp(ctx);
u64 offset = rp.Pop<u64>(); u64 offset = rp.Pop<u64>();
u32 length = rp.Pop<u32>(); u32 length = rp.Pop<u32>();
u32 flush = rp.Pop<u32>(); u32 flush = rp.Pop<u32>();
@ -133,7 +133,7 @@ void File::Write(Kernel::HLERequestContext& ctx) {
} }
void File::GetSize(Kernel::HLERequestContext& ctx) { void File::GetSize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0804, 0, 0); IPC::RequestParser rp(ctx);
const FileSessionSlot* file = GetSessionData(ctx.Session()); const FileSessionSlot* file = GetSessionData(ctx.Session());
@ -143,7 +143,7 @@ void File::GetSize(Kernel::HLERequestContext& ctx) {
} }
void File::SetSize(Kernel::HLERequestContext& ctx) { void File::SetSize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0805, 2, 0); IPC::RequestParser rp(ctx);
u64 size = rp.Pop<u64>(); u64 size = rp.Pop<u64>();
FileSessionSlot* file = GetSessionData(ctx.Session()); FileSessionSlot* file = GetSessionData(ctx.Session());
@ -162,7 +162,7 @@ void File::SetSize(Kernel::HLERequestContext& ctx) {
} }
void File::Close(Kernel::HLERequestContext& ctx) { void File::Close(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0808, 0, 0); IPC::RequestParser rp(ctx);
// TODO(Subv): Only close the backend if this client is the only one left. // TODO(Subv): Only close the backend if this client is the only one left.
if (connected_sessions.size() > 1) if (connected_sessions.size() > 1)
@ -175,7 +175,7 @@ void File::Close(Kernel::HLERequestContext& ctx) {
} }
void File::Flush(Kernel::HLERequestContext& ctx) { void File::Flush(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0809, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -192,7 +192,7 @@ void File::Flush(Kernel::HLERequestContext& ctx) {
} }
void File::SetPriority(Kernel::HLERequestContext& ctx) { void File::SetPriority(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x080A, 1, 0); IPC::RequestParser rp(ctx);
FileSessionSlot* file = GetSessionData(ctx.Session()); FileSessionSlot* file = GetSessionData(ctx.Session());
file->priority = rp.Pop<u32>(); file->priority = rp.Pop<u32>();
@ -202,7 +202,7 @@ void File::SetPriority(Kernel::HLERequestContext& ctx) {
} }
void File::GetPriority(Kernel::HLERequestContext& ctx) { void File::GetPriority(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x080B, 0, 0); IPC::RequestParser rp(ctx);
const FileSessionSlot* file = GetSessionData(ctx.Session()); const FileSessionSlot* file = GetSessionData(ctx.Session());
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -214,7 +214,7 @@ void File::OpenLinkFile(Kernel::HLERequestContext& ctx) {
LOG_WARNING(Service_FS, "(STUBBED) File command OpenLinkFile {}", GetName()); LOG_WARNING(Service_FS, "(STUBBED) File command OpenLinkFile {}", GetName());
using Kernel::ClientSession; using Kernel::ClientSession;
using Kernel::ServerSession; using Kernel::ServerSession;
IPC::RequestParser rp(ctx, 0x080C, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
auto [server, client] = kernel.CreateSessionPair(GetName()); auto [server, client] = kernel.CreateSessionPair(GetName());
ClientConnected(server); ClientConnected(server);
@ -232,7 +232,7 @@ void File::OpenLinkFile(Kernel::HLERequestContext& ctx) {
} }
void File::OpenSubFile(Kernel::HLERequestContext& ctx) { void File::OpenSubFile(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0801, 4, 0); IPC::RequestParser rp(ctx);
s64 offset = rp.PopRaw<s64>(); s64 offset = rp.PopRaw<s64>();
s64 size = rp.PopRaw<s64>(); s64 size = rp.PopRaw<s64>();

View file

@ -36,7 +36,7 @@ using Kernel::ServerSession;
namespace Service::FS { namespace Service::FS {
void FS_USER::Initialize(Kernel::HLERequestContext& ctx) { void FS_USER::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0801, 0, 2); IPC::RequestParser rp(ctx);
u32 pid = rp.PopPID(); u32 pid = rp.PopPID();
ClientSlot* slot = GetSessionData(ctx.Session()); ClientSlot* slot = GetSessionData(ctx.Session());
@ -47,7 +47,7 @@ void FS_USER::Initialize(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::OpenFile(Kernel::HLERequestContext& ctx) { void FS_USER::OpenFile(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0802, 7, 2); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // Transaction. rp.Skip(1, false); // Transaction.
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
@ -77,7 +77,7 @@ void FS_USER::OpenFile(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::OpenFileDirectly(Kernel::HLERequestContext& ctx) { void FS_USER::OpenFileDirectly(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x803, 8, 4); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // Transaction rp.Skip(1, false); // Transaction
const auto archive_id = rp.PopEnum<ArchiveIdCode>(); const auto archive_id = rp.PopEnum<ArchiveIdCode>();
@ -129,7 +129,7 @@ void FS_USER::OpenFileDirectly(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::DeleteFile(Kernel::HLERequestContext& ctx) { void FS_USER::DeleteFile(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x804, 5, 2); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // TransactionId rp.Skip(1, false); // TransactionId
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
const auto filename_type = rp.PopEnum<FileSys::LowPathType>(); const auto filename_type = rp.PopEnum<FileSys::LowPathType>();
@ -147,7 +147,7 @@ void FS_USER::DeleteFile(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::RenameFile(Kernel::HLERequestContext& ctx) { void FS_USER::RenameFile(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x805, 9, 4); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // TransactionId rp.Skip(1, false); // TransactionId
const auto src_archive_handle = rp.PopRaw<ArchiveHandle>(); const auto src_archive_handle = rp.PopRaw<ArchiveHandle>();
@ -175,7 +175,7 @@ void FS_USER::RenameFile(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::DeleteDirectory(Kernel::HLERequestContext& ctx) { void FS_USER::DeleteDirectory(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x806, 5, 2); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // TransactionId rp.Skip(1, false); // TransactionId
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
@ -194,7 +194,7 @@ void FS_USER::DeleteDirectory(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::DeleteDirectoryRecursively(Kernel::HLERequestContext& ctx) { void FS_USER::DeleteDirectoryRecursively(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x807, 5, 2); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // TransactionId rp.Skip(1, false); // TransactionId
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
@ -213,7 +213,7 @@ void FS_USER::DeleteDirectoryRecursively(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::CreateFile(Kernel::HLERequestContext& ctx) { void FS_USER::CreateFile(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x808, 8, 2); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // TransactionId rp.Skip(1, false); // TransactionId
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
@ -234,7 +234,7 @@ void FS_USER::CreateFile(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::CreateDirectory(Kernel::HLERequestContext& ctx) { void FS_USER::CreateDirectory(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x809, 6, 2); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // TransactionId rp.Skip(1, false); // TransactionId
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
const auto dirname_type = rp.PopEnum<FileSys::LowPathType>(); const auto dirname_type = rp.PopEnum<FileSys::LowPathType>();
@ -252,7 +252,7 @@ void FS_USER::CreateDirectory(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::RenameDirectory(Kernel::HLERequestContext& ctx) { void FS_USER::RenameDirectory(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x80A, 9, 4); IPC::RequestParser rp(ctx);
rp.Skip(1, false); // TransactionId rp.Skip(1, false); // TransactionId
const auto src_archive_handle = rp.PopRaw<ArchiveHandle>(); const auto src_archive_handle = rp.PopRaw<ArchiveHandle>();
const auto src_dirname_type = rp.PopEnum<FileSys::LowPathType>(); const auto src_dirname_type = rp.PopEnum<FileSys::LowPathType>();
@ -279,7 +279,7 @@ void FS_USER::RenameDirectory(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::OpenDirectory(Kernel::HLERequestContext& ctx) { void FS_USER::OpenDirectory(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x80B, 4, 2); IPC::RequestParser rp(ctx);
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
const auto dirname_type = rp.PopEnum<FileSys::LowPathType>(); const auto dirname_type = rp.PopEnum<FileSys::LowPathType>();
const auto dirname_size = rp.Pop<u32>(); const auto dirname_size = rp.Pop<u32>();
@ -308,7 +308,7 @@ void FS_USER::OpenDirectory(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::OpenArchive(Kernel::HLERequestContext& ctx) { void FS_USER::OpenArchive(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x80C, 3, 2); IPC::RequestParser rp(ctx);
const auto archive_id = rp.PopEnum<FS::ArchiveIdCode>(); const auto archive_id = rp.PopEnum<FS::ArchiveIdCode>();
const auto archivename_type = rp.PopEnum<FileSys::LowPathType>(); const auto archivename_type = rp.PopEnum<FileSys::LowPathType>();
const auto archivename_size = rp.Pop<u32>(); const auto archivename_size = rp.Pop<u32>();
@ -335,7 +335,7 @@ void FS_USER::OpenArchive(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::CloseArchive(Kernel::HLERequestContext& ctx) { void FS_USER::CloseArchive(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x80E, 2, 0); IPC::RequestParser rp(ctx);
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -343,14 +343,14 @@ void FS_USER::CloseArchive(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::IsSdmcDetected(Kernel::HLERequestContext& ctx) { void FS_USER::IsSdmcDetected(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x817, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push(Settings::values.use_virtual_sd.GetValue()); rb.Push(Settings::values.use_virtual_sd.GetValue());
} }
void FS_USER::IsSdmcWriteable(Kernel::HLERequestContext& ctx) { void FS_USER::IsSdmcWriteable(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x818, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
// If the SD isn't enabled, it can't be writeable...else, stubbed true // If the SD isn't enabled, it can't be writeable...else, stubbed true
@ -361,7 +361,7 @@ void FS_USER::IsSdmcWriteable(Kernel::HLERequestContext& ctx) {
void FS_USER::FormatSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::FormatSaveData(Kernel::HLERequestContext& ctx) {
LOG_WARNING(Service_FS, "(STUBBED)"); LOG_WARNING(Service_FS, "(STUBBED)");
IPC::RequestParser rp(ctx, 0x84C, 9, 2); IPC::RequestParser rp(ctx);
const auto archive_id = rp.PopEnum<ArchiveIdCode>(); const auto archive_id = rp.PopEnum<ArchiveIdCode>();
const auto archivename_type = rp.PopEnum<FileSys::LowPathType>(); const auto archivename_type = rp.PopEnum<FileSys::LowPathType>();
const auto archivename_size = rp.Pop<u32>(); const auto archivename_size = rp.Pop<u32>();
@ -403,7 +403,7 @@ void FS_USER::FormatSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::FormatThisUserSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::FormatThisUserSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x80F, 6, 0); IPC::RequestParser rp(ctx);
const auto block_size = rp.Pop<u32>(); const auto block_size = rp.Pop<u32>();
const auto number_directories = rp.Pop<u32>(); const auto number_directories = rp.Pop<u32>();
const auto number_files = rp.Pop<u32>(); const auto number_files = rp.Pop<u32>();
@ -426,7 +426,7 @@ void FS_USER::FormatThisUserSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetFreeBytes(Kernel::HLERequestContext& ctx) { void FS_USER::GetFreeBytes(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x812, 2, 0); IPC::RequestParser rp(ctx);
const auto archive_handle = rp.PopRaw<ArchiveHandle>(); const auto archive_handle = rp.PopRaw<ArchiveHandle>();
ResultVal<u64> bytes_res = archives.GetFreeBytesInArchive(archive_handle); ResultVal<u64> bytes_res = archives.GetFreeBytesInArchive(archive_handle);
@ -440,7 +440,7 @@ void FS_USER::GetFreeBytes(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetSdmcArchiveResource(Kernel::HLERequestContext& ctx) { void FS_USER::GetSdmcArchiveResource(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x814, 0, 0); IPC::RequestParser rp(ctx);
LOG_WARNING(Service_FS, "(STUBBED) called"); LOG_WARNING(Service_FS, "(STUBBED) called");
@ -458,7 +458,7 @@ void FS_USER::GetSdmcArchiveResource(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetNandArchiveResource(Kernel::HLERequestContext& ctx) { void FS_USER::GetNandArchiveResource(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x815, 0, 0); IPC::RequestParser rp(ctx);
LOG_WARNING(Service_FS, "(STUBBED) called"); LOG_WARNING(Service_FS, "(STUBBED) called");
@ -476,7 +476,7 @@ void FS_USER::GetNandArchiveResource(Kernel::HLERequestContext& ctx) {
void FS_USER::CreateExtSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::CreateExtSaveData(Kernel::HLERequestContext& ctx) {
// TODO(Subv): Figure out the other parameters. // TODO(Subv): Figure out the other parameters.
IPC::RequestParser rp(ctx, 0x0851, 9, 2); IPC::RequestParser rp(ctx);
MediaType media_type = static_cast<MediaType>(rp.Pop<u32>()); // the other bytes are unknown MediaType media_type = static_cast<MediaType>(rp.Pop<u32>()); // the other bytes are unknown
u32 save_low = rp.Pop<u32>(); u32 save_low = rp.Pop<u32>();
u32 save_high = rp.Pop<u32>(); u32 save_high = rp.Pop<u32>();
@ -509,7 +509,7 @@ void FS_USER::CreateExtSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::DeleteExtSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::DeleteExtSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x852, 4, 0); IPC::RequestParser rp(ctx);
MediaType media_type = static_cast<MediaType>(rp.Pop<u32>()); // the other bytes are unknown MediaType media_type = static_cast<MediaType>(rp.Pop<u32>()); // the other bytes are unknown
u32 save_low = rp.Pop<u32>(); u32 save_low = rp.Pop<u32>();
u32 save_high = rp.Pop<u32>(); u32 save_high = rp.Pop<u32>();
@ -524,7 +524,7 @@ void FS_USER::DeleteExtSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::CardSlotIsInserted(Kernel::HLERequestContext& ctx) { void FS_USER::CardSlotIsInserted(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x821, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push(false); rb.Push(false);
@ -532,7 +532,7 @@ void FS_USER::CardSlotIsInserted(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::DeleteSystemSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::DeleteSystemSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x857, 2, 0); IPC::RequestParser rp(ctx);
u32 savedata_high = rp.Pop<u32>(); u32 savedata_high = rp.Pop<u32>();
u32 savedata_low = rp.Pop<u32>(); u32 savedata_low = rp.Pop<u32>();
@ -541,7 +541,7 @@ void FS_USER::DeleteSystemSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::CreateSystemSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::CreateSystemSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x856, 9, 0); IPC::RequestParser rp(ctx);
u32 savedata_high = rp.Pop<u32>(); u32 savedata_high = rp.Pop<u32>();
u32 savedata_low = rp.Pop<u32>(); u32 savedata_low = rp.Pop<u32>();
u32 total_size = rp.Pop<u32>(); u32 total_size = rp.Pop<u32>();
@ -564,7 +564,7 @@ void FS_USER::CreateSystemSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::CreateLegacySystemSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::CreateLegacySystemSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x810, 8, 0); IPC::RequestParser rp(ctx);
u32 savedata_id = rp.Pop<u32>(); u32 savedata_id = rp.Pop<u32>();
u32 total_size = rp.Pop<u32>(); u32 total_size = rp.Pop<u32>();
u32 block_size = rp.Pop<u32>(); u32 block_size = rp.Pop<u32>();
@ -586,7 +586,7 @@ void FS_USER::CreateLegacySystemSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::InitializeWithSdkVersion(Kernel::HLERequestContext& ctx) { void FS_USER::InitializeWithSdkVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x861, 1, 2); IPC::RequestParser rp(ctx);
const u32 version = rp.Pop<u32>(); const u32 version = rp.Pop<u32>();
u32 pid = rp.PopPID(); u32 pid = rp.PopPID();
@ -600,7 +600,7 @@ void FS_USER::InitializeWithSdkVersion(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::SetPriority(Kernel::HLERequestContext& ctx) { void FS_USER::SetPriority(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x862, 1, 0); IPC::RequestParser rp(ctx);
priority = rp.Pop<u32>(); priority = rp.Pop<u32>();
@ -611,7 +611,7 @@ void FS_USER::SetPriority(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetPriority(Kernel::HLERequestContext& ctx) { void FS_USER::GetPriority(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x863, 0, 0); IPC::RequestParser rp(ctx);
if (priority == UINT32_MAX) { if (priority == UINT32_MAX) {
LOG_INFO(Service_FS, "priority was not set, priority=0x{:X}", priority); LOG_INFO(Service_FS, "priority was not set, priority=0x{:X}", priority);
@ -625,7 +625,7 @@ void FS_USER::GetPriority(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetArchiveResource(Kernel::HLERequestContext& ctx) { void FS_USER::GetArchiveResource(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x849, 1, 0); IPC::RequestParser rp(ctx);
auto media_type = rp.PopEnum<MediaType>(); auto media_type = rp.PopEnum<MediaType>();
LOG_WARNING(Service_FS, "(STUBBED) called Media type=0x{:08X}", media_type); LOG_WARNING(Service_FS, "(STUBBED) called Media type=0x{:08X}", media_type);
@ -643,7 +643,7 @@ void FS_USER::GetArchiveResource(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetFormatInfo(Kernel::HLERequestContext& ctx) { void FS_USER::GetFormatInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x845, 3, 2); IPC::RequestParser rp(ctx);
const auto archive_id = rp.PopEnum<FS::ArchiveIdCode>(); const auto archive_id = rp.PopEnum<FS::ArchiveIdCode>();
const auto archivename_type = rp.PopEnum<FileSys::LowPathType>(); const auto archivename_type = rp.PopEnum<FileSys::LowPathType>();
const auto archivename_size = rp.Pop<u32>(); const auto archivename_size = rp.Pop<u32>();
@ -671,7 +671,7 @@ void FS_USER::GetFormatInfo(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetProgramLaunchInfo(Kernel::HLERequestContext& ctx) { void FS_USER::GetProgramLaunchInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x82F, 1, 0); IPC::RequestParser rp(ctx);
u32 process_id = rp.Pop<u32>(); u32 process_id = rp.Pop<u32>();
@ -699,7 +699,7 @@ void FS_USER::GetProgramLaunchInfo(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::ObsoletedCreateExtSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::ObsoletedCreateExtSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x830, 6, 2); IPC::RequestParser rp(ctx);
MediaType media_type = static_cast<MediaType>(rp.Pop<u8>()); MediaType media_type = static_cast<MediaType>(rp.Pop<u8>());
u32 save_low = rp.Pop<u32>(); u32 save_low = rp.Pop<u32>();
u32 save_high = rp.Pop<u32>(); u32 save_high = rp.Pop<u32>();
@ -730,7 +730,7 @@ void FS_USER::ObsoletedCreateExtSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::ObsoletedDeleteExtSaveData(Kernel::HLERequestContext& ctx) { void FS_USER::ObsoletedDeleteExtSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x835, 2, 0); IPC::RequestParser rp(ctx);
MediaType media_type = static_cast<MediaType>(rp.Pop<u8>()); MediaType media_type = static_cast<MediaType>(rp.Pop<u8>());
u32 save_low = rp.Pop<u32>(); u32 save_low = rp.Pop<u32>();
@ -741,7 +741,7 @@ void FS_USER::ObsoletedDeleteExtSaveData(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetSpecialContentIndex(Kernel::HLERequestContext& ctx) { void FS_USER::GetSpecialContentIndex(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x83A, 4, 0); IPC::RequestParser rp(ctx);
const MediaType media_type = static_cast<MediaType>(rp.Pop<u8>()); const MediaType media_type = static_cast<MediaType>(rp.Pop<u8>());
const u64 title_id = rp.Pop<u64>(); const u64 title_id = rp.Pop<u64>();
const auto type = rp.PopEnum<SpecialContentType>(); const auto type = rp.PopEnum<SpecialContentType>();
@ -767,13 +767,14 @@ void FS_USER::GetSpecialContentIndex(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetNumSeeds(Kernel::HLERequestContext& ctx) { void FS_USER::GetNumSeeds(Kernel::HLERequestContext& ctx) {
IPC::RequestBuilder rb{ctx, 0x87D, 2, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push<u32>(FileSys::GetSeedCount()); rb.Push<u32>(FileSys::GetSeedCount());
} }
void FS_USER::AddSeed(Kernel::HLERequestContext& ctx) { void FS_USER::AddSeed(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x87A, 6, 0}; IPC::RequestParser rp(ctx);
u64 title_id{rp.Pop<u64>()}; u64 title_id{rp.Pop<u64>()};
FileSys::Seed::Data seed{rp.PopRaw<FileSys::Seed::Data>()}; FileSys::Seed::Data seed{rp.PopRaw<FileSys::Seed::Data>()};
FileSys::AddSeed({title_id, seed, {}}); FileSys::AddSeed({title_id, seed, {}});
@ -782,7 +783,7 @@ void FS_USER::AddSeed(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::SetSaveDataSecureValue(Kernel::HLERequestContext& ctx) { void FS_USER::SetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x865, 5, 0); IPC::RequestParser rp(ctx);
u64 value = rp.Pop<u64>(); u64 value = rp.Pop<u64>();
u32 secure_value_slot = rp.Pop<u32>(); u32 secure_value_slot = rp.Pop<u32>();
u32 unique_id = rp.Pop<u32>(); u32 unique_id = rp.Pop<u32>();
@ -801,7 +802,7 @@ void FS_USER::SetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
} }
void FS_USER::GetSaveDataSecureValue(Kernel::HLERequestContext& ctx) { void FS_USER::GetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x866, 3, 0); IPC::RequestParser rp(ctx);
u32 secure_value_slot = rp.Pop<u32>(); u32 secure_value_slot = rp.Pop<u32>();
u32 unique_id = rp.Pop<u32>(); u32 unique_id = rp.Pop<u32>();
@ -888,117 +889,117 @@ FS_USER::FS_USER(Core::System& system)
: ServiceFramework("fs:USER", 30), system(system), archives(system.ArchiveManager()) { : ServiceFramework("fs:USER", 30), system(system), archives(system.ArchiveManager()) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 6), nullptr, "Dummy1"}, {0x0001, nullptr, "Dummy1"},
{IPC::MakeHeader(0x0401, 3, 4), nullptr, "Control"}, {0x0401, nullptr, "Control"},
{IPC::MakeHeader(0x0801, 0, 2), &FS_USER::Initialize, "Initialize"}, {0x0801, &FS_USER::Initialize, "Initialize"},
{IPC::MakeHeader(0x0802, 7, 2), &FS_USER::OpenFile, "OpenFile"}, {0x0802, &FS_USER::OpenFile, "OpenFile"},
{IPC::MakeHeader(0x0803, 8, 4), &FS_USER::OpenFileDirectly, "OpenFileDirectly"}, {0x0803, &FS_USER::OpenFileDirectly, "OpenFileDirectly"},
{IPC::MakeHeader(0x0804, 5, 2), &FS_USER::DeleteFile, "DeleteFile"}, {0x0804, &FS_USER::DeleteFile, "DeleteFile"},
{IPC::MakeHeader(0x0805, 9, 4), &FS_USER::RenameFile, "RenameFile"}, {0x0805, &FS_USER::RenameFile, "RenameFile"},
{IPC::MakeHeader(0x0806, 5, 2), &FS_USER::DeleteDirectory, "DeleteDirectory"}, {0x0806, &FS_USER::DeleteDirectory, "DeleteDirectory"},
{IPC::MakeHeader(0x0807, 5, 2), &FS_USER::DeleteDirectoryRecursively, "DeleteDirectoryRecursively"}, {0x0807, &FS_USER::DeleteDirectoryRecursively, "DeleteDirectoryRecursively"},
{IPC::MakeHeader(0x0808, 8, 2), &FS_USER::CreateFile, "CreateFile"}, {0x0808, &FS_USER::CreateFile, "CreateFile"},
{IPC::MakeHeader(0x0809, 6, 2), &FS_USER::CreateDirectory, "CreateDirectory"}, {0x0809, &FS_USER::CreateDirectory, "CreateDirectory"},
{IPC::MakeHeader(0x080A, 9, 4), &FS_USER::RenameDirectory, "RenameDirectory"}, {0x080A, &FS_USER::RenameDirectory, "RenameDirectory"},
{IPC::MakeHeader(0x080B, 4, 2), &FS_USER::OpenDirectory, "OpenDirectory"}, {0x080B, &FS_USER::OpenDirectory, "OpenDirectory"},
{IPC::MakeHeader(0x080C, 3, 2), &FS_USER::OpenArchive, "OpenArchive"}, {0x080C, &FS_USER::OpenArchive, "OpenArchive"},
{IPC::MakeHeader(0x080D, 5, 4), nullptr, "ControlArchive"}, {0x080D, nullptr, "ControlArchive"},
{IPC::MakeHeader(0x080E, 2, 0), &FS_USER::CloseArchive, "CloseArchive"}, {0x080E, &FS_USER::CloseArchive, "CloseArchive"},
{IPC::MakeHeader(0x080F, 6, 0), &FS_USER::FormatThisUserSaveData, "FormatThisUserSaveData"}, {0x080F, &FS_USER::FormatThisUserSaveData, "FormatThisUserSaveData"},
{IPC::MakeHeader(0x0810, 8, 0), &FS_USER::CreateLegacySystemSaveData, "CreateLegacySystemSaveData"}, {0x0810, &FS_USER::CreateLegacySystemSaveData, "CreateLegacySystemSaveData"},
{IPC::MakeHeader(0x0811, 1, 0), nullptr, "DeleteSystemSaveData"}, {0x0811, nullptr, "DeleteSystemSaveData"},
{IPC::MakeHeader(0x0812, 2, 0), &FS_USER::GetFreeBytes, "GetFreeBytes"}, {0x0812, &FS_USER::GetFreeBytes, "GetFreeBytes"},
{IPC::MakeHeader(0x0813, 0, 0), nullptr, "GetCardType"}, {0x0813, nullptr, "GetCardType"},
{IPC::MakeHeader(0x0814, 0, 0), &FS_USER::GetSdmcArchiveResource, "GetSdmcArchiveResource"}, {0x0814, &FS_USER::GetSdmcArchiveResource, "GetSdmcArchiveResource"},
{IPC::MakeHeader(0x0815, 0, 0), &FS_USER::GetNandArchiveResource, "GetNandArchiveResource"}, {0x0815, &FS_USER::GetNandArchiveResource, "GetNandArchiveResource"},
{IPC::MakeHeader(0x0816, 0, 0), nullptr, "GetSdmcFatfsError"}, {0x0816, nullptr, "GetSdmcFatfsError"},
{IPC::MakeHeader(0x0817, 0, 0), &FS_USER::IsSdmcDetected, "IsSdmcDetected"}, {0x0817, &FS_USER::IsSdmcDetected, "IsSdmcDetected"},
{IPC::MakeHeader(0x0818, 0, 0), &FS_USER::IsSdmcWriteable, "IsSdmcWritable"}, {0x0818, &FS_USER::IsSdmcWriteable, "IsSdmcWritable"},
{IPC::MakeHeader(0x0819, 1, 2), nullptr, "GetSdmcCid"}, {0x0819, nullptr, "GetSdmcCid"},
{IPC::MakeHeader(0x081A, 1, 2), nullptr, "GetNandCid"}, {0x081A, nullptr, "GetNandCid"},
{IPC::MakeHeader(0x081B, 0, 0), nullptr, "GetSdmcSpeedInfo"}, {0x081B, nullptr, "GetSdmcSpeedInfo"},
{IPC::MakeHeader(0x081C, 0, 0), nullptr, "GetNandSpeedInfo"}, {0x081C, nullptr, "GetNandSpeedInfo"},
{IPC::MakeHeader(0x081D, 1, 2), nullptr, "GetSdmcLog"}, {0x081D, nullptr, "GetSdmcLog"},
{IPC::MakeHeader(0x081E, 1, 2), nullptr, "GetNandLog"}, {0x081E, nullptr, "GetNandLog"},
{IPC::MakeHeader(0x081F, 0, 0), nullptr, "ClearSdmcLog"}, {0x081F, nullptr, "ClearSdmcLog"},
{IPC::MakeHeader(0x0820, 0, 0), nullptr, "ClearNandLog"}, {0x0820, nullptr, "ClearNandLog"},
{IPC::MakeHeader(0x0821, 0, 0), &FS_USER::CardSlotIsInserted, "CardSlotIsInserted"}, {0x0821, &FS_USER::CardSlotIsInserted, "CardSlotIsInserted"},
{IPC::MakeHeader(0x0822, 0, 0), nullptr, "CardSlotPowerOn"}, {0x0822, nullptr, "CardSlotPowerOn"},
{IPC::MakeHeader(0x0823, 0, 0), nullptr, "CardSlotPowerOff"}, {0x0823, nullptr, "CardSlotPowerOff"},
{IPC::MakeHeader(0x0824, 0, 0), nullptr, "CardSlotGetCardIFPowerStatus"}, {0x0824, nullptr, "CardSlotGetCardIFPowerStatus"},
{IPC::MakeHeader(0x0825, 1, 0), nullptr, "CardNorDirectCommand"}, {0x0825, nullptr, "CardNorDirectCommand"},
{IPC::MakeHeader(0x0826, 2, 0), nullptr, "CardNorDirectCommandWithAddress"}, {0x0826, nullptr, "CardNorDirectCommandWithAddress"},
{IPC::MakeHeader(0x0827, 2, 2), nullptr, "CardNorDirectRead"}, {0x0827, nullptr, "CardNorDirectRead"},
{IPC::MakeHeader(0x0828, 3, 2), nullptr, "CardNorDirectReadWithAddress"}, {0x0828, nullptr, "CardNorDirectReadWithAddress"},
{IPC::MakeHeader(0x0829, 2, 2), nullptr, "CardNorDirectWrite"}, {0x0829, nullptr, "CardNorDirectWrite"},
{IPC::MakeHeader(0x082A, 3, 2), nullptr, "CardNorDirectWriteWithAddress"}, {0x082A, nullptr, "CardNorDirectWriteWithAddress"},
{IPC::MakeHeader(0x082B, 3, 2), nullptr, "CardNorDirectRead_4xIO"}, {0x082B, nullptr, "CardNorDirectRead_4xIO"},
{IPC::MakeHeader(0x082C, 2, 2), nullptr, "CardNorDirectCpuWriteWithoutVerify"}, {0x082C, nullptr, "CardNorDirectCpuWriteWithoutVerify"},
{IPC::MakeHeader(0x082D, 1, 0), nullptr, "CardNorDirectSectorEraseWithoutVerify"}, {0x082D, nullptr, "CardNorDirectSectorEraseWithoutVerify"},
{IPC::MakeHeader(0x082E, 1, 0), nullptr, "GetProductInfo"}, {0x082E, nullptr, "GetProductInfo"},
{IPC::MakeHeader(0x082F, 1, 0), &FS_USER::GetProgramLaunchInfo, "GetProgramLaunchInfo"}, {0x082F, &FS_USER::GetProgramLaunchInfo, "GetProgramLaunchInfo"},
{IPC::MakeHeader(0x0830, 6, 2), &FS_USER::ObsoletedCreateExtSaveData, "Obsoleted_3_0_CreateExtSaveData"}, {0x0830, &FS_USER::ObsoletedCreateExtSaveData, "Obsoleted_3_0_CreateExtSaveData"},
{IPC::MakeHeader(0x0831, 6, 0), nullptr, "CreateSharedExtSaveData"}, {0x0831, nullptr, "CreateSharedExtSaveData"},
{IPC::MakeHeader(0x0832, 4, 2), nullptr, "ReadExtSaveDataIcon"}, {0x0832, nullptr, "ReadExtSaveDataIcon"},
{IPC::MakeHeader(0x0833, 2, 2), nullptr, "EnumerateExtSaveData"}, {0x0833, nullptr, "EnumerateExtSaveData"},
{IPC::MakeHeader(0x0834, 2, 2), nullptr, "EnumerateSharedExtSaveData"}, {0x0834, nullptr, "EnumerateSharedExtSaveData"},
{IPC::MakeHeader(0x0835, 2, 0), &FS_USER::ObsoletedDeleteExtSaveData, "Obsoleted_3_0_DeleteExtSaveData"}, {0x0835, &FS_USER::ObsoletedDeleteExtSaveData, "Obsoleted_3_0_DeleteExtSaveData"},
{IPC::MakeHeader(0x0836, 2, 0), nullptr, "DeleteSharedExtSaveData"}, {0x0836, nullptr, "DeleteSharedExtSaveData"},
{IPC::MakeHeader(0x0837, 1, 0), nullptr, "SetCardSpiBaudRate"}, {0x0837, nullptr, "SetCardSpiBaudRate"},
{IPC::MakeHeader(0x0838, 1, 0), nullptr, "SetCardSpiBusMode"}, {0x0838, nullptr, "SetCardSpiBusMode"},
{IPC::MakeHeader(0x0839, 0, 0), nullptr, "SendInitializeInfoTo9"}, {0x0839, nullptr, "SendInitializeInfoTo9"},
{IPC::MakeHeader(0x083A, 4, 0), &FS_USER::GetSpecialContentIndex, "GetSpecialContentIndex"}, {0x083A, &FS_USER::GetSpecialContentIndex, "GetSpecialContentIndex"},
{IPC::MakeHeader(0x083B, 3, 2), nullptr, "GetLegacyRomHeader"}, {0x083B, nullptr, "GetLegacyRomHeader"},
{IPC::MakeHeader(0x083C, 3, 2), nullptr, "GetLegacyBannerData"}, {0x083C, nullptr, "GetLegacyBannerData"},
{IPC::MakeHeader(0x083D, 4, 0), nullptr, "CheckAuthorityToAccessExtSaveData"}, {0x083D, nullptr, "CheckAuthorityToAccessExtSaveData"},
{IPC::MakeHeader(0x083E, 3, 2), nullptr, "QueryTotalQuotaSize"}, {0x083E, nullptr, "QueryTotalQuotaSize"},
{IPC::MakeHeader(0x083F, 3, 0), nullptr, "GetExtDataBlockSize"}, {0x083F, nullptr, "GetExtDataBlockSize"},
{IPC::MakeHeader(0x0840, 1, 0), nullptr, "AbnegateAccessRight"}, {0x0840, nullptr, "AbnegateAccessRight"},
{IPC::MakeHeader(0x0841, 0, 0), nullptr, "DeleteSdmcRoot"}, {0x0841, nullptr, "DeleteSdmcRoot"},
{IPC::MakeHeader(0x0842, 1, 0), nullptr, "DeleteAllExtSaveDataOnNand"}, {0x0842, nullptr, "DeleteAllExtSaveDataOnNand"},
{IPC::MakeHeader(0x0843, 0, 0), nullptr, "InitializeCtrFileSystem"}, {0x0843, nullptr, "InitializeCtrFileSystem"},
{IPC::MakeHeader(0x0844, 0, 0), nullptr, "CreateSeed"}, {0x0844, nullptr, "CreateSeed"},
{IPC::MakeHeader(0x0845, 3, 2), &FS_USER::GetFormatInfo, "GetFormatInfo"}, {0x0845, &FS_USER::GetFormatInfo, "GetFormatInfo"},
{IPC::MakeHeader(0x0846, 4, 2), nullptr, "GetLegacyRomHeader2"}, {0x0846, nullptr, "GetLegacyRomHeader2"},
{IPC::MakeHeader(0x0847, 6, 0), nullptr, "FormatCtrCardUserSaveData"}, {0x0847, nullptr, "FormatCtrCardUserSaveData"},
{IPC::MakeHeader(0x0848, 1, 2), nullptr, "GetSdmcCtrRootPath"}, {0x0848, nullptr, "GetSdmcCtrRootPath"},
{IPC::MakeHeader(0x0849, 1, 0), &FS_USER::GetArchiveResource, "GetArchiveResource"}, {0x0849, &FS_USER::GetArchiveResource, "GetArchiveResource"},
{IPC::MakeHeader(0x084A, 0, 2), nullptr, "ExportIntegrityVerificationSeed"}, {0x084A, nullptr, "ExportIntegrityVerificationSeed"},
{IPC::MakeHeader(0x084B, 0, 2), nullptr, "ImportIntegrityVerificationSeed"}, {0x084B, nullptr, "ImportIntegrityVerificationSeed"},
{IPC::MakeHeader(0x084C, 9, 2), &FS_USER::FormatSaveData, "FormatSaveData"}, {0x084C, &FS_USER::FormatSaveData, "FormatSaveData"},
{IPC::MakeHeader(0x084D, 4, 2), nullptr, "GetLegacySubBannerData"}, {0x084D, nullptr, "GetLegacySubBannerData"},
{IPC::MakeHeader(0x084E, 13, 2), nullptr, "UpdateSha256Context"}, {0x084E, nullptr, "UpdateSha256Context"},
{IPC::MakeHeader(0x084F, 4, 2), nullptr, "ReadSpecialFile"}, {0x084F, nullptr, "ReadSpecialFile"},
{IPC::MakeHeader(0x0850, 1, 0), nullptr, "GetSpecialFileSize"}, {0x0850, nullptr, "GetSpecialFileSize"},
{IPC::MakeHeader(0x0851, 9, 2), &FS_USER::CreateExtSaveData, "CreateExtSaveData"}, {0x0851, &FS_USER::CreateExtSaveData, "CreateExtSaveData"},
{IPC::MakeHeader(0x0852, 4, 0), &FS_USER::DeleteExtSaveData, "DeleteExtSaveData"}, {0x0852, &FS_USER::DeleteExtSaveData, "DeleteExtSaveData"},
{IPC::MakeHeader(0x0853, 5, 2), nullptr, "ReadExtSaveDataIcon"}, {0x0853, nullptr, "ReadExtSaveDataIcon"},
{IPC::MakeHeader(0x0854, 3, 0), nullptr, "GetExtDataBlockSize"}, {0x0854, nullptr, "GetExtDataBlockSize"},
{IPC::MakeHeader(0x0855, 4, 2), nullptr, "EnumerateExtSaveData"}, {0x0855, nullptr, "EnumerateExtSaveData"},
{IPC::MakeHeader(0x0856, 9, 0), &FS_USER::CreateSystemSaveData, "CreateSystemSaveData"}, {0x0856, &FS_USER::CreateSystemSaveData, "CreateSystemSaveData"},
{IPC::MakeHeader(0x0857, 2, 0), &FS_USER::DeleteSystemSaveData, "DeleteSystemSaveData"}, {0x0857, &FS_USER::DeleteSystemSaveData, "DeleteSystemSaveData"},
{IPC::MakeHeader(0x0858, 0, 0), nullptr, "StartDeviceMoveAsSource"}, {0x0858, nullptr, "StartDeviceMoveAsSource"},
{IPC::MakeHeader(0x0859, 8, 0), nullptr, "StartDeviceMoveAsDestination"}, {0x0859, nullptr, "StartDeviceMoveAsDestination"},
{IPC::MakeHeader(0x085A, 3, 0), nullptr, "SetArchivePriority"}, {0x085A, nullptr, "SetArchivePriority"},
{IPC::MakeHeader(0x085B, 2, 0), nullptr, "GetArchivePriority"}, {0x085B, nullptr, "GetArchivePriority"},
{IPC::MakeHeader(0x085C, 3, 0), nullptr, "SetCtrCardLatencyParameter"}, {0x085C, nullptr, "SetCtrCardLatencyParameter"},
{IPC::MakeHeader(0x085D, 7, 0), nullptr, "SetFsCompatibilityInfo"}, {0x085D, nullptr, "SetFsCompatibilityInfo"},
{IPC::MakeHeader(0x085E, 1, 0), nullptr, "ResetCardCompatibilityParameter"}, {0x085E, nullptr, "ResetCardCompatibilityParameter"},
{IPC::MakeHeader(0x085F, 1, 0), nullptr, "SwitchCleanupInvalidSaveData"}, {0x085F, nullptr, "SwitchCleanupInvalidSaveData"},
{IPC::MakeHeader(0x0860, 1, 2), nullptr, "EnumerateSystemSaveData"}, {0x0860, nullptr, "EnumerateSystemSaveData"},
{IPC::MakeHeader(0x0861, 1, 2), &FS_USER::InitializeWithSdkVersion, "InitializeWithSdkVersion"}, {0x0861, &FS_USER::InitializeWithSdkVersion, "InitializeWithSdkVersion"},
{IPC::MakeHeader(0x0862, 1, 0), &FS_USER::SetPriority, "SetPriority"}, {0x0862, &FS_USER::SetPriority, "SetPriority"},
{IPC::MakeHeader(0x0863, 0, 0), &FS_USER::GetPriority, "GetPriority"}, {0x0863, &FS_USER::GetPriority, "GetPriority"},
{IPC::MakeHeader(0x0864, 0, 0), nullptr, "GetNandInfo"}, {0x0864, nullptr, "GetNandInfo"},
{IPC::MakeHeader(0x0865, 5, 0), &FS_USER::SetSaveDataSecureValue, "SetSaveDataSecureValue"}, {0x0865, &FS_USER::SetSaveDataSecureValue, "SetSaveDataSecureValue"},
{IPC::MakeHeader(0x0866, 3, 0), &FS_USER::GetSaveDataSecureValue, "GetSaveDataSecureValue"}, {0x0866, &FS_USER::GetSaveDataSecureValue, "GetSaveDataSecureValue"},
{IPC::MakeHeader(0x0867, 3, 4), nullptr, "ControlSecureSave"}, {0x0867, nullptr, "ControlSecureSave"},
{IPC::MakeHeader(0x0868, 0, 0), nullptr, "GetMediaType"}, {0x0868, nullptr, "GetMediaType"},
{IPC::MakeHeader(0x0869, 0, 0), nullptr, "GetNandEraseCount"}, {0x0869, nullptr, "GetNandEraseCount"},
{IPC::MakeHeader(0x086A, 2, 2), nullptr, "ReadNandReport"}, {0x086A, nullptr, "ReadNandReport"},
{IPC::MakeHeader(0x087A, 6, 0), &FS_USER::AddSeed, "AddSeed"}, {0x087A, &FS_USER::AddSeed, "AddSeed"},
{IPC::MakeHeader(0x087D, 0, 0), &FS_USER::GetNumSeeds, "GetNumSeeds"}, {0x087D, &FS_USER::GetNumSeeds, "GetNumSeeds"},
{IPC::MakeHeader(0x0886, 3, 0), nullptr, "CheckUpdatedDat"}, {0x0886, nullptr, "CheckUpdatedDat"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -231,7 +231,7 @@ static ResultCode WriteHWRegsWithMask(u32 base_address, u32 size_in_bytes, std::
} }
void GSP_GPU::WriteHWRegs(Kernel::HLERequestContext& ctx) { void GSP_GPU::WriteHWRegs(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 2, 2); IPC::RequestParser rp(ctx);
u32 reg_addr = rp.Pop<u32>(); u32 reg_addr = rp.Pop<u32>();
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
std::vector<u8> src_data = rp.PopStaticBuffer(); std::vector<u8> src_data = rp.PopStaticBuffer();
@ -241,7 +241,7 @@ void GSP_GPU::WriteHWRegs(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::WriteHWRegsWithMask(Kernel::HLERequestContext& ctx) { void GSP_GPU::WriteHWRegsWithMask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2, 2, 4); IPC::RequestParser rp(ctx);
u32 reg_addr = rp.Pop<u32>(); u32 reg_addr = rp.Pop<u32>();
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
@ -253,7 +253,7 @@ void GSP_GPU::WriteHWRegsWithMask(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::ReadHWRegs(Kernel::HLERequestContext& ctx) { void GSP_GPU::ReadHWRegs(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4, 2, 0); IPC::RequestParser rp(ctx);
u32 reg_addr = rp.Pop<u32>(); u32 reg_addr = rp.Pop<u32>();
u32 input_size = rp.Pop<u32>(); u32 input_size = rp.Pop<u32>();
@ -326,7 +326,7 @@ ResultCode SetBufferSwap(u32 screen_id, const FrameBufferInfo& info) {
} }
void GSP_GPU::SetBufferSwap(Kernel::HLERequestContext& ctx) { void GSP_GPU::SetBufferSwap(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 8, 0); IPC::RequestParser rp(ctx);
u32 screen_id = rp.Pop<u32>(); u32 screen_id = rp.Pop<u32>();
auto fb_info = rp.PopRaw<FrameBufferInfo>(); auto fb_info = rp.PopRaw<FrameBufferInfo>();
@ -335,7 +335,7 @@ void GSP_GPU::SetBufferSwap(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::FlushDataCache(Kernel::HLERequestContext& ctx) { void GSP_GPU::FlushDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x8, 2, 2); IPC::RequestParser rp(ctx);
u32 address = rp.Pop<u32>(); u32 address = rp.Pop<u32>();
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -350,7 +350,7 @@ void GSP_GPU::FlushDataCache(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::InvalidateDataCache(Kernel::HLERequestContext& ctx) { void GSP_GPU::InvalidateDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 2, 2); IPC::RequestParser rp(ctx);
u32 address = rp.Pop<u32>(); u32 address = rp.Pop<u32>();
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -365,7 +365,7 @@ void GSP_GPU::InvalidateDataCache(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::SetAxiConfigQoSMode(Kernel::HLERequestContext& ctx) { void GSP_GPU::SetAxiConfigQoSMode(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 1, 0); IPC::RequestParser rp(ctx);
u32 mode = rp.Pop<u32>(); u32 mode = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -375,7 +375,7 @@ void GSP_GPU::SetAxiConfigQoSMode(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::RegisterInterruptRelayQueue(Kernel::HLERequestContext& ctx) { void GSP_GPU::RegisterInterruptRelayQueue(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 1, 2); IPC::RequestParser rp(ctx);
u32 flags = rp.Pop<u32>(); u32 flags = rp.Pop<u32>();
auto interrupt_event = rp.PopObject<Kernel::Event>(); auto interrupt_event = rp.PopObject<Kernel::Event>();
@ -405,7 +405,7 @@ void GSP_GPU::RegisterInterruptRelayQueue(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::UnregisterInterruptRelayQueue(Kernel::HLERequestContext& ctx) { void GSP_GPU::UnregisterInterruptRelayQueue(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 0, 0); IPC::RequestParser rp(ctx);
SessionData* session_data = GetSessionData(ctx.Session()); SessionData* session_data = GetSessionData(ctx.Session());
session_data->interrupt_event = nullptr; session_data->interrupt_event = nullptr;
@ -622,7 +622,7 @@ static void ExecuteCommand(const Command& command, u32 thread_id) {
} }
void GSP_GPU::SetLcdForceBlack(Kernel::HLERequestContext& ctx) { void GSP_GPU::SetLcdForceBlack(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 1, 0); IPC::RequestParser rp(ctx);
bool enable_black = rp.Pop<bool>(); bool enable_black = rp.Pop<bool>();
LCD::Regs::ColorFill data = {0}; LCD::Regs::ColorFill data = {0};
@ -639,7 +639,7 @@ void GSP_GPU::SetLcdForceBlack(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::TriggerCmdReqQueue(Kernel::HLERequestContext& ctx) { void GSP_GPU::TriggerCmdReqQueue(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xC, 0, 0); IPC::RequestParser rp(ctx);
// Iterate through each thread's command queue... // Iterate through each thread's command queue...
for (unsigned thread_id = 0; thread_id < 0x4; ++thread_id) { for (unsigned thread_id = 0; thread_id < 0x4; ++thread_id) {
@ -662,7 +662,7 @@ void GSP_GPU::TriggerCmdReqQueue(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::ImportDisplayCaptureInfo(Kernel::HLERequestContext& ctx) { void GSP_GPU::ImportDisplayCaptureInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 0, 0); IPC::RequestParser rp(ctx);
if (active_thread_id == UINT32_MAX) { if (active_thread_id == UINT32_MAX) {
LOG_WARNING(Service_GSP, "Called without an active thread."); LOG_WARNING(Service_GSP, "Called without an active thread.");
@ -705,7 +705,7 @@ void GSP_GPU::ImportDisplayCaptureInfo(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::SaveVramSysArea(Kernel::HLERequestContext& ctx) { void GSP_GPU::SaveVramSysArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x19, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_GSP, "called"); LOG_INFO(Service_GSP, "called");
@ -721,7 +721,7 @@ void GSP_GPU::SaveVramSysArea(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::RestoreVramSysArea(Kernel::HLERequestContext& ctx) { void GSP_GPU::RestoreVramSysArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_GSP, "called"); LOG_INFO(Service_GSP, "called");
@ -738,7 +738,7 @@ void GSP_GPU::RestoreVramSysArea(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::AcquireRight(Kernel::HLERequestContext& ctx) { void GSP_GPU::AcquireRight(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 1, 2); IPC::RequestParser rp(ctx);
u32 flag = rp.Pop<u32>(); u32 flag = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -771,7 +771,7 @@ void GSP_GPU::ReleaseRight(const SessionData* session_data) {
} }
void GSP_GPU::ReleaseRight(Kernel::HLERequestContext& ctx) { void GSP_GPU::ReleaseRight(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 0, 0); IPC::RequestParser rp(ctx);
const SessionData* session_data = GetSessionData(ctx.Session()); const SessionData* session_data = GetSessionData(ctx.Session());
ReleaseRight(session_data); ReleaseRight(session_data);
@ -783,7 +783,7 @@ void GSP_GPU::ReleaseRight(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::StoreDataCache(Kernel::HLERequestContext& ctx) { void GSP_GPU::StoreDataCache(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1F, 2, 2); IPC::RequestParser rp(ctx);
u32 address = rp.Pop<u32>(); u32 address = rp.Pop<u32>();
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
@ -797,7 +797,7 @@ void GSP_GPU::StoreDataCache(Kernel::HLERequestContext& ctx) {
} }
void GSP_GPU::SetLedForceOff(Kernel::HLERequestContext& ctx) { void GSP_GPU::SetLedForceOff(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1C, 1, 0); IPC::RequestParser rp(ctx);
u8 state = rp.Pop<u8>(); u8 state = rp.Pop<u8>();
@ -822,37 +822,37 @@ SessionData* GSP_GPU::FindRegisteredThreadData(u32 thread_id) {
GSP_GPU::GSP_GPU(Core::System& system) : ServiceFramework("gsp::Gpu", 2), system(system) { GSP_GPU::GSP_GPU(Core::System& system) : ServiceFramework("gsp::Gpu", 2), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 2), &GSP_GPU::WriteHWRegs, "WriteHWRegs"}, {0x0001, &GSP_GPU::WriteHWRegs, "WriteHWRegs"},
{IPC::MakeHeader(0x0002, 2, 4), &GSP_GPU::WriteHWRegsWithMask, "WriteHWRegsWithMask"}, {0x0002, &GSP_GPU::WriteHWRegsWithMask, "WriteHWRegsWithMask"},
{IPC::MakeHeader(0x0003, 2, 2), nullptr, "WriteHWRegRepeat"}, {0x0003, nullptr, "WriteHWRegRepeat"},
{IPC::MakeHeader(0x0004, 2, 0), &GSP_GPU::ReadHWRegs, "ReadHWRegs"}, {0x0004, &GSP_GPU::ReadHWRegs, "ReadHWRegs"},
{IPC::MakeHeader(0x0005, 8, 0), &GSP_GPU::SetBufferSwap, "SetBufferSwap"}, {0x0005, &GSP_GPU::SetBufferSwap, "SetBufferSwap"},
{IPC::MakeHeader(0x0006, 2, 2), nullptr, "SetCommandList"}, {0x0006, nullptr, "SetCommandList"},
{IPC::MakeHeader(0x0007, 3, 2), nullptr, "RequestDma"}, {0x0007, nullptr, "RequestDma"},
{IPC::MakeHeader(0x0008, 2, 2), &GSP_GPU::FlushDataCache, "FlushDataCache"}, {0x0008, &GSP_GPU::FlushDataCache, "FlushDataCache"},
{IPC::MakeHeader(0x0009, 2, 2), &GSP_GPU::InvalidateDataCache, "InvalidateDataCache"}, {0x0009, &GSP_GPU::InvalidateDataCache, "InvalidateDataCache"},
{IPC::MakeHeader(0x000A, 1, 4), nullptr, "RegisterInterruptEvents"}, {0x000A, nullptr, "RegisterInterruptEvents"},
{IPC::MakeHeader(0x000B, 1, 0), &GSP_GPU::SetLcdForceBlack, "SetLcdForceBlack"}, {0x000B, &GSP_GPU::SetLcdForceBlack, "SetLcdForceBlack"},
{IPC::MakeHeader(0x000C, 0, 0), &GSP_GPU::TriggerCmdReqQueue, "TriggerCmdReqQueue"}, {0x000C, &GSP_GPU::TriggerCmdReqQueue, "TriggerCmdReqQueue"},
{IPC::MakeHeader(0x000D, 5, 0), nullptr, "SetDisplayTransfer"}, {0x000D, nullptr, "SetDisplayTransfer"},
{IPC::MakeHeader(0x000E, 6, 0), nullptr, "SetTextureCopy"}, {0x000E, nullptr, "SetTextureCopy"},
{IPC::MakeHeader(0x000F, 8, 0), nullptr, "SetMemoryFill"}, {0x000F, nullptr, "SetMemoryFill"},
{IPC::MakeHeader(0x0010, 1, 0), &GSP_GPU::SetAxiConfigQoSMode, "SetAxiConfigQoSMode"}, {0x0010, &GSP_GPU::SetAxiConfigQoSMode, "SetAxiConfigQoSMode"},
{IPC::MakeHeader(0x0011, 1, 0), nullptr, "SetPerfLogMode"}, {0x0011, nullptr, "SetPerfLogMode"},
{IPC::MakeHeader(0x0012, 0, 0), nullptr, "GetPerfLog"}, {0x0012, nullptr, "GetPerfLog"},
{IPC::MakeHeader(0x0013, 1, 2), &GSP_GPU::RegisterInterruptRelayQueue, "RegisterInterruptRelayQueue"}, {0x0013, &GSP_GPU::RegisterInterruptRelayQueue, "RegisterInterruptRelayQueue"},
{IPC::MakeHeader(0x0014, 0, 0), &GSP_GPU::UnregisterInterruptRelayQueue, "UnregisterInterruptRelayQueue"}, {0x0014, &GSP_GPU::UnregisterInterruptRelayQueue, "UnregisterInterruptRelayQueue"},
{IPC::MakeHeader(0x0015, 0, 2), nullptr, "TryAcquireRight"}, {0x0015, nullptr, "TryAcquireRight"},
{IPC::MakeHeader(0x0016, 1, 2), &GSP_GPU::AcquireRight, "AcquireRight"}, {0x0016, &GSP_GPU::AcquireRight, "AcquireRight"},
{IPC::MakeHeader(0x0017, 0, 0), &GSP_GPU::ReleaseRight, "ReleaseRight"}, {0x0017, &GSP_GPU::ReleaseRight, "ReleaseRight"},
{IPC::MakeHeader(0x0018, 0, 0), &GSP_GPU::ImportDisplayCaptureInfo, "ImportDisplayCaptureInfo"}, {0x0018, &GSP_GPU::ImportDisplayCaptureInfo, "ImportDisplayCaptureInfo"},
{IPC::MakeHeader(0x0019, 0, 0), &GSP_GPU::SaveVramSysArea, "SaveVramSysArea"}, {0x0019, &GSP_GPU::SaveVramSysArea, "SaveVramSysArea"},
{IPC::MakeHeader(0x001A, 0, 0), &GSP_GPU::RestoreVramSysArea, "RestoreVramSysArea"}, {0x001A, &GSP_GPU::RestoreVramSysArea, "RestoreVramSysArea"},
{IPC::MakeHeader(0x001B, 0, 0), nullptr, "ResetGpuCore"}, {0x001B, nullptr, "ResetGpuCore"},
{IPC::MakeHeader(0x001C, 1, 0), &GSP_GPU::SetLedForceOff, "SetLedForceOff"}, {0x001C, &GSP_GPU::SetLedForceOff, "SetLedForceOff"},
{IPC::MakeHeader(0x001D, 1, 0), nullptr, "SetTestCommand"}, {0x001D, nullptr, "SetTestCommand"},
{IPC::MakeHeader(0x001E, 2, 0), nullptr, "SetInternalPriorities"}, {0x001E, nullptr, "SetInternalPriorities"},
{IPC::MakeHeader(0x001F, 2, 2), &GSP_GPU::StoreDataCache, "StoreDataCache"}, {0x001F, &GSP_GPU::StoreDataCache, "StoreDataCache"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -13,15 +13,15 @@ namespace Service::GSP {
GSP_LCD::GSP_LCD() : ServiceFramework("gsp::Lcd") { GSP_LCD::GSP_LCD() : ServiceFramework("gsp::Lcd") {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x000A, 2, 0), nullptr, "SetBrightnessRaw"}, {0x000A, nullptr, "SetBrightnessRaw"},
{IPC::MakeHeader(0x000B, 2, 0), nullptr, "SetBrightness"}, {0x000B, nullptr, "SetBrightness"},
{IPC::MakeHeader(0x000F, 0, 0), nullptr, "PowerOnAllBacklights"}, {0x000F, nullptr, "PowerOnAllBacklights"},
{IPC::MakeHeader(0x0010, 0, 0), nullptr, "PowerOffAllBacklights"}, {0x0010, nullptr, "PowerOffAllBacklights"},
{IPC::MakeHeader(0x0011, 1, 0), nullptr, "PowerOnBacklight"}, {0x0011, nullptr, "PowerOnBacklight"},
{IPC::MakeHeader(0x0012, 1, 0), nullptr, "PowerOffBacklight"}, {0x0012, nullptr, "PowerOffBacklight"},
{IPC::MakeHeader(0x0013, 1, 0), nullptr, "SetLedForceOff"}, {0x0013, nullptr, "SetLedForceOff"},
{IPC::MakeHeader(0x0014, 0, 0), nullptr, "GetVendor"}, {0x0014, nullptr, "GetVendor"},
{IPC::MakeHeader(0x0015, 1, 0), nullptr, "GetBrightness"}, {0x0015, nullptr, "GetBrightness"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -307,7 +307,7 @@ void Module::UpdateGyroscopeCallback(std::uintptr_t user_data, s64 cycles_late)
} }
void Module::Interface::GetIPCHandles(Kernel::HLERequestContext& ctx) { void Module::Interface::GetIPCHandles(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0xA, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 7); IPC::RequestBuilder rb = rp.MakeBuilder(1, 7);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.PushCopyObjects(hid->shared_mem, hid->event_pad_or_touch_1, hid->event_pad_or_touch_2, rb.PushCopyObjects(hid->shared_mem, hid->event_pad_or_touch_1, hid->event_pad_or_touch_2,
@ -315,7 +315,7 @@ void Module::Interface::GetIPCHandles(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::EnableAccelerometer(Kernel::HLERequestContext& ctx) { void Module::Interface::EnableAccelerometer(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x11, 0, 0}; IPC::RequestParser rp(ctx);
++hid->enable_accelerometer_count; ++hid->enable_accelerometer_count;
@ -332,7 +332,7 @@ void Module::Interface::EnableAccelerometer(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DisableAccelerometer(Kernel::HLERequestContext& ctx) { void Module::Interface::DisableAccelerometer(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x12, 0, 0}; IPC::RequestParser rp(ctx);
--hid->enable_accelerometer_count; --hid->enable_accelerometer_count;
@ -348,7 +348,7 @@ void Module::Interface::DisableAccelerometer(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::EnableGyroscopeLow(Kernel::HLERequestContext& ctx) { void Module::Interface::EnableGyroscopeLow(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x13, 0, 0}; IPC::RequestParser rp(ctx);
++hid->enable_gyroscope_count; ++hid->enable_gyroscope_count;
@ -364,7 +364,7 @@ void Module::Interface::EnableGyroscopeLow(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DisableGyroscopeLow(Kernel::HLERequestContext& ctx) { void Module::Interface::DisableGyroscopeLow(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x14, 0, 0}; IPC::RequestParser rp(ctx);
--hid->enable_gyroscope_count; --hid->enable_gyroscope_count;
@ -380,7 +380,7 @@ void Module::Interface::DisableGyroscopeLow(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetGyroscopeLowRawToDpsCoefficient(Kernel::HLERequestContext& ctx) { void Module::Interface::GetGyroscopeLowRawToDpsCoefficient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x15, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -388,7 +388,7 @@ void Module::Interface::GetGyroscopeLowRawToDpsCoefficient(Kernel::HLERequestCon
} }
void Module::Interface::GetGyroscopeLowCalibrateParam(Kernel::HLERequestContext& ctx) { void Module::Interface::GetGyroscopeLowCalibrateParam(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x16, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(6, 0); IPC::RequestBuilder rb = rp.MakeBuilder(6, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -405,7 +405,7 @@ void Module::Interface::GetGyroscopeLowCalibrateParam(Kernel::HLERequestContext&
} }
void Module::Interface::GetSoundVolume(Kernel::HLERequestContext& ctx) { void Module::Interface::GetSoundVolume(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x17, 0, 0}; IPC::RequestParser rp(ctx);
const u8 volume = static_cast<u8>(0x3F * Settings::values.volume.GetValue()); const u8 volume = static_cast<u8>(0x3F * Settings::values.volume.GetValue());

View file

@ -12,18 +12,18 @@ namespace Service::HID {
Spvr::Spvr(std::shared_ptr<Module> hid) : Module::Interface(std::move(hid), "hid:SPVR", 6) { Spvr::Spvr(std::shared_ptr<Module> hid) : Module::Interface(std::move(hid), "hid:SPVR", 6) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 8, 0), nullptr, "CalibrateTouchScreen"}, {0x0001, nullptr, "CalibrateTouchScreen"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "UpdateTouchConfig"}, {0x0002, nullptr, "UpdateTouchConfig"},
{IPC::MakeHeader(0x000A, 0, 0), &Spvr::GetIPCHandles, "GetIPCHandles"}, {0x000A, &Spvr::GetIPCHandles, "GetIPCHandles"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "StartAnalogStickCalibration"}, {0x000B, nullptr, "StartAnalogStickCalibration"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetAnalogStickCalibrateParam"}, {0x000E, nullptr, "GetAnalogStickCalibrateParam"},
{IPC::MakeHeader(0x0011, 0, 0), &Spvr::EnableAccelerometer, "EnableAccelerometer"}, {0x0011, &Spvr::EnableAccelerometer, "EnableAccelerometer"},
{IPC::MakeHeader(0x0012, 0, 0), &Spvr::DisableAccelerometer, "DisableAccelerometer"}, {0x0012, &Spvr::DisableAccelerometer, "DisableAccelerometer"},
{IPC::MakeHeader(0x0013, 0, 0), &Spvr::EnableGyroscopeLow, "EnableGyroscopeLow"}, {0x0013, &Spvr::EnableGyroscopeLow, "EnableGyroscopeLow"},
{IPC::MakeHeader(0x0014, 0, 0), &Spvr::DisableGyroscopeLow, "DisableGyroscopeLow"}, {0x0014, &Spvr::DisableGyroscopeLow, "DisableGyroscopeLow"},
{IPC::MakeHeader(0x0015, 0, 0), &Spvr::GetGyroscopeLowRawToDpsCoefficient, "GetGyroscopeLowRawToDpsCoefficient"}, {0x0015, &Spvr::GetGyroscopeLowRawToDpsCoefficient, "GetGyroscopeLowRawToDpsCoefficient"},
{IPC::MakeHeader(0x0016, 0, 0), &Spvr::GetGyroscopeLowCalibrateParam, "GetGyroscopeLowCalibrateParam"}, {0x0016, &Spvr::GetGyroscopeLowCalibrateParam, "GetGyroscopeLowCalibrateParam"},
{IPC::MakeHeader(0x0017, 0, 0), &Spvr::GetSoundVolume, "GetSoundVolume"}, {0x0017, &Spvr::GetSoundVolume, "GetSoundVolume"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,18 +12,18 @@ namespace Service::HID {
User::User(std::shared_ptr<Module> hid) : Module::Interface(std::move(hid), "hid:USER", 6) { User::User(std::shared_ptr<Module> hid) : Module::Interface(std::move(hid), "hid:USER", 6) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 8, 0), nullptr, "CalibrateTouchScreen"}, {0x0001, nullptr, "CalibrateTouchScreen"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "UpdateTouchConfig"}, {0x0002, nullptr, "UpdateTouchConfig"},
{IPC::MakeHeader(0x000A, 0, 0), &User::GetIPCHandles, "GetIPCHandles"}, {0x000A, &User::GetIPCHandles, "GetIPCHandles"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "StartAnalogStickCalibration"}, {0x000B, nullptr, "StartAnalogStickCalibration"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetAnalogStickCalibrateParam"}, {0x000E, nullptr, "GetAnalogStickCalibrateParam"},
{IPC::MakeHeader(0x0011, 0, 0), &User::EnableAccelerometer, "EnableAccelerometer"}, {0x0011, &User::EnableAccelerometer, "EnableAccelerometer"},
{IPC::MakeHeader(0x0012, 0, 0), &User::DisableAccelerometer, "DisableAccelerometer"}, {0x0012, &User::DisableAccelerometer, "DisableAccelerometer"},
{IPC::MakeHeader(0x0013, 0, 0), &User::EnableGyroscopeLow, "EnableGyroscopeLow"}, {0x0013, &User::EnableGyroscopeLow, "EnableGyroscopeLow"},
{IPC::MakeHeader(0x0014, 0, 0), &User::DisableGyroscopeLow, "DisableGyroscopeLow"}, {0x0014, &User::DisableGyroscopeLow, "DisableGyroscopeLow"},
{IPC::MakeHeader(0x0015, 0, 0), &User::GetGyroscopeLowRawToDpsCoefficient, "GetGyroscopeLowRawToDpsCoefficient"}, {0x0015, &User::GetGyroscopeLowRawToDpsCoefficient, "GetGyroscopeLowRawToDpsCoefficient"},
{IPC::MakeHeader(0x0016, 0, 0), &User::GetGyroscopeLowCalibrateParam, "GetGyroscopeLowCalibrateParam"}, {0x0016, &User::GetGyroscopeLowCalibrateParam, "GetGyroscopeLowCalibrateParam"},
{IPC::MakeHeader(0x0017, 0, 0), &User::GetSoundVolume, "GetSoundVolume"}, {0x0017, &User::GetSoundVolume, "GetSoundVolume"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -115,7 +115,7 @@ void Context::MakeRequest() {
} }
void HTTP_C::Initialize(Kernel::HLERequestContext& ctx) { void HTTP_C::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 1, 4); IPC::RequestParser rp(ctx);
const u32 shmem_size = rp.Pop<u32>(); const u32 shmem_size = rp.Pop<u32>();
u32 pid = rp.PopPID(); u32 pid = rp.PopPID();
shared_memory = rp.PopObject<Kernel::SharedMemory>(); shared_memory = rp.PopObject<Kernel::SharedMemory>();
@ -145,7 +145,7 @@ void HTTP_C::Initialize(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::InitializeConnectionSession(Kernel::HLERequestContext& ctx) { void HTTP_C::InitializeConnectionSession(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x8, 1, 2); IPC::RequestParser rp(ctx);
const Context::Handle context_handle = rp.Pop<u32>(); const Context::Handle context_handle = rp.Pop<u32>();
u32 pid = rp.PopPID(); u32 pid = rp.PopPID();
@ -180,7 +180,7 @@ void HTTP_C::InitializeConnectionSession(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::BeginRequest(Kernel::HLERequestContext& ctx) { void HTTP_C::BeginRequest(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 1, 0); IPC::RequestParser rp(ctx);
const Context::Handle context_handle = rp.Pop<u32>(); const Context::Handle context_handle = rp.Pop<u32>();
LOG_WARNING(Service_HTTP, "(STUBBED) called, context_id={}", context_handle); LOG_WARNING(Service_HTTP, "(STUBBED) called, context_id={}", context_handle);
@ -233,7 +233,7 @@ void HTTP_C::BeginRequest(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::BeginRequestAsync(Kernel::HLERequestContext& ctx) { void HTTP_C::BeginRequestAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 1, 0); IPC::RequestParser rp(ctx);
const Context::Handle context_handle = rp.Pop<u32>(); const Context::Handle context_handle = rp.Pop<u32>();
LOG_WARNING(Service_HTTP, "(STUBBED) called, context_id={}", context_handle); LOG_WARNING(Service_HTTP, "(STUBBED) called, context_id={}", context_handle);
@ -286,7 +286,7 @@ void HTTP_C::BeginRequestAsync(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::CreateContext(Kernel::HLERequestContext& ctx) { void HTTP_C::CreateContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2, 2, 2); IPC::RequestParser rp(ctx);
const u32 url_size = rp.Pop<u32>(); const u32 url_size = rp.Pop<u32>();
RequestMethod method = rp.PopEnum<RequestMethod>(); RequestMethod method = rp.PopEnum<RequestMethod>();
Kernel::MappedBuffer& buffer = rp.PopMappedBuffer(); Kernel::MappedBuffer& buffer = rp.PopMappedBuffer();
@ -359,7 +359,7 @@ void HTTP_C::CreateContext(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::CloseContext(Kernel::HLERequestContext& ctx) { void HTTP_C::CloseContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3, 1, 0); IPC::RequestParser rp(ctx);
u32 context_handle = rp.Pop<u32>(); u32 context_handle = rp.Pop<u32>();
@ -399,7 +399,7 @@ void HTTP_C::CloseContext(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::AddRequestHeader(Kernel::HLERequestContext& ctx) { void HTTP_C::AddRequestHeader(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 3, 4); IPC::RequestParser rp(ctx);
const u32 context_handle = rp.Pop<u32>(); const u32 context_handle = rp.Pop<u32>();
[[maybe_unused]] const u32 name_size = rp.Pop<u32>(); [[maybe_unused]] const u32 name_size = rp.Pop<u32>();
const u32 value_size = rp.Pop<u32>(); const u32 value_size = rp.Pop<u32>();
@ -475,7 +475,7 @@ void HTTP_C::AddRequestHeader(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::AddPostDataAscii(Kernel::HLERequestContext& ctx) { void HTTP_C::AddPostDataAscii(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 3, 4); IPC::RequestParser rp(ctx);
const u32 context_handle = rp.Pop<u32>(); const u32 context_handle = rp.Pop<u32>();
[[maybe_unused]] const u32 name_size = rp.Pop<u32>(); [[maybe_unused]] const u32 name_size = rp.Pop<u32>();
const u32 value_size = rp.Pop<u32>(); const u32 value_size = rp.Pop<u32>();
@ -550,7 +550,7 @@ void HTTP_C::AddPostDataAscii(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::SetClientCertContext(Kernel::HLERequestContext& ctx) { void HTTP_C::SetClientCertContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x29, 2, 0); IPC::RequestParser rp(ctx);
const u32 context_handle = rp.Pop<u32>(); const u32 context_handle = rp.Pop<u32>();
const u32 client_cert_handle = rp.Pop<u32>(); const u32 client_cert_handle = rp.Pop<u32>();
@ -620,7 +620,7 @@ void HTTP_C::SetClientCertContext(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::GetSSLError(Kernel::HLERequestContext& ctx) { void HTTP_C::GetSSLError(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2a, 2, 0); IPC::RequestParser rp(ctx);
const u32 context_handle = rp.Pop<u32>(); const u32 context_handle = rp.Pop<u32>();
const u32 unk = rp.Pop<u32>(); const u32 unk = rp.Pop<u32>();
@ -637,7 +637,7 @@ void HTTP_C::GetSSLError(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::OpenClientCertContext(Kernel::HLERequestContext& ctx) { void HTTP_C::OpenClientCertContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x32, 2, 4); IPC::RequestParser rp(ctx);
u32 cert_size = rp.Pop<u32>(); u32 cert_size = rp.Pop<u32>();
u32 key_size = rp.Pop<u32>(); u32 key_size = rp.Pop<u32>();
Kernel::MappedBuffer& cert_buffer = rp.PopMappedBuffer(); Kernel::MappedBuffer& cert_buffer = rp.PopMappedBuffer();
@ -678,7 +678,7 @@ void HTTP_C::OpenClientCertContext(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::OpenDefaultClientCertContext(Kernel::HLERequestContext& ctx) { void HTTP_C::OpenDefaultClientCertContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x33, 1, 0); IPC::RequestParser rp(ctx);
u8 cert_id = rp.Pop<u8>(); u8 cert_id = rp.Pop<u8>();
LOG_DEBUG(Service_HTTP, "called, cert_id={} cert_handle={}", cert_id, client_certs_counter); LOG_DEBUG(Service_HTTP, "called, cert_id={} cert_handle={}", cert_id, client_certs_counter);
@ -750,7 +750,7 @@ void HTTP_C::OpenDefaultClientCertContext(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::CloseClientCertContext(Kernel::HLERequestContext& ctx) { void HTTP_C::CloseClientCertContext(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x34, 1, 0); IPC::RequestParser rp(ctx);
ClientCertContext::Handle cert_handle = rp.Pop<u32>(); ClientCertContext::Handle cert_handle = rp.Pop<u32>();
LOG_DEBUG(Service_HTTP, "called, cert_handle={}", cert_handle); LOG_DEBUG(Service_HTTP, "called, cert_handle={}", cert_handle);
@ -782,7 +782,7 @@ void HTTP_C::CloseClientCertContext(Kernel::HLERequestContext& ctx) {
} }
void HTTP_C::Finalize(Kernel::HLERequestContext& ctx) { void HTTP_C::Finalize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x39, 0, 0); IPC::RequestParser rp(ctx);
shared_memory = nullptr; shared_memory = nullptr;
@ -870,62 +870,62 @@ void HTTP_C::DecryptClCertA() {
HTTP_C::HTTP_C() : ServiceFramework("http:C", 32) { HTTP_C::HTTP_C() : ServiceFramework("http:C", 32) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 4), &HTTP_C::Initialize, "Initialize"}, {0x0001, &HTTP_C::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 2, 2), &HTTP_C::CreateContext, "CreateContext"}, {0x0002, &HTTP_C::CreateContext, "CreateContext"},
{IPC::MakeHeader(0x0003, 1, 0), &HTTP_C::CloseContext, "CloseContext"}, {0x0003, &HTTP_C::CloseContext, "CloseContext"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "CancelConnection"}, {0x0004, nullptr, "CancelConnection"},
{IPC::MakeHeader(0x0005, 1, 0), nullptr, "GetRequestState"}, {0x0005, nullptr, "GetRequestState"},
{IPC::MakeHeader(0x0006, 1, 0), nullptr, "GetDownloadSizeState"}, {0x0006, nullptr, "GetDownloadSizeState"},
{IPC::MakeHeader(0x0007, 1, 0), nullptr, "GetRequestError"}, {0x0007, nullptr, "GetRequestError"},
{IPC::MakeHeader(0x0008, 1, 2), &HTTP_C::InitializeConnectionSession, "InitializeConnectionSession"}, {0x0008, &HTTP_C::InitializeConnectionSession, "InitializeConnectionSession"},
{IPC::MakeHeader(0x0009, 1, 0), &HTTP_C::BeginRequest, "BeginRequest"}, {0x0009, &HTTP_C::BeginRequest, "BeginRequest"},
{IPC::MakeHeader(0x000A, 1, 0), &HTTP_C::BeginRequestAsync, "BeginRequestAsync"}, {0x000A, &HTTP_C::BeginRequestAsync, "BeginRequestAsync"},
{IPC::MakeHeader(0x000B, 2, 2), nullptr, "ReceiveData"}, {0x000B, nullptr, "ReceiveData"},
{IPC::MakeHeader(0x000C, 4, 2), nullptr, "ReceiveDataTimeout"}, {0x000C, nullptr, "ReceiveDataTimeout"},
{IPC::MakeHeader(0x000D, 5, 6), nullptr, "SetProxy"}, {0x000D, nullptr, "SetProxy"},
{IPC::MakeHeader(0x000E, 1, 0), nullptr, "SetProxyDefault"}, {0x000E, nullptr, "SetProxyDefault"},
{IPC::MakeHeader(0x000F, 3, 4), nullptr, "SetBasicAuthorization"}, {0x000F, nullptr, "SetBasicAuthorization"},
{IPC::MakeHeader(0x0010, 2, 0), nullptr, "SetSocketBufferSize"}, {0x0010, nullptr, "SetSocketBufferSize"},
{IPC::MakeHeader(0x0011, 3, 4), &HTTP_C::AddRequestHeader, "AddRequestHeader"}, {0x0011, &HTTP_C::AddRequestHeader, "AddRequestHeader"},
{IPC::MakeHeader(0x0012, 3, 4), &HTTP_C::AddPostDataAscii, "AddPostDataAscii"}, {0x0012, &HTTP_C::AddPostDataAscii, "AddPostDataAscii"},
{IPC::MakeHeader(0x0013, 3, 4), nullptr, "AddPostDataBinary"}, {0x0013, nullptr, "AddPostDataBinary"},
{IPC::MakeHeader(0x0014, 2, 2), nullptr, "AddPostDataRaw"}, {0x0014, nullptr, "AddPostDataRaw"},
{IPC::MakeHeader(0x0015, 2, 0), nullptr, "SetPostDataType"}, {0x0015, nullptr, "SetPostDataType"},
{IPC::MakeHeader(0x0016, 3, 4), nullptr, "SendPostDataAscii"}, {0x0016, nullptr, "SendPostDataAscii"},
{IPC::MakeHeader(0x0017, 5, 4), nullptr, "SendPostDataAsciiTimeout"}, {0x0017, nullptr, "SendPostDataAsciiTimeout"},
{IPC::MakeHeader(0x0018, 3, 4), nullptr, "SendPostDataBinary"}, {0x0018, nullptr, "SendPostDataBinary"},
{IPC::MakeHeader(0x0019, 5, 4), nullptr, "SendPostDataBinaryTimeout"}, {0x0019, nullptr, "SendPostDataBinaryTimeout"},
{IPC::MakeHeader(0x001A, 2, 2), nullptr, "SendPostDataRaw"}, {0x001A, nullptr, "SendPostDataRaw"},
{IPC::MakeHeader(0x001B, 4, 2), nullptr, "SendPOSTDataRawTimeout"}, {0x001B, nullptr, "SendPOSTDataRawTimeout"},
{IPC::MakeHeader(0x001C, 2, 0), nullptr, "SetPostDataEncoding"}, {0x001C, nullptr, "SetPostDataEncoding"},
{IPC::MakeHeader(0x001D, 1, 0), nullptr, "NotifyFinishSendPostData"}, {0x001D, nullptr, "NotifyFinishSendPostData"},
{IPC::MakeHeader(0x001E, 3, 4), nullptr, "GetResponseHeader"}, {0x001E, nullptr, "GetResponseHeader"},
{IPC::MakeHeader(0x001F, 5, 4), nullptr, "GetResponseHeaderTimeout"}, {0x001F, nullptr, "GetResponseHeaderTimeout"},
{IPC::MakeHeader(0x0020, 2, 2), nullptr, "GetResponseData"}, {0x0020, nullptr, "GetResponseData"},
{IPC::MakeHeader(0x0021, 4, 2), nullptr, "GetResponseDataTimeout"}, {0x0021, nullptr, "GetResponseDataTimeout"},
{IPC::MakeHeader(0x0022, 1, 0), nullptr, "GetResponseStatusCode"}, {0x0022, nullptr, "GetResponseStatusCode"},
{IPC::MakeHeader(0x0023, 3, 0), nullptr, "GetResponseStatusCodeTimeout"}, {0x0023, nullptr, "GetResponseStatusCodeTimeout"},
{IPC::MakeHeader(0x0024, 2, 2), nullptr, "AddTrustedRootCA"}, {0x0024, nullptr, "AddTrustedRootCA"},
{IPC::MakeHeader(0x0025, 2, 0), nullptr, "AddDefaultCert"}, {0x0025, nullptr, "AddDefaultCert"},
{IPC::MakeHeader(0x0026, 2, 0), nullptr, "SelectRootCertChain"}, {0x0026, nullptr, "SelectRootCertChain"},
{IPC::MakeHeader(0x0027, 3, 4), nullptr, "SetClientCert"}, {0x0027, nullptr, "SetClientCert"},
{IPC::MakeHeader(0x0029, 2, 0), &HTTP_C::SetClientCertContext, "SetClientCertContext"}, {0x0029, &HTTP_C::SetClientCertContext, "SetClientCertContext"},
{IPC::MakeHeader(0x002A, 1, 0), &HTTP_C::GetSSLError, "GetSSLError"}, {0x002A, &HTTP_C::GetSSLError, "GetSSLError"},
{IPC::MakeHeader(0x002B, 2, 0), nullptr, "SetSSLOpt"}, {0x002B, nullptr, "SetSSLOpt"},
{IPC::MakeHeader(0x002C, 2, 0), nullptr, "SetSSLClearOpt"}, {0x002C, nullptr, "SetSSLClearOpt"},
{IPC::MakeHeader(0x002D, 0, 0), nullptr, "CreateRootCertChain"}, {0x002D, nullptr, "CreateRootCertChain"},
{IPC::MakeHeader(0x002E, 1, 0), nullptr, "DestroyRootCertChain"}, {0x002E, nullptr, "DestroyRootCertChain"},
{IPC::MakeHeader(0x002F, 2, 2), nullptr, "RootCertChainAddCert"}, {0x002F, nullptr, "RootCertChainAddCert"},
{IPC::MakeHeader(0x0030, 2, 0), nullptr, "RootCertChainAddDefaultCert"}, {0x0030, nullptr, "RootCertChainAddDefaultCert"},
{IPC::MakeHeader(0x0031, 2, 0), nullptr, "RootCertChainRemoveCert"}, {0x0031, nullptr, "RootCertChainRemoveCert"},
{IPC::MakeHeader(0x0032, 2, 4), &HTTP_C::OpenClientCertContext, "OpenClientCertContext"}, {0x0032, &HTTP_C::OpenClientCertContext, "OpenClientCertContext"},
{IPC::MakeHeader(0x0033, 1, 0), &HTTP_C::OpenDefaultClientCertContext, "OpenDefaultClientCertContext"}, {0x0033, &HTTP_C::OpenDefaultClientCertContext, "OpenDefaultClientCertContext"},
{IPC::MakeHeader(0x0034, 1, 0), &HTTP_C::CloseClientCertContext, "CloseClientCertContext"}, {0x0034, &HTTP_C::CloseClientCertContext, "CloseClientCertContext"},
{IPC::MakeHeader(0x0035, 6, 6), nullptr, "SetDefaultProxy"}, {0x0035, nullptr, "SetDefaultProxy"},
{IPC::MakeHeader(0x0036, 0, 0), nullptr, "ClearDNSCache"}, {0x0036, nullptr, "ClearDNSCache"},
{IPC::MakeHeader(0x0037, 2, 0), nullptr, "SetKeepAlive"}, {0x0037, nullptr, "SetKeepAlive"},
{IPC::MakeHeader(0x0038, 3, 0), nullptr, "SetPostDataTypeSize"}, {0x0038, nullptr, "SetPostDataTypeSize"},
{IPC::MakeHeader(0x0039, 0, 0), &HTTP_C::Finalize, "Finalize"}, {0x0039, &HTTP_C::Finalize, "Finalize"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -128,14 +128,14 @@ void IR_RST::UpdateCallback(std::uintptr_t user_data, s64 cycles_late) {
} }
void IR_RST::GetHandles(Kernel::HLERequestContext& ctx) { void IR_RST::GetHandles(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); IPC::RequestBuilder rb = rp.MakeBuilder(1, 3);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.PushMoveObjects(shared_memory, update_event); rb.PushMoveObjects(shared_memory, update_event);
} }
void IR_RST::Initialize(Kernel::HLERequestContext& ctx) { void IR_RST::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 2, 0); IPC::RequestParser rp(ctx);
update_period = static_cast<int>(rp.Pop<u32>()); update_period = static_cast<int>(rp.Pop<u32>());
raw_c_stick = rp.Pop<bool>(); raw_c_stick = rp.Pop<bool>();
@ -153,7 +153,7 @@ void IR_RST::Initialize(Kernel::HLERequestContext& ctx) {
} }
void IR_RST::Shutdown(Kernel::HLERequestContext& ctx) { void IR_RST::Shutdown(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 0, 0); IPC::RequestParser rp(ctx);
system.CoreTiming().UnscheduleEvent(update_callback_id, 0); system.CoreTiming().UnscheduleEvent(update_callback_id, 0);
UnloadInputDevices(); UnloadInputDevices();
@ -181,10 +181,10 @@ IR_RST::IR_RST(Core::System& system) : ServiceFramework("ir:rst", 1), system(sys
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 0), &IR_RST::GetHandles, "GetHandles"}, {0x0001, &IR_RST::GetHandles, "GetHandles"},
{IPC::MakeHeader(0x0002, 2, 0), &IR_RST::Initialize, "Initialize"}, {0x0002, &IR_RST::Initialize, "Initialize"},
{IPC::MakeHeader(0x0003, 0, 0), &IR_RST::Shutdown, "Shutdown"}, {0x0003, &IR_RST::Shutdown, "Shutdown"},
{IPC::MakeHeader(0x0009, 0, 0), nullptr, "WriteToTwoFields"}, {0x0009, nullptr, "WriteToTwoFields"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,24 +12,24 @@ namespace Service::IR {
IR_U::IR_U() : ServiceFramework("ir:u", 1) { IR_U::IR_U() : ServiceFramework("ir:u", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 0), nullptr, "Initialize"}, {0x0001, nullptr, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Shutdown"}, {0x0002, nullptr, "Shutdown"},
{IPC::MakeHeader(0x0003, 1, 2), nullptr, "StartSendTransfer"}, {0x0003, nullptr, "StartSendTransfer"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "WaitSendTransfer"}, {0x0004, nullptr, "WaitSendTransfer"},
{IPC::MakeHeader(0x0005, 3, 2), nullptr, "StartRecvTransfer"}, {0x0005, nullptr, "StartRecvTransfer"},
{IPC::MakeHeader(0x0006, 0, 0), nullptr, "WaitRecvTransfer"}, {0x0006, nullptr, "WaitRecvTransfer"},
{IPC::MakeHeader(0x0007, 2, 0), nullptr, "GetRecvTransferCount"}, {0x0007, nullptr, "GetRecvTransferCount"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "GetSendState"}, {0x0008, nullptr, "GetSendState"},
{IPC::MakeHeader(0x0009, 1, 0), nullptr, "SetBitRate"}, {0x0009, nullptr, "SetBitRate"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetBitRate"}, {0x000A, nullptr, "GetBitRate"},
{IPC::MakeHeader(0x000B, 1, 0), nullptr, "SetIRLEDState"}, {0x000B, nullptr, "SetIRLEDState"},
{IPC::MakeHeader(0x000C, 0, 0), nullptr, "GetIRLEDRecvState"}, {0x000C, nullptr, "GetIRLEDRecvState"},
{IPC::MakeHeader(0x000D, 0, 0), nullptr, "GetSendFinishedEvent"}, {0x000D, nullptr, "GetSendFinishedEvent"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetRecvFinishedEvent"}, {0x000E, nullptr, "GetRecvFinishedEvent"},
{IPC::MakeHeader(0x000F, 0, 0), nullptr, "GetTransferState"}, {0x000F, nullptr, "GetTransferState"},
{IPC::MakeHeader(0x0010, 0, 0), nullptr, "GetErrorStatus"}, {0x0010, nullptr, "GetErrorStatus"},
{IPC::MakeHeader(0x0011, 1, 0), nullptr, "SetSleepModeActive"}, {0x0011, nullptr, "SetSleepModeActive"},
{IPC::MakeHeader(0x0012, 1, 0), nullptr, "SetSleepModeState"}, {0x0012, nullptr, "SetSleepModeState"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -274,7 +274,7 @@ void IR_USER::PutToReceive(std::span<const u8> payload) {
} }
void IR_USER::InitializeIrNopShared(Kernel::HLERequestContext& ctx) { void IR_USER::InitializeIrNopShared(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 6, 2); IPC::RequestParser rp(ctx);
const u32 shared_buff_size = rp.Pop<u32>(); const u32 shared_buff_size = rp.Pop<u32>();
const u32 recv_buff_size = rp.Pop<u32>(); const u32 recv_buff_size = rp.Pop<u32>();
const u32 recv_buff_packet_count = rp.Pop<u32>(); const u32 recv_buff_packet_count = rp.Pop<u32>();
@ -304,7 +304,7 @@ void IR_USER::InitializeIrNopShared(Kernel::HLERequestContext& ctx) {
} }
void IR_USER::RequireConnection(Kernel::HLERequestContext& ctx) { void IR_USER::RequireConnection(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 1, 0); IPC::RequestParser rp(ctx);
const u8 device_id = rp.Pop<u8>(); const u8 device_id = rp.Pop<u8>();
u8* shared_memory_ptr = shared_memory->GetPointer(); u8* shared_memory_ptr = shared_memory->GetPointer();
@ -390,7 +390,7 @@ void IR_USER::FinalizeIrNop(Kernel::HLERequestContext& ctx) {
} }
void IR_USER::SendIrNop(Kernel::HLERequestContext& ctx) { void IR_USER::SendIrNop(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 1, 2); IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
std::vector<u8> buffer = rp.PopStaticBuffer(); std::vector<u8> buffer = rp.PopStaticBuffer();
ASSERT(size == buffer.size()); ASSERT(size == buffer.size());
@ -410,7 +410,7 @@ void IR_USER::SendIrNop(Kernel::HLERequestContext& ctx) {
} }
void IR_USER::ReleaseReceivedData(Kernel::HLERequestContext& ctx) { void IR_USER::ReleaseReceivedData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x19, 1, 0); IPC::RequestParser rp(ctx);
u32 count = rp.Pop<u32>(); u32 count = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -429,32 +429,32 @@ void IR_USER::ReleaseReceivedData(Kernel::HLERequestContext& ctx) {
IR_USER::IR_USER(Core::System& system) : ServiceFramework("ir:USER", 1) { IR_USER::IR_USER(Core::System& system) : ServiceFramework("ir:USER", 1) {
const FunctionInfo functions[] = { const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 6, 2), nullptr, "InitializeIrNop"}, {0x0001, nullptr, "InitializeIrNop"},
{IPC::MakeHeader(0x0002, 0, 0), &IR_USER::FinalizeIrNop, "FinalizeIrNop"}, {0x0002, &IR_USER::FinalizeIrNop, "FinalizeIrNop"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "ClearReceiveBuffer"}, {0x0003, nullptr, "ClearReceiveBuffer"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "ClearSendBuffer"}, {0x0004, nullptr, "ClearSendBuffer"},
{IPC::MakeHeader(0x0005, 3, 0), nullptr, "WaitConnection"}, {0x0005, nullptr, "WaitConnection"},
{IPC::MakeHeader(0x0006, 1, 0), &IR_USER::RequireConnection, "RequireConnection"}, {0x0006, &IR_USER::RequireConnection, "RequireConnection"},
{IPC::MakeHeader(0x0007, 11, 0), nullptr, "AutoConnection"}, {0x0007, nullptr, "AutoConnection"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "AnyConnection"}, {0x0008, nullptr, "AnyConnection"},
{IPC::MakeHeader(0x0009, 0, 0), &IR_USER::Disconnect, "Disconnect"}, {0x0009, &IR_USER::Disconnect, "Disconnect"},
{IPC::MakeHeader(0x000A, 0, 0), &IR_USER::GetReceiveEvent, "GetReceiveEvent"}, {0x000A, &IR_USER::GetReceiveEvent, "GetReceiveEvent"},
{IPC::MakeHeader(0x000B, 0, 0), &IR_USER::GetSendEvent, "GetSendEvent"}, {0x000B, &IR_USER::GetSendEvent, "GetSendEvent"},
{IPC::MakeHeader(0x000C, 0, 0), &IR_USER::GetConnectionStatusEvent, "GetConnectionStatusEvent"}, {0x000C, &IR_USER::GetConnectionStatusEvent, "GetConnectionStatusEvent"},
{IPC::MakeHeader(0x000D, 1, 2), &IR_USER::SendIrNop, "SendIrNop"}, {0x000D, &IR_USER::SendIrNop, "SendIrNop"},
{IPC::MakeHeader(0x000E, 1, 2), nullptr, "SendIrNopLarge"}, {0x000E, nullptr, "SendIrNopLarge"},
{IPC::MakeHeader(0x000F, 1, 0), nullptr, "ReceiveIrnop"}, {0x000F, nullptr, "ReceiveIrnop"},
{IPC::MakeHeader(0x0010, 1, 2), nullptr, "ReceiveIrnopLarge"}, {0x0010, nullptr, "ReceiveIrnopLarge"},
{IPC::MakeHeader(0x0011, 1, 0), nullptr, "GetLatestReceiveErrorResult"}, {0x0011, nullptr, "GetLatestReceiveErrorResult"},
{IPC::MakeHeader(0x0012, 1, 0), nullptr, "GetLatestSendErrorResult"}, {0x0012, nullptr, "GetLatestSendErrorResult"},
{IPC::MakeHeader(0x0013, 0, 0), nullptr, "GetConnectionStatus"}, {0x0013, nullptr, "GetConnectionStatus"},
{IPC::MakeHeader(0x0014, 0, 0), nullptr, "GetTryingToConnectStatus"}, {0x0014, nullptr, "GetTryingToConnectStatus"},
{IPC::MakeHeader(0x0015, 0, 0), nullptr, "GetReceiveSizeFreeAndUsed"}, {0x0015, nullptr, "GetReceiveSizeFreeAndUsed"},
{IPC::MakeHeader(0x0016, 0, 0), nullptr, "GetSendSizeFreeAndUsed"}, {0x0016, nullptr, "GetSendSizeFreeAndUsed"},
{IPC::MakeHeader(0x0017, 0, 0), nullptr, "GetConnectionRole"}, {0x0017, nullptr, "GetConnectionRole"},
{IPC::MakeHeader(0x0018, 6, 2), &IR_USER::InitializeIrNopShared, "InitializeIrNopShared"}, {0x0018, &IR_USER::InitializeIrNopShared, "InitializeIrNopShared"},
{IPC::MakeHeader(0x0019, 1, 0), &IR_USER::ReleaseReceivedData, "ReleaseReceivedData"}, {0x0019, &IR_USER::ReleaseReceivedData, "ReleaseReceivedData"},
{IPC::MakeHeader(0x001A, 1, 0), nullptr, "SetOwnMachineId"}, {0x001A, nullptr, "SetOwnMachineId"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -60,7 +60,7 @@ static bool VerifyBufferState(Kernel::Process& process, VAddr buffer_ptr, u32 si
} }
void RO::Initialize(Kernel::HLERequestContext& ctx) { void RO::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 3, 2); IPC::RequestParser rp(ctx);
VAddr crs_buffer_ptr = rp.Pop<u32>(); VAddr crs_buffer_ptr = rp.Pop<u32>();
u32 crs_size = rp.Pop<u32>(); u32 crs_size = rp.Pop<u32>();
VAddr crs_address = rp.Pop<u32>(); VAddr crs_address = rp.Pop<u32>();
@ -143,7 +143,7 @@ void RO::Initialize(Kernel::HLERequestContext& ctx) {
} }
void RO::LoadCRR(Kernel::HLERequestContext& ctx) { void RO::LoadCRR(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 2, 2); IPC::RequestParser rp(ctx);
VAddr crr_buffer_ptr = rp.Pop<u32>(); VAddr crr_buffer_ptr = rp.Pop<u32>();
u32 crr_size = rp.Pop<u32>(); u32 crr_size = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -156,7 +156,7 @@ void RO::LoadCRR(Kernel::HLERequestContext& ctx) {
} }
void RO::UnloadCRR(Kernel::HLERequestContext& ctx) { void RO::UnloadCRR(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 1, 2); IPC::RequestParser rp(ctx);
u32 crr_buffer_ptr = rp.Pop<u32>(); u32 crr_buffer_ptr = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -167,7 +167,7 @@ void RO::UnloadCRR(Kernel::HLERequestContext& ctx) {
} }
void RO::LoadCRO(Kernel::HLERequestContext& ctx, bool link_on_load_bug_fix) { void RO::LoadCRO(Kernel::HLERequestContext& ctx, bool link_on_load_bug_fix) {
IPC::RequestParser rp(ctx, link_on_load_bug_fix ? 0x09 : 0x04, 11, 2); IPC::RequestParser rp(ctx);
VAddr cro_buffer_ptr = rp.Pop<u32>(); VAddr cro_buffer_ptr = rp.Pop<u32>();
VAddr cro_address = rp.Pop<u32>(); VAddr cro_address = rp.Pop<u32>();
u32 cro_size = rp.Pop<u32>(); u32 cro_size = rp.Pop<u32>();
@ -334,7 +334,7 @@ void RO::LoadCRO(Kernel::HLERequestContext& ctx, bool link_on_load_bug_fix) {
} }
void RO::UnloadCRO(Kernel::HLERequestContext& ctx) { void RO::UnloadCRO(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 3, 2); IPC::RequestParser rp(ctx);
VAddr cro_address = rp.Pop<u32>(); VAddr cro_address = rp.Pop<u32>();
u32 zero = rp.Pop<u32>(); u32 zero = rp.Pop<u32>();
VAddr cro_buffer_ptr = rp.Pop<u32>(); VAddr cro_buffer_ptr = rp.Pop<u32>();
@ -404,7 +404,7 @@ void RO::UnloadCRO(Kernel::HLERequestContext& ctx) {
} }
void RO::LinkCRO(Kernel::HLERequestContext& ctx) { void RO::LinkCRO(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 1, 2); IPC::RequestParser rp(ctx);
VAddr cro_address = rp.Pop<u32>(); VAddr cro_address = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -444,7 +444,7 @@ void RO::LinkCRO(Kernel::HLERequestContext& ctx) {
} }
void RO::UnlinkCRO(Kernel::HLERequestContext& ctx) { void RO::UnlinkCRO(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 1, 2); IPC::RequestParser rp(ctx);
VAddr cro_address = rp.Pop<u32>(); VAddr cro_address = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -484,7 +484,7 @@ void RO::UnlinkCRO(Kernel::HLERequestContext& ctx) {
} }
void RO::Shutdown(Kernel::HLERequestContext& ctx) { void RO::Shutdown(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 1, 2); IPC::RequestParser rp(ctx);
VAddr crs_buffer_ptr = rp.Pop<u32>(); VAddr crs_buffer_ptr = rp.Pop<u32>();
auto process = rp.PopObject<Kernel::Process>(); auto process = rp.PopObject<Kernel::Process>();
@ -517,15 +517,15 @@ void RO::Shutdown(Kernel::HLERequestContext& ctx) {
RO::RO(Core::System& system) : ServiceFramework("ldr:ro", 2), system(system) { RO::RO(Core::System& system) : ServiceFramework("ldr:ro", 2), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 2), &RO::Initialize, "Initialize"}, {0x0001, &RO::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 2, 2), &RO::LoadCRR, "LoadCRR"}, {0x0002, &RO::LoadCRR, "LoadCRR"},
{IPC::MakeHeader(0x0003, 1, 2), &RO::UnloadCRR, "UnloadCRR"}, {0x0003, &RO::UnloadCRR, "UnloadCRR"},
{IPC::MakeHeader(0x0004, 11, 2), &RO::LoadCRO<false>, "LoadCRO"}, {0x0004, &RO::LoadCRO<false>, "LoadCRO"},
{IPC::MakeHeader(0x0005, 3, 2), &RO::UnloadCRO, "UnloadCRO"}, {0x0005, &RO::UnloadCRO, "UnloadCRO"},
{IPC::MakeHeader(0x0006, 1, 2), &RO::LinkCRO, "LinkCRO"}, {0x0006, &RO::LinkCRO, "LinkCRO"},
{IPC::MakeHeader(0x0007, 1, 2), &RO::UnlinkCRO, "UnlinkCRO"}, {0x0007, &RO::UnlinkCRO, "UnlinkCRO"},
{IPC::MakeHeader(0x0008, 1, 2), &RO::Shutdown, "Shutdown"}, {0x0008, &RO::Shutdown, "Shutdown"},
{IPC::MakeHeader(0x0009, 11, 2), &RO::LoadCRO<true>, "LoadCRO_New"}, {0x0009, &RO::LoadCRO<true>, "LoadCRO_New"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -141,7 +141,7 @@ struct MIC_U::Impl {
} }
void MapSharedMem(Kernel::HLERequestContext& ctx) { void MapSharedMem(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x01, 1, 2}; IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
shared_memory = rp.PopObject<Kernel::SharedMemory>(); shared_memory = rp.PopObject<Kernel::SharedMemory>();
@ -159,7 +159,7 @@ struct MIC_U::Impl {
} }
void UnmapSharedMem(Kernel::HLERequestContext& ctx) { void UnmapSharedMem(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x02, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
shared_memory = nullptr; shared_memory = nullptr;
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -196,7 +196,7 @@ struct MIC_U::Impl {
} }
void StartSampling(Kernel::HLERequestContext& ctx) { void StartSampling(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x03, 5, 0}; IPC::RequestParser rp(ctx);
encoding = rp.PopEnum<Encoding>(); encoding = rp.PopEnum<Encoding>();
SampleRate sample_rate = rp.PopEnum<SampleRate>(); SampleRate sample_rate = rp.PopEnum<SampleRate>();
@ -231,7 +231,7 @@ struct MIC_U::Impl {
} }
void AdjustSampling(Kernel::HLERequestContext& ctx) { void AdjustSampling(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x04, 1, 0}; IPC::RequestParser rp(ctx);
SampleRate sample_rate = rp.PopEnum<SampleRate>(); SampleRate sample_rate = rp.PopEnum<SampleRate>();
mic->AdjustSampleRate(GetSampleRateInHz(sample_rate)); mic->AdjustSampleRate(GetSampleRateInHz(sample_rate));
@ -241,7 +241,7 @@ struct MIC_U::Impl {
} }
void StopSampling(Kernel::HLERequestContext& ctx) { void StopSampling(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x05, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -251,7 +251,7 @@ struct MIC_U::Impl {
} }
void IsSampling(Kernel::HLERequestContext& ctx) { void IsSampling(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x06, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -261,7 +261,7 @@ struct MIC_U::Impl {
} }
void GetBufferFullEvent(Kernel::HLERequestContext& ctx) { void GetBufferFullEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x07, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -270,7 +270,7 @@ struct MIC_U::Impl {
} }
void SetGain(Kernel::HLERequestContext& ctx) { void SetGain(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x08, 1, 0}; IPC::RequestParser rp(ctx);
u8 gain = rp.Pop<u8>(); u8 gain = rp.Pop<u8>();
mic->SetGain(gain); mic->SetGain(gain);
@ -280,7 +280,7 @@ struct MIC_U::Impl {
} }
void GetGain(Kernel::HLERequestContext& ctx) { void GetGain(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x09, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -290,7 +290,7 @@ struct MIC_U::Impl {
} }
void SetPower(Kernel::HLERequestContext& ctx) { void SetPower(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x0A, 1, 0}; IPC::RequestParser rp(ctx);
bool power = rp.Pop<bool>(); bool power = rp.Pop<bool>();
mic->SetPower(power); mic->SetPower(power);
@ -300,7 +300,7 @@ struct MIC_U::Impl {
} }
void GetPower(Kernel::HLERequestContext& ctx) { void GetPower(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x0B, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -310,7 +310,7 @@ struct MIC_U::Impl {
} }
void SetIirFilterMic(Kernel::HLERequestContext& ctx) { void SetIirFilterMic(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x0C, 1, 2}; IPC::RequestParser rp(ctx);
const u32 size = rp.Pop<u32>(); const u32 size = rp.Pop<u32>();
const Kernel::MappedBuffer& buffer = rp.PopMappedBuffer(); const Kernel::MappedBuffer& buffer = rp.PopMappedBuffer();
@ -322,7 +322,7 @@ struct MIC_U::Impl {
} }
void SetClamp(Kernel::HLERequestContext& ctx) { void SetClamp(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x0D, 1, 0}; IPC::RequestParser rp(ctx);
clamp = rp.Pop<bool>(); clamp = rp.Pop<bool>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -331,7 +331,7 @@ struct MIC_U::Impl {
} }
void GetClamp(Kernel::HLERequestContext& ctx) { void GetClamp(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x0E, 0, 0}; IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -340,7 +340,7 @@ struct MIC_U::Impl {
} }
void SetAllowShellClosed(Kernel::HLERequestContext& ctx) { void SetAllowShellClosed(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x0F, 1, 0}; IPC::RequestParser rp(ctx);
allow_shell_closed = rp.Pop<bool>(); allow_shell_closed = rp.Pop<bool>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -349,7 +349,7 @@ struct MIC_U::Impl {
} }
void SetClientVersion(Kernel::HLERequestContext& ctx) { void SetClientVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx, 0x10, 1, 0}; IPC::RequestParser rp(ctx);
const u32 version = rp.Pop<u32>(); const u32 version = rp.Pop<u32>();
LOG_WARNING(Service_MIC, "(STUBBED) called, version: 0x{:08X}", version); LOG_WARNING(Service_MIC, "(STUBBED) called, version: 0x{:08X}", version);
@ -486,22 +486,22 @@ MIC_U::MIC_U(Core::System& system)
: ServiceFramework{"mic:u", 1}, impl{std::make_unique<Impl>(system)} { : ServiceFramework{"mic:u", 1}, impl{std::make_unique<Impl>(system)} {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 2), &MIC_U::MapSharedMem, "MapSharedMem"}, {0x0001, &MIC_U::MapSharedMem, "MapSharedMem"},
{IPC::MakeHeader(0x0002, 0, 0), &MIC_U::UnmapSharedMem, "UnmapSharedMem"}, {0x0002, &MIC_U::UnmapSharedMem, "UnmapSharedMem"},
{IPC::MakeHeader(0x0003, 5, 0), &MIC_U::StartSampling, "StartSampling"}, {0x0003, &MIC_U::StartSampling, "StartSampling"},
{IPC::MakeHeader(0x0004, 1, 0), &MIC_U::AdjustSampling, "AdjustSampling"}, {0x0004, &MIC_U::AdjustSampling, "AdjustSampling"},
{IPC::MakeHeader(0x0005, 0, 0), &MIC_U::StopSampling, "StopSampling"}, {0x0005, &MIC_U::StopSampling, "StopSampling"},
{IPC::MakeHeader(0x0006, 0, 0), &MIC_U::IsSampling, "IsSampling"}, {0x0006, &MIC_U::IsSampling, "IsSampling"},
{IPC::MakeHeader(0x0007, 0, 0), &MIC_U::GetBufferFullEvent, "GetBufferFullEvent"}, {0x0007, &MIC_U::GetBufferFullEvent, "GetBufferFullEvent"},
{IPC::MakeHeader(0x0008, 1, 0), &MIC_U::SetGain, "SetGain"}, {0x0008, &MIC_U::SetGain, "SetGain"},
{IPC::MakeHeader(0x0009, 0, 0), &MIC_U::GetGain, "GetGain"}, {0x0009, &MIC_U::GetGain, "GetGain"},
{IPC::MakeHeader(0x000A, 1, 0), &MIC_U::SetPower, "SetPower"}, {0x000A, &MIC_U::SetPower, "SetPower"},
{IPC::MakeHeader(0x000B, 0, 0), &MIC_U::GetPower, "GetPower"}, {0x000B, &MIC_U::GetPower, "GetPower"},
{IPC::MakeHeader(0x000C, 1, 2), &MIC_U::SetIirFilterMic, "SetIirFilterMic"}, {0x000C, &MIC_U::SetIirFilterMic, "SetIirFilterMic"},
{IPC::MakeHeader(0x000D, 1, 0), &MIC_U::SetClamp, "SetClamp"}, {0x000D, &MIC_U::SetClamp, "SetClamp"},
{IPC::MakeHeader(0x000E, 0, 0), &MIC_U::GetClamp, "GetClamp"}, {0x000E, &MIC_U::GetClamp, "GetClamp"},
{IPC::MakeHeader(0x000F, 1, 0), &MIC_U::SetAllowShellClosed, "SetAllowShellClosed"}, {0x000F, &MIC_U::SetAllowShellClosed, "SetAllowShellClosed"},
{IPC::MakeHeader(0x0010, 1, 0), &MIC_U::SetClientVersion, "SetClientVersion"}, {0x0010, &MIC_U::SetClientVersion, "SetClientVersion"},
// clang-format on // clang-format on
}; };

View file

@ -13,18 +13,18 @@ namespace Service::MVD {
MVD_STD::MVD_STD() : ServiceFramework("mvd:std", 1) { MVD_STD::MVD_STD() : ServiceFramework("mvd:std", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 2), nullptr, "Initialize"}, {0x0001, nullptr, "Initialize"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Shutdown"}, {0x0002, nullptr, "Shutdown"},
{IPC::MakeHeader(0x0003, 12, 0), nullptr, "CalculateWorkBufSize"}, {0x0003, nullptr, "CalculateWorkBufSize"},
{IPC::MakeHeader(0x0004, 3, 0), nullptr, "CalculateImageSize"}, {0x0004, nullptr, "CalculateImageSize"},
{IPC::MakeHeader(0x0008, 5, 2), nullptr, "ProcessNALUnit"}, {0x0008, nullptr, "ProcessNALUnit"},
{IPC::MakeHeader(0x0009, 1, 2), nullptr, "ControlFrameRendering"}, {0x0009, nullptr, "ControlFrameRendering"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetStatus"}, {0x000A, nullptr, "GetStatus"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "GetStatusOther"}, {0x000B, nullptr, "GetStatusOther"},
{IPC::MakeHeader(0x001D, 1, 2), nullptr, "GetConfig"}, {0x001D, nullptr, "GetConfig"},
{IPC::MakeHeader(0x001E, 1, 4), nullptr, "SetConfig"}, {0x001E, nullptr, "SetConfig"},
{IPC::MakeHeader(0x001F, 36, 2), nullptr, "SetOutputBuffer"}, {0x001F, nullptr, "SetOutputBuffer"},
{IPC::MakeHeader(0x0021, 4, 0), nullptr, "OverrideOutputBuffers"} {0x0021, nullptr, "OverrideOutputBuffers"}
// clang-format on // clang-format on
}; };

View file

@ -12,7 +12,7 @@ SERIALIZE_EXPORT_IMPL(Service::NDM::NDM_U)
namespace Service::NDM { namespace Service::NDM {
void NDM_U::EnterExclusiveState(Kernel::HLERequestContext& ctx) { void NDM_U::EnterExclusiveState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 1, 2); IPC::RequestParser rp(ctx);
exclusive_state = rp.PopEnum<ExclusiveState>(); exclusive_state = rp.PopEnum<ExclusiveState>();
rp.PopPID(); rp.PopPID();
@ -22,7 +22,7 @@ void NDM_U::EnterExclusiveState(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::LeaveExclusiveState(Kernel::HLERequestContext& ctx) { void NDM_U::LeaveExclusiveState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 0, 2); IPC::RequestParser rp(ctx);
rp.PopPID(); rp.PopPID();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -31,7 +31,7 @@ void NDM_U::LeaveExclusiveState(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::QueryExclusiveMode(Kernel::HLERequestContext& ctx) { void NDM_U::QueryExclusiveMode(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.PushEnum(exclusive_state); rb.PushEnum(exclusive_state);
@ -39,7 +39,7 @@ void NDM_U::QueryExclusiveMode(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::LockState(Kernel::HLERequestContext& ctx) { void NDM_U::LockState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 0, 2); IPC::RequestParser rp(ctx);
rp.PopPID(); rp.PopPID();
daemon_lock_enabled = true; daemon_lock_enabled = true;
@ -49,7 +49,7 @@ void NDM_U::LockState(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::UnlockState(Kernel::HLERequestContext& ctx) { void NDM_U::UnlockState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 0, 2); IPC::RequestParser rp(ctx);
rp.PopPID(); rp.PopPID();
daemon_lock_enabled = false; daemon_lock_enabled = false;
@ -59,7 +59,7 @@ void NDM_U::UnlockState(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::SuspendDaemons(Kernel::HLERequestContext& ctx) { void NDM_U::SuspendDaemons(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 1, 0); IPC::RequestParser rp(ctx);
u32 bit_mask = rp.Pop<u32>() & 0xF; u32 bit_mask = rp.Pop<u32>() & 0xF;
daemon_bit_mask = daemon_bit_mask =
static_cast<DaemonMask>(static_cast<u32>(default_daemon_bit_mask) & ~bit_mask); static_cast<DaemonMask>(static_cast<u32>(default_daemon_bit_mask) & ~bit_mask);
@ -75,7 +75,7 @@ void NDM_U::SuspendDaemons(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::ResumeDaemons(Kernel::HLERequestContext& ctx) { void NDM_U::ResumeDaemons(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 1, 0); IPC::RequestParser rp(ctx);
u32 bit_mask = rp.Pop<u32>() & 0xF; u32 bit_mask = rp.Pop<u32>() & 0xF;
daemon_bit_mask = static_cast<DaemonMask>(static_cast<u32>(daemon_bit_mask) & ~bit_mask); daemon_bit_mask = static_cast<DaemonMask>(static_cast<u32>(daemon_bit_mask) & ~bit_mask);
for (std::size_t index = 0; index < daemon_status.size(); ++index) { for (std::size_t index = 0; index < daemon_status.size(); ++index) {
@ -90,7 +90,7 @@ void NDM_U::ResumeDaemons(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::SuspendScheduler(Kernel::HLERequestContext& ctx) { void NDM_U::SuspendScheduler(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 1, 0); IPC::RequestParser rp(ctx);
bool perform_in_background = rp.Pop<bool>(); bool perform_in_background = rp.Pop<bool>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -99,14 +99,14 @@ void NDM_U::SuspendScheduler(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::ResumeScheduler(Kernel::HLERequestContext& ctx) { void NDM_U::ResumeScheduler(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_NDM, "(STUBBED)"); LOG_WARNING(Service_NDM, "(STUBBED)");
} }
void NDM_U::QueryStatus(Kernel::HLERequestContext& ctx) { void NDM_U::QueryStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 1, 0); IPC::RequestParser rp(ctx);
u8 daemon = rp.Pop<u8>(); u8 daemon = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
@ -116,7 +116,7 @@ void NDM_U::QueryStatus(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::GetDaemonDisableCount(Kernel::HLERequestContext& ctx) { void NDM_U::GetDaemonDisableCount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0E, 1, 0); IPC::RequestParser rp(ctx);
u8 daemon = rp.Pop<u8>(); u8 daemon = rp.Pop<u8>();
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
@ -127,7 +127,7 @@ void NDM_U::GetDaemonDisableCount(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::GetSchedulerDisableCount(Kernel::HLERequestContext& ctx) { void NDM_U::GetSchedulerDisableCount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -137,7 +137,7 @@ void NDM_U::GetSchedulerDisableCount(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::SetScanInterval(Kernel::HLERequestContext& ctx) { void NDM_U::SetScanInterval(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 1, 0); IPC::RequestParser rp(ctx);
scan_interval = rp.Pop<u32>(); scan_interval = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -146,7 +146,7 @@ void NDM_U::SetScanInterval(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::GetScanInterval(Kernel::HLERequestContext& ctx) { void NDM_U::GetScanInterval(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push(scan_interval); rb.Push(scan_interval);
@ -154,7 +154,7 @@ void NDM_U::GetScanInterval(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::SetRetryInterval(Kernel::HLERequestContext& ctx) { void NDM_U::SetRetryInterval(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 1, 0); IPC::RequestParser rp(ctx);
retry_interval = rp.Pop<u32>(); retry_interval = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -163,7 +163,7 @@ void NDM_U::SetRetryInterval(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::GetRetryInterval(Kernel::HLERequestContext& ctx) { void NDM_U::GetRetryInterval(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push(retry_interval); rb.Push(retry_interval);
@ -171,7 +171,7 @@ void NDM_U::GetRetryInterval(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::OverrideDefaultDaemons(Kernel::HLERequestContext& ctx) { void NDM_U::OverrideDefaultDaemons(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 1, 0); IPC::RequestParser rp(ctx);
u32 bit_mask = rp.Pop<u32>() & 0xF; u32 bit_mask = rp.Pop<u32>() & 0xF;
default_daemon_bit_mask = static_cast<DaemonMask>(bit_mask); default_daemon_bit_mask = static_cast<DaemonMask>(bit_mask);
daemon_bit_mask = default_daemon_bit_mask; daemon_bit_mask = default_daemon_bit_mask;
@ -187,7 +187,7 @@ void NDM_U::OverrideDefaultDaemons(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::ResetDefaultDaemons(Kernel::HLERequestContext& ctx) { void NDM_U::ResetDefaultDaemons(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 0, 0); IPC::RequestParser rp(ctx);
default_daemon_bit_mask = DaemonMask::Default; default_daemon_bit_mask = DaemonMask::Default;
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -196,7 +196,7 @@ void NDM_U::ResetDefaultDaemons(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::GetDefaultDaemons(Kernel::HLERequestContext& ctx) { void NDM_U::GetDefaultDaemons(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.PushEnum(default_daemon_bit_mask); rb.PushEnum(default_daemon_bit_mask);
@ -204,7 +204,7 @@ void NDM_U::GetDefaultDaemons(Kernel::HLERequestContext& ctx) {
} }
void NDM_U::ClearHalfAwakeMacFilter(Kernel::HLERequestContext& ctx) { void NDM_U::ClearHalfAwakeMacFilter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_NDM, "(STUBBED)"); LOG_WARNING(Service_NDM, "(STUBBED)");
@ -213,29 +213,29 @@ void NDM_U::ClearHalfAwakeMacFilter(Kernel::HLERequestContext& ctx) {
NDM_U::NDM_U() : ServiceFramework("ndm:u", 6) { NDM_U::NDM_U() : ServiceFramework("ndm:u", 6) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 2), &NDM_U::EnterExclusiveState, "EnterExclusiveState"}, {0x0001, &NDM_U::EnterExclusiveState, "EnterExclusiveState"},
{IPC::MakeHeader(0x0002, 0, 2), &NDM_U::LeaveExclusiveState, "LeaveExclusiveState"}, {0x0002, &NDM_U::LeaveExclusiveState, "LeaveExclusiveState"},
{IPC::MakeHeader(0x0003, 0, 0), &NDM_U::QueryExclusiveMode, "QueryExclusiveMode"}, {0x0003, &NDM_U::QueryExclusiveMode, "QueryExclusiveMode"},
{IPC::MakeHeader(0x0004, 0, 2), &NDM_U::LockState, "LockState"}, {0x0004, &NDM_U::LockState, "LockState"},
{IPC::MakeHeader(0x0005, 0, 2), &NDM_U::UnlockState, "UnlockState"}, {0x0005, &NDM_U::UnlockState, "UnlockState"},
{IPC::MakeHeader(0x0006, 1, 0), &NDM_U::SuspendDaemons, "SuspendDaemons"}, {0x0006, &NDM_U::SuspendDaemons, "SuspendDaemons"},
{IPC::MakeHeader(0x0007, 1, 0), &NDM_U::ResumeDaemons, "ResumeDaemons"}, {0x0007, &NDM_U::ResumeDaemons, "ResumeDaemons"},
{IPC::MakeHeader(0x0008, 1, 0), &NDM_U::SuspendScheduler, "SuspendScheduler"}, {0x0008, &NDM_U::SuspendScheduler, "SuspendScheduler"},
{IPC::MakeHeader(0x0009, 0, 0), &NDM_U::ResumeScheduler, "ResumeScheduler"}, {0x0009, &NDM_U::ResumeScheduler, "ResumeScheduler"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetCurrentState"}, {0x000A, nullptr, "GetCurrentState"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "GetTargetState"}, {0x000B, nullptr, "GetTargetState"},
{IPC::MakeHeader(0x000C, 0, 0), nullptr, "<Stubbed>"}, {0x000C, nullptr, "<Stubbed>"},
{IPC::MakeHeader(0x000D, 1, 0), &NDM_U::QueryStatus, "QueryStatus"}, {0x000D, &NDM_U::QueryStatus, "QueryStatus"},
{IPC::MakeHeader(0x000E, 1, 0), &NDM_U::GetDaemonDisableCount, "GetDaemonDisableCount"}, {0x000E, &NDM_U::GetDaemonDisableCount, "GetDaemonDisableCount"},
{IPC::MakeHeader(0x000F, 0, 0), &NDM_U::GetSchedulerDisableCount, "GetSchedulerDisableCount"}, {0x000F, &NDM_U::GetSchedulerDisableCount, "GetSchedulerDisableCount"},
{IPC::MakeHeader(0x0010, 1, 0), &NDM_U::SetScanInterval, "SetScanInterval"}, {0x0010, &NDM_U::SetScanInterval, "SetScanInterval"},
{IPC::MakeHeader(0x0011, 0, 0), &NDM_U::GetScanInterval, "GetScanInterval"}, {0x0011, &NDM_U::GetScanInterval, "GetScanInterval"},
{IPC::MakeHeader(0x0012, 1, 0), &NDM_U::SetRetryInterval, "SetRetryInterval"}, {0x0012, &NDM_U::SetRetryInterval, "SetRetryInterval"},
{IPC::MakeHeader(0x0013, 0, 0), &NDM_U::GetRetryInterval, "GetRetryInterval"}, {0x0013, &NDM_U::GetRetryInterval, "GetRetryInterval"},
{IPC::MakeHeader(0x0014, 1, 0), &NDM_U::OverrideDefaultDaemons, "OverrideDefaultDaemons"}, {0x0014, &NDM_U::OverrideDefaultDaemons, "OverrideDefaultDaemons"},
{IPC::MakeHeader(0x0015, 0, 0), &NDM_U::ResetDefaultDaemons, "ResetDefaultDaemons"}, {0x0015, &NDM_U::ResetDefaultDaemons, "ResetDefaultDaemons"},
{IPC::MakeHeader(0x0016, 0, 0), &NDM_U::GetDefaultDaemons, "GetDefaultDaemons"}, {0x0016, &NDM_U::GetDefaultDaemons, "GetDefaultDaemons"},
{IPC::MakeHeader(0x0017, 0, 0), &NDM_U::ClearHalfAwakeMacFilter, "ClearHalfAwakeMacFilter"}, {0x0017, &NDM_U::ClearHalfAwakeMacFilter, "ClearHalfAwakeMacFilter"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -18,7 +18,7 @@ struct NewsDbHeader {
static_assert(sizeof(NewsDbHeader) == 0x10, "News DB Header structure size is wrong"); static_assert(sizeof(NewsDbHeader) == 0x10, "News DB Header structure size is wrong");
void NEWS_S::GetTotalNotifications(Kernel::HLERequestContext& ctx) { void NEWS_S::GetTotalNotifications(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 0, 0); IPC::RequestParser rp(ctx);
LOG_WARNING(Service, "(STUBBED) called"); LOG_WARNING(Service, "(STUBBED) called");
@ -29,7 +29,7 @@ void NEWS_S::GetTotalNotifications(Kernel::HLERequestContext& ctx) {
} }
void NEWS_S::GetNewsDBHeader(Kernel::HLERequestContext& ctx) { void NEWS_S::GetNewsDBHeader(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 1, 2); IPC::RequestParser rp(ctx);
const auto size = rp.Pop<u32>(); const auto size = rp.Pop<u32>();
auto output_buffer = rp.PopMappedBuffer(); auto output_buffer = rp.PopMappedBuffer();
@ -47,19 +47,19 @@ void NEWS_S::GetNewsDBHeader(Kernel::HLERequestContext& ctx) {
NEWS_S::NEWS_S() : ServiceFramework("news:s", 2) { NEWS_S::NEWS_S() : ServiceFramework("news:s", 2) {
const FunctionInfo functions[] = { const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 6), nullptr, "AddNotification"}, {0x0001, nullptr, "AddNotification"},
{IPC::MakeHeader(0x0005, 0, 0), &NEWS_S::GetTotalNotifications, "GetTotalNotifications"}, {0x0005, &NEWS_S::GetTotalNotifications, "GetTotalNotifications"},
{IPC::MakeHeader(0x0006, 1, 2), nullptr, "SetNewsDBHeader"}, {0x0006, nullptr, "SetNewsDBHeader"},
{IPC::MakeHeader(0x0007, 2, 2), nullptr, "SetNotificationHeader"}, {0x0007, nullptr, "SetNotificationHeader"},
{IPC::MakeHeader(0x0008, 2, 2), nullptr, "SetNotificationMessage"}, {0x0008, nullptr, "SetNotificationMessage"},
{IPC::MakeHeader(0x0009, 2, 2), nullptr, "SetNotificationImage"}, {0x0009, nullptr, "SetNotificationImage"},
{IPC::MakeHeader(0x000A, 1, 2), &NEWS_S::GetNewsDBHeader, "GetNewsDBHeader"}, {0x000A, &NEWS_S::GetNewsDBHeader, "GetNewsDBHeader"},
{IPC::MakeHeader(0x000B, 2, 2), nullptr, "GetNotificationHeader"}, {0x000B, nullptr, "GetNotificationHeader"},
{IPC::MakeHeader(0x000C, 2, 2), nullptr, "GetNotificationMessage"}, {0x000C, nullptr, "GetNotificationMessage"},
{IPC::MakeHeader(0x000D, 2, 2), nullptr, "GetNotificationImage"}, {0x000D, nullptr, "GetNotificationImage"},
{IPC::MakeHeader(0x000E, 1, 0), nullptr, "SetInfoLEDPattern"}, {0x000E, nullptr, "SetInfoLEDPattern"},
{IPC::MakeHeader(0x0012, 2, 2), nullptr, "GetNotificationHeaderOther"}, {0x0012, nullptr, "GetNotificationHeaderOther"},
{IPC::MakeHeader(0x0013, 0, 0), nullptr, "WriteNewsDBSavedata"}, {0x0013, nullptr, "WriteNewsDBSavedata"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,7 +12,7 @@ namespace Service::NEWS {
NEWS_U::NEWS_U() : ServiceFramework("news:u", 1) { NEWS_U::NEWS_U() : ServiceFramework("news:u", 1) {
const FunctionInfo functions[] = { const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 3, 8), nullptr, "AddNotification"}, {0x0001, nullptr, "AddNotification"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -24,7 +24,7 @@ void Module::serialize(Archive& ar, const unsigned int) {
SERIALIZE_IMPL(Module) SERIALIZE_IMPL(Module)
void Module::Interface::Initialize(Kernel::HLERequestContext& ctx) { void Module::Interface::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 1, 0); IPC::RequestParser rp(ctx);
const auto communication_mode = rp.PopEnum<CommunicationMode>(); const auto communication_mode = rp.PopEnum<CommunicationMode>();
LOG_INFO(Service_NFC, "called, communication_mode={}", communication_mode); LOG_INFO(Service_NFC, "called, communication_mode={}", communication_mode);
@ -58,7 +58,7 @@ void Module::Interface::Initialize(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Finalize(Kernel::HLERequestContext& ctx) { void Module::Interface::Finalize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 1, 0); IPC::RequestParser rp(ctx);
const auto communication_mode = rp.PopEnum<CommunicationMode>(); const auto communication_mode = rp.PopEnum<CommunicationMode>();
LOG_INFO(Service_NFC, "called, communication_mode={}", communication_mode); LOG_INFO(Service_NFC, "called, communication_mode={}", communication_mode);
@ -92,7 +92,7 @@ void Module::Interface::Finalize(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Connect(Kernel::HLERequestContext& ctx) { void Module::Interface::Connect(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 0, 0); IPC::RequestParser rp(ctx);
LOG_WARNING(Service_NFC, "(STUBBED) called"); LOG_WARNING(Service_NFC, "(STUBBED) called");
@ -109,7 +109,7 @@ void Module::Interface::Connect(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Disconnect(Kernel::HLERequestContext& ctx) { void Module::Interface::Disconnect(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 0, 0); IPC::RequestParser rp(ctx);
LOG_WARNING(Service_NFC, "(STUBBED) called"); LOG_WARNING(Service_NFC, "(STUBBED) called");
@ -126,7 +126,7 @@ void Module::Interface::Disconnect(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::StartDetection(Kernel::HLERequestContext& ctx) { void Module::Interface::StartDetection(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 1, 0); IPC::RequestParser rp(ctx);
u16 in_val = rp.Pop<u16>(); u16 in_val = rp.Pop<u16>();
LOG_INFO(Service_NFC, "called, in_val={:04x}", in_val); LOG_INFO(Service_NFC, "called, in_val={:04x}", in_val);
@ -148,7 +148,7 @@ void Module::Interface::StartDetection(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::StopDetection(Kernel::HLERequestContext& ctx) { void Module::Interface::StopDetection(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x06, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -171,7 +171,7 @@ void Module::Interface::StopDetection(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Mount(Kernel::HLERequestContext& ctx) { void Module::Interface::Mount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -195,7 +195,7 @@ void Module::Interface::Mount(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Unmount(Kernel::HLERequestContext& ctx) { void Module::Interface::Unmount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -215,7 +215,7 @@ void Module::Interface::Unmount(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Flush(Kernel::HLERequestContext& ctx) { void Module::Interface::Flush(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -237,7 +237,7 @@ void Module::Interface::Flush(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetActivateEvent(Kernel::HLERequestContext& ctx) { void Module::Interface::GetActivateEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0B, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -254,7 +254,7 @@ void Module::Interface::GetActivateEvent(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetDeactivateEvent(Kernel::HLERequestContext& ctx) { void Module::Interface::GetDeactivateEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0C, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -271,7 +271,7 @@ void Module::Interface::GetDeactivateEvent(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetStatus(Kernel::HLERequestContext& ctx) { void Module::Interface::GetStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 0, 0); IPC::RequestParser rp(ctx);
DeviceState state = DeviceState::NotInitialized; DeviceState state = DeviceState::NotInitialized;
LOG_DEBUG(Service_NFC, "called"); LOG_DEBUG(Service_NFC, "called");
@ -288,7 +288,7 @@ void Module::Interface::GetStatus(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTargetConnectionStatus(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTargetConnectionStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 0, 0); IPC::RequestParser rp(ctx);
LOG_DEBUG(Service_NFC, "called"); LOG_DEBUG(Service_NFC, "called");
@ -308,7 +308,7 @@ void Module::Interface::GetTargetConnectionStatus(Kernel::HLERequestContext& ctx
} }
void Module::Interface::GetTagInfo2(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTagInfo2(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -330,7 +330,7 @@ void Module::Interface::GetTagInfo2(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTagInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTagInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -352,7 +352,7 @@ void Module::Interface::GetTagInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetConnectResult(Kernel::HLERequestContext& ctx) { void Module::Interface::GetConnectResult(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -361,7 +361,7 @@ void Module::Interface::GetConnectResult(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::OpenApplicationArea(Kernel::HLERequestContext& ctx) { void Module::Interface::OpenApplicationArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 1, 0); IPC::RequestParser rp(ctx);
u32 access_id = rp.Pop<u32>(); u32 access_id = rp.Pop<u32>();
LOG_INFO(Service_NFC, "called, access_id={}", access_id); LOG_INFO(Service_NFC, "called, access_id={}", access_id);
@ -381,7 +381,7 @@ void Module::Interface::OpenApplicationArea(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::CreateApplicationArea(Kernel::HLERequestContext& ctx) { void Module::Interface::CreateApplicationArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 18, 2); IPC::RequestParser rp(ctx);
u32 access_id = rp.Pop<u32>(); u32 access_id = rp.Pop<u32>();
[[maybe_unused]] u32 size = rp.Pop<u32>(); [[maybe_unused]] u32 size = rp.Pop<u32>();
std::vector<u8> buffer = rp.PopStaticBuffer(); std::vector<u8> buffer = rp.PopStaticBuffer();
@ -401,7 +401,7 @@ void Module::Interface::CreateApplicationArea(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ReadApplicationArea(Kernel::HLERequestContext& ctx) { void Module::Interface::ReadApplicationArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -422,7 +422,7 @@ void Module::Interface::ReadApplicationArea(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::WriteApplicationArea(Kernel::HLERequestContext& ctx) { void Module::Interface::WriteApplicationArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 12, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] u32 size = rp.Pop<u32>(); [[maybe_unused]] u32 size = rp.Pop<u32>();
std::vector<u8> tag_uuid_info = rp.PopStaticBuffer(); std::vector<u8> tag_uuid_info = rp.PopStaticBuffer();
std::vector<u8> buffer = rp.PopStaticBuffer(); std::vector<u8> buffer = rp.PopStaticBuffer();
@ -442,7 +442,7 @@ void Module::Interface::WriteApplicationArea(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNfpRegisterInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNfpRegisterInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -463,7 +463,7 @@ void Module::Interface::GetNfpRegisterInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetNfpCommonInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetNfpCommonInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -484,7 +484,7 @@ void Module::Interface::GetNfpCommonInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::InitializeCreateInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::InitializeCreateInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x19, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -503,7 +503,7 @@ void Module::Interface::InitializeCreateInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::MountRom(Kernel::HLERequestContext& ctx) { void Module::Interface::MountRom(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -525,7 +525,7 @@ void Module::Interface::MountRom(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetIdentificationBlock(Kernel::HLERequestContext& ctx) { void Module::Interface::GetIdentificationBlock(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1B, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -546,7 +546,7 @@ void Module::Interface::GetIdentificationBlock(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::Format(Kernel::HLERequestContext& ctx) { void Module::Interface::Format(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x401, 3, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] u32 unknown1 = rp.Pop<u32>(); [[maybe_unused]] u32 unknown1 = rp.Pop<u32>();
[[maybe_unused]] u32 unknown2 = rp.Pop<u32>(); [[maybe_unused]] u32 unknown2 = rp.Pop<u32>();
[[maybe_unused]] u32 unknown3 = rp.Pop<u32>(); [[maybe_unused]] u32 unknown3 = rp.Pop<u32>();
@ -560,7 +560,7 @@ void Module::Interface::Format(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetAdminInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetAdminInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x402, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -581,7 +581,7 @@ void Module::Interface::GetAdminInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetEmptyRegisterInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::GetEmptyRegisterInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x403, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -597,7 +597,7 @@ void Module::Interface::GetEmptyRegisterInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::SetRegisterInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::SetRegisterInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x404, 41, 0); IPC::RequestParser rp(ctx);
const auto register_info = rp.PopRaw<RegisterInfoPrivate>(); const auto register_info = rp.PopRaw<RegisterInfoPrivate>();
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -615,7 +615,7 @@ void Module::Interface::SetRegisterInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteRegisterInfo(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteRegisterInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x405, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -632,7 +632,7 @@ void Module::Interface::DeleteRegisterInfo(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::DeleteApplicationArea(Kernel::HLERequestContext& ctx) { void Module::Interface::DeleteApplicationArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x406, 0, 0); IPC::RequestParser rp(ctx);
LOG_INFO(Service_NFC, "called"); LOG_INFO(Service_NFC, "called");
@ -649,7 +649,7 @@ void Module::Interface::DeleteApplicationArea(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::ExistsApplicationArea(Kernel::HLERequestContext& ctx) { void Module::Interface::ExistsApplicationArea(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x407, 0, 0); IPC::RequestParser rp(ctx);
if (nfc->nfc_mode != CommunicationMode::Amiibo) { if (nfc->nfc_mode != CommunicationMode::Amiibo) {
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);

View file

@ -13,41 +13,41 @@ NFC_M::NFC_M(std::shared_ptr<Module> nfc) : Module::Interface(std::move(nfc), "n
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// nfc:u shared commands // nfc:u shared commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &NFC_M::Initialize, "Initialize"}, {0x0001, &NFC_M::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 1, 0), &NFC_M::Finalize, "Finalize"}, {0x0002, &NFC_M::Finalize, "Finalize"},
{IPC::MakeHeader(0x0003, 0, 0), &NFC_M::Connect, "Connect"}, {0x0003, &NFC_M::Connect, "Connect"},
{IPC::MakeHeader(0x0004, 0, 0), &NFC_M::Disconnect, "Disconnect"}, {0x0004, &NFC_M::Disconnect, "Disconnect"},
{IPC::MakeHeader(0x0005, 1, 0), &NFC_M::StartDetection, "StartDetection"}, {0x0005, &NFC_M::StartDetection, "StartDetection"},
{IPC::MakeHeader(0x0006, 0, 0), &NFC_M::StopDetection, "StopDetection"}, {0x0006, &NFC_M::StopDetection, "StopDetection"},
{IPC::MakeHeader(0x0007, 0, 0), &NFC_M::Mount, "Mount"}, {0x0007, &NFC_M::Mount, "Mount"},
{IPC::MakeHeader(0x0008, 0, 0), &NFC_M::Unmount, "Unmount"}, {0x0008, &NFC_M::Unmount, "Unmount"},
{IPC::MakeHeader(0x0009, 0, 2), &NFC_M::Flush, "Flush"}, {0x0009, &NFC_M::Flush, "Flush"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "Restore"}, {0x000A, nullptr, "Restore"},
{IPC::MakeHeader(0x000B, 0, 0), &NFC_M::GetActivateEvent, "GetActivateEvent"}, {0x000B, &NFC_M::GetActivateEvent, "GetActivateEvent"},
{IPC::MakeHeader(0x000C, 0, 0), &NFC_M::GetDeactivateEvent, "GetDeactivateEvent"}, {0x000C, &NFC_M::GetDeactivateEvent, "GetDeactivateEvent"},
{IPC::MakeHeader(0x000D, 0, 0), &NFC_M::GetStatus, "GetStatus"}, {0x000D, &NFC_M::GetStatus, "GetStatus"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "Unknown0x0E"}, {0x000E, nullptr, "Unknown0x0E"},
{IPC::MakeHeader(0x000F, 0, 0), &NFC_M::GetTargetConnectionStatus, "GetTargetConnectionStatus"}, {0x000F, &NFC_M::GetTargetConnectionStatus, "GetTargetConnectionStatus"},
{IPC::MakeHeader(0x0010, 0, 0), &NFC_M::GetTagInfo2, "GetTagInfo2"}, {0x0010, &NFC_M::GetTagInfo2, "GetTagInfo2"},
{IPC::MakeHeader(0x0011, 0, 0), &NFC_M::GetTagInfo, "GetTagInfo"}, {0x0011, &NFC_M::GetTagInfo, "GetTagInfo"},
{IPC::MakeHeader(0x0012, 0, 0), &NFC_M::GetConnectResult, "GetConnectResult"}, {0x0012, &NFC_M::GetConnectResult, "GetConnectResult"},
{IPC::MakeHeader(0x0013, 1, 0), &NFC_M::OpenApplicationArea, "OpenApplicationArea"}, {0x0013, &NFC_M::OpenApplicationArea, "OpenApplicationArea"},
{IPC::MakeHeader(0x0014, 14, 4), &NFC_M::CreateApplicationArea, "CreateApplicationArea"}, {0x0014, &NFC_M::CreateApplicationArea, "CreateApplicationArea"},
{IPC::MakeHeader(0x0015, 1, 0), &NFC_M::ReadApplicationArea, "ReadApplicationArea"}, {0x0015, &NFC_M::ReadApplicationArea, "ReadApplicationArea"},
{IPC::MakeHeader(0x0016, 9, 2), &NFC_M::WriteApplicationArea, "WriteApplicationArea"}, {0x0016, &NFC_M::WriteApplicationArea, "WriteApplicationArea"},
{IPC::MakeHeader(0x0017, 0, 0), &NFC_M::GetNfpRegisterInfo, "GetNfpRegisterInfo"}, {0x0017, &NFC_M::GetNfpRegisterInfo, "GetNfpRegisterInfo"},
{IPC::MakeHeader(0x0018, 0, 0), &NFC_M::GetNfpCommonInfo, "GetNfpCommonInfo"}, {0x0018, &NFC_M::GetNfpCommonInfo, "GetNfpCommonInfo"},
{IPC::MakeHeader(0x0019, 0, 0), &NFC_M::InitializeCreateInfo, "InitializeCreateInfo"}, {0x0019, &NFC_M::InitializeCreateInfo, "InitializeCreateInfo"},
{IPC::MakeHeader(0x001A, 0, 0), &NFC_M::MountRom, "MountRom"}, {0x001A, &NFC_M::MountRom, "MountRom"},
{IPC::MakeHeader(0x001B, 0, 0), &NFC_M::GetIdentificationBlock, "GetIdentificationBlock"}, {0x001B, &NFC_M::GetIdentificationBlock, "GetIdentificationBlock"},
// nfc:m // nfc:m
{IPC::MakeHeader(0x0401, 3, 2), &NFC_M::Format, "Format"}, {0x0401, &NFC_M::Format, "Format"},
{IPC::MakeHeader(0x0402, 0, 0), &NFC_M::GetAdminInfo, "GetAdminInfo"}, {0x0402, &NFC_M::GetAdminInfo, "GetAdminInfo"},
{IPC::MakeHeader(0x0403, 0, 0), &NFC_M::GetEmptyRegisterInfo, "GetEmptyRegisterInfo"}, {0x0403, &NFC_M::GetEmptyRegisterInfo, "GetEmptyRegisterInfo"},
{IPC::MakeHeader(0x0404, 41, 0), &NFC_M::SetRegisterInfo, "SetRegisterInfo"}, {0x0404, &NFC_M::SetRegisterInfo, "SetRegisterInfo"},
{IPC::MakeHeader(0x0405, 0, 0), &NFC_M::DeleteRegisterInfo, "DeleteRegisterInfo"}, {0x0405, &NFC_M::DeleteRegisterInfo, "DeleteRegisterInfo"},
{IPC::MakeHeader(0x0406, 0, 0), &NFC_M::DeleteApplicationArea, "DeleteApplicationArea"}, {0x0406, &NFC_M::DeleteApplicationArea, "DeleteApplicationArea"},
{IPC::MakeHeader(0x0407, 0, 0), &NFC_M::ExistsApplicationArea, "ExistsApplicationArea"} {0x0407, &NFC_M::ExistsApplicationArea, "ExistsApplicationArea"}
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,40 +12,40 @@ namespace Service::NFC {
NFC_U::NFC_U(std::shared_ptr<Module> nfc) : Module::Interface(std::move(nfc), "nfc:u", 1) { NFC_U::NFC_U(std::shared_ptr<Module> nfc) : Module::Interface(std::move(nfc), "nfc:u", 1) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &NFC_U::Initialize, "Initialize"}, {0x0001, &NFC_U::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 1, 0), &NFC_U::Finalize, "Finalize"}, {0x0002, &NFC_U::Finalize, "Finalize"},
{IPC::MakeHeader(0x0003, 0, 0), &NFC_U::Connect, "Connect"}, {0x0003, &NFC_U::Connect, "Connect"},
{IPC::MakeHeader(0x0004, 0, 0), &NFC_U::Disconnect, "Disconnect"}, {0x0004, &NFC_U::Disconnect, "Disconnect"},
{IPC::MakeHeader(0x0005, 1, 0), &NFC_U::StartDetection, "StartDetection"}, {0x0005, &NFC_U::StartDetection, "StartDetection"},
{IPC::MakeHeader(0x0006, 0, 0), &NFC_U::StopDetection, "StopDetection"}, {0x0006, &NFC_U::StopDetection, "StopDetection"},
{IPC::MakeHeader(0x0007, 0, 0), &NFC_U::Mount, "Mount"}, {0x0007, &NFC_U::Mount, "Mount"},
{IPC::MakeHeader(0x0008, 0, 0), &NFC_U::Unmount, "Unmount"}, {0x0008, &NFC_U::Unmount, "Unmount"},
{IPC::MakeHeader(0x0009, 0, 2), &NFC_U::Flush, "Flush"}, {0x0009, &NFC_U::Flush, "Flush"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "Restore"}, {0x000A, nullptr, "Restore"},
{IPC::MakeHeader(0x000B, 0, 0), &NFC_U::GetActivateEvent, "GetActivateEvent"}, {0x000B, &NFC_U::GetActivateEvent, "GetActivateEvent"},
{IPC::MakeHeader(0x000C, 0, 0), &NFC_U::GetDeactivateEvent, "GetDeactivateEvent"}, {0x000C, &NFC_U::GetDeactivateEvent, "GetDeactivateEvent"},
{IPC::MakeHeader(0x000D, 0, 0), &NFC_U::GetStatus, "GetStatus"}, {0x000D, &NFC_U::GetStatus, "GetStatus"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "Unknown0x0E"}, {0x000E, nullptr, "Unknown0x0E"},
{IPC::MakeHeader(0x000F, 0, 0), &NFC_U::GetTargetConnectionStatus, "GetTargetConnectionStatus"}, {0x000F, &NFC_U::GetTargetConnectionStatus, "GetTargetConnectionStatus"},
{IPC::MakeHeader(0x0010, 0, 0), &NFC_U::GetTagInfo2, "GetTagInfo2"}, {0x0010, &NFC_U::GetTagInfo2, "GetTagInfo2"},
{IPC::MakeHeader(0x0011, 0, 0), &NFC_U::GetTagInfo, "GetTagInfo"}, {0x0011, &NFC_U::GetTagInfo, "GetTagInfo"},
{IPC::MakeHeader(0x0012, 0, 0), &NFC_U::GetConnectResult, "GetConnectResult"}, {0x0012, &NFC_U::GetConnectResult, "GetConnectResult"},
{IPC::MakeHeader(0x0013, 1, 0), &NFC_U::OpenApplicationArea, "OpenApplicationArea"}, {0x0013, &NFC_U::OpenApplicationArea, "OpenApplicationArea"},
{IPC::MakeHeader(0x0014, 14, 4), &NFC_U::CreateApplicationArea, "CreateApplicationArea"}, {0x0014, &NFC_U::CreateApplicationArea, "CreateApplicationArea"},
{IPC::MakeHeader(0x0015, 1, 0), &NFC_U::ReadApplicationArea, "ReadApplicationArea"}, {0x0015, &NFC_U::ReadApplicationArea, "ReadApplicationArea"},
{IPC::MakeHeader(0x0016, 9, 2), &NFC_U::WriteApplicationArea, "WriteApplicationArea"}, {0x0016, &NFC_U::WriteApplicationArea, "WriteApplicationArea"},
{IPC::MakeHeader(0x0017, 0, 0), &NFC_U::GetNfpRegisterInfo, "GetNfpRegisterInfo"}, {0x0017, &NFC_U::GetNfpRegisterInfo, "GetNfpRegisterInfo"},
{IPC::MakeHeader(0x0018, 0, 0), &NFC_U::GetNfpCommonInfo, "GetNfpCommonInfo"}, {0x0018, &NFC_U::GetNfpCommonInfo, "GetNfpCommonInfo"},
{IPC::MakeHeader(0x0019, 0, 0), &NFC_U::InitializeCreateInfo, "InitializeCreateInfo"}, {0x0019, &NFC_U::InitializeCreateInfo, "InitializeCreateInfo"},
{IPC::MakeHeader(0x001A, 0, 0), &NFC_U::MountRom, "MountRom"}, {0x001A, &NFC_U::MountRom, "MountRom"},
{IPC::MakeHeader(0x001B, 0, 0), &NFC_U::GetIdentificationBlock, "GetIdentificationBlock"}, {0x001B, &NFC_U::GetIdentificationBlock, "GetIdentificationBlock"},
{IPC::MakeHeader(0x001C, 0, 0), nullptr, "Unknown0x1C"}, {0x001C, nullptr, "Unknown0x1C"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "Unknown0x1D"}, {0x001D, nullptr, "Unknown0x1D"},
{IPC::MakeHeader(0x001E, 0, 0), nullptr, "Unknown0x1E"}, {0x001E, nullptr, "Unknown0x1E"},
{IPC::MakeHeader(0x001F, 0, 0), nullptr, "Unknown0x1F"}, {0x001F, nullptr, "Unknown0x1F"},
{IPC::MakeHeader(0x0020, 0, 0), nullptr, "Unknown0x20"}, {0x0020, nullptr, "Unknown0x20"},
{IPC::MakeHeader(0x0021, 0, 0), nullptr, "Unknown0x21"}, {0x0021, nullptr, "Unknown0x21"},
{IPC::MakeHeader(0x0022, 0, 0), nullptr, "Unknown0x22"}, {0x0022, nullptr, "Unknown0x22"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,14 +12,14 @@ namespace Service::NIM {
NIM_AOC::NIM_AOC() : ServiceFramework("nim:aoc", 2) { NIM_AOC::NIM_AOC() : ServiceFramework("nim:aoc", 2) {
const FunctionInfo functions[] = { const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0003, 1, 2), nullptr, "SetApplicationId"}, {0x0003, nullptr, "SetApplicationId"},
{IPC::MakeHeader(0x0004, 1, 2), nullptr, "SetTin"}, {0x0004, nullptr, "SetTin"},
{IPC::MakeHeader(0x0009, 11, 16), nullptr, "ListContentSetsEx"}, {0x0009, nullptr, "ListContentSetsEx"},
{IPC::MakeHeader(0x0018, 0, 0), nullptr, "GetBalance"}, {0x0018, nullptr, "GetBalance"},
{IPC::MakeHeader(0x001D, 0, 0), nullptr, "GetCustomerSupportCode"}, {0x001D, nullptr, "GetCustomerSupportCode"},
{IPC::MakeHeader(0x0021, 0, 0), nullptr, "Initialize"}, {0x0021, nullptr, "Initialize"},
{IPC::MakeHeader(0x0024, 10, 2), nullptr, "CalculateContentsRequiredSize"}, {0x0024, nullptr, "CalculateContentsRequiredSize"},
{IPC::MakeHeader(0x0025, 0, 0), nullptr, "RefreshServerTime"}, {0x0025, nullptr, "RefreshServerTime"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,11 +12,11 @@ namespace Service::NIM {
NIM_S::NIM_S() : ServiceFramework("nim:s", 1) { NIM_S::NIM_S() : ServiceFramework("nim:s", 1) {
const FunctionInfo functions[] = { const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "CheckSysupdateAvailableSOAP"}, {0x000A, nullptr, "CheckSysupdateAvailableSOAP"},
{IPC::MakeHeader(0x0016, 8, 10), nullptr, "ListTitles"}, {0x0016, nullptr, "ListTitles"},
{IPC::MakeHeader(0x0029, 0, 0), nullptr, "AccountCheckBalanceSOAP"}, {0x0029, nullptr, "AccountCheckBalanceSOAP"},
{IPC::MakeHeader(0x002D, 1, 2), nullptr, "DownloadTickets"}, {0x002D, nullptr, "DownloadTickets"},
{IPC::MakeHeader(0x0042, 9, 0), nullptr, "StartDownload"}, {0x0042, nullptr, "StartDownload"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -126,52 +126,52 @@ static_assert(sizeof(AutoDbgDat) == 0x108, "AutoDbgDat structure size is wrong")
NIM_U::NIM_U(Core::System& system) : ServiceFramework("nim:u", 2) { NIM_U::NIM_U(Core::System& system) : ServiceFramework("nim:u", 2) {
const FunctionInfo functions[] = { const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 0), &NIM_U::StartNetworkUpdate, "StartNetworkUpdate"}, {0x0001, &NIM_U::StartNetworkUpdate, "StartNetworkUpdate"},
{IPC::MakeHeader(0x0002, 0, 0), &NIM_U::GetProgress, "GetProgress"}, {0x0002, &NIM_U::GetProgress, "GetProgress"},
{IPC::MakeHeader(0x0003, 0, 0), &NIM_U::Cancel, "Cancel"}, {0x0003, &NIM_U::Cancel, "Cancel"},
{IPC::MakeHeader(0x0004, 0, 0), &NIM_U::CommitSystemTitles, "CommitSystemTitles"}, {0x0004, &NIM_U::CommitSystemTitles, "CommitSystemTitles"},
{IPC::MakeHeader(0x0005, 0, 0), &NIM_U::GetBackgroundEventForMenu, "GetBackgroundEventForMenu"}, {0x0005, &NIM_U::GetBackgroundEventForMenu, "GetBackgroundEventForMenu"},
{IPC::MakeHeader(0x0006, 0, 0), &NIM_U::GetBackgroundEventForNews, "GetBackgroundEventForNews"}, {0x0006, &NIM_U::GetBackgroundEventForNews, "GetBackgroundEventForNews"},
{IPC::MakeHeader(0x0007, 0, 0), &NIM_U::FormatSaveData, "FormatSaveData"}, {0x0007, &NIM_U::FormatSaveData, "FormatSaveData"},
{IPC::MakeHeader(0x0008, 0, 0), &NIM_U::GetCustomerSupportCode, "GetCustomerSupportCode"}, {0x0008, &NIM_U::GetCustomerSupportCode, "GetCustomerSupportCode"},
{IPC::MakeHeader(0x0009, 0, 0), &NIM_U::IsCommittableAllSystemTitles, "IsCommittableAllSystemTitles"}, {0x0009, &NIM_U::IsCommittableAllSystemTitles, "IsCommittableAllSystemTitles"},
{IPC::MakeHeader(0x000A, 0, 0), &NIM_U::GetBackgroundProgress, "GetBackgroundProgress"}, {0x000A, &NIM_U::GetBackgroundProgress, "GetBackgroundProgress"},
{IPC::MakeHeader(0x000B, 0, 0), &NIM_U::GetSavedHash, "GetSavedHash"}, {0x000B, &NIM_U::GetSavedHash, "GetSavedHash"},
{IPC::MakeHeader(0x000C, 2, 2), &NIM_U::UnregisterTask, "UnregisterTask"}, {0x000C, &NIM_U::UnregisterTask, "UnregisterTask"},
{IPC::MakeHeader(0x000D, 2, 0), &NIM_U::IsRegistered, "IsRegistered"}, {0x000D, &NIM_U::IsRegistered, "IsRegistered"},
{IPC::MakeHeader(0x000E, 2, 0), &NIM_U::FindTaskInfo, "FindTaskInfo"}, {0x000E, &NIM_U::FindTaskInfo, "FindTaskInfo"},
{IPC::MakeHeader(0x000F, 1, 2), &NIM_U::GetTaskInfos, "GetTaskInfos"}, {0x000F, &NIM_U::GetTaskInfos, "GetTaskInfos"},
{IPC::MakeHeader(0x0010, 0, 0), &NIM_U::DeleteUnmanagedContexts, "DeleteUnmanagedContexts"}, {0x0010, &NIM_U::DeleteUnmanagedContexts, "DeleteUnmanagedContexts"},
{IPC::MakeHeader(0x0011, 0, 0), &NIM_U::UpdateAutoTitleDownloadTasksAsync, "UpdateAutoTitleDownloadTasksAsync"}, {0x0011, &NIM_U::UpdateAutoTitleDownloadTasksAsync, "UpdateAutoTitleDownloadTasksAsync"},
{IPC::MakeHeader(0x0012, 0, 0), &NIM_U::StartPendingAutoTitleDownloadTasksAsync, "StartPendingAutoTitleDownloadTasksAsync"}, {0x0012, &NIM_U::StartPendingAutoTitleDownloadTasksAsync, "StartPendingAutoTitleDownloadTasksAsync"},
{IPC::MakeHeader(0x0013, 0, 0), &NIM_U::GetAsyncResult, "GetAsyncResult"}, {0x0013, &NIM_U::GetAsyncResult, "GetAsyncResult"},
{IPC::MakeHeader(0x0014, 0, 0), &NIM_U::CancelAsyncCall, "CancelAsyncCall"}, {0x0014, &NIM_U::CancelAsyncCall, "CancelAsyncCall"},
{IPC::MakeHeader(0x0015, 0, 0), &NIM_U::IsPendingAutoTitleDownloadTasks, "IsPendingAutoTitleDownloadTasks"}, {0x0015, &NIM_U::IsPendingAutoTitleDownloadTasks, "IsPendingAutoTitleDownloadTasks"},
{IPC::MakeHeader(0x0016, 0, 0), &NIM_U::GetNumAutoTitleDownloadTasks, "GetNumAutoTitleDownloadTasks"}, {0x0016, &NIM_U::GetNumAutoTitleDownloadTasks, "GetNumAutoTitleDownloadTasks"},
{IPC::MakeHeader(0x0017, 1, 2), &NIM_U::GetAutoTitleDownloadTaskInfos, "GetAutoTitleDownloadTaskInfos"}, {0x0017, &NIM_U::GetAutoTitleDownloadTaskInfos, "GetAutoTitleDownloadTaskInfos"},
{IPC::MakeHeader(0x0018, 2, 0), &NIM_U::CancelAutoTitleDownloadTask, "CancelAutoTitleDownloadTask"}, {0x0018, &NIM_U::CancelAutoTitleDownloadTask, "CancelAutoTitleDownloadTask"},
{IPC::MakeHeader(0x0019, 0, 2), &NIM_U::SetAutoDbgDat, "SetAutoDbgDat"}, {0x0019, &NIM_U::SetAutoDbgDat, "SetAutoDbgDat"},
{IPC::MakeHeader(0x001A, 0, 2), &NIM_U::GetAutoDbgDat, "GetAutoDbgDat"}, {0x001A, &NIM_U::GetAutoDbgDat, "GetAutoDbgDat"},
{IPC::MakeHeader(0x001B, 1, 2), &NIM_U::SetDbgTasks, "SetDbgTasks"}, {0x001B, &NIM_U::SetDbgTasks, "SetDbgTasks"},
{IPC::MakeHeader(0x001C, 1, 2), &NIM_U::GetDbgTasks, "GetDbgTasks"}, {0x001C, &NIM_U::GetDbgTasks, "GetDbgTasks"},
{IPC::MakeHeader(0x001D, 0, 0), &NIM_U::DeleteDbgData, "DeleteDbgData"}, {0x001D, &NIM_U::DeleteDbgData, "DeleteDbgData"},
{IPC::MakeHeader(0x001E, 1, 2), &NIM_U::SetTslXml, "SetTslXml"}, {0x001E, &NIM_U::SetTslXml, "SetTslXml"},
{IPC::MakeHeader(0x001F, 0, 0), &NIM_U::GetTslXmlSize, "GetTslXmlSize"}, {0x001F, &NIM_U::GetTslXmlSize, "GetTslXmlSize"},
{IPC::MakeHeader(0x0020, 1, 2), &NIM_U::GetTslXml, "GetTslXml"}, {0x0020, &NIM_U::GetTslXml, "GetTslXml"},
{IPC::MakeHeader(0x0021, 0, 0), &NIM_U::DeleteTslXml, "DeleteTslXml"}, {0x0021, &NIM_U::DeleteTslXml, "DeleteTslXml"},
{IPC::MakeHeader(0x0022, 1, 2), &NIM_U::SetDtlXml, "SetDtlXml"}, {0x0022, &NIM_U::SetDtlXml, "SetDtlXml"},
{IPC::MakeHeader(0x0023, 0, 0), &NIM_U::GetDtlXmlSize, "GetDtlXmlSize"}, {0x0023, &NIM_U::GetDtlXmlSize, "GetDtlXmlSize"},
{IPC::MakeHeader(0x0024, 1, 2), &NIM_U::GetDtlXml, "GetDtlXml"}, {0x0024, &NIM_U::GetDtlXml, "GetDtlXml"},
{IPC::MakeHeader(0x0025, 0, 0), &NIM_U::UpdateAccountStatus, "UpdateAccountStatus"}, {0x0025, &NIM_U::UpdateAccountStatus, "UpdateAccountStatus"},
{IPC::MakeHeader(0x0026, 6, 0), &NIM_U::StartTitleDownload, "StartTitleDownload"}, {0x0026, &NIM_U::StartTitleDownload, "StartTitleDownload"},
{IPC::MakeHeader(0x0027, 0, 0), &NIM_U::StopTitleDownload, "StopTitleDownload"}, {0x0027, &NIM_U::StopTitleDownload, "StopTitleDownload"},
{IPC::MakeHeader(0x0028, 0, 0), &NIM_U::GetTitleDownloadProgress, "GetTitleDownloadProgress"}, {0x0028, &NIM_U::GetTitleDownloadProgress, "GetTitleDownloadProgress"},
{IPC::MakeHeader(0x0029, 9, 6), &NIM_U::RegisterTask, "RegisterTask"}, {0x0029, &NIM_U::RegisterTask, "RegisterTask"},
{IPC::MakeHeader(0x002A, 0, 0), &NIM_U::IsSystemUpdateAvailable, "IsSystemUpdateAvailable"}, {0x002A, &NIM_U::IsSystemUpdateAvailable, "IsSystemUpdateAvailable"},
{IPC::MakeHeader(0x002B, 0, 0), &NIM_U::Unknown2B, "Unknown2B"}, {0x002B, &NIM_U::Unknown2B, "Unknown2B"},
{IPC::MakeHeader(0x002C, 0, 0), &NIM_U::UpdateTickets, "UpdateTickets"}, {0x002C, &NIM_U::UpdateTickets, "UpdateTickets"},
{IPC::MakeHeader(0x002D, 3, 0), &NIM_U::DownloadTitleSeedAsync, "DownloadTitleSeedAsync"}, {0x002D, &NIM_U::DownloadTitleSeedAsync, "DownloadTitleSeedAsync"},
{IPC::MakeHeader(0x002E, 0, 0), &NIM_U::DownloadMissingTitleSeedsAsync, "DownloadMissingTitleSeedsAsync"}, {0x002E, &NIM_U::DownloadMissingTitleSeedsAsync, "DownloadMissingTitleSeedsAsync"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);
@ -186,7 +186,7 @@ NIM_U::NIM_U(Core::System& system) : ServiceFramework("nim:u", 2) {
NIM_U::~NIM_U() = default; NIM_U::~NIM_U() = default;
void NIM_U::StartNetworkUpdate(Kernel::HLERequestContext& ctx) { void NIM_U::StartNetworkUpdate(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 0, 0); // 0x10000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -195,7 +195,7 @@ void NIM_U::StartNetworkUpdate(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetProgress(Kernel::HLERequestContext& ctx) { void NIM_U::GetProgress(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2, 0, 0); // 0x20000 IPC::RequestParser rp(ctx);
SystemUpdateProgress progress{}; SystemUpdateProgress progress{};
std::memset(&progress, 0, sizeof(progress)); std::memset(&progress, 0, sizeof(progress));
@ -210,7 +210,7 @@ void NIM_U::GetProgress(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::Cancel(Kernel::HLERequestContext& ctx) { void NIM_U::Cancel(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3, 0, 0); // 0x30000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -219,7 +219,7 @@ void NIM_U::Cancel(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::CommitSystemTitles(Kernel::HLERequestContext& ctx) { void NIM_U::CommitSystemTitles(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4, 0, 0); // 0x40000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -228,7 +228,7 @@ void NIM_U::CommitSystemTitles(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetBackgroundEventForMenu(Kernel::HLERequestContext& ctx) { void NIM_U::GetBackgroundEventForMenu(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 0, 0); // 0x50000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -238,7 +238,7 @@ void NIM_U::GetBackgroundEventForMenu(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetBackgroundEventForNews(Kernel::HLERequestContext& ctx) { void NIM_U::GetBackgroundEventForNews(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x6, 0, 0); // 0x60000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -248,7 +248,7 @@ void NIM_U::GetBackgroundEventForNews(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::FormatSaveData(Kernel::HLERequestContext& ctx) { void NIM_U::FormatSaveData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x7, 0, 0); // 0x70000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -257,7 +257,7 @@ void NIM_U::FormatSaveData(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetCustomerSupportCode(Kernel::HLERequestContext& ctx) { void NIM_U::GetCustomerSupportCode(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x8, 0, 0); // 0x80000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -267,7 +267,7 @@ void NIM_U::GetCustomerSupportCode(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::IsCommittableAllSystemTitles(Kernel::HLERequestContext& ctx) { void NIM_U::IsCommittableAllSystemTitles(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 0, 0); // 0x90000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -277,7 +277,7 @@ void NIM_U::IsCommittableAllSystemTitles(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetBackgroundProgress(Kernel::HLERequestContext& ctx) { void NIM_U::GetBackgroundProgress(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 0, 0); // 0xA0000 IPC::RequestParser rp(ctx);
SystemUpdateProgress progress{}; SystemUpdateProgress progress{};
std::memset(&progress, 0, sizeof(progress)); std::memset(&progress, 0, sizeof(progress));
@ -292,7 +292,7 @@ void NIM_U::GetBackgroundProgress(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetSavedHash(Kernel::HLERequestContext& ctx) { void NIM_U::GetSavedHash(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 0, 0); // 0xB0000 IPC::RequestParser rp(ctx);
std::array<char, 0x24> hash{}; std::array<char, 0x24> hash{};
std::memset(&hash, 0, sizeof(hash)); std::memset(&hash, 0, sizeof(hash));
@ -305,7 +305,7 @@ void NIM_U::GetSavedHash(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::UnregisterTask(Kernel::HLERequestContext& ctx) { void NIM_U::UnregisterTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xC, 2, 2); // 0xC0082 IPC::RequestParser rp(ctx);
const u64 title_id = rp.Pop<u64>(); const u64 title_id = rp.Pop<u64>();
const u32 process_id = rp.PopPID(); const u32 process_id = rp.PopPID();
@ -319,7 +319,7 @@ void NIM_U::UnregisterTask(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::IsRegistered(Kernel::HLERequestContext& ctx) { void NIM_U::IsRegistered(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xD, 2, 0); // 0xD0080 IPC::RequestParser rp(ctx);
const u64 title_id = rp.Pop<u64>(); const u64 title_id = rp.Pop<u64>();
@ -331,7 +331,7 @@ void NIM_U::IsRegistered(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::FindTaskInfo(Kernel::HLERequestContext& ctx) { void NIM_U::FindTaskInfo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xE, 2, 0); // 0xE0080 IPC::RequestParser rp(ctx);
const u64 title_id = rp.Pop<u64>(); const u64 title_id = rp.Pop<u64>();
@ -346,7 +346,7 @@ void NIM_U::FindTaskInfo(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetTaskInfos(Kernel::HLERequestContext& ctx) { void NIM_U::GetTaskInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xF, 1, 2); // 0xF0042 IPC::RequestParser rp(ctx);
const u64 max_task_infos = rp.Pop<u32>(); const u64 max_task_infos = rp.Pop<u32>();
auto& task_infos_buffer = rp.PopMappedBuffer(); auto& task_infos_buffer = rp.PopMappedBuffer();
@ -361,7 +361,7 @@ void NIM_U::GetTaskInfos(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::DeleteUnmanagedContexts(Kernel::HLERequestContext& ctx) { void NIM_U::DeleteUnmanagedContexts(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 0, 0); // 0x100000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -370,7 +370,7 @@ void NIM_U::DeleteUnmanagedContexts(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::UpdateAutoTitleDownloadTasksAsync(Kernel::HLERequestContext& ctx) { void NIM_U::UpdateAutoTitleDownloadTasksAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 0, 0); // 0x110000 IPC::RequestParser rp(ctx);
// Since this is a stub, signal the completion event so the caller won't get stuck waiting. // Since this is a stub, signal the completion event so the caller won't get stuck waiting.
nim_async_completion_event->Signal(); nim_async_completion_event->Signal();
@ -383,7 +383,7 @@ void NIM_U::UpdateAutoTitleDownloadTasksAsync(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::StartPendingAutoTitleDownloadTasksAsync(Kernel::HLERequestContext& ctx) { void NIM_U::StartPendingAutoTitleDownloadTasksAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 0, 0); // 0x120000 IPC::RequestParser rp(ctx);
// Since this is a stub, signal the completion event so the caller won't get stuck waiting. // Since this is a stub, signal the completion event so the caller won't get stuck waiting.
nim_async_completion_event->Signal(); nim_async_completion_event->Signal();
@ -396,7 +396,7 @@ void NIM_U::StartPendingAutoTitleDownloadTasksAsync(Kernel::HLERequestContext& c
} }
void NIM_U::GetAsyncResult(Kernel::HLERequestContext& ctx) { void NIM_U::GetAsyncResult(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 0, 0); // 0x130000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -407,7 +407,7 @@ void NIM_U::GetAsyncResult(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::CancelAsyncCall(Kernel::HLERequestContext& ctx) { void NIM_U::CancelAsyncCall(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 0, 0); // 0x140000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -416,7 +416,7 @@ void NIM_U::CancelAsyncCall(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::IsPendingAutoTitleDownloadTasks(Kernel::HLERequestContext& ctx) { void NIM_U::IsPendingAutoTitleDownloadTasks(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 0, 0); // 0x150000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -426,7 +426,7 @@ void NIM_U::IsPendingAutoTitleDownloadTasks(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetNumAutoTitleDownloadTasks(Kernel::HLERequestContext& ctx) { void NIM_U::GetNumAutoTitleDownloadTasks(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 0, 0); // 0x160000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -436,7 +436,7 @@ void NIM_U::GetNumAutoTitleDownloadTasks(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetAutoTitleDownloadTaskInfos(Kernel::HLERequestContext& ctx) { void NIM_U::GetAutoTitleDownloadTaskInfos(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 1, 2); // 0x170042 IPC::RequestParser rp(ctx);
const u64 max_task_infos = rp.Pop<u32>(); const u64 max_task_infos = rp.Pop<u32>();
auto& task_infos_buffer = rp.PopMappedBuffer(); auto& task_infos_buffer = rp.PopMappedBuffer();
@ -451,7 +451,7 @@ void NIM_U::GetAutoTitleDownloadTaskInfos(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::CancelAutoTitleDownloadTask(Kernel::HLERequestContext& ctx) { void NIM_U::CancelAutoTitleDownloadTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 2, 0); // 0x180080 IPC::RequestParser rp(ctx);
const u64 task_id = rp.Pop<u64>(); const u64 task_id = rp.Pop<u64>();
@ -462,7 +462,7 @@ void NIM_U::CancelAutoTitleDownloadTask(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::SetAutoDbgDat(Kernel::HLERequestContext& ctx) { void NIM_U::SetAutoDbgDat(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x19, 0, 2); // 0x190002 IPC::RequestParser rp(ctx);
auto& auto_dbg_dat_buffer = rp.PopMappedBuffer(); auto& auto_dbg_dat_buffer = rp.PopMappedBuffer();
@ -475,7 +475,7 @@ void NIM_U::SetAutoDbgDat(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetAutoDbgDat(Kernel::HLERequestContext& ctx) { void NIM_U::GetAutoDbgDat(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 0, 2); // 0x1A0002 IPC::RequestParser rp(ctx);
auto& auto_dbg_dat_buffer = rp.PopMappedBuffer(); auto& auto_dbg_dat_buffer = rp.PopMappedBuffer();
@ -488,7 +488,7 @@ void NIM_U::GetAutoDbgDat(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::SetDbgTasks(Kernel::HLERequestContext& ctx) { void NIM_U::SetDbgTasks(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1B, 1, 2); // 0x1B0042 IPC::RequestParser rp(ctx);
const u64 max_task_infos = rp.Pop<u32>(); const u64 max_task_infos = rp.Pop<u32>();
auto& task_infos_buffer = rp.PopMappedBuffer(); auto& task_infos_buffer = rp.PopMappedBuffer();
@ -502,7 +502,7 @@ void NIM_U::SetDbgTasks(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetDbgTasks(Kernel::HLERequestContext& ctx) { void NIM_U::GetDbgTasks(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1C, 1, 2); // 0x1C0042 IPC::RequestParser rp(ctx);
const u64 max_task_infos = rp.Pop<u32>(); const u64 max_task_infos = rp.Pop<u32>();
auto& task_infos_buffer = rp.PopMappedBuffer(); auto& task_infos_buffer = rp.PopMappedBuffer();
@ -517,7 +517,7 @@ void NIM_U::GetDbgTasks(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::DeleteDbgData(Kernel::HLERequestContext& ctx) { void NIM_U::DeleteDbgData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1D, 0, 0); // 0x1D0000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -526,7 +526,7 @@ void NIM_U::DeleteDbgData(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::SetTslXml(Kernel::HLERequestContext& ctx) { void NIM_U::SetTslXml(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1E, 1, 2); // 0x1E0042 IPC::RequestParser rp(ctx);
const u32 buffer_size = rp.Pop<u32>(); const u32 buffer_size = rp.Pop<u32>();
auto& xml_buffer = rp.PopMappedBuffer(); auto& xml_buffer = rp.PopMappedBuffer();
@ -540,7 +540,7 @@ void NIM_U::SetTslXml(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetTslXmlSize(Kernel::HLERequestContext& ctx) { void NIM_U::GetTslXmlSize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1F, 0, 0); // 0x1F0000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -550,7 +550,7 @@ void NIM_U::GetTslXmlSize(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetTslXml(Kernel::HLERequestContext& ctx) { void NIM_U::GetTslXml(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x20, 1, 2); // 0x200042 IPC::RequestParser rp(ctx);
const u32 buffer_capacity = rp.Pop<u32>(); const u32 buffer_capacity = rp.Pop<u32>();
auto& xml_buffer = rp.PopMappedBuffer(); auto& xml_buffer = rp.PopMappedBuffer();
@ -564,7 +564,7 @@ void NIM_U::GetTslXml(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::DeleteTslXml(Kernel::HLERequestContext& ctx) { void NIM_U::DeleteTslXml(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x21, 0, 0); // 0x210000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -573,7 +573,7 @@ void NIM_U::DeleteTslXml(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::SetDtlXml(Kernel::HLERequestContext& ctx) { void NIM_U::SetDtlXml(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x22, 1, 2); // 0x220042 IPC::RequestParser rp(ctx);
const u32 buffer_size = rp.Pop<u32>(); const u32 buffer_size = rp.Pop<u32>();
auto& xml_buffer = rp.PopMappedBuffer(); auto& xml_buffer = rp.PopMappedBuffer();
@ -587,7 +587,7 @@ void NIM_U::SetDtlXml(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetDtlXmlSize(Kernel::HLERequestContext& ctx) { void NIM_U::GetDtlXmlSize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x23, 0, 0); // 0x230000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -597,7 +597,7 @@ void NIM_U::GetDtlXmlSize(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetDtlXml(Kernel::HLERequestContext& ctx) { void NIM_U::GetDtlXml(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x24, 1, 2); // 0x240042 IPC::RequestParser rp(ctx);
const u32 buffer_capacity = rp.Pop<u32>(); const u32 buffer_capacity = rp.Pop<u32>();
auto& xml_buffer = rp.PopMappedBuffer(); auto& xml_buffer = rp.PopMappedBuffer();
@ -611,7 +611,7 @@ void NIM_U::GetDtlXml(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::UpdateAccountStatus(Kernel::HLERequestContext& ctx) { void NIM_U::UpdateAccountStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x25, 0, 0); // 0x250000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -622,7 +622,7 @@ void NIM_U::UpdateAccountStatus(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::StartTitleDownload(Kernel::HLERequestContext& ctx) { void NIM_U::StartTitleDownload(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x26, 6, 0); // 0x260180 IPC::RequestParser rp(ctx);
const auto& download_config = rp.PopRaw<TitleDownloadConfig>(); const auto& download_config = rp.PopRaw<TitleDownloadConfig>();
@ -633,7 +633,7 @@ void NIM_U::StartTitleDownload(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::StopTitleDownload(Kernel::HLERequestContext& ctx) { void NIM_U::StopTitleDownload(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x27, 0, 0); // 0x270000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -642,7 +642,7 @@ void NIM_U::StopTitleDownload(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::GetTitleDownloadProgress(Kernel::HLERequestContext& ctx) { void NIM_U::GetTitleDownloadProgress(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x28, 0, 0); // 0x280000 IPC::RequestParser rp(ctx);
TitleDownloadProgress progress{}; TitleDownloadProgress progress{};
std::memset(&progress, 0, sizeof(progress)); std::memset(&progress, 0, sizeof(progress));
@ -657,7 +657,7 @@ void NIM_U::GetTitleDownloadProgress(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::RegisterTask(Kernel::HLERequestContext& ctx) { void NIM_U::RegisterTask(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x29, 9, 6); // 0x290246 IPC::RequestParser rp(ctx);
const auto& download_config = rp.PopRaw<TitleDownloadConfig>(); const auto& download_config = rp.PopRaw<TitleDownloadConfig>();
const u32 unknown_1 = rp.Pop<u32>(); const u32 unknown_1 = rp.Pop<u32>();
@ -686,7 +686,7 @@ void NIM_U::RegisterTask(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::IsSystemUpdateAvailable(Kernel::HLERequestContext& ctx) { void NIM_U::IsSystemUpdateAvailable(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2A, 0, 0); // 0x2A0000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(4, 0); IPC::RequestBuilder rb = rp.MakeBuilder(4, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -698,7 +698,7 @@ void NIM_U::IsSystemUpdateAvailable(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::Unknown2B(Kernel::HLERequestContext& ctx) { void NIM_U::Unknown2B(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2B, 0, 0); // 0x2B0000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -707,7 +707,7 @@ void NIM_U::Unknown2B(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::UpdateTickets(Kernel::HLERequestContext& ctx) { void NIM_U::UpdateTickets(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2C, 0, 0); // 0x2C0000 IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0); IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -718,7 +718,7 @@ void NIM_U::UpdateTickets(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::DownloadTitleSeedAsync(Kernel::HLERequestContext& ctx) { void NIM_U::DownloadTitleSeedAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2D, 3, 0); // 0x2D00C0 IPC::RequestParser rp(ctx);
const u64 title_id = rp.Pop<u64>(); const u64 title_id = rp.Pop<u64>();
const u16 country_code = rp.Pop<u16>(); const u16 country_code = rp.Pop<u16>();
@ -735,7 +735,7 @@ void NIM_U::DownloadTitleSeedAsync(Kernel::HLERequestContext& ctx) {
} }
void NIM_U::DownloadMissingTitleSeedsAsync(Kernel::HLERequestContext& ctx) { void NIM_U::DownloadMissingTitleSeedsAsync(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2E, 0, 0); // 0x2E0000 IPC::RequestParser rp(ctx);
// Since this is a stub, signal the completion event so the caller won't get stuck waiting. // Since this is a stub, signal the completion event so the caller won't get stuck waiting.
nim_async_completion_event->Signal(); nim_async_completion_event->Signal();

View file

@ -12,7 +12,7 @@ namespace Service::NWM {
NWM_CEC::NWM_CEC() : ServiceFramework("nwm::CEC") { NWM_CEC::NWM_CEC() : ServiceFramework("nwm::CEC") {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x000D, 2, 2), nullptr, "SendProbeRequest"}, {0x000D, nullptr, "SendProbeRequest"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,7 +12,7 @@ namespace Service::NWM {
NWM_EXT::NWM_EXT() : ServiceFramework("nwm::EXT") { NWM_EXT::NWM_EXT() : ServiceFramework("nwm::EXT") {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0008, 1, 0), nullptr, "ControlWirelessEnabled"}, {0x0008, nullptr, "ControlWirelessEnabled"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,9 +12,9 @@ namespace Service::NWM {
NWM_INF::NWM_INF() : ServiceFramework("nwm::INF") { NWM_INF::NWM_INF() : ServiceFramework("nwm::INF") {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0006, 15, 4), nullptr, "RecvBeaconBroadcastData"}, {0x0006, nullptr, "RecvBeaconBroadcastData"},
{IPC::MakeHeader(0x0007, 29, 2), nullptr, "ConnectToEncryptedAP"}, {0x0007, nullptr, "ConnectToEncryptedAP"},
{IPC::MakeHeader(0x0008, 12, 2), nullptr, "ConnectToAP"}, {0x0008, nullptr, "ConnectToAP"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -569,7 +569,7 @@ boost::optional<Network::MacAddress> NWM_UDS::GetNodeMacAddress(u16 dest_node_id
} }
void NWM_UDS::Shutdown(Kernel::HLERequestContext& ctx) { void NWM_UDS::Shutdown(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 0, 0); IPC::RequestParser rp(ctx);
initialized = false; initialized = false;
@ -587,7 +587,7 @@ void NWM_UDS::Shutdown(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::RecvBeaconBroadcastData(Kernel::HLERequestContext& ctx) { void NWM_UDS::RecvBeaconBroadcastData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 16, 4); IPC::RequestParser rp(ctx);
u32 out_buffer_size = rp.Pop<u32>(); u32 out_buffer_size = rp.Pop<u32>();
u32 unk1 = rp.Pop<u32>(); u32 unk1 = rp.Pop<u32>();
@ -677,7 +677,7 @@ ResultVal<std::shared_ptr<Kernel::Event>> NWM_UDS::Initialize(
} }
void NWM_UDS::InitializeWithVersion(Kernel::HLERequestContext& ctx) { void NWM_UDS::InitializeWithVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1B, 12, 2); IPC::RequestParser rp(ctx);
u32 sharedmem_size = rp.Pop<u32>(); u32 sharedmem_size = rp.Pop<u32>();
auto node = rp.PopRaw<NodeInfo>(); auto node = rp.PopRaw<NodeInfo>();
u16 version = rp.Pop<u16>(); u16 version = rp.Pop<u16>();
@ -694,7 +694,7 @@ void NWM_UDS::InitializeWithVersion(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::InitializeDeprecated(Kernel::HLERequestContext& ctx) { void NWM_UDS::InitializeDeprecated(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 11, 2); IPC::RequestParser rp(ctx);
u32 sharedmem_size = rp.Pop<u32>(); u32 sharedmem_size = rp.Pop<u32>();
auto node = rp.PopRaw<NodeInfo>(); auto node = rp.PopRaw<NodeInfo>();
auto sharedmem = rp.PopObject<Kernel::SharedMemory>(); auto sharedmem = rp.PopObject<Kernel::SharedMemory>();
@ -710,7 +710,7 @@ void NWM_UDS::InitializeDeprecated(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::GetConnectionStatus(Kernel::HLERequestContext& ctx) { void NWM_UDS::GetConnectionStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(13, 0); IPC::RequestBuilder rb = rp.MakeBuilder(13, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -729,7 +729,7 @@ void NWM_UDS::GetConnectionStatus(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::GetNodeInformation(Kernel::HLERequestContext& ctx) { void NWM_UDS::GetNodeInformation(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xD, 1, 0); IPC::RequestParser rp(ctx);
u16 network_node_id = rp.Pop<u16>(); u16 network_node_id = rp.Pop<u16>();
if (!initialized) { if (!initialized) {
@ -760,7 +760,7 @@ void NWM_UDS::GetNodeInformation(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::Bind(Kernel::HLERequestContext& ctx) { void NWM_UDS::Bind(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 4, 0); IPC::RequestParser rp(ctx);
u32 bind_node_id = rp.Pop<u32>(); u32 bind_node_id = rp.Pop<u32>();
u32 recv_buffer_size = rp.Pop<u32>(); u32 recv_buffer_size = rp.Pop<u32>();
@ -811,7 +811,7 @@ void NWM_UDS::Bind(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::Unbind(Kernel::HLERequestContext& ctx) { void NWM_UDS::Unbind(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 1, 0); IPC::RequestParser rp(ctx);
u32 bind_node_id = rp.Pop<u32>(); u32 bind_node_id = rp.Pop<u32>();
if (bind_node_id == 0) { if (bind_node_id == 0) {
@ -911,7 +911,7 @@ ResultCode NWM_UDS::BeginHostingNetwork(std::span<const u8> network_info_buffer,
} }
void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) { void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1D, 1, 4); IPC::RequestParser rp(ctx);
const u32 passphrase_size = rp.Pop<u32>(); const u32 passphrase_size = rp.Pop<u32>();
@ -929,7 +929,7 @@ void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::BeginHostingNetworkDeprecated(Kernel::HLERequestContext& ctx) { void NWM_UDS::BeginHostingNetworkDeprecated(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 0x10, 2); IPC::RequestParser rp(ctx);
// Real NWM module reads 0x108 bytes from the command buffer into the network info, where the // Real NWM module reads 0x108 bytes from the command buffer into the network info, where the
// last 0xCC bytes (application_data and size) are undefined values. Here we just read the first // last 0xCC bytes (application_data and size) are undefined values. Here we just read the first
// 0x3C defined bytes and zero application_data in BeginHostingNetwork. // 0x3C defined bytes and zero application_data in BeginHostingNetwork.
@ -947,7 +947,7 @@ void NWM_UDS::BeginHostingNetworkDeprecated(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::EjectClient(Kernel::HLERequestContext& ctx) { void NWM_UDS::EjectClient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 1, 0); IPC::RequestParser rp(ctx);
const u16 network_node_id = rp.Pop<u16>(); const u16 network_node_id = rp.Pop<u16>();
LOG_WARNING(Service_NWM, "(stubbed) called"); LOG_WARNING(Service_NWM, "(stubbed) called");
@ -998,7 +998,7 @@ void NWM_UDS::EjectClient(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::UpdateNetworkAttribute(Kernel::HLERequestContext& ctx) { void NWM_UDS::UpdateNetworkAttribute(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 2, 0); IPC::RequestParser rp(ctx);
rp.Skip(2, false); rp.Skip(2, false);
LOG_WARNING(Service_NWM, "stubbed"); LOG_WARNING(Service_NWM, "stubbed");
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -1006,7 +1006,7 @@ void NWM_UDS::UpdateNetworkAttribute(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::DestroyNetwork(Kernel::HLERequestContext& ctx) { void NWM_UDS::DestroyNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 0, 0); IPC::RequestParser rp(ctx);
// Unschedule the beacon broadcast event. // Unschedule the beacon broadcast event.
system.CoreTiming().UnscheduleEvent(beacon_broadcast_event, 0); system.CoreTiming().UnscheduleEvent(beacon_broadcast_event, 0);
@ -1044,7 +1044,7 @@ void NWM_UDS::DestroyNetwork(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::DisconnectNetwork(Kernel::HLERequestContext& ctx) { void NWM_UDS::DisconnectNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
using Network::WifiPacket; using Network::WifiPacket;
@ -1089,7 +1089,7 @@ void NWM_UDS::DisconnectNetwork(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::SendTo(Kernel::HLERequestContext& ctx) { void NWM_UDS::SendTo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 6, 2); IPC::RequestParser rp(ctx);
rp.Skip(1, false); rp.Skip(1, false);
u16 dest_node_id = rp.Pop<u16>(); u16 dest_node_id = rp.Pop<u16>();
@ -1167,7 +1167,7 @@ void NWM_UDS::SendTo(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::PullPacket(Kernel::HLERequestContext& ctx) { void NWM_UDS::PullPacket(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 3, 0); IPC::RequestParser rp(ctx);
u32 bind_node_id = rp.Pop<u32>(); u32 bind_node_id = rp.Pop<u32>();
u32 max_out_buff_size_aligned = rp.Pop<u32>(); u32 max_out_buff_size_aligned = rp.Pop<u32>();
@ -1236,7 +1236,7 @@ void NWM_UDS::PullPacket(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::GetChannel(Kernel::HLERequestContext& ctx) { void NWM_UDS::GetChannel(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
std::lock_guard lock(connection_status_mutex); std::lock_guard lock(connection_status_mutex);
@ -1292,7 +1292,7 @@ void NWM_UDS::ConnectToNetwork(Kernel::HLERequestContext& ctx, u16 command_id,
} }
void NWM_UDS::ConnectToNetwork(Kernel::HLERequestContext& ctx) { void NWM_UDS::ConnectToNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1E, 2, 4); IPC::RequestParser rp(ctx);
const auto connection_type = rp.Pop<u8>(); const auto connection_type = rp.Pop<u8>();
[[maybe_unused]] const auto passphrase_size = rp.Pop<u32>(); [[maybe_unused]] const auto passphrase_size = rp.Pop<u32>();
@ -1308,7 +1308,7 @@ void NWM_UDS::ConnectToNetwork(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::ConnectToNetworkDeprecated(Kernel::HLERequestContext& ctx) { void NWM_UDS::ConnectToNetworkDeprecated(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 0x11, 2); IPC::RequestParser rp(ctx);
// Similar to BeginHostingNetworkDeprecated, we only read the first 0x3C bytes into the network // Similar to BeginHostingNetworkDeprecated, we only read the first 0x3C bytes into the network
// info // info
@ -1325,7 +1325,7 @@ void NWM_UDS::ConnectToNetworkDeprecated(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::SetApplicationData(Kernel::HLERequestContext& ctx) { void NWM_UDS::SetApplicationData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 1, 2); IPC::RequestParser rp(ctx);
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
@ -1349,7 +1349,7 @@ void NWM_UDS::SetApplicationData(Kernel::HLERequestContext& ctx) {
} }
void NWM_UDS::GetApplicationData(Kernel::HLERequestContext& ctx) { void NWM_UDS::GetApplicationData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 1, 0); IPC::RequestParser rp(ctx);
u32 input_size = rp.Pop<u32>(); u32 input_size = rp.Pop<u32>();
u8 appdata_size = network_info.application_data_size; u8 appdata_size = network_info.application_data_size;
@ -1367,8 +1367,8 @@ void NWM_UDS::GetApplicationData(Kernel::HLERequestContext& ctx) {
rb.PushStaticBuffer(std::move(appdata), 0); rb.PushStaticBuffer(std::move(appdata), 0);
} }
void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx, u16 command_id) { void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, command_id, 0, 6); IPC::RequestParser rp(ctx);
const std::vector<u8> network_struct_buffer = rp.PopStaticBuffer(); const std::vector<u8> network_struct_buffer = rp.PopStaticBuffer();
ASSERT(network_struct_buffer.size() == sizeof(NetworkInfo)); ASSERT(network_struct_buffer.size() == sizeof(NetworkInfo));
@ -1433,11 +1433,6 @@ void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx, u16 command_id)
rb.PushStaticBuffer(std::move(output_buffer), 0); rb.PushStaticBuffer(std::move(output_buffer), 0);
} }
template <u16 command_id>
void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx) {
DecryptBeaconData(ctx, command_id);
}
// Sends a 802.11 beacon frame with information about the current network. // Sends a 802.11 beacon frame with information about the current network.
void NWM_UDS::BeaconBroadcastCallback(std::uintptr_t user_data, s64 cycles_late) { void NWM_UDS::BeaconBroadcastCallback(std::uintptr_t user_data, s64 cycles_late) {
// Don't do anything if we're not actually hosting a network // Don't do anything if we're not actually hosting a network
@ -1464,35 +1459,35 @@ void NWM_UDS::BeaconBroadcastCallback(std::uintptr_t user_data, s64 cycles_late)
NWM_UDS::NWM_UDS(Core::System& system) : ServiceFramework("nwm::UDS"), system(system) { NWM_UDS::NWM_UDS(Core::System& system) : ServiceFramework("nwm::UDS"), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 11, 2), &NWM_UDS::InitializeDeprecated, "Initialize (deprecated)"}, {0x0001, &NWM_UDS::InitializeDeprecated, "Initialize (deprecated)"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Scrap"}, {0x0002, nullptr, "Scrap"},
{IPC::MakeHeader(0x0003, 0, 0), &NWM_UDS::Shutdown, "Shutdown"}, {0x0003, &NWM_UDS::Shutdown, "Shutdown"},
{IPC::MakeHeader(0x0004, 16, 2), &NWM_UDS::BeginHostingNetworkDeprecated, "BeginHostingNetwork (deprecated)"}, {0x0004, &NWM_UDS::BeginHostingNetworkDeprecated, "BeginHostingNetwork (deprecated)"},
{IPC::MakeHeader(0x0005, 1, 0), &NWM_UDS::EjectClient, "EjectClient"}, {0x0005, &NWM_UDS::EjectClient, "EjectClient"},
{IPC::MakeHeader(0x0006, 0, 0), nullptr, "EjectSpectator"}, {0x0006, nullptr, "EjectSpectator"},
{IPC::MakeHeader(0x0007, 2, 0), &NWM_UDS::UpdateNetworkAttribute, "UpdateNetworkAttribute"}, {0x0007, &NWM_UDS::UpdateNetworkAttribute, "UpdateNetworkAttribute"},
{IPC::MakeHeader(0x0008, 0, 0), &NWM_UDS::DestroyNetwork, "DestroyNetwork"}, {0x0008, &NWM_UDS::DestroyNetwork, "DestroyNetwork"},
{IPC::MakeHeader(0x0009, 17, 2), &NWM_UDS::ConnectToNetworkDeprecated, "ConnectToNetwork (deprecated)"}, {0x0009, &NWM_UDS::ConnectToNetworkDeprecated, "ConnectToNetwork (deprecated)"},
{IPC::MakeHeader(0x000A, 0, 0), &NWM_UDS::DisconnectNetwork, "DisconnectNetwork"}, {0x000A, &NWM_UDS::DisconnectNetwork, "DisconnectNetwork"},
{IPC::MakeHeader(0x000B, 0, 0), &NWM_UDS::GetConnectionStatus, "GetConnectionStatus"}, {0x000B, &NWM_UDS::GetConnectionStatus, "GetConnectionStatus"},
{IPC::MakeHeader(0x000D, 1, 0), &NWM_UDS::GetNodeInformation, "GetNodeInformation"}, {0x000D, &NWM_UDS::GetNodeInformation, "GetNodeInformation"},
{IPC::MakeHeader(0x000E, 0, 6), &NWM_UDS::DecryptBeaconData<0x0E>, "DecryptBeaconData (deprecated)"}, {0x000E, &NWM_UDS::DecryptBeaconData, "DecryptBeaconData (deprecated)"},
{IPC::MakeHeader(0x000F, 16, 4), &NWM_UDS::RecvBeaconBroadcastData, "RecvBeaconBroadcastData"}, {0x000F, &NWM_UDS::RecvBeaconBroadcastData, "RecvBeaconBroadcastData"},
{IPC::MakeHeader(0x0010, 1, 2), &NWM_UDS::SetApplicationData, "SetApplicationData"}, {0x0010, &NWM_UDS::SetApplicationData, "SetApplicationData"},
{IPC::MakeHeader(0x0011, 1, 0), &NWM_UDS::GetApplicationData, "GetApplicationData"}, {0x0011, &NWM_UDS::GetApplicationData, "GetApplicationData"},
{IPC::MakeHeader(0x0012, 4, 0), &NWM_UDS::Bind, "Bind"}, {0x0012, &NWM_UDS::Bind, "Bind"},
{IPC::MakeHeader(0x0013, 1, 0), &NWM_UDS::Unbind, "Unbind"}, {0x0013, &NWM_UDS::Unbind, "Unbind"},
{IPC::MakeHeader(0x0014, 3, 0), &NWM_UDS::PullPacket, "PullPacket"}, {0x0014, &NWM_UDS::PullPacket, "PullPacket"},
{IPC::MakeHeader(0x0015, 2, 0), nullptr, "SetMaxSendDelay"}, {0x0015, nullptr, "SetMaxSendDelay"},
{IPC::MakeHeader(0x0017, 6, 2), &NWM_UDS::SendTo, "SendTo"}, {0x0017, &NWM_UDS::SendTo, "SendTo"},
{IPC::MakeHeader(0x001A, 0, 0), &NWM_UDS::GetChannel, "GetChannel"}, {0x001A, &NWM_UDS::GetChannel, "GetChannel"},
{IPC::MakeHeader(0x001B, 12, 2), &NWM_UDS::InitializeWithVersion, "InitializeWithVersion"}, {0x001B, &NWM_UDS::InitializeWithVersion, "InitializeWithVersion"},
{IPC::MakeHeader(0x001D, 1, 4), &NWM_UDS::BeginHostingNetwork, "BeginHostingNetwork"}, {0x001D, &NWM_UDS::BeginHostingNetwork, "BeginHostingNetwork"},
{IPC::MakeHeader(0x001E, 2, 4), &NWM_UDS::ConnectToNetwork, "ConnectToNetwork"}, {0x001E, &NWM_UDS::ConnectToNetwork, "ConnectToNetwork"},
{IPC::MakeHeader(0x001F, 0, 6), &NWM_UDS::DecryptBeaconData<0x1F>, "DecryptBeaconData"}, {0x001F, &NWM_UDS::DecryptBeaconData, "DecryptBeaconData"},
{IPC::MakeHeader(0x0020, 1, 0), nullptr, "Flush"}, {0x0020, nullptr, "Flush"},
{IPC::MakeHeader(0x0021, 2, 0), nullptr, "SetProbeResponseParam"}, {0x0021, nullptr, "SetProbeResponseParam"},
{IPC::MakeHeader(0x0022, 16, 2), nullptr, "ScanOnConnection"}, {0x0022, nullptr, "ScanOnConnection"},
// clang-format on // clang-format on
}; };
connection_status_event = connection_status_event =

View file

@ -443,9 +443,6 @@ private:
* 1 : Result of function, 0 on success, otherwise error code * 1 : Result of function, 0 on success, otherwise error code
* 2, 3: output buffer return descriptor & ptr * 2, 3: output buffer return descriptor & ptr
*/ */
void DecryptBeaconData(Kernel::HLERequestContext& ctx, u16 command_id);
template <u16 command_id>
void DecryptBeaconData(Kernel::HLERequestContext& ctx); void DecryptBeaconData(Kernel::HLERequestContext& ctx);
ResultVal<std::shared_ptr<Kernel::Event>> Initialize( ResultVal<std::shared_ptr<Kernel::Event>> Initialize(

View file

@ -47,19 +47,19 @@ PAddr PLG_LDR::plugin_fb_addr = 0;
PLG_LDR::PLG_LDR() : ServiceFramework{"plg:ldr", 1} { PLG_LDR::PLG_LDR() : ServiceFramework{"plg:ldr", 1} {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 2), nullptr, "LoadPlugin"}, {0x0001, nullptr, "LoadPlugin"},
{IPC::MakeHeader(0x0002, 0, 0), &PLG_LDR::IsEnabled, "IsEnabled"}, {0x0002, &PLG_LDR::IsEnabled, "IsEnabled"},
{IPC::MakeHeader(0x0003, 1, 0), &PLG_LDR::SetEnabled, "SetEnabled"}, {0x0003, &PLG_LDR::SetEnabled, "SetEnabled"},
{IPC::MakeHeader(0x0004, 2, 4), &PLG_LDR::SetLoadSettings, "SetLoadSettings"}, {0x0004, &PLG_LDR::SetLoadSettings, "SetLoadSettings"},
{IPC::MakeHeader(0x0005, 1, 8), nullptr, "DisplayMenu"}, {0x0005, nullptr, "DisplayMenu"},
{IPC::MakeHeader(0x0006, 0, 4), nullptr, "DisplayMessage"}, {0x0006, nullptr, "DisplayMessage"},
{IPC::MakeHeader(0x0007, 1, 4), &PLG_LDR::DisplayErrorMessage, "DisplayErrorMessage"}, {0x0007, &PLG_LDR::DisplayErrorMessage, "DisplayErrorMessage"},
{IPC::MakeHeader(0x0008, 0, 0), &PLG_LDR::GetPLGLDRVersion, "GetPLGLDRVersion"}, {0x0008, &PLG_LDR::GetPLGLDRVersion, "GetPLGLDRVersion"},
{IPC::MakeHeader(0x0009, 0, 0), &PLG_LDR::GetArbiter, "GetArbiter"}, {0x0009, &PLG_LDR::GetArbiter, "GetArbiter"},
{IPC::MakeHeader(0x000A, 0, 2), &PLG_LDR::GetPluginPath, "GetPluginPath"}, {0x000A, &PLG_LDR::GetPluginPath, "GetPluginPath"},
{IPC::MakeHeader(0x000B, 1, 0), nullptr, "SetRosalinaMenuBlock"}, {0x000B, nullptr, "SetRosalinaMenuBlock"},
{IPC::MakeHeader(0x000C, 2, 4), nullptr, "SetSwapParam"}, {0x000C, nullptr, "SetSwapParam"},
{IPC::MakeHeader(0x000D, 1, 2), nullptr, "SetLoadExeParam"}, {0x000D, nullptr, "SetLoadExeParam"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);
@ -156,7 +156,7 @@ void PLG_LDR::OnMemoryChanged(Kernel::Process& process, Kernel::KernelSystem& ke
} }
void PLG_LDR::IsEnabled(Kernel::HLERequestContext& ctx) { void PLG_LDR::IsEnabled(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 2, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -164,7 +164,7 @@ void PLG_LDR::IsEnabled(Kernel::HLERequestContext& ctx) {
} }
void PLG_LDR::SetEnabled(Kernel::HLERequestContext& ctx) { void PLG_LDR::SetEnabled(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 3, 1, 0); IPC::RequestParser rp(ctx);
bool enabled = rp.Pop<u32>() == 1; bool enabled = rp.Pop<u32>() == 1;
bool can_change = enabled == plgldr_context.is_enabled || allow_game_change; bool can_change = enabled == plgldr_context.is_enabled || allow_game_change;
@ -177,7 +177,7 @@ void PLG_LDR::SetEnabled(Kernel::HLERequestContext& ctx) {
} }
void PLG_LDR::SetLoadSettings(Kernel::HLERequestContext& ctx) { void PLG_LDR::SetLoadSettings(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 4, 2, 4); IPC::RequestParser rp(ctx);
plgldr_context.use_user_load_parameters = true; plgldr_context.use_user_load_parameters = true;
plgldr_context.user_load_parameters.no_flash = rp.Pop<u32>() == 1; plgldr_context.user_load_parameters.no_flash = rp.Pop<u32>() == 1;
@ -201,7 +201,7 @@ void PLG_LDR::SetLoadSettings(Kernel::HLERequestContext& ctx) {
} }
void PLG_LDR::DisplayErrorMessage(Kernel::HLERequestContext& ctx) { void PLG_LDR::DisplayErrorMessage(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 7, 1, 4); IPC::RequestParser rp(ctx);
u32 error_code = rp.Pop<u32>(); u32 error_code = rp.Pop<u32>();
auto title = rp.PopMappedBuffer(); auto title = rp.PopMappedBuffer();
auto desc = rp.PopMappedBuffer(); auto desc = rp.PopMappedBuffer();
@ -223,7 +223,7 @@ void PLG_LDR::DisplayErrorMessage(Kernel::HLERequestContext& ctx) {
} }
void PLG_LDR::GetPLGLDRVersion(Kernel::HLERequestContext& ctx) { void PLG_LDR::GetPLGLDRVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 8, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -231,7 +231,7 @@ void PLG_LDR::GetPLGLDRVersion(Kernel::HLERequestContext& ctx) {
} }
void PLG_LDR::GetArbiter(Kernel::HLERequestContext& ctx) { void PLG_LDR::GetArbiter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 9, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
// NOTE: It doesn't make sense to send an arbiter in HLE, as it's used to // NOTE: It doesn't make sense to send an arbiter in HLE, as it's used to
@ -242,7 +242,7 @@ void PLG_LDR::GetArbiter(Kernel::HLERequestContext& ctx) {
} }
void PLG_LDR::GetPluginPath(Kernel::HLERequestContext& ctx) { void PLG_LDR::GetPluginPath(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 10, 0, 2); IPC::RequestParser rp(ctx);
auto path = rp.PopMappedBuffer(); auto path = rp.PopMappedBuffer();
// Same behaviour as strncpy // Same behaviour as strncpy

View file

@ -13,19 +13,19 @@ namespace Service::PM {
PM_APP::PM_APP() : ServiceFramework("pm:app", 3) { PM_APP::PM_APP() : ServiceFramework("pm:app", 3) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 5, 0), nullptr, "LaunchTitle"}, {0x0001, nullptr, "LaunchTitle"},
{IPC::MakeHeader(0x0002, 2, 2), nullptr, "LaunchFIRM"}, {0x0002, nullptr, "LaunchFIRM"},
{IPC::MakeHeader(0x0003, 2, 0), nullptr, "TerminateApplication"}, {0x0003, nullptr, "TerminateApplication"},
{IPC::MakeHeader(0x0004, 4, 0), nullptr, "TerminateTitle"}, {0x0004, nullptr, "TerminateTitle"},
{IPC::MakeHeader(0x0005, 3, 0), nullptr, "TerminateProcess"}, {0x0005, nullptr, "TerminateProcess"},
{IPC::MakeHeader(0x0006, 2, 2), nullptr, "PrepareForReboot"}, {0x0006, nullptr, "PrepareForReboot"},
{IPC::MakeHeader(0x0007, 1, 2), nullptr, "GetFIRMLaunchParams"}, {0x0007, nullptr, "GetFIRMLaunchParams"},
{IPC::MakeHeader(0x0008, 4, 0), nullptr, "GetTitleExheaderFlags"}, {0x0008, nullptr, "GetTitleExheaderFlags"},
{IPC::MakeHeader(0x0009, 1, 2), nullptr, "SetFIRMLaunchParams"}, {0x0009, nullptr, "SetFIRMLaunchParams"},
{IPC::MakeHeader(0x000A, 5, 0), nullptr, "SetAppResourceLimit"}, {0x000A, nullptr, "SetAppResourceLimit"},
{IPC::MakeHeader(0x000B, 5, 0), nullptr, "GetAppResourceLimit"}, {0x000B, nullptr, "GetAppResourceLimit"},
{IPC::MakeHeader(0x000C, 2, 0), nullptr, "UnregisterProcess"}, {0x000C, nullptr, "UnregisterProcess"},
{IPC::MakeHeader(0x000D, 9, 0), nullptr, "LaunchTitleUpdate"}, {0x000D, nullptr, "LaunchTitleUpdate"},
// clang-format on // clang-format on
}; };

View file

@ -13,9 +13,9 @@ namespace Service::PM {
PM_DBG::PM_DBG() : ServiceFramework("pm:dbg", 3) { PM_DBG::PM_DBG() : ServiceFramework("pm:dbg", 3) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 5, 0), nullptr, "LaunchAppDebug"}, {0x0001, nullptr, "LaunchAppDebug"},
{IPC::MakeHeader(0x0002, 5, 0), nullptr, "LaunchApp"}, {0x0002, nullptr, "LaunchApp"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "RunQueuedProcess"}, {0x0003, nullptr, "RunQueuedProcess"},
// clang-format on // clang-format on
}; };

View file

@ -40,7 +40,7 @@ constexpr std::array<u8, 10> KeyTypes{{
}}; }};
void PS_PS::EncryptDecryptAes(Kernel::HLERequestContext& ctx) { void PS_PS::EncryptDecryptAes(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4, 8, 4); IPC::RequestParser rp(ctx);
auto src_size = rp.Pop<u32>(); auto src_size = rp.Pop<u32>();
[[maybe_unused]] const auto dest_size = rp.Pop<u32>(); [[maybe_unused]] const auto dest_size = rp.Pop<u32>();
@ -149,22 +149,22 @@ void PS_PS::EncryptDecryptAes(Kernel::HLERequestContext& ctx) {
PS_PS::PS_PS() : ServiceFramework("ps:ps", DefaultMaxSessions) { PS_PS::PS_PS() : ServiceFramework("ps:ps", DefaultMaxSessions) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 9, 4), nullptr, "SignRsaSha256"}, {0x0001, nullptr, "SignRsaSha256"},
{IPC::MakeHeader(0x0002, 9, 4), nullptr, "VerifyRsaSha256"}, {0x0002, nullptr, "VerifyRsaSha256"},
{IPC::MakeHeader(0x0004, 8, 4), &PS_PS::EncryptDecryptAes, "EncryptDecryptAes"}, {0x0004, &PS_PS::EncryptDecryptAes, "EncryptDecryptAes"},
{IPC::MakeHeader(0x0005, 10, 4), nullptr, "EncryptSignDecryptVerifyAesCcm"}, {0x0005, nullptr, "EncryptSignDecryptVerifyAesCcm"},
{IPC::MakeHeader(0x0006, 1, 0), nullptr, "GetRomId"}, {0x0006, nullptr, "GetRomId"},
{IPC::MakeHeader(0x0007, 1, 0), nullptr, "GetRomId2"}, {0x0007, nullptr, "GetRomId2"},
{IPC::MakeHeader(0x0008, 1, 0), nullptr, "GetRomMakerCode"}, {0x0008, nullptr, "GetRomMakerCode"},
{IPC::MakeHeader(0x0009, 0, 0), nullptr, "GetCTRCardAutoStartupBit"}, {0x0009, nullptr, "GetCTRCardAutoStartupBit"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetLocalFriendCodeSeed"}, {0x000A, nullptr, "GetLocalFriendCodeSeed"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "GetDeviceId"}, {0x000B, nullptr, "GetDeviceId"},
{IPC::MakeHeader(0x000C, 0, 0), nullptr, "SeedRNG"}, {0x000C, nullptr, "SeedRNG"},
{IPC::MakeHeader(0x000D, 1, 2), nullptr, "GenerateRandomBytes"}, {0x000D, nullptr, "GenerateRandomBytes"},
{IPC::MakeHeader(0x000E, 2, 2), nullptr, "InterfaceForPXI_0x04010084"}, {0x000E, nullptr, "InterfaceForPXI_0x04010084"},
{IPC::MakeHeader(0x000F, 2, 2), nullptr, "InterfaceForPXI_0x04020082"}, {0x000F, nullptr, "InterfaceForPXI_0x04020082"},
{IPC::MakeHeader(0x0010, 1, 2), nullptr, "InterfaceForPXI_0x04030044"}, {0x0010, nullptr, "InterfaceForPXI_0x04030044"},
{IPC::MakeHeader(0x0011, 1, 2), nullptr, "InterfaceForPXI_0x04040044"}, {0x0011, nullptr, "InterfaceForPXI_0x04040044"},
// clang-format on // clang-format on
}; };

View file

@ -27,7 +27,7 @@ namespace Service::PTM {
static const GameCoin default_game_coin = {0x4F00, 42, 0, 0, 0, 2014, 12, 29}; static const GameCoin default_game_coin = {0x4F00, 42, 0, 0, 0, 2014, 12, 29};
void Module::Interface::GetAdapterState(Kernel::HLERequestContext& ctx) { void Module::Interface::GetAdapterState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -37,7 +37,7 @@ void Module::Interface::GetAdapterState(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetShellState(Kernel::HLERequestContext& ctx) { void Module::Interface::GetShellState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x6, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -45,7 +45,7 @@ void Module::Interface::GetShellState(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetBatteryLevel(Kernel::HLERequestContext& ctx) { void Module::Interface::GetBatteryLevel(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x7, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -55,7 +55,7 @@ void Module::Interface::GetBatteryLevel(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetBatteryChargeState(Kernel::HLERequestContext& ctx) { void Module::Interface::GetBatteryChargeState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x8, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -65,7 +65,7 @@ void Module::Interface::GetBatteryChargeState(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetPedometerState(Kernel::HLERequestContext& ctx) { void Module::Interface::GetPedometerState(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -75,7 +75,7 @@ void Module::Interface::GetPedometerState(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetStepHistory(Kernel::HLERequestContext& ctx) { void Module::Interface::GetStepHistory(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 3, 2); IPC::RequestParser rp(ctx);
u32 hours = rp.Pop<u32>(); u32 hours = rp.Pop<u32>();
u64 start_time = rp.Pop<u64>(); u64 start_time = rp.Pop<u64>();
@ -98,7 +98,7 @@ void Module::Interface::GetStepHistory(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetTotalStepCount(Kernel::HLERequestContext& ctx) { void Module::Interface::GetTotalStepCount(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xC, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -108,7 +108,7 @@ void Module::Interface::GetTotalStepCount(Kernel::HLERequestContext& ctx) {
} }
void Module::Interface::GetSoftwareClosedFlag(Kernel::HLERequestContext& ctx) { void Module::Interface::GetSoftwareClosedFlag(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x80F, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -127,14 +127,14 @@ void CheckNew3DS(IPC::RequestBuilder& rb) {
} }
void Module::Interface::CheckNew3DS(Kernel::HLERequestContext& ctx) { void Module::Interface::CheckNew3DS(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x40A, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
Service::PTM::CheckNew3DS(rb); Service::PTM::CheckNew3DS(rb);
} }
void Module::Interface::GetSystemTime(Kernel::HLERequestContext& ctx) { void Module::Interface::GetSystemTime(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x401, 0, 0); IPC::RequestParser rp(ctx);
auto& share_page = Core::System::GetInstance().Kernel().GetSharedPageHandler(); auto& share_page = Core::System::GetInstance().Kernel().GetSharedPageHandler();
const u64 console_time = share_page.GetSystemTimeSince2000(); const u64 console_time = share_page.GetSystemTimeSince2000();

View file

@ -14,23 +14,23 @@ PTM_Gets::PTM_Gets(std::shared_ptr<Module> ptm)
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// ptm:u common commands // ptm:u common commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 2), nullptr, "RegisterAlarmClient"}, {0x0001, nullptr, "RegisterAlarmClient"},
{IPC::MakeHeader(0x0002, 2, 0), nullptr, "SetRtcAlarm"}, {0x0002, nullptr, "SetRtcAlarm"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "GetRtcAlarm"}, {0x0003, nullptr, "GetRtcAlarm"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "CancelRtcAlarm"}, {0x0004, nullptr, "CancelRtcAlarm"},
{IPC::MakeHeader(0x0005, 0, 0), &PTM_Gets::GetAdapterState, "GetAdapterState"}, {0x0005, &PTM_Gets::GetAdapterState, "GetAdapterState"},
{IPC::MakeHeader(0x0006, 0, 0), &PTM_Gets::GetShellState, "GetShellState"}, {0x0006, &PTM_Gets::GetShellState, "GetShellState"},
{IPC::MakeHeader(0x0007, 0, 0), &PTM_Gets::GetBatteryLevel, "GetBatteryLevel"}, {0x0007, &PTM_Gets::GetBatteryLevel, "GetBatteryLevel"},
{IPC::MakeHeader(0x0008, 0, 0), &PTM_Gets::GetBatteryChargeState, "GetBatteryChargeState"}, {0x0008, &PTM_Gets::GetBatteryChargeState, "GetBatteryChargeState"},
{IPC::MakeHeader(0x0009, 0, 0), nullptr, "GetPedometerState"}, {0x0009, nullptr, "GetPedometerState"},
{IPC::MakeHeader(0x000A, 1, 2), nullptr, "GetStepHistoryEntry"}, {0x000A, nullptr, "GetStepHistoryEntry"},
{IPC::MakeHeader(0x000B, 3, 2), &PTM_Gets::GetStepHistory, "GetStepHistory"}, {0x000B, &PTM_Gets::GetStepHistory, "GetStepHistory"},
{IPC::MakeHeader(0x000C, 0, 0), &PTM_Gets::GetTotalStepCount, "GetTotalStepCount"}, {0x000C, &PTM_Gets::GetTotalStepCount, "GetTotalStepCount"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "SetPedometerRecordingMode"}, {0x000D, nullptr, "SetPedometerRecordingMode"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetPedometerRecordingMode"}, {0x000E, nullptr, "GetPedometerRecordingMode"},
{IPC::MakeHeader(0x000F, 2, 4), nullptr, "GetStepHistoryAll"}, {0x000F, nullptr, "GetStepHistoryAll"},
// ptm:gets // ptm:gets
{IPC::MakeHeader(0x0401, 0, 0), &PTM_Gets::GetSystemTime, "GetSystemTime"}, {0x0401, &PTM_Gets::GetSystemTime, "GetSystemTime"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -14,26 +14,26 @@ PTM_Play::PTM_Play(std::shared_ptr<Module> ptm)
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// ptm:u common commands // ptm:u common commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 2), nullptr, "RegisterAlarmClient"}, {0x0001, nullptr, "RegisterAlarmClient"},
{IPC::MakeHeader(0x0002, 2, 0), nullptr, "SetRtcAlarm"}, {0x0002, nullptr, "SetRtcAlarm"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "GetRtcAlarm"}, {0x0003, nullptr, "GetRtcAlarm"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "CancelRtcAlarm"}, {0x0004, nullptr, "CancelRtcAlarm"},
{IPC::MakeHeader(0x0005, 0, 0), &PTM_Play::GetAdapterState, "GetAdapterState"}, {0x0005, &PTM_Play::GetAdapterState, "GetAdapterState"},
{IPC::MakeHeader(0x0006, 0, 0), &PTM_Play::GetShellState, "GetShellState"}, {0x0006, &PTM_Play::GetShellState, "GetShellState"},
{IPC::MakeHeader(0x0007, 0, 0), &PTM_Play::GetBatteryLevel, "GetBatteryLevel"}, {0x0007, &PTM_Play::GetBatteryLevel, "GetBatteryLevel"},
{IPC::MakeHeader(0x0008, 0, 0), &PTM_Play::GetBatteryChargeState, "GetBatteryChargeState"}, {0x0008, &PTM_Play::GetBatteryChargeState, "GetBatteryChargeState"},
{IPC::MakeHeader(0x0009, 0, 0), nullptr, "GetPedometerState"}, {0x0009, nullptr, "GetPedometerState"},
{IPC::MakeHeader(0x000A, 1, 2), nullptr, "GetStepHistoryEntry"}, {0x000A, nullptr, "GetStepHistoryEntry"},
{IPC::MakeHeader(0x000B, 3, 2), &PTM_Play::GetStepHistory, "GetStepHistory"}, {0x000B, &PTM_Play::GetStepHistory, "GetStepHistory"},
{IPC::MakeHeader(0x000C, 0, 0), &PTM_Play::GetTotalStepCount, "GetTotalStepCount"}, {0x000C, &PTM_Play::GetTotalStepCount, "GetTotalStepCount"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "SetPedometerRecordingMode"}, {0x000D, nullptr, "SetPedometerRecordingMode"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetPedometerRecordingMode"}, {0x000E, nullptr, "GetPedometerRecordingMode"},
{IPC::MakeHeader(0x000F, 2, 4), nullptr, "GetStepHistoryAll"}, {0x000F, nullptr, "GetStepHistoryAll"},
// ptm:play // ptm:play
{IPC::MakeHeader(0x0807, 2, 2), nullptr, "GetPlayHistory"}, {0x0807, nullptr, "GetPlayHistory"},
{IPC::MakeHeader(0x0808, 0, 0), nullptr, "GetPlayHistoryStart"}, {0x0808, nullptr, "GetPlayHistoryStart"},
{IPC::MakeHeader(0x0809, 0, 0), nullptr, "GetPlayHistoryLength"}, {0x0809, nullptr, "GetPlayHistoryLength"},
{IPC::MakeHeader(0x080B, 2, 0), nullptr, "CalcPlayHistoryStart"}, {0x080B, nullptr, "CalcPlayHistoryStart"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -13,7 +13,7 @@ PTM_Sets::PTM_Sets(std::shared_ptr<Module> ptm) : Module::Interface(std::move(pt
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// Note that this service does not have access to ptm:u's common commands // Note that this service does not have access to ptm:u's common commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 0), nullptr, "SetSystemTime"}, {0x0001, nullptr, "SetSystemTime"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -15,53 +15,53 @@ PTM_S_Common::PTM_S_Common(std::shared_ptr<Module> ptm, const char* name)
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// ptm:u common commands // ptm:u common commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 2), nullptr, "RegisterAlarmClient"}, {0x0001, nullptr, "RegisterAlarmClient"},
{IPC::MakeHeader(0x0002, 2, 0), nullptr, "SetRtcAlarm"}, {0x0002, nullptr, "SetRtcAlarm"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "GetRtcAlarm"}, {0x0003, nullptr, "GetRtcAlarm"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "CancelRtcAlarm"}, {0x0004, nullptr, "CancelRtcAlarm"},
{IPC::MakeHeader(0x0005, 0, 0), &PTM_S_Common::GetAdapterState, "GetAdapterState"}, {0x0005, &PTM_S_Common::GetAdapterState, "GetAdapterState"},
{IPC::MakeHeader(0x0006, 0, 0), &PTM_S_Common::GetShellState, "GetShellState"}, {0x0006, &PTM_S_Common::GetShellState, "GetShellState"},
{IPC::MakeHeader(0x0007, 0, 0), &PTM_S_Common::GetBatteryLevel, "GetBatteryLevel"}, {0x0007, &PTM_S_Common::GetBatteryLevel, "GetBatteryLevel"},
{IPC::MakeHeader(0x0008, 0, 0), &PTM_S_Common::GetBatteryChargeState, "GetBatteryChargeState"}, {0x0008, &PTM_S_Common::GetBatteryChargeState, "GetBatteryChargeState"},
{IPC::MakeHeader(0x0009, 0, 0), nullptr, "GetPedometerState"}, {0x0009, nullptr, "GetPedometerState"},
{IPC::MakeHeader(0x000A, 1, 2), nullptr, "GetStepHistoryEntry"}, {0x000A, nullptr, "GetStepHistoryEntry"},
{IPC::MakeHeader(0x000B, 3, 2), &PTM_S_Common::GetStepHistory, "GetStepHistory"}, {0x000B, &PTM_S_Common::GetStepHistory, "GetStepHistory"},
{IPC::MakeHeader(0x000C, 0, 0), &PTM_S_Common::GetTotalStepCount, "GetTotalStepCount"}, {0x000C, &PTM_S_Common::GetTotalStepCount, "GetTotalStepCount"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "SetPedometerRecordingMode"}, {0x000D, nullptr, "SetPedometerRecordingMode"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetPedometerRecordingMode"}, {0x000E, nullptr, "GetPedometerRecordingMode"},
{IPC::MakeHeader(0x000F, 2, 4), nullptr, "GetStepHistoryAll"}, {0x000F, nullptr, "GetStepHistoryAll"},
// ptm:sysm & ptm:s // ptm:sysm & ptm:s
{IPC::MakeHeader(0x0401, 3, 0), nullptr, "SetRtcAlarmEx"}, {0x0401, nullptr, "SetRtcAlarmEx"},
{IPC::MakeHeader(0x0402, 1, 2), nullptr, "ReplySleepQuery"}, {0x0402, nullptr, "ReplySleepQuery"},
{IPC::MakeHeader(0x0403, 1, 2), nullptr, "NotifySleepPreparationComplete"}, {0x0403, nullptr, "NotifySleepPreparationComplete"},
{IPC::MakeHeader(0x0404, 4, 2), nullptr, "SetWakeupTrigger"}, {0x0404, nullptr, "SetWakeupTrigger"},
{IPC::MakeHeader(0x0405, 0, 0), nullptr, "GetAwakeReason"}, {0x0405, nullptr, "GetAwakeReason"},
{IPC::MakeHeader(0x0406, 0, 0), nullptr, "RequestSleep"}, {0x0406, nullptr, "RequestSleep"},
{IPC::MakeHeader(0x0407, 3, 0), nullptr, "ShutdownAsync"}, {0x0407, nullptr, "ShutdownAsync"},
{IPC::MakeHeader(0x0408, 0, 0), nullptr, "Awake"}, {0x0408, nullptr, "Awake"},
{IPC::MakeHeader(0x0409, 2, 0), nullptr, "RebootAsync"}, {0x0409, nullptr, "RebootAsync"},
{IPC::MakeHeader(0x040A, 0, 0), &PTM_S_Common::CheckNew3DS, "CheckNew3DS"}, {0x040A, &PTM_S_Common::CheckNew3DS, "CheckNew3DS"},
{IPC::MakeHeader(0x0801, 25, 0), nullptr, "SetInfoLEDPattern"}, {0x0801, nullptr, "SetInfoLEDPattern"},
{IPC::MakeHeader(0x0802, 1, 0), nullptr, "SetInfoLEDPatternHeader"}, {0x0802, nullptr, "SetInfoLEDPatternHeader"},
{IPC::MakeHeader(0x0803, 0, 0), nullptr, "GetInfoLEDStatus"}, {0x0803, nullptr, "GetInfoLEDStatus"},
{IPC::MakeHeader(0x0804, 1, 0), nullptr, "SetBatteryEmptyLEDPattern"}, {0x0804, nullptr, "SetBatteryEmptyLEDPattern"},
{IPC::MakeHeader(0x0805, 0, 0), nullptr, "ClearStepHistory"}, {0x0805, nullptr, "ClearStepHistory"},
{IPC::MakeHeader(0x0806, 3, 2), nullptr, "SetStepHistory"}, {0x0806, nullptr, "SetStepHistory"},
{IPC::MakeHeader(0x0807, 2, 2), nullptr, "GetPlayHistory"}, {0x0807, nullptr, "GetPlayHistory"},
{IPC::MakeHeader(0x0808, 0, 0), nullptr, "GetPlayHistoryStart"}, {0x0808, nullptr, "GetPlayHistoryStart"},
{IPC::MakeHeader(0x0809, 0, 0), nullptr, "GetPlayHistoryLength"}, {0x0809, nullptr, "GetPlayHistoryLength"},
{IPC::MakeHeader(0x080A, 0, 0), nullptr, "ClearPlayHistory"}, {0x080A, nullptr, "ClearPlayHistory"},
{IPC::MakeHeader(0x080B, 2, 0), nullptr, "CalcPlayHistoryStart"}, {0x080B, nullptr, "CalcPlayHistoryStart"},
{IPC::MakeHeader(0x080C, 2, 0), nullptr, "SetUserTime"}, {0x080C, nullptr, "SetUserTime"},
{IPC::MakeHeader(0x080D, 0, 0), nullptr, "InvalidateSystemTime"}, {0x080D, nullptr, "InvalidateSystemTime"},
{IPC::MakeHeader(0x080E, 5, 0), nullptr, "NotifyPlayEvent"}, {0x080E, nullptr, "NotifyPlayEvent"},
{IPC::MakeHeader(0x080F, 0, 0), &PTM_S_Common::GetSoftwareClosedFlag, "GetSoftwareClosedFlag"}, {0x080F, &PTM_S_Common::GetSoftwareClosedFlag, "GetSoftwareClosedFlag"},
{IPC::MakeHeader(0x0810, 0, 0), nullptr, "ClearSoftwareClosedFlag"}, {0x0810, nullptr, "ClearSoftwareClosedFlag"},
{IPC::MakeHeader(0x0811, 0, 0), &PTM_S_Common::GetShellState, "GetShellState"}, {0x0811, &PTM_S_Common::GetShellState, "GetShellState"},
{IPC::MakeHeader(0x0812, 0, 0), nullptr, "IsShutdownByBatteryEmpty"}, {0x0812, nullptr, "IsShutdownByBatteryEmpty"},
{IPC::MakeHeader(0x0813, 0, 0), nullptr, "FormatSavedata"}, {0x0813, nullptr, "FormatSavedata"},
{IPC::MakeHeader(0x0814, 0, 0), nullptr, "GetLegacyJumpProhibitedFlag"}, {0x0814, nullptr, "GetLegacyJumpProhibitedFlag"},
{IPC::MakeHeader(0x0818, 1, 0), nullptr, "ConfigureNew3DSCPU"}, {0x0818, nullptr, "ConfigureNew3DSCPU"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -12,21 +12,21 @@ namespace Service::PTM {
PTM_U::PTM_U(std::shared_ptr<Module> ptm) : Module::Interface(std::move(ptm), "ptm:u", 26) { PTM_U::PTM_U(std::shared_ptr<Module> ptm) : Module::Interface(std::move(ptm), "ptm:u", 26) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 2), nullptr, "RegisterAlarmClient"}, {0x0001, nullptr, "RegisterAlarmClient"},
{IPC::MakeHeader(0x0002, 2, 0), nullptr, "SetRtcAlarm"}, {0x0002, nullptr, "SetRtcAlarm"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "GetRtcAlarm"}, {0x0003, nullptr, "GetRtcAlarm"},
{IPC::MakeHeader(0x0004, 0, 0), nullptr, "CancelRtcAlarm"}, {0x0004, nullptr, "CancelRtcAlarm"},
{IPC::MakeHeader(0x0005, 0, 0), &PTM_U::GetAdapterState, "GetAdapterState"}, {0x0005, &PTM_U::GetAdapterState, "GetAdapterState"},
{IPC::MakeHeader(0x0006, 0, 0), &PTM_U::GetShellState, "GetShellState"}, {0x0006, &PTM_U::GetShellState, "GetShellState"},
{IPC::MakeHeader(0x0007, 0, 0), &PTM_U::GetBatteryLevel, "GetBatteryLevel"}, {0x0007, &PTM_U::GetBatteryLevel, "GetBatteryLevel"},
{IPC::MakeHeader(0x0008, 0, 0), &PTM_U::GetBatteryChargeState, "GetBatteryChargeState"}, {0x0008, &PTM_U::GetBatteryChargeState, "GetBatteryChargeState"},
{IPC::MakeHeader(0x0009, 0, 0), &PTM_U::GetPedometerState, "GetPedometerState"}, {0x0009, &PTM_U::GetPedometerState, "GetPedometerState"},
{IPC::MakeHeader(0x000A, 1, 2), nullptr, "GetStepHistoryEntry"}, {0x000A, nullptr, "GetStepHistoryEntry"},
{IPC::MakeHeader(0x000B, 3, 2), &PTM_U::GetStepHistory, "GetStepHistory"}, {0x000B, &PTM_U::GetStepHistory, "GetStepHistory"},
{IPC::MakeHeader(0x000C, 0, 0), &PTM_U::GetTotalStepCount, "GetTotalStepCount"}, {0x000C, &PTM_U::GetTotalStepCount, "GetTotalStepCount"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "SetPedometerRecordingMode"}, {0x000D, nullptr, "SetPedometerRecordingMode"},
{IPC::MakeHeader(0x000E, 0, 0), nullptr, "GetPedometerRecordingMode"}, {0x000E, nullptr, "GetPedometerRecordingMode"},
{IPC::MakeHeader(0x000F, 2, 4), nullptr, "GetStepHistoryAll"}, {0x000F, nullptr, "GetStepHistoryAll"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -13,21 +13,21 @@ DEV::DEV() : ServiceFramework("pxi:dev", 1) {
// clang-format off // clang-format off
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 7, 2), nullptr, "ReadHostIO"}, {0x0001, nullptr, "ReadHostIO"},
{IPC::MakeHeader(0x0002, 7, 2), nullptr, "WriteHostIO"}, {0x0002, nullptr, "WriteHostIO"},
{IPC::MakeHeader(0x0003, 4, 2), nullptr, "ReadHostEx"}, {0x0003, nullptr, "ReadHostEx"},
{IPC::MakeHeader(0x0004, 4, 2), nullptr, "WriteHostEx"}, {0x0004, nullptr, "WriteHostEx"},
{IPC::MakeHeader(0x0005, 4, 2), nullptr, "WriteHostExStart"}, {0x0005, nullptr, "WriteHostExStart"},
{IPC::MakeHeader(0x0006, 4, 2), nullptr, "WriteHostExChunk"}, {0x0006, nullptr, "WriteHostExChunk"},
{IPC::MakeHeader(0x0007, 0, 0), nullptr, "WriteHostExEnd"}, {0x0007, nullptr, "WriteHostExEnd"},
{IPC::MakeHeader(0x0008, 0, 0), nullptr, "InitializeMIDI"}, {0x0008, nullptr, "InitializeMIDI"},
{IPC::MakeHeader(0x0009, 0, 0), nullptr, "FinalizeMIDI"}, {0x0009, nullptr, "FinalizeMIDI"},
{IPC::MakeHeader(0x000A, 0, 0), nullptr, "GetMIDIInfo"}, {0x000A, nullptr, "GetMIDIInfo"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "GetMIDIBufferSize"}, {0x000B, nullptr, "GetMIDIBufferSize"},
{IPC::MakeHeader(0x000C, 1, 2), nullptr, "ReadMIDI"}, {0x000C, nullptr, "ReadMIDI"},
{IPC::MakeHeader(0x000D, 26, 8), nullptr, "SPIMultiWriteRead"}, {0x000D, nullptr, "SPIMultiWriteRead"},
{IPC::MakeHeader(0x000E, 10, 4), nullptr, "SPIWriteRead"}, {0x000E, nullptr, "SPIWriteRead"},
{IPC::MakeHeader(0x000F, 0, 0), nullptr, "GetCardDevice"}, {0x000F, nullptr, "GetCardDevice"},
// clang-format on // clang-format on
}; };
// clang-format on // clang-format on

View file

@ -14,8 +14,8 @@ QTM_C::QTM_C() : ServiceFramework("qtm:c", 2) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// qtm calibration commands // qtm calibration commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 0), nullptr, "InitializeHardwareCheck"}, {0x0001, nullptr, "InitializeHardwareCheck"},
{IPC::MakeHeader(0x0005, 1, 0), nullptr, "SetIrLedCheck"}, {0x0005, nullptr, "SetIrLedCheck"},
// clang-format on // clang-format on
}; };

View file

@ -14,8 +14,8 @@ QTM_S::QTM_S() : ServiceFramework("qtm:s", 2) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// qtm common commands // qtm common commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 0), nullptr, "GetHeadtrackingInfoRaw"}, {0x0001, nullptr, "GetHeadtrackingInfoRaw"},
{IPC::MakeHeader(0x0002, 2, 0), nullptr, "GetHeadtrackingInfo"}, {0x0002, nullptr, "GetHeadtrackingInfo"},
// clang-format on // clang-format on
}; };

View file

@ -14,8 +14,8 @@ QTM_SP::QTM_SP() : ServiceFramework("qtm:sp", 2) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// qtm common commands // qtm common commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 0), nullptr, "GetHeadtrackingInfoRaw"}, {0x0001, nullptr, "GetHeadtrackingInfoRaw"},
{IPC::MakeHeader(0x0002, 2, 0), nullptr, "GetHeadtrackingInfo"}, {0x0002, nullptr, "GetHeadtrackingInfo"},
// clang-format on // clang-format on
}; };

View file

@ -14,8 +14,8 @@ QTM_U::QTM_U() : ServiceFramework("qtm:u", 2) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// qtm common commands // qtm common commands
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 2, 0), nullptr, "GetHeadtrackingInfoRaw"}, {0x0001, nullptr, "GetHeadtrackingInfoRaw"},
{IPC::MakeHeader(0x0002, 2, 0), nullptr, "GetHeadtrackingInfo"}, {0x0002, nullptr, "GetHeadtrackingInfo"},
// clang-format on // clang-format on
}; };

View file

@ -143,7 +143,7 @@ void ServiceFrameworkBase::RegisterHandlersBase(const FunctionInfoBase* function
handlers.reserve(handlers.size() + n); handlers.reserve(handlers.size() + n);
for (std::size_t i = 0; i < n; ++i) { for (std::size_t i = 0; i < n; ++i) {
// Usually this array is sorted by id already, so hint to insert at the end // Usually this array is sorted by id already, so hint to insert at the end
handlers.emplace_hint(handlers.cend(), functions[i].expected_header, functions[i]); handlers.emplace_hint(handlers.cend(), functions[i].command_id, functions[i]);
} }
} }
@ -171,8 +171,7 @@ void ServiceFrameworkBase::ReportUnimplementedFunction(u32* cmd_buf, const Funct
} }
void ServiceFrameworkBase::HandleSyncRequest(Kernel::HLERequestContext& context) { void ServiceFrameworkBase::HandleSyncRequest(Kernel::HLERequestContext& context) {
u32 header_code = context.CommandBuffer()[0]; auto itr = handlers.find(context.CommandHeader().command_id.Value());
auto itr = handlers.find(header_code);
const FunctionInfoBase* info = itr == handlers.end() ? nullptr : &itr->second; const FunctionInfoBase* info = itr == handlers.end() ? nullptr : &itr->second;
if (info == nullptr || info->handler_callback == nullptr) { if (info == nullptr || info->handler_callback == nullptr) {
context.ReportUnimplemented(); context.ReportUnimplemented();
@ -184,12 +183,13 @@ void ServiceFrameworkBase::HandleSyncRequest(Kernel::HLERequestContext& context)
handler_invoker(this, info->handler_callback, context); handler_invoker(this, info->handler_callback, context);
} }
std::string ServiceFrameworkBase::GetFunctionName(u32 header) const { std::string ServiceFrameworkBase::GetFunctionName(IPC::Header header) const {
if (!handlers.count(header)) { auto itr = handlers.find(header.command_id.Value());
if (itr == handlers.end()) {
return ""; return "";
} }
return handlers.at(header).name; return itr->second.name;
} }
static bool AttemptLLE(const ServiceModuleInfo& service_module) { static bool AttemptLLE(const ServiceModuleInfo& service_module) {

View file

@ -68,7 +68,7 @@ public:
void HandleSyncRequest(Kernel::HLERequestContext& context) override; void HandleSyncRequest(Kernel::HLERequestContext& context) override;
/// Retrieves name of a function based on the header code. For IPC Recorder. /// Retrieves name of a function based on the header code. For IPC Recorder.
std::string GetFunctionName(u32 header) const; std::string GetFunctionName(IPC::Header header) const;
protected: protected:
/// Member-function pointer type of SyncRequest handlers. /// Member-function pointer type of SyncRequest handlers.
@ -80,7 +80,7 @@ private:
friend class ServiceFramework; friend class ServiceFramework;
struct FunctionInfoBase { struct FunctionInfoBase {
u32 expected_header; u32 command_id;
HandlerFnP<ServiceFrameworkBase> handler_callback; HandlerFnP<ServiceFrameworkBase> handler_callback;
const char* name; const char* name;
}; };
@ -122,21 +122,18 @@ class ServiceFramework : public ServiceFrameworkBase {
protected: protected:
/// Contains information about a request type which is handled by the service. /// Contains information about a request type which is handled by the service.
struct FunctionInfo : FunctionInfoBase { struct FunctionInfo : FunctionInfoBase {
// TODO(yuriks): This function could be constexpr, but clang is the only compiler that
// doesn't emit an ICE or a wrong diagnostic because of the static_cast.
/** /**
* Constructs a FunctionInfo for a function. * Constructs a FunctionInfo for a function.
* *
* @param expected_header request header in the command buffer which will trigger dispatch * @param command_id command ID in the command buffer which will trigger dispatch
* to this handler * to this handler
* @param handler_callback member function in this service which will be called to handle * @param handler_callback member function in this service which will be called to handle
* the request * the request
* @param name human-friendly name for the request. Used mostly for logging purposes. * @param name human-friendly name for the request. Used mostly for logging purposes.
*/ */
FunctionInfo(u32 expected_header, HandlerFnP<Self> handler_callback, const char* name) constexpr FunctionInfo(u32 command_id, HandlerFnP<Self> handler_callback, const char* name)
: FunctionInfoBase{ : FunctionInfoBase{
expected_header, command_id,
// Type-erase member function pointer by casting it down to the base class. // Type-erase member function pointer by casting it down to the base class.
static_cast<HandlerFnP<ServiceFrameworkBase>>(handler_callback), name} {} static_cast<HandlerFnP<ServiceFrameworkBase>>(handler_callback), name} {}
}; };

View file

@ -48,7 +48,7 @@ constexpr int MAX_PENDING_NOTIFICATIONS = 16;
* 1: ResultCode * 1: ResultCode
*/ */
void SRV::RegisterClient(Kernel::HLERequestContext& ctx) { void SRV::RegisterClient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 0, 2); IPC::RequestParser rp(ctx);
const auto pid_descriptor = rp.Pop<u32>(); const auto pid_descriptor = rp.Pop<u32>();
if (pid_descriptor != IPC::CallingPidDesc()) { if (pid_descriptor != IPC::CallingPidDesc()) {
@ -74,7 +74,7 @@ void SRV::RegisterClient(Kernel::HLERequestContext& ctx) {
* 3: Handle to semaphore signaled on process notification * 3: Handle to semaphore signaled on process notification
*/ */
void SRV::EnableNotification(Kernel::HLERequestContext& ctx) { void SRV::EnableNotification(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2, 0, 0); IPC::RequestParser rp(ctx);
notification_semaphore = notification_semaphore =
system.Kernel().CreateSemaphore(0, MAX_PENDING_NOTIFICATIONS, "SRV:Notification").Unwrap(); system.Kernel().CreateSemaphore(0, MAX_PENDING_NOTIFICATIONS, "SRV:Notification").Unwrap();
@ -139,7 +139,7 @@ private:
* 3: Service handle * 3: Service handle
*/ */
void SRV::GetServiceHandle(Kernel::HLERequestContext& ctx) { void SRV::GetServiceHandle(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 4, 0); IPC::RequestParser rp(ctx);
auto name_buf = rp.PopRaw<std::array<char, 8>>(); auto name_buf = rp.PopRaw<std::array<char, 8>>();
std::size_t name_len = rp.Pop<u32>(); std::size_t name_len = rp.Pop<u32>();
u32 flags = rp.Pop<u32>(); u32 flags = rp.Pop<u32>();
@ -202,7 +202,7 @@ void SRV::GetServiceHandle(Kernel::HLERequestContext& ctx) {
* 1: ResultCode * 1: ResultCode
*/ */
void SRV::Subscribe(Kernel::HLERequestContext& ctx) { void SRV::Subscribe(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 1, 0); IPC::RequestParser rp(ctx);
u32 notification_id = rp.Pop<u32>(); u32 notification_id = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -220,7 +220,7 @@ void SRV::Subscribe(Kernel::HLERequestContext& ctx) {
* 1: ResultCode * 1: ResultCode
*/ */
void SRV::Unsubscribe(Kernel::HLERequestContext& ctx) { void SRV::Unsubscribe(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 1, 0); IPC::RequestParser rp(ctx);
u32 notification_id = rp.Pop<u32>(); u32 notification_id = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -239,7 +239,7 @@ void SRV::Unsubscribe(Kernel::HLERequestContext& ctx) {
* 1: ResultCode * 1: ResultCode
*/ */
void SRV::PublishToSubscriber(Kernel::HLERequestContext& ctx) { void SRV::PublishToSubscriber(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xC, 2, 0); IPC::RequestParser rp(ctx);
u32 notification_id = rp.Pop<u32>(); u32 notification_id = rp.Pop<u32>();
u8 flags = rp.Pop<u8>(); u8 flags = rp.Pop<u8>();
@ -258,7 +258,7 @@ void SRV::PublishToSubscriber(Kernel::HLERequestContext& ctx) {
} }
void SRV::RegisterService(Kernel::HLERequestContext& ctx) { void SRV::RegisterService(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3, 4, 0); IPC::RequestParser rp(ctx);
auto name_buf = rp.PopRaw<std::array<char, 8>>(); auto name_buf = rp.PopRaw<std::array<char, 8>>();
std::size_t name_len = rp.Pop<u32>(); std::size_t name_len = rp.Pop<u32>();
@ -289,20 +289,20 @@ void SRV::RegisterService(Kernel::HLERequestContext& ctx) {
SRV::SRV(Core::System& system) : ServiceFramework("srv:", 4), system(system) { SRV::SRV(Core::System& system) : ServiceFramework("srv:", 4), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 2), &SRV::RegisterClient, "RegisterClient"}, {0x0001, &SRV::RegisterClient, "RegisterClient"},
{IPC::MakeHeader(0x0002, 0, 0), &SRV::EnableNotification, "EnableNotification"}, {0x0002, &SRV::EnableNotification, "EnableNotification"},
{IPC::MakeHeader(0x0003, 4, 0), &SRV::RegisterService, "RegisterService"}, {0x0003, &SRV::RegisterService, "RegisterService"},
{IPC::MakeHeader(0x0004, 3, 0), nullptr, "UnregisterService"}, {0x0004, nullptr, "UnregisterService"},
{IPC::MakeHeader(0x0005, 4, 0), &SRV::GetServiceHandle, "GetServiceHandle"}, {0x0005, &SRV::GetServiceHandle, "GetServiceHandle"},
{IPC::MakeHeader(0x0006, 3, 2), nullptr, "RegisterPort"}, {0x0006, nullptr, "RegisterPort"},
{IPC::MakeHeader(0x0007, 3, 0), nullptr, "UnregisterPort"}, {0x0007, nullptr, "UnregisterPort"},
{IPC::MakeHeader(0x0008, 4, 0), nullptr, "GetPort"}, {0x0008, nullptr, "GetPort"},
{IPC::MakeHeader(0x0009, 1, 0), &SRV::Subscribe, "Subscribe"}, {0x0009, &SRV::Subscribe, "Subscribe"},
{IPC::MakeHeader(0x000A, 1, 0), &SRV::Unsubscribe, "Unsubscribe"}, {0x000A, &SRV::Unsubscribe, "Unsubscribe"},
{IPC::MakeHeader(0x000B, 0, 0), nullptr, "ReceiveNotification"}, {0x000B, nullptr, "ReceiveNotification"},
{IPC::MakeHeader(0x000C, 2, 0), &SRV::PublishToSubscriber, "PublishToSubscriber"}, {0x000C, &SRV::PublishToSubscriber, "PublishToSubscriber"},
{IPC::MakeHeader(0x000D, 1, 0), nullptr, "PublishAndGetSubscriber"}, {0x000D, nullptr, "PublishAndGetSubscriber"},
{IPC::MakeHeader(0x000E, 3, 0), nullptr, "IsServiceRegistered"}, {0x000E, nullptr, "IsServiceRegistered"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);

View file

@ -722,7 +722,7 @@ void SOC_U::CleanupSockets() {
} }
void SOC_U::Socket(Kernel::HLERequestContext& ctx) { void SOC_U::Socket(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x02, 3, 2); IPC::RequestParser rp(ctx);
u32 domain = SocketDomainToPlatform(rp.Pop<u32>()); // Address family u32 domain = SocketDomainToPlatform(rp.Pop<u32>()); // Address family
u32 type = SocketTypeToPlatform(rp.Pop<u32>()); u32 type = SocketTypeToPlatform(rp.Pop<u32>());
u32 protocol = SocketProtocolToPlatform(rp.Pop<u32>()); u32 protocol = SocketProtocolToPlatform(rp.Pop<u32>());
@ -771,7 +771,7 @@ void SOC_U::Socket(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::Bind(Kernel::HLERequestContext& ctx) { void SOC_U::Bind(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 2, 4); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -800,7 +800,7 @@ void SOC_U::Bind(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::Fcntl(Kernel::HLERequestContext& ctx) { void SOC_U::Fcntl(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 3, 2); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -834,7 +834,7 @@ void SOC_U::Fcntl(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::Listen(Kernel::HLERequestContext& ctx) { void SOC_U::Listen(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 2, 2); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -859,7 +859,7 @@ void SOC_U::Accept(Kernel::HLERequestContext& ctx) {
// TODO(Subv): Calling this function on a blocking socket will block the emu thread, // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
// preventing graceful shutdown when closing the emulator, this can be fixed by always // preventing graceful shutdown when closing the emulator, this can be fixed by always
// performing nonblocking operations and spinlock until the data is available // performing nonblocking operations and spinlock until the data is available
IPC::RequestParser rp(ctx, 0x04, 2, 2); IPC::RequestParser rp(ctx);
const auto socket_handle = rp.Pop<u32>(); const auto socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -896,7 +896,7 @@ void SOC_U::Accept(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetHostId(Kernel::HLERequestContext& ctx) { void SOC_U::GetHostId(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 0, 0); IPC::RequestParser rp(ctx);
u32 host_id = 0; u32 host_id = 0;
auto info = GetDefaultInterfaceInfo(); auto info = GetDefaultInterfaceInfo();
@ -910,7 +910,7 @@ void SOC_U::GetHostId(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::Close(Kernel::HLERequestContext& ctx) { void SOC_U::Close(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0B, 1, 2); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -936,7 +936,7 @@ void SOC_U::Close(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::SendToOther(Kernel::HLERequestContext& ctx) { void SOC_U::SendToOther(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 4, 6); IPC::RequestParser rp(ctx);
const u32 socket_handle = rp.Pop<u32>(); const u32 socket_handle = rp.Pop<u32>();
const auto fd_info = open_sockets.find(socket_handle); const auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -998,7 +998,7 @@ void SOC_U::SendToOther(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::SendTo(Kernel::HLERequestContext& ctx) { void SOC_U::SendTo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0A, 4, 6); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1055,7 +1055,7 @@ void SOC_U::SendTo(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::RecvFromOther(Kernel::HLERequestContext& ctx) { void SOC_U::RecvFromOther(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x7, 4, 4); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1131,7 +1131,7 @@ void SOC_U::RecvFrom(Kernel::HLERequestContext& ctx) {
// TODO(Subv): Calling this function on a blocking socket will block the emu thread, // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
// preventing graceful shutdown when closing the emulator, this can be fixed by always // preventing graceful shutdown when closing the emulator, this can be fixed by always
// performing nonblocking operations and spinlock until the data is available // performing nonblocking operations and spinlock until the data is available
IPC::RequestParser rp(ctx, 0x08, 4, 2); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1207,7 +1207,7 @@ void SOC_U::RecvFrom(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::Poll(Kernel::HLERequestContext& ctx) { void SOC_U::Poll(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 2, 4); IPC::RequestParser rp(ctx);
u32 nfds = rp.Pop<u32>(); u32 nfds = rp.Pop<u32>();
s32 timeout = rp.Pop<s32>(); s32 timeout = rp.Pop<s32>();
rp.PopPID(); rp.PopPID();
@ -1255,7 +1255,7 @@ void SOC_U::Poll(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetSockName(Kernel::HLERequestContext& ctx) { void SOC_U::GetSockName(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 2, 2); IPC::RequestParser rp(ctx);
const auto socket_handle = rp.Pop<u32>(); const auto socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1285,7 +1285,7 @@ void SOC_U::GetSockName(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::Shutdown(Kernel::HLERequestContext& ctx) { void SOC_U::Shutdown(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0C, 2, 2); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1306,7 +1306,7 @@ void SOC_U::Shutdown(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetHostByName(Kernel::HLERequestContext& ctx) { void SOC_U::GetHostByName(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0D, 2, 2); IPC::RequestParser rp(ctx);
[[maybe_unused]] u32 name_len = rp.Pop<u32>(); [[maybe_unused]] u32 name_len = rp.Pop<u32>();
[[maybe_unused]] u32 out_buf_len = rp.Pop<u32>(); [[maybe_unused]] u32 out_buf_len = rp.Pop<u32>();
auto host_name = rp.PopStaticBuffer(); auto host_name = rp.PopStaticBuffer();
@ -1349,7 +1349,7 @@ void SOC_U::GetHostByName(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetPeerName(Kernel::HLERequestContext& ctx) { void SOC_U::GetPeerName(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 2, 2); IPC::RequestParser rp(ctx);
const auto socket_handle = rp.Pop<u32>(); const auto socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1384,7 +1384,7 @@ void SOC_U::Connect(Kernel::HLERequestContext& ctx) {
// TODO(Subv): Calling this function on a blocking socket will block the emu thread, // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
// preventing graceful shutdown when closing the emulator, this can be fixed by always // preventing graceful shutdown when closing the emulator, this can be fixed by always
// performing nonblocking operations and spinlock until the data is available // performing nonblocking operations and spinlock until the data is available
IPC::RequestParser rp(ctx, 0x06, 2, 4); IPC::RequestParser rp(ctx);
const auto socket_handle = rp.Pop<u32>(); const auto socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1418,7 +1418,7 @@ void SOC_U::Connect(Kernel::HLERequestContext& ctx) {
void SOC_U::InitializeSockets(Kernel::HLERequestContext& ctx) { void SOC_U::InitializeSockets(Kernel::HLERequestContext& ctx) {
// TODO(Subv): Implement // TODO(Subv): Implement
IPC::RequestParser rp(ctx, 0x01, 1, 4); IPC::RequestParser rp(ctx);
[[maybe_unused]] const auto memory_block_size = rp.Pop<u32>(); [[maybe_unused]] const auto memory_block_size = rp.Pop<u32>();
rp.PopPID(); rp.PopPID();
rp.PopObject<Kernel::SharedMemory>(); rp.PopObject<Kernel::SharedMemory>();
@ -1429,7 +1429,7 @@ void SOC_U::InitializeSockets(Kernel::HLERequestContext& ctx) {
void SOC_U::ShutdownSockets(Kernel::HLERequestContext& ctx) { void SOC_U::ShutdownSockets(Kernel::HLERequestContext& ctx) {
// TODO(Subv): Implement // TODO(Subv): Implement
IPC::RequestParser rp(ctx, 0x19, 0, 0); IPC::RequestParser rp(ctx);
CleanupSockets(); CleanupSockets();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -1437,7 +1437,7 @@ void SOC_U::ShutdownSockets(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetSockOpt(Kernel::HLERequestContext& ctx) { void SOC_U::GetSockOpt(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 4, 2); IPC::RequestParser rp(ctx);
u32 socket_handle = rp.Pop<u32>(); u32 socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1485,7 +1485,7 @@ void SOC_U::GetSockOpt(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::SetSockOpt(Kernel::HLERequestContext& ctx) { void SOC_U::SetSockOpt(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 4, 4); IPC::RequestParser rp(ctx);
const auto socket_handle = rp.Pop<u32>(); const auto socket_handle = rp.Pop<u32>();
auto fd_info = open_sockets.find(socket_handle); auto fd_info = open_sockets.find(socket_handle);
if (fd_info == open_sockets.end()) { if (fd_info == open_sockets.end()) {
@ -1528,7 +1528,7 @@ void SOC_U::SetSockOpt(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetNetworkOpt(Kernel::HLERequestContext& ctx) { void SOC_U::GetNetworkOpt(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 3, 0); IPC::RequestParser rp(ctx);
u32 level = rp.Pop<u32>(); u32 level = rp.Pop<u32>();
u32 opt_name = rp.Pop<u32>(); u32 opt_name = rp.Pop<u32>();
u32 opt_len = rp.Pop<u32>(); u32 opt_len = rp.Pop<u32>();
@ -1583,7 +1583,7 @@ void SOC_U::GetNetworkOpt(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetAddrInfoImpl(Kernel::HLERequestContext& ctx) { void SOC_U::GetAddrInfoImpl(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 4, 6); IPC::RequestParser rp(ctx);
u32 node_length = rp.Pop<u32>(); u32 node_length = rp.Pop<u32>();
u32 service_length = rp.Pop<u32>(); u32 service_length = rp.Pop<u32>();
u32 hints_size = rp.Pop<u32>(); u32 hints_size = rp.Pop<u32>();
@ -1646,7 +1646,7 @@ void SOC_U::GetAddrInfoImpl(Kernel::HLERequestContext& ctx) {
} }
void SOC_U::GetNameInfoImpl(Kernel::HLERequestContext& ctx) { void SOC_U::GetNameInfoImpl(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 4, 2); IPC::RequestParser rp(ctx);
u32 socklen = rp.Pop<u32>(); u32 socklen = rp.Pop<u32>();
u32 hostlen = rp.Pop<u32>(); u32 hostlen = rp.Pop<u32>();
u32 servlen = rp.Pop<u32>(); u32 servlen = rp.Pop<u32>();
@ -1677,39 +1677,39 @@ void SOC_U::GetNameInfoImpl(Kernel::HLERequestContext& ctx) {
SOC_U::SOC_U() : ServiceFramework("soc:U") { SOC_U::SOC_U() : ServiceFramework("soc:U") {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 4), &SOC_U::InitializeSockets, "InitializeSockets"}, {0x0001, &SOC_U::InitializeSockets, "InitializeSockets"},
{IPC::MakeHeader(0x0002, 3, 2), &SOC_U::Socket, "Socket"}, {0x0002, &SOC_U::Socket, "Socket"},
{IPC::MakeHeader(0x0003, 2, 2), &SOC_U::Listen, "Listen"}, {0x0003, &SOC_U::Listen, "Listen"},
{IPC::MakeHeader(0x0004, 2, 2), &SOC_U::Accept, "Accept"}, {0x0004, &SOC_U::Accept, "Accept"},
{IPC::MakeHeader(0x0005, 2, 4), &SOC_U::Bind, "Bind"}, {0x0005, &SOC_U::Bind, "Bind"},
{IPC::MakeHeader(0x0006, 2, 4), &SOC_U::Connect, "Connect"}, {0x0006, &SOC_U::Connect, "Connect"},
{IPC::MakeHeader(0x0007, 4, 4), &SOC_U::RecvFromOther, "recvfrom_other"}, {0x0007, &SOC_U::RecvFromOther, "recvfrom_other"},
{IPC::MakeHeader(0x0008, 4, 2), &SOC_U::RecvFrom, "RecvFrom"}, {0x0008, &SOC_U::RecvFrom, "RecvFrom"},
{IPC::MakeHeader(0x0009, 4, 6), &SOC_U::SendToOther, "SendToOther"}, {0x0009, &SOC_U::SendToOther, "SendToOther"},
{IPC::MakeHeader(0x000A, 4, 6), &SOC_U::SendTo, "SendTo"}, {0x000A, &SOC_U::SendTo, "SendTo"},
{IPC::MakeHeader(0x000B, 1, 2), &SOC_U::Close, "Close"}, {0x000B, &SOC_U::Close, "Close"},
{IPC::MakeHeader(0x000C, 2, 2), &SOC_U::Shutdown, "Shutdown"}, {0x000C, &SOC_U::Shutdown, "Shutdown"},
{IPC::MakeHeader(0x000D, 2, 2), &SOC_U::GetHostByName, "GetHostByName"}, {0x000D, &SOC_U::GetHostByName, "GetHostByName"},
{IPC::MakeHeader(0x000E, 3, 2), nullptr, "GetHostByAddr"}, {0x000E, nullptr, "GetHostByAddr"},
{IPC::MakeHeader(0x000F, 4, 6), &SOC_U::GetAddrInfoImpl, "GetAddrInfo"}, {0x000F, &SOC_U::GetAddrInfoImpl, "GetAddrInfo"},
{IPC::MakeHeader(0x0010, 4, 2), &SOC_U::GetNameInfoImpl, "GetNameInfo"}, {0x0010, &SOC_U::GetNameInfoImpl, "GetNameInfo"},
{IPC::MakeHeader(0x0011, 4, 2), &SOC_U::GetSockOpt, "GetSockOpt"}, {0x0011, &SOC_U::GetSockOpt, "GetSockOpt"},
{IPC::MakeHeader(0x0012, 4, 4), &SOC_U::SetSockOpt, "SetSockOpt"}, {0x0012, &SOC_U::SetSockOpt, "SetSockOpt"},
{IPC::MakeHeader(0x0013, 3, 2), &SOC_U::Fcntl, "Fcntl"}, {0x0013, &SOC_U::Fcntl, "Fcntl"},
{IPC::MakeHeader(0x0014, 2, 4), &SOC_U::Poll, "Poll"}, {0x0014, &SOC_U::Poll, "Poll"},
{IPC::MakeHeader(0x0015, 1, 2), nullptr, "SockAtMark"}, {0x0015, nullptr, "SockAtMark"},
{IPC::MakeHeader(0x0016, 0, 0), &SOC_U::GetHostId, "GetHostId"}, {0x0016, &SOC_U::GetHostId, "GetHostId"},
{IPC::MakeHeader(0x0017, 2, 2), &SOC_U::GetSockName, "GetSockName"}, {0x0017, &SOC_U::GetSockName, "GetSockName"},
{IPC::MakeHeader(0x0018, 2, 2), &SOC_U::GetPeerName, "GetPeerName"}, {0x0018, &SOC_U::GetPeerName, "GetPeerName"},
{IPC::MakeHeader(0x0019, 0, 0), &SOC_U::ShutdownSockets, "ShutdownSockets"}, {0x0019, &SOC_U::ShutdownSockets, "ShutdownSockets"},
{IPC::MakeHeader(0x001A, 3, 0), &SOC_U::GetNetworkOpt, "GetNetworkOpt"}, {0x001A, &SOC_U::GetNetworkOpt, "GetNetworkOpt"},
{IPC::MakeHeader(0x001B, 1, 0), nullptr, "ICMPSocket"}, {0x001B, nullptr, "ICMPSocket"},
{IPC::MakeHeader(0x001C, 4, 4), nullptr, "ICMPPing"}, {0x001C, nullptr, "ICMPPing"},
{IPC::MakeHeader(0x001D, 1, 0), nullptr, "ICMPCancel"}, {0x001D, nullptr, "ICMPCancel"},
{IPC::MakeHeader(0x001E, 1, 0), nullptr, "ICMPClose"}, {0x001E, nullptr, "ICMPClose"},
{IPC::MakeHeader(0x001F, 1, 0), nullptr, "GetResolverInfo"}, {0x001F, nullptr, "GetResolverInfo"},
{IPC::MakeHeader(0x0021, 0, 2), nullptr, "CloseSockets"}, {0x0021, nullptr, "CloseSockets"},
{IPC::MakeHeader(0x0023, 1, 0), nullptr, "AddGlobalSocket"}, {0x0023, nullptr, "AddGlobalSocket"},
// clang-format on // clang-format on
}; };

View file

@ -13,7 +13,7 @@ SERIALIZE_EXPORT_IMPL(Service::SSL::SSL_C)
namespace Service::SSL { namespace Service::SSL {
void SSL_C::Initialize(Kernel::HLERequestContext& ctx) { void SSL_C::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 0, 2); IPC::RequestParser rp(ctx);
rp.PopPID(); rp.PopPID();
// Seed random number generator when the SSL service is initialized // Seed random number generator when the SSL service is initialized
@ -26,7 +26,7 @@ void SSL_C::Initialize(Kernel::HLERequestContext& ctx) {
} }
void SSL_C::GenerateRandomData(Kernel::HLERequestContext& ctx) { void SSL_C::GenerateRandomData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 1, 2); IPC::RequestParser rp(ctx);
u32 size = rp.Pop<u32>(); u32 size = rp.Pop<u32>();
auto buffer = rp.PopMappedBuffer(); auto buffer = rp.PopMappedBuffer();
@ -62,29 +62,29 @@ void SSL_C::GenerateRandomData(Kernel::HLERequestContext& ctx) {
SSL_C::SSL_C() : ServiceFramework("ssl:C") { SSL_C::SSL_C() : ServiceFramework("ssl:C") {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 0, 2), &SSL_C::Initialize, "Initialize"}, {0x0001, &SSL_C::Initialize, "Initialize"},
{IPC::MakeHeader(0x0002, 3, 2), nullptr, "CreateContext"}, {0x0002, nullptr, "CreateContext"},
{IPC::MakeHeader(0x0003, 0, 0), nullptr, "CreateRootCertChain"}, {0x0003, nullptr, "CreateRootCertChain"},
{IPC::MakeHeader(0x0004, 1, 0), nullptr, "DestroyRootCertChain"}, {0x0004, nullptr, "DestroyRootCertChain"},
{IPC::MakeHeader(0x0005, 2, 2), nullptr, "AddTrustedRootCA"}, {0x0005, nullptr, "AddTrustedRootCA"},
{IPC::MakeHeader(0x0006, 2, 0), nullptr, "RootCertChainAddDefaultCert"}, {0x0006, nullptr, "RootCertChainAddDefaultCert"},
{IPC::MakeHeader(0x0007, 2, 0), nullptr, "RootCertChainRemoveCert"}, {0x0007, nullptr, "RootCertChainRemoveCert"},
{IPC::MakeHeader(0x000D, 2, 4), nullptr, "OpenClientCertContext"}, {0x000D, nullptr, "OpenClientCertContext"},
{IPC::MakeHeader(0x000E, 1, 0), nullptr, "OpenDefaultClientCertContext"}, {0x000E, nullptr, "OpenDefaultClientCertContext"},
{IPC::MakeHeader(0x000F, 1, 0), nullptr, "CloseClientCertContext"}, {0x000F, nullptr, "CloseClientCertContext"},
{IPC::MakeHeader(0x0011, 1, 2), &SSL_C::GenerateRandomData, "GenerateRandomData"}, {0x0011, &SSL_C::GenerateRandomData, "GenerateRandomData"},
{IPC::MakeHeader(0x0012, 1, 2), nullptr, "InitializeConnectionSession"}, {0x0012, nullptr, "InitializeConnectionSession"},
{IPC::MakeHeader(0x0013, 1, 0), nullptr, "StartConnection"}, {0x0013, nullptr, "StartConnection"},
{IPC::MakeHeader(0x0014, 1, 0), nullptr, "StartConnectionGetOut"}, {0x0014, nullptr, "StartConnectionGetOut"},
{IPC::MakeHeader(0x0015, 2, 2), nullptr, "Read"}, {0x0015, nullptr, "Read"},
{IPC::MakeHeader(0x0016, 2, 2), nullptr, "ReadPeek"}, {0x0016, nullptr, "ReadPeek"},
{IPC::MakeHeader(0x0017, 2, 2), nullptr, "Write"}, {0x0017, nullptr, "Write"},
{IPC::MakeHeader(0x0018, 2, 0), nullptr, "ContextSetRootCertChain"}, {0x0018, nullptr, "ContextSetRootCertChain"},
{IPC::MakeHeader(0x0019, 2, 0), nullptr, "ContextSetClientCert"}, {0x0019, nullptr, "ContextSetClientCert"},
{IPC::MakeHeader(0x001B, 2, 0), nullptr, "ContextClearOpt"}, {0x001B, nullptr, "ContextClearOpt"},
{IPC::MakeHeader(0x001C, 3, 4), nullptr, "ContextGetProtocolCipher"}, {0x001C, nullptr, "ContextGetProtocolCipher"},
{IPC::MakeHeader(0x001E, 1, 0), nullptr, "DestroyContext"}, {0x001E, nullptr, "DestroyContext"},
{IPC::MakeHeader(0x001F, 2, 2), nullptr, "ContextInitSharedmem"}, {0x001F, nullptr, "ContextInitSharedmem"},
// clang-format on // clang-format on
}; };

View file

@ -78,7 +78,7 @@ ResultCode ConversionConfiguration::SetStandardCoefficient(
} }
void Y2R_U::SetInputFormat(Kernel::HLERequestContext& ctx) { void Y2R_U::SetInputFormat(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1, 1, 0); IPC::RequestParser rp(ctx);
conversion.input_format = rp.PopEnum<InputFormat>(); conversion.input_format = rp.PopEnum<InputFormat>();
@ -89,7 +89,7 @@ void Y2R_U::SetInputFormat(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetInputFormat(Kernel::HLERequestContext& ctx) { void Y2R_U::GetInputFormat(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -99,7 +99,7 @@ void Y2R_U::GetInputFormat(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetOutputFormat(Kernel::HLERequestContext& ctx) { void Y2R_U::SetOutputFormat(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x3, 1, 0); IPC::RequestParser rp(ctx);
conversion.output_format = rp.PopEnum<OutputFormat>(); conversion.output_format = rp.PopEnum<OutputFormat>();
@ -110,7 +110,7 @@ void Y2R_U::SetOutputFormat(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetOutputFormat(Kernel::HLERequestContext& ctx) { void Y2R_U::GetOutputFormat(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x4, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -120,7 +120,7 @@ void Y2R_U::GetOutputFormat(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetRotation(Kernel::HLERequestContext& ctx) { void Y2R_U::SetRotation(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x5, 1, 0); IPC::RequestParser rp(ctx);
conversion.rotation = rp.PopEnum<Rotation>(); conversion.rotation = rp.PopEnum<Rotation>();
@ -131,7 +131,7 @@ void Y2R_U::SetRotation(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetRotation(Kernel::HLERequestContext& ctx) { void Y2R_U::GetRotation(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x6, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -141,7 +141,7 @@ void Y2R_U::GetRotation(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetBlockAlignment(Kernel::HLERequestContext& ctx) { void Y2R_U::SetBlockAlignment(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x7, 1, 0); IPC::RequestParser rp(ctx);
conversion.block_alignment = rp.PopEnum<BlockAlignment>(); conversion.block_alignment = rp.PopEnum<BlockAlignment>();
@ -152,7 +152,7 @@ void Y2R_U::SetBlockAlignment(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetBlockAlignment(Kernel::HLERequestContext& ctx) { void Y2R_U::GetBlockAlignment(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x8, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -162,7 +162,7 @@ void Y2R_U::GetBlockAlignment(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetSpacialDithering(Kernel::HLERequestContext& ctx) { void Y2R_U::SetSpacialDithering(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x9, 1, 0); IPC::RequestParser rp(ctx);
spacial_dithering_enabled = rp.Pop<bool>(); spacial_dithering_enabled = rp.Pop<bool>();
@ -173,7 +173,7 @@ void Y2R_U::SetSpacialDithering(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetSpacialDithering(Kernel::HLERequestContext& ctx) { void Y2R_U::GetSpacialDithering(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -183,7 +183,7 @@ void Y2R_U::GetSpacialDithering(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetTemporalDithering(Kernel::HLERequestContext& ctx) { void Y2R_U::SetTemporalDithering(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 1, 0); IPC::RequestParser rp(ctx);
temporal_dithering_enabled = rp.Pop<bool>(); temporal_dithering_enabled = rp.Pop<bool>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -193,7 +193,7 @@ void Y2R_U::SetTemporalDithering(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetTemporalDithering(Kernel::HLERequestContext& ctx) { void Y2R_U::GetTemporalDithering(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xC, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -203,7 +203,7 @@ void Y2R_U::GetTemporalDithering(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetTransferEndInterrupt(Kernel::HLERequestContext& ctx) { void Y2R_U::SetTransferEndInterrupt(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xD, 1, 0); IPC::RequestParser rp(ctx);
transfer_end_interrupt_enabled = rp.Pop<bool>(); transfer_end_interrupt_enabled = rp.Pop<bool>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -213,7 +213,7 @@ void Y2R_U::SetTransferEndInterrupt(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetTransferEndInterrupt(Kernel::HLERequestContext& ctx) { void Y2R_U::GetTransferEndInterrupt(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xE, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -223,7 +223,7 @@ void Y2R_U::GetTransferEndInterrupt(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetTransferEndEvent(Kernel::HLERequestContext& ctx) { void Y2R_U::GetTransferEndEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xF, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -233,7 +233,7 @@ void Y2R_U::GetTransferEndEvent(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetSendingY(Kernel::HLERequestContext& ctx) { void Y2R_U::SetSendingY(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 4, 2); IPC::RequestParser rp(ctx);
conversion.src_Y.address = rp.Pop<u32>(); conversion.src_Y.address = rp.Pop<u32>();
conversion.src_Y.image_size = rp.Pop<u32>(); conversion.src_Y.image_size = rp.Pop<u32>();
conversion.src_Y.transfer_unit = rp.Pop<u32>(); conversion.src_Y.transfer_unit = rp.Pop<u32>();
@ -252,7 +252,7 @@ void Y2R_U::SetSendingY(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetSendingU(Kernel::HLERequestContext& ctx) { void Y2R_U::SetSendingU(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 4, 2); IPC::RequestParser rp(ctx);
conversion.src_U.address = rp.Pop<u32>(); conversion.src_U.address = rp.Pop<u32>();
conversion.src_U.image_size = rp.Pop<u32>(); conversion.src_U.image_size = rp.Pop<u32>();
conversion.src_U.transfer_unit = rp.Pop<u32>(); conversion.src_U.transfer_unit = rp.Pop<u32>();
@ -271,7 +271,7 @@ void Y2R_U::SetSendingU(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetSendingV(Kernel::HLERequestContext& ctx) { void Y2R_U::SetSendingV(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 4, 2); IPC::RequestParser rp(ctx);
conversion.src_V.address = rp.Pop<u32>(); conversion.src_V.address = rp.Pop<u32>();
conversion.src_V.image_size = rp.Pop<u32>(); conversion.src_V.image_size = rp.Pop<u32>();
@ -291,7 +291,7 @@ void Y2R_U::SetSendingV(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetSendingYUYV(Kernel::HLERequestContext& ctx) { void Y2R_U::SetSendingYUYV(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x13, 4, 2); IPC::RequestParser rp(ctx);
conversion.src_YUYV.address = rp.Pop<u32>(); conversion.src_YUYV.address = rp.Pop<u32>();
conversion.src_YUYV.image_size = rp.Pop<u32>(); conversion.src_YUYV.image_size = rp.Pop<u32>();
@ -311,7 +311,7 @@ void Y2R_U::SetSendingYUYV(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::IsFinishedSendingYuv(Kernel::HLERequestContext& ctx) { void Y2R_U::IsFinishedSendingYuv(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -321,7 +321,7 @@ void Y2R_U::IsFinishedSendingYuv(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::IsFinishedSendingY(Kernel::HLERequestContext& ctx) { void Y2R_U::IsFinishedSendingY(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x15, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -331,7 +331,7 @@ void Y2R_U::IsFinishedSendingY(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::IsFinishedSendingU(Kernel::HLERequestContext& ctx) { void Y2R_U::IsFinishedSendingU(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x16, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -341,7 +341,7 @@ void Y2R_U::IsFinishedSendingU(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::IsFinishedSendingV(Kernel::HLERequestContext& ctx) { void Y2R_U::IsFinishedSendingV(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -351,7 +351,7 @@ void Y2R_U::IsFinishedSendingV(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetReceiving(Kernel::HLERequestContext& ctx) { void Y2R_U::SetReceiving(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x18, 4, 2); IPC::RequestParser rp(ctx);
conversion.dst.address = rp.Pop<u32>(); conversion.dst.address = rp.Pop<u32>();
conversion.dst.image_size = rp.Pop<u32>(); conversion.dst.image_size = rp.Pop<u32>();
@ -371,7 +371,7 @@ void Y2R_U::SetReceiving(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::IsFinishedReceiving(Kernel::HLERequestContext& ctx) { void Y2R_U::IsFinishedReceiving(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x19, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -381,7 +381,7 @@ void Y2R_U::IsFinishedReceiving(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetInputLineWidth(Kernel::HLERequestContext& ctx) { void Y2R_U::SetInputLineWidth(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 1, 0); IPC::RequestParser rp(ctx);
u32 input_line_width = rp.Pop<u32>(); u32 input_line_width = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -391,7 +391,7 @@ void Y2R_U::SetInputLineWidth(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetInputLineWidth(Kernel::HLERequestContext& ctx) { void Y2R_U::GetInputLineWidth(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1B, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -401,7 +401,7 @@ void Y2R_U::GetInputLineWidth(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetInputLines(Kernel::HLERequestContext& ctx) { void Y2R_U::SetInputLines(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1C, 1, 0); IPC::RequestParser rp(ctx);
u32 input_lines = rp.Pop<u32>(); u32 input_lines = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -411,7 +411,7 @@ void Y2R_U::SetInputLines(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetInputLines(Kernel::HLERequestContext& ctx) { void Y2R_U::GetInputLines(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1D, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -421,7 +421,7 @@ void Y2R_U::GetInputLines(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetCoefficient(Kernel::HLERequestContext& ctx) { void Y2R_U::SetCoefficient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1E, 4, 0); IPC::RequestParser rp(ctx);
rp.PopRaw<CoefficientSet>(conversion.coefficients); rp.PopRaw<CoefficientSet>(conversion.coefficients);
@ -435,7 +435,7 @@ void Y2R_U::SetCoefficient(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetCoefficient(Kernel::HLERequestContext& ctx) { void Y2R_U::GetCoefficient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1F, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0); IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -445,7 +445,7 @@ void Y2R_U::GetCoefficient(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetStandardCoefficient(Kernel::HLERequestContext& ctx) { void Y2R_U::SetStandardCoefficient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x20, 1, 0); IPC::RequestParser rp(ctx);
u32 index = rp.Pop<u32>(); u32 index = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -455,7 +455,7 @@ void Y2R_U::SetStandardCoefficient(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetStandardCoefficient(Kernel::HLERequestContext& ctx) { void Y2R_U::GetStandardCoefficient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x21, 1, 0); IPC::RequestParser rp(ctx);
const u32 index = rp.Pop<u32>(); const u32 index = rp.Pop<u32>();
if (index < standard_coefficients.size()) { if (index < standard_coefficients.size()) {
@ -474,7 +474,7 @@ void Y2R_U::GetStandardCoefficient(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetAlpha(Kernel::HLERequestContext& ctx) { void Y2R_U::SetAlpha(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x22, 1, 0); IPC::RequestParser rp(ctx);
conversion.alpha = rp.Pop<u32>(); conversion.alpha = rp.Pop<u32>();
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -484,7 +484,7 @@ void Y2R_U::SetAlpha(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetAlpha(Kernel::HLERequestContext& ctx) { void Y2R_U::GetAlpha(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x23, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -494,7 +494,7 @@ void Y2R_U::GetAlpha(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetDitheringWeightParams(Kernel::HLERequestContext& ctx) { void Y2R_U::SetDitheringWeightParams(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x24, 8, 0); // 0x240200 IPC::RequestParser rp(ctx);
rp.PopRaw(dithering_weight_params); rp.PopRaw(dithering_weight_params);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -503,7 +503,7 @@ void Y2R_U::SetDitheringWeightParams(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetDitheringWeightParams(Kernel::HLERequestContext& ctx) { void Y2R_U::GetDitheringWeightParams(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x25, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(9, 0); IPC::RequestBuilder rb = rp.MakeBuilder(9, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -513,7 +513,7 @@ void Y2R_U::GetDitheringWeightParams(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::StartConversion(Kernel::HLERequestContext& ctx) { void Y2R_U::StartConversion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x26, 0, 0); IPC::RequestParser rp(ctx);
// dst_image_size would seem to be perfect for this, but it doesn't include the gap :( // dst_image_size would seem to be perfect for this, but it doesn't include the gap :(
u32 total_output_size = u32 total_output_size =
@ -532,7 +532,7 @@ void Y2R_U::StartConversion(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::StopConversion(Kernel::HLERequestContext& ctx) { void Y2R_U::StopConversion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x27, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -541,7 +541,7 @@ void Y2R_U::StopConversion(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::IsBusyConversion(Kernel::HLERequestContext& ctx) { void Y2R_U::IsBusyConversion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x28, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -551,7 +551,7 @@ void Y2R_U::IsBusyConversion(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::SetPackageParameter(Kernel::HLERequestContext& ctx) { void Y2R_U::SetPackageParameter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x29, 7, 0); IPC::RequestParser rp(ctx);
auto params = rp.PopRaw<ConversionParameters>(); auto params = rp.PopRaw<ConversionParameters>();
conversion.input_format = params.input_format; conversion.input_format = params.input_format;
@ -590,7 +590,7 @@ cleanup:
} }
void Y2R_U::PingProcess(Kernel::HLERequestContext& ctx) { void Y2R_U::PingProcess(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2A, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -600,7 +600,7 @@ void Y2R_U::PingProcess(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::DriverInitialize(Kernel::HLERequestContext& ctx) { void Y2R_U::DriverInitialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2B, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -627,7 +627,7 @@ void Y2R_U::DriverInitialize(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::DriverFinalize(Kernel::HLERequestContext& ctx) { void Y2R_U::DriverFinalize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2C, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -636,7 +636,7 @@ void Y2R_U::DriverFinalize(Kernel::HLERequestContext& ctx) {
} }
void Y2R_U::GetPackageParameter(Kernel::HLERequestContext& ctx) { void Y2R_U::GetPackageParameter(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x2D, 0, 0); IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(4, 0); IPC::RequestBuilder rb = rp.MakeBuilder(4, 0);
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
@ -648,51 +648,51 @@ void Y2R_U::GetPackageParameter(Kernel::HLERequestContext& ctx) {
Y2R_U::Y2R_U(Core::System& system) : ServiceFramework("y2r:u", 1), system(system) { Y2R_U::Y2R_U(Core::System& system) : ServiceFramework("y2r:u", 1), system(system) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
// clang-format off // clang-format off
{IPC::MakeHeader(0x0001, 1, 0), &Y2R_U::SetInputFormat, "SetInputFormat"}, {0x0001, &Y2R_U::SetInputFormat, "SetInputFormat"},
{IPC::MakeHeader(0x0002, 0, 0), &Y2R_U::GetInputFormat, "GetInputFormat"}, {0x0002, &Y2R_U::GetInputFormat, "GetInputFormat"},
{IPC::MakeHeader(0x0003, 1, 0), &Y2R_U::SetOutputFormat, "SetOutputFormat"}, {0x0003, &Y2R_U::SetOutputFormat, "SetOutputFormat"},
{IPC::MakeHeader(0x0004, 0, 0), &Y2R_U::GetOutputFormat, "GetOutputFormat"}, {0x0004, &Y2R_U::GetOutputFormat, "GetOutputFormat"},
{IPC::MakeHeader(0x0005, 1, 0), &Y2R_U::SetRotation, "SetRotation"}, {0x0005, &Y2R_U::SetRotation, "SetRotation"},
{IPC::MakeHeader(0x0006, 0, 0), &Y2R_U::GetRotation, "GetRotation"}, {0x0006, &Y2R_U::GetRotation, "GetRotation"},
{IPC::MakeHeader(0x0007, 1, 0), &Y2R_U::SetBlockAlignment, "SetBlockAlignment"}, {0x0007, &Y2R_U::SetBlockAlignment, "SetBlockAlignment"},
{IPC::MakeHeader(0x0008, 0, 0), &Y2R_U::GetBlockAlignment, "GetBlockAlignment"}, {0x0008, &Y2R_U::GetBlockAlignment, "GetBlockAlignment"},
{IPC::MakeHeader(0x0009, 1, 0), &Y2R_U::SetSpacialDithering, "SetSpacialDithering"}, {0x0009, &Y2R_U::SetSpacialDithering, "SetSpacialDithering"},
{IPC::MakeHeader(0x000A, 0, 0), &Y2R_U::GetSpacialDithering, "GetSpacialDithering"}, {0x000A, &Y2R_U::GetSpacialDithering, "GetSpacialDithering"},
{IPC::MakeHeader(0x000B, 1, 0), &Y2R_U::SetTemporalDithering, "SetTemporalDithering"}, {0x000B, &Y2R_U::SetTemporalDithering, "SetTemporalDithering"},
{IPC::MakeHeader(0x000C, 0, 0), &Y2R_U::GetTemporalDithering, "GetTemporalDithering"}, {0x000C, &Y2R_U::GetTemporalDithering, "GetTemporalDithering"},
{IPC::MakeHeader(0x000D, 1, 0), &Y2R_U::SetTransferEndInterrupt, "SetTransferEndInterrupt"}, {0x000D, &Y2R_U::SetTransferEndInterrupt, "SetTransferEndInterrupt"},
{IPC::MakeHeader(0x000E, 0, 0), &Y2R_U::GetTransferEndInterrupt, "GetTransferEndInterrupt"}, {0x000E, &Y2R_U::GetTransferEndInterrupt, "GetTransferEndInterrupt"},
{IPC::MakeHeader(0x000F, 0, 0), &Y2R_U::GetTransferEndEvent, "GetTransferEndEvent"}, {0x000F, &Y2R_U::GetTransferEndEvent, "GetTransferEndEvent"},
{IPC::MakeHeader(0x0010, 4, 2), &Y2R_U::SetSendingY, "SetSendingY"}, {0x0010, &Y2R_U::SetSendingY, "SetSendingY"},
{IPC::MakeHeader(0x0011, 4, 2), &Y2R_U::SetSendingU, "SetSendingU"}, {0x0011, &Y2R_U::SetSendingU, "SetSendingU"},
{IPC::MakeHeader(0x0012, 4, 2), &Y2R_U::SetSendingV, "SetSendingV"}, {0x0012, &Y2R_U::SetSendingV, "SetSendingV"},
{IPC::MakeHeader(0x0013, 4, 2), &Y2R_U::SetSendingYUYV, "SetSendingYUYV"}, {0x0013, &Y2R_U::SetSendingYUYV, "SetSendingYUYV"},
{IPC::MakeHeader(0x0014, 0, 0), &Y2R_U::IsFinishedSendingYuv, "IsFinishedSendingYuv"}, {0x0014, &Y2R_U::IsFinishedSendingYuv, "IsFinishedSendingYuv"},
{IPC::MakeHeader(0x0015, 0, 0), &Y2R_U::IsFinishedSendingY, "IsFinishedSendingY"}, {0x0015, &Y2R_U::IsFinishedSendingY, "IsFinishedSendingY"},
{IPC::MakeHeader(0x0016, 0, 0), &Y2R_U::IsFinishedSendingU, "IsFinishedSendingU"}, {0x0016, &Y2R_U::IsFinishedSendingU, "IsFinishedSendingU"},
{IPC::MakeHeader(0x0017, 0, 0), &Y2R_U::IsFinishedSendingV, "IsFinishedSendingV"}, {0x0017, &Y2R_U::IsFinishedSendingV, "IsFinishedSendingV"},
{IPC::MakeHeader(0x0018, 4, 2), &Y2R_U::SetReceiving, "SetReceiving"}, {0x0018, &Y2R_U::SetReceiving, "SetReceiving"},
{IPC::MakeHeader(0x0019, 0, 0), &Y2R_U::IsFinishedReceiving, "IsFinishedReceiving"}, {0x0019, &Y2R_U::IsFinishedReceiving, "IsFinishedReceiving"},
{IPC::MakeHeader(0x001A, 1, 0), &Y2R_U::SetInputLineWidth, "SetInputLineWidth"}, {0x001A, &Y2R_U::SetInputLineWidth, "SetInputLineWidth"},
{IPC::MakeHeader(0x001B, 0, 0), &Y2R_U::GetInputLineWidth, "GetInputLineWidth"}, {0x001B, &Y2R_U::GetInputLineWidth, "GetInputLineWidth"},
{IPC::MakeHeader(0x001C, 1, 0), &Y2R_U::SetInputLines, "SetInputLines"}, {0x001C, &Y2R_U::SetInputLines, "SetInputLines"},
{IPC::MakeHeader(0x001D, 0, 0), &Y2R_U::GetInputLines, "GetInputLines"}, {0x001D, &Y2R_U::GetInputLines, "GetInputLines"},
{IPC::MakeHeader(0x001E, 4, 0), &Y2R_U::SetCoefficient, "SetCoefficient"}, {0x001E, &Y2R_U::SetCoefficient, "SetCoefficient"},
{IPC::MakeHeader(0x001F, 0, 0), &Y2R_U::GetCoefficient, "GetCoefficient"}, {0x001F, &Y2R_U::GetCoefficient, "GetCoefficient"},
{IPC::MakeHeader(0x0020, 1, 0), &Y2R_U::SetStandardCoefficient, "SetStandardCoefficient"}, {0x0020, &Y2R_U::SetStandardCoefficient, "SetStandardCoefficient"},
{IPC::MakeHeader(0x0021, 1, 0), &Y2R_U::GetStandardCoefficient, "GetStandardCoefficient"}, {0x0021, &Y2R_U::GetStandardCoefficient, "GetStandardCoefficient"},
{IPC::MakeHeader(0x0022, 1, 0), &Y2R_U::SetAlpha, "SetAlpha"}, {0x0022, &Y2R_U::SetAlpha, "SetAlpha"},
{IPC::MakeHeader(0x0023, 0, 0), &Y2R_U::GetAlpha, "GetAlpha"}, {0x0023, &Y2R_U::GetAlpha, "GetAlpha"},
{IPC::MakeHeader(0x0024, 8, 0), &Y2R_U::SetDitheringWeightParams, "SetDitheringWeightParams"}, {0x0024, &Y2R_U::SetDitheringWeightParams, "SetDitheringWeightParams"},
{IPC::MakeHeader(0x0025, 0, 0), &Y2R_U::GetDitheringWeightParams, "GetDitheringWeightParams"}, {0x0025, &Y2R_U::GetDitheringWeightParams, "GetDitheringWeightParams"},
{IPC::MakeHeader(0x0026, 0, 0), &Y2R_U::StartConversion, "StartConversion"}, {0x0026, &Y2R_U::StartConversion, "StartConversion"},
{IPC::MakeHeader(0x0027, 0, 0), &Y2R_U::StopConversion, "StopConversion"}, {0x0027, &Y2R_U::StopConversion, "StopConversion"},
{IPC::MakeHeader(0x0028, 0, 0), &Y2R_U::IsBusyConversion, "IsBusyConversion"}, {0x0028, &Y2R_U::IsBusyConversion, "IsBusyConversion"},
{IPC::MakeHeader(0x0029, 7, 0), &Y2R_U::SetPackageParameter, "SetPackageParameter"}, {0x0029, &Y2R_U::SetPackageParameter, "SetPackageParameter"},
{IPC::MakeHeader(0x002A, 0, 0), &Y2R_U::PingProcess, "PingProcess"}, {0x002A, &Y2R_U::PingProcess, "PingProcess"},
{IPC::MakeHeader(0x002B, 0, 0), &Y2R_U::DriverInitialize, "DriverInitialize"}, {0x002B, &Y2R_U::DriverInitialize, "DriverInitialize"},
{IPC::MakeHeader(0x002C, 0, 0), &Y2R_U::DriverFinalize, "DriverFinalize"}, {0x002C, &Y2R_U::DriverFinalize, "DriverFinalize"},
{IPC::MakeHeader(0x002D, 0, 0), &Y2R_U::GetPackageParameter, "GetPackageParameter"}, {0x002D, &Y2R_U::GetPackageParameter, "GetPackageParameter"},
// clang-format on // clang-format on
}; };
RegisterHandlers(functions); RegisterHandlers(functions);