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"}, |         {120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, | ||||||
|         {121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, |         {121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, | ||||||
|         {122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, "SetNpadJoyAssignmentModeSingleByDefault"}, |         {122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, "SetNpadJoyAssignmentModeSingleByDefault"}, | ||||||
|         {123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"}, |         {123, &Hid::SetNpadJoyAssignmentModeSingle, "SetNpadJoyAssignmentModeSingle"}, | ||||||
|         {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"}, |         {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"}, | ||||||
|         {125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"}, |         {125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"}, | ||||||
|         {126, &Hid::StartLrAssignmentMode, "StartLrAssignmentMode"}, |         {126, &Hid::StartLrAssignmentMode, "StartLrAssignmentMode"}, | ||||||
|         {127, &Hid::StopLrAssignmentMode, "StopLrAssignmentMode"}, |         {127, &Hid::StopLrAssignmentMode, "StopLrAssignmentMode"}, | ||||||
|         {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, |         {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, | ||||||
|         {129, nullptr, "GetNpadHandheldActivationMode"}, |         {129, &Hid::GetNpadHandheldActivationMode, "GetNpadHandheldActivationMode"}, | ||||||
|         {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, |         {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, | ||||||
|         {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"}, |         {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"}, | ||||||
|         {132, nullptr, "EnableUnintendedHomeButtonInputProtection"}, |         {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, |     LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, | ||||||
|                 applet_resource_user_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}; |     IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     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) { | void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp{ctx}; |     IPC::RequestParser rp{ctx}; | ||||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; |     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()); |         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) { | void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_DEBUG(Service_HID, "called"); |     LOG_DEBUG(Service_HID, "called"); | ||||||
| 
 | 
 | ||||||
|  | @ -769,49 +844,6 @@ void Hid::SetPalmaBoostMode(Kernel::HLERequestContext& ctx) { | ||||||
|     rb.Push(RESULT_SUCCESS); |     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> { | class HidDbg final : public ServiceFramework<HidDbg> { | ||||||
| public: | public: | ||||||
|     explicit HidDbg() : ServiceFramework{"hid:dbg"} { |     explicit HidDbg() : ServiceFramework{"hid:dbg"} { | ||||||
|  |  | ||||||
|  | @ -106,14 +106,19 @@ private: | ||||||
|     void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); |     void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | ||||||
|     void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); |     void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | ||||||
|     void SetNpadJoyAssignmentModeSingleByDefault(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 BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); | ||||||
|     void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); |     void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); | ||||||
|     void SendVibrationValue(Kernel::HLERequestContext& ctx); |     void SendVibrationValue(Kernel::HLERequestContext& ctx); | ||||||
|     void SendVibrationValues(Kernel::HLERequestContext& ctx); |     void SendVibrationValues(Kernel::HLERequestContext& ctx); | ||||||
|     void GetActualVibrationValue(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 GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx); | ||||||
|     void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); |     void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); | ||||||
|     void PermitVibration(Kernel::HLERequestContext& ctx); |     void PermitVibration(Kernel::HLERequestContext& ctx); | ||||||
|  | @ -123,9 +128,6 @@ private: | ||||||
|     void StopSixAxisSensor(Kernel::HLERequestContext& ctx); |     void StopSixAxisSensor(Kernel::HLERequestContext& ctx); | ||||||
|     void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx); |     void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx); | ||||||
|     void SetPalmaBoostMode(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; |     std::shared_ptr<IAppletResource> applet_resource; | ||||||
|     Core::System& system; |     Core::System& system; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David
						David