| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using static Ryujinx.HLE.Input.Hid;
- namespace Ryujinx.HLE.Input
- {
- public abstract class HidControllerBase : IHidDevice
- {
- protected HidControllerType HidControllerType;
- protected Switch Device;
- protected HidControllerId ControllerId;
- public long Offset { get; private set; }
- public bool Connected { get; protected set; }
- public HidControllerBase(HidControllerType ControllerType, Switch Device)
- {
- this.Device = Device;
- HidControllerType = ControllerType;
- }
- public virtual void Connect(HidControllerId ControllerId)
- {
- this.ControllerId = ControllerId;
- Offset = Device.Hid.HidPosition + HidControllersOffset + (int)ControllerId * HidControllerSize;
- Device.Memory.FillWithZeros(Offset, 0x5000);
- Device.Memory.WriteInt32(Offset + 0x00, (int)HidControllerType);
- }
- public abstract void SendInput(
- HidControllerButtons Buttons,
- HidJoystickPosition LeftStick,
- HidJoystickPosition RightStick);
- protected long WriteInput(
- HidControllerButtons Buttons,
- HidJoystickPosition LeftStick,
- HidJoystickPosition RightStick,
- HidControllerLayouts ControllerLayout)
- {
- long ControllerOffset = Offset + HidControllerHeaderSize;
- ControllerOffset += (int)ControllerLayout * HidControllerLayoutsSize;
- long LastEntry = Device.Memory.ReadInt64(ControllerOffset + 0x10);
- long CurrEntry = (LastEntry + 1) % HidEntryCount;
- long Timestamp = GetTimestamp();
- Device.Memory.WriteInt64(ControllerOffset + 0x00, Timestamp);
- Device.Memory.WriteInt64(ControllerOffset + 0x08, HidEntryCount);
- Device.Memory.WriteInt64(ControllerOffset + 0x10, CurrEntry);
- Device.Memory.WriteInt64(ControllerOffset + 0x18, HidEntryCount - 1);
- ControllerOffset += HidControllersLayoutHeaderSize;
- long LastEntryOffset = ControllerOffset + LastEntry * HidControllersInputEntrySize;
- ControllerOffset += CurrEntry * HidControllersInputEntrySize;
- long SampleCounter = Device.Memory.ReadInt64(LastEntryOffset) + 1;
- Device.Memory.WriteInt64(ControllerOffset + 0x00, SampleCounter);
- Device.Memory.WriteInt64(ControllerOffset + 0x08, SampleCounter);
- Device.Memory.WriteInt64(ControllerOffset + 0x10, (uint)Buttons);
- Device.Memory.WriteInt32(ControllerOffset + 0x18, LeftStick.DX);
- Device.Memory.WriteInt32(ControllerOffset + 0x1c, LeftStick.DY);
- Device.Memory.WriteInt32(ControllerOffset + 0x20, RightStick.DX);
- Device.Memory.WriteInt32(ControllerOffset + 0x24, RightStick.DY);
- return ControllerOffset;
- }
- }
- }
|