diff options
| author | 2019-11-06 12:48:07 +1100 | |
|---|---|---|
| committer | 2019-11-06 12:48:07 +1100 | |
| commit | 0e34f648f4f82992b1fbd0612dcb495bf724713b (patch) | |
| tree | 23eeb40445ad5a52d5e739856a1bd172709f9e01 /src | |
| parent | Merge pull request #2914 from FernandoS27/fermi-fix (diff) | |
| parent | hid: Stub SetNpadJoyAssignmentModeSingle and reorganize service commands (diff) | |
| download | yuzu-0e34f648f4f82992b1fbd0612dcb495bf724713b.tar.gz yuzu-0e34f648f4f82992b1fbd0612dcb495bf724713b.tar.xz yuzu-0e34f648f4f82992b1fbd0612dcb495bf724713b.zip | |
Merge pull request #2859 from Morph1984/hid
hid: Stub SetNpadJoyAssignmentModeSingle and GetNpadHandheldActivationMode
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 204 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.h | 14 |
2 files changed, 126 insertions, 92 deletions
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index ba1da4181..ecc130f6c 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -203,13 +203,13 @@ Hid::Hid(Core::System& system) : ServiceFramework("hid"), system(system) { | |||
| 203 | {120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, | 203 | {120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, |
| 204 | {121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, | 204 | {121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, |
| 205 | {122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, "SetNpadJoyAssignmentModeSingleByDefault"}, | 205 | {122, &Hid::SetNpadJoyAssignmentModeSingleByDefault, "SetNpadJoyAssignmentModeSingleByDefault"}, |
| 206 | {123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"}, | 206 | {123, &Hid::SetNpadJoyAssignmentModeSingle, "SetNpadJoyAssignmentModeSingle"}, |
| 207 | {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"}, | 207 | {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"}, |
| 208 | {125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"}, | 208 | {125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"}, |
| 209 | {126, &Hid::StartLrAssignmentMode, "StartLrAssignmentMode"}, | 209 | {126, &Hid::StartLrAssignmentMode, "StartLrAssignmentMode"}, |
| 210 | {127, &Hid::StopLrAssignmentMode, "StopLrAssignmentMode"}, | 210 | {127, &Hid::StopLrAssignmentMode, "StopLrAssignmentMode"}, |
| 211 | {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, | 211 | {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, |
| 212 | {129, nullptr, "GetNpadHandheldActivationMode"}, | 212 | {129, &Hid::GetNpadHandheldActivationMode, "GetNpadHandheldActivationMode"}, |
| 213 | {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, | 213 | {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, |
| 214 | {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"}, | 214 | {131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"}, |
| 215 | {132, nullptr, "EnableUnintendedHomeButtonInputProtection"}, | 215 | {132, nullptr, "EnableUnintendedHomeButtonInputProtection"}, |
| @@ -557,10 +557,126 @@ void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx | |||
| 557 | LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, | 557 | LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, |
| 558 | applet_resource_user_id); | 558 | applet_resource_user_id); |
| 559 | 559 | ||
| 560 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 561 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single); | ||
| 562 | |||
| 563 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 564 | rb.Push(RESULT_SUCCESS); | ||
| 565 | } | ||
| 566 | |||
| 567 | void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) { | ||
| 568 | // TODO: Check the differences between this and SetNpadJoyAssignmentModeSingleByDefault | ||
| 569 | IPC::RequestParser rp{ctx}; | ||
| 570 | const auto npad_id{rp.Pop<u32>()}; | ||
| 571 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 572 | const auto npad_joy_device_type{rp.Pop<u64>()}; | ||
| 573 | |||
| 574 | LOG_WARNING(Service_HID, | ||
| 575 | "(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}", | ||
| 576 | npad_id, applet_resource_user_id, npad_joy_device_type); | ||
| 577 | |||
| 578 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 579 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single); | ||
| 580 | |||
| 581 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 582 | rb.Push(RESULT_SUCCESS); | ||
| 583 | } | ||
| 584 | |||
| 585 | void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { | ||
| 586 | IPC::RequestParser rp{ctx}; | ||
| 587 | const auto npad_id{rp.Pop<u32>()}; | ||
| 588 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 589 | |||
| 590 | LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, | ||
| 591 | applet_resource_user_id); | ||
| 592 | |||
| 593 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 594 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); | ||
| 595 | |||
| 596 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 597 | rb.Push(RESULT_SUCCESS); | ||
| 598 | } | ||
| 599 | |||
| 600 | void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { | ||
| 601 | IPC::RequestParser rp{ctx}; | ||
| 602 | const auto unknown_1{rp.Pop<u32>()}; | ||
| 603 | const auto unknown_2{rp.Pop<u32>()}; | ||
| 604 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 605 | |||
| 606 | LOG_WARNING(Service_HID, | ||
| 607 | "(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}", | ||
| 608 | unknown_1, unknown_2, applet_resource_user_id); | ||
| 609 | |||
| 610 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 611 | rb.Push(RESULT_SUCCESS); | ||
| 612 | } | ||
| 613 | |||
| 614 | void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 615 | IPC::RequestParser rp{ctx}; | ||
| 616 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 617 | |||
| 618 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 619 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 620 | controller.StartLRAssignmentMode(); | ||
| 621 | |||
| 622 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 623 | rb.Push(RESULT_SUCCESS); | ||
| 624 | } | ||
| 625 | |||
| 626 | void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 627 | IPC::RequestParser rp{ctx}; | ||
| 628 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 629 | |||
| 630 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 631 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 632 | controller.StopLRAssignmentMode(); | ||
| 633 | |||
| 634 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 635 | rb.Push(RESULT_SUCCESS); | ||
| 636 | } | ||
| 637 | |||
| 638 | void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||
| 639 | IPC::RequestParser rp{ctx}; | ||
| 640 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 641 | const auto mode{rp.Pop<u64>()}; | ||
| 642 | |||
| 643 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | ||
| 644 | applet_resource_user_id, mode); | ||
| 645 | |||
| 646 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 647 | rb.Push(RESULT_SUCCESS); | ||
| 648 | } | ||
| 649 | |||
| 650 | void Hid::GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||
| 651 | IPC::RequestParser rp{ctx}; | ||
| 652 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 653 | |||
| 654 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", | ||
| 655 | applet_resource_user_id); | ||
| 656 | |||
| 560 | IPC::ResponseBuilder rb{ctx, 2}; | 657 | IPC::ResponseBuilder rb{ctx, 2}; |
| 561 | rb.Push(RESULT_SUCCESS); | 658 | rb.Push(RESULT_SUCCESS); |
| 562 | } | 659 | } |
| 563 | 660 | ||
| 661 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | ||
| 662 | IPC::RequestParser rp{ctx}; | ||
| 663 | const auto npad_1{rp.Pop<u32>()}; | ||
| 664 | const auto npad_2{rp.Pop<u32>()}; | ||
| 665 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 666 | |||
| 667 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}", | ||
| 668 | applet_resource_user_id, npad_1, npad_2); | ||
| 669 | |||
| 670 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 671 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 672 | if (controller.SwapNpadAssignment(npad_1, npad_2)) { | ||
| 673 | rb.Push(RESULT_SUCCESS); | ||
| 674 | } else { | ||
| 675 | LOG_ERROR(Service_HID, "Npads are not connected!"); | ||
| 676 | rb.Push(ERR_NPAD_NOT_CONNECTED); | ||
| 677 | } | ||
| 678 | } | ||
| 679 | |||
| 564 | void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { | 680 | void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { |
| 565 | IPC::RequestParser rp{ctx}; | 681 | IPC::RequestParser rp{ctx}; |
| 566 | const auto applet_resource_user_id{rp.Pop<u64>()}; | 682 | const auto applet_resource_user_id{rp.Pop<u64>()}; |
| @@ -635,47 +751,6 @@ void Hid::GetActualVibrationValue(Kernel::HLERequestContext& ctx) { | |||
| 635 | applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration()); | 751 | applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration()); |
| 636 | } | 752 | } |
| 637 | 753 | ||
| 638 | void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { | ||
| 639 | IPC::RequestParser rp{ctx}; | ||
| 640 | const auto npad_id{rp.Pop<u32>()}; | ||
| 641 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 642 | |||
| 643 | LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, | ||
| 644 | applet_resource_user_id); | ||
| 645 | |||
| 646 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 647 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); | ||
| 648 | |||
| 649 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 650 | rb.Push(RESULT_SUCCESS); | ||
| 651 | } | ||
| 652 | |||
| 653 | void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { | ||
| 654 | IPC::RequestParser rp{ctx}; | ||
| 655 | const auto unknown_1{rp.Pop<u32>()}; | ||
| 656 | const auto unknown_2{rp.Pop<u32>()}; | ||
| 657 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 658 | |||
| 659 | LOG_WARNING(Service_HID, | ||
| 660 | "(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}", | ||
| 661 | unknown_1, unknown_2, applet_resource_user_id); | ||
| 662 | |||
| 663 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 664 | rb.Push(RESULT_SUCCESS); | ||
| 665 | } | ||
| 666 | |||
| 667 | void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||
| 668 | IPC::RequestParser rp{ctx}; | ||
| 669 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 670 | const auto mode{rp.Pop<u64>()}; | ||
| 671 | |||
| 672 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | ||
| 673 | applet_resource_user_id, mode); | ||
| 674 | |||
| 675 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 676 | rb.Push(RESULT_SUCCESS); | ||
| 677 | } | ||
| 678 | |||
| 679 | void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { | 754 | void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { |
| 680 | LOG_DEBUG(Service_HID, "called"); | 755 | LOG_DEBUG(Service_HID, "called"); |
| 681 | 756 | ||
| @@ -769,49 +844,6 @@ void Hid::SetPalmaBoostMode(Kernel::HLERequestContext& ctx) { | |||
| 769 | rb.Push(RESULT_SUCCESS); | 844 | rb.Push(RESULT_SUCCESS); |
| 770 | } | 845 | } |
| 771 | 846 | ||
| 772 | void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 773 | IPC::RequestParser rp{ctx}; | ||
| 774 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 775 | |||
| 776 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 777 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 778 | controller.StartLRAssignmentMode(); | ||
| 779 | |||
| 780 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 781 | rb.Push(RESULT_SUCCESS); | ||
| 782 | } | ||
| 783 | |||
| 784 | void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 785 | IPC::RequestParser rp{ctx}; | ||
| 786 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 787 | |||
| 788 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 789 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 790 | controller.StopLRAssignmentMode(); | ||
| 791 | |||
| 792 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 793 | rb.Push(RESULT_SUCCESS); | ||
| 794 | } | ||
| 795 | |||
| 796 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | ||
| 797 | IPC::RequestParser rp{ctx}; | ||
| 798 | const auto npad_1{rp.Pop<u32>()}; | ||
| 799 | const auto npad_2{rp.Pop<u32>()}; | ||
| 800 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 801 | |||
| 802 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}", | ||
| 803 | applet_resource_user_id, npad_1, npad_2); | ||
| 804 | |||
| 805 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 806 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 807 | if (controller.SwapNpadAssignment(npad_1, npad_2)) { | ||
| 808 | rb.Push(RESULT_SUCCESS); | ||
| 809 | } else { | ||
| 810 | LOG_ERROR(Service_HID, "Npads are not connected!"); | ||
| 811 | rb.Push(ERR_NPAD_NOT_CONNECTED); | ||
| 812 | } | ||
| 813 | } | ||
| 814 | |||
| 815 | class HidDbg final : public ServiceFramework<HidDbg> { | 847 | class HidDbg final : public ServiceFramework<HidDbg> { |
| 816 | public: | 848 | public: |
| 817 | explicit HidDbg() : ServiceFramework{"hid:dbg"} { | 849 | explicit HidDbg() : ServiceFramework{"hid:dbg"} { |
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 01852e019..f08e036a3 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
| @@ -106,14 +106,19 @@ private: | |||
| 106 | void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | 106 | void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); |
| 107 | void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | 107 | void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); |
| 108 | void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx); | 108 | void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx); |
| 109 | void SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx); | ||
| 110 | void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx); | ||
| 111 | void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx); | ||
| 112 | void StartLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 113 | void StopLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 114 | void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||
| 115 | void GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||
| 116 | void SwapNpadAssignment(Kernel::HLERequestContext& ctx); | ||
| 109 | void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); | 117 | void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); |
| 110 | void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); | 118 | void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); |
| 111 | void SendVibrationValue(Kernel::HLERequestContext& ctx); | 119 | void SendVibrationValue(Kernel::HLERequestContext& ctx); |
| 112 | void SendVibrationValues(Kernel::HLERequestContext& ctx); | 120 | void SendVibrationValues(Kernel::HLERequestContext& ctx); |
| 113 | void GetActualVibrationValue(Kernel::HLERequestContext& ctx); | 121 | void GetActualVibrationValue(Kernel::HLERequestContext& ctx); |
| 114 | void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx); | ||
| 115 | void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx); | ||
| 116 | void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||
| 117 | void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx); | 122 | void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx); |
| 118 | void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); | 123 | void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); |
| 119 | void PermitVibration(Kernel::HLERequestContext& ctx); | 124 | void PermitVibration(Kernel::HLERequestContext& ctx); |
| @@ -123,9 +128,6 @@ private: | |||
| 123 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx); | 128 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx); |
| 124 | void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx); | 129 | void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx); |
| 125 | void SetPalmaBoostMode(Kernel::HLERequestContext& ctx); | 130 | void SetPalmaBoostMode(Kernel::HLERequestContext& ctx); |
| 126 | void StartLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 127 | void StopLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 128 | void SwapNpadAssignment(Kernel::HLERequestContext& ctx); | ||
| 129 | 131 | ||
| 130 | std::shared_ptr<IAppletResource> applet_resource; | 132 | std::shared_ptr<IAppletResource> applet_resource; |
| 131 | Core::System& system; | 133 | Core::System& system; |