summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp9
-rw-r--r--src/core/hle/service/hid/controllers/npad.h3
-rw-r--r--src/core/hle/service/hid/hid.cpp38
-rw-r--r--src/core/hle/service/hid/hid.h2
4 files changed, 50 insertions, 2 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index e34ee519e..548517a1f 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -826,6 +826,15 @@ Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) {
826 } 826 }
827} 827}
828 828
829bool Controller_NPad::IsUnintendedHomeButtonInputProtectionEnabled(u32 npad_id) const {
830 return unintended_home_button_input_protection[NPadIdToIndex(npad_id)];
831}
832
833void Controller_NPad::SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled,
834 u32 npad_id) {
835 unintended_home_button_input_protection[NPadIdToIndex(npad_id)] = is_protection_enabled;
836}
837
829void Controller_NPad::SetVibrationEnabled(bool can_vibrate) { 838void Controller_NPad::SetVibrationEnabled(bool can_vibrate) {
830 can_controllers_vibrate = can_vibrate; 839 can_controllers_vibrate = can_vibrate;
831} 840}
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index 0fa7455ba..cd49f49be 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -146,6 +146,8 @@ public:
146 bool IsSixAxisSensorAtRest() const; 146 bool IsSixAxisSensorAtRest() const;
147 void SetSixAxisEnabled(bool six_axis_status); 147 void SetSixAxisEnabled(bool six_axis_status);
148 LedPattern GetLedPattern(u32 npad_id); 148 LedPattern GetLedPattern(u32 npad_id);
149 bool IsUnintendedHomeButtonInputProtectionEnabled(u32 npad_id) const;
150 void SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, u32 npad_id);
149 void SetVibrationEnabled(bool can_vibrate); 151 void SetVibrationEnabled(bool can_vibrate);
150 bool IsVibrationEnabled() const; 152 bool IsVibrationEnabled() const;
151 void ClearAllConnectedControllers(); 153 void ClearAllConnectedControllers();
@@ -387,6 +389,7 @@ private:
387 std::array<Kernel::EventPair, 10> styleset_changed_events; 389 std::array<Kernel::EventPair, 10> styleset_changed_events;
388 Vibration last_processed_vibration{}; 390 Vibration last_processed_vibration{};
389 std::array<ControllerHolder, 10> connected_controllers{}; 391 std::array<ControllerHolder, 10> connected_controllers{};
392 std::array<bool, 10> unintended_home_button_input_protection{};
390 GyroscopeZeroDriftMode gyroscope_zero_drift_mode{GyroscopeZeroDriftMode::Standard}; 393 GyroscopeZeroDriftMode gyroscope_zero_drift_mode{GyroscopeZeroDriftMode::Standard};
391 bool can_controllers_vibrate{true}; 394 bool can_controllers_vibrate{true};
392 bool sixaxis_sensors_enabled{true}; 395 bool sixaxis_sensors_enabled{true};
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 9a7e5e265..eaa7038d9 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -224,8 +224,8 @@ Hid::Hid(Core::System& system) : ServiceFramework("hid"), system(system) {
224 {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, 224 {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},
225 {129, &Hid::GetNpadHandheldActivationMode, "GetNpadHandheldActivationMode"}, 225 {129, &Hid::GetNpadHandheldActivationMode, "GetNpadHandheldActivationMode"},
226 {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, 226 {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"},
227 {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"}, 227 {131, &Hid::IsUnintendedHomeButtonInputProtectionEnabled, "IsUnintendedHomeButtonInputProtectionEnabled"},
228 {132, nullptr, "EnableUnintendedHomeButtonInputProtection"}, 228 {132, &Hid::EnableUnintendedHomeButtonInputProtection, "EnableUnintendedHomeButtonInputProtection"},
229 {133, nullptr, "SetNpadJoyAssignmentModeSingleWithDestination"}, 229 {133, nullptr, "SetNpadJoyAssignmentModeSingleWithDestination"},
230 {134, nullptr, "SetNpadAnalogStickUseCenterClamp"}, 230 {134, nullptr, "SetNpadAnalogStickUseCenterClamp"},
231 {135, nullptr, "SetNpadCaptureButtonAssignment"}, 231 {135, nullptr, "SetNpadCaptureButtonAssignment"},
@@ -796,6 +796,40 @@ void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {
796 } 796 }
797} 797}
798 798
799void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) {
800 IPC::RequestParser rp{ctx};
801 const auto npad_id{rp.Pop<u32>()};
802 const auto applet_resource_user_id{rp.Pop<u64>()};
803
804 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id,
805 applet_resource_user_id);
806
807 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
808
809 IPC::ResponseBuilder rb{ctx, 3};
810 rb.Push(RESULT_SUCCESS);
811 rb.Push<bool>(controller.IsUnintendedHomeButtonInputProtectionEnabled(npad_id));
812}
813
814void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) {
815 IPC::RequestParser rp{ctx};
816 const auto unintended_home_button_input_protection{rp.Pop<bool>()};
817 const auto npad_id{rp.Pop<u32>()};
818 const auto applet_resource_user_id{rp.Pop<u64>()};
819
820 LOG_WARNING(Service_HID,
821 "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={},"
822 "applet_resource_user_id={}",
823 npad_id, unintended_home_button_input_protection, applet_resource_user_id);
824
825 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
826 controller.SetUnintendedHomeButtonInputProtectionEnabled(
827 unintended_home_button_input_protection, npad_id);
828
829 IPC::ResponseBuilder rb{ctx, 2};
830 rb.Push(RESULT_SUCCESS);
831}
832
799void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { 833void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) {
800 IPC::RequestParser rp{ctx}; 834 IPC::RequestParser rp{ctx};
801 const auto applet_resource_user_id{rp.Pop<u64>()}; 835 const auto applet_resource_user_id{rp.Pop<u64>()};
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h
index 3cfd72a51..820e101c7 100644
--- a/src/core/hle/service/hid/hid.h
+++ b/src/core/hle/service/hid/hid.h
@@ -122,6 +122,8 @@ private:
122 void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); 122 void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);
123 void GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); 123 void GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);
124 void SwapNpadAssignment(Kernel::HLERequestContext& ctx); 124 void SwapNpadAssignment(Kernel::HLERequestContext& ctx);
125 void IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx);
126 void EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx);
125 void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); 127 void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx);
126 void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); 128 void EndPermitVibrationSession(Kernel::HLERequestContext& ctx);
127 void SendVibrationValue(Kernel::HLERequestContext& ctx); 129 void SendVibrationValue(Kernel::HLERequestContext& ctx);