summaryrefslogtreecommitdiff
path: root/src/input_common/drivers/gc_adapter.cpp
diff options
context:
space:
mode:
authorGravatar german772021-10-19 00:12:24 -0500
committerGravatar Narr the Reg2021-11-24 20:30:24 -0600
commit601ac43495904f3f7666d79a800a8b4eda5a8461 (patch)
tree97e49cb22264ceb730ce51babbd3c2dc27d6b36f /src/input_common/drivers/gc_adapter.cpp
parenthid: Fix controller connection/disconnection (diff)
downloadyuzu-601ac43495904f3f7666d79a800a8b4eda5a8461.tar.gz
yuzu-601ac43495904f3f7666d79a800a8b4eda5a8461.tar.xz
yuzu-601ac43495904f3f7666d79a800a8b4eda5a8461.zip
core/hid: Only signal when needed
Diffstat (limited to 'src/input_common/drivers/gc_adapter.cpp')
-rw-r--r--src/input_common/drivers/gc_adapter.cpp75
1 files changed, 63 insertions, 12 deletions
diff --git a/src/input_common/drivers/gc_adapter.cpp b/src/input_common/drivers/gc_adapter.cpp
index 4a56abb99..4fb6ab5af 100644
--- a/src/input_common/drivers/gc_adapter.cpp
+++ b/src/input_common/drivers/gc_adapter.cpp
@@ -150,7 +150,10 @@ void GCAdapter::UpdatePadType(std::size_t port, ControllerTypes pad_type) {
150 return; 150 return;
151 } 151 }
152 // Device changed reset device and set new type 152 // Device changed reset device and set new type
153 pads[port] = {}; 153 pads[port].axis_origin = {};
154 pads[port].reset_origin_counter = {};
155 pads[port].enable_vibration = {};
156 pads[port].rumble_amplitude = {};
154 pads[port].type = pad_type; 157 pads[port].type = pad_type;
155} 158}
156 159
@@ -396,12 +399,11 @@ std::vector<Common::ParamPackage> GCAdapter::GetInputDevices() const {
396 if (!DeviceConnected(port)) { 399 if (!DeviceConnected(port)) {
397 continue; 400 continue;
398 } 401 }
399 const std::string name = fmt::format("Gamecube Controller {}", port + 1); 402 Common::ParamPackage identifier{};
400 devices.emplace_back(Common::ParamPackage{ 403 identifier.Set("engine", GetEngineName());
401 {"engine", "gcpad"}, 404 identifier.Set("display", fmt::format("Gamecube Controller {}", port + 1));
402 {"display", std::move(name)}, 405 identifier.Set("port", static_cast<int>(port));
403 {"port", std::to_string(port)}, 406 devices.emplace_back(identifier);
404 });
405 } 407 }
406 return devices; 408 return devices;
407} 409}
@@ -431,7 +433,8 @@ ButtonMapping GCAdapter::GetButtonMappingForDevice(const Common::ParamPackage& p
431 433
432 ButtonMapping mapping{}; 434 ButtonMapping mapping{};
433 for (const auto& [switch_button, gcadapter_button] : switch_to_gcadapter_button) { 435 for (const auto& [switch_button, gcadapter_button] : switch_to_gcadapter_button) {
434 Common::ParamPackage button_params({{"engine", "gcpad"}}); 436 Common::ParamPackage button_params{};
437 button_params.Set("engine", GetEngineName());
435 button_params.Set("port", params.Get("port", 0)); 438 button_params.Set("port", params.Get("port", 0));
436 button_params.Set("button", static_cast<int>(gcadapter_button)); 439 button_params.Set("button", static_cast<int>(gcadapter_button));
437 mapping.insert_or_assign(switch_button, std::move(button_params)); 440 mapping.insert_or_assign(switch_button, std::move(button_params));
@@ -444,7 +447,8 @@ ButtonMapping GCAdapter::GetButtonMappingForDevice(const Common::ParamPackage& p
444 {Settings::NativeButton::ZR, PadButton::TriggerR, PadAxes::TriggerRight}, 447 {Settings::NativeButton::ZR, PadButton::TriggerR, PadAxes::TriggerRight},
445 }; 448 };
446 for (const auto& [switch_button, gcadapter_buton, gcadapter_axis] : switch_to_gcadapter_axis) { 449 for (const auto& [switch_button, gcadapter_buton, gcadapter_axis] : switch_to_gcadapter_axis) {
447 Common::ParamPackage button_params({{"engine", "gcpad"}}); 450 Common::ParamPackage button_params{};
451 button_params.Set("engine", GetEngineName());
448 button_params.Set("port", params.Get("port", 0)); 452 button_params.Set("port", params.Get("port", 0));
449 button_params.Set("button", static_cast<s32>(gcadapter_buton)); 453 button_params.Set("button", static_cast<s32>(gcadapter_buton));
450 button_params.Set("axis", static_cast<s32>(gcadapter_axis)); 454 button_params.Set("axis", static_cast<s32>(gcadapter_axis));
@@ -463,13 +467,13 @@ AnalogMapping GCAdapter::GetAnalogMappingForDevice(const Common::ParamPackage& p
463 467
464 AnalogMapping mapping = {}; 468 AnalogMapping mapping = {};
465 Common::ParamPackage left_analog_params; 469 Common::ParamPackage left_analog_params;
466 left_analog_params.Set("engine", "gcpad"); 470 left_analog_params.Set("engine", GetEngineName());
467 left_analog_params.Set("port", params.Get("port", 0)); 471 left_analog_params.Set("port", params.Get("port", 0));
468 left_analog_params.Set("axis_x", static_cast<int>(PadAxes::StickX)); 472 left_analog_params.Set("axis_x", static_cast<int>(PadAxes::StickX));
469 left_analog_params.Set("axis_y", static_cast<int>(PadAxes::StickY)); 473 left_analog_params.Set("axis_y", static_cast<int>(PadAxes::StickY));
470 mapping.insert_or_assign(Settings::NativeAnalog::LStick, std::move(left_analog_params)); 474 mapping.insert_or_assign(Settings::NativeAnalog::LStick, std::move(left_analog_params));
471 Common::ParamPackage right_analog_params; 475 Common::ParamPackage right_analog_params;
472 right_analog_params.Set("engine", "gcpad"); 476 right_analog_params.Set("engine", GetEngineName());
473 right_analog_params.Set("port", params.Get("port", 0)); 477 right_analog_params.Set("port", params.Get("port", 0));
474 right_analog_params.Set("axis_x", static_cast<int>(PadAxes::SubstickX)); 478 right_analog_params.Set("axis_x", static_cast<int>(PadAxes::SubstickX));
475 right_analog_params.Set("axis_y", static_cast<int>(PadAxes::SubstickY)); 479 right_analog_params.Set("axis_y", static_cast<int>(PadAxes::SubstickY));
@@ -477,9 +481,56 @@ AnalogMapping GCAdapter::GetAnalogMappingForDevice(const Common::ParamPackage& p
477 return mapping; 481 return mapping;
478} 482}
479 483
484std::string GCAdapter::GetUIButtonName(const Common::ParamPackage& params) const {
485 PadButton button = static_cast<PadButton>(params.Get("button", 0));
486 switch (button) {
487 case PadButton::ButtonLeft:
488 return "left";
489 break;
490 case PadButton::ButtonRight:
491 return "right";
492 break;
493 case PadButton::ButtonDown:
494 return "down";
495 break;
496 case PadButton::ButtonUp:
497 return "up";
498 break;
499 case PadButton::TriggerZ:
500 return "Z";
501 break;
502 case PadButton::TriggerR:
503 return "R";
504 break;
505 case PadButton::TriggerL:
506 return "L";
507 break;
508 case PadButton::ButtonA:
509 return "A";
510 break;
511 case PadButton::ButtonB:
512 return "B";
513 break;
514 case PadButton::ButtonX:
515 return "X";
516 break;
517 case PadButton::ButtonY:
518 return "Y";
519 break;
520 case PadButton::ButtonStart:
521 return "start";
522 break;
523 default:
524 return "Unkown GC";
525 }
526}
527
480std::string GCAdapter::GetUIName(const Common::ParamPackage& params) const { 528std::string GCAdapter::GetUIName(const Common::ParamPackage& params) const {
481 if (params.Has("button")) { 529 if (params.Has("button")) {
482 return fmt::format("Button {}", params.Get("button", 0)); 530 return fmt::format("Button {}", GetUIButtonName(params));
531 }
532 if (params.Has("axis")) {
533 return fmt::format("Axis {}", params.Get("axis",0));
483 } 534 }
484 535
485 return "Bad GC Adapter"; 536 return "Bad GC Adapter";