-
Notifications
You must be signed in to change notification settings - Fork 5
/
joystick.hpp
74 lines (53 loc) · 1.59 KB
/
joystick.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
#ifndef JOYSTICK_HPP
#define JOYSTICK_HPP
#include <iostream>
#include <vector>
#include <unistd.h>
#include <fcntl.h>
#include <cstring>
#include <climits>
#include <thread>
#include "asio.hpp"
#include "gameSirT1s_mappings.hpp"
// #include "360_mappings.hpp"
// #include "ps3_mappings.hpp"
struct js_event
{
uint32_t time; /* event timestamp in milliseconds */
int16_t value; /* value */
uint8_t type; /* event type */
uint8_t id; /* axis/button number */
};
const size_t JS_EVENT_SIZE = sizeof(js_event);
class Joystick
{
public:
Joystick(std::string port="/dev/input/js0");
~Joystick();
void update();
bool hasButtonUpdate();
bool hasAxisUpdate();
ButtonId getUpdatedButton();
AxisId getUpdatedAxis();
uint8_t getButtonState(ButtonId button_id);
int16_t getAxisState(AxisId axis_id);
void update_buttons();
void update_axes();
static short map(long x, long in_min, long in_max, long out_min, long out_max);
static short mapConstLimits(long x);
void worker();
uint8_t getValueButton(int i);
int16_t getValueAxis(int i);
private:
int port_;
js_event event_;
ButtonId updated_button_;
AxisId updated_axis_;
bool is_axis_update_;
bool is_button_update_;
uint8_t button_values_[MAX_BUTTON_COUNT] = {0}; // Using max to allow for buttons not defined in header enum Button_Id
int16_t axis_values_[MAX_AXIS_COUNT] = {0}; // Using max to allow for axes not defined in header enum Axis_Id
bool accept_js_input_ = true;
std::thread js_thread_;
};
#endif // JOYSTICK_HPP