forked from eden-emu/eden
		
	Rebased
This commit is contained in:
		
							parent
							
								
									4ace69de9c
								
							
						
					
					
						commit
						654427d4d0
					
				
					 3 changed files with 19 additions and 11 deletions
				
			
		|  | @ -169,8 +169,10 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { | ||||||
| 
 | 
 | ||||||
| void Controller_NPad::OnInit() { | void Controller_NPad::OnInit() { | ||||||
|     auto& kernel = system.Kernel(); |     auto& kernel = system.Kernel(); | ||||||
|     styleset_changed_event = Kernel::WritableEvent::CreateEventPair( |     for (std::size_t i = 0; i < styleset_changed_events.size(); i++) { | ||||||
|         kernel, Kernel::ResetType::Automatic, "npad:NpadStyleSetChanged"); |         styleset_changed_events[i] = Kernel::WritableEvent::CreateEventPair( | ||||||
|  |             kernel, Kernel::ResetType::Automatic, fmt::format("npad:NpadStyleSetChanged_{}", i)); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (!IsControllerActivated()) { |     if (!IsControllerActivated()) { | ||||||
|         return; |         return; | ||||||
|  | @ -453,7 +455,7 @@ void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) { | ||||||
|             had_controller_update = true; |             had_controller_update = true; | ||||||
|         } |         } | ||||||
|         if (had_controller_update) { |         if (had_controller_update) { | ||||||
|             styleset_changed_event.writable->Signal(); |             styleset_changed_events[i].writable->Signal(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -468,7 +470,6 @@ std::size_t Controller_NPad::GetSupportedNPadIdTypesSize() const { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Controller_NPad::SetHoldType(NpadHoldType joy_hold_type) { | void Controller_NPad::SetHoldType(NpadHoldType joy_hold_type) { | ||||||
|     styleset_changed_event.writable->Signal(); |  | ||||||
|     hold_type = joy_hold_type; |     hold_type = joy_hold_type; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -479,8 +480,11 @@ Controller_NPad::NpadHoldType Controller_NPad::GetHoldType() const { | ||||||
| void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { | void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { | ||||||
|     const std::size_t npad_index = NPadIdToIndex(npad_id); |     const std::size_t npad_index = NPadIdToIndex(npad_id); | ||||||
|     ASSERT(npad_index < shared_memory_entries.size()); |     ASSERT(npad_index < shared_memory_entries.size()); | ||||||
|  |     if (shared_memory_entries[npad_index].pad_assignment != assignment_mode) { | ||||||
|  |         styleset_changed_events[npad_index].writable->Signal(); | ||||||
|         shared_memory_entries[npad_index].pad_assignment = assignment_mode; |         shared_memory_entries[npad_index].pad_assignment = assignment_mode; | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids, | void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids, | ||||||
|                                         const std::vector<Vibration>& vibrations) { |                                         const std::vector<Vibration>& vibrations) { | ||||||
|  | @ -498,11 +502,14 @@ void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids, | ||||||
|     last_processed_vibration = vibrations.back(); |     last_processed_vibration = vibrations.back(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Kernel::SharedPtr<Kernel::ReadableEvent> Controller_NPad::GetStyleSetChangedEvent() const { | Kernel::SharedPtr<Kernel::ReadableEvent> Controller_NPad::GetStyleSetChangedEvent( | ||||||
|  |     u32 npad_id) const { | ||||||
|     // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should
 |     // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should
 | ||||||
|     // be signalled at least once, and signaled after a new controller is connected?
 |     // be signalled at least once, and signaled after a new controller is connected?
 | ||||||
|     styleset_changed_event.writable->Signal(); |     // styleset_changed_event.writable->Signal();
 | ||||||
|     return styleset_changed_event.readable; |     const auto& styleset_event = styleset_changed_events[NPadIdToIndex(npad_id)]; | ||||||
|  |     styleset_event.writable->Signal(); | ||||||
|  |     return styleset_event.readable; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Controller_NPad::Vibration Controller_NPad::GetLastVibration() const { | Controller_NPad::Vibration Controller_NPad::GetLastVibration() const { | ||||||
|  |  | ||||||
|  | @ -109,7 +109,7 @@ public: | ||||||
|     void VibrateController(const std::vector<u32>& controller_ids, |     void VibrateController(const std::vector<u32>& controller_ids, | ||||||
|                            const std::vector<Vibration>& vibrations); |                            const std::vector<Vibration>& vibrations); | ||||||
| 
 | 
 | ||||||
|     Kernel::SharedPtr<Kernel::ReadableEvent> GetStyleSetChangedEvent() const; |     Kernel::SharedPtr<Kernel::ReadableEvent> GetStyleSetChangedEvent(u32 npad_id) const; | ||||||
|     Vibration GetLastVibration() const; |     Vibration GetLastVibration() const; | ||||||
| 
 | 
 | ||||||
|     void AddNewController(NPadControllerType controller); |     void AddNewController(NPadControllerType controller); | ||||||
|  | @ -315,7 +315,8 @@ private: | ||||||
|         sticks; |         sticks; | ||||||
|     std::vector<u32> supported_npad_id_types{}; |     std::vector<u32> supported_npad_id_types{}; | ||||||
|     NpadHoldType hold_type{NpadHoldType::Vertical}; |     NpadHoldType hold_type{NpadHoldType::Vertical}; | ||||||
|     Kernel::EventPair styleset_changed_event; |     // Each controller should have their own styleset changed event
 | ||||||
|  |     std::array<Kernel::EventPair, 10> styleset_changed_events; | ||||||
|     Vibration last_processed_vibration{}; |     Vibration last_processed_vibration{}; | ||||||
|     std::array<ControllerHolder, 10> connected_controllers{}; |     std::array<ControllerHolder, 10> connected_controllers{}; | ||||||
|     bool can_controllers_vibrate{true}; |     bool can_controllers_vibrate{true}; | ||||||
|  |  | ||||||
|  | @ -480,7 +480,7 @@ void Hid::AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::ResponseBuilder rb{ctx, 2, 1}; |     IPC::ResponseBuilder rb{ctx, 2, 1}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
|     rb.PushCopyObjects(applet_resource->GetController<Controller_NPad>(HidController::NPad) |     rb.PushCopyObjects(applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||||||
|                            .GetStyleSetChangedEvent()); |                            .GetStyleSetChangedEvent(npad_id)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Hid::DisconnectNpad(Kernel::HLERequestContext& ctx) { | void Hid::DisconnectNpad(Kernel::HLERequestContext& ctx) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David Marcec
						David Marcec