summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp18
-rw-r--r--src/core/hle/service/hid/controllers/npad.h5
-rw-r--r--src/core/hle/service/hid/hid.cpp81
-rw-r--r--src/core/hle/service/hid/hid.h3
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
949void Controller_NPad::SetSixAxisFusionParameters(const DeviceHandle& handle, f32 parameter1,
950 f32 parameter2) {
951 sixaxis_fusion_parameter1 = parameter1;
952 sixaxis_fusion_parameter2 = parameter2;
953}
954
955std::pair<f32, f32> Controller_NPad::GetSixAxisFusionParameters(const DeviceHandle& handle) {
956 return {
957 sixaxis_fusion_parameter1,
958 sixaxis_fusion_parameter2,
959 };
960}
961
962void Controller_NPad::ResetSixAxisFusionParameters(const DeviceHandle& handle) {
963 sixaxis_fusion_parameter1 = 0.0f;
964 sixaxis_fusion_parameter2 = 0.0f;
965}
966
949void Controller_NPad::MergeSingleJoyAsDualJoy(u32 npad_id_1, u32 npad_id_2) { 967void 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
537void 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
563void 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
590void 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
537void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { 612void 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);