diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 50 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 13 | ||||
| -rw-r--r-- | src/core/hle/service/hid/errors.h | 1 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 58 |
4 files changed, 68 insertions, 54 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index de06e1735..147021fbd 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -672,6 +672,12 @@ std::size_t Controller_NPad::GetSupportedNpadIdTypesSize() const { | |||
| 672 | } | 672 | } |
| 673 | 673 | ||
| 674 | void Controller_NPad::SetHoldType(NpadJoyHoldType joy_hold_type) { | 674 | void Controller_NPad::SetHoldType(NpadJoyHoldType joy_hold_type) { |
| 675 | if (joy_hold_type != NpadJoyHoldType::Horizontal && | ||
| 676 | joy_hold_type != NpadJoyHoldType::Vertical) { | ||
| 677 | LOG_ERROR(Service_HID, "Npad joy hold type needs to be valid, joy_hold_type={}", | ||
| 678 | joy_hold_type); | ||
| 679 | return; | ||
| 680 | } | ||
| 675 | hold_type = joy_hold_type; | 681 | hold_type = joy_hold_type; |
| 676 | } | 682 | } |
| 677 | 683 | ||
| @@ -957,10 +963,10 @@ void Controller_NPad::UpdateControllerAt(Core::HID::NpadStyleIndex type, | |||
| 957 | InitNewlyAddedController(npad_id); | 963 | InitNewlyAddedController(npad_id); |
| 958 | } | 964 | } |
| 959 | 965 | ||
| 960 | void Controller_NPad::DisconnectNpad(Core::HID::NpadIdType npad_id) { | 966 | ResultCode Controller_NPad::DisconnectNpad(Core::HID::NpadIdType npad_id) { |
| 961 | if (!IsNpadIdValid(npad_id)) { | 967 | if (!IsNpadIdValid(npad_id)) { |
| 962 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); | 968 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); |
| 963 | return; | 969 | return InvalidNpadId; |
| 964 | } | 970 | } |
| 965 | 971 | ||
| 966 | LOG_DEBUG(Service_HID, "Npad disconnected {}", npad_id); | 972 | LOG_DEBUG(Service_HID, "Npad disconnected {}", npad_id); |
| @@ -997,6 +1003,7 @@ void Controller_NPad::DisconnectNpad(Core::HID::NpadIdType npad_id) { | |||
| 997 | controller.device->Disconnect(); | 1003 | controller.device->Disconnect(); |
| 998 | SignalStyleSetChangedEvent(npad_id); | 1004 | SignalStyleSetChangedEvent(npad_id); |
| 999 | WriteEmptyEntry(shared_memory); | 1005 | WriteEmptyEntry(shared_memory); |
| 1006 | return ResultSuccess; | ||
| 1000 | } | 1007 | } |
| 1001 | 1008 | ||
| 1002 | ResultCode Controller_NPad::SetGyroscopeZeroDriftMode(Core::HID::SixAxisSensorHandle sixaxis_handle, | 1009 | ResultCode Controller_NPad::SetGyroscopeZeroDriftMode(Core::HID::SixAxisSensorHandle sixaxis_handle, |
| @@ -1349,17 +1356,17 @@ void Controller_NPad::StopLRAssignmentMode() { | |||
| 1349 | is_in_lr_assignment_mode = false; | 1356 | is_in_lr_assignment_mode = false; |
| 1350 | } | 1357 | } |
| 1351 | 1358 | ||
| 1352 | bool Controller_NPad::SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, | 1359 | ResultCode Controller_NPad::SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, |
| 1353 | Core::HID::NpadIdType npad_id_2) { | 1360 | Core::HID::NpadIdType npad_id_2) { |
| 1354 | if (!IsNpadIdValid(npad_id_1) || !IsNpadIdValid(npad_id_2)) { | 1361 | if (!IsNpadIdValid(npad_id_1) || !IsNpadIdValid(npad_id_2)) { |
| 1355 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id_1:{}, npad_id_2:{}", npad_id_1, | 1362 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id_1:{}, npad_id_2:{}", npad_id_1, |
| 1356 | npad_id_2); | 1363 | npad_id_2); |
| 1357 | return false; | 1364 | return InvalidNpadId; |
| 1358 | } | 1365 | } |
| 1359 | if (npad_id_1 == Core::HID::NpadIdType::Handheld || | 1366 | if (npad_id_1 == Core::HID::NpadIdType::Handheld || |
| 1360 | npad_id_2 == Core::HID::NpadIdType::Handheld || npad_id_1 == Core::HID::NpadIdType::Other || | 1367 | npad_id_2 == Core::HID::NpadIdType::Handheld || npad_id_1 == Core::HID::NpadIdType::Other || |
| 1361 | npad_id_2 == Core::HID::NpadIdType::Other) { | 1368 | npad_id_2 == Core::HID::NpadIdType::Other) { |
| 1362 | return true; | 1369 | return ResultSuccess; |
| 1363 | } | 1370 | } |
| 1364 | const auto& controller_1 = GetControllerFromNpadIdType(npad_id_1).device; | 1371 | const auto& controller_1 = GetControllerFromNpadIdType(npad_id_1).device; |
| 1365 | const auto& controller_2 = GetControllerFromNpadIdType(npad_id_2).device; | 1372 | const auto& controller_2 = GetControllerFromNpadIdType(npad_id_2).device; |
| @@ -1369,46 +1376,49 @@ bool Controller_NPad::SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, | |||
| 1369 | const auto is_connected_2 = controller_2->IsConnected(); | 1376 | const auto is_connected_2 = controller_2->IsConnected(); |
| 1370 | 1377 | ||
| 1371 | if (!IsControllerSupported(type_index_1) && is_connected_1) { | 1378 | if (!IsControllerSupported(type_index_1) && is_connected_1) { |
| 1372 | return false; | 1379 | return NpadNotConnected; |
| 1373 | } | 1380 | } |
| 1374 | if (!IsControllerSupported(type_index_2) && is_connected_2) { | 1381 | if (!IsControllerSupported(type_index_2) && is_connected_2) { |
| 1375 | return false; | 1382 | return NpadNotConnected; |
| 1376 | } | 1383 | } |
| 1377 | 1384 | ||
| 1378 | UpdateControllerAt(type_index_2, npad_id_1, is_connected_2); | 1385 | UpdateControllerAt(type_index_2, npad_id_1, is_connected_2); |
| 1379 | UpdateControllerAt(type_index_1, npad_id_2, is_connected_1); | 1386 | UpdateControllerAt(type_index_1, npad_id_2, is_connected_1); |
| 1380 | 1387 | ||
| 1381 | return true; | 1388 | return ResultSuccess; |
| 1382 | } | 1389 | } |
| 1383 | 1390 | ||
| 1384 | Core::HID::LedPattern Controller_NPad::GetLedPattern(Core::HID::NpadIdType npad_id) { | 1391 | ResultCode Controller_NPad::GetLedPattern(Core::HID::NpadIdType npad_id, |
| 1392 | Core::HID::LedPattern& pattern) const { | ||
| 1385 | if (!IsNpadIdValid(npad_id)) { | 1393 | if (!IsNpadIdValid(npad_id)) { |
| 1386 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); | 1394 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); |
| 1387 | return Core::HID::LedPattern{0, 0, 0, 0}; | 1395 | return InvalidNpadId; |
| 1388 | } | 1396 | } |
| 1389 | const auto& controller = GetControllerFromNpadIdType(npad_id).device; | 1397 | const auto& controller = GetControllerFromNpadIdType(npad_id).device; |
| 1390 | return controller->GetLedPattern(); | 1398 | pattern = controller->GetLedPattern(); |
| 1399 | return ResultSuccess; | ||
| 1391 | } | 1400 | } |
| 1392 | 1401 | ||
| 1393 | bool Controller_NPad::IsUnintendedHomeButtonInputProtectionEnabled( | 1402 | ResultCode Controller_NPad::IsUnintendedHomeButtonInputProtectionEnabled( |
| 1394 | Core::HID::NpadIdType npad_id) const { | 1403 | Core::HID::NpadIdType npad_id, bool& is_valid) const { |
| 1395 | if (!IsNpadIdValid(npad_id)) { | 1404 | if (!IsNpadIdValid(npad_id)) { |
| 1396 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); | 1405 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); |
| 1397 | // Return the default value | 1406 | return InvalidNpadId; |
| 1398 | return false; | ||
| 1399 | } | 1407 | } |
| 1400 | const auto& controller = GetControllerFromNpadIdType(npad_id); | 1408 | const auto& controller = GetControllerFromNpadIdType(npad_id); |
| 1401 | return controller.unintended_home_button_input_protection; | 1409 | is_valid = controller.unintended_home_button_input_protection; |
| 1410 | return ResultSuccess; | ||
| 1402 | } | 1411 | } |
| 1403 | 1412 | ||
| 1404 | void Controller_NPad::SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, | 1413 | ResultCode Controller_NPad::SetUnintendedHomeButtonInputProtectionEnabled( |
| 1405 | Core::HID::NpadIdType npad_id) { | 1414 | bool is_protection_enabled, Core::HID::NpadIdType npad_id) { |
| 1406 | if (!IsNpadIdValid(npad_id)) { | 1415 | if (!IsNpadIdValid(npad_id)) { |
| 1407 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); | 1416 | LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); |
| 1408 | return; | 1417 | return InvalidNpadId; |
| 1409 | } | 1418 | } |
| 1410 | auto& controller = GetControllerFromNpadIdType(npad_id); | 1419 | auto& controller = GetControllerFromNpadIdType(npad_id); |
| 1411 | controller.unintended_home_button_input_protection = is_protection_enabled; | 1420 | controller.unintended_home_button_input_protection = is_protection_enabled; |
| 1421 | return ResultSuccess; | ||
| 1412 | } | 1422 | } |
| 1413 | 1423 | ||
| 1414 | void Controller_NPad::SetAnalogStickUseCenterClamp(bool use_center_clamp) { | 1424 | void Controller_NPad::SetAnalogStickUseCenterClamp(bool use_center_clamp) { |
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index 0a96825a5..31364a420 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h | |||
| @@ -141,7 +141,7 @@ public: | |||
| 141 | void UpdateControllerAt(Core::HID::NpadStyleIndex controller, Core::HID::NpadIdType npad_id, | 141 | void UpdateControllerAt(Core::HID::NpadStyleIndex controller, Core::HID::NpadIdType npad_id, |
| 142 | bool connected); | 142 | bool connected); |
| 143 | 143 | ||
| 144 | void DisconnectNpad(Core::HID::NpadIdType npad_id); | 144 | ResultCode DisconnectNpad(Core::HID::NpadIdType npad_id); |
| 145 | 145 | ||
| 146 | ResultCode SetGyroscopeZeroDriftMode(Core::HID::SixAxisSensorHandle sixaxis_handle, | 146 | ResultCode SetGyroscopeZeroDriftMode(Core::HID::SixAxisSensorHandle sixaxis_handle, |
| 147 | GyroscopeZeroDriftMode drift_mode); | 147 | GyroscopeZeroDriftMode drift_mode); |
| @@ -163,10 +163,11 @@ public: | |||
| 163 | ResultCode GetSixAxisFusionParameters( | 163 | ResultCode GetSixAxisFusionParameters( |
| 164 | Core::HID::SixAxisSensorHandle sixaxis_handle, | 164 | Core::HID::SixAxisSensorHandle sixaxis_handle, |
| 165 | Core::HID::SixAxisSensorFusionParameters& parameters) const; | 165 | Core::HID::SixAxisSensorFusionParameters& parameters) const; |
| 166 | Core::HID::LedPattern GetLedPattern(Core::HID::NpadIdType npad_id); | 166 | ResultCode GetLedPattern(Core::HID::NpadIdType npad_id, Core::HID::LedPattern& pattern) const; |
| 167 | bool IsUnintendedHomeButtonInputProtectionEnabled(Core::HID::NpadIdType npad_id) const; | 167 | ResultCode IsUnintendedHomeButtonInputProtectionEnabled(Core::HID::NpadIdType npad_id, |
| 168 | void SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, | 168 | bool& is_enabled) const; |
| 169 | Core::HID::NpadIdType npad_id); | 169 | ResultCode SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, |
| 170 | Core::HID::NpadIdType npad_id); | ||
| 170 | void SetAnalogStickUseCenterClamp(bool use_center_clamp); | 171 | void SetAnalogStickUseCenterClamp(bool use_center_clamp); |
| 171 | void ClearAllConnectedControllers(); | 172 | void ClearAllConnectedControllers(); |
| 172 | void DisconnectAllConnectedControllers(); | 173 | void DisconnectAllConnectedControllers(); |
| @@ -176,7 +177,7 @@ public: | |||
| 176 | void MergeSingleJoyAsDualJoy(Core::HID::NpadIdType npad_id_1, Core::HID::NpadIdType npad_id_2); | 177 | void MergeSingleJoyAsDualJoy(Core::HID::NpadIdType npad_id_1, Core::HID::NpadIdType npad_id_2); |
| 177 | void StartLRAssignmentMode(); | 178 | void StartLRAssignmentMode(); |
| 178 | void StopLRAssignmentMode(); | 179 | void StopLRAssignmentMode(); |
| 179 | bool SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, Core::HID::NpadIdType npad_id_2); | 180 | ResultCode SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, Core::HID::NpadIdType npad_id_2); |
| 180 | 181 | ||
| 181 | // Logical OR for all buttons presses on all controllers | 182 | // Logical OR for all buttons presses on all controllers |
| 182 | // Specifically for cheat engine and other features. | 183 | // Specifically for cheat engine and other features. |
diff --git a/src/core/hle/service/hid/errors.h b/src/core/hle/service/hid/errors.h index b31834074..279974ce9 100644 --- a/src/core/hle/service/hid/errors.h +++ b/src/core/hle/service/hid/errors.h | |||
| @@ -9,6 +9,7 @@ namespace Service::HID { | |||
| 9 | 9 | ||
| 10 | constexpr ResultCode NpadInvalidHandle{ErrorModule::HID, 100}; | 10 | constexpr ResultCode NpadInvalidHandle{ErrorModule::HID, 100}; |
| 11 | constexpr ResultCode InvalidSixAxisFusionRange{ErrorModule::HID, 423}; | 11 | constexpr ResultCode InvalidSixAxisFusionRange{ErrorModule::HID, 423}; |
| 12 | constexpr ResultCode InvalidNpadId{ErrorModule::HID, 709}; | ||
| 12 | constexpr ResultCode NpadNotConnected{ErrorModule::HID, 710}; | 13 | constexpr ResultCode NpadNotConnected{ErrorModule::HID, 710}; |
| 13 | 14 | ||
| 14 | } // namespace Service::HID | 15 | } // namespace Service::HID |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 44f892da9..18c02d47d 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -694,11 +694,7 @@ void Hid::ResetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx) { | |||
| 694 | rb.Push(result1); | 694 | rb.Push(result1); |
| 695 | return; | 695 | return; |
| 696 | } | 696 | } |
| 697 | if (result2.IsError()) { | 697 | rb.Push(result2); |
| 698 | rb.Push(result2); | ||
| 699 | return; | ||
| 700 | } | ||
| 701 | rb.Push(ResultSuccess); | ||
| 702 | } | 698 | } |
| 703 | 699 | ||
| 704 | void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { | 700 | void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { |
| @@ -948,27 +944,29 @@ void Hid::DisconnectNpad(Kernel::HLERequestContext& ctx) { | |||
| 948 | 944 | ||
| 949 | const auto parameters{rp.PopRaw<Parameters>()}; | 945 | const auto parameters{rp.PopRaw<Parameters>()}; |
| 950 | 946 | ||
| 951 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 947 | auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
| 952 | .DisconnectNpad(parameters.npad_id); | 948 | const auto result = controller.DisconnectNpad(parameters.npad_id); |
| 953 | 949 | ||
| 954 | LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", parameters.npad_id, | 950 | LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", parameters.npad_id, |
| 955 | parameters.applet_resource_user_id); | 951 | parameters.applet_resource_user_id); |
| 956 | 952 | ||
| 957 | IPC::ResponseBuilder rb{ctx, 2}; | 953 | IPC::ResponseBuilder rb{ctx, 2}; |
| 958 | rb.Push(ResultSuccess); | 954 | rb.Push(result); |
| 959 | } | 955 | } |
| 960 | 956 | ||
| 961 | void Hid::GetPlayerLedPattern(Kernel::HLERequestContext& ctx) { | 957 | void Hid::GetPlayerLedPattern(Kernel::HLERequestContext& ctx) { |
| 962 | IPC::RequestParser rp{ctx}; | 958 | IPC::RequestParser rp{ctx}; |
| 963 | const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()}; | 959 | const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()}; |
| 964 | 960 | ||
| 961 | Core::HID::LedPattern pattern{0, 0, 0, 0}; | ||
| 962 | auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); | ||
| 963 | const auto result = controller.GetLedPattern(npad_id, pattern); | ||
| 964 | |||
| 965 | LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); | 965 | LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); |
| 966 | 966 | ||
| 967 | IPC::ResponseBuilder rb{ctx, 4}; | 967 | IPC::ResponseBuilder rb{ctx, 4}; |
| 968 | rb.Push(ResultSuccess); | 968 | rb.Push(result); |
| 969 | rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad) | 969 | rb.Push(pattern.raw); |
| 970 | .GetLedPattern(npad_id) | ||
| 971 | .raw); | ||
| 972 | } | 970 | } |
| 973 | 971 | ||
| 974 | void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { | 972 | void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { |
| @@ -1157,19 +1155,14 @@ void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | |||
| 1157 | const auto npad_id_2{rp.PopEnum<Core::HID::NpadIdType>()}; | 1155 | const auto npad_id_2{rp.PopEnum<Core::HID::NpadIdType>()}; |
| 1158 | const auto applet_resource_user_id{rp.Pop<u64>()}; | 1156 | const auto applet_resource_user_id{rp.Pop<u64>()}; |
| 1159 | 1157 | ||
| 1160 | const bool res = applet_resource->GetController<Controller_NPad>(HidController::NPad) | 1158 | auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
| 1161 | .SwapNpadAssignment(npad_id_1, npad_id_2); | 1159 | const auto result = controller.SwapNpadAssignment(npad_id_1, npad_id_2); |
| 1162 | 1160 | ||
| 1163 | LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}", | 1161 | LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}", |
| 1164 | npad_id_1, npad_id_2, applet_resource_user_id); | 1162 | npad_id_1, npad_id_2, applet_resource_user_id); |
| 1165 | 1163 | ||
| 1166 | IPC::ResponseBuilder rb{ctx, 2}; | 1164 | IPC::ResponseBuilder rb{ctx, 2}; |
| 1167 | if (res) { | 1165 | rb.Push(result); |
| 1168 | rb.Push(ResultSuccess); | ||
| 1169 | } else { | ||
| 1170 | LOG_ERROR(Service_HID, "Npads are not connected!"); | ||
| 1171 | rb.Push(NpadNotConnected); | ||
| 1172 | } | ||
| 1173 | } | 1166 | } |
| 1174 | 1167 | ||
| 1175 | void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) { | 1168 | void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) { |
| @@ -1183,13 +1176,17 @@ void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext | |||
| 1183 | 1176 | ||
| 1184 | const auto parameters{rp.PopRaw<Parameters>()}; | 1177 | const auto parameters{rp.PopRaw<Parameters>()}; |
| 1185 | 1178 | ||
| 1179 | bool is_enabled = false; | ||
| 1180 | auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); | ||
| 1181 | const auto result = | ||
| 1182 | controller.IsUnintendedHomeButtonInputProtectionEnabled(parameters.npad_id, is_enabled); | ||
| 1183 | |||
| 1186 | LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", | 1184 | LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", |
| 1187 | parameters.npad_id, parameters.applet_resource_user_id); | 1185 | parameters.npad_id, parameters.applet_resource_user_id); |
| 1188 | 1186 | ||
| 1189 | IPC::ResponseBuilder rb{ctx, 3}; | 1187 | IPC::ResponseBuilder rb{ctx, 3}; |
| 1190 | rb.Push(ResultSuccess); | 1188 | rb.Push(result); |
| 1191 | rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad) | 1189 | rb.Push(is_enabled); |
| 1192 | .IsUnintendedHomeButtonInputProtectionEnabled(parameters.npad_id)); | ||
| 1193 | } | 1190 | } |
| 1194 | 1191 | ||
| 1195 | void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { | 1192 | void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { |
| @@ -1204,9 +1201,9 @@ void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& c | |||
| 1204 | 1201 | ||
| 1205 | const auto parameters{rp.PopRaw<Parameters>()}; | 1202 | const auto parameters{rp.PopRaw<Parameters>()}; |
| 1206 | 1203 | ||
| 1207 | applet_resource->GetController<Controller_NPad>(HidController::NPad) | 1204 | auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
| 1208 | .SetUnintendedHomeButtonInputProtectionEnabled( | 1205 | const auto result = controller.SetUnintendedHomeButtonInputProtectionEnabled( |
| 1209 | parameters.unintended_home_button_input_protection, parameters.npad_id); | 1206 | parameters.unintended_home_button_input_protection, parameters.npad_id); |
| 1210 | 1207 | ||
| 1211 | LOG_WARNING(Service_HID, | 1208 | LOG_WARNING(Service_HID, |
| 1212 | "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={}," | 1209 | "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={}," |
| @@ -1215,7 +1212,7 @@ void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& c | |||
| 1215 | parameters.applet_resource_user_id); | 1212 | parameters.applet_resource_user_id); |
| 1216 | 1213 | ||
| 1217 | IPC::ResponseBuilder rb{ctx, 2}; | 1214 | IPC::ResponseBuilder rb{ctx, 2}; |
| 1218 | rb.Push(ResultSuccess); | 1215 | rb.Push(result); |
| 1219 | } | 1216 | } |
| 1220 | 1217 | ||
| 1221 | void Hid::SetNpadAnalogStickUseCenterClamp(Kernel::HLERequestContext& ctx) { | 1218 | void Hid::SetNpadAnalogStickUseCenterClamp(Kernel::HLERequestContext& ctx) { |
| @@ -1377,6 +1374,8 @@ void Hid::PermitVibration(Kernel::HLERequestContext& ctx) { | |||
| 1377 | IPC::RequestParser rp{ctx}; | 1374 | IPC::RequestParser rp{ctx}; |
| 1378 | const auto can_vibrate{rp.Pop<bool>()}; | 1375 | const auto can_vibrate{rp.Pop<bool>()}; |
| 1379 | 1376 | ||
| 1377 | // nnSDK saves this value as a float. Since it can only be 1.0f or 0.0f we simplify this value | ||
| 1378 | // by converting it to a bool | ||
| 1380 | Settings::values.vibration_enabled.SetValue(can_vibrate); | 1379 | Settings::values.vibration_enabled.SetValue(can_vibrate); |
| 1381 | 1380 | ||
| 1382 | LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate); | 1381 | LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate); |
| @@ -1388,9 +1387,12 @@ void Hid::PermitVibration(Kernel::HLERequestContext& ctx) { | |||
| 1388 | void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) { | 1387 | void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) { |
| 1389 | LOG_DEBUG(Service_HID, "called"); | 1388 | LOG_DEBUG(Service_HID, "called"); |
| 1390 | 1389 | ||
| 1390 | // nnSDK checks if a float is greater than zero. We return the bool we stored earlier | ||
| 1391 | const auto is_enabled = Settings::values.vibration_enabled.GetValue(); | ||
| 1392 | |||
| 1391 | IPC::ResponseBuilder rb{ctx, 3}; | 1393 | IPC::ResponseBuilder rb{ctx, 3}; |
| 1392 | rb.Push(ResultSuccess); | 1394 | rb.Push(ResultSuccess); |
| 1393 | rb.Push(Settings::values.vibration_enabled.GetValue()); | 1395 | rb.Push(is_enabled); |
| 1394 | } | 1396 | } |
| 1395 | 1397 | ||
| 1396 | void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) { | 1398 | void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) { |