forked from eden-emu/eden
		
	Merge pull request #2859 from Morph1984/hid
hid: Stub SetNpadJoyAssignmentModeSingle and GetNpadHandheldActivationMode
This commit is contained in:
		
						commit
						692023754d
					
				
					 2 changed files with 126 additions and 92 deletions
				
			
		|  | @ -203,13 +203,13 @@ Hid::Hid(Core::System& system) : ServiceFramework("hid"), system(system) { | |||
|         {120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, | ||||
|         {121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, | ||||
|         {122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, "SetNpadJoyAssignmentModeSingleByDefault"}, | ||||
|         {123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"}, | ||||
|         {123, &Hid::SetNpadJoyAssignmentModeSingle, "SetNpadJoyAssignmentModeSingle"}, | ||||
|         {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"}, | ||||
|         {125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"}, | ||||
|         {126, &Hid::StartLrAssignmentMode, "StartLrAssignmentMode"}, | ||||
|         {127, &Hid::StopLrAssignmentMode, "StopLrAssignmentMode"}, | ||||
|         {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, | ||||
|         {129, nullptr, "GetNpadHandheldActivationMode"}, | ||||
|         {129, &Hid::GetNpadHandheldActivationMode, "GetNpadHandheldActivationMode"}, | ||||
|         {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, | ||||
|         {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"}, | ||||
|         {132, nullptr, "EnableUnintendedHomeButtonInputProtection"}, | ||||
|  | @ -557,10 +557,126 @@ void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx | |||
|     LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, | ||||
|                 applet_resource_user_id); | ||||
| 
 | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) { | ||||
|     // TODO: Check the differences between this and SetNpadJoyAssignmentModeSingleByDefault
 | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto npad_id{rp.Pop<u32>()}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
|     const auto npad_joy_device_type{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_WARNING(Service_HID, | ||||
|                 "(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}", | ||||
|                 npad_id, applet_resource_user_id, npad_joy_device_type); | ||||
| 
 | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto npad_id{rp.Pop<u32>()}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, | ||||
|               applet_resource_user_id); | ||||
| 
 | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto unknown_1{rp.Pop<u32>()}; | ||||
|     const auto unknown_2{rp.Pop<u32>()}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_WARNING(Service_HID, | ||||
|                 "(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}", | ||||
|                 unknown_1, unknown_2, applet_resource_user_id); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.StartLRAssignmentMode(); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.StopLRAssignmentMode(); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
|     const auto mode{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | ||||
|                 applet_resource_user_id, mode); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", | ||||
|                 applet_resource_user_id); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto npad_1{rp.Pop<u32>()}; | ||||
|     const auto npad_2{rp.Pop<u32>()}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}", | ||||
|               applet_resource_user_id, npad_1, npad_2); | ||||
| 
 | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     if (controller.SwapNpadAssignment(npad_1, npad_2)) { | ||||
|         rb.Push(RESULT_SUCCESS); | ||||
|     } else { | ||||
|         LOG_ERROR(Service_HID, "Npads are not connected!"); | ||||
|         rb.Push(ERR_NPAD_NOT_CONNECTED); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
|  | @ -635,47 +751,6 @@ void Hid::GetActualVibrationValue(Kernel::HLERequestContext& ctx) { | |||
|         applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration()); | ||||
| } | ||||
| 
 | ||||
| void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto npad_id{rp.Pop<u32>()}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, | ||||
|               applet_resource_user_id); | ||||
| 
 | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto unknown_1{rp.Pop<u32>()}; | ||||
|     const auto unknown_2{rp.Pop<u32>()}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_WARNING(Service_HID, | ||||
|                 "(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}", | ||||
|                 unknown_1, unknown_2, applet_resource_user_id); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
|     const auto mode{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | ||||
|                 applet_resource_user_id, mode); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_DEBUG(Service_HID, "called"); | ||||
| 
 | ||||
|  | @ -769,49 +844,6 @@ void Hid::SetPalmaBoostMode(Kernel::HLERequestContext& ctx) { | |||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.StartLRAssignmentMode(); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     controller.StopLRAssignmentMode(); | ||||
| 
 | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
| 
 | ||||
| void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto npad_1{rp.Pop<u32>()}; | ||||
|     const auto npad_2{rp.Pop<u32>()}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
| 
 | ||||
|     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}", | ||||
|               applet_resource_user_id, npad_1, npad_2); | ||||
| 
 | ||||
|     auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     if (controller.SwapNpadAssignment(npad_1, npad_2)) { | ||||
|         rb.Push(RESULT_SUCCESS); | ||||
|     } else { | ||||
|         LOG_ERROR(Service_HID, "Npads are not connected!"); | ||||
|         rb.Push(ERR_NPAD_NOT_CONNECTED); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| class HidDbg final : public ServiceFramework<HidDbg> { | ||||
| public: | ||||
|     explicit HidDbg() : ServiceFramework{"hid:dbg"} { | ||||
|  |  | |||
|  | @ -106,14 +106,19 @@ private: | |||
|     void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | ||||
|     void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | ||||
|     void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx); | ||||
|     void SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx); | ||||
|     void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx); | ||||
|     void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx); | ||||
|     void StartLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||||
|     void StopLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||||
|     void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||||
|     void GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||||
|     void SwapNpadAssignment(Kernel::HLERequestContext& ctx); | ||||
|     void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); | ||||
|     void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); | ||||
|     void SendVibrationValue(Kernel::HLERequestContext& ctx); | ||||
|     void SendVibrationValues(Kernel::HLERequestContext& ctx); | ||||
|     void GetActualVibrationValue(Kernel::HLERequestContext& ctx); | ||||
|     void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx); | ||||
|     void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx); | ||||
|     void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||||
|     void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx); | ||||
|     void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); | ||||
|     void PermitVibration(Kernel::HLERequestContext& ctx); | ||||
|  | @ -123,9 +128,6 @@ private: | |||
|     void StopSixAxisSensor(Kernel::HLERequestContext& ctx); | ||||
|     void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx); | ||||
|     void SetPalmaBoostMode(Kernel::HLERequestContext& ctx); | ||||
|     void StartLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||||
|     void StopLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||||
|     void SwapNpadAssignment(Kernel::HLERequestContext& ctx); | ||||
| 
 | ||||
|     std::shared_ptr<IAppletResource> applet_resource; | ||||
|     Core::System& system; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David
						David