From f0fac0c7fb6f7dd9fe81747b3369767c8c9e7d01 Mon Sep 17 00:00:00 2001
From: Morph <39850852+Morph1984@users.noreply.github.com>
Date: Wed, 22 Jul 2020 10:39:53 -0400
Subject: Project Mjölnir: Part 1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: James Rowe <jroweboy@gmail.com>
Co-authored-by: Its-Rei <kupfel@gmail.com>
---
 src/input_common/main.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

(limited to 'src/input_common/main.cpp')

diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp
index b9d5d0ec35..b8725e9af3 100644
--- a/src/input_common/main.cpp
+++ b/src/input_common/main.cpp
@@ -44,7 +44,6 @@ void Init() {
 #ifdef HAVE_SDL2
     sdl = SDL::Init();
 #endif
-
     udp = CemuhookUDP::Init();
 }
 
@@ -103,6 +102,55 @@ std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left,
     return circle_pad_param.Serialize();
 }
 
+std::vector<Common::ParamPackage> GetInputDevices() {
+    std::vector<Common::ParamPackage> devices = {
+        Common::ParamPackage{{"display", "Any"}, {"class", "any"}},
+        Common::ParamPackage{{"display", "Keyboard"}, {"class", "key"}},
+    };
+#ifdef HAVE_SDL2
+    auto sdl_devices = sdl->GetInputDevices();
+    devices.insert(devices.end(), sdl_devices.begin(), sdl_devices.end());
+#endif
+    auto udp_devices = udp->GetInputDevices();
+    devices.insert(devices.end(), udp_devices.begin(), udp_devices.end());
+    return devices;
+}
+
+std::unordered_map<Settings::NativeButton::Values, Common::ParamPackage> GetButtonMappingForDevice(
+    const Common::ParamPackage& params) {
+    std::unordered_map<Settings::NativeButton::Values, Common::ParamPackage> mappings{};
+    if (!params.Has("class") || params.Get("class", "") == "any") {
+        return mappings;
+    }
+    if (params.Get("class", "") == "key") {
+        // TODO consider returning the SDL key codes for the default keybindings
+    }
+#ifdef HAVE_SDL2
+    if (params.Get("class", "") == "sdl") {
+        return sdl->GetButtonMappingForDevice(params);
+    }
+#endif
+    return mappings;
+}
+
+std::unordered_map<Settings::NativeAnalog::Values, Common::ParamPackage> GetAnalogMappingForDevice(
+    const Common::ParamPackage& params) {
+    std::unordered_map<Settings::NativeAnalog::Values, Common::ParamPackage> mappings{};
+    if (!params.Has("class") || params.Get("class", "") == "any") {
+        return mappings;
+    }
+    if (params.Get("class", "") == "key") {
+        // TODO consider returning the SDL key codes for the default keybindings
+        return mappings;
+    }
+#ifdef HAVE_SDL2
+    if (params.Get("class", "") == "sdl") {
+        return sdl->GetAnalogMappingForDevice(params);
+    }
+#endif
+    return mappings;
+}
+
 namespace Polling {
 
 std::vector<std::unique_ptr<DevicePoller>> GetPollers(DeviceType type) {
-- 
cgit v1.2.3-70-g09d2