|
|
@ -694,11 +694,7 @@ void Hid::ResetSixAxisSensorFusionParameters(Kernel::HLERequestContext& ctx) { |
|
|
rb.Push(result1); |
|
|
rb.Push(result1); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
if (result2.IsError()) { |
|
|
|
|
|
rb.Push(result2); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
|
|
|
rb.Push(result2); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { |
|
|
@ -948,27 +944,29 @@ void Hid::DisconnectNpad(Kernel::HLERequestContext& ctx) { |
|
|
|
|
|
|
|
|
const auto parameters{rp.PopRaw<Parameters>()}; |
|
|
const auto parameters{rp.PopRaw<Parameters>()}; |
|
|
|
|
|
|
|
|
applet_resource->GetController<Controller_NPad>(HidController::NPad) |
|
|
|
|
|
.DisconnectNpad(parameters.npad_id); |
|
|
|
|
|
|
|
|
auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
|
|
|
|
|
const auto result = controller.DisconnectNpad(parameters.npad_id); |
|
|
|
|
|
|
|
|
LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", parameters.npad_id, |
|
|
LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", parameters.npad_id, |
|
|
parameters.applet_resource_user_id); |
|
|
parameters.applet_resource_user_id); |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
|
|
|
rb.Push(result); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Hid::GetPlayerLedPattern(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::GetPlayerLedPattern(Kernel::HLERequestContext& ctx) { |
|
|
IPC::RequestParser rp{ctx}; |
|
|
IPC::RequestParser rp{ctx}; |
|
|
const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()}; |
|
|
const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()}; |
|
|
|
|
|
|
|
|
|
|
|
Core::HID::LedPattern pattern{0, 0, 0, 0}; |
|
|
|
|
|
auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
|
|
|
|
|
const auto result = controller.GetLedPattern(npad_id, pattern); |
|
|
|
|
|
|
|
|
LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); |
|
|
LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 4}; |
|
|
IPC::ResponseBuilder rb{ctx, 4}; |
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad) |
|
|
|
|
|
.GetLedPattern(npad_id) |
|
|
|
|
|
.raw); |
|
|
|
|
|
|
|
|
rb.Push(result); |
|
|
|
|
|
rb.Push(pattern.raw); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { |
|
|
@ -1157,19 +1155,14 @@ void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { |
|
|
const auto npad_id_2{rp.PopEnum<Core::HID::NpadIdType>()}; |
|
|
const auto npad_id_2{rp.PopEnum<Core::HID::NpadIdType>()}; |
|
|
const auto applet_resource_user_id{rp.Pop<u64>()}; |
|
|
const auto applet_resource_user_id{rp.Pop<u64>()}; |
|
|
|
|
|
|
|
|
const bool res = applet_resource->GetController<Controller_NPad>(HidController::NPad) |
|
|
|
|
|
.SwapNpadAssignment(npad_id_1, npad_id_2); |
|
|
|
|
|
|
|
|
auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
|
|
|
|
|
const auto result = controller.SwapNpadAssignment(npad_id_1, npad_id_2); |
|
|
|
|
|
|
|
|
LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}", |
|
|
LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}", |
|
|
npad_id_1, npad_id_2, applet_resource_user_id); |
|
|
npad_id_1, npad_id_2, applet_resource_user_id); |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
if (res) { |
|
|
|
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
} else { |
|
|
|
|
|
LOG_ERROR(Service_HID, "Npads are not connected!"); |
|
|
|
|
|
rb.Push(NpadNotConnected); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
rb.Push(result); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) { |
|
|
@ -1183,13 +1176,17 @@ void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext |
|
|
|
|
|
|
|
|
const auto parameters{rp.PopRaw<Parameters>()}; |
|
|
const auto parameters{rp.PopRaw<Parameters>()}; |
|
|
|
|
|
|
|
|
|
|
|
bool is_enabled = false; |
|
|
|
|
|
auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
|
|
|
|
|
const auto result = |
|
|
|
|
|
controller.IsUnintendedHomeButtonInputProtectionEnabled(parameters.npad_id, is_enabled); |
|
|
|
|
|
|
|
|
LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", |
|
|
LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", |
|
|
parameters.npad_id, parameters.applet_resource_user_id); |
|
|
parameters.npad_id, parameters.applet_resource_user_id); |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad) |
|
|
|
|
|
.IsUnintendedHomeButtonInputProtectionEnabled(parameters.npad_id)); |
|
|
|
|
|
|
|
|
rb.Push(result); |
|
|
|
|
|
rb.Push(is_enabled); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { |
|
|
@ -1204,9 +1201,9 @@ void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& c |
|
|
|
|
|
|
|
|
const auto parameters{rp.PopRaw<Parameters>()}; |
|
|
const auto parameters{rp.PopRaw<Parameters>()}; |
|
|
|
|
|
|
|
|
applet_resource->GetController<Controller_NPad>(HidController::NPad) |
|
|
|
|
|
.SetUnintendedHomeButtonInputProtectionEnabled( |
|
|
|
|
|
parameters.unintended_home_button_input_protection, parameters.npad_id); |
|
|
|
|
|
|
|
|
auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); |
|
|
|
|
|
const auto result = controller.SetUnintendedHomeButtonInputProtectionEnabled( |
|
|
|
|
|
parameters.unintended_home_button_input_protection, parameters.npad_id); |
|
|
|
|
|
|
|
|
LOG_WARNING(Service_HID, |
|
|
LOG_WARNING(Service_HID, |
|
|
"(STUBBED) called, unintended_home_button_input_protection={}, npad_id={}," |
|
|
"(STUBBED) called, unintended_home_button_input_protection={}, npad_id={}," |
|
|
@ -1215,7 +1212,7 @@ void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& c |
|
|
parameters.applet_resource_user_id); |
|
|
parameters.applet_resource_user_id); |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
|
|
|
rb.Push(result); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Hid::SetNpadAnalogStickUseCenterClamp(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::SetNpadAnalogStickUseCenterClamp(Kernel::HLERequestContext& ctx) { |
|
|
@ -1377,6 +1374,8 @@ void Hid::PermitVibration(Kernel::HLERequestContext& ctx) { |
|
|
IPC::RequestParser rp{ctx}; |
|
|
IPC::RequestParser rp{ctx}; |
|
|
const auto can_vibrate{rp.Pop<bool>()}; |
|
|
const auto can_vibrate{rp.Pop<bool>()}; |
|
|
|
|
|
|
|
|
|
|
|
// nnSDK saves this value as a float. Since it can only be 1.0f or 0.0f we simplify this value
|
|
|
|
|
|
// by converting it to a bool
|
|
|
Settings::values.vibration_enabled.SetValue(can_vibrate); |
|
|
Settings::values.vibration_enabled.SetValue(can_vibrate); |
|
|
|
|
|
|
|
|
LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate); |
|
|
LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate); |
|
|
@ -1388,9 +1387,12 @@ void Hid::PermitVibration(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) { |
|
|
LOG_DEBUG(Service_HID, "called"); |
|
|
LOG_DEBUG(Service_HID, "called"); |
|
|
|
|
|
|
|
|
|
|
|
// nnSDK checks if a float is greater than zero. We return the bool we stored earlier
|
|
|
|
|
|
const auto is_enabled = Settings::values.vibration_enabled.GetValue(); |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
rb.Push(ResultSuccess); |
|
|
rb.Push(ResultSuccess); |
|
|
rb.Push(Settings::values.vibration_enabled.GetValue()); |
|
|
|
|
|
|
|
|
rb.Push(is_enabled); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) { |
|
|
void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) { |
|
|
|