diff --git a/nx/include/switch/services/hid.h b/nx/include/switch/services/hid.h index d29a58ad..2c0edde7 100644 --- a/nx/include/switch/services/hid.h +++ b/nx/include/switch/services/hid.h @@ -328,6 +328,16 @@ typedef struct JoystickPosition s32 dy; } JoystickPosition; +typedef struct MousePosition +{ + u32 x; + u32 y; + u32 velocityX; + u32 velocityY; + u32 scrollVelocityX; + u32 scrollVelocityY; +} MousePosition; + #define JOYSTICK_MAX (0x8000) #define JOYSTICK_MIN (-0x8000) @@ -399,12 +409,7 @@ typedef struct HidMouseEntry { u64 timestamp; u64 timestamp_2; - u32 x; - u32 y; - u32 velocityX; - u32 velocityY; - u32 scrollVelocityX; - u32 scrollVelocityY; + MousePosition position; u64 buttons; } HidMouseEntry; static_assert(sizeof(HidMouseEntry) == 0x30, "Hid mouse entry structure has incorrect size"); @@ -552,6 +557,7 @@ u64 hidKeysUp(HidControllerID id); u64 hidMouseButtonsHeld(void); u64 hidMouseButtonsDown(void); u64 hidMouseButtonsUp(void); +void hidMouseRead(MousePosition *pos); bool hidKeyboardModifierHeld(HidKeyboardModifier modifier); bool hidKeyboardModifierDown(HidKeyboardModifier modifier); diff --git a/nx/source/services/hid.c b/nx/source/services/hid.c index 2d60daca..cad32029 100644 --- a/nx/source/services/hid.c +++ b/nx/source/services/hid.c @@ -267,6 +267,12 @@ u64 hidMouseButtonsUp(void) { return tmp; } +void hidMouseRead(MousePosition *pos) { + rwlockReadLock(&g_hidLock); + *pos = g_mouseEntry.position; + rwlockReadUnlock(&g_hidLock); +} + bool hidKeyboardModifierHeld(HidKeyboardModifier modifier) { rwlockReadLock(&g_hidLock); bool tmp = g_keyboardModHeld & modifier;