summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp8
-rw-r--r--src/core/hle/service/hid/controllers/npad.h10
-rw-r--r--src/core/hle/service/hid/hid.cpp15
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
498void Controller_NPad::SetNpadHandheldActivationMode(NpadHandheldActivationMode activation_mode) {
499 handheld_activation_mode = activation_mode;
500}
501
502Controller_NPad::NpadHandheldActivationMode Controller_NPad::GetNpadHandheldActivationMode() const {
503 return handheld_activation_mode;
504}
505
498void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { 506void 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
735void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { 740void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {