diff options
author | Kevin Hartman <kevin@hart.mn> | 2014-09-03 18:12:58 -0700 |
---|---|---|
committer | Kevin Hartman <kevin@hart.mn> | 2014-09-11 22:43:42 -0700 |
commit | 4a94ec934ab1a2216f94e3fcc46f5dde1d6e2f02 (patch) | |
tree | 2588f0c6051c9a5e3f23057d2953c35a854dbc43 /src/common | |
parent | bb7ddede159d820b6f8b49caf0758940903ece3b (diff) |
Initial HID PAD work, with GLFW only.
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/common/emu_window.h | 19 | ||||
-rw-r--r-- | src/common/key_map.cpp | 21 | ||||
-rw-r--r-- | src/common/key_map.h | 35 |
4 files changed, 77 insertions, 0 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 3a82f5b807..4ae34bea9e 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -8,6 +8,7 @@ set(SRCS file_search.cpp file_util.cpp hash.cpp + key_map.cpp log_manager.cpp math_util.cpp mem_arena.cpp @@ -39,6 +40,7 @@ set(HEADERS file_search.h file_util.h hash.h + key_map.h linear_disk_cache.h log.h log_manager.h diff --git a/src/common/emu_window.h b/src/common/emu_window.h index 5e2c33d7ab..90fbd9335a 100644 --- a/src/common/emu_window.h +++ b/src/common/emu_window.h @@ -7,6 +7,9 @@ #include "common/common.h" #include "common/scm_rev.h" +#include "common/key_map.h" +#include "core/hle/service/hid.h" + // Abstraction class used to provide an interface between emulation code and the frontend (e.g. SDL, // QGLWidget, GLFW, etc...) class EmuWindow @@ -32,6 +35,22 @@ public: /// Releases (dunno if this is the "right" word) the GLFW context from the caller thread virtual void DoneCurrent() = 0; + static void KeyPressed(KeyMap::CitraKey key) { + HID_User::PADState mapped_key = KeyMap::Get3DSKey(key); + + if (mapped_key.hex != HID_User::PAD_NONE.hex) { + HID_User::PADButtonPress(mapped_key); + } + } + + static void KeyReleased(KeyMap::CitraKey key) { + HID_User::PADState mapped_key = KeyMap::Get3DSKey(key); + + if (mapped_key.hex != HID_User::PAD_NONE.hex) { + HID_User::PADButtonRelease(mapped_key); + } + } + Config GetConfig() const { return m_config; } diff --git a/src/common/key_map.cpp b/src/common/key_map.cpp new file mode 100644 index 0000000000..5941a105b8 --- /dev/null +++ b/src/common/key_map.cpp @@ -0,0 +1,21 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "key_map.h" +#include <map> + + +namespace KeyMap { + +std::map<CitraKey, HID_User::PADState> g_key_map; + +void SetKeyMapping(CitraKey key, HID_User::PADState padState) { + g_key_map[key].hex = padState.hex; +} + +HID_User::PADState Get3DSKey(CitraKey key) { + return g_key_map[key]; +} + +} diff --git a/src/common/key_map.h b/src/common/key_map.h new file mode 100644 index 0000000000..7e94df6181 --- /dev/null +++ b/src/common/key_map.h @@ -0,0 +1,35 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#pragma once + +#include "core/hle/service/hid.h" + +namespace KeyMap { + +class CitraKey { +public: + CitraKey() : keyCode(0) {} + CitraKey(int code) : keyCode(code) {} + + int keyCode; + + bool operator < (const CitraKey &other) const { + return keyCode < other.keyCode; + } + + bool operator == (const CitraKey &other) const { + return keyCode == other.keyCode; + } +}; + +struct DefaultKeyMapping { + KeyMap::CitraKey key; + HID_User::PADState state; +}; + +void SetKeyMapping(CitraKey key, HID_User::PADState padState); +HID_User::PADState Get3DSKey(CitraKey key); + +} |