diff options
| author | 2019-09-14 17:09:14 -0400 | |
|---|---|---|
| committer | 2019-10-07 04:43:34 -0700 | |
| commit | c1e9ca4c08ddc7ffa5a7278b4a591ffd6ad4d510 (patch) | |
| tree | ea66ed5c975a883bb8042c93aa06e5fc60744ca8 /src | |
| parent | Merge pull request #2951 from lioncash/global (diff) | |
| download | yuzu-c1e9ca4c08ddc7ffa5a7278b4a591ffd6ad4d510.tar.gz yuzu-c1e9ca4c08ddc7ffa5a7278b4a591ffd6ad4d510.tar.xz yuzu-c1e9ca4c08ddc7ffa5a7278b4a591ffd6ad4d510.zip | |
hid: Stub SetNpadJoyAssignmentModeSingle and reorganize service commands
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 41bddf870..9ab8b930e 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"}, |
| @@ -546,10 +546,126 @@ void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx | |||
| 546 | LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, | 546 | LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, |
| 547 | applet_resource_user_id); | 547 | applet_resource_user_id); |
| 548 | 548 | ||
| 549 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 550 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single); | ||
| 551 | |||
| 552 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 553 | rb.Push(RESULT_SUCCESS); | ||
| 554 | } | ||
| 555 | |||
| 556 | void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) { | ||
| 557 | // TODO: Check the differences between this and SetNpadJoyAssignmentModeSingleByDefault | ||
| 558 | IPC::RequestParser rp{ctx}; | ||
| 559 | const auto npad_id{rp.Pop<u32>()}; | ||
| 560 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 561 | const auto npad_joy_device_type{rp.Pop<u64>()}; | ||
| 562 | |||
| 563 | LOG_WARNING(Service_HID, | ||
| 564 | "(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}", | ||
| 565 | npad_id, applet_resource_user_id, npad_joy_device_type); | ||
| 566 | |||
| 567 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 568 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single); | ||
| 569 | |||
| 570 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 571 | rb.Push(RESULT_SUCCESS); | ||
| 572 | } | ||
| 573 | |||
| 574 | void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { | ||
| 575 | IPC::RequestParser rp{ctx}; | ||
| 576 | const auto npad_id{rp.Pop<u32>()}; | ||
| 577 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 578 | |||
| 579 | LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, | ||
| 580 | applet_resource_user_id); | ||
| 581 | |||
| 582 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 583 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); | ||
| 584 | |||
| 585 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 586 | rb.Push(RESULT_SUCCESS); | ||
| 587 | } | ||
| 588 | |||
| 589 | void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { | ||
| 590 | IPC::RequestParser rp{ctx}; | ||
| 591 | const auto unknown_1{rp.Pop<u32>()}; | ||
| 592 | const auto unknown_2{rp.Pop<u32>()}; | ||
| 593 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 594 | |||
| 595 | LOG_WARNING(Service_HID, | ||
| 596 | "(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}", | ||
| 597 | unknown_1, unknown_2, applet_resource_user_id); | ||
| 598 | |||
| 599 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 600 | rb.Push(RESULT_SUCCESS); | ||
| 601 | } | ||
| 602 | |||
| 603 | void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 604 | IPC::RequestParser rp{ctx}; | ||
| 605 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 606 | |||
| 607 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 608 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 609 | controller.StartLRAssignmentMode(); | ||
| 610 | |||
| 611 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 612 | rb.Push(RESULT_SUCCESS); | ||
| 613 | } | ||
| 614 | |||
| 615 | void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 616 | IPC::RequestParser rp{ctx}; | ||
| 617 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 618 | |||
| 619 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 620 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 621 | controller.StopLRAssignmentMode(); | ||
| 622 | |||
| 623 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 624 | rb.Push(RESULT_SUCCESS); | ||
| 625 | } | ||
| 626 | |||
| 627 | void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||
| 628 | IPC::RequestParser rp{ctx}; | ||
| 629 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 630 | const auto mode{rp.Pop<u64>()}; | ||
| 631 | |||
| 632 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | ||
| 633 | applet_resource_user_id, mode); | ||
| 634 | |||
| 635 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 636 | rb.Push(RESULT_SUCCESS); | ||
| 637 | } | ||
| 638 | |||
| 639 | void Hid::GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||
| 640 | IPC::RequestParser rp{ctx}; | ||
| 641 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 642 | |||
| 643 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", | ||
| 644 | applet_resource_user_id); | ||
| 645 | |||
| 549 | IPC::ResponseBuilder rb{ctx, 2}; | 646 | IPC::ResponseBuilder rb{ctx, 2}; |
| 550 | rb.Push(RESULT_SUCCESS); | 647 | rb.Push(RESULT_SUCCESS); |
| 551 | } | 648 | } |
| 552 | 649 | ||
| 650 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | ||
| 651 | IPC::RequestParser rp{ctx}; | ||
| 652 | const auto npad_1{rp.Pop<u32>()}; | ||
| 653 | const auto npad_2{rp.Pop<u32>()}; | ||
| 654 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 655 | |||
| 656 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}", | ||
| 657 | applet_resource_user_id, npad_1, npad_2); | ||
| 658 | |||
| 659 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 660 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 661 | if (controller.SwapNpadAssignment(npad_1, npad_2)) { | ||
| 662 | rb.Push(RESULT_SUCCESS); | ||
| 663 | } else { | ||
| 664 | LOG_ERROR(Service_HID, "Npads are not connected!"); | ||
| 665 | rb.Push(ERR_NPAD_NOT_CONNECTED); | ||
| 666 | } | ||
| 667 | } | ||
| 668 | |||
| 553 | void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { | 669 | void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { |
| 554 | IPC::RequestParser rp{ctx}; | 670 | IPC::RequestParser rp{ctx}; |
| 555 | const auto applet_resource_user_id{rp.Pop<u64>()}; | 671 | const auto applet_resource_user_id{rp.Pop<u64>()}; |
| @@ -624,47 +740,6 @@ void Hid::GetActualVibrationValue(Kernel::HLERequestContext& ctx) { | |||
| 624 | applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration()); | 740 | applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration()); |
| 625 | } | 741 | } |
| 626 | 742 | ||
| 627 | void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { | ||
| 628 | IPC::RequestParser rp{ctx}; | ||
| 629 | const auto npad_id{rp.Pop<u32>()}; | ||
| 630 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 631 | |||
| 632 | LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, | ||
| 633 | applet_resource_user_id); | ||
| 634 | |||
| 635 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 636 | controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); | ||
| 637 | |||
| 638 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 639 | rb.Push(RESULT_SUCCESS); | ||
| 640 | } | ||
| 641 | |||
| 642 | void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) { | ||
| 643 | IPC::RequestParser rp{ctx}; | ||
| 644 | const auto unknown_1{rp.Pop<u32>()}; | ||
| 645 | const auto unknown_2{rp.Pop<u32>()}; | ||
| 646 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 647 | |||
| 648 | LOG_WARNING(Service_HID, | ||
| 649 | "(STUBBED) called, unknown_1={}, unknown_2={}, applet_resource_user_id={}", | ||
| 650 | unknown_1, unknown_2, applet_resource_user_id); | ||
| 651 | |||
| 652 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 653 | rb.Push(RESULT_SUCCESS); | ||
| 654 | } | ||
| 655 | |||
| 656 | void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { | ||
| 657 | IPC::RequestParser rp{ctx}; | ||
| 658 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 659 | const auto mode{rp.Pop<u64>()}; | ||
| 660 | |||
| 661 | LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}, mode={}", | ||
| 662 | applet_resource_user_id, mode); | ||
| 663 | |||
| 664 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 665 | rb.Push(RESULT_SUCCESS); | ||
| 666 | } | ||
| 667 | |||
| 668 | void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { | 743 | void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { |
| 669 | LOG_DEBUG(Service_HID, "called"); | 744 | LOG_DEBUG(Service_HID, "called"); |
| 670 | 745 | ||
| @@ -758,49 +833,6 @@ void Hid::SetPalmaBoostMode(Kernel::HLERequestContext& ctx) { | |||
| 758 | rb.Push(RESULT_SUCCESS); | 833 | rb.Push(RESULT_SUCCESS); |
| 759 | } | 834 | } |
| 760 | 835 | ||
| 761 | void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 762 | IPC::RequestParser rp{ctx}; | ||
| 763 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 764 | |||
| 765 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 766 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 767 | controller.StartLRAssignmentMode(); | ||
| 768 | |||
| 769 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 770 | rb.Push(RESULT_SUCCESS); | ||
| 771 | } | ||
| 772 | |||
| 773 | void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) { | ||
| 774 | IPC::RequestParser rp{ctx}; | ||
| 775 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 776 | |||
| 777 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||
| 778 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 779 | controller.StopLRAssignmentMode(); | ||
| 780 | |||
| 781 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 782 | rb.Push(RESULT_SUCCESS); | ||
| 783 | } | ||
| 784 | |||
| 785 | void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { | ||
| 786 | IPC::RequestParser rp{ctx}; | ||
| 787 | const auto npad_1{rp.Pop<u32>()}; | ||
| 788 | const auto npad_2{rp.Pop<u32>()}; | ||
| 789 | const auto applet_resource_user_id{rp.Pop<u64>()}; | ||
| 790 | |||
| 791 | LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}", | ||
| 792 | applet_resource_user_id, npad_1, npad_2); | ||
| 793 | |||
| 794 | auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad); | ||
| 795 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 796 | if (controller.SwapNpadAssignment(npad_1, npad_2)) { | ||
| 797 | rb.Push(RESULT_SUCCESS); | ||
| 798 | } else { | ||
| 799 | LOG_ERROR(Service_HID, "Npads are not connected!"); | ||
| 800 | rb.Push(ERR_NPAD_NOT_CONNECTED); | ||
| 801 | } | ||
| 802 | } | ||
| 803 | |||
| 804 | class HidDbg final : public ServiceFramework<HidDbg> { | 836 | class HidDbg final : public ServiceFramework<HidDbg> { |
| 805 | public: | 837 | public: |
| 806 | explicit HidDbg() : ServiceFramework{"hid:dbg"} { | 838 | explicit HidDbg() : ServiceFramework{"hid:dbg"} { |
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 35b663679..10abd10ed 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
| @@ -105,14 +105,19 @@ private: | |||
| 105 | void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | 105 | void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); |
| 106 | void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); | 106 | void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); |
| 107 | void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx); | 107 | void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx); |
| 108 | void SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx); | ||
| 109 | void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx); | ||
| 110 | void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx); | ||
| 111 | void StartLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 112 | void StopLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 113 | void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||
| 114 | void GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||
| 115 | void SwapNpadAssignment(Kernel::HLERequestContext& ctx); | ||
| 108 | void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); | 116 | void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); |
| 109 | void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); | 117 | void EndPermitVibrationSession(Kernel::HLERequestContext& ctx); |
| 110 | void SendVibrationValue(Kernel::HLERequestContext& ctx); | 118 | void SendVibrationValue(Kernel::HLERequestContext& ctx); |
| 111 | void SendVibrationValues(Kernel::HLERequestContext& ctx); | 119 | void SendVibrationValues(Kernel::HLERequestContext& ctx); |
| 112 | void GetActualVibrationValue(Kernel::HLERequestContext& ctx); | 120 | void GetActualVibrationValue(Kernel::HLERequestContext& ctx); |
| 113 | void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx); | ||
| 114 | void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx); | ||
| 115 | void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||
| 116 | void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx); | 121 | void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx); |
| 117 | void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); | 122 | void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); |
| 118 | void PermitVibration(Kernel::HLERequestContext& ctx); | 123 | void PermitVibration(Kernel::HLERequestContext& ctx); |
| @@ -122,9 +127,6 @@ private: | |||
| 122 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx); | 127 | void StopSixAxisSensor(Kernel::HLERequestContext& ctx); |
| 123 | void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx); | 128 | void SetIsPalmaAllConnectable(Kernel::HLERequestContext& ctx); |
| 124 | void SetPalmaBoostMode(Kernel::HLERequestContext& ctx); | 129 | void SetPalmaBoostMode(Kernel::HLERequestContext& ctx); |
| 125 | void StartLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 126 | void StopLrAssignmentMode(Kernel::HLERequestContext& ctx); | ||
| 127 | void SwapNpadAssignment(Kernel::HLERequestContext& ctx); | ||
| 128 | 130 | ||
| 129 | std::shared_ptr<IAppletResource> applet_resource; | 131 | std::shared_ptr<IAppletResource> applet_resource; |
| 130 | Core::System& system; | 132 | Core::System& system; |