diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/hle/service/hid/hid.h | 18 |
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}}; |