hle: Eliminate need to specify command headers for IPC. (#6678)
This commit is contained in:
parent
0bedb28bdc
commit
e043caac27
|
@ -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) {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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} {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Reference in New Issue