summaryrefslogtreecommitdiff
path: root/src/input_common
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common')
-rw-r--r--src/input_common/drivers/gc_adapter.cpp75
-rw-r--r--src/input_common/drivers/gc_adapter.h6
-rw-r--r--src/input_common/drivers/keyboard.cpp2
-rw-r--r--src/input_common/drivers/sdl_driver.cpp22
-rw-r--r--src/input_common/drivers/tas_input.cpp2
5 files changed, 84 insertions, 23 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";
diff --git a/src/input_common/drivers/gc_adapter.h b/src/input_common/drivers/gc_adapter.h
index dd0e4aa1d..b82e4803d 100644
--- a/src/input_common/drivers/gc_adapter.h
+++ b/src/input_common/drivers/gc_adapter.h
@@ -105,8 +105,12 @@ private:
105 void Reset(); 105 void Reset();
106 106
107 void UpdateVibrations(); 107 void UpdateVibrations();
108 // Updates vibration state of all controllers 108
109 /// Updates vibration state of all controllers
109 void SendVibrations(); 110 void SendVibrations();
111
112 std::string GetUIButtonName(const Common::ParamPackage& params) const;
113
110 std::unique_ptr<LibUSBDeviceHandle> usb_adapter_handle; 114 std::unique_ptr<LibUSBDeviceHandle> usb_adapter_handle;
111 std::array<GCController, 4> pads; 115 std::array<GCController, 4> pads;
112 116
diff --git a/src/input_common/drivers/keyboard.cpp b/src/input_common/drivers/keyboard.cpp
index b00a4b8d9..85a781a30 100644
--- a/src/input_common/drivers/keyboard.cpp
+++ b/src/input_common/drivers/keyboard.cpp
@@ -26,7 +26,7 @@ void Keyboard::ReleaseAllKeys() {
26std::vector<Common::ParamPackage> Keyboard::GetInputDevices() const { 26std::vector<Common::ParamPackage> Keyboard::GetInputDevices() const {
27 std::vector<Common::ParamPackage> devices; 27 std::vector<Common::ParamPackage> devices;
28 devices.emplace_back(Common::ParamPackage{ 28 devices.emplace_back(Common::ParamPackage{
29 {"engine", "keyboard"}, 29 {"engine", GetEngineName()},
30 {"display", "Keyboard Only"}, 30 {"display", "Keyboard Only"},
31 }); 31 });
32 return devices; 32 return devices;
diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp
index f7f03c5f2..cee2d965f 100644
--- a/src/input_common/drivers/sdl_driver.cpp
+++ b/src/input_common/drivers/sdl_driver.cpp
@@ -305,6 +305,7 @@ void SDLDriver::InitJoystick(int joystick_index) {
305 if (joystick_map.find(guid) == joystick_map.end()) { 305 if (joystick_map.find(guid) == joystick_map.end()) {
306 auto joystick = std::make_shared<SDLJoystick>(guid, 0, sdl_joystick, sdl_gamecontroller); 306 auto joystick = std::make_shared<SDLJoystick>(guid, 0, sdl_joystick, sdl_gamecontroller);
307 PreSetController(joystick->GetPadIdentifier()); 307 PreSetController(joystick->GetPadIdentifier());
308 SetBattery(joystick->GetPadIdentifier(), joystick->GetBatteryLevel());
308 joystick_map[guid].emplace_back(std::move(joystick)); 309 joystick_map[guid].emplace_back(std::move(joystick));
309 return; 310 return;
310 } 311 }
@@ -322,6 +323,7 @@ void SDLDriver::InitJoystick(int joystick_index) {
322 const int port = static_cast<int>(joystick_guid_list.size()); 323 const int port = static_cast<int>(joystick_guid_list.size());
323 auto joystick = std::make_shared<SDLJoystick>(guid, port, sdl_joystick, sdl_gamecontroller); 324 auto joystick = std::make_shared<SDLJoystick>(guid, port, sdl_joystick, sdl_gamecontroller);
324 PreSetController(joystick->GetPadIdentifier()); 325 PreSetController(joystick->GetPadIdentifier());
326 SetBattery(joystick->GetPadIdentifier(), joystick->GetBatteryLevel());
325 joystick_guid_list.emplace_back(std::move(joystick)); 327 joystick_guid_list.emplace_back(std::move(joystick));
326} 328}
327 329
@@ -472,7 +474,7 @@ std::vector<Common::ParamPackage> SDLDriver::GetInputDevices() const {
472 const std::string name = 474 const std::string name =
473 fmt::format("{} {}", joystick->GetControllerName(), joystick->GetPort()); 475 fmt::format("{} {}", joystick->GetControllerName(), joystick->GetPort());
474 devices.emplace_back(Common::ParamPackage{ 476 devices.emplace_back(Common::ParamPackage{
475 {"engine", "sdl"}, 477 {"engine", GetEngineName()},
476 {"display", std::move(name)}, 478 {"display", std::move(name)},
477 {"guid", joystick->GetGUID()}, 479 {"guid", joystick->GetGUID()},
478 {"port", std::to_string(joystick->GetPort())}, 480 {"port", std::to_string(joystick->GetPort())},
@@ -495,7 +497,7 @@ std::vector<Common::ParamPackage> SDLDriver::GetInputDevices() const {
495 const std::string name = 497 const std::string name =
496 fmt::format("{} {}", "Nintendo Dual Joy-Con", joystick->GetPort()); 498 fmt::format("{} {}", "Nintendo Dual Joy-Con", joystick->GetPort());
497 devices.emplace_back(Common::ParamPackage{ 499 devices.emplace_back(Common::ParamPackage{
498 {"engine", "sdl"}, 500 {"engine", GetEngineName()},
499 {"display", std::move(name)}, 501 {"display", std::move(name)},
500 {"guid", joystick->GetGUID()}, 502 {"guid", joystick->GetGUID()},
501 {"guid2", joystick2->GetGUID()}, 503 {"guid2", joystick2->GetGUID()},
@@ -527,7 +529,8 @@ Input::VibrationError SDLDriver::SetRumble(const PadIdentifier& identifier,
527} 529}
528Common::ParamPackage SDLDriver::BuildAnalogParamPackageForButton(int port, std::string guid, 530Common::ParamPackage SDLDriver::BuildAnalogParamPackageForButton(int port, std::string guid,
529 s32 axis, float value) const { 531 s32 axis, float value) const {
530 Common::ParamPackage params({{"engine", "sdl"}}); 532 Common::ParamPackage params{};
533 params.Set("engine", GetEngineName());
531 params.Set("port", port); 534 params.Set("port", port);
532 params.Set("guid", std::move(guid)); 535 params.Set("guid", std::move(guid));
533 params.Set("axis", axis); 536 params.Set("axis", axis);
@@ -538,7 +541,8 @@ Common::ParamPackage SDLDriver::BuildAnalogParamPackageForButton(int port, std::
538 541
539Common::ParamPackage SDLDriver::BuildButtonParamPackageForButton(int port, std::string guid, 542Common::ParamPackage SDLDriver::BuildButtonParamPackageForButton(int port, std::string guid,
540 s32 button) const { 543 s32 button) const {
541 Common::ParamPackage params({{"engine", "sdl"}}); 544 Common::ParamPackage params{};
545 params.Set("engine", GetEngineName());
542 params.Set("port", port); 546 params.Set("port", port);
543 params.Set("guid", std::move(guid)); 547 params.Set("guid", std::move(guid));
544 params.Set("button", button); 548 params.Set("button", button);
@@ -547,8 +551,8 @@ Common::ParamPackage SDLDriver::BuildButtonParamPackageForButton(int port, std::
547 551
548Common::ParamPackage SDLDriver::BuildHatParamPackageForButton(int port, std::string guid, s32 hat, 552Common::ParamPackage SDLDriver::BuildHatParamPackageForButton(int port, std::string guid, s32 hat,
549 u8 value) const { 553 u8 value) const {
550 Common::ParamPackage params({{"engine", "sdl"}}); 554 Common::ParamPackage params{};
551 555 params.Set("engine", GetEngineName());
552 params.Set("port", port); 556 params.Set("port", port);
553 params.Set("guid", std::move(guid)); 557 params.Set("guid", std::move(guid));
554 params.Set("hat", hat); 558 params.Set("hat", hat);
@@ -557,7 +561,9 @@ Common::ParamPackage SDLDriver::BuildHatParamPackageForButton(int port, std::str
557} 561}
558 562
559Common::ParamPackage SDLDriver::BuildMotionParam(int port, std::string guid) const { 563Common::ParamPackage SDLDriver::BuildMotionParam(int port, std::string guid) const {
560 Common::ParamPackage params({{"engine", "sdl"}, {"motion", "0"}}); 564 Common::ParamPackage params{};
565 params.Set("engine", GetEngineName());
566 params.Set("motion", 0);
561 params.Set("port", port); 567 params.Set("port", port);
562 params.Set("guid", std::move(guid)); 568 params.Set("guid", std::move(guid));
563 return params; 569 return params;
@@ -583,7 +589,7 @@ Common::ParamPackage SDLDriver::BuildParamPackageForAnalog(PadIdentifier identif
583 int axis_y, float offset_x, 589 int axis_y, float offset_x,
584 float offset_y) const { 590 float offset_y) const {
585 Common::ParamPackage params; 591 Common::ParamPackage params;
586 params.Set("engine", "sdl"); 592 params.Set("engine", GetEngineName());
587 params.Set("port", static_cast<int>(identifier.port)); 593 params.Set("port", static_cast<int>(identifier.port));
588 params.Set("guid", identifier.guid.Format()); 594 params.Set("guid", identifier.guid.Format());
589 params.Set("axis_x", axis_x); 595 params.Set("axis_x", axis_x);
diff --git a/src/input_common/drivers/tas_input.cpp b/src/input_common/drivers/tas_input.cpp
index 5e2101b27..7e7a1d58f 100644
--- a/src/input_common/drivers/tas_input.cpp
+++ b/src/input_common/drivers/tas_input.cpp
@@ -127,7 +127,7 @@ void Tas::WriteTasFile(std::u8string file_name) {
127 std::string output_text; 127 std::string output_text;
128 for (size_t frame = 0; frame < record_commands.size(); frame++) { 128 for (size_t frame = 0; frame < record_commands.size(); frame++) {
129 const TASCommand& line = record_commands[frame]; 129 const TASCommand& line = record_commands[frame];
130 output_text += fmt::format("{} {} {} {} {}\n", frame, WriteCommandButtons(line.buttons), 130 output_text += fmt::format("{} {} {} {}\n", frame, WriteCommandButtons(line.buttons),
131 WriteCommandAxis(line.l_axis), WriteCommandAxis(line.r_axis)); 131 WriteCommandAxis(line.l_axis), WriteCommandAxis(line.r_axis));
132 } 132 }
133 const auto bytes_written = Common::FS::WriteStringToFile( 133 const auto bytes_written = Common::FS::WriteStringToFile(