ReXGlue SDK
Loading...
Searching...
No Matches
pad.h
Go to the documentation of this file.
1
11
12#pragma once
13
14#include <string>
15
16#include <rex/bit.h>
17#include <rex/types.h>
18
19namespace rex::hid {
20
21using rex::HasFlags;
22using rex::operator|;
23using rex::operator&;
24using rex::operator^;
25using rex::operator~;
26using rex::operator|=;
27using rex::operator&=;
28using rex::operator^=;
29
31enum PadButton : u16 {
32 kPadDPadUp = 0x0001,
33 kPadDPadDown = 0x0002,
34 kPadDPadLeft = 0x0004,
35 kPadDPadRight = 0x0008,
36 kPadStart = 0x0010,
37 kPadBack = 0x0020,
38 kPadLeftThumb = 0x0040,
39 kPadRightThumb = 0x0080,
40 kPadLeftShoulder = 0x0100,
41 kPadRightShoulder = 0x0200,
42 kPadGuide = 0x0400,
43 kPadA = 0x1000,
44 kPadB = 0x2000,
45 kPadX = 0x4000,
46 kPadY = 0x8000,
47};
48
50struct PadState {
51 u16 buttons = 0;
52 u8 left_trigger = 0;
54 i16 thumb_lx = 0;
55 i16 thumb_ly = 0;
56 i16 thumb_rx = 0;
57 i16 thumb_ry = 0;
58};
59
62 u16 left_motor = 0;
63 u16 right_motor = 0;
64};
65
72
75 u16 virtual_key = 0;
76 u16 unicode = 0;
77 u16 flags = 0;
78 u8 user = 0;
79 u8 hid_code = 0;
80};
81
83enum class KeystrokeSource : u8 {
84 kNone = 0x00,
85 kPad = 0x01,
86 kKeyboard = 0x02,
87};
88
90enum class PadType : u8 {
91 kUnknown,
92 kStandard,
93 kX360,
94 kXOne,
95 kPS3,
96 kPS4,
97 kPS5,
98 kSwitchPro,
99 kSwitchJoyCon,
100};
101
103struct PadInfo {
104 PadType type = PadType::kUnknown;
105 u16 vendor = 0;
106 u16 product = 0;
107};
108
111 u64 value = 0;
112
113 constexpr bool operator==(const PadDeviceID&) const = default;
114};
115
118
125 i32 xinput_slot = -1;
126 u16 vendor = 0;
127 u16 product = 0;
128 std::string serial;
129};
130
131struct PadDevice {
133 std::string name;
134 PadInfo info;
135 PadIdentity identity;
136};
137
138} // namespace rex::hid
139
140template <>
141inline constexpr bool rex::is_flags_enum<rex::hid::KeystrokeSource> = true;
constexpr bool is_flags_enum
Definition bit.h:422
constexpr bool HasFlags(E value, E flags)
Definition bit.h:483
KeystrokeSource
Definition pad.h:83
@ kKeyboard
Definition pad.h:86
@ kPad
Definition pad.h:85
constexpr PadDeviceID kInvalidPadDeviceID
Definition pad.h:117
PadButton
Definition pad.h:31
@ kPadRightThumb
Definition pad.h:39
@ kPadLeftThumb
Definition pad.h:38
PadType
Definition pad.h:90
Definition pad.h:66
u8 subtype
Definition pad.h:67
PadVibration motors
Definition pad.h:70
PadState supported
Definition pad.h:69
u16 flags
Definition pad.h:68
Definition pad.h:110
Definition pad.h:131
Definition pad.h:124
u16 product
Definition pad.h:127
u16 vendor
Definition pad.h:126
std::string serial
Definition pad.h:128
i32 xinput_slot
Definition pad.h:125
Definition pad.h:103
u16 vendor
Definition pad.h:105
u16 product
Definition pad.h:106
Definition pad.h:74
u16 unicode
Definition pad.h:76
u8 user
Definition pad.h:78
u8 hid_code
Definition pad.h:79
u16 virtual_key
Definition pad.h:75
u16 flags
Definition pad.h:77
Definition pad.h:50
u8 left_trigger
Definition pad.h:52
u8 right_trigger
Definition pad.h:53
Definition pad.h:61
u16 left_motor
Definition pad.h:62
u16 right_motor
Definition pad.h:63
Integer types, byte order wrappers and size literals.