Clang Formatting
This commit is contained in:
		| @@ -44,7 +44,7 @@ static Controller_NPad::NPadControllerType MapSettingsTypeToNPad(Settings::Contr | ||||
|     case Settings::ControllerType::RightJoycon: | ||||
|         return Controller_NPad::NPadControllerType::JoyRight; | ||||
|     default: | ||||
|     UNREACHABLE(); | ||||
|         UNREACHABLE(); | ||||
|         return Controller_NPad::NPadControllerType::JoyDual; | ||||
|     } | ||||
| } | ||||
| @@ -93,10 +93,7 @@ u32 Controller_NPad::IndexToNPad(std::size_t index) { | ||||
|     }; | ||||
| } | ||||
|  | ||||
| Controller_NPad::Controller_NPad(Core::System& system) | ||||
|     : ControllerBase(system), system(system) { | ||||
| } | ||||
|  | ||||
| Controller_NPad::Controller_NPad(Core::System& system) : ControllerBase(system), system(system) {} | ||||
| Controller_NPad::~Controller_NPad() = default; | ||||
|  | ||||
| void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { | ||||
| @@ -109,7 +106,7 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { | ||||
|     controller.device_type.raw = 0; | ||||
|     switch (controller_type) { | ||||
|     case NPadControllerType::None: | ||||
|     UNREACHABLE(); | ||||
|         UNREACHABLE(); | ||||
|         break; | ||||
|     case NPadControllerType::Handheld: | ||||
|         controller.joy_styles.handheld.Assign(1); | ||||
| @@ -197,8 +194,7 @@ void Controller_NPad::OnInit() { | ||||
|  | ||||
|     std::transform( | ||||
|         Settings::values.players.begin(), Settings::values.players.end(), | ||||
|         connected_controllers.begin(), [](const Settings::PlayerInput& player) | ||||
|         { | ||||
|         connected_controllers.begin(), [](const Settings::PlayerInput& player) { | ||||
|             return ControllerHolder{MapSettingsTypeToNPad(player.type), player.connected}; | ||||
|         }); | ||||
|  | ||||
| @@ -242,8 +238,7 @@ void Controller_NPad::OnLoadInputDevices() { | ||||
|     } | ||||
| } | ||||
|  | ||||
| void Controller_NPad::OnRelease() { | ||||
| } | ||||
| void Controller_NPad::OnRelease() {} | ||||
|  | ||||
| void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { | ||||
|     const auto controller_idx = NPadIdToIndex(npad_id); | ||||
| @@ -281,31 +276,27 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { | ||||
|     pad_state.d_down.Assign(button_state[DDown - BUTTON_HID_BEGIN]->GetStatus()); | ||||
|  | ||||
|     pad_state.l_stick_right.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]-> | ||||
|         GetAnalogDirectionStatus( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::RIGHT)); | ||||
|     pad_state.l_stick_left.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]-> | ||||
|         GetAnalogDirectionStatus( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::LEFT)); | ||||
|     pad_state.l_stick_up.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]-> | ||||
|         GetAnalogDirectionStatus( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::UP)); | ||||
|     pad_state.l_stick_down.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]-> | ||||
|         GetAnalogDirectionStatus( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | ||||
|             Input::AnalogDirection::DOWN)); | ||||
|  | ||||
|     pad_state.r_stick_right.Assign( | ||||
|         analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|         ->GetAnalogDirectionStatus(Input::AnalogDirection::RIGHT)); | ||||
|             ->GetAnalogDirectionStatus(Input::AnalogDirection::RIGHT)); | ||||
|     pad_state.r_stick_left.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|         ->GetAnalogDirectionStatus(Input::AnalogDirection::LEFT)); | ||||
|                                       ->GetAnalogDirectionStatus(Input::AnalogDirection::LEFT)); | ||||
|     pad_state.r_stick_up.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|         ->GetAnalogDirectionStatus(Input::AnalogDirection::UP)); | ||||
|                                     ->GetAnalogDirectionStatus(Input::AnalogDirection::UP)); | ||||
|     pad_state.r_stick_down.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | ||||
|         ->GetAnalogDirectionStatus(Input::AnalogDirection::DOWN)); | ||||
|                                       ->GetAnalogDirectionStatus(Input::AnalogDirection::DOWN)); | ||||
|  | ||||
|     pad_state.left_sl.Assign(button_state[SL - BUTTON_HID_BEGIN]->GetStatus()); | ||||
|     pad_state.left_sr.Assign(button_state[SR - BUTTON_HID_BEGIN]->GetStatus()); | ||||
| @@ -372,7 +363,7 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* | ||||
|  | ||||
|         switch (controller_type) { | ||||
|         case NPadControllerType::None: | ||||
|         UNREACHABLE(); | ||||
|             UNREACHABLE(); | ||||
|             break; | ||||
|         case NPadControllerType::Handheld: | ||||
|             handheld_entry.connection_status.raw = 0; | ||||
| @@ -468,9 +459,8 @@ void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) { | ||||
|             continue; | ||||
|         } | ||||
|         const auto requested_controller = | ||||
|             i <= MAX_NPAD_ID | ||||
|                 ? MapSettingsTypeToNPad(Settings::values.players[i].type) | ||||
|                 : NPadControllerType::Handheld; | ||||
|             i <= MAX_NPAD_ID ? MapSettingsTypeToNPad(Settings::values.players[i].type) | ||||
|                              : NPadControllerType::Handheld; | ||||
|         if (!IsControllerSupported(requested_controller)) { | ||||
|             const auto is_handheld = requested_controller == NPadControllerType::Handheld; | ||||
|             if (is_handheld) { | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| // Copyright 2014 Dolphin Emulator Project | ||||
| // Licensed under GPLv2+ | ||||
| // Refer to the license.txt file included. | ||||
| //* | ||||
|  | ||||
| #include "common/logging/log.h" | ||||
| #include "common/threadsafe_queue.h" | ||||
| #include "input_common/gcadapter/gc_adapter.h" | ||||
| @@ -45,35 +45,48 @@ GCPadStatus CheckStatus(int port, u8 adapter_payload[37]) { | ||||
|         u8 b1 = adapter_payload[1 + (9 * port) + 1]; | ||||
|         u8 b2 = adapter_payload[1 + (9 * port) + 2]; | ||||
|  | ||||
|         if (b1 & (1 << 0)) | ||||
|         if (b1 & (1 << 0)) { | ||||
|             pad.button |= PAD_BUTTON_A; | ||||
|         if (b1 & (1 << 1)) | ||||
|         } | ||||
|         if (b1 & (1 << 1)) { | ||||
|             pad.button |= PAD_BUTTON_B; | ||||
|         if (b1 & (1 << 2)) | ||||
|         } | ||||
|         if (b1 & (1 << 2)) { | ||||
|             pad.button |= PAD_BUTTON_X; | ||||
|         if (b1 & (1 << 3)) | ||||
|         } | ||||
|         if (b1 & (1 << 3)) { | ||||
|             pad.button |= PAD_BUTTON_Y; | ||||
|         } | ||||
|  | ||||
|         if (b1 & (1 << 4)) | ||||
|         if (b1 & (1 << 4)) { | ||||
|             pad.button |= PAD_BUTTON_LEFT; | ||||
|         if (b1 & (1 << 5)) | ||||
|         } | ||||
|         if (b1 & (1 << 5)) { | ||||
|             pad.button |= PAD_BUTTON_RIGHT; | ||||
|         if (b1 & (1 << 6)) | ||||
|         } | ||||
|         if (b1 & (1 << 6)) { | ||||
|             pad.button |= PAD_BUTTON_DOWN; | ||||
|         if (b1 & (1 << 7)) | ||||
|         } | ||||
|         if (b1 & (1 << 7)) { | ||||
|             pad.button |= PAD_BUTTON_UP; | ||||
|         } | ||||
|  | ||||
|         if (b2 & (1 << 0)) | ||||
|         if (b2 & (1 << 0)) { | ||||
|             pad.button |= PAD_BUTTON_START; | ||||
|         if (b2 & (1 << 1)) | ||||
|         } | ||||
|         if (b2 & (1 << 1)) { | ||||
|             pad.button |= PAD_TRIGGER_Z; | ||||
|         if (b2 & (1 << 2)) | ||||
|         } | ||||
|         if (b2 & (1 << 2)) { | ||||
|             pad.button |= PAD_TRIGGER_R; | ||||
|         if (b2 & (1 << 3)) | ||||
|         } | ||||
|         if (b2 & (1 << 3)) { | ||||
|             pad.button |= PAD_TRIGGER_L; | ||||
|         } | ||||
|  | ||||
|         if (get_origin) | ||||
|         if (get_origin) { | ||||
|             pad.button |= PAD_GET_ORIGIN; | ||||
|         } | ||||
|  | ||||
|         pad.stickX = adapter_payload[1 + (9 * port) + 3]; | ||||
|         pad.stickY = adapter_payload[1 + (9 * port) + 4]; | ||||
| @@ -86,7 +99,7 @@ GCPadStatus CheckStatus(int port, u8 adapter_payload[37]) { | ||||
| } | ||||
|  | ||||
| void PadToState(GCPadStatus pad, GCState& state) { | ||||
|     //std::lock_guard lock{s_mutex}; | ||||
|     // std::lock_guard lock{s_mutex}; | ||||
|     state.buttons.insert_or_assign(PAD_BUTTON_A, pad.button & PAD_BUTTON_A); | ||||
|     state.buttons.insert_or_assign(PAD_BUTTON_B, pad.button & PAD_BUTTON_B); | ||||
|     state.buttons.insert_or_assign(PAD_BUTTON_X, pad.button & PAD_BUTTON_X); | ||||
| @@ -137,8 +150,9 @@ static void Read() { | ||||
|         } | ||||
|         for (int port = 0; port < 4; port++) { | ||||
|             if (DeviceConnected(port) && configuring) { | ||||
|                 if (pad[port].button != PAD_GET_ORIGIN) | ||||
|                 if (pad[port].button != PAD_GET_ORIGIN) { | ||||
|                     pad_queue[port].Push(pad[port]); | ||||
|                 } | ||||
|  | ||||
|                 // Accounting for a threshold here because of some controller variance | ||||
|                 if (pad[port].stickX > pad[port].MAIN_STICK_CENTER_X + pad[port].THRESHOLD || | ||||
| @@ -186,8 +200,9 @@ static void ScanThreadFunc() { | ||||
|  | ||||
| void Init() { | ||||
|  | ||||
|     if (usb_adapter_handle != nullptr) | ||||
|     if (usb_adapter_handle != nullptr) { | ||||
|         return; | ||||
|     } | ||||
|     LOG_INFO(Input, "GC Adapter Initialization started"); | ||||
|  | ||||
|     current_status = NO_ADAPTER_DETECTED; | ||||
| @@ -197,10 +212,12 @@ void Init() { | ||||
| } | ||||
|  | ||||
| void StartScanThread() { | ||||
|     if (detect_thread_running) | ||||
|     if (detect_thread_running) { | ||||
|         return; | ||||
|     if (!libusb_ctx) | ||||
|     } | ||||
|     if (!libusb_ctx) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     detect_thread_running = true; | ||||
|     detect_thread = std::thread(ScanThreadFunc); | ||||
| @@ -212,15 +229,17 @@ void StopScanThread() { | ||||
|  | ||||
| static void Setup() { | ||||
|     // Reset the error status in case the adapter gets unplugged | ||||
|     if (current_status < 0) | ||||
|     if (current_status < 0) { | ||||
|         current_status = NO_ADAPTER_DETECTED; | ||||
|     } | ||||
|  | ||||
|     for (int i = 0; i < 4; i++) | ||||
|     for (int i = 0; i < 4; i++) { | ||||
|         adapter_controllers_status[i] = ControllerTypes::CONTROLLER_NONE; | ||||
|     } | ||||
|  | ||||
|     libusb_device** devs; // pointer to list of connected usb devices | ||||
|  | ||||
|     int cnt = libusb_get_device_list(libusb_ctx, &devs); //get the list of devices | ||||
|     int cnt = libusb_get_device_list(libusb_ctx, &devs); // get the list of devices | ||||
|  | ||||
|     for (int i = 0; i < cnt; i++) { | ||||
|         if (CheckDeviceAccess(devs[i])) { | ||||
| @@ -247,9 +266,8 @@ static bool CheckDeviceAccess(libusb_device* device) { | ||||
|     ret = libusb_open(device, &usb_adapter_handle); | ||||
|  | ||||
|     if (ret == LIBUSB_ERROR_ACCESS) { | ||||
|         LOG_ERROR(Input, | ||||
|             "Yuzu can not gain access to this device: ID %04X:%04X.", | ||||
|             desc.idVendor, desc.idProduct); | ||||
|         LOG_ERROR(Input, "Yuzu can not gain access to this device: ID %04X:%04X.", desc.idVendor, | ||||
|                   desc.idProduct); | ||||
|         return false; | ||||
|     } | ||||
|     if (ret) { | ||||
| @@ -260,8 +278,9 @@ static bool CheckDeviceAccess(libusb_device* device) { | ||||
|     ret = libusb_kernel_driver_active(usb_adapter_handle, 0); | ||||
|     if (ret == 1) { | ||||
|         ret = libusb_detach_kernel_driver(usb_adapter_handle, 0); | ||||
|         if (ret != 0 && ret != LIBUSB_ERROR_NOT_SUPPORTED) | ||||
|         if (ret != 0 && ret != LIBUSB_ERROR_NOT_SUPPORTED) { | ||||
|             LOG_ERROR(Input, "libusb_detach_kernel_driver failed with error = %d", ret); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (ret != 0 && ret != LIBUSB_ERROR_NOT_SUPPORTED) { | ||||
| @@ -290,8 +309,9 @@ static void GetGCEndpoint(libusb_device* device) { | ||||
|             const libusb_interface_descriptor* interface = &interfaceContainer->altsetting[i]; | ||||
|             for (u8 e = 0; e < interface->bNumEndpoints; e++) { | ||||
|                 const libusb_endpoint_descriptor* endpoint = &interface->endpoint[e]; | ||||
|                 if (endpoint->bEndpointAddress & LIBUSB_ENDPOINT_IN) | ||||
|                 if (endpoint->bEndpointAddress & LIBUSB_ENDPOINT_IN) { | ||||
|                     input_endpoint = endpoint->bEndpointAddress; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -311,16 +331,20 @@ void Shutdown() { | ||||
|  | ||||
| static void Reset() { | ||||
|     std::unique_lock<std::mutex> lock(initialization_mutex, std::defer_lock); | ||||
|     if (!lock.try_lock()) | ||||
|     if (!lock.try_lock()) { | ||||
|         return; | ||||
|     if (current_status != ADAPTER_DETECTED) | ||||
|     } | ||||
|     if (current_status != ADAPTER_DETECTED) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     if (adapter_thread_running) | ||||
|     if (adapter_thread_running) { | ||||
|         adapter_input_thread.join(); | ||||
|     } | ||||
|  | ||||
|     for (int i = 0; i < 4; i++) | ||||
|     for (int i = 0; i < 4; i++) { | ||||
|         adapter_controllers_status[i] = ControllerTypes::CONTROLLER_NONE; | ||||
|     } | ||||
|  | ||||
|     current_status = NO_ADAPTER_DETECTED; | ||||
|  | ||||
|   | ||||
| @@ -1,11 +1,14 @@ | ||||
| // Copyright 2014 Dolphin Emulator Project | ||||
| // Licensed under GPLv2+ | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
| #include <algorithm> | ||||
| #include <libusb.h> | ||||
| #include <mutex> | ||||
| #include <functional> | ||||
| #include <mutex> | ||||
| #include <libusb.h> | ||||
| #include "common/common_types.h" | ||||
|  | ||||
|  | ||||
| enum { | ||||
|     PAD_USE_ORIGIN = 0x0080, | ||||
|     PAD_GET_ORIGIN = 0x2000, | ||||
| @@ -61,13 +64,8 @@ struct GCState { | ||||
|     std::unordered_map<int, u16> axes; | ||||
| }; | ||||
|  | ||||
|  | ||||
| namespace GCAdapter { | ||||
| enum ControllerTypes { | ||||
|     CONTROLLER_NONE = 0, | ||||
|     CONTROLLER_WIRED = 1, | ||||
|     CONTROLLER_WIRELESS = 2 | ||||
| }; | ||||
| enum ControllerTypes { CONTROLLER_NONE = 0, CONTROLLER_WIRED = 1, CONTROLLER_WIRELESS = 2 }; | ||||
|  | ||||
| enum { | ||||
|     NO_ADAPTER_DETECTED = 0, | ||||
|   | ||||
| @@ -1,10 +1,14 @@ | ||||
| // Copyright 2020 yuzu Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #include <atomic> | ||||
| #include <list> | ||||
| #include <mutex> | ||||
| #include <utility> | ||||
| #include "input_common/gcadapter/gc_poller.h" | ||||
| #include "input_common/gcadapter/gc_adapter.h" | ||||
| #include "common/threadsafe_queue.h" | ||||
| #include "input_common/gcadapter/gc_adapter.h" | ||||
| #include "input_common/gcadapter/gc_poller.h" | ||||
|  | ||||
| // Using extern as to avoid multply defined symbols. | ||||
| extern Common::SPSCQueue<GCPadStatus> pad_queue[4]; | ||||
| @@ -14,9 +18,7 @@ namespace InputCommon { | ||||
|  | ||||
| class GCButton final : public Input::ButtonDevice { | ||||
| public: | ||||
|     explicit GCButton(int port_, int button_, int axis_) | ||||
|         : port(port_), button(button_) { | ||||
|     } | ||||
|     explicit GCButton(int port_, int button_, int axis_) : port(port_), button(button_) {} | ||||
|  | ||||
|     ~GCButton() override; | ||||
|  | ||||
| @@ -31,17 +33,14 @@ private: | ||||
|  | ||||
| class GCAxisButton final : public Input::ButtonDevice { | ||||
| public: | ||||
|     explicit GCAxisButton(int port_, int axis_, float threshold_, | ||||
|                           bool trigger_if_greater_) | ||||
|         : port(port_), axis(axis_), threshold(threshold_), | ||||
|           trigger_if_greater(trigger_if_greater_) { | ||||
|     explicit GCAxisButton(int port_, int axis_, float threshold_, bool trigger_if_greater_) | ||||
|         : port(port_), axis(axis_), threshold(threshold_), trigger_if_greater(trigger_if_greater_) { | ||||
|     } | ||||
|  | ||||
|  | ||||
|     bool GetStatus() const override { | ||||
|         const float axis_value = (state[port].axes.at(axis) - 128.0f) / 128.0f; | ||||
|         if (trigger_if_greater) { | ||||
|             return axis_value > 0.10f; //TODO(ameerj) : Fix threshold. | ||||
|             return axis_value > 0.10f; // TODO(ameerj) : Fix threshold. | ||||
|         } | ||||
|         return axis_value < -0.10f; | ||||
|     } | ||||
| @@ -164,29 +163,30 @@ Common::ParamPackage GCButtonFactory::GetNextInput() { | ||||
|  | ||||
| void GCButtonFactory::BeginConfiguration() { | ||||
|     polling = true; | ||||
|     for (int i = 0; i < 4; i++) | ||||
|     for (int i = 0; i < 4; i++) { | ||||
|         pad_queue[i].Clear(); | ||||
|     } | ||||
|     GCAdapter::BeginConfiguration(); | ||||
| } | ||||
|  | ||||
| void GCButtonFactory::EndConfiguration() { | ||||
|     polling = false; | ||||
|  | ||||
|     for (int i = 0; i < 4; i++) | ||||
|     for (int i = 0; i < 4; i++) { | ||||
|         pad_queue[i].Clear(); | ||||
|     } | ||||
|     GCAdapter::EndConfiguration(); | ||||
| } | ||||
|  | ||||
| class GCAnalog final : public Input::AnalogDevice { | ||||
| public: | ||||
|     GCAnalog(int port_, int axis_x_, int axis_y_, float deadzone_) | ||||
|         : port(port_), axis_x(axis_x_), axis_y(axis_y_), deadzone(deadzone_) { | ||||
|     } | ||||
|         : port(port_), axis_x(axis_x_), axis_y(axis_y_), deadzone(deadzone_) {} | ||||
|  | ||||
|     float GetAxis(int axis) const { | ||||
|         std::lock_guard lock{mutex}; | ||||
|         // division is not by a perfect 128 to account for some variance in center location | ||||
|         // e.g. my device idled at 131 in X, 120 in Y, and full range of motion was in range [20-230] | ||||
|         // e.g. my device idled at 131 in X, 120 in Y, and full range of motion was in range | ||||
|         // [20-230] | ||||
|         return (state[port].axes.at(axis) - 128.0f) / 95.0f; | ||||
|     } | ||||
|  | ||||
| @@ -240,18 +240,16 @@ private: | ||||
|     mutable std::mutex mutex; | ||||
| }; | ||||
|  | ||||
|  | ||||
| /// An analog device factory that creates analog devices from GC Adapter | ||||
| GCAnalogFactory::GCAnalogFactory() {}; | ||||
|  | ||||
| GCAnalogFactory::GCAnalogFactory(){}; | ||||
|  | ||||
| /** | ||||
| * Creates analog device from joystick axes | ||||
| * @param params contains parameters for creating the device: | ||||
| *     - "port": the nth gcpad on the adapter | ||||
| *     - "axis_x": the index of the axis to be bind as x-axis | ||||
| *     - "axis_y": the index of the axis to be bind as y-axis | ||||
| */ | ||||
|  * Creates analog device from joystick axes | ||||
|  * @param params contains parameters for creating the device: | ||||
|  *     - "port": the nth gcpad on the adapter | ||||
|  *     - "axis_x": the index of the axis to be bind as x-axis | ||||
|  *     - "axis_y": the index of the axis to be bind as y-axis | ||||
|  */ | ||||
| std::unique_ptr<Input::AnalogDevice> GCAnalogFactory::Create(const Common::ParamPackage& params) { | ||||
|     const std::string guid = params.Get("guid", "0"); | ||||
|     const int port = params.Get("port", 0); | ||||
| @@ -264,15 +262,17 @@ std::unique_ptr<Input::AnalogDevice> GCAnalogFactory::Create(const Common::Param | ||||
|  | ||||
| void GCAnalogFactory::BeginConfiguration() { | ||||
|     polling = true; | ||||
|     for (int i = 0; i < 4; i++) | ||||
|     for (int i = 0; i < 4; i++) { | ||||
|         pad_queue[i].Clear(); | ||||
|     } | ||||
|     GCAdapter::BeginConfiguration(); | ||||
| } | ||||
|  | ||||
| void GCAnalogFactory::EndConfiguration() { | ||||
|     polling = false; | ||||
|     for (int i = 0; i < 4; i++) | ||||
|     for (int i = 0; i < 4; i++) { | ||||
|         pad_queue[i].Clear(); | ||||
|     } | ||||
|     GCAdapter::EndConfiguration(); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,7 @@ | ||||
| // Copyright 2020 yuzu Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <memory> | ||||
| @@ -5,7 +9,6 @@ | ||||
|  | ||||
| namespace InputCommon { | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * A button device factory representing a gcpad. It receives gcpad events and forward them | ||||
|  * to all button devices it created. | ||||
|   | ||||
| @@ -7,8 +7,8 @@ | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include "input_common/gcadapter/gc_poller.h" | ||||
| #include "input_common/gcadapter/gc_adapter.h" | ||||
| #include "input_common/gcadapter/gc_poller.h" | ||||
|  | ||||
| namespace Common { | ||||
| class ParamPackage; | ||||
| @@ -38,7 +38,6 @@ class GCAnalogFactory; | ||||
| GCButtonFactory* GetGCButtons(); | ||||
| GCAnalogFactory* GetGCAnalogs(); | ||||
|  | ||||
|  | ||||
| /// Generates a serialized param package for creating a keyboard button device | ||||
| std::string GenerateKeyboardParam(int key_code); | ||||
|  | ||||
|   | ||||
| @@ -225,8 +225,7 @@ void TestCommunication(const std::string& host, u16 port, u8 pad_index, u32 clie | ||||
|         } else { | ||||
|             failure_callback(); | ||||
|         } | ||||
|     }) | ||||
|         .detach(); | ||||
|     }).detach(); | ||||
| } | ||||
|  | ||||
| CalibrationConfigurationJob::CalibrationConfigurationJob( | ||||
| @@ -280,8 +279,7 @@ CalibrationConfigurationJob::CalibrationConfigurationJob( | ||||
|         complete_event.Wait(); | ||||
|         socket.Stop(); | ||||
|         worker_thread.join(); | ||||
|     }) | ||||
|         .detach(); | ||||
|     }).detach(); | ||||
| } | ||||
|  | ||||
| CalibrationConfigurationJob::~CalibrationConfigurationJob() { | ||||
|   | ||||
| @@ -19,13 +19,13 @@ | ||||
| #include "yuzu/configuration/configure_input_player.h" | ||||
|  | ||||
| const std::array<std::string, ConfigureInputPlayer::ANALOG_SUB_BUTTONS_NUM> | ||||
| ConfigureInputPlayer::analog_sub_buttons{{ | ||||
|     "up", | ||||
|     "down", | ||||
|     "left", | ||||
|     "right", | ||||
|     "modifier", | ||||
| }}; | ||||
|     ConfigureInputPlayer::analog_sub_buttons{{ | ||||
|         "up", | ||||
|         "down", | ||||
|         "left", | ||||
|         "right", | ||||
|         "modifier", | ||||
|     }}; | ||||
|  | ||||
| static void LayerGridElements(QGridLayout* grid, QWidget* item, QWidget* onTopOf) { | ||||
|     const int index1 = grid->indexOf(item); | ||||
| @@ -151,13 +151,13 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|     setFocusPolicy(Qt::ClickFocus); | ||||
|  | ||||
|     button_map = { | ||||
|         ui->buttonA, ui->buttonB, ui->buttonX, ui->buttonY, | ||||
|         ui->buttonLStick, ui->buttonRStick, ui->buttonL, ui->buttonR, | ||||
|         ui->buttonZL, ui->buttonZR, ui->buttonPlus, ui->buttonMinus, | ||||
|         ui->buttonDpadLeft, ui->buttonDpadUp, ui->buttonDpadRight, ui->buttonDpadDown, | ||||
|         ui->buttonA,          ui->buttonB,        ui->buttonX,           ui->buttonY, | ||||
|         ui->buttonLStick,     ui->buttonRStick,   ui->buttonL,           ui->buttonR, | ||||
|         ui->buttonZL,         ui->buttonZR,       ui->buttonPlus,        ui->buttonMinus, | ||||
|         ui->buttonDpadLeft,   ui->buttonDpadUp,   ui->buttonDpadRight,   ui->buttonDpadDown, | ||||
|         ui->buttonLStickLeft, ui->buttonLStickUp, ui->buttonLStickRight, ui->buttonLStickDown, | ||||
|         ui->buttonRStickLeft, ui->buttonRStickUp, ui->buttonRStickRight, ui->buttonRStickDown, | ||||
|         ui->buttonSL, ui->buttonSR, ui->buttonHome, ui->buttonScreenshot, | ||||
|         ui->buttonSL,         ui->buttonSR,       ui->buttonHome,        ui->buttonScreenshot, | ||||
|     }; | ||||
|  | ||||
|     analog_map_buttons = {{ | ||||
| @@ -178,11 +178,11 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|     }}; | ||||
|  | ||||
|     debug_hidden = { | ||||
|         ui->buttonSL, ui->labelSL, | ||||
|         ui->buttonSR, ui->labelSR, | ||||
|         ui->buttonLStick, ui->labelLStickPressed, | ||||
|         ui->buttonRStick, ui->labelRStickPressed, | ||||
|         ui->buttonHome, ui->labelHome, | ||||
|         ui->buttonSL,         ui->labelSL, | ||||
|         ui->buttonSR,         ui->labelSR, | ||||
|         ui->buttonLStick,     ui->labelLStickPressed, | ||||
|         ui->buttonRStick,     ui->labelRStickPressed, | ||||
|         ui->buttonHome,       ui->labelHome, | ||||
|         ui->buttonScreenshot, ui->labelScreenshot, | ||||
|     }; | ||||
|  | ||||
| @@ -221,12 +221,12 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|     case Settings::ControllerType::RightJoycon: | ||||
|         layout_hidden = { | ||||
|             ui->left_body_button, ui->left_buttons_button, | ||||
|             ui->left_body_label, ui->left_buttons_label, | ||||
|             ui->buttonL, ui->labelL, | ||||
|             ui->buttonZL, ui->labelZL, | ||||
|             ui->labelScreenshot, ui->buttonScreenshot, | ||||
|             ui->buttonMinus, ui->labelMinus, | ||||
|             ui->LStick, ui->Dpad, | ||||
|             ui->left_body_label,  ui->left_buttons_label, | ||||
|             ui->buttonL,          ui->labelL, | ||||
|             ui->buttonZL,         ui->labelZL, | ||||
|             ui->labelScreenshot,  ui->buttonScreenshot, | ||||
|             ui->buttonMinus,      ui->labelMinus, | ||||
|             ui->LStick,           ui->Dpad, | ||||
|         }; | ||||
|         break; | ||||
|     } | ||||
| @@ -261,38 +261,34 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|         } | ||||
|  | ||||
|         button->setContextMenuPolicy(Qt::CustomContextMenu); | ||||
|         connect(button, &QPushButton::clicked, [=] | ||||
|         { | ||||
|             HandleClick(button_map[button_id], | ||||
|                         [=](Common::ParamPackage params) | ||||
|                         { | ||||
|                             // Workaround for ZL & ZR for analog triggers like on XBOX controllors. | ||||
|                             // Analog triggers (from controllers like the XBOX controller) would not | ||||
|                             // work due to a different range of their signals (from 0 to 255 on | ||||
|                             // analog triggers instead of -32768 to 32768 on analog joysticks). The | ||||
|                             // SDL driver misinterprets analog triggers as analog joysticks. | ||||
|                             // TODO: reinterpret the signal range for analog triggers to map the | ||||
|                             // values correctly. This is required for the correct emulation of the | ||||
|                             // analog triggers of the GameCube controller. | ||||
|                             if (button_id == Settings::NativeButton::ZL || | ||||
|                                 button_id == Settings::NativeButton::ZR) { | ||||
|                                 params.Set("direction", "+"); | ||||
|                                 params.Set("threshold", "0.5"); | ||||
|                             } | ||||
|                             buttons_param[button_id] = std::move(params); | ||||
|                         }, | ||||
|                         InputCommon::Polling::DeviceType::Button); | ||||
|         connect(button, &QPushButton::clicked, [=] { | ||||
|             HandleClick( | ||||
|                 button_map[button_id], | ||||
|                 [=](Common::ParamPackage params) { | ||||
|                     // Workaround for ZL & ZR for analog triggers like on XBOX controllors. | ||||
|                     // Analog triggers (from controllers like the XBOX controller) would not | ||||
|                     // work due to a different range of their signals (from 0 to 255 on | ||||
|                     // analog triggers instead of -32768 to 32768 on analog joysticks). The | ||||
|                     // SDL driver misinterprets analog triggers as analog joysticks. | ||||
|                     // TODO: reinterpret the signal range for analog triggers to map the | ||||
|                     // values correctly. This is required for the correct emulation of the | ||||
|                     // analog triggers of the GameCube controller. | ||||
|                     if (button_id == Settings::NativeButton::ZL || | ||||
|                         button_id == Settings::NativeButton::ZR) { | ||||
|                         params.Set("direction", "+"); | ||||
|                         params.Set("threshold", "0.5"); | ||||
|                     } | ||||
|                     buttons_param[button_id] = std::move(params); | ||||
|                 }, | ||||
|                 InputCommon::Polling::DeviceType::Button); | ||||
|         }); | ||||
|         connect(button, &QPushButton::customContextMenuRequested, [=](const QPoint& menu_location) | ||||
|         { | ||||
|         connect(button, &QPushButton::customContextMenuRequested, [=](const QPoint& menu_location) { | ||||
|             QMenu context_menu; | ||||
|             context_menu.addAction(tr("Clear"), [&] | ||||
|             { | ||||
|             context_menu.addAction(tr("Clear"), [&] { | ||||
|                 buttons_param[button_id].Clear(); | ||||
|                 button_map[button_id]->setText(tr("[not set]")); | ||||
|             }); | ||||
|             context_menu.addAction(tr("Restore Default"), [&] | ||||
|             { | ||||
|             context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                 buttons_param[button_id] = Common::ParamPackage{ | ||||
|                     InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; | ||||
|                 button_map[button_id]->setText(ButtonToText(buttons_param[button_id])); | ||||
| @@ -309,27 +305,23 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|             } | ||||
|  | ||||
|             analog_button->setContextMenuPolicy(Qt::CustomContextMenu); | ||||
|             connect(analog_button, &QPushButton::clicked, [=]() | ||||
|             { | ||||
|                 HandleClick(analog_map_buttons[analog_id][sub_button_id], | ||||
|                             [=](const Common::ParamPackage& params) | ||||
|                             { | ||||
|                                 SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                                 analog_sub_buttons[sub_button_id]); | ||||
|                             }, | ||||
|                             InputCommon::Polling::DeviceType::Button); | ||||
|             connect(analog_button, &QPushButton::clicked, [=]() { | ||||
|                 HandleClick( | ||||
|                     analog_map_buttons[analog_id][sub_button_id], | ||||
|                     [=](const Common::ParamPackage& params) { | ||||
|                         SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                         analog_sub_buttons[sub_button_id]); | ||||
|                     }, | ||||
|                     InputCommon::Polling::DeviceType::Button); | ||||
|             }); | ||||
|             connect(analog_button, &QPushButton::customContextMenuRequested, | ||||
|                     [=](const QPoint& menu_location) | ||||
|                     { | ||||
|                     [=](const QPoint& menu_location) { | ||||
|                         QMenu context_menu; | ||||
|                         context_menu.addAction(tr("Clear"), [&] | ||||
|                         { | ||||
|                         context_menu.addAction(tr("Clear"), [&] { | ||||
|                             analogs_param[analog_id].Erase(analog_sub_buttons[sub_button_id]); | ||||
|                             analog_map_buttons[analog_id][sub_button_id]->setText(tr("[not set]")); | ||||
|                         }); | ||||
|                         context_menu.addAction(tr("Restore Default"), [&] | ||||
|                         { | ||||
|                         context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                             Common::ParamPackage params{InputCommon::GenerateKeyboardParam( | ||||
|                                 Config::default_analogs[analog_id][sub_button_id])}; | ||||
|                             SetAnalogButton(params, analogs_param[analog_id], | ||||
| @@ -341,12 +333,11 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|                             menu_location)); | ||||
|                     }); | ||||
|         } | ||||
|         connect(analog_map_stick[analog_id], &QPushButton::clicked, [=] | ||||
|         { | ||||
|         connect(analog_map_stick[analog_id], &QPushButton::clicked, [=] { | ||||
|             if (QMessageBox::information( | ||||
|                     this, tr("Information"), | ||||
|                     tr("After pressing OK, first move your joystick horizontally, " | ||||
|                         "and then vertically."), | ||||
|                        "and then vertically."), | ||||
|                     QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) { | ||||
|                 HandleClick( | ||||
|                     analog_map_stick[analog_id], | ||||
| @@ -355,8 +346,7 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         connect(analog_map_deadzone_and_modifier_slider[analog_id], &QSlider::valueChanged, [=] | ||||
|         { | ||||
|         connect(analog_map_deadzone_and_modifier_slider[analog_id], &QSlider::valueChanged, [=] { | ||||
|             const float slider_value = analog_map_deadzone_and_modifier_slider[analog_id]->value(); | ||||
|             if (analogs_param[analog_id].Get("engine", "") == "sdl" || | ||||
|                 analogs_param[analog_id].Get("engine", "") == "gcpad") { | ||||
| @@ -377,8 +367,7 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|     timeout_timer->setSingleShot(true); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, [this] { SetPollingResult({}, true); }); | ||||
|  | ||||
|     connect(poll_timer.get(), &QTimer::timeout, [this] | ||||
|     { | ||||
|     connect(poll_timer.get(), &QTimer::timeout, [this] { | ||||
|         Common::ParamPackage params; | ||||
|         if (InputCommon::GetGCButtons()->IsPolling()) { | ||||
|             params = InputCommon::GetGCButtons()->GetNextInput(); | ||||
| @@ -505,7 +494,7 @@ void ConfigureInputPlayer::LoadConfiguration() { | ||||
|     for (std::size_t i = 0; i < colors.size(); ++i) { | ||||
|         controller_color_buttons[i]->setStyleSheet( | ||||
|             QStringLiteral("QPushButton { background-color: %1 }") | ||||
|             .arg(controller_colors[i].name())); | ||||
|                 .arg(controller_colors[i].name())); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -625,10 +614,11 @@ void ConfigureInputPlayer::HandleClick( | ||||
|  | ||||
|     grabKeyboard(); | ||||
|     grabMouse(); | ||||
|     if (type == InputCommon::Polling::DeviceType::Button) | ||||
|     if (type == InputCommon::Polling::DeviceType::Button) { | ||||
|         InputCommon::GetGCButtons()->BeginConfiguration(); | ||||
|     else | ||||
|     } else { | ||||
|         InputCommon::GetGCAnalogs()->BeginConfiguration(); | ||||
|     } | ||||
|     timeout_timer->start(5000); // Cancel after 5 seconds | ||||
|     poll_timer->start(200);     // Check for new inputs every 200ms | ||||
| } | ||||
|   | ||||
| @@ -31,7 +31,7 @@ class ConfigureInputPlayer; | ||||
| } | ||||
|  | ||||
| class ConfigureInputPlayer : public QDialog { | ||||
| Q_OBJECT | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit ConfigureInputPlayer(QWidget* parent, std::size_t player_index, bool debug = false); | ||||
| @@ -92,15 +92,15 @@ private: | ||||
|     /// A group of five QPushButtons represent one analog input. The buttons each represent up, | ||||
|     /// down, left, right, and modifier, respectively. | ||||
|     std::array<std::array<QPushButton*, ANALOG_SUB_BUTTONS_NUM>, Settings::NativeAnalog::NumAnalogs> | ||||
|     analog_map_buttons; | ||||
|         analog_map_buttons; | ||||
|  | ||||
|     /// Analog inputs are also represented each with a single button, used to configure with an | ||||
|     /// actual analog stick | ||||
|     std::array<QPushButton*, Settings::NativeAnalog::NumAnalogs> analog_map_stick; | ||||
|     std::array<QSlider*, Settings::NativeAnalog::NumAnalogs> | ||||
|     analog_map_deadzone_and_modifier_slider; | ||||
|         analog_map_deadzone_and_modifier_slider; | ||||
|     std::array<QLabel*, Settings::NativeAnalog::NumAnalogs> | ||||
|     analog_map_deadzone_and_modifier_slider_label; | ||||
|         analog_map_deadzone_and_modifier_slider_label; | ||||
|  | ||||
|     static const std::array<std::string, ANALOG_SUB_BUTTONS_NUM> analog_sub_buttons; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user