summaryrefslogtreecommitdiff
path: root/src/input_common/main.cpp
diff options
context:
space:
mode:
authorGravatar german772021-09-20 17:18:40 -0500
committerGravatar Narr the Reg2021-11-24 20:30:22 -0600
commit5a785ed794fff8c944283271bf25cb835c11700a (patch)
treedc99f3fb595a57e9629661d3002dad724914275b /src/input_common/main.cpp
parentinput_common: Move touch and analog from button. Move udp protocol (diff)
downloadyuzu-5a785ed794fff8c944283271bf25cb835c11700a.tar.gz
yuzu-5a785ed794fff8c944283271bf25cb835c11700a.tar.xz
yuzu-5a785ed794fff8c944283271bf25cb835c11700a.zip
input_common: Rewrite keyboard
Diffstat (limited to 'src/input_common/main.cpp')
-rw-r--r--src/input_common/main.cpp263
1 files changed, 3 insertions, 260 deletions
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp
index 7a5c29b40..da501b6cc 100644
--- a/src/input_common/main.cpp
+++ b/src/input_common/main.cpp
@@ -6,17 +6,7 @@
6#include <thread> 6#include <thread>
7#include "common/param_package.h" 7#include "common/param_package.h"
8#include "common/settings.h" 8#include "common/settings.h"
9#include "input_common/gcadapter/gc_adapter.h"
10#include "input_common/gcadapter/gc_poller.h"
11#include "input_common/keyboard.h"
12#include "input_common/main.h" 9#include "input_common/main.h"
13#include "input_common/motion_from_button.h"
14#include "input_common/mouse/mouse_input.h"
15#include "input_common/mouse/mouse_poller.h"
16#include "input_common/tas/tas_input.h"
17#include "input_common/tas/tas_poller.h"
18#include "input_common/udp/client.h"
19#include "input_common/udp/udp.h"
20#ifdef HAVE_SDL2 10#ifdef HAVE_SDL2
21#include "input_common/sdl/sdl.h" 11#include "input_common/sdl/sdl.h"
22#endif 12#endif
@@ -25,82 +15,9 @@ namespace InputCommon {
25 15
26struct InputSubsystem::Impl { 16struct InputSubsystem::Impl {
27 void Initialize() { 17 void Initialize() {
28 gcadapter = std::make_shared<GCAdapter::Adapter>();
29 gcbuttons = std::make_shared<GCButtonFactory>(gcadapter);
30 Input::RegisterFactory<Input::ButtonDevice>("gcpad", gcbuttons);
31 gcanalog = std::make_shared<GCAnalogFactory>(gcadapter);
32 Input::RegisterFactory<Input::AnalogDevice>("gcpad", gcanalog);
33 gcvibration = std::make_shared<GCVibrationFactory>(gcadapter);
34 Input::RegisterFactory<Input::VibrationDevice>("gcpad", gcvibration);
35
36 keyboard = std::make_shared<Keyboard>();
37 Input::RegisterFactory<Input::ButtonDevice>("keyboard", keyboard);
38 Input::RegisterFactory<Input::MotionDevice>("keyboard",
39 std::make_shared<MotionFromButton>());
40
41#ifdef HAVE_SDL2
42 sdl = SDL::Init();
43#endif
44
45 udp = std::make_shared<InputCommon::CemuhookUDP::Client>();
46 udpmotion = std::make_shared<UDPMotionFactory>(udp);
47 Input::RegisterFactory<Input::MotionDevice>("cemuhookudp", udpmotion);
48 udptouch = std::make_shared<UDPTouchFactory>(udp);
49 Input::RegisterFactory<Input::TouchDevice>("cemuhookudp", udptouch);
50
51 mouse = std::make_shared<MouseInput::Mouse>();
52 mousebuttons = std::make_shared<MouseButtonFactory>(mouse);
53 Input::RegisterFactory<Input::ButtonDevice>("mouse", mousebuttons);
54 mouseanalog = std::make_shared<MouseAnalogFactory>(mouse);
55 Input::RegisterFactory<Input::AnalogDevice>("mouse", mouseanalog);
56 mousemotion = std::make_shared<MouseMotionFactory>(mouse);
57 Input::RegisterFactory<Input::MotionDevice>("mouse", mousemotion);
58 mousetouch = std::make_shared<MouseTouchFactory>(mouse);
59 Input::RegisterFactory<Input::TouchDevice>("mouse", mousetouch);
60
61 tas = std::make_shared<TasInput::Tas>();
62 tasbuttons = std::make_shared<TasButtonFactory>(tas);
63 Input::RegisterFactory<Input::ButtonDevice>("tas", tasbuttons);
64 tasanalog = std::make_shared<TasAnalogFactory>(tas);
65 Input::RegisterFactory<Input::AnalogDevice>("tas", tasanalog);
66 } 18 }
67 19
68 void Shutdown() { 20 void Shutdown() {
69 Input::UnregisterFactory<Input::ButtonDevice>("keyboard");
70 Input::UnregisterFactory<Input::MotionDevice>("keyboard");
71 keyboard.reset();
72#ifdef HAVE_SDL2
73 sdl.reset();
74#endif
75 Input::UnregisterFactory<Input::ButtonDevice>("gcpad");
76 Input::UnregisterFactory<Input::AnalogDevice>("gcpad");
77 Input::UnregisterFactory<Input::VibrationDevice>("gcpad");
78
79 gcbuttons.reset();
80 gcanalog.reset();
81 gcvibration.reset();
82
83 Input::UnregisterFactory<Input::MotionDevice>("cemuhookudp");
84 Input::UnregisterFactory<Input::TouchDevice>("cemuhookudp");
85
86 udpmotion.reset();
87 udptouch.reset();
88
89 Input::UnregisterFactory<Input::ButtonDevice>("mouse");
90 Input::UnregisterFactory<Input::AnalogDevice>("mouse");
91 Input::UnregisterFactory<Input::MotionDevice>("mouse");
92 Input::UnregisterFactory<Input::TouchDevice>("mouse");
93
94 mousebuttons.reset();
95 mouseanalog.reset();
96 mousemotion.reset();
97 mousetouch.reset();
98
99 Input::UnregisterFactory<Input::ButtonDevice>("tas");
100 Input::UnregisterFactory<Input::AnalogDevice>("tas");
101
102 tasbuttons.reset();
103 tasanalog.reset();
104 } 21 }
105 22
106 [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const { 23 [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const {
@@ -108,19 +25,7 @@ struct InputSubsystem::Impl {
108 Common::ParamPackage{{"display", "Any"}, {"class", "any"}}, 25 Common::ParamPackage{{"display", "Any"}, {"class", "any"}},
109 Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "keyboard"}}, 26 Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "keyboard"}},
110 }; 27 };
111 if (Settings::values.tas_enable) { 28 return {};
112 devices.emplace_back(
113 Common::ParamPackage{{"display", "TAS Controller"}, {"class", "tas"}});
114 }
115#ifdef HAVE_SDL2
116 auto sdl_devices = sdl->GetInputDevices();
117 devices.insert(devices.end(), sdl_devices.begin(), sdl_devices.end());
118#endif
119 auto udp_devices = udp->GetInputDevices();
120 devices.insert(devices.end(), udp_devices.begin(), udp_devices.end());
121 auto gcpad_devices = gcadapter->GetInputDevices();
122 devices.insert(devices.end(), gcpad_devices.begin(), gcpad_devices.end());
123 return devices;
124 } 29 }
125 30
126 [[nodiscard]] AnalogMapping GetAnalogMappingForDevice( 31 [[nodiscard]] AnalogMapping GetAnalogMappingForDevice(
@@ -128,17 +33,6 @@ struct InputSubsystem::Impl {
128 if (!params.Has("class") || params.Get("class", "") == "any") { 33 if (!params.Has("class") || params.Get("class", "") == "any") {
129 return {}; 34 return {};
130 } 35 }
131 if (params.Get("class", "") == "gcpad") {
132 return gcadapter->GetAnalogMappingForDevice(params);
133 }
134 if (params.Get("class", "") == "tas") {
135 return tas->GetAnalogMappingForDevice(params);
136 }
137#ifdef HAVE_SDL2
138 if (params.Get("class", "") == "sdl") {
139 return sdl->GetAnalogMappingForDevice(params);
140 }
141#endif
142 return {}; 36 return {};
143 } 37 }
144 38
@@ -147,17 +41,6 @@ struct InputSubsystem::Impl {
147 if (!params.Has("class") || params.Get("class", "") == "any") { 41 if (!params.Has("class") || params.Get("class", "") == "any") {
148 return {}; 42 return {};
149 } 43 }
150 if (params.Get("class", "") == "gcpad") {
151 return gcadapter->GetButtonMappingForDevice(params);
152 }
153 if (params.Get("class", "") == "tas") {
154 return tas->GetButtonMappingForDevice(params);
155 }
156#ifdef HAVE_SDL2
157 if (params.Get("class", "") == "sdl") {
158 return sdl->GetButtonMappingForDevice(params);
159 }
160#endif
161 return {}; 44 return {};
162 } 45 }
163 46
@@ -166,37 +49,9 @@ struct InputSubsystem::Impl {
166 if (!params.Has("class") || params.Get("class", "") == "any") { 49 if (!params.Has("class") || params.Get("class", "") == "any") {
167 return {}; 50 return {};
168 } 51 }
169 if (params.Get("class", "") == "cemuhookudp") {
170 // TODO return the correct motion device
171 return {};
172 }
173#ifdef HAVE_SDL2
174 if (params.Get("class", "") == "sdl") {
175 return sdl->GetMotionMappingForDevice(params);
176 }
177#endif
178 return {}; 52 return {};
179 } 53 }
180 54
181 std::shared_ptr<Keyboard> keyboard;
182#ifdef HAVE_SDL2
183 std::unique_ptr<SDL::State> sdl;
184#endif
185 std::shared_ptr<GCButtonFactory> gcbuttons;
186 std::shared_ptr<GCAnalogFactory> gcanalog;
187 std::shared_ptr<GCVibrationFactory> gcvibration;
188 std::shared_ptr<UDPMotionFactory> udpmotion;
189 std::shared_ptr<UDPTouchFactory> udptouch;
190 std::shared_ptr<MouseButtonFactory> mousebuttons;
191 std::shared_ptr<MouseAnalogFactory> mouseanalog;
192 std::shared_ptr<MouseMotionFactory> mousemotion;
193 std::shared_ptr<MouseTouchFactory> mousetouch;
194 std::shared_ptr<TasButtonFactory> tasbuttons;
195 std::shared_ptr<TasAnalogFactory> tasanalog;
196 std::shared_ptr<CemuhookUDP::Client> udp;
197 std::shared_ptr<GCAdapter::Adapter> gcadapter;
198 std::shared_ptr<MouseInput::Mouse> mouse;
199 std::shared_ptr<TasInput::Tas> tas;
200}; 55};
201 56
202InputSubsystem::InputSubsystem() : impl{std::make_unique<Impl>()} {} 57InputSubsystem::InputSubsystem() : impl{std::make_unique<Impl>()} {}
@@ -211,30 +66,6 @@ void InputSubsystem::Shutdown() {
211 impl->Shutdown(); 66 impl->Shutdown();
212} 67}
213 68
214Keyboard* InputSubsystem::GetKeyboard() {
215 return impl->keyboard.get();
216}
217
218const Keyboard* InputSubsystem::GetKeyboard() const {
219 return impl->keyboard.get();
220}
221
222MouseInput::Mouse* InputSubsystem::GetMouse() {
223 return impl->mouse.get();
224}
225
226const MouseInput::Mouse* InputSubsystem::GetMouse() const {
227 return impl->mouse.get();
228}
229
230TasInput::Tas* InputSubsystem::GetTas() {
231 return impl->tas.get();
232}
233
234const TasInput::Tas* InputSubsystem::GetTas() const {
235 return impl->tas.get();
236}
237
238std::vector<Common::ParamPackage> InputSubsystem::GetInputDevices() const { 69std::vector<Common::ParamPackage> InputSubsystem::GetInputDevices() const {
239 return impl->GetInputDevices(); 70 return impl->GetInputDevices();
240} 71}
@@ -251,100 +82,12 @@ MotionMapping InputSubsystem::GetMotionMappingForDevice(const Common::ParamPacka
251 return impl->GetMotionMappingForDevice(device); 82 return impl->GetMotionMappingForDevice(device);
252} 83}
253 84
254GCAnalogFactory* InputSubsystem::GetGCAnalogs() {
255 return impl->gcanalog.get();
256}
257
258const GCAnalogFactory* InputSubsystem::GetGCAnalogs() const {
259 return impl->gcanalog.get();
260}
261
262GCButtonFactory* InputSubsystem::GetGCButtons() {
263 return impl->gcbuttons.get();
264}
265
266const GCButtonFactory* InputSubsystem::GetGCButtons() const {
267 return impl->gcbuttons.get();
268}
269
270UDPMotionFactory* InputSubsystem::GetUDPMotions() {
271 return impl->udpmotion.get();
272}
273
274const UDPMotionFactory* InputSubsystem::GetUDPMotions() const {
275 return impl->udpmotion.get();
276}
277
278UDPTouchFactory* InputSubsystem::GetUDPTouch() {
279 return impl->udptouch.get();
280}
281
282const UDPTouchFactory* InputSubsystem::GetUDPTouch() const {
283 return impl->udptouch.get();
284}
285
286MouseButtonFactory* InputSubsystem::GetMouseButtons() {
287 return impl->mousebuttons.get();
288}
289
290const MouseButtonFactory* InputSubsystem::GetMouseButtons() const {
291 return impl->mousebuttons.get();
292}
293
294MouseAnalogFactory* InputSubsystem::GetMouseAnalogs() {
295 return impl->mouseanalog.get();
296}
297
298const MouseAnalogFactory* InputSubsystem::GetMouseAnalogs() const {
299 return impl->mouseanalog.get();
300}
301
302MouseMotionFactory* InputSubsystem::GetMouseMotions() {
303 return impl->mousemotion.get();
304}
305
306const MouseMotionFactory* InputSubsystem::GetMouseMotions() const {
307 return impl->mousemotion.get();
308}
309
310MouseTouchFactory* InputSubsystem::GetMouseTouch() {
311 return impl->mousetouch.get();
312}
313
314const MouseTouchFactory* InputSubsystem::GetMouseTouch() const {
315 return impl->mousetouch.get();
316}
317
318TasButtonFactory* InputSubsystem::GetTasButtons() {
319 return impl->tasbuttons.get();
320}
321
322const TasButtonFactory* InputSubsystem::GetTasButtons() const {
323 return impl->tasbuttons.get();
324}
325
326TasAnalogFactory* InputSubsystem::GetTasAnalogs() {
327 return impl->tasanalog.get();
328}
329
330const TasAnalogFactory* InputSubsystem::GetTasAnalogs() const {
331 return impl->tasanalog.get();
332}
333
334void InputSubsystem::ReloadInputDevices() { 85void InputSubsystem::ReloadInputDevices() {
335 if (!impl->udp) {
336 return;
337 }
338 impl->udp->ReloadSockets();
339} 86}
340 87
341std::vector<std::unique_ptr<Polling::DevicePoller>> InputSubsystem::GetPollers( 88std::vector<std::unique_ptr<Polling::DevicePoller>> InputSubsystem::GetPollers([
342 [[maybe_unused]] Polling::DeviceType type) const { 89 [maybe_unused]] Polling::DeviceType type) const {
343#ifdef HAVE_SDL2
344 return impl->sdl->GetPollers(type);
345#else
346 return {}; 90 return {};
347#endif
348} 91}
349 92
350std::string GenerateKeyboardParam(int key_code) { 93std::string GenerateKeyboardParam(int key_code) {