diff options
| -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 b65d59373..620386cd1 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -593,6 +593,14 @@ Controller_NPad::NpadHoldType Controller_NPad::GetHoldType() const { | |||
| 593 | return hold_type; | 593 | return hold_type; |
| 594 | } | 594 | } |
| 595 | 595 | ||
| 596 | void Controller_NPad::SetNpadHandheldActivationMode(NpadHandheldActivationMode activation_mode) { | ||
| 597 | handheld_activation_mode = activation_mode; | ||
| 598 | } | ||
| 599 | |||
| 600 | Controller_NPad::NpadHandheldActivationMode Controller_NPad::GetNpadHandheldActivationMode() const { | ||
| 601 | return handheld_activation_mode; | ||
| 602 | } | ||
| 603 | |||
| 596 | void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { | 604 | void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { |
| 597 | const std::size_t npad_index = NPadIdToIndex(npad_id); | 605 | const std::size_t npad_index = NPadIdToIndex(npad_id); |
| 598 | ASSERT(npad_index < shared_memory_entries.size()); | 606 | 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 78e7c320b..654d97c3f 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, |
| @@ -369,6 +378,7 @@ private: | |||
| 369 | MotionArray motions; | 378 | MotionArray motions; |
| 370 | std::vector<u32> supported_npad_id_types{}; | 379 | std::vector<u32> supported_npad_id_types{}; |
| 371 | NpadHoldType hold_type{NpadHoldType::Vertical}; | 380 | NpadHoldType hold_type{NpadHoldType::Vertical}; |
| 381 | NpadHandheldActivationMode handheld_activation_mode{NpadHandheldActivationMode::Dual}; | ||
| 372 | // Each controller should have their own styleset changed event | 382 | // Each controller should have their own styleset changed event |
| 373 | std::array<Kernel::EventPair, 10> styleset_changed_events; | 383 | std::array<Kernel::EventPair, 10> styleset_changed_events; |
| 374 | Vibration last_processed_vibration{}; | 384 | Vibration last_processed_vibration{}; |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 1d96f705f..395e83b3f 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -739,8 +739,11 @@ void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | |||
| 739 | const auto applet_resource_user_id{rp.Pop<u64>()}; | 739 | const auto applet_resource_user_id{rp.Pop<u64>()}; |
| 740 | const auto mode{rp.Pop<u64>()}; | 740 | const auto mode{rp.Pop<u64>()}; |
| 741 | 741 | ||
| 742 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | 742 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, mode={}", applet_resource_user_id, |
| 743 | applet_resource_user_id, mode); | 743 | mode); |
| 744 | |||
| 745 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||
| 746 | .SetNpadHandheldActivationMode(Controller_NPad::NpadHandheldActivationMode{mode}); | ||
| 744 | 747 | ||
| 745 | IPC::ResponseBuilder rb{ctx, 2}; | 748 | IPC::ResponseBuilder rb{ctx, 2}; |
| 746 | rb.Push(RESULT_SUCCESS); | 749 | rb.Push(RESULT_SUCCESS); |
| @@ -750,11 +753,13 @@ void Hid::GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | |||
| 750 | IPC::RequestParser rp{ctx}; | 753 | IPC::RequestParser rp{ctx}; |
| 751 | const auto applet_resource_user_id{rp.Pop<u64>()}; | 754 | const auto applet_resource_user_id{rp.Pop<u64>()}; |
| 752 | 755 | ||
| 753 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", | 756 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); |
| 754 | applet_resource_user_id); | ||
| 755 | 757 | ||
| 756 | IPC::ResponseBuilder rb{ctx, 2}; | 758 | IPC::ResponseBuilder rb{ctx, 4}; |
| 757 | rb.Push(RESULT_SUCCESS); | 759 | rb.Push(RESULT_SUCCESS); |
| 760 | rb.Push<u64>( | ||
| 761 | static_cast<u64>(applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||
| 762 | .GetNpadHandheldActivationMode())); | ||
| 758 | } | 763 | } |
| 759 | 764 | ||
| 760 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | 765 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { |