aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs51
1 files changed, 26 insertions, 25 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs b/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs
index 10c34453..432a37e3 100644
--- a/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs
+++ b/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs
@@ -1,3 +1,5 @@
+using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
+using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen;
using System;
namespace Ryujinx.HLE.HOS.Services.Hid
@@ -8,39 +10,38 @@ namespace Ryujinx.HLE.HOS.Services.Hid
public void Update(params TouchPoint[] points)
{
- ref ShMemTouchScreen touchscreen = ref _device.Hid.SharedMemory.TouchScreen;
+ ref RingLifo<TouchScreenState> lifo = ref _device.Hid.SharedMemory.TouchScreen;
- int currentIndex = UpdateEntriesHeader(ref touchscreen.Header, out int previousIndex);
+ ref TouchScreenState previousEntry = ref lifo.GetCurrentEntryRef();
- if (!Active)
+ TouchScreenState newState = new TouchScreenState
{
- return;
- }
-
- ref TouchScreenState currentEntry = ref touchscreen.Entries[currentIndex];
- TouchScreenState previousEntry = touchscreen.Entries[previousIndex];
-
- currentEntry.SampleTimestamp = previousEntry.SampleTimestamp + 1;
- currentEntry.SampleTimestamp2 = previousEntry.SampleTimestamp2 + 1;
+ SamplingNumber = previousEntry.SamplingNumber + 1
+ };
- currentEntry.NumTouches = (ulong)points.Length;
+ if (Active)
+ {
+ newState.TouchesCount = points.Length;
- int pointsLength = Math.Min(points.Length, currentEntry.Touches.Length);
+ int pointsLength = Math.Min(points.Length, newState.Touches.Length);
- for (int i = 0; i < pointsLength; ++i)
- {
- TouchPoint pi = points[i];
- currentEntry.Touches[i] = new TouchScreenStateData
+ for (int i = 0; i < pointsLength; ++i)
{
- SampleTimestamp = currentEntry.SampleTimestamp,
- X = pi.X,
- Y = pi.Y,
- TouchIndex = (uint)i,
- DiameterX = pi.DiameterX,
- DiameterY = pi.DiameterY,
- Angle = pi.Angle
- };
+ TouchPoint pi = points[i];
+ newState.Touches[i] = new TouchState
+ {
+ DeltaTime = newState.SamplingNumber,
+ X = pi.X,
+ Y = pi.Y,
+ FingerId = (uint)i,
+ DiameterX = pi.DiameterX,
+ DiameterY = pi.DiameterY,
+ RotationAngle = pi.Angle
+ };
+ }
}
+
+ lifo.Write(ref newState);
}
}
} \ No newline at end of file