diff options
| author | mageven <62494521+mageven@users.noreply.github.com> | 2020-04-03 05:40:02 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-03 11:10:02 +1100 |
| commit | 2365ddfc363e76ac1ac9d2e32ef9b36b85463431 (patch) | |
| tree | 408bdb4a35e4f625a69ddbd65f22e9f056f7ebec /Ryujinx.HLE/Input/Controller/BaseController.cs | |
| parent | 5b5239ab5b452f991d9fc4f8ad1f9a2880b8bad1 (diff) | |
HID SharedMem Rework (#1003)
* Delete old HLE.Input
* Add new HLE Input.
git shows Hid.cs as modified because of the same name. It is new.
* Change HID Service
* Change Ryujinx UI to reflect new Input
* Add basic ControllerApplet
* Add DebugPad
Should fix Kirby Star Allies
* Address Ac_K's comments
* Moved all of HLE.Input to Services.Hid
* Separated all structs and enums each to a file
* Removed vars
* Made some naming changes to align with switchbrew
* Added official joycon colors
As an aside, fixed a mistake in touchscreen headers and added checks to
important SharedMem structs at init time.
* Further address Ac_K's comments
* Addressed gdkchan's and some more Ac_K's comments
* Address AcK's review comments
* Address AcK's second review comments
* Replace missed Marshal.SizeOf and address gdkchan's comments
Diffstat (limited to 'Ryujinx.HLE/Input/Controller/BaseController.cs')
| -rw-r--r-- | Ryujinx.HLE/Input/Controller/BaseController.cs | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/Ryujinx.HLE/Input/Controller/BaseController.cs b/Ryujinx.HLE/Input/Controller/BaseController.cs deleted file mode 100644 index dfd54a83..00000000 --- a/Ryujinx.HLE/Input/Controller/BaseController.cs +++ /dev/null @@ -1,142 +0,0 @@ -using static Ryujinx.HLE.Input.Hid; - -namespace Ryujinx.HLE.Input -{ - public abstract class BaseController : IHidDevice - { - protected ControllerStatus HidControllerType; - protected ControllerId ControllerId; - - private long _currentLayoutOffset; - private long _mainLayoutOffset; - - protected long DeviceStateOffset => Offset + 0x4188; - - protected Switch Device { get; } - - public long Offset { get; private set; } - public bool Connected { get; protected set; } - - public ControllerHeader Header { get; private set; } - public ControllerStateHeader CurrentStateHeader { get; private set; } - public ControllerDeviceState DeviceState { get; private set; } - public ControllerLayouts CurrentLayout { get; private set; } - public ControllerState LastInputState { get; set; } - public ControllerConnectionState ConnectionState { get; protected set; } - - public BaseController(Switch device, ControllerStatus controllerType) - { - Device = device; - HidControllerType = controllerType; - } - - protected void Initialize( - bool isHalf, - (NpadColor left, NpadColor right) bodyColors, - (NpadColor left, NpadColor right) buttonColors, - ControllerColorDescription singleColorDesc = 0, - ControllerColorDescription splitColorDesc = 0, - NpadColor singleBodyColor = 0, - NpadColor singleButtonColor = 0 - ) - { - Header = new ControllerHeader() - { - IsJoyConHalf = isHalf ? 1 : 0, - LeftBodyColor = bodyColors.left, - LeftButtonColor = buttonColors.left, - RightBodyColor = bodyColors.right, - RightButtonColor = buttonColors.right, - Status = HidControllerType, - SingleBodyColor = singleBodyColor, - SingleButtonColor = singleButtonColor, - SplitColorDescription = splitColorDesc, - SingleColorDescription = singleColorDesc, - }; - - CurrentStateHeader = new ControllerStateHeader - { - EntryCount = HidEntryCount, - MaxEntryCount = HidEntryCount - 1, - CurrentEntryIndex = -1 - }; - - DeviceState = new ControllerDeviceState() - { - PowerInfo0BatteryState = BatteryState.Percent100, - PowerInfo1BatteryState = BatteryState.Percent100, - PowerInfo2BatteryState = BatteryState.Percent100, - DeviceType = ControllerDeviceType.NPadLeftController | ControllerDeviceType.NPadRightController, - DeviceFlags = DeviceFlags.PowerInfo0Connected - | DeviceFlags.PowerInfo1Connected - | DeviceFlags.PowerInfo2Connected - }; - - LastInputState = new ControllerState() - { - SamplesTimestamp = -1, - SamplesTimestamp2 = -1 - }; - } - - public virtual void Connect(ControllerId controllerId) - { - ControllerId = controllerId; - - Offset = Device.Hid.HidPosition + HidControllersOffset + (int)controllerId * HidControllerSize; - - _mainLayoutOffset = Offset + HidControllerHeaderSize - + ((int)ControllerLayouts.Main * HidControllerLayoutsSize); - - Device.Memory.FillWithZeros(Offset, 0x5000); - Device.Memory.WriteStruct(Offset, Header); - Device.Memory.WriteStruct(DeviceStateOffset, DeviceState); - - Connected = true; - } - - public void SetLayout(ControllerLayouts controllerLayout) - { - CurrentLayout = controllerLayout; - - _currentLayoutOffset = Offset + HidControllerHeaderSize - + ((int)controllerLayout * HidControllerLayoutsSize); - } - - public void SendInput( - ControllerButtons buttons, - JoystickPosition leftStick, - JoystickPosition rightStick) - { - ControllerState currentInput = new ControllerState() - { - SamplesTimestamp = (long)LastInputState.SamplesTimestamp + 1, - SamplesTimestamp2 = (long)LastInputState.SamplesTimestamp + 1, - ButtonState = buttons, - ConnectionState = ConnectionState, - LeftStick = leftStick, - RightStick = rightStick - }; - - ControllerStateHeader newInputStateHeader = new ControllerStateHeader - { - EntryCount = HidEntryCount, - MaxEntryCount = HidEntryCount - 1, - CurrentEntryIndex = (CurrentStateHeader.CurrentEntryIndex + 1) % HidEntryCount, - Timestamp = GetTimestamp(), - }; - - Device.Memory.WriteStruct(_currentLayoutOffset, newInputStateHeader); - Device.Memory.WriteStruct(_mainLayoutOffset, newInputStateHeader); - - long currentInputStateOffset = HidControllersLayoutHeaderSize - + newInputStateHeader.CurrentEntryIndex * HidControllersInputEntrySize; - - Device.Memory.WriteStruct(_currentLayoutOffset + currentInputStateOffset, currentInput); - Device.Memory.WriteStruct(_mainLayoutOffset + currentInputStateOffset, currentInput); - - LastInputState = currentInput; - CurrentStateHeader = newInputStateHeader; - } - } -} |
