diff options
Diffstat (limited to 'src/input_common')
| -rw-r--r-- | src/input_common/drivers/gc_adapter.cpp | 75 | ||||
| -rw-r--r-- | src/input_common/drivers/gc_adapter.h | 6 | ||||
| -rw-r--r-- | src/input_common/drivers/keyboard.cpp | 2 | ||||
| -rw-r--r-- | src/input_common/drivers/sdl_driver.cpp | 22 | ||||
| -rw-r--r-- | src/input_common/drivers/tas_input.cpp | 2 |
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 | ||
| 484 | std::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 | |||
| 480 | std::string GCAdapter::GetUIName(const Common::ParamPackage& params) const { | 528 | std::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() { | |||
| 26 | std::vector<Common::ParamPackage> Keyboard::GetInputDevices() const { | 26 | std::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 | } |
| 528 | Common::ParamPackage SDLDriver::BuildAnalogParamPackageForButton(int port, std::string guid, | 530 | Common::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 | ||
| 539 | Common::ParamPackage SDLDriver::BuildButtonParamPackageForButton(int port, std::string guid, | 542 | Common::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 | ||
| 548 | Common::ParamPackage SDLDriver::BuildHatParamPackageForButton(int port, std::string guid, s32 hat, | 552 | Common::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 | ||
| 559 | Common::ParamPackage SDLDriver::BuildMotionParam(int port, std::string guid) const { | 563 | Common::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( |