Merge pull request #50 from sudachi-emu/feature-1700-stubs

Reimplemented v17.0.0 functions
This commit is contained in:
Jarrod Norwell 2024-04-11 03:23:44 +08:00 committed by GitHub
commit b45aac2e61
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 130 additions and 35 deletions

View File

@ -102,6 +102,8 @@ public:
{150, nullptr, "CreateAuthorizationRequest"},
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
{170, nullptr, "CreateDeviceHistoryRequest"}, // 17.0.0+
{180, nullptr, "GetRequestForNintendoAccountReauthentication"} // 17.0.0+
};
// clang-format on
@ -180,6 +182,7 @@ public:
{150, nullptr, "CreateAuthorizationRequest"},
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
{170, nullptr, "CreateDeviceHistoryRequest"}, // 17.0.0+
{200, nullptr, "IsRegistered"},
{201, nullptr, "RegisterAsync"},
{202, nullptr, "UnregisterAsync"},
@ -686,6 +689,11 @@ public:
{103, nullptr, "GetProfileImage"},
{110, nullptr, "RegisterUserAsync"},
{111, nullptr, "GetUid"},
{200, nullptr, "ApplyResponseForUserCreationAsync"}, // 17.0.0+
{205, nullptr, "SuspendAfterApplyResponse"}, // 17.0.0+
{210, nullptr, "IsProfileAvailable"}, // 17.0.0+
{220, nullptr, "RegisterUserAsyncWithoutProfile"}, // 17.0.0+
{221, nullptr, "RegisterUserWithProfileAsync"} // 17.0.0+
};
// clang-format on

View File

@ -50,6 +50,9 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
{210, nullptr, "CreateFloatingRegistrationRequest"},
{211, nullptr, "CreateProcedureToRegisterUserWithNintendoAccount"},
{212, nullptr, "ResumeProcedureToRegisterUserWithNintendoAccount"},
{213, nullptr, "CreateProcedureToCreateUserWithNintendoAccount"}, // 17.0.0+
{214, nullptr, "ResumeProcedureToCreateUserWithNintendoAccount"}, // 17.0.0+
{215, nullptr, "ResumeProcedureToCreateUserWithNintendoAccountAfterApplyResponse"}, // 17.0.0+
{230, nullptr, "AuthenticateServiceAsync"},
{250, nullptr, "GetBaasAccountAdministrator"},
{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"},

View File

@ -20,6 +20,9 @@ SPSM::SPSM(Core::System& system_) : ServiceFramework{system_, "spsm"} {
{9, nullptr, "ChangeHomeButtonLongPressingTime"},
{10, nullptr, "PutErrorState"},
{11, nullptr, "InvalidateCurrentHomeButtonPressing"},
{12, nullptr, "Unknown12"}, // 17.0.0+
{13, nullptr, "Unknown13"}, // 17.0.0+
{14, nullptr, "Unknown14"} // 17.0.0+
};
// clang-format on

View File

@ -109,6 +109,7 @@ APM_Sys::APM_Sys(Core::System& system_, Controller& controller_)
{5, nullptr, "LoadAndApplySettings"},
{6, &APM_Sys::SetCpuBoostMode, "SetCpuBoostMode"},
{7, &APM_Sys::GetCurrentPerformanceConfiguration, "GetCurrentPerformanceConfiguration"},
{8, nullptr, "GetCurrentPerformanceMode"} // 17.0.0+
};
// clang-format on

View File

@ -37,6 +37,10 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_,
{19, nullptr, "Unknown19"},
{100, nullptr, "GetAlbumFileCountEx0"},
{101, C<&IAlbumAccessorService::GetAlbumFileListEx0>, "GetAlbumFileListEx0"},
{120, nullptr, "Unknown120"}, // 17.0.0+
{130, nullptr, "Unknown130"}, // 17.0.0+
{140, nullptr, "Unknown140"}, // 17.0.0+
{150, nullptr, "Unknown150"}, // 17.0.0+
{202, nullptr, "SaveEditedScreenShot"},
{301, nullptr, "GetLastThumbnail"},
{302, nullptr, "GetLastOverlayMovieThumbnail"},

View File

@ -28,6 +28,9 @@ IAlbumApplicationService::IAlbumApplicationService(Core::System& system_,
{142, C<&IAlbumApplicationService::GetAlbumFileList3AaeAruid>, "GetAlbumFileList3AaeAruid"},
{143, nullptr, "GetAlbumFileList4AaeUidAruid"},
{144, nullptr, "GetAllAlbumFileList3AaeAruid"},
{145, nullptr, "Unknown145"}, // 17.0.0+
{146, nullptr, "Unknown146"}, // 17.0.0+
{147, nullptr, "Unknown147"}, // 17.0.0+
{60002, nullptr, "OpenAccessorSessionForApplication"},
};
// clang-format on

View File

@ -5,9 +5,11 @@
#include "common/logging/log.h"
#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/cmif_types.h"
#include "core/hle/service/erpt/erpt.h"
#include "core/hle/service/server_manager.h"
#include "core/hle/service/service.h"
#include "core/hle/service/set/system_settings_server.h"
#include "core/hle/service/sm/sm.h"
namespace Service::ERPT {
@ -15,6 +17,16 @@ namespace Service::ERPT {
class ErrorReportContext final : public ServiceFramework<ErrorReportContext> {
public:
explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} {
Service::OutLargeData<Service::Set::FirmwareVersionFormat, 8> firmware_version = nullptr;
system.ServiceManager()
.GetService<Service::Set::ISystemSettingsServer>("set:sys", true)
->GetFirmwareVersion(firmware_version);
FunctionInfo create_report = {11, C<&ErrorReportContext::CreateReport>, "CreateReport"};
if (firmware_version->major > 17)
create_report = {11, C<&ErrorReportContext::CreateReportV1>,
"CreateReportV1"}; // 17.0.0+
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&ErrorReportContext::SubmitContext>, "SubmitContext"},
@ -28,8 +40,8 @@ public:
{8, nullptr, "ClearApplicationLaunchTime"},
{9, nullptr, "SubmitAttachment"},
{10, nullptr, "CreateReportWithAttachments"},
{11, C<&ErrorReportContext::CreateReportV1>, "CreateReportV1"},
{12, C<&ErrorReportContext::CreateReport>, "CreateReport"},
create_report,
{12, C<&ErrorReportContext::CreateReport>, "CreateReport"}, // 17.0.0+
{20, nullptr, "RegisterRunningApplet"},
{21, nullptr, "UnregisterRunningApplet"},
{22, nullptr, "UpdateAppletSuspendedDuration"},

View File

@ -85,6 +85,11 @@ public:
{1019, nullptr, "Unknown1019"},
{1020, nullptr, "Unknown1020"},
{1021, nullptr, "Unknown1021"},
{1023, nullptr, "Unknown1023"}, // 17.0.0+
{1024, nullptr, "Unknown1024"}, // 17.0.0+
{1025, nullptr, "Unknown1025"}, // 17.0.0+
{1026, nullptr, "Unknown1026"}, // 17.0.0+
{1027, nullptr, "Unknown1027"}, // 17.0.0+
{1501, nullptr, "Unknown1501"},
{1502, nullptr, "Unknown1502"},
{1503, nullptr, "Unknown1503"},

View File

@ -3,10 +3,12 @@
#include <memory>
#include "core/hle/service/cmif_types.h"
#include "core/hle/service/fgm/fgm.h"
#include "core/hle/service/ipc_helpers.h"
#include "core/hle/service/server_manager.h"
#include "core/hle/service/service.h"
#include "core/hle/service/set/system_settings_server.h"
#include "core/hle/service/sm/sm.h"
namespace Service::FGM {
@ -70,7 +72,19 @@ void LoopProcess(Core::System& system) {
server_manager->RegisterNamedService("fgm", std::make_shared<FGM>(system, "fgm"));
server_manager->RegisterNamedService("fgm:0", std::make_shared<FGM>(system, "fgm:0"));
server_manager->RegisterNamedService("fgm:9", std::make_shared<FGM>(system, "fgm:9"));
server_manager->RegisterNamedService("fgm:dbg", std::make_shared<FGM_DBG>(system));
Service::OutLargeData<Service::Set::FirmwareVersionFormat, 8> firmware_version = nullptr;
system.ServiceManager()
.GetService<Service::Set::ISystemSettingsServer>("set:sys", true)
->GetFirmwareVersion(firmware_version);
LOG_DEBUG(Service_FGM, "major={}, display_version={}", firmware_version->major,
std::string(firmware_version->display_version.begin(),
firmware_version->display_version.end()));
if (firmware_version->major < 17) {
server_manager->RegisterNamedService("fgm:dbg", std::make_shared<FGM_DBG>(system));
}
ServerManager::RunServer(std::move(server_manager));
}

View File

@ -23,6 +23,7 @@ public:
{1010, nullptr, "Unknown1010"},
{1100, nullptr, "Unknown1100"},
{1101, nullptr, "Unknown1101"},
{1110, nullptr, "Unknown1110"}, // 17.0.0+
{1200, nullptr, "Unknown1200"},
{1201, nullptr, "Unknown1201"}
};

View File

@ -215,6 +215,11 @@ public:
{132, nullptr, "Unknown132"},
{133, nullptr, "Unknown133"},
{134, nullptr, "Unknown134"},
{142, nullptr, "Unknown142"}, // 17.0.0+
{143, nullptr, "Unknown143"}, // 17.0.0+
{144, nullptr, "Unknown144"}, // 17.0.0+
{3000, nullptr, "Unknown3000"}, // 17.0.0+
{3001, nullptr, "Unknown3001"} // 17.0.0+
};
// clang-format on
@ -232,6 +237,7 @@ public:
{2, nullptr, "ClearDebugResponse"},
{3, nullptr, "RegisterDebugResponse"},
{4, &NIM_ECA::IsLargeResourceAvailable, "IsLargeResourceAvailable"},
{5, nullptr, "CreateServerInterface2"} // 17.0.0+
};
// clang-format on

View File

@ -39,6 +39,14 @@ public:
{32, nullptr, "DestroyTokenForBaaS"},
{33, nullptr, "CreateTokenForBaaS"},
{34, nullptr, "SetBaaSDeviceAccountIdList"},
{35, nullptr, "LinkNsaId"}, // 17.0.0+
{36, nullptr, "UnlinkNsaId"}, // 17.0.0+
{40, nullptr, "GetNetworkServiceAccountIdTokenRequestEvent"}, // 17.0.0+
{41, nullptr, "TryPopNetworkServiceAccountIdTokenRequestUid"}, // 17.0.0+
{42, nullptr, "SetNetworkServiceAccountIdTokenSuccess"}, // 17.0.0+
{43, nullptr, "SetNetworkServiceAccountIdTokenFailure"}, // 17.0.0+
{44, nullptr, "SetUidList"}, // 17.0.0+
{45, nullptr, "PutDigitalTwinKeyValue"}, // 17.0.0+
{101, nullptr, "Suspend"},
{102, nullptr, "Resume"},
{103, nullptr, "GetState"},

View File

@ -16,6 +16,10 @@ void LoopProcess(Core::System& system) {
std::make_shared<IPolicyManagerSystem>(system));
server_manager->RegisterNamedService("omm", std::make_shared<IOperationModeManager>(system));
server_manager->RegisterNamedService("spsm", std::make_shared<IPowerStateInterface>(system));
/*
TODO: (jarrodnorwell) ommdisp
https://switchbrew.org/wiki/OMM_services#ommdisp
*/
ServerManager::RunServer(std::move(server_manager));
}

View File

@ -22,6 +22,9 @@ public:
{0, nullptr, "GetTemperatureRange"},
{2, nullptr, "SetMeasurementMode"},
{4, &ISession::GetTemperature, "GetTemperature"},
{5, nullptr, "Unknown5"}, // 17.0.0+
{6, nullptr, "Unknown6"}, // 17.0.0+
{7, nullptr, "Unknown7"} // 17.0.0+
};
// clang-format on

View File

@ -1006,7 +1006,8 @@ BSD::BSD(Core::System& system_, const char* name)
{30, nullptr, "SendMMsg"},
{31, &BSD::EventFd, "EventFd"},
{32, nullptr, "RegisterResourceStatisticsName"},
{33, nullptr, "Initialize2"},
{33, nullptr, "RegisterClientShared"},
{35, nullptr, "NifIoctl"} // 17.0.0+
};
// clang-format on
@ -1050,6 +1051,24 @@ BSDCFG::BSDCFG(Core::System& system_) : ServiceFramework{system_, "bsdcfg"} {
{13, nullptr, "Unknown13"},
{14, nullptr, "Unknown14"},
{15, nullptr, "Unknown15"},
{16, nullptr, "Unknown16"}, // 17.0.0+
{17, nullptr, "Unknown17"}, // 17.0.0+
{18, nullptr, "Unknown18"}, // 17.0.0+
{19, nullptr, "Unknown19"}, // 17.0.0+
{20, nullptr, "Unknown20"}, // 17.0.0+
{21, nullptr, "Unknown21"}, // 17.0.0+
{22, nullptr, "Unknown22"}, // 17.0.0+
{23, nullptr, "Unknown23"}, // 17.0.0+
{50, nullptr, "Unknown50"}, // 17.0.0+
{51, nullptr, "Unknown51"}, // 17.0.0+
{52, nullptr, "Unknown52"}, // 17.0.0+
{53, nullptr, "Unknown53"}, // 17.0.0+
{54, nullptr, "Unknown54"}, // 17.0.0+
{55, nullptr, "Unknown55"}, // 17.0.0+
{56, nullptr, "Unknown56"}, // 17.0.0+
{57, nullptr, "Unknown57"}, // 17.0.0+
{58, nullptr, "Unknown58"}, // 17.0.0+
{100, nullptr, "Unknown100"} // 17.0.0+
};
// clang-format on

View File

@ -736,35 +736,35 @@ void GRenderWindow::wheelEvent(QWheelEvent* event) {
}
void GRenderWindow::TouchBeginEvent(const QTouchEvent* event) {
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
QList<QTouchEvent::TouchPoint> touch_points = event->points();
#else
#else
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints();
#endif
#endif
for (const auto& touch_point : touch_points) {
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
const auto [x, y] = ScaleTouch(touch_point.position());
#else
#else
const auto [x, y] = ScaleTouch(touch_point.pos());
#endif
#endif
const auto [touch_x, touch_y] = MapToTouchScreen(x, y);
input_subsystem->GetTouchScreen()->TouchPressed(touch_x, touch_y, touch_point.id());
}
}
void GRenderWindow::TouchUpdateEvent(const QTouchEvent* event) {
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
QList<QTouchEvent::TouchPoint> touch_points = event->points();
#else
#else
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints();
#endif
#endif
input_subsystem->GetTouchScreen()->ClearActiveFlag();
for (const auto& touch_point : touch_points) {
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
const auto [x, y] = ScaleTouch(touch_point.position());
#else
#else
const auto [x, y] = ScaleTouch(touch_point.pos());
#endif
#endif
const auto [touch_x, touch_y] = MapToTouchScreen(x, y);
input_subsystem->GetTouchScreen()->TouchMoved(touch_x, touch_y, touch_point.id());
}

View File

@ -505,11 +505,11 @@ void TouchScreenPreview::mouseMoveEvent(QMouseEvent* event) {
if (!coord_label) {
return;
}
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
const auto pos = MapToDeviceCoords(event->position().x(), event->position().y());
#else
#else
const auto pos = MapToDeviceCoords(event->x(), event->y());
#endif
#endif
if (pos) {
coord_label->setText(QStringLiteral("X: %1, Y: %2").arg(pos->x()).arg(pos->y()));
} else {
@ -527,11 +527,11 @@ void TouchScreenPreview::mousePressEvent(QMouseEvent* event) {
if (event->button() != Qt::MouseButton::LeftButton) {
return;
}
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
const auto pos = MapToDeviceCoords(event->position().x(), event->position().y());
#else
#else
const auto pos = MapToDeviceCoords(event->x(), event->y());
#endif
#endif
if (pos) {
emit DotAdded(*pos);
}
@ -547,11 +547,11 @@ bool TouchScreenPreview::eventFilter(QObject* obj, QEvent* event) {
emit DotSelected(obj->property(PropId).toInt());
drag_state.dot = qobject_cast<QLabel*>(obj);
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
drag_state.start_pos = mouse_event->globalPosition().toPoint();
#else
#else
drag_state.start_pos = mouse_event->globalPos();
#endif
#endif
return true;
}
case QEvent::Type::MouseMove: {
@ -560,22 +560,23 @@ bool TouchScreenPreview::eventFilter(QObject* obj, QEvent* event) {
}
const auto mouse_event = static_cast<QMouseEvent*>(event);
if (!drag_state.active) {
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
drag_state.active = (mouse_event->globalPosition().toPoint() - drag_state.start_pos)
.manhattanLength() >= QApplication::startDragDistance();
#else
drag_state.active = (mouse_event->globalPos() - drag_state.start_pos)
.manhattanLength() >= QApplication::startDragDistance();
#endif
#else
drag_state.active =
(mouse_event->globalPos() - drag_state.start_pos).manhattanLength() >=
QApplication::startDragDistance();
#endif
if (!drag_state.active) {
break;
}
}
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
auto current_pos = mapFromGlobal(mouse_event->globalPosition().toPoint());
#else
#else
auto current_pos = mapFromGlobal(mouse_event->globalPos());
#endif
#endif
current_pos.setX(std::clamp(current_pos.x(), contentsMargins().left(),
contentsMargins().left() + contentsRect().width() - 1));
current_pos.setY(std::clamp(current_pos.y(), contentsMargins().top(),

View File

@ -256,10 +256,10 @@ void ConfigureUi::InitializeLanguageComboBox() {
locale.truncate(locale.lastIndexOf(QLatin1Char{'.'}));
locale.remove(0, locale.lastIndexOf(QLatin1Char{'/'}) + 1);
const QString lang = QLocale::languageToString(QLocale(locale).language());
#ifdef ENABLE_QT6
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
const QString territory = QLocale::territoryToString(QLocale(locale).territory());
ui->language_combobox->addItem(QStringLiteral("%1 (%2)").arg(lang, territory), locale);
#else
#else
const QString country = QLocale::countryToString(QLocale(locale).country());
ui->language_combobox->addItem(QStringLiteral("%1 (%2)").arg(lang, country), locale);
#endif