diff options
| author | emmauss <emmausssss@gmail.com> | 2018-11-20 02:01:36 +0200 |
|---|---|---|
| committer | Ac_K <Acoustik666@gmail.com> | 2018-11-20 01:01:36 +0100 |
| commit | dc02ac08caa84456e8b280a3347ac8907b5249ff (patch) | |
| tree | ef71cf05cba18da65c930328f955352f4859e67f /Ryujinx.HLE/Hid | |
| parent | 0c36835f6de563cd6b4a4c82cac25fbcfb0a6231 (diff) | |
Support other switch controller types (#487)
* Make controllers modular, support changing controller type
* return readable events
* signal hid events
* fix style
Diffstat (limited to 'Ryujinx.HLE/Hid')
| -rw-r--r-- | Ryujinx.HLE/Hid/Hid.cs | 273 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidControllerButtons.cs | 35 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidControllerColorDesc.cs | 10 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidControllerConnState.cs | 11 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidControllerId.cs | 16 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidControllerLayouts.cs | 13 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidControllerType.cs | 14 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidJoystickPosition.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/HidTouchPoint.cs | 11 | ||||
| -rw-r--r-- | Ryujinx.HLE/Hid/JoyConColor.cs | 23 |
10 files changed, 0 insertions, 414 deletions
diff --git a/Ryujinx.HLE/Hid/Hid.cs b/Ryujinx.HLE/Hid/Hid.cs deleted file mode 100644 index 21580223..00000000 --- a/Ryujinx.HLE/Hid/Hid.cs +++ /dev/null @@ -1,273 +0,0 @@ -using Ryujinx.Common; -using Ryujinx.HLE.HOS; -using System; - -namespace Ryujinx.HLE.Input -{ - public class Hid - { - /* - * Reference: - * https://github.com/reswitched/libtransistor/blob/development/lib/hid.c - * https://github.com/reswitched/libtransistor/blob/development/include/libtransistor/hid.h - * https://github.com/switchbrew/libnx/blob/master/nx/source/services/hid.c - * https://github.com/switchbrew/libnx/blob/master/nx/include/switch/services/hid.h - */ - - private const int HidHeaderSize = 0x400; - private const int HidTouchScreenSize = 0x3000; - private const int HidMouseSize = 0x400; - private const int HidKeyboardSize = 0x400; - private const int HidUnkSection1Size = 0x400; - private const int HidUnkSection2Size = 0x400; - private const int HidUnkSection3Size = 0x400; - private const int HidUnkSection4Size = 0x400; - private const int HidUnkSection5Size = 0x200; - private const int HidUnkSection6Size = 0x200; - private const int HidUnkSection7Size = 0x200; - private const int HidUnkSection8Size = 0x800; - private const int HidControllerSerialsSize = 0x4000; - private const int HidControllersSize = 0x32000; - private const int HidUnkSection9Size = 0x800; - - private const int HidTouchHeaderSize = 0x28; - private const int HidTouchEntrySize = 0x298; - - private const int HidTouchEntryHeaderSize = 0x10; - private const int HidTouchEntryTouchSize = 0x28; - - private const int HidControllerSize = 0x5000; - private const int HidControllerHeaderSize = 0x28; - private const int HidControllerLayoutsSize = 0x350; - - private const int HidControllersLayoutHeaderSize = 0x20; - private const int HidControllersInputEntrySize = 0x30; - - private const int HidHeaderOffset = 0; - private const int HidTouchScreenOffset = HidHeaderOffset + HidHeaderSize; - private const int HidMouseOffset = HidTouchScreenOffset + HidTouchScreenSize; - private const int HidKeyboardOffset = HidMouseOffset + HidMouseSize; - private const int HidUnkSection1Offset = HidKeyboardOffset + HidKeyboardSize; - private const int HidUnkSection2Offset = HidUnkSection1Offset + HidUnkSection1Size; - private const int HidUnkSection3Offset = HidUnkSection2Offset + HidUnkSection2Size; - private const int HidUnkSection4Offset = HidUnkSection3Offset + HidUnkSection3Size; - private const int HidUnkSection5Offset = HidUnkSection4Offset + HidUnkSection4Size; - private const int HidUnkSection6Offset = HidUnkSection5Offset + HidUnkSection5Size; - private const int HidUnkSection7Offset = HidUnkSection6Offset + HidUnkSection6Size; - private const int HidUnkSection8Offset = HidUnkSection7Offset + HidUnkSection7Size; - private const int HidControllerSerialsOffset = HidUnkSection8Offset + HidUnkSection8Size; - private const int HidControllersOffset = HidControllerSerialsOffset + HidControllerSerialsSize; - private const int HidUnkSection9Offset = HidControllersOffset + HidControllersSize; - - private const int HidEntryCount = 17; - - private Switch Device; - - private long HidPosition; - - public Hid(Switch Device, long HidPosition) - { - this.Device = Device; - this.HidPosition = HidPosition; - - Device.Memory.FillWithZeros(HidPosition, Horizon.HidSize); - - InitializeJoyconPair( - JoyConColor.Body_Neon_Red, - JoyConColor.Buttons_Neon_Red, - JoyConColor.Body_Neon_Blue, - JoyConColor.Buttons_Neon_Blue); - } - - private void InitializeJoyconPair( - JoyConColor LeftColorBody, - JoyConColor LeftColorButtons, - JoyConColor RightColorBody, - JoyConColor RightColorButtons) - { - long BaseControllerOffset = HidPosition + HidControllersOffset + 8 * HidControllerSize; - - HidControllerType Type = HidControllerType.ControllerType_Handheld; - - bool IsHalf = false; - - HidControllerColorDesc SingleColorDesc = - HidControllerColorDesc.ColorDesc_ColorsNonexistent; - - JoyConColor SingleColorBody = JoyConColor.Black; - JoyConColor SingleColorButtons = JoyConColor.Black; - - HidControllerColorDesc SplitColorDesc = 0; - - Device.Memory.WriteInt32(BaseControllerOffset + 0x00, (int)Type); - - Device.Memory.WriteInt32(BaseControllerOffset + 0x04, IsHalf ? 1 : 0); - - Device.Memory.WriteInt32(BaseControllerOffset + 0x08, (int)SingleColorDesc); - Device.Memory.WriteInt32(BaseControllerOffset + 0x0c, (int)SingleColorBody); - Device.Memory.WriteInt32(BaseControllerOffset + 0x10, (int)SingleColorButtons); - Device.Memory.WriteInt32(BaseControllerOffset + 0x14, (int)SplitColorDesc); - - Device.Memory.WriteInt32(BaseControllerOffset + 0x18, (int)LeftColorBody); - Device.Memory.WriteInt32(BaseControllerOffset + 0x1c, (int)LeftColorButtons); - - Device.Memory.WriteInt32(BaseControllerOffset + 0x20, (int)RightColorBody); - Device.Memory.WriteInt32(BaseControllerOffset + 0x24, (int)RightColorButtons); - } - - private HidControllerButtons UpdateStickButtons( - HidJoystickPosition LeftStick, - HidJoystickPosition RightStick) - { - HidControllerButtons Result = 0; - - if (RightStick.DX < 0) - { - Result |= HidControllerButtons.KEY_RSTICK_LEFT; - } - - if (RightStick.DX > 0) - { - Result |= HidControllerButtons.KEY_RSTICK_RIGHT; - } - - if (RightStick.DY < 0) - { - Result |= HidControllerButtons.KEY_RSTICK_DOWN; - } - - if (RightStick.DY > 0) - { - Result |= HidControllerButtons.KEY_RSTICK_UP; - } - - if (LeftStick.DX < 0) - { - Result |= HidControllerButtons.KEY_LSTICK_LEFT; - } - - if (LeftStick.DX > 0) - { - Result |= HidControllerButtons.KEY_LSTICK_RIGHT; - } - - if (LeftStick.DY < 0) - { - Result |= HidControllerButtons.KEY_LSTICK_DOWN; - } - - if (LeftStick.DY > 0) - { - Result |= HidControllerButtons.KEY_LSTICK_UP; - } - - return Result; - } - - public void SetJoyconButton( - HidControllerId ControllerId, - HidControllerLayouts ControllerLayout, - HidControllerButtons Buttons, - HidJoystickPosition LeftStick, - HidJoystickPosition RightStick) - { - Buttons |= UpdateStickButtons(LeftStick, RightStick); - - long ControllerOffset = HidPosition + HidControllersOffset; - - ControllerOffset += (int)ControllerId * HidControllerSize; - - ControllerOffset += 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); - - Device.Memory.WriteInt64(ControllerOffset + 0x28, - (uint)HidControllerConnState.Controller_State_Connected | - (uint)HidControllerConnState.Controller_State_Wired); - } - - public void SetTouchPoints(params HidTouchPoint[] Points) - { - long TouchScreenOffset = HidPosition + HidTouchScreenOffset; - - long LastEntry = Device.Memory.ReadInt64(TouchScreenOffset + 0x10); - - long CurrEntry = (LastEntry + 1) % HidEntryCount; - - long Timestamp = GetTimestamp(); - - Device.Memory.WriteInt64(TouchScreenOffset + 0x00, Timestamp); - Device.Memory.WriteInt64(TouchScreenOffset + 0x08, HidEntryCount); - Device.Memory.WriteInt64(TouchScreenOffset + 0x10, CurrEntry); - Device.Memory.WriteInt64(TouchScreenOffset + 0x18, HidEntryCount - 1); - Device.Memory.WriteInt64(TouchScreenOffset + 0x20, Timestamp); - - long TouchEntryOffset = TouchScreenOffset + HidTouchHeaderSize; - - long LastEntryOffset = TouchEntryOffset + LastEntry * HidTouchEntrySize; - - long SampleCounter = Device.Memory.ReadInt64(LastEntryOffset) + 1; - - TouchEntryOffset += CurrEntry * HidTouchEntrySize; - - Device.Memory.WriteInt64(TouchEntryOffset + 0x00, SampleCounter); - Device.Memory.WriteInt64(TouchEntryOffset + 0x08, Points.Length); - - TouchEntryOffset += HidTouchEntryHeaderSize; - - const int Padding = 0; - - int Index = 0; - - foreach (HidTouchPoint Point in Points) - { - Device.Memory.WriteInt64(TouchEntryOffset + 0x00, Timestamp); - Device.Memory.WriteInt32(TouchEntryOffset + 0x08, Padding); - Device.Memory.WriteInt32(TouchEntryOffset + 0x0c, Index++); - Device.Memory.WriteInt32(TouchEntryOffset + 0x10, Point.X); - Device.Memory.WriteInt32(TouchEntryOffset + 0x14, Point.Y); - Device.Memory.WriteInt32(TouchEntryOffset + 0x18, Point.DiameterX); - Device.Memory.WriteInt32(TouchEntryOffset + 0x1c, Point.DiameterY); - Device.Memory.WriteInt32(TouchEntryOffset + 0x20, Point.Angle); - Device.Memory.WriteInt32(TouchEntryOffset + 0x24, Padding); - - TouchEntryOffset += HidTouchEntryTouchSize; - } - } - - private static long GetTimestamp() - { - return PerformanceCounter.ElapsedMilliseconds * 19200; - } - } -} diff --git a/Ryujinx.HLE/Hid/HidControllerButtons.cs b/Ryujinx.HLE/Hid/HidControllerButtons.cs deleted file mode 100644 index f41d17e1..00000000 --- a/Ryujinx.HLE/Hid/HidControllerButtons.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; - -namespace Ryujinx.HLE.Input -{ - [Flags] - public enum HidControllerButtons - { - KEY_A = (1 << 0), - KEY_B = (1 << 1), - KEY_X = (1 << 2), - KEY_Y = (1 << 3), - KEY_LSTICK = (1 << 4), - KEY_RSTICK = (1 << 5), - KEY_L = (1 << 6), - KEY_R = (1 << 7), - KEY_ZL = (1 << 8), - KEY_ZR = (1 << 9), - KEY_PLUS = (1 << 10), - KEY_MINUS = (1 << 11), - KEY_DLEFT = (1 << 12), - KEY_DUP = (1 << 13), - KEY_DRIGHT = (1 << 14), - KEY_DDOWN = (1 << 15), - KEY_LSTICK_LEFT = (1 << 16), - KEY_LSTICK_UP = (1 << 17), - KEY_LSTICK_RIGHT = (1 << 18), - KEY_LSTICK_DOWN = (1 << 19), - KEY_RSTICK_LEFT = (1 << 20), - KEY_RSTICK_UP = (1 << 21), - KEY_RSTICK_RIGHT = (1 << 22), - KEY_RSTICK_DOWN = (1 << 23), - KEY_SL = (1 << 24), - KEY_SR = (1 << 25) - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/HidControllerColorDesc.cs b/Ryujinx.HLE/Hid/HidControllerColorDesc.cs deleted file mode 100644 index b8cf2a5e..00000000 --- a/Ryujinx.HLE/Hid/HidControllerColorDesc.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace Ryujinx.HLE.Input -{ - [Flags] - public enum HidControllerColorDesc - { - ColorDesc_ColorsNonexistent = (1 << 1) - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/HidControllerConnState.cs b/Ryujinx.HLE/Hid/HidControllerConnState.cs deleted file mode 100644 index 1fc9482a..00000000 --- a/Ryujinx.HLE/Hid/HidControllerConnState.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Ryujinx.HLE.Input -{ - [Flags] - public enum HidControllerConnState - { - Controller_State_Connected = (1 << 0), - Controller_State_Wired = (1 << 1) - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/HidControllerId.cs b/Ryujinx.HLE/Hid/HidControllerId.cs deleted file mode 100644 index e4a0e26c..00000000 --- a/Ryujinx.HLE/Hid/HidControllerId.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace Ryujinx.HLE.Input -{ - public enum HidControllerId - { - CONTROLLER_PLAYER_1 = 0, - CONTROLLER_PLAYER_2 = 1, - CONTROLLER_PLAYER_3 = 2, - CONTROLLER_PLAYER_4 = 3, - CONTROLLER_PLAYER_5 = 4, - CONTROLLER_PLAYER_6 = 5, - CONTROLLER_PLAYER_7 = 6, - CONTROLLER_PLAYER_8 = 7, - CONTROLLER_HANDHELD = 8, - CONTROLLER_UNKNOWN = 9 - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/HidControllerLayouts.cs b/Ryujinx.HLE/Hid/HidControllerLayouts.cs deleted file mode 100644 index 39fdd3fe..00000000 --- a/Ryujinx.HLE/Hid/HidControllerLayouts.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Ryujinx.HLE.Input -{ - public enum HidControllerLayouts - { - Pro_Controller = 0, - Handheld_Joined = 1, - Joined = 2, - Left = 3, - Right = 4, - Main_No_Analog = 5, - Main = 6 - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/HidControllerType.cs b/Ryujinx.HLE/Hid/HidControllerType.cs deleted file mode 100644 index ea8ddfd4..00000000 --- a/Ryujinx.HLE/Hid/HidControllerType.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace Ryujinx.HLE.Input -{ - [Flags] - public enum HidControllerType - { - ControllerType_ProController = (1 << 0), - ControllerType_Handheld = (1 << 1), - ControllerType_JoyconPair = (1 << 2), - ControllerType_JoyconLeft = (1 << 3), - ControllerType_JoyconRight = (1 << 4) - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/HidJoystickPosition.cs b/Ryujinx.HLE/Hid/HidJoystickPosition.cs deleted file mode 100644 index a06ef7b2..00000000 --- a/Ryujinx.HLE/Hid/HidJoystickPosition.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Ryujinx.HLE.Input -{ - public struct HidJoystickPosition - { - public int DX; - public int DY; - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/HidTouchPoint.cs b/Ryujinx.HLE/Hid/HidTouchPoint.cs deleted file mode 100644 index 25412456..00000000 --- a/Ryujinx.HLE/Hid/HidTouchPoint.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Ryujinx.HLE.Input -{ - public struct HidTouchPoint - { - public int X; - public int Y; - public int DiameterX; - public int DiameterY; - public int Angle; - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/Hid/JoyConColor.cs b/Ryujinx.HLE/Hid/JoyConColor.cs deleted file mode 100644 index 514ec21b..00000000 --- a/Ryujinx.HLE/Hid/JoyConColor.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace Ryujinx.HLE.Input -{ - public enum JoyConColor //Thanks to CTCaer - { - Black = 0, - - Body_Grey = 0x828282, - Body_Neon_Blue = 0x0AB9E6, - Body_Neon_Red = 0xFF3C28, - Body_Neon_Yellow = 0xE6FF00, - Body_Neon_Pink = 0xFF3278, - Body_Neon_Green = 0x1EDC00, - Body_Red = 0xE10F00, - - Buttons_Grey = 0x0F0F0F, - Buttons_Neon_Blue = 0x001E1E, - Buttons_Neon_Red = 0x1E0A0A, - Buttons_Neon_Yellow = 0x142800, - Buttons_Neon_Pink = 0x28001E, - Buttons_Neon_Green = 0x002800, - Buttons_Red = 0x280A0A - } -}
\ No newline at end of file |
