Use sample counter on HID controller layouts

This commit is contained in:
gdkchan 2018-06-10 19:31:56 -03:00
parent 7b7dbdcc6a
commit a0ee977ce5

View file

@ -1,5 +1,6 @@
using ChocolArm64.Memory; using ChocolArm64.Memory;
using Ryujinx.Core.Logging; using Ryujinx.Core.Logging;
using Ryujinx.Core.OsHle;
using Ryujinx.Core.OsHle.Handles; using Ryujinx.Core.OsHle.Handles;
using System; using System;
@ -85,11 +86,16 @@ namespace Ryujinx.Core.Input
{ {
ShMemPositions = SharedMem.GetVirtualPositions(); ShMemPositions = SharedMem.GetVirtualPositions();
(AMemory Memory, long Position) ShMem = ShMemPositions[ShMemPositions.Length - 1]; (AMemory Memory, long Position) = ShMemPositions[ShMemPositions.Length - 1];
Log.PrintInfo(LogClass.Hid, $"HID shared memory successfully mapped to 0x{ShMem.Position:x16}!"); for (long Offset = 0; Offset < Horizon.HidSize; Offset += 8)
{
Memory.WriteInt64Unchecked(Position + Offset, 0);
}
Init(ShMem.Memory, ShMem.Position); Log.PrintInfo(LogClass.Hid, $"HID shared memory successfully mapped to 0x{Position:x16}!");
Init(Memory, Position);
} }
} }
@ -186,18 +192,22 @@ namespace Ryujinx.Core.Input
ControllerOffset += HidControllersLayoutHeaderSize; ControllerOffset += HidControllersLayoutHeaderSize;
long LastEntryOffset = ControllerOffset + LastEntry * HidControllersInputEntrySize;
ControllerOffset += CurrEntry * HidControllersInputEntrySize; ControllerOffset += CurrEntry * HidControllersInputEntrySize;
Memory.WriteInt64Unchecked(ControllerOffset + 0x0, Timestamp); long SampleCounter = Memory.ReadInt64Unchecked(LastEntryOffset) + 1;
Memory.WriteInt64Unchecked(ControllerOffset + 0x8, Timestamp);
Memory.WriteInt64Unchecked(ControllerOffset + 0x0, SampleCounter);
Memory.WriteInt64Unchecked(ControllerOffset + 0x8, SampleCounter);
Memory.WriteInt64Unchecked(ControllerOffset + 0x10, (uint)Buttons); Memory.WriteInt64Unchecked(ControllerOffset + 0x10, (uint)Buttons);
Memory.WriteInt32Unchecked(ControllerOffset + 0x18, LeftStick.DX); Memory.WriteInt32Unchecked(ControllerOffset + 0x18, LeftStick.DX);
Memory.WriteInt32Unchecked(ControllerOffset + 0x1c, LeftStick.DY); Memory.WriteInt32Unchecked(ControllerOffset + 0x1c, LeftStick.DY);
Memory.WriteInt64Unchecked(ControllerOffset + 0x20, RightStick.DX); Memory.WriteInt32Unchecked(ControllerOffset + 0x20, RightStick.DX);
Memory.WriteInt64Unchecked(ControllerOffset + 0x24, RightStick.DY); Memory.WriteInt32Unchecked(ControllerOffset + 0x24, RightStick.DY);
Memory.WriteInt64Unchecked(ControllerOffset + 0x28, Memory.WriteInt64Unchecked(ControllerOffset + 0x28,
(uint)HidControllerConnState.Controller_State_Connected | (uint)HidControllerConnState.Controller_State_Connected |