summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/hid/hid.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h
index f2affb5c5..e4665a43c 100644
--- a/src/core/hle/service/hid/hid.h
+++ b/src/core/hle/service/hid/hid.h
@@ -89,7 +89,7 @@ struct TouchDataEntry {
* Structure of data stored in HID shared memory
*/
struct SharedMem {
- // Offset 0x0 : "PAD" data, this is used for buttons and the circle pad
+ // "Pad data, this is used for buttons and the circle pad
struct {
s64 index_reset_ticks;
s64 index_reset_ticks_previous;
@@ -105,7 +105,7 @@ struct SharedMem {
std::array<PadDataEntry, 8> entries; // Pad state history
} pad;
- // Offset 0xA8 : Touchpad data, this is used for touchpad input
+ // Touchpad data, this is used for touchpad input
struct {
s64 index_reset_ticks;
s64 index_reset_ticks_previous;
@@ -117,6 +117,20 @@ struct SharedMem {
} touch;
};
+// TODO: MSVC does not support using offsetof() on non-static data members even though this
+// is technically allowed since C++11. This macro should be enabled once MSVC adds
+// support for that.
+#ifndef _MSC_VER
+#define ASSERT_REG_POSITION(field_name, position) \
+ static_assert(offsetof(SharedMem, field_name) == position * 4, \
+ "Field "#field_name" has invalid position")
+
+ASSERT_REG_POSITION(pad.index_reset_ticks, 0x0);
+ASSERT_REG_POSITION(touch.index_reset_ticks, 0x2A);
+
+#undef ASSERT_REG_POSITION
+#endif // !defined(_MSC_VER)
+
// Pre-defined PadStates for single button presses
const PadState PAD_NONE = {{0}};
const PadState PAD_A = {{1u << 0}};