diff options
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 26 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 5 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 57 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.h | 2 |
4 files changed, 88 insertions, 2 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index ef6befbd9..c9909ad5a 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -1074,6 +1074,32 @@ ResultCode Controller_NPad::IsFirmwareUpdateAvailableForSixAxisSensor( | |||
| 1074 | return ResultSuccess; | 1074 | return ResultSuccess; |
| 1075 | } | 1075 | } |
| 1076 | 1076 | ||
| 1077 | ResultCode Controller_NPad::EnableSixAxisSensorUnalteredPassthrough( | ||
| 1078 | const Core::HID::SixAxisSensorHandle& sixaxis_handle, bool is_enabled) { | ||
| 1079 | const auto is_valid = VerifyValidSixAxisSensorHandle(sixaxis_handle); | ||
| 1080 | if (is_valid.IsError()) { | ||
| 1081 | LOG_ERROR(Service_HID, "Invalid handle, error_code={}", is_valid.raw); | ||
| 1082 | return is_valid; | ||
| 1083 | } | ||
| 1084 | |||
| 1085 | auto& sixaxis = GetSixaxisState(sixaxis_handle); | ||
| 1086 | sixaxis.unaltered_passtrough = is_enabled; | ||
| 1087 | return ResultSuccess; | ||
| 1088 | } | ||
| 1089 | |||
| 1090 | ResultCode Controller_NPad::IsSixAxisSensorUnalteredPassthroughEnabled( | ||
| 1091 | const Core::HID::SixAxisSensorHandle& sixaxis_handle, bool& is_enabled) const { | ||
| 1092 | const auto is_valid = VerifyValidSixAxisSensorHandle(sixaxis_handle); | ||
| 1093 | if (is_valid.IsError()) { | ||
| 1094 | LOG_ERROR(Service_HID, "Invalid handle, error_code={}", is_valid.raw); | ||
| 1095 | return is_valid; | ||
| 1096 | } | ||
| 1097 | |||
| 1098 | const auto& sixaxis = GetSixaxisState(sixaxis_handle); | ||
| 1099 | is_enabled = sixaxis.unaltered_passtrough; | ||
| 1100 | return ResultSuccess; | ||
| 1101 | } | ||
| 1102 | |||
| 1077 | ResultCode Controller_NPad::SetSixAxisEnabled(const Core::HID::SixAxisSensorHandle& sixaxis_handle, | 1103 | ResultCode Controller_NPad::SetSixAxisEnabled(const Core::HID::SixAxisSensorHandle& sixaxis_handle, |
| 1078 | bool sixaxis_status) { | 1104 | bool sixaxis_status) { |
| 1079 | const auto is_valid = VerifyValidSixAxisSensorHandle(sixaxis_handle); | 1105 | const auto is_valid = VerifyValidSixAxisSensorHandle(sixaxis_handle); |
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index e6125ffcc..951f46425 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h | |||
| @@ -151,6 +151,10 @@ public: | |||
| 151 | bool& is_at_rest) const; | 151 | bool& is_at_rest) const; |
| 152 | ResultCode IsFirmwareUpdateAvailableForSixAxisSensor( | 152 | ResultCode IsFirmwareUpdateAvailableForSixAxisSensor( |
| 153 | const Core::HID::SixAxisSensorHandle& sixaxis_handle, bool& is_firmware_available) const; | 153 | const Core::HID::SixAxisSensorHandle& sixaxis_handle, bool& is_firmware_available) const; |
| 154 | ResultCode EnableSixAxisSensorUnalteredPassthrough( | ||
| 155 | const Core::HID::SixAxisSensorHandle& sixaxis_handle, bool is_enabled); | ||
| 156 | ResultCode IsSixAxisSensorUnalteredPassthroughEnabled( | ||
| 157 | const Core::HID::SixAxisSensorHandle& sixaxis_handle, bool& is_enabled) const; | ||
| 154 | ResultCode SetSixAxisEnabled(const Core::HID::SixAxisSensorHandle& sixaxis_handle, | 158 | ResultCode SetSixAxisEnabled(const Core::HID::SixAxisSensorHandle& sixaxis_handle, |
| 155 | bool sixaxis_status); | 159 | bool sixaxis_status); |
| 156 | ResultCode IsSixAxisSensorFusionEnabled(const Core::HID::SixAxisSensorHandle& sixaxis_handle, | 160 | ResultCode IsSixAxisSensorFusionEnabled(const Core::HID::SixAxisSensorHandle& sixaxis_handle, |
| @@ -468,6 +472,7 @@ private: | |||
| 468 | 472 | ||
| 469 | struct SixaxisParameters { | 473 | struct SixaxisParameters { |
| 470 | bool is_fusion_enabled{true}; | 474 | bool is_fusion_enabled{true}; |
| 475 | bool unaltered_passtrough{false}; | ||
| 471 | Core::HID::SixAxisSensorFusionParameters fusion{}; | 476 | Core::HID::SixAxisSensorFusionParameters fusion{}; |
| 472 | GyroscopeZeroDriftMode gyroscope_zero_drift_mode{GyroscopeZeroDriftMode::Standard}; | 477 | GyroscopeZeroDriftMode gyroscope_zero_drift_mode{GyroscopeZeroDriftMode::Standard}; |
| 473 | }; | 478 | }; |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 0520a8a38..1fb3b790c 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -257,8 +257,8 @@ Hid::Hid(Core::System& system_) | |||
| 257 | {81, &Hid::ResetGyroscopeZeroDriftMode, "ResetGyroscopeZeroDriftMode"}, | 257 | {81, &Hid::ResetGyroscopeZeroDriftMode, "ResetGyroscopeZeroDriftMode"}, |
| 258 | {82, &Hid::IsSixAxisSensorAtRest, "IsSixAxisSensorAtRest"}, | 258 | {82, &Hid::IsSixAxisSensorAtRest, "IsSixAxisSensorAtRest"}, |
| 259 | {83, &Hid::IsFirmwareUpdateAvailableForSixAxisSensor, "IsFirmwareUpdateAvailableForSixAxisSensor"}, | 259 | {83, &Hid::IsFirmwareUpdateAvailableForSixAxisSensor, "IsFirmwareUpdateAvailableForSixAxisSensor"}, |
| 260 | {84, nullptr, "EnableSixAxisSensorUnalteredPassthrough"}, | 260 | {84, &Hid::EnableSixAxisSensorUnalteredPassthrough, "EnableSixAxisSensorUnalteredPassthrough"}, |
| 261 | {85, nullptr, "IsSixAxisSensorUnalteredPassthroughEnabled"}, | 261 | {85, &Hid::IsSixAxisSensorUnalteredPassthroughEnabled, "IsSixAxisSensorUnalteredPassthroughEnabled"}, |
| 262 | {86, nullptr, "StoreSixAxisSensorCalibrationParameter"}, | 262 | {86, nullptr, "StoreSixAxisSensorCalibrationParameter"}, |
| 263 | {87, nullptr, "LoadSixAxisSensorCalibrationParameter"}, | 263 | {87, nullptr, "LoadSixAxisSensorCalibrationParameter"}, |
| 264 | {88, nullptr, "GetSixAxisSensorIcInformation"}, | 264 | {88, nullptr, "GetSixAxisSensorIcInformation"}, |
| @@ -817,6 +817,59 @@ void Hid::IsFirmwareUpdateAvailableForSixAxisSensor(Kernel::HLERequestContext& c | |||
| 817 | rb.Push(is_firmware_available); | 817 | rb.Push(is_firmware_available); |
| 818 | } | 818 | } |
| 819 | 819 | ||
| 820 | void Hid::EnableSixAxisSensorUnalteredPassthrough(Kernel::HLERequestContext& ctx) { | ||
| 821 | IPC::RequestParser rp{ctx}; | ||
| 822 | struct Parameters { | ||
| 823 | bool enabled; | ||
| 824 | Core::HID::SixAxisSensorHandle sixaxis_handle; | ||
| 825 | u64 applet_resource_user_id; | ||
| 826 | }; | ||
| 827 | static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); | ||
| 828 | |||
| 829 | const auto parameters{rp.PopRaw<Parameters>()}; | ||
| 830 | |||
| 831 | auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); | ||
| 832 | const auto result = controller.EnableSixAxisSensorUnalteredPassthrough( | ||
| 833 | parameters.sixaxis_handle, parameters.enabled); | ||
| 834 | |||
| 835 | LOG_WARNING(Service_HID, | ||
| 836 | "(STUBBED) called, enabled={}, npad_type={}, npad_id={}, device_index={}, " | ||
| 837 | "applet_resource_user_id={}", | ||
| 838 | parameters.enabled, parameters.sixaxis_handle.npad_type, | ||
| 839 | parameters.sixaxis_handle.npad_id, parameters.sixaxis_handle.device_index, | ||
| 840 | parameters.applet_resource_user_id); | ||
| 841 | |||
| 842 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 843 | rb.Push(result); | ||
| 844 | } | ||
| 845 | |||
| 846 | void Hid::IsSixAxisSensorUnalteredPassthroughEnabled(Kernel::HLERequestContext& ctx) { | ||
| 847 | IPC::RequestParser rp{ctx}; | ||
| 848 | struct Parameters { | ||
| 849 | Core::HID::SixAxisSensorHandle sixaxis_handle; | ||
| 850 | INSERT_PADDING_WORDS_NOINIT(1); | ||
| 851 | u64 applet_resource_user_id; | ||
| 852 | }; | ||
| 853 | static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); | ||
| 854 | |||
| 855 | const auto parameters{rp.PopRaw<Parameters>()}; | ||
| 856 | |||
| 857 | bool is_unaltered_sisxaxis_enabled{}; | ||
| 858 | auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); | ||
| 859 | const auto result = controller.IsSixAxisSensorUnalteredPassthroughEnabled( | ||
| 860 | parameters.sixaxis_handle, is_unaltered_sisxaxis_enabled); | ||
| 861 | |||
| 862 | LOG_WARNING( | ||
| 863 | Service_HID, | ||
| 864 | "(STUBBED) called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}", | ||
| 865 | parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id, | ||
| 866 | parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id); | ||
| 867 | |||
| 868 | IPC::ResponseBuilder rb{ctx, 3}; | ||
| 869 | rb.Push(result); | ||
| 870 | rb.Push(is_unaltered_sisxaxis_enabled); | ||
| 871 | } | ||
| 872 | |||
| 820 | void Hid::ActivateGesture(Kernel::HLERequestContext& ctx) { | 873 | void Hid::ActivateGesture(Kernel::HLERequestContext& ctx) { |
| 821 | IPC::RequestParser rp{ctx}; | 874 | IPC::RequestParser rp{ctx}; |
| 822 | struct Parameters { | 875 | struct Parameters { |
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 1be04c22b..b8515a002 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
| @@ -113,6 +113,8 @@ private: | |||
| 113 | void ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); | 113 | void ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); |
| 114 | void IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx); | 114 | void IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx); |
| 115 | void IsFirmwareUpdateAvailableForSixAxisSensor(Kernel::HLERequestContext& ctx); | 115 | void IsFirmwareUpdateAvailableForSixAxisSensor(Kernel::HLERequestContext& ctx); |
| 116 | void EnableSixAxisSensorUnalteredPassthrough(Kernel::HLERequestContext& ctx); | ||
| 117 | void IsSixAxisSensorUnalteredPassthroughEnabled(Kernel::HLERequestContext& ctx); | ||
| 116 | void ActivateGesture(Kernel::HLERequestContext& ctx); | 118 | void ActivateGesture(Kernel::HLERequestContext& ctx); |
| 117 | void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx); | 119 | void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx); |
| 118 | void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx); | 120 | void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx); |