forked from eden-emu/eden
		
	mii: Implement IsUpdated command (IPC 0)
This commit is contained in:
		
							parent
							
								
									b4759039c0
								
							
						
					
					
						commit
						42c3c73acc
					
				
					 3 changed files with 34 additions and 9 deletions
				
			
		|  | @ -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
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Zach Hilman
						Zach Hilman