mii: Implement IsUpdated command (IPC 0)
This commit is contained in:
		@@ -68,13 +68,14 @@ private:
 | 
			
		||||
 | 
			
		||||
    void IsUpdated(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        IPC::RequestParser rp{ctx};
 | 
			
		||||
        const auto unknown{rp.PopRaw<u32>()};
 | 
			
		||||
        const auto source{rp.PopRaw<Source>()};
 | 
			
		||||
 | 
			
		||||
        LOG_WARNING(Service_Mii, "(STUBBED) called with unknown={:08X}", unknown);
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with source={}", source);
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 3};
 | 
			
		||||
        rb.Push(RESULT_SUCCESS);
 | 
			
		||||
        rb.Push(false);
 | 
			
		||||
        rb.Push(db.CheckUpdatedFlag());
 | 
			
		||||
        db.ResetUpdatedFlag();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void IsFullDatabase(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
@@ -87,9 +88,9 @@ private:
 | 
			
		||||
 | 
			
		||||
    void GetCount(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        IPC::RequestParser rp{ctx};
 | 
			
		||||
        const auto unknown{rp.PopRaw<u32>()};
 | 
			
		||||
        const auto source{rp.PopRaw<Source>()};
 | 
			
		||||
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with unknown={:08X}", unknown);
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with source={}", source);
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 3};
 | 
			
		||||
        rb.Push(RESULT_SUCCESS);
 | 
			
		||||
@@ -100,8 +101,10 @@ private:
 | 
			
		||||
    void Get(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        IPC::RequestParser rp{ctx};
 | 
			
		||||
        const auto size{rp.PopRaw<u32>()};
 | 
			
		||||
        const auto source{rp.PopRaw<Source>()};
 | 
			
		||||
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}", size, offsets[0]);
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}, source={}", size,
 | 
			
		||||
                  offsets[0], source);
 | 
			
		||||
 | 
			
		||||
        u32 read_size{};
 | 
			
		||||
        ctx.WriteBuffer(SerializeArray(&MiiManager::GetInfoElement, offsets[0], size, read_size));
 | 
			
		||||
@@ -116,8 +119,10 @@ private:
 | 
			
		||||
    void Get1(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        IPC::RequestParser rp{ctx};
 | 
			
		||||
        const auto size{rp.PopRaw<u32>()};
 | 
			
		||||
        const auto source{rp.PopRaw<Source>()};
 | 
			
		||||
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}", size, offsets[1]);
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}, source={}", size,
 | 
			
		||||
                  offsets[1], source);
 | 
			
		||||
 | 
			
		||||
        u32 read_size{};
 | 
			
		||||
        ctx.WriteBuffer(SerializeArray(&MiiManager::GetInfo, offsets[1], size, read_size));
 | 
			
		||||
@@ -157,8 +162,10 @@ private:
 | 
			
		||||
    void Get2(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        IPC::RequestParser rp{ctx};
 | 
			
		||||
        const auto size{rp.PopRaw<u32>()};
 | 
			
		||||
        const auto source{rp.PopRaw<Source>()};
 | 
			
		||||
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}", size, offsets[2]);
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}, source={}", size,
 | 
			
		||||
                  offsets[2], source);
 | 
			
		||||
 | 
			
		||||
        u32 read_size{};
 | 
			
		||||
        ctx.WriteBuffer(
 | 
			
		||||
@@ -174,8 +181,10 @@ private:
 | 
			
		||||
    void Get3(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        IPC::RequestParser rp{ctx};
 | 
			
		||||
        const auto size{rp.PopRaw<u32>()};
 | 
			
		||||
        const auto source{rp.PopRaw<Source>()};
 | 
			
		||||
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}", size, offsets[3]);
 | 
			
		||||
        LOG_DEBUG(Service_Mii, "called with size={:08X}, offset={:08X}, source={}", size,
 | 
			
		||||
                  offsets[3], source);
 | 
			
		||||
 | 
			
		||||
        u32 read_size{};
 | 
			
		||||
        ctx.WriteBuffer(SerializeArray(&MiiManager::GetStoreData, offsets[3], size, read_size));
 | 
			
		||||
 
 | 
			
		||||
@@ -204,6 +204,14 @@ MiiInfo MiiManager::CreateDefault(u32 index) {
 | 
			
		||||
    return ConvertStoreDataToInfo(new_mii);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MiiManager::CheckUpdatedFlag() const {
 | 
			
		||||
    return updated_flag;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MiiManager::ResetUpdatedFlag() {
 | 
			
		||||
    updated_flag = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MiiManager::Empty() const {
 | 
			
		||||
    return Size() == 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -213,6 +221,7 @@ bool MiiManager::Full() const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MiiManager::Clear() {
 | 
			
		||||
    updated_flag = true;
 | 
			
		||||
    std::fill(database.miis.begin(), database.miis.end(), MiiStoreData{});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -244,6 +253,7 @@ bool MiiManager::Remove(Common::UUID uuid) {
 | 
			
		||||
    if (iter == database.miis.end())
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    updated_flag = true;
 | 
			
		||||
    *iter = MiiStoreData{};
 | 
			
		||||
    EnsureDatabasePartition();
 | 
			
		||||
    return true;
 | 
			
		||||
@@ -277,6 +287,7 @@ bool MiiManager::Move(Common::UUID uuid, u32 new_index) {
 | 
			
		||||
    if (index == INVALID_INDEX || new_index >= MAX_MIIS)
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    updated_flag = true;
 | 
			
		||||
    const auto moving = database.miis[index];
 | 
			
		||||
    const auto replacing = database.miis[new_index];
 | 
			
		||||
    if (replacing.uuid) {
 | 
			
		||||
@@ -294,6 +305,7 @@ bool MiiManager::Move(Common::UUID uuid, u32 new_index) {
 | 
			
		||||
bool MiiManager::AddOrReplace(const MiiStoreData& data) {
 | 
			
		||||
    const auto index = IndexOf(data.uuid);
 | 
			
		||||
 | 
			
		||||
    updated_flag = true;
 | 
			
		||||
    if (index == INVALID_INDEX) {
 | 
			
		||||
        const auto size = Size();
 | 
			
		||||
        if (size == MAX_MIIS)
 | 
			
		||||
 
 | 
			
		||||
@@ -226,6 +226,9 @@ public:
 | 
			
		||||
    MiiInfo CreateRandom(RandomParameters params);
 | 
			
		||||
    MiiInfo CreateDefault(u32 index);
 | 
			
		||||
 | 
			
		||||
    bool CheckUpdatedFlag() const;
 | 
			
		||||
    void ResetUpdatedFlag();
 | 
			
		||||
 | 
			
		||||
    bool Empty() const;
 | 
			
		||||
    bool Full() const;
 | 
			
		||||
 | 
			
		||||
@@ -254,6 +257,7 @@ private:
 | 
			
		||||
    void EnsureDatabasePartition();
 | 
			
		||||
 | 
			
		||||
    MiiDatabase database;
 | 
			
		||||
    bool updated_flag = false;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}; // namespace Service::Mii
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user