diff options
Diffstat (limited to 'src/input_common/gcadapter/gc_adapter.h')
| -rw-r--r-- | src/input_common/gcadapter/gc_adapter.h | 44 |
1 files changed, 6 insertions, 38 deletions
diff --git a/src/input_common/gcadapter/gc_adapter.h b/src/input_common/gcadapter/gc_adapter.h index 3586c8bda..bed81915c 100644 --- a/src/input_common/gcadapter/gc_adapter.h +++ b/src/input_common/gcadapter/gc_adapter.h | |||
| @@ -47,24 +47,10 @@ enum class PadAxes : u8 { | |||
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | struct GCPadStatus { | 49 | struct GCPadStatus { |
| 50 | u16 button{}; // Or-ed PAD_BUTTON_* and PAD_TRIGGER_* bits | 50 | u16 button{}; // Or-ed PAD_BUTTON_* and PAD_TRIGGER_* bits |
| 51 | u8 stick_x{}; // 0 <= stick_x <= 255 | 51 | |
| 52 | u8 stick_y{}; // 0 <= stick_y <= 255 | 52 | std::array<u8, 6> axis_values{}; // Triggers and sticks, following indices defined in PadAxes |
| 53 | u8 substick_x{}; // 0 <= substick_x <= 255 | 53 | static constexpr u8 THRESHOLD = 50; // Threshold for axis press for polling |
| 54 | u8 substick_y{}; // 0 <= substick_y <= 255 | ||
| 55 | u8 trigger_left{}; // 0 <= trigger_left <= 255 | ||
| 56 | u8 trigger_right{}; // 0 <= trigger_right <= 255 | ||
| 57 | |||
| 58 | static constexpr u8 MAIN_STICK_CENTER_X = 0x80; | ||
| 59 | static constexpr u8 MAIN_STICK_CENTER_Y = 0x80; | ||
| 60 | static constexpr u8 MAIN_STICK_RADIUS = 0x7f; | ||
| 61 | static constexpr u8 C_STICK_CENTER_X = 0x80; | ||
| 62 | static constexpr u8 C_STICK_CENTER_Y = 0x80; | ||
| 63 | static constexpr u8 C_STICK_RADIUS = 0x7f; | ||
| 64 | static constexpr u8 THRESHOLD = 10; | ||
| 65 | |||
| 66 | // 256/4, at least a quarter press to count as a press. For polling mostly | ||
| 67 | static constexpr u8 TRIGGER_THRESHOLD = 64; | ||
| 68 | 54 | ||
| 69 | u8 port{}; | 55 | u8 port{}; |
| 70 | PadAxes axis{PadAxes::Undefined}; | 56 | PadAxes axis{PadAxes::Undefined}; |
| @@ -78,11 +64,6 @@ struct GCState { | |||
| 78 | 64 | ||
| 79 | enum class ControllerTypes { None, Wired, Wireless }; | 65 | enum class ControllerTypes { None, Wired, Wireless }; |
| 80 | 66 | ||
| 81 | enum { | ||
| 82 | NO_ADAPTER_DETECTED = 0, | ||
| 83 | ADAPTER_DETECTED = 1, | ||
| 84 | }; | ||
| 85 | |||
| 86 | class Adapter { | 67 | class Adapter { |
| 87 | public: | 68 | public: |
| 88 | /// Initialize the GC Adapter capture and read sequence | 69 | /// Initialize the GC Adapter capture and read sequence |
| @@ -111,12 +92,6 @@ private: | |||
| 111 | void PadToState(const GCPadStatus& pad, GCState& state); | 92 | void PadToState(const GCPadStatus& pad, GCState& state); |
| 112 | 93 | ||
| 113 | void Read(); | 94 | void Read(); |
| 114 | void ScanThreadFunc(); | ||
| 115 | /// Begin scanning for the GC Adapter. | ||
| 116 | void StartScanThread(); | ||
| 117 | |||
| 118 | /// Stop scanning for the adapter | ||
| 119 | void StopScanThread(); | ||
| 120 | 95 | ||
| 121 | /// Resets status of device connected to port | 96 | /// Resets status of device connected to port |
| 122 | void ResetDeviceType(std::size_t port); | 97 | void ResetDeviceType(std::size_t port); |
| @@ -133,19 +108,11 @@ private: | |||
| 133 | /// For use in initialization, querying devices to find the adapter | 108 | /// For use in initialization, querying devices to find the adapter |
| 134 | void Setup(); | 109 | void Setup(); |
| 135 | 110 | ||
| 136 | int current_status = NO_ADAPTER_DETECTED; | ||
| 137 | libusb_device_handle* usb_adapter_handle = nullptr; | 111 | libusb_device_handle* usb_adapter_handle = nullptr; |
| 138 | std::array<ControllerTypes, 4> adapter_controllers_status{}; | ||
| 139 | |||
| 140 | std::mutex s_mutex; | ||
| 141 | 112 | ||
| 142 | std::thread adapter_input_thread; | 113 | std::thread adapter_input_thread; |
| 143 | bool adapter_thread_running; | 114 | bool adapter_thread_running; |
| 144 | 115 | ||
| 145 | std::mutex initialization_mutex; | ||
| 146 | std::thread detect_thread; | ||
| 147 | bool detect_thread_running = false; | ||
| 148 | |||
| 149 | libusb_context* libusb_ctx; | 116 | libusb_context* libusb_ctx; |
| 150 | 117 | ||
| 151 | u8 input_endpoint = 0; | 118 | u8 input_endpoint = 0; |
| @@ -153,10 +120,11 @@ private: | |||
| 153 | 120 | ||
| 154 | bool configuring = false; | 121 | bool configuring = false; |
| 155 | 122 | ||
| 156 | std::array<Common::SPSCQueue<GCPadStatus>, 4> pad_queue; | ||
| 157 | std::array<GCState, 4> state; | 123 | std::array<GCState, 4> state; |
| 158 | std::array<bool, 4> get_origin; | 124 | std::array<bool, 4> get_origin; |
| 159 | std::array<GCPadStatus, 4> origin_status; | 125 | std::array<GCPadStatus, 4> origin_status; |
| 126 | std::array<Common::SPSCQueue<GCPadStatus>, 4> pad_queue; | ||
| 127 | std::array<ControllerTypes, 4> adapter_controllers_status{}; | ||
| 160 | }; | 128 | }; |
| 161 | 129 | ||
| 162 | } // namespace GCAdapter | 130 | } // namespace GCAdapter |