mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Services/APT: Use the AppletAttributes union directly when dealing with applet attrs.
This commit is contained in:
		
							parent
							
								
									73fba0de46
								
							
						
					
					
						commit
						177e8ce655
					
				
					 1 changed files with 15 additions and 19 deletions
				
			
		|  | @ -60,11 +60,20 @@ enum class AppletSlot : u8 { | ||||||
|     Error, |     Error, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | union AppletAttributes { | ||||||
|  |     u32 raw; | ||||||
|  | 
 | ||||||
|  |     BitField<0, 3, u32> applet_pos; | ||||||
|  | 
 | ||||||
|  |     AppletAttributes() : raw(0) {} | ||||||
|  |     AppletAttributes(u32 attributes) : raw(attributes) {} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| struct AppletSlotData { | struct AppletSlotData { | ||||||
|     AppletId applet_id; |     AppletId applet_id; | ||||||
|     AppletSlot slot; |     AppletSlot slot; | ||||||
|     bool registered; |     bool registered; | ||||||
|     u32 attributes; |     AppletAttributes attributes; | ||||||
|     Kernel::SharedPtr<Kernel::Event> notification_event; |     Kernel::SharedPtr<Kernel::Event> notification_event; | ||||||
|     Kernel::SharedPtr<Kernel::Event> parameter_event; |     Kernel::SharedPtr<Kernel::Event> parameter_event; | ||||||
| }; | }; | ||||||
|  | @ -72,19 +81,6 @@ struct AppletSlotData { | ||||||
| // Holds data about the concurrently running applets in the system.
 | // Holds data about the concurrently running applets in the system.
 | ||||||
| static std::array<AppletSlotData, NumAppletSlot> applet_slots = {}; | static std::array<AppletSlotData, NumAppletSlot> applet_slots = {}; | ||||||
| 
 | 
 | ||||||
| union AppletAttributes { |  | ||||||
|     u32 raw; |  | ||||||
| 
 |  | ||||||
|     BitField<0, 3, u32> applet_pos; |  | ||||||
| 
 |  | ||||||
|     AppletAttributes(u32 attributes) : raw(attributes) {} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| // Helper function to extract the AppletPos from the lower bits of the applet attributes
 |  | ||||||
| static u32 GetAppletPos(AppletAttributes attributes) { |  | ||||||
|     return attributes.applet_pos; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // This overload returns nullptr if no applet with the specified id has been started.
 | // This overload returns nullptr if no applet with the specified id has been started.
 | ||||||
| static AppletSlotData* GetAppletSlotData(AppletId id) { | static AppletSlotData* GetAppletSlotData(AppletId id) { | ||||||
|     auto GetSlot = [](AppletSlot slot) -> AppletSlotData* { |     auto GetSlot = [](AppletSlot slot) -> AppletSlotData* { | ||||||
|  | @ -118,7 +114,7 @@ static AppletSlotData* GetAppletSlotData(AppletId id) { | ||||||
|         if (slot->applet_id == AppletId::None) |         if (slot->applet_id == AppletId::None) | ||||||
|             return nullptr; |             return nullptr; | ||||||
| 
 | 
 | ||||||
|         u32 applet_pos = GetAppletPos(slot->attributes); |         u32 applet_pos = slot->attributes.applet_pos; | ||||||
| 
 | 
 | ||||||
|         if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast<u32>(AppletPos::Library)) |         if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast<u32>(AppletPos::Library)) | ||||||
|             return slot; |             return slot; | ||||||
|  | @ -146,13 +142,13 @@ static AppletSlotData* GetAppletSlotData(AppletId id) { | ||||||
|     return nullptr; |     return nullptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static AppletSlotData* GetAppletSlotData(u32 attributes) { | static AppletSlotData* GetAppletSlotData(AppletAttributes attributes) { | ||||||
|     // Mapping from AppletPos to AppletSlot
 |     // Mapping from AppletPos to AppletSlot
 | ||||||
|     static constexpr std::array<AppletSlot, 6> applet_position_slots = { |     static constexpr std::array<AppletSlot, 6> applet_position_slots = { | ||||||
|         AppletSlot::Application,   AppletSlot::LibraryApplet, AppletSlot::SystemApplet, |         AppletSlot::Application,   AppletSlot::LibraryApplet, AppletSlot::SystemApplet, | ||||||
|         AppletSlot::LibraryApplet, AppletSlot::Error,         AppletSlot::LibraryApplet}; |         AppletSlot::LibraryApplet, AppletSlot::Error,         AppletSlot::LibraryApplet}; | ||||||
| 
 | 
 | ||||||
|     u32 applet_pos = GetAppletPos(attributes); |     u32 applet_pos = attributes.applet_pos; | ||||||
|     if (applet_pos >= applet_position_slots.size()) |     if (applet_pos >= applet_position_slots.size()) | ||||||
|         return nullptr; |         return nullptr; | ||||||
| 
 | 
 | ||||||
|  | @ -194,7 +190,7 @@ void Initialize(Service::Interface* self) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     slot_data->applet_id = static_cast<AppletId>(app_id); |     slot_data->applet_id = static_cast<AppletId>(app_id); | ||||||
|     slot_data->attributes = attributes; |     slot_data->attributes.raw = attributes; | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); |     IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
|  | @ -1020,7 +1016,7 @@ void Init() { | ||||||
|         auto& slot_data = applet_slots[slot]; |         auto& slot_data = applet_slots[slot]; | ||||||
|         slot_data.slot = static_cast<AppletSlot>(slot); |         slot_data.slot = static_cast<AppletSlot>(slot); | ||||||
|         slot_data.applet_id = AppletId::None; |         slot_data.applet_id = AppletId::None; | ||||||
|         slot_data.attributes = 0; |         slot_data.attributes.raw = 0; | ||||||
|         slot_data.registered = false; |         slot_data.registered = false; | ||||||
|         slot_data.notification_event = |         slot_data.notification_event = | ||||||
|             Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification"); |             Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification"); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue