summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/hid/controllers/gesture.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/service/hid/controllers/gesture.h')
-rw-r--r--src/core/hle/service/hid/controllers/gesture.h29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/core/hle/service/hid/controllers/gesture.h b/src/core/hle/service/hid/controllers/gesture.h
index 8e6f315a4..6128fb0ad 100644
--- a/src/core/hle/service/hid/controllers/gesture.h
+++ b/src/core/hle/service/hid/controllers/gesture.h
@@ -71,6 +71,7 @@ private:
// This is nn::hid::GestureState
struct GestureState {
s64_le sampling_number;
+ s64_le sampling_number2;
s64_le detection_count;
GestureType type;
GestureDirection direction;
@@ -84,7 +85,21 @@ private:
s32_le point_count;
std::array<Common::Point<s32_le>, 4> points;
};
- static_assert(sizeof(GestureState) == 0x60, "GestureState is an invalid size");
+ static_assert(sizeof(GestureState) == 0x68, "GestureState is an invalid size");
+
+ struct CommonHeader {
+ s64_le timestamp;
+ s64_le total_entry_count;
+ s64_le last_entry_index;
+ s64_le entry_count;
+ };
+ static_assert(sizeof(CommonHeader) == 0x20, "CommonHeader is an invalid size");
+
+ struct SharedMemory {
+ CommonHeader header;
+ std::array<GestureState, 17> gesture_states;
+ };
+ static_assert(sizeof(SharedMemory) == 0x708, "SharedMemory is an invalid size");
struct Finger {
Common::Point<f32> pos{};
@@ -137,17 +152,17 @@ private:
void SetSwipeEvent(GestureProperties& gesture, GestureProperties& last_gesture_props,
GestureType& type);
+ // Retrieves the last gesture entry, as indicated by shared memory indices.
+ [[nodiscard]] GestureState& GetLastGestureEntry();
+ [[nodiscard]] const GestureState& GetLastGestureEntry() const;
+
// Returns the average distance, angle and middle point of the active fingers
GestureProperties GetGestureProperties();
- // This is nn::hid::detail::GestureLifo
- Lifo<GestureState> gesture_lifo{};
- static_assert(sizeof(gesture_lifo) == 0x708, "gesture_lifo is an invalid size");
- GestureState next_state{};
-
- std::array<Finger, MAX_POINTS> fingers{};
+ SharedMemory shared_memory{};
Core::HID::EmulatedConsole* console;
+ std::array<Finger, MAX_POINTS> fingers{};
GestureProperties last_gesture{};
s64_le last_update_timestamp{};
s64_le last_tap_timestamp{};