summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp64
-rw-r--r--src/core/hle/service/hid/controllers/npad.h10
2 files changed, 23 insertions, 51 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index a2b25a796..81bd2f3cb 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -583,36 +583,6 @@ bool Controller_NPad::SwapNpadAssignment(u32 npad_id_1, u32 npad_id_2) {
583 return true; 583 return true;
584} 584}
585 585
586bool Controller_NPad::IsControllerSupported(NPadControllerType controller) {
587 if (controller == NPadControllerType::Handheld) {
588 // Handheld is not even a supported type, lets stop here
589 if (std::find(supported_npad_id_types.begin(), supported_npad_id_types.end(),
590 NPAD_HANDHELD) == supported_npad_id_types.end()) {
591 return false;
592 }
593 // Handheld should not be supported in docked mode
594 if (Settings::values.use_docked_mode) {
595 return false;
596 }
597 }
598 switch (controller) {
599 case NPadControllerType::ProController:
600 return style.pro_controller;
601 case NPadControllerType::Handheld:
602 return style.handheld;
603 case NPadControllerType::JoyDual:
604 return style.joycon_dual;
605 case NPadControllerType::JoyLeft:
606 return style.joycon_left;
607 case NPadControllerType::JoyRight:
608 return style.joycon_right;
609 case NPadControllerType::Pokeball:
610 return style.pokeball;
611 default:
612 return false;
613 }
614}
615
616Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) { 586Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) {
617 if (npad_id == npad_id_list.back() || npad_id == npad_id_list[npad_id_list.size() - 2]) { 587 if (npad_id == npad_id_list.back() || npad_id == npad_id_list[npad_id_list.size() - 2]) {
618 // These are controllers without led patterns 588 // These are controllers without led patterns
@@ -659,25 +629,24 @@ void Controller_NPad::ClearAllConnectedControllers() {
659} 629}
660 630
661void Controller_NPad::DisconnectAllConnectedControllers() { 631void Controller_NPad::DisconnectAllConnectedControllers() {
662 std::for_each(connected_controllers.begin(), connected_controllers.end(), 632 for (ControllerHolder& controller : connected_controllers) {
663 [](ControllerHolder& controller) { controller.is_connected = false; }); 633 controller.is_connected = false;
634 }
664} 635}
665 636
666void Controller_NPad::ConnectAllDisconnectedControllers() { 637void Controller_NPad::ConnectAllDisconnectedControllers() {
667 std::for_each(connected_controllers.begin(), connected_controllers.end(), 638 for (ControllerHolder& controller : connected_controllers) {
668 [](ControllerHolder& controller) { 639 if (controller.type != NPadControllerType::None && !controller.is_connected) {
669 if (controller.type != NPadControllerType::None && !controller.is_connected) { 640 controller.is_connected = true;
670 controller.is_connected = false; 641 }
671 } 642 }
672 });
673} 643}
674 644
675void Controller_NPad::ClearAllControllers() { 645void Controller_NPad::ClearAllControllers() {
676 std::for_each(connected_controllers.begin(), connected_controllers.end(), 646 for (ControllerHolder& controller : connected_controllers) {
677 [](ControllerHolder& controller) { 647 controller.type = NPadControllerType::None;
678 controller.type = NPadControllerType::None; 648 controller.is_connected = false;
679 controller.is_connected = false; 649 }
680 });
681} 650}
682 651
683u32 Controller_NPad::GetAndResetPressState() { 652u32 Controller_NPad::GetAndResetPressState() {
@@ -685,10 +654,10 @@ u32 Controller_NPad::GetAndResetPressState() {
685} 654}
686 655
687bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const { 656bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const {
688 const bool support_handheld =
689 std::find(supported_npad_id_types.begin(), supported_npad_id_types.end(), NPAD_HANDHELD) !=
690 supported_npad_id_types.end();
691 if (controller == NPadControllerType::Handheld) { 657 if (controller == NPadControllerType::Handheld) {
658 const bool support_handheld =
659 std::find(supported_npad_id_types.begin(), supported_npad_id_types.end(),
660 NPAD_HANDHELD) != supported_npad_id_types.end();
692 // Handheld is not even a supported type, lets stop here 661 // Handheld is not even a supported type, lets stop here
693 if (!support_handheld) { 662 if (!support_handheld) {
694 return false; 663 return false;
@@ -700,6 +669,7 @@ bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const
700 669
701 return true; 670 return true;
702 } 671 }
672
703 if (std::any_of(supported_npad_id_types.begin(), supported_npad_id_types.end(), 673 if (std::any_of(supported_npad_id_types.begin(), supported_npad_id_types.end(),
704 [](u32 npad_id) { return npad_id <= MAX_NPAD_ID; })) { 674 [](u32 npad_id) { return npad_id <= MAX_NPAD_ID; })) {
705 switch (controller) { 675 switch (controller) {
@@ -717,6 +687,7 @@ bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const
717 return false; 687 return false;
718 } 688 }
719 } 689 }
690
720 return false; 691 return false;
721} 692}
722 693
@@ -795,6 +766,7 @@ Controller_NPad::NPadControllerType Controller_NPad::DecideBestController(
795 priority_list.push_back(NPadControllerType::JoyLeft); 766 priority_list.push_back(NPadControllerType::JoyLeft);
796 priority_list.push_back(NPadControllerType::JoyRight); 767 priority_list.push_back(NPadControllerType::JoyRight);
797 priority_list.push_back(NPadControllerType::JoyDual); 768 priority_list.push_back(NPadControllerType::JoyDual);
769 break;
798 } 770 }
799 771
800 const auto iter = std::find_if(priority_list.begin(), priority_list.end(), 772 const auto iter = std::find_if(priority_list.begin(), priority_list.end(),
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index 1bc3d55d6..16c4caa1f 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -301,6 +301,11 @@ private:
301 bool is_connected; 301 bool is_connected;
302 }; 302 };
303 303
304 void InitNewlyAddedControler(std::size_t controller_idx);
305 bool IsControllerSupported(NPadControllerType controller) const;
306 NPadControllerType DecideBestController(NPadControllerType priority) const;
307 void RequestPadStateUpdate(u32 npad_id);
308
304 u32 press_state{}; 309 u32 press_state{};
305 310
306 NPadType style{}; 311 NPadType style{};
@@ -321,12 +326,7 @@ private:
321 std::array<ControllerHolder, 10> connected_controllers{}; 326 std::array<ControllerHolder, 10> connected_controllers{};
322 bool can_controllers_vibrate{true}; 327 bool can_controllers_vibrate{true};
323 328
324 void InitNewlyAddedControler(std::size_t controller_idx);
325 bool IsControllerSupported(NPadControllerType controller) const;
326 NPadControllerType DecideBestController(NPadControllerType priority) const;
327 void RequestPadStateUpdate(u32 npad_id);
328 std::array<ControllerPad, 10> npad_pad_states{}; 329 std::array<ControllerPad, 10> npad_pad_states{};
329 bool IsControllerSupported(NPadControllerType controller);
330 bool is_in_lr_assignment_mode{false}; 330 bool is_in_lr_assignment_mode{false};
331 Core::System& system; 331 Core::System& system;
332}; 332};