diff options
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 18 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 5 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 81 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.h | 3 |
4 files changed, 104 insertions, 3 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index ff783b3cc..265c986e2 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -946,6 +946,24 @@ void Controller_NPad::SetSixAxisEnabled(bool six_axis_status) { | |||
| 946 | sixaxis_sensors_enabled = six_axis_status; | 946 | sixaxis_sensors_enabled = six_axis_status; |
| 947 | } | 947 | } |
| 948 | 948 | ||
| 949 | void Controller_NPad::SetSixAxisFusionParameters(const DeviceHandle& handle, f32 parameter1, | ||
| 950 | f32 parameter2) { | ||
| 951 | sixaxis_fusion_parameter1 = parameter1; | ||
| 952 | sixaxis_fusion_parameter2 = parameter2; | ||
| 953 | } | ||
| 954 | |||
| 955 | std::pair<f32, f32> Controller_NPad::GetSixAxisFusionParameters(const DeviceHandle& handle) { | ||
| 956 | return { | ||
| 957 | sixaxis_fusion_parameter1, | ||
| 958 | sixaxis_fusion_parameter2, | ||
| 959 | }; | ||
| 960 | } | ||
| 961 | |||
| 962 | void Controller_NPad::ResetSixAxisFusionParameters(const DeviceHandle& handle) { | ||
| 963 | sixaxis_fusion_parameter1 = 0.0f; | ||
| 964 | sixaxis_fusion_parameter2 = 0.0f; | ||
| 965 | } | ||
| 966 | |||
| 949 | void Controller_NPad::MergeSingleJoyAsDualJoy(u32 npad_id_1, u32 npad_id_2) { | 967 | void Controller_NPad::MergeSingleJoyAsDualJoy(u32 npad_id_1, u32 npad_id_2) { |
| 950 | const auto npad_index_1 = NPadIdToIndex(npad_id_1); | 968 | const auto npad_index_1 = NPadIdToIndex(npad_id_1); |
| 951 | const auto npad_index_2 = NPadIdToIndex(npad_id_2); | 969 | const auto npad_index_2 = NPadIdToIndex(npad_id_2); |
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index bc85ca4df..bfd06372a 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h | |||
| @@ -202,6 +202,9 @@ public: | |||
| 202 | GyroscopeZeroDriftMode GetGyroscopeZeroDriftMode() const; | 202 | GyroscopeZeroDriftMode GetGyroscopeZeroDriftMode() const; |
| 203 | bool IsSixAxisSensorAtRest() const; | 203 | bool IsSixAxisSensorAtRest() const; |
| 204 | void SetSixAxisEnabled(bool six_axis_status); | 204 | void SetSixAxisEnabled(bool six_axis_status); |
| 205 | void SetSixAxisFusionParameters(const DeviceHandle& handle, f32 parameter1, f32 parameter2); | ||
| 206 | std::pair<f32, f32> GetSixAxisFusionParameters(const DeviceHandle& handle); | ||
| 207 | void ResetSixAxisFusionParameters(const DeviceHandle& handle); | ||
| 205 | LedPattern GetLedPattern(u32 npad_id); | 208 | LedPattern GetLedPattern(u32 npad_id); |
| 206 | bool IsUnintendedHomeButtonInputProtectionEnabled(u32 npad_id) const; | 209 | bool IsUnintendedHomeButtonInputProtectionEnabled(u32 npad_id) const; |
| 207 | void SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, u32 npad_id); | 210 | void SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, u32 npad_id); |
| @@ -458,6 +461,8 @@ private: | |||
| 458 | std::array<bool, 10> unintended_home_button_input_protection{}; | 461 | std::array<bool, 10> unintended_home_button_input_protection{}; |
| 459 | GyroscopeZeroDriftMode gyroscope_zero_drift_mode{GyroscopeZeroDriftMode::Standard}; | 462 | GyroscopeZeroDriftMode gyroscope_zero_drift_mode{GyroscopeZeroDriftMode::Standard}; |
| 460 | bool sixaxis_sensors_enabled{true}; | 463 | bool sixaxis_sensors_enabled{true}; |
| 464 | f32 sixaxis_fusion_parameter1{}; | ||
| 465 | f32 sixaxis_fusion_parameter2{}; | ||
| 461 | bool sixaxis_at_rest{true}; | 466 | bool sixaxis_at_rest{true}; |
| 462 | std::array<ControllerPad, 10> npad_pad_states{}; | 467 | std::array<ControllerPad, 10> npad_pad_states{}; |
| 463 | bool is_in_lr_assignment_mode{false}; | 468 | bool is_in_lr_assignment_mode{false}; |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 2b13d6fe6..7fd3161e8 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -209,9 +209,9 @@ Hid::Hid(Core::System& system_) : ServiceFramework{system_, "hid"} { | |||
| 209 | {67, &Hid::StopSixAxisSensor, "StopSixAxisSensor"}, | 209 | {67, &Hid::StopSixAxisSensor, "StopSixAxisSensor"}, |
| 210 | {68, nullptr, "IsSixAxisSensorFusionEnabled"}, | 210 | {68, nullptr, "IsSixAxisSensorFusionEnabled"}, |
| 211 | {69, &Hid::EnableSixAxisSensorFusion, "EnableSixAxisSensorFusion"}, | 211 | {69, &Hid::EnableSixAxisSensorFusion, "EnableSixAxisSensorFusion"}, |
| 212 | {70, nullptr, "SetSixAxisSensorFusionParameters"}, | 212 | {70, &Hid::SetSixAxisSensorFusionParameters, "SetSixAxisSensorFusionParameters"}, |
| 213 | {71, nullptr, "GetSixAxisSensorFusionParameters"}, | 213 | {71, &Hid::GetSixAxisSensorFusionParameters, "GetSixAxisSensorFusionParameters"}, |
| 214 | {72, nullptr, "ResetSixAxisSensorFusionParameters"}, | 214 | {72, &Hid::ResetSixAxisSensorFusionParameters, "ResetSixAxisSensorFusionParameters"}, |
| 215 | {73, nullptr, "SetAccelerometerParameters"}, | 215 | {73, nullptr, "SetAccelerometerParameters"}, |
| 216 | {74, nullptr, "GetAccelerometerParameters"}, | 216 | {74, nullptr, "GetAccelerometerParameters"}, |
| 217 | {75, nullptr, "ResetAccelerometerParameters"}, | 217 | {75, nullptr, "ResetAccelerometerParameters"}, |
| @@ -534,6 +534,81 @@ void Hid::EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx) { | |||
| 534 | rb.Push(RESULT_SUCCESS); | 534 | rb.Push(RESULT_SUCCESS); |
| 535 | } | 535 | } |
| 536 | 536 | ||
| 537 | void Hid::SetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx) { | ||
| 538 | IPC::RequestParser rp{ctx}; | ||
| 539 | struct Parameters { | ||
| 540 | Controller_NPad::DeviceHandle sixaxis_handle; | ||
| 541 | f32 parameter1; | ||
| 542 | f32 parameter2; | ||
| 543 | u64 applet_resource_user_id; | ||
| 544 | }; | ||
| 545 | |||
| 546 | const auto parameters{rp.PopRaw<Parameters>()}; | ||
| 547 | |||
| 548 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||
| 549 | .SetSixAxisFusionParameters(parameters.sixaxis_handle, parameters.parameter1, | ||
| 550 | parameters.parameter2); | ||
| 551 | |||
| 552 | LOG_WARNING(Service_HID, | ||
| 553 | "(STUBBED) called, float1={}, float2={}, npad_type={}, npad_id={}, " | ||
| 554 | "device_index={}, applet_resource_user_id={}", | ||
| 555 | parameters.parameter1, parameters.parameter2, parameters.sixaxis_handle.npad_type, | ||
| 556 | parameters.sixaxis_handle.npad_id, parameters.sixaxis_handle.device_index, | ||
| 557 | parameters.applet_resource_user_id); | ||
| 558 | |||
| 559 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 560 | rb.Push(RESULT_SUCCESS); | ||
| 561 | } | ||
| 562 | |||
| 563 | void Hid::GetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx) { | ||
| 564 | IPC::RequestParser rp{ctx}; | ||
| 565 | struct Parameters { | ||
| 566 | Controller_NPad::DeviceHandle sixaxis_handle; | ||
| 567 | u64 applet_resource_user_id; | ||
| 568 | }; | ||
| 569 | |||
| 570 | f32 parameter1 = 0; | ||
| 571 | f32 parameter2 = 0; | ||
| 572 | const auto parameters{rp.PopRaw<Parameters>()}; | ||
| 573 | |||
| 574 | std::tie(parameter1, parameter2) = | ||
| 575 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||
| 576 | .GetSixAxisFusionParameters(parameters.sixaxis_handle); | ||
| 577 | |||
| 578 | LOG_WARNING(Service_HID, | ||
| 579 | "(STUBBED) called, npad_type={}, npad_id={}, " | ||
| 580 | "device_index={}, applet_resource_user_id={}", | ||
| 581 | parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id, | ||
| 582 | parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id); | ||
| 583 | |||
| 584 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 585 | rb.Push(RESULT_SUCCESS); | ||
| 586 | rb.Push(parameter1); | ||
| 587 | rb.Push(parameter2); | ||
| 588 | } | ||
| 589 | |||
| 590 | void Hid::ResetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx) { | ||
| 591 | IPC::RequestParser rp{ctx}; | ||
| 592 | struct Parameters { | ||
| 593 | Controller_NPad::DeviceHandle sixaxis_handle; | ||
| 594 | u64 applet_resource_user_id; | ||
| 595 | }; | ||
| 596 | |||
| 597 | const auto parameters{rp.PopRaw<Parameters>()}; | ||
| 598 | |||
| 599 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||
| 600 | .ResetSixAxisFusionParameters(parameters.sixaxis_handle); | ||
| 601 | |||
| 602 | LOG_WARNING(Service_HID, | ||
| 603 | "(STUBBED) called, npad_type={}, npad_id={}, " | ||
| 604 | "device_index={}, applet_resource_user_id={}", | ||
| 605 | parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id, | ||
| 606 | parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id); | ||
| 607 | |||
| 608 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 609 | rb.Push(RESULT_SUCCESS); | ||
| 610 | } | ||
| 611 | |||
| 537 | void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { | 612 | void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { |
| 538 | IPC::RequestParser rp{ctx}; | 613 | IPC::RequestParser rp{ctx}; |
| 539 | const auto sixaxis_handle{rp.PopRaw<Controller_NPad::DeviceHandle>()}; | 614 | const auto sixaxis_handle{rp.PopRaw<Controller_NPad::DeviceHandle>()}; |
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index b87bfdde1..d991bd721 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
| @@ -97,6 +97,9 @@ private: | |||
| 97 | void StartSixAxisSensor(Kernel::HLERequestContext& ctx); | 97 | void StartSixAxisSensor(Kernel::HLERequestContext& ctx); |
| 98 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx); | 98 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx); |
| 99 | void EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx); | 99 | void EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx); |
| 100 | void SetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx); | ||
| 101 | void GetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx); | ||
| 102 | void ResetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx); | ||
| 100 | void SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); | 103 | void SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); |
| 101 | void GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); | 104 | void GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); |
| 102 | void ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); | 105 | void ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); |