summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar David2019-11-06 12:48:07 +1100
committerGravatar GitHub2019-11-06 12:48:07 +1100
commit0e34f648f4f82992b1fbd0612dcb495bf724713b (patch)
tree23eeb40445ad5a52d5e739856a1bd172709f9e01 /src
parentMerge pull request #2914 from FernandoS27/fermi-fix (diff)
parenthid: Stub SetNpadJoyAssignmentModeSingle and reorganize service commands (diff)
downloadyuzu-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.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 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
567void 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
585void 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
600void 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
614void 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
626void 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
638void 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
650void 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
661void 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
564void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { 680void 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
638void 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
653void 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
667void 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
679void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) { 754void 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
772void 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
784void 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
796void 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
815class HidDbg final : public ServiceFramework<HidDbg> { 847class HidDbg final : public ServiceFramework<HidDbg> {
816public: 848public:
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;