mirror of
https://github.com/citra-emu/citra-canary.git
synced 2024-12-24 20:25:39 +00:00
HID: Added static asserts to check register position in shared memory.
This commit is contained in:
parent
f213000cc4
commit
e9b9f1842b
|
@ -89,7 +89,7 @@ struct TouchDataEntry {
|
||||||
* Structure of data stored in HID shared memory
|
* Structure of data stored in HID shared memory
|
||||||
*/
|
*/
|
||||||
struct SharedMem {
|
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 {
|
struct {
|
||||||
s64 index_reset_ticks;
|
s64 index_reset_ticks;
|
||||||
s64 index_reset_ticks_previous;
|
s64 index_reset_ticks_previous;
|
||||||
|
@ -105,7 +105,7 @@ struct SharedMem {
|
||||||
std::array<PadDataEntry, 8> entries; // Pad state history
|
std::array<PadDataEntry, 8> entries; // Pad state history
|
||||||
} pad;
|
} pad;
|
||||||
|
|
||||||
// Offset 0xA8 : Touchpad data, this is used for touchpad input
|
// Touchpad data, this is used for touchpad input
|
||||||
struct {
|
struct {
|
||||||
s64 index_reset_ticks;
|
s64 index_reset_ticks;
|
||||||
s64 index_reset_ticks_previous;
|
s64 index_reset_ticks_previous;
|
||||||
|
@ -117,6 +117,20 @@ struct SharedMem {
|
||||||
} touch;
|
} 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
|
// Pre-defined PadStates for single button presses
|
||||||
const PadState PAD_NONE = {{0}};
|
const PadState PAD_NONE = {{0}};
|
||||||
const PadState PAD_A = {{1u << 0}};
|
const PadState PAD_A = {{1u << 0}};
|
||||||
|
|
Loading…
Reference in a new issue