summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Morph2019-09-14 17:09:14 -0400
committerGravatar Morph2019-10-07 04:43:34 -0700
commitc1e9ca4c08ddc7ffa5a7278b4a591ffd6ad4d510 (patch)
treeea66ed5c975a883bb8042c93aa06e5fc60744ca8 /src
parentMerge pull request #2951 from lioncash/global (diff)
downloadyuzu-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.cpp204
-rw-r--r--src/core/hle/service/hid/hid.h14
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
556void 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
574void 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
589void 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
603void 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
615void 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
627void 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
639void 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
650void 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
553void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { 669void 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
627void 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
642void 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
656void 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
668void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { 743void 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
761void 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
773void 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
785void 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
804class HidDbg final : public ServiceFramework<HidDbg> { 836class HidDbg final : public ServiceFramework<HidDbg> {
805public: 837public:
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;