diff options
| author | 2020-09-18 10:10:30 -0400 | |
|---|---|---|
| committer | 2020-09-18 10:10:30 -0400 | |
| commit | ab961e07014cb308cc983fa869696bf5cb9a0c7d (patch) | |
| tree | 3ff650bd2d018c916ca331cc7cd27f941e6e4b0d | |
| parent | Merge pull request #4323 from ReinUsesLisp/no-spin (diff) | |
| download | yuzu-ab961e07014cb308cc983fa869696bf5cb9a0c7d.tar.gz yuzu-ab961e07014cb308cc983fa869696bf5cb9a0c7d.tar.xz yuzu-ab961e07014cb308cc983fa869696bf5cb9a0c7d.zip | |
hid: Implement Get/SetNpadHandheldActivationMode
- Used in Clubhouse Games: 51 Worldwide Classics
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 10 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 15 |
3 files changed, 28 insertions, 5 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 7818c098f..59f528dfb 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -495,6 +495,14 @@ Controller_NPad::NpadHoldType Controller_NPad::GetHoldType() const { | |||
| 495 | return hold_type; | 495 | return hold_type; |
| 496 | } | 496 | } |
| 497 | 497 | ||
| 498 | void Controller_NPad::SetNpadHandheldActivationMode(NpadHandheldActivationMode activation_mode) { | ||
| 499 | handheld_activation_mode = activation_mode; | ||
| 500 | } | ||
| 501 | |||
| 502 | Controller_NPad::NpadHandheldActivationMode Controller_NPad::GetNpadHandheldActivationMode() const { | ||
| 503 | return handheld_activation_mode; | ||
| 504 | } | ||
| 505 | |||
| 498 | void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { | 506 | void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { |
| 499 | const std::size_t npad_index = NPadIdToIndex(npad_id); | 507 | const std::size_t npad_index = NPadIdToIndex(npad_id); |
| 500 | ASSERT(npad_index < shared_memory_entries.size()); | 508 | ASSERT(npad_index < shared_memory_entries.size()); |
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index e9788da8d..54e950e1b 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h | |||
| @@ -74,6 +74,12 @@ public: | |||
| 74 | Single = 1, | 74 | Single = 1, |
| 75 | }; | 75 | }; |
| 76 | 76 | ||
| 77 | enum class NpadHandheldActivationMode : u64 { | ||
| 78 | Dual = 0, | ||
| 79 | Single = 1, | ||
| 80 | None = 2, | ||
| 81 | }; | ||
| 82 | |||
| 77 | enum class NPadControllerType { | 83 | enum class NPadControllerType { |
| 78 | None, | 84 | None, |
| 79 | ProController, | 85 | ProController, |
| @@ -110,6 +116,9 @@ public: | |||
| 110 | void SetHoldType(NpadHoldType joy_hold_type); | 116 | void SetHoldType(NpadHoldType joy_hold_type); |
| 111 | NpadHoldType GetHoldType() const; | 117 | NpadHoldType GetHoldType() const; |
| 112 | 118 | ||
| 119 | void SetNpadHandheldActivationMode(NpadHandheldActivationMode activation_mode); | ||
| 120 | NpadHandheldActivationMode GetNpadHandheldActivationMode() const; | ||
| 121 | |||
| 113 | void SetNpadMode(u32 npad_id, NPadAssignments assignment_mode); | 122 | void SetNpadMode(u32 npad_id, NPadAssignments assignment_mode); |
| 114 | 123 | ||
| 115 | void VibrateController(const std::vector<u32>& controller_ids, | 124 | void VibrateController(const std::vector<u32>& controller_ids, |
| @@ -335,6 +344,7 @@ private: | |||
| 335 | sticks; | 344 | sticks; |
| 336 | std::vector<u32> supported_npad_id_types{}; | 345 | std::vector<u32> supported_npad_id_types{}; |
| 337 | NpadHoldType hold_type{NpadHoldType::Vertical}; | 346 | NpadHoldType hold_type{NpadHoldType::Vertical}; |
| 347 | NpadHandheldActivationMode handheld_activation_mode{NpadHandheldActivationMode::Dual}; | ||
| 338 | // Each controller should have their own styleset changed event | 348 | // Each controller should have their own styleset changed event |
| 339 | std::array<Kernel::EventPair, 10> styleset_changed_events; | 349 | std::array<Kernel::EventPair, 10> styleset_changed_events; |
| 340 | Vibration last_processed_vibration{}; | 350 | Vibration last_processed_vibration{}; |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index bd3c2f26b..d300ce25d 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -714,8 +714,11 @@ void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | |||
| 714 | const auto applet_resource_user_id{rp.Pop<u64>()}; | 714 | const auto applet_resource_user_id{rp.Pop<u64>()}; |
| 715 | const auto mode{rp.Pop<u64>()}; | 715 | const auto mode{rp.Pop<u64>()}; |
| 716 | 716 | ||
| 717 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | 717 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, mode={}", applet_resource_user_id, |
| 718 | applet_resource_user_id, mode); | 718 | mode); |
| 719 | |||
| 720 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||
| 721 | .SetNpadHandheldActivationMode(Controller_NPad::NpadHandheldActivationMode{mode}); | ||
| 719 | 722 | ||
| 720 | IPC::ResponseBuilder rb{ctx, 2}; | 723 | IPC::ResponseBuilder rb{ctx, 2}; |
| 721 | rb.Push(RESULT_SUCCESS); | 724 | rb.Push(RESULT_SUCCESS); |
| @@ -725,11 +728,13 @@ void Hid::GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | |||
| 725 | IPC::RequestParser rp{ctx}; | 728 | IPC::RequestParser rp{ctx}; |
| 726 | const auto applet_resource_user_id{rp.Pop<u64>()}; | 729 | const auto applet_resource_user_id{rp.Pop<u64>()}; |
| 727 | 730 | ||
| 728 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", | 731 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); |
| 729 | applet_resource_user_id); | ||
| 730 | 732 | ||
| 731 | IPC::ResponseBuilder rb{ctx, 2}; | 733 | IPC::ResponseBuilder rb{ctx, 4}; |
| 732 | rb.Push(RESULT_SUCCESS); | 734 | rb.Push(RESULT_SUCCESS); |
| 735 | rb.Push<u64>( | ||
| 736 | static_cast<u64>(applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||
| 737 | .GetNpadHandheldActivationMode())); | ||
| 733 | } | 738 | } |
| 734 | 739 | ||
| 735 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | 740 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { |