summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2015-07-03 10:28:08 +1000
committerskidau <skidau@gmail.com>2015-07-03 10:28:08 +1000
commit8a50dc857bbfc86c41706a6f48770a6f78285628 (patch)
tree3c7ac1088404678a1608fa0ff3ddea8b79c5ef1f /Source/Core/InputCommon/ControllerInterface/evdev/evdev.h
parent6a33f174de618dc698ceba02e792cc6b2dba9732 (diff)
parent77183899e0526a343b8429cf04a1c07b31aafc34 (diff)
Merge pull request #2681 from phire/evdev-stable
Linux: Add an evdev based controller backend, to replace SDL.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/evdev/evdev.h')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/evdev/evdev.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h
new file mode 100644
index 0000000000..d1555c8cce
--- /dev/null
+++ b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.h
@@ -0,0 +1,87 @@
+// Copyright 2015 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <libevdev/libevdev.h>
+
+#include "InputCommon/ControllerInterface/Device.h"
+
+namespace ciface
+{
+namespace evdev
+{
+
+void Init(std::vector<Core::Device*>& devices);
+
+class evdevDevice : public Core::Device
+{
+private:
+ class Button : public Core::Device::Input
+ {
+ public:
+ std::string GetName() const override;
+ Button(u8 index, u16 code, libevdev* dev) : m_index(index), m_code(code), m_dev(dev) {}
+ ControlState GetState() const override;
+ private:
+ const u8 m_index;
+ const u16 m_code;
+ libevdev* m_dev;
+ };
+
+ class Axis : public Core::Device::Input
+ {
+ public:
+ std::string GetName() const override;
+ Axis(u8 index, u16 code, bool upper, libevdev* dev);
+ ControlState GetState() const override;
+ private:
+ const u16 m_code;
+ const u8 m_index;
+ const bool m_upper;
+ int m_range;
+ int m_min;
+ libevdev* m_dev;
+ };
+
+ class ForceFeedback : public Core::Device::Output
+ {
+ public:
+ std::string GetName() const override;
+ ForceFeedback(u16 type, libevdev* dev) : m_type(type), m_dev(dev), m_id(-1) { m_fd = libevdev_get_fd(dev); }
+ void SetState(ControlState state) override;
+ private:
+ const u16 m_type;
+ libevdev* m_dev;
+ int m_fd;
+ int m_id;
+ };
+
+public:
+ void UpdateInput() override;
+
+ evdevDevice(const std::string &devnode, int id);
+ ~evdevDevice();
+
+ std::string GetName() const override { return m_name; }
+ int GetId() const override { return m_id; }
+ std::string GetSource() const override { return "evdev"; }
+
+ bool IsInteresting() const { return m_initialized && m_interesting; }
+
+private:
+ const std::string m_devfile;
+ int m_fd;
+ libevdev* m_dev;
+ std::string m_name;
+ const int m_id;
+ bool m_initialized;
+ bool m_interesting;
+};
+
+}
+
+}