aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Input/Motion/CemuHook/Protocol
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Input/Motion/CemuHook/Protocol')
-rw-r--r--src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs47
-rw-r--r--src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs20
-rw-r--r--src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs15
-rw-r--r--src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs9
-rw-r--r--src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs51
5 files changed, 142 insertions, 0 deletions
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs
new file mode 100644
index 00000000..7fb72344
--- /dev/null
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs
@@ -0,0 +1,47 @@
+using Ryujinx.Common.Memory;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Input.Motion.CemuHook.Protocol
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ControllerDataRequest
+ {
+ public MessageType Type;
+ public SubscriberType SubscriberType;
+ public byte Slot;
+ public Array6<byte> MacAddress;
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct ControllerDataResponse
+ {
+ public SharedResponse Shared;
+ public byte Connected;
+ public uint PacketId;
+ public byte ExtraButtons;
+ public byte MainButtons;
+ public ushort PSExtraInput;
+ public ushort LeftStickXY;
+ public ushort RightStickXY;
+ public uint DPadAnalog;
+ public ulong MainButtonsAnalog;
+
+ public Array6<byte> Touch1;
+ public Array6<byte> Touch2;
+
+ public ulong MotionTimestamp;
+ public float AccelerometerX;
+ public float AccelerometerY;
+ public float AccelerometerZ;
+ public float GyroscopePitch;
+ public float GyroscopeYaw;
+ public float GyroscopeRoll;
+ }
+
+ enum SubscriberType : byte
+ {
+ All,
+ Slot,
+ Mac
+ }
+} \ No newline at end of file
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs
new file mode 100644
index 00000000..63d4524a
--- /dev/null
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs
@@ -0,0 +1,20 @@
+using Ryujinx.Common.Memory;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Input.Motion.CemuHook.Protocol
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct ControllerInfoResponse
+ {
+ public SharedResponse Shared;
+ private byte _zero;
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct ControllerInfoRequest
+ {
+ public MessageType Type;
+ public int PortsCount;
+ public Array4<byte> PortIndices;
+ }
+} \ No newline at end of file
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs
new file mode 100644
index 00000000..57f58ff0
--- /dev/null
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs
@@ -0,0 +1,15 @@
+using Ryujinx.Common.Memory;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Input.Motion.CemuHook.Protocol
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct Header
+ {
+ public uint MagicString;
+ public ushort Version;
+ public ushort Length;
+ public Array4<byte> Crc32;
+ public uint Id;
+ }
+} \ No newline at end of file
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs
new file mode 100644
index 00000000..de1e5e90
--- /dev/null
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs
@@ -0,0 +1,9 @@
+namespace Ryujinx.Input.Motion.CemuHook.Protocol
+{
+ public enum MessageType : uint
+ {
+ Protocol = 0x100000,
+ Info,
+ Data
+ }
+} \ No newline at end of file
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs
new file mode 100644
index 00000000..e2e1ee9b
--- /dev/null
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs
@@ -0,0 +1,51 @@
+using Ryujinx.Common.Memory;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Input.Motion.CemuHook.Protocol
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct SharedResponse
+ {
+ public MessageType Type;
+ public byte Slot;
+ public SlotState State;
+ public DeviceModelType ModelType;
+ public ConnectionType ConnectionType;
+
+ public Array6<byte> MacAddress;
+ public BatteryStatus BatteryStatus;
+ }
+
+ public enum SlotState : byte
+ {
+ Disconnected,
+ Reserved,
+ Connected
+ }
+
+ public enum DeviceModelType : byte
+ {
+ None,
+ PartialGyro,
+ FullGyro
+ }
+
+ public enum ConnectionType : byte
+ {
+ None,
+ USB,
+ Bluetooth
+ }
+
+ public enum BatteryStatus : byte
+ {
+ NA,
+ Dying,
+ Low,
+ Medium,
+ High,
+ Full,
+ Charging,
+ Charged
+ }
+} \ No newline at end of file