Merge pull request #8544 from german77/14dot0
service: Update some services to 14.0.0+
This commit is contained in:
commit
a5bdf824e6
|
@ -290,7 +290,7 @@ protected:
|
||||||
void Get(Kernel::HLERequestContext& ctx) {
|
void Get(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString());
|
LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString());
|
||||||
ProfileBase profile_base{};
|
ProfileBase profile_base{};
|
||||||
ProfileData data{};
|
UserData data{};
|
||||||
if (profile_manager.GetProfileBaseAndData(user_id, profile_base, data)) {
|
if (profile_manager.GetProfileBaseAndData(user_id, profile_base, data)) {
|
||||||
ctx.WriteBuffer(data);
|
ctx.WriteBuffer(data);
|
||||||
IPC::ResponseBuilder rb{ctx, 16};
|
IPC::ResponseBuilder rb{ctx, 16};
|
||||||
|
@ -373,18 +373,18 @@ protected:
|
||||||
reinterpret_cast<const char*>(base.username.data()), base.username.size()),
|
reinterpret_cast<const char*>(base.username.data()), base.username.size()),
|
||||||
base.timestamp, base.user_uuid.RawString());
|
base.timestamp, base.user_uuid.RawString());
|
||||||
|
|
||||||
if (user_data.size() < sizeof(ProfileData)) {
|
if (user_data.size() < sizeof(UserData)) {
|
||||||
LOG_ERROR(Service_ACC, "ProfileData buffer too small!");
|
LOG_ERROR(Service_ACC, "UserData buffer too small!");
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ERR_INVALID_BUFFER);
|
rb.Push(ERR_INVALID_BUFFER);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProfileData data;
|
UserData data;
|
||||||
std::memcpy(&data, user_data.data(), sizeof(ProfileData));
|
std::memcpy(&data, user_data.data(), sizeof(UserData));
|
||||||
|
|
||||||
if (!profile_manager.SetProfileBaseAndData(user_id, base, data)) {
|
if (!profile_manager.SetProfileBaseAndData(user_id, base, data)) {
|
||||||
LOG_ERROR(Service_ACC, "Failed to update profile data and base!");
|
LOG_ERROR(Service_ACC, "Failed to update user data and base!");
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ERR_FAILED_SAVE_DATA);
|
rb.Push(ERR_FAILED_SAVE_DATA);
|
||||||
return;
|
return;
|
||||||
|
@ -406,15 +406,15 @@ protected:
|
||||||
reinterpret_cast<const char*>(base.username.data()), base.username.size()),
|
reinterpret_cast<const char*>(base.username.data()), base.username.size()),
|
||||||
base.timestamp, base.user_uuid.RawString());
|
base.timestamp, base.user_uuid.RawString());
|
||||||
|
|
||||||
if (user_data.size() < sizeof(ProfileData)) {
|
if (user_data.size() < sizeof(UserData)) {
|
||||||
LOG_ERROR(Service_ACC, "ProfileData buffer too small!");
|
LOG_ERROR(Service_ACC, "UserData buffer too small!");
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ERR_INVALID_BUFFER);
|
rb.Push(ERR_INVALID_BUFFER);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProfileData data;
|
UserData data;
|
||||||
std::memcpy(&data, user_data.data(), sizeof(ProfileData));
|
std::memcpy(&data, user_data.data(), sizeof(UserData));
|
||||||
|
|
||||||
Common::FS::IOFile image(GetImagePath(user_id), Common::FS::FileAccessMode::Write,
|
Common::FS::IOFile image(GetImagePath(user_id), Common::FS::FileAccessMode::Write,
|
||||||
Common::FS::FileType::BinaryFile);
|
Common::FS::FileType::BinaryFile);
|
||||||
|
|
|
@ -22,7 +22,7 @@ struct UserRaw {
|
||||||
UUID uuid2{};
|
UUID uuid2{};
|
||||||
u64 timestamp{};
|
u64 timestamp{};
|
||||||
ProfileUsername username{};
|
ProfileUsername username{};
|
||||||
ProfileData extra_data{};
|
UserData extra_data{};
|
||||||
};
|
};
|
||||||
static_assert(sizeof(UserRaw) == 0xC8, "UserRaw has incorrect size.");
|
static_assert(sizeof(UserRaw) == 0xC8, "UserRaw has incorrect size.");
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ UUID ProfileManager::GetLastOpenedUser() const {
|
||||||
|
|
||||||
/// Return the users profile base and the unknown arbitary data.
|
/// Return the users profile base and the unknown arbitary data.
|
||||||
bool ProfileManager::GetProfileBaseAndData(std::optional<std::size_t> index, ProfileBase& profile,
|
bool ProfileManager::GetProfileBaseAndData(std::optional<std::size_t> index, ProfileBase& profile,
|
||||||
ProfileData& data) const {
|
UserData& data) const {
|
||||||
if (GetProfileBase(index, profile)) {
|
if (GetProfileBase(index, profile)) {
|
||||||
data = profiles[*index].data;
|
data = profiles[*index].data;
|
||||||
return true;
|
return true;
|
||||||
|
@ -272,15 +272,14 @@ bool ProfileManager::GetProfileBaseAndData(std::optional<std::size_t> index, Pro
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the users profile base and the unknown arbitary data.
|
/// Return the users profile base and the unknown arbitary data.
|
||||||
bool ProfileManager::GetProfileBaseAndData(UUID uuid, ProfileBase& profile,
|
bool ProfileManager::GetProfileBaseAndData(UUID uuid, ProfileBase& profile, UserData& data) const {
|
||||||
ProfileData& data) const {
|
|
||||||
const auto idx = GetUserIndex(uuid);
|
const auto idx = GetUserIndex(uuid);
|
||||||
return GetProfileBaseAndData(idx, profile, data);
|
return GetProfileBaseAndData(idx, profile, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the users profile base and the unknown arbitary data.
|
/// Return the users profile base and the unknown arbitary data.
|
||||||
bool ProfileManager::GetProfileBaseAndData(const ProfileInfo& user, ProfileBase& profile,
|
bool ProfileManager::GetProfileBaseAndData(const ProfileInfo& user, ProfileBase& profile,
|
||||||
ProfileData& data) const {
|
UserData& data) const {
|
||||||
return GetProfileBaseAndData(user.user_uuid, profile, data);
|
return GetProfileBaseAndData(user.user_uuid, profile, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,7 +317,7 @@ bool ProfileManager::SetProfileBase(UUID uuid, const ProfileBase& profile_new) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProfileManager::SetProfileBaseAndData(Common::UUID uuid, const ProfileBase& profile_new,
|
bool ProfileManager::SetProfileBaseAndData(Common::UUID uuid, const ProfileBase& profile_new,
|
||||||
const ProfileData& data_new) {
|
const UserData& data_new) {
|
||||||
const auto index = GetUserIndex(uuid);
|
const auto index = GetUserIndex(uuid);
|
||||||
if (index.has_value() && SetProfileBase(uuid, profile_new)) {
|
if (index.has_value() && SetProfileBase(uuid, profile_new)) {
|
||||||
profiles[*index].data = data_new;
|
profiles[*index].data = data_new;
|
||||||
|
|
|
@ -22,7 +22,7 @@ using UserIDArray = std::array<Common::UUID, MAX_USERS>;
|
||||||
|
|
||||||
/// Contains extra data related to a user.
|
/// Contains extra data related to a user.
|
||||||
/// TODO: RE this structure
|
/// TODO: RE this structure
|
||||||
struct ProfileData {
|
struct UserData {
|
||||||
INSERT_PADDING_WORDS_NOINIT(1);
|
INSERT_PADDING_WORDS_NOINIT(1);
|
||||||
u32 icon_id;
|
u32 icon_id;
|
||||||
u8 bg_color_id;
|
u8 bg_color_id;
|
||||||
|
@ -30,7 +30,7 @@ struct ProfileData {
|
||||||
INSERT_PADDING_BYTES_NOINIT(0x10);
|
INSERT_PADDING_BYTES_NOINIT(0x10);
|
||||||
INSERT_PADDING_BYTES_NOINIT(0x60);
|
INSERT_PADDING_BYTES_NOINIT(0x60);
|
||||||
};
|
};
|
||||||
static_assert(sizeof(ProfileData) == 0x80, "ProfileData structure has incorrect size");
|
static_assert(sizeof(UserData) == 0x80, "UserData structure has incorrect size");
|
||||||
|
|
||||||
/// This holds general information about a users profile. This is where we store all the information
|
/// This holds general information about a users profile. This is where we store all the information
|
||||||
/// based on a specific user
|
/// based on a specific user
|
||||||
|
@ -38,7 +38,7 @@ struct ProfileInfo {
|
||||||
Common::UUID user_uuid{};
|
Common::UUID user_uuid{};
|
||||||
ProfileUsername username{};
|
ProfileUsername username{};
|
||||||
u64 creation_time{};
|
u64 creation_time{};
|
||||||
ProfileData data{}; // TODO(ognik): Work out what this is
|
UserData data{}; // TODO(ognik): Work out what this is
|
||||||
bool is_open{};
|
bool is_open{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -74,10 +74,9 @@ public:
|
||||||
bool GetProfileBase(Common::UUID uuid, ProfileBase& profile) const;
|
bool GetProfileBase(Common::UUID uuid, ProfileBase& profile) const;
|
||||||
bool GetProfileBase(const ProfileInfo& user, ProfileBase& profile) const;
|
bool GetProfileBase(const ProfileInfo& user, ProfileBase& profile) const;
|
||||||
bool GetProfileBaseAndData(std::optional<std::size_t> index, ProfileBase& profile,
|
bool GetProfileBaseAndData(std::optional<std::size_t> index, ProfileBase& profile,
|
||||||
ProfileData& data) const;
|
UserData& data) const;
|
||||||
bool GetProfileBaseAndData(Common::UUID uuid, ProfileBase& profile, ProfileData& data) const;
|
bool GetProfileBaseAndData(Common::UUID uuid, ProfileBase& profile, UserData& data) const;
|
||||||
bool GetProfileBaseAndData(const ProfileInfo& user, ProfileBase& profile,
|
bool GetProfileBaseAndData(const ProfileInfo& user, ProfileBase& profile, UserData& data) const;
|
||||||
ProfileData& data) const;
|
|
||||||
std::size_t GetUserCount() const;
|
std::size_t GetUserCount() const;
|
||||||
std::size_t GetOpenUserCount() const;
|
std::size_t GetOpenUserCount() const;
|
||||||
bool UserExists(Common::UUID uuid) const;
|
bool UserExists(Common::UUID uuid) const;
|
||||||
|
@ -93,7 +92,7 @@ public:
|
||||||
bool RemoveUser(Common::UUID uuid);
|
bool RemoveUser(Common::UUID uuid);
|
||||||
bool SetProfileBase(Common::UUID uuid, const ProfileBase& profile_new);
|
bool SetProfileBase(Common::UUID uuid, const ProfileBase& profile_new);
|
||||||
bool SetProfileBaseAndData(Common::UUID uuid, const ProfileBase& profile_new,
|
bool SetProfileBaseAndData(Common::UUID uuid, const ProfileBase& profile_new,
|
||||||
const ProfileData& data_new);
|
const UserData& data_new);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ParseUserSaveFile();
|
void ParseUserSaveFile();
|
||||||
|
|
|
@ -238,6 +238,7 @@ IDebugFunctions::IDebugFunctions(Core::System& system_)
|
||||||
{130, nullptr, "FriendInvitationSetApplicationParameter"},
|
{130, nullptr, "FriendInvitationSetApplicationParameter"},
|
||||||
{131, nullptr, "FriendInvitationClearApplicationParameter"},
|
{131, nullptr, "FriendInvitationClearApplicationParameter"},
|
||||||
{132, nullptr, "FriendInvitationPushApplicationParameter"},
|
{132, nullptr, "FriendInvitationPushApplicationParameter"},
|
||||||
|
{140, nullptr, "RestrictPowerOperationForSecureLaunchModeForDebug"},
|
||||||
{900, nullptr, "GetGrcProcessLaunchedSystemEvent"},
|
{900, nullptr, "GetGrcProcessLaunchedSystemEvent"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
@ -1310,6 +1311,8 @@ IApplicationFunctions::IApplicationFunctions(Core::System& system_)
|
||||||
{33, &IApplicationFunctions::EndBlockingHomeButton, "EndBlockingHomeButton"},
|
{33, &IApplicationFunctions::EndBlockingHomeButton, "EndBlockingHomeButton"},
|
||||||
{34, nullptr, "SelectApplicationLicense"},
|
{34, nullptr, "SelectApplicationLicense"},
|
||||||
{35, nullptr, "GetDeviceSaveDataSizeMax"},
|
{35, nullptr, "GetDeviceSaveDataSizeMax"},
|
||||||
|
{36, nullptr, "GetLimitedApplicationLicense"},
|
||||||
|
{37, nullptr, "GetLimitedApplicationLicenseUpgradableEvent"},
|
||||||
{40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"},
|
{40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"},
|
||||||
{50, &IApplicationFunctions::GetPseudoDeviceId, "GetPseudoDeviceId"},
|
{50, &IApplicationFunctions::GetPseudoDeviceId, "GetPseudoDeviceId"},
|
||||||
{60, nullptr, "SetMediaPlaybackStateForApplication"},
|
{60, nullptr, "SetMediaPlaybackStateForApplication"},
|
||||||
|
|
|
@ -140,8 +140,8 @@ public:
|
||||||
{20401, nullptr, "UnregisterSystemApplicationDeliveryTask"},
|
{20401, nullptr, "UnregisterSystemApplicationDeliveryTask"},
|
||||||
{20410, nullptr, "SetSystemApplicationDeliveryTaskTimer"},
|
{20410, nullptr, "SetSystemApplicationDeliveryTaskTimer"},
|
||||||
{30100, &IBcatService::SetPassphrase, "SetPassphrase"},
|
{30100, &IBcatService::SetPassphrase, "SetPassphrase"},
|
||||||
{30101, nullptr, "Unknown"},
|
{30101, nullptr, "Unknown30101"},
|
||||||
{30102, nullptr, "Unknown2"},
|
{30102, nullptr, "Unknown30102"},
|
||||||
{30200, nullptr, "RegisterBackgroundDeliveryTask"},
|
{30200, nullptr, "RegisterBackgroundDeliveryTask"},
|
||||||
{30201, nullptr, "UnregisterBackgroundDeliveryTask"},
|
{30201, nullptr, "UnregisterBackgroundDeliveryTask"},
|
||||||
{30202, nullptr, "BlockDeliveryTask"},
|
{30202, nullptr, "BlockDeliveryTask"},
|
||||||
|
|
|
@ -181,6 +181,11 @@ public:
|
||||||
{147, nullptr, "RegisterAudioControlNotification"},
|
{147, nullptr, "RegisterAudioControlNotification"},
|
||||||
{148, nullptr, "SendAudioControlPassthroughCommand"},
|
{148, nullptr, "SendAudioControlPassthroughCommand"},
|
||||||
{149, nullptr, "SendAudioControlSetAbsoluteVolumeCommand"},
|
{149, nullptr, "SendAudioControlSetAbsoluteVolumeCommand"},
|
||||||
|
{150, nullptr, "AcquireAudioSinkVolumeLocallyChangedEvent"},
|
||||||
|
{151, nullptr, "AcquireAudioSinkVolumeUpdateRequestCompletedEvent"},
|
||||||
|
{152, nullptr, "GetAudioSinkVolume"},
|
||||||
|
{153, nullptr, "RequestUpdateAudioSinkVolume"},
|
||||||
|
{154, nullptr, "IsAudioSinkVolumeSupported"},
|
||||||
{256, nullptr, "IsManufacturingMode"},
|
{256, nullptr, "IsManufacturingMode"},
|
||||||
{257, nullptr, "EmulateBluetoothCrash"},
|
{257, nullptr, "EmulateBluetoothCrash"},
|
||||||
{258, nullptr, "GetBleChannelMap"},
|
{258, nullptr, "GetBleChannelMap"},
|
||||||
|
|
|
@ -214,8 +214,12 @@ public:
|
||||||
{76, nullptr, "Unknown76"},
|
{76, nullptr, "Unknown76"},
|
||||||
{100, nullptr, "Unknown100"},
|
{100, nullptr, "Unknown100"},
|
||||||
{101, nullptr, "Unknown101"},
|
{101, nullptr, "Unknown101"},
|
||||||
{110, nullptr, "Unknown102"},
|
{110, nullptr, "Unknown110"},
|
||||||
{111, nullptr, "Unknown103"},
|
{111, nullptr, "Unknown111"},
|
||||||
|
{112, nullptr, "Unknown112"},
|
||||||
|
{113, nullptr, "Unknown113"},
|
||||||
|
{114, nullptr, "Unknown114"},
|
||||||
|
{115, nullptr, "Unknown115"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,13 @@
|
||||||
namespace Service::Fatal {
|
namespace Service::Fatal {
|
||||||
|
|
||||||
Fatal_P::Fatal_P(std::shared_ptr<Module> module_, Core::System& system_)
|
Fatal_P::Fatal_P(std::shared_ptr<Module> module_, Core::System& system_)
|
||||||
: Interface(std::move(module_), system_, "fatal:p") {}
|
: Interface(std::move(module_), system_, "fatal:p") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "GetFatalEvent"},
|
||||||
|
{10, nullptr, "GetFatalContext"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
Fatal_P::~Fatal_P() = default;
|
Fatal_P::~Fatal_P() = default;
|
||||||
|
|
||||||
|
|
Reference in New Issue