ReXGlue SDK
Loading...
Searching...
No Matches
input.h
Go to the documentation of this file.
1
14
15#pragma once
16
17#include <string>
18
19#include <rex/assert.h>
20#include <rex/types.h>
21#include <rex/result.h>
23
24namespace rex::xam {
25
28constexpr i32 kXInputGamepadRightThumbDeadzone = 8689;
29constexpr u8 kXInputGamepadTriggerThreshold = 30;
30
42
43enum X_INPUT_DEVTYPE : u8 {
48};
49
55 kXInputDevSubtypeWheel = 0x00000002,
56 kXInputDevSubtypeArcadeStick = 0x00000003,
57 kXInputDevSubtypeFlightStick = 0x00000004,
58 kXInputDevSubtypeDancePad = 0x00000005,
59 kXInputDevSubtypeGuitar = 0x00000006,
62 kXInputDevSubtypeDrumKit = 0x00000008,
66};
67
69 kXInputFlagGamepad = 0x00000001,
70 kXInputFlagKeyboard = 0x00000002,
71 kXInputFlagUnknown = 0x00000004,
72 kXInputFlagUnknown2 = 0x00000008,
73 kXInputFlagMic = 0x00000020,
74 kXInputFlagAnyDevice = 0x000000FF,
76};
77
78enum X_INPUT_GAMEPAD_BUTTON : u16 {
79 kXInputGamepadDPadUp = 0x0001,
80 kXInputGamepadDPadDown = 0x0002,
81 kXInputGamepadDPadLeft = 0x0004,
82 kXInputGamepadDPadRight = 0x0008,
83 kXInputGamepadStart = 0x0010,
84 kXInputGamepadBack = 0x0020,
85 kXInputGamepadLeftThumb = 0x0040,
86 kXInputGamepadRightThumb = 0x0080,
87 kXInputGamepadLeftShoulder = 0x0100,
88 kXInputGamepadRightShoulder = 0x0200,
89 kXInputGamepadGuide = 0x0400,
90 kXInputGamepadA = 0x1000,
91 kXInputGamepadB = 0x2000,
92 kXInputGamepadX = 0x4000,
93 kXInputGamepadY = 0x8000,
94};
95
106
116REX_STATIC_ASSERT_SIZE(X_INPUT_GAMEPAD, 12);
117
121 X_INPUT_GAMEPAD gamepad;
122};
123REX_STATIC_ASSERT_SIZE(X_INPUT_STATE, sizeof(X_INPUT_GAMEPAD) + 4);
124
131REX_STATIC_ASSERT_SIZE(X_INPUT_VIBRATION, 4);
132
140REX_STATIC_ASSERT_SIZE(X_INPUT_CAPABILITIES,
141 sizeof(X_INPUT_GAMEPAD) + sizeof(X_INPUT_VIBRATION) + 4);
142
151REX_STATIC_ASSERT_SIZE(X_INPUT_KEYSTROKE, 8);
152
153} // namespace rex::xam
154
155namespace rex::xam {
156
157enum class HIDError : u8 {
159 kEmpty = 2,
160 kBadArguments = 3,
161 kFailed = 4,
162};
163
169[[nodiscard]] inline rex::Error BuildError(HIDError code, std::string message) {
170 return {ErrorCategory::kPlatform, std::move(message), static_cast<int>(code)};
171}
172
178[[nodiscard]] inline HIDError CodeOf(const rex::Error& error) {
179 return static_cast<HIDError>(error.code);
180}
181
188[[nodiscard]] inline HIDError ToHIDError(rex::kernel::X_RESULT result) {
189 switch (result) {
190 case rex::kernel::X_ERROR_DEVICE_NOT_CONNECTED:
192 case rex::kernel::X_ERROR_EMPTY:
193 return HIDError::kEmpty;
194 case rex::kernel::X_ERROR_BAD_ARGUMENTS:
195 return HIDError::kBadArguments;
196 default:
197 return HIDError::kFailed;
198 }
199}
200
202[[nodiscard]] inline rex::kernel::X_RESULT ToXResult(HIDError code) {
203 switch (code) {
205 return rex::kernel::X_ERROR_DEVICE_NOT_CONNECTED;
206 case HIDError::kEmpty:
207 return rex::kernel::X_ERROR_EMPTY;
208 case HIDError::kBadArguments:
209 return rex::kernel::X_ERROR_BAD_ARGUMENTS;
210 case HIDError::kFailed:
211 break;
212 }
213 return rex::kernel::X_ERROR_FUNCTION_FAILED;
214}
215
216} // namespace rex::xam
HIDError CodeOf(const rex::Error &error)
Definition input.h:178
X_INPUT_FLAG
Definition input.h:68
@ kXInputFlagMic
Definition input.h:73
@ kXInputFlagKeyboard
Definition input.h:70
@ kXInputFlagAnyUser
Definition input.h:75
@ kXInputFlagGamepad
Definition input.h:69
@ kXInputFlagAnyDevice
Definition input.h:74
@ kXInputFlagUnknown2
Definition input.h:72
@ kXInputFlagUnknown
Definition input.h:71
X_INPUT_KEYSTROKE_FLAGS
Definition input.h:96
@ kXInputKeystrokeCtrl
Definition input.h:101
@ kXInputKeystrokeValidUnicode
Definition input.h:104
@ kXInputKeystrokeShift
Definition input.h:100
@ kXInputKeystrokeKeyDown
Definition input.h:97
@ kXInputKeystrokeAlt
Definition input.h:102
@ kXInputKeystrokeKeyUp
Definition input.h:98
@ kXInputKeystrokeRepeat
Definition input.h:99
X_INPUT_DEVTYPE
Definition input.h:43
@ kXInputDevTypeGamepad
Definition input.h:45
@ kXInputDevTypeKeyboard
Definition input.h:47
HIDError
Definition input.h:157
@ kNotConnected
Definition input.h:158
@ kEmpty
Definition input.h:159
rex::kernel::X_RESULT ToXResult(HIDError code)
Definition input.h:202
constexpr i32 kXInputGamepadLeftThumbDeadzone
Definition input.h:27
X_INPUT_CAPS
Definition input.h:31
@ kXInputCapsNoNavigation
Definition input.h:40
@ kXInputCapsFFBSupported
Definition input.h:33
@ kXInputCapsWireless
Definition input.h:34
@ kXInputCapsPMDSupported
Definition input.h:38
@ kXInputCapsVoiceSupported
Definition input.h:36
HIDError ToHIDError(rex::kernel::X_RESULT result)
Definition input.h:188
X_INPUT_DEVSUBTYPE
Definition input.h:50
@ kXInputDevSubtypeGuitarBass
Definition input.h:64
@ kXInputDevSubtypeGuitarAlternate
Definition input.h:61
@ kXInputDevSubtypeGamepad
Definition input.h:54
@ kXInputDevSubtypeArcadePad
Definition input.h:65
@ kXInputDevSubtypeUSBKeyboard
Definition input.h:52
rex::Error BuildError(HIDError code, std::string message)
Definition input.h:169
u32 X_RESULT
Definition status.h:92
Definition result.h:43
int code
Definition result.h:46
Definition input.h:133
X_INPUT_GAMEPAD gamepad
Definition input.h:137
u8 sub_type
Definition input.h:135
be_u16 flags
Definition input.h:136
X_INPUT_VIBRATION vibration
Definition input.h:138
u8 type
Definition input.h:134
Definition input.h:107
u8 left_trigger
Definition input.h:109
be_i16 thumb_ry
Definition input.h:114
be_u16 buttons
Definition input.h:108
be_i16 thumb_lx
Definition input.h:111
u8 right_trigger
Definition input.h:110
be_i16 thumb_rx
Definition input.h:113
be_i16 thumb_ly
Definition input.h:112
Definition input.h:144
be_u16 virtual_key
Definition input.h:145
be_u16 unicode
Definition input.h:146
u8 hid_code
Definition input.h:149
u8 user_index
Definition input.h:148
be_u16 flags
Definition input.h:147
Definition input.h:118
be_u32 packet_number
Definition input.h:120
Definition input.h:125
be_u16 right_motor_speed
Definition input.h:129
be_u16 left_motor_speed
Definition input.h:127
Integer types, byte order wrappers and size literals.