diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 9 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 3 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 38 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.h | 2 | 
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 a03af8df4..2de4ed348 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -846,6 +846,15 @@ Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) {      }  } +bool Controller_NPad::IsUnintendedHomeButtonInputProtectionEnabled(u32 npad_id) const { +    return unintended_home_button_input_protection[NPadIdToIndex(npad_id)]; +} + +void Controller_NPad::SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, +                                                                    u32 npad_id) { +    unintended_home_button_input_protection[NPadIdToIndex(npad_id)] = is_protection_enabled; +} +  void Controller_NPad::SetVibrationEnabled(bool can_vibrate) {      can_controllers_vibrate = can_vibrate;  } diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index e65277c7b..fd5c5a6eb 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h @@ -146,6 +146,8 @@ public:      bool IsSixAxisSensorAtRest() const;      void SetSixAxisEnabled(bool six_axis_status);      LedPattern GetLedPattern(u32 npad_id); +    bool IsUnintendedHomeButtonInputProtectionEnabled(u32 npad_id) const; +    void SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, u32 npad_id);      void SetVibrationEnabled(bool can_vibrate);      bool IsVibrationEnabled() const;      void ClearAllConnectedControllers(); @@ -387,6 +389,7 @@ private:      std::array<Kernel::EventPair, 10> styleset_changed_events;      Vibration last_processed_vibration{};      std::array<ControllerHolder, 10> connected_controllers{}; +    std::array<bool, 10> unintended_home_button_input_protection{};      GyroscopeZeroDriftMode gyroscope_zero_drift_mode{GyroscopeZeroDriftMode::Standard};      bool can_controllers_vibrate{true};      bool sixaxis_sensors_enabled{true}; diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 001427fd8..71dbaba7f 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) {          {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},          {129, &Hid::GetNpadHandheldActivationMode, "GetNpadHandheldActivationMode"},          {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, -        {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"}, -        {132, nullptr, "EnableUnintendedHomeButtonInputProtection"}, +        {131, &Hid::IsUnintendedHomeButtonInputProtectionEnabled, "IsUnintendedHomeButtonInputProtectionEnabled"}, +        {132, &Hid::EnableUnintendedHomeButtonInputProtection, "EnableUnintendedHomeButtonInputProtection"},          {133, nullptr, "SetNpadJoyAssignmentModeSingleWithDestination"},          {134, nullptr, "SetNpadAnalogStickUseCenterClamp"},          {135, nullptr, "SetNpadCaptureButtonAssignment"}, @@ -809,6 +809,40 @@ void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {      }  } +void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) { +    IPC::RequestParser rp{ctx}; +    const auto npad_id{rp.Pop<u32>()}; +    const auto applet_resource_user_id{rp.Pop<u64>()}; + +    LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, +                applet_resource_user_id); + +    auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); + +    IPC::ResponseBuilder rb{ctx, 3}; +    rb.Push(RESULT_SUCCESS); +    rb.Push<bool>(controller.IsUnintendedHomeButtonInputProtectionEnabled(npad_id)); +} + +void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { +    IPC::RequestParser rp{ctx}; +    const auto unintended_home_button_input_protection{rp.Pop<bool>()}; +    const auto npad_id{rp.Pop<u32>()}; +    const auto applet_resource_user_id{rp.Pop<u64>()}; + +    LOG_WARNING(Service_HID, +                "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={}," +                "applet_resource_user_id={}", +                npad_id, unintended_home_button_input_protection, applet_resource_user_id); + +    auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); +    controller.SetUnintendedHomeButtonInputProtectionEnabled( +        unintended_home_button_input_protection, npad_id); + +    IPC::ResponseBuilder rb{ctx, 2}; +    rb.Push(RESULT_SUCCESS); +} +  void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) {      IPC::RequestParser rp{ctx};      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 1c7d39b67..fd0372b18 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h @@ -123,6 +123,8 @@ private:      void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);      void GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);      void SwapNpadAssignment(Kernel::HLERequestContext& ctx); +    void IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx); +    void EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx);      void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx);      void EndPermitVibrationSession(Kernel::HLERequestContext& ctx);      void SendVibrationValue(Kernel::HLERequestContext& ctx); | 
