mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-25 22:57:22 +00:00
Merge pull request #2859 from Morph1984/hid
hid: Stub SetNpadJoyAssignmentModeSingle and GetNpadHandheldActivationMode
This commit is contained in:
commit
0e34f648f4
2 changed files with 126 additions and 92 deletions
|
@ -203,13 +203,13 @@ Hid::Hid(Core::System& system) : ServiceFramework("hid"), system(system) {
|
||||||
{120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"},
|
{120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"},
|
||||||
{121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"},
|
{121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"},
|
||||||
{122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, "SetNpadJoyAssignmentModeSingleByDefault"},
|
{122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, "SetNpadJoyAssignmentModeSingleByDefault"},
|
||||||
{123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"},
|
{123, &Hid::SetNpadJoyAssignmentModeSingle, "SetNpadJoyAssignmentModeSingle"},
|
||||||
{124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"},
|
{124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"},
|
||||||
{125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"},
|
{125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"},
|
||||||
{126, &Hid::StartLrAssignmentMode, "StartLrAssignmentMode"},
|
{126, &Hid::StartLrAssignmentMode, "StartLrAssignmentMode"},
|
||||||
{127, &Hid::StopLrAssignmentMode, "StopLrAssignmentMode"},
|
{127, &Hid::StopLrAssignmentMode, "StopLrAssignmentMode"},
|
||||||
{128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},
|
{128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},
|
||||||
{129, nullptr, "GetNpadHandheldActivationMode"},
|
{129, &Hid::GetNpadHandheldActivationMode, "GetNpadHandheldActivationMode"},
|
||||||
{130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"},
|
{130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"},
|
||||||
{131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"},
|
{131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"},
|
||||||
{132, nullptr, "EnableUnintendedHomeButtonInputProtection"},
|
{132, nullptr, "EnableUnintendedHomeButtonInputProtection"},
|
||||||
|
@ -557,10 +557,126 @@ void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx
|
||||||
LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id,
|
LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id,
|
||||||
applet_resource_user_id);
|
applet_resource_user_id);
|
||||||
|
|
||||||
|
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
||||||
|
controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single);
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) {
|
||||||
|
// TODO: Check the differences between this and SetNpadJoyAssignmentModeSingleByDefault
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto npad_id{rp.Pop<u32>()};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
const auto npad_joy_device_type{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID,
|
||||||
|
"(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}",
|
||||||
|
npad_id, applet_resource_user_id, npad_joy_device_type);
|
||||||
|
|
||||||
|
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
||||||
|
controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto npad_id{rp.Pop<u32>()};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id,
|
||||||
|
applet_resource_user_id);
|
||||||
|
|
||||||
|
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
||||||
|
controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto unknown_1{rp.Pop<u32>()};
|
||||||
|
const auto unknown_2{rp.Pop<u32>()};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID,
|
||||||
|
"(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}",
|
||||||
|
unknown_1, unknown_2, applet_resource_user_id);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
|
||||||
|
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
||||||
|
controller.StartLRAssignmentMode();
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
|
||||||
|
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
||||||
|
controller.StopLRAssignmentMode();
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
const auto mode{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}",
|
||||||
|
applet_resource_user_id, mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hid::GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}",
|
||||||
|
applet_resource_user_id);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto npad_1{rp.Pop<u32>()};
|
||||||
|
const auto npad_2{rp.Pop<u32>()};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}",
|
||||||
|
applet_resource_user_id, npad_1, npad_2);
|
||||||
|
|
||||||
|
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
if (controller.SwapNpadAssignment(npad_1, npad_2)) {
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
} else {
|
||||||
|
LOG_ERROR(Service_HID, "Npads are not connected!");
|
||||||
|
rb.Push(ERR_NPAD_NOT_CONNECTED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) {
|
void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
@ -635,47 +751,6 @@ void Hid::GetActualVibrationValue(Kernel::HLERequestContext& ctx) {
|
||||||
applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration());
|
applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::RequestParser rp{ctx};
|
|
||||||
const auto npad_id{rp.Pop<u32>()};
|
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
|
||||||
|
|
||||||
LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id,
|
|
||||||
applet_resource_user_id);
|
|
||||||
|
|
||||||
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
|
||||||
controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual);
|
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::RequestParser rp{ctx};
|
|
||||||
const auto unknown_1{rp.Pop<u32>()};
|
|
||||||
const auto unknown_2{rp.Pop<u32>()};
|
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
|
||||||
|
|
||||||
LOG_WARNING(Service_HID,
|
|
||||||
"(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}",
|
|
||||||
unknown_1, unknown_2, applet_resource_user_id);
|
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::RequestParser rp{ctx};
|
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
|
||||||
const auto mode{rp.Pop<u64>()};
|
|
||||||
|
|
||||||
LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}",
|
|
||||||
applet_resource_user_id, mode);
|
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) {
|
void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_HID, "called");
|
LOG_DEBUG(Service_HID, "called");
|
||||||
|
|
||||||
|
@ -769,49 +844,6 @@ void Hid::SetPalmaBoostMode(Kernel::HLERequestContext& ctx) {
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::RequestParser rp{ctx};
|
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
|
||||||
|
|
||||||
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
|
|
||||||
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
|
||||||
controller.StartLRAssignmentMode();
|
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::RequestParser rp{ctx};
|
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
|
||||||
|
|
||||||
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
|
|
||||||
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
|
||||||
controller.StopLRAssignmentMode();
|
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::RequestParser rp{ctx};
|
|
||||||
const auto npad_1{rp.Pop<u32>()};
|
|
||||||
const auto npad_2{rp.Pop<u32>()};
|
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
|
||||||
|
|
||||||
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}",
|
|
||||||
applet_resource_user_id, npad_1, npad_2);
|
|
||||||
|
|
||||||
auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
if (controller.SwapNpadAssignment(npad_1, npad_2)) {
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
} else {
|
|
||||||
LOG_ERROR(Service_HID, "Npads are not connected!");
|
|
||||||
rb.Push(ERR_NPAD_NOT_CONNECTED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class HidDbg final : public ServiceFramework<HidDbg> {
|
class HidDbg final : public ServiceFramework<HidDbg> {
|
||||||
public:
|
public:
|
||||||
explicit HidDbg() : ServiceFramework{"hid:dbg"} {
|
explicit HidDbg() : ServiceFramework{"hid:dbg"} {
|
||||||
|
|
|
@ -106,14 +106,19 @@ private:
|
||||||
void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx);
|
void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx);
|
||||||
void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx);
|
void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx);
|
||||||
void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx);
|
void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx);
|
||||||
|
void SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx);
|
||||||
|
void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx);
|
||||||
|
void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx);
|
||||||
|
void StartLrAssignmentMode(Kernel::HLERequestContext& ctx);
|
||||||
|
void StopLrAssignmentMode(Kernel::HLERequestContext& ctx);
|
||||||
|
void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);
|
||||||
|
void GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);
|
||||||
|
void SwapNpadAssignment(Kernel::HLERequestContext& ctx);
|
||||||
void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx);
|
void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx);
|
||||||
void EndPermitVibrationSession(Kernel::HLERequestContext& ctx);
|
void EndPermitVibrationSession(Kernel::HLERequestContext& ctx);
|
||||||
void SendVibrationValue(Kernel::HLERequestContext& ctx);
|
void SendVibrationValue(Kernel::HLERequestContext& ctx);
|
||||||
void SendVibrationValues(Kernel::HLERequestContext& ctx);
|
void SendVibrationValues(Kernel::HLERequestContext& ctx);
|
||||||
void GetActualVibrationValue(Kernel::HLERequestContext& ctx);
|
void GetActualVibrationValue(Kernel::HLERequestContext& ctx);
|
||||||
void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx);
|
|
||||||
void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx);
|
|
||||||
void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);
|
|
||||||
void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx);
|
void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx);
|
||||||
void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx);
|
void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx);
|
||||||
void PermitVibration(Kernel::HLERequestContext& ctx);
|
void PermitVibration(Kernel::HLERequestContext& ctx);
|
||||||
|
@ -123,9 +128,6 @@ private:
|
||||||
void StopSixAxisSensor(Kernel::HLERequestContext& ctx);
|
void StopSixAxisSensor(Kernel::HLERequestContext& ctx);
|
||||||
void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx);
|
void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx);
|
||||||
void SetPalmaBoostMode(Kernel::HLERequestContext& ctx);
|
void SetPalmaBoostMode(Kernel::HLERequestContext& ctx);
|
||||||
void StartLrAssignmentMode(Kernel::HLERequestContext& ctx);
|
|
||||||
void StopLrAssignmentMode(Kernel::HLERequestContext& ctx);
|
|
||||||
void SwapNpadAssignment(Kernel::HLERequestContext& ctx);
|
|
||||||
|
|
||||||
std::shared_ptr<IAppletResource> applet_resource;
|
std::shared_ptr<IAppletResource> applet_resource;
|
||||||
Core::System& system;
|
Core::System& system;
|
||||||
|
|
Loading…
Reference in a new issue