From 65e0f5faa89b78378eb2a9732ebdef869e2e735f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Dj=C3=A4rv?= Date: Tue, 27 Mar 2018 21:25:27 +0200 Subject: [PATCH] add saitek x45 with models from x52 throttle and warthog stick --- JoystickProxy/JoystickProxy/settings.ini | 1 + .../Assets/Devices/Saitek X45 HOTAS.meta | 10 ++++ .../Saitek X45 HOTAS/SaitekX45Joystick.cs | 56 ++++++++++++++++++ .../SaitekX45Joystick.cs.meta | 13 ++++ .../Saitek X45 HOTAS/SaitekX45Throttle.cs | 53 +++++++++++++++++ .../SaitekX45Throttle.cs.meta | 13 ++++ .../Assets/JoystickVisualizer.unity | Bin 304844 -> 322164 bytes 7 files changed, 146 insertions(+) create mode 100644 JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS.meta create mode 100644 JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs create mode 100644 JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs.meta create mode 100644 JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs create mode 100644 JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs.meta diff --git a/JoystickProxy/JoystickProxy/settings.ini b/JoystickProxy/JoystickProxy/settings.ini index 7eb0ed2..c0e6cf6 100644 --- a/JoystickProxy/JoystickProxy/settings.ini +++ b/JoystickProxy/JoystickProxy/settings.ini @@ -17,3 +17,4 @@ FPS = 60 0738:a215 = Saitek X55 Throttle 0738:2215 = Saitek X55 Joystick 06a3:0c2d = Saitek Pro Flight Throttle Quadrant +06a3:2541 = Saitek X45 HOTAS \ No newline at end of file diff --git a/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS.meta b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS.meta new file mode 100644 index 0000000..0b728ad --- /dev/null +++ b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 06373c8c3bb8146469070708c9c467ab +folderAsset: yes +timeCreated: 1522177500 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs new file mode 100644 index 0000000..26765bc --- /dev/null +++ b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs @@ -0,0 +1,56 @@ +using Assets; +using System.Collections.Generic; +using UnityEngine; + +public class SaitekX45Joystick : MonoBehaviour { + public const string USB_ID = "06a3:2541"; + //public const string USB_ID = "044f:0402"; + + public GameObject Model; + + public GameObject Joystick; + + // Use this for initialization + void Start() + { + UDPListener.StickEventListener += StickEvent; + } + + // Update is called once per frame + void Update() + { + } + + void StickEvent(JoystickState state) + { + if (state.UsbID != USB_ID) + { + return; + } + Model.SetActive(true); + + foreach (KeyValuePair entry in state.Data) + { + switch (entry.Key) + { + case "X": + Joystick.transform.eulerAngles = new Vector3(Joystick.transform.eulerAngles.x, Joystick.transform.eulerAngles.y, ConvertRange(entry.Value, 0, 65535, 20, -20)); + break; + case "Y": + Joystick.transform.eulerAngles = new Vector3(ConvertRange(entry.Value, 0, 65535, 20, -20), Joystick.transform.eulerAngles.y, Joystick.transform.eulerAngles.z); + break; + } + } + } + + public static float ConvertRange( + double value, // value to convert + double originalStart, double originalEnd, // original range + double newStart, double newEnd) // desired range + { + double scale = (double)(newEnd - newStart) / (originalEnd - originalStart); + return (float)(newStart + ((value - originalStart) * scale)); + } + +} + diff --git a/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs.meta b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs.meta new file mode 100644 index 0000000..a2c9081 --- /dev/null +++ b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Joystick.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7d586b47d63d0024b8f84aee3a19fa03 +timeCreated: 1522178418 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs new file mode 100644 index 0000000..687917d --- /dev/null +++ b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs @@ -0,0 +1,53 @@ +using Assets; +using System.Collections.Generic; +using UnityEngine; + +public class SaitekX45Throttle : MonoBehaviour { + public const string USB_ID = "06a3:2541"; + //public const string USB_ID = "044f:0404"; + + public GameObject Model; + + public GameObject Throttle; + + // Use this for initialization + void Start() + { + UDPListener.StickEventListener += StickEvent; + } + + // Update is called once per frame + void Update() + { + } + + void StickEvent(JoystickState state) + { + if (state.UsbID != USB_ID) + { + return; + } + Model.SetActive(true); + + foreach (KeyValuePair entry in state.Data) + { + switch (entry.Key) + { + case "Sliders0": // Throttle + Throttle.transform.localEulerAngles = new Vector3(ConvertRange(entry.Value, 0, 65535, -25, 28), Throttle.transform.localEulerAngles.y, Throttle.transform.localEulerAngles.z); + break; + } + } + } + + public static float ConvertRange( + double value, // value to convert + double originalStart, double originalEnd, // original range + double newStart, double newEnd) // desired range + { + double scale = (double)(newEnd - newStart) / (originalEnd - originalStart); + return (float)(newStart + ((value - originalStart) * scale)); + } + +} + diff --git a/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs.meta b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs.meta new file mode 100644 index 0000000..c8d3bf1 --- /dev/null +++ b/JoystickVisualizer/Assets/Devices/Saitek X45 HOTAS/SaitekX45Throttle.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a63de39b19eb4714fbeac6827f0a9471 +timeCreated: 1522178418 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JoystickVisualizer/Assets/JoystickVisualizer.unity b/JoystickVisualizer/Assets/JoystickVisualizer.unity index 63341668842b2ca15c4cb5054178f69f40519246..af5c85c8238b3ef84f287d0e914439392af41fe1 100644 GIT binary patch delta 38946 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 q;JJ;*>ey+az+N>j=w0c{w3b6 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