/
input.hpp
76 lines (60 loc) · 2.74 KB
/
input.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#pragma once
#include <boost/asio.hpp>
#include <boost/endian/conversion.hpp>
#include <chrono>
#include <cstdint>
#include <inputtino/input.hpp>
#include <map>
#include <optional>
#include <thread>
#include <vector>
namespace wolf::core::input {
using namespace std::chrono_literals;
class VirtualDevice {
public:
virtual std::vector<std::map<std::string, std::string>> get_udev_events() const = 0;
virtual std::vector<std::pair<std::string, /* filename */ std::vector<std::string> /* file rows */>>
get_udev_hw_db_entries() const = 0;
};
/**
* A virtual mouse device
*/
class Mouse : public inputtino::Mouse, public VirtualDevice {
public:
Mouse(const inputtino::Mouse &m) : inputtino::Mouse(m) {}
std::vector<std::map<std::string, std::string>> get_udev_events() const override;
std::vector<std::pair<std::string, std::vector<std::string>>> get_udev_hw_db_entries() const override;
};
class Trackpad : public inputtino::Trackpad, public VirtualDevice {
public:
Trackpad(const inputtino::Trackpad &t) : inputtino::Trackpad(t) {}
std::vector<std::map<std::string, std::string>> get_udev_events() const override;
std::vector<std::pair<std::string, std::vector<std::string>>> get_udev_hw_db_entries() const override;
};
class TouchScreen : public inputtino::TouchScreen, public VirtualDevice {
public:
TouchScreen(const inputtino::TouchScreen &t) : inputtino::TouchScreen(t) {}
std::vector<std::map<std::string, std::string>> get_udev_events() const override;
std::vector<std::pair<std::string, std::vector<std::string>>> get_udev_hw_db_entries() const override;
};
class PenTablet : public inputtino::PenTablet, public VirtualDevice {
public:
PenTablet(const inputtino::PenTablet &t) : inputtino::PenTablet(t) {}
std::vector<std::map<std::string, std::string>> get_udev_events() const override;
std::vector<std::pair<std::string, std::vector<std::string>>> get_udev_hw_db_entries() const override;
};
class Keyboard : public inputtino::Keyboard, public VirtualDevice {
public:
Keyboard(const inputtino::Keyboard &k) : inputtino::Keyboard(k) {}
std::vector<std::map<std::string, std::string>> get_udev_events() const override;
std::vector<std::pair<std::string, std::vector<std::string>>> get_udev_hw_db_entries() const override;
};
class Joypad : public inputtino::Joypad, public VirtualDevice {
private:
std::shared_ptr<inputtino::Joypad> _j; // We have to keep a reference to the original ptr to avoid removing the thread
public:
Joypad(std::shared_ptr<inputtino::Joypad> j) : _j(std::move(j)), inputtino::Joypad(*j) {}
std::vector<std::map<std::string, std::string>> get_udev_events() const override;
std::vector<std::pair<std::string, std::vector<std::string>>> get_udev_hw_db_entries() const override;
};
} // namespace wolf::core::input