summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp50
-rw-r--r--src/core/hle/service/hid/controllers/npad.h13
-rw-r--r--src/core/hle/service/hid/errors.h1
-rw-r--r--src/core/hle/service/hid/hid.cpp58
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
674void Controller_NPad::SetHoldType(NpadJoyHoldType joy_hold_type) { 674void 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
960void Controller_NPad::DisconnectNpad(Core::HID::NpadIdType npad_id) { 966ResultCode 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
1002ResultCode Controller_NPad::SetGyroscopeZeroDriftMode(Core::HID::SixAxisSensorHandle sixaxis_handle, 1009ResultCode 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
1352bool Controller_NPad::SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, 1359ResultCode 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
1384Core::HID::LedPattern Controller_NPad::GetLedPattern(Core::HID::NpadIdType npad_id) { 1391ResultCode 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
1393bool Controller_NPad::IsUnintendedHomeButtonInputProtectionEnabled( 1402ResultCode 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
1404void Controller_NPad::SetUnintendedHomeButtonInputProtectionEnabled(bool is_protection_enabled, 1413ResultCode 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
1414void Controller_NPad::SetAnalogStickUseCenterClamp(bool use_center_clamp) { 1424void 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
10constexpr ResultCode NpadInvalidHandle{ErrorModule::HID, 100}; 10constexpr ResultCode NpadInvalidHandle{ErrorModule::HID, 100};
11constexpr ResultCode InvalidSixAxisFusionRange{ErrorModule::HID, 423}; 11constexpr ResultCode InvalidSixAxisFusionRange{ErrorModule::HID, 423};
12constexpr ResultCode InvalidNpadId{ErrorModule::HID, 709};
12constexpr ResultCode NpadNotConnected{ErrorModule::HID, 710}; 13constexpr 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
704void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { 700void 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
961void Hid::GetPlayerLedPattern(Kernel::HLERequestContext& ctx) { 957void 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
974void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { 972void 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
1175void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) { 1168void 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
1195void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { 1192void 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
1221void Hid::SetNpadAnalogStickUseCenterClamp(Kernel::HLERequestContext& ctx) { 1218void 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) {
1388void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) { 1387void 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
1396void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) { 1398void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) {