using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using System.Collections.Specialized; using System; using System.Text; public class LogitechGSDK { //ARX CONTROL SDK public const int LOGI_ARX_ORIENTATION_PORTRAIT = 0x01; public const int LOGI_ARX_ORIENTATION_LANDSCAPE = 0x10; public const int LOGI_ARX_EVENT_FOCUS_ACTIVE = 0x01; public const int LOGI_ARX_EVENT_FOCUS_INACTIVE = 0x02; public const int LOGI_ARX_EVENT_TAP_ON_TAG = 0x04; public const int LOGI_ARX_EVENT_MOBILEDEVICE_ARRIVAL = 0x08; public const int LOGI_ARX_EVENT_MOBILEDEVICE_REMOVAL = 0x10; public const int LOGI_ARX_DEVICETYPE_IPHONE = 0x01; public const int LOGI_ARX_DEVICETYPE_IPAD = 0x02; public const int LOGI_ARX_DEVICETYPE_ANDROID_SMALL = 0x03; public const int LOGI_ARX_DEVICETYPE_ANDROID_NORMAL = 0x04; public const int LOGI_ARX_DEVICETYPE_ANDROID_LARGE = 0x05; public const int LOGI_ARX_DEVICETYPE_ANDROID_XLARGE = 0x06; public const int LOGI_ARX_DEVICETYPE_ANDROID_OTHER = 0x07; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void logiArxCB(int eventType, int eventValue, [MarshalAs(UnmanagedType.LPWStr)]String eventArg, IntPtr context); public struct logiArxCbContext { public logiArxCB arxCallBack; public IntPtr arxContext; } [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxInit(String identifier, String friendlyName, ref logiArxCbContext callback); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxAddFileAs(String filePath, String fileName, String mimeType); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxAddContentAs(byte[] content, int size, String fileName, String mimeType = ""); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxAddUTF8StringAs(String stringContent, String fileName, String mimeType = ""); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxAddImageFromBitmap(byte[] bitmap, int width, int height, String fileName); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxSetIndex(String fileName); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxSetTagPropertyById(String tagId, String prop, String newValue); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxSetTagsPropertyByClass(String tagsClass, String prop, String newValue); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxSetTagContentById(String tagId, String newContent); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiArxSetTagsContentByClass(String tagsClass, String newContent); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiArxGetLastError(); [DllImport("LogitechGArxControlEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void LogiArxShutdown(); //LED SDK public const int LOGI_LED_BITMAP_WIDTH = 21; public const int LOGI_LED_BITMAP_HEIGHT = 6; public const int LOGI_LED_BITMAP_BYTES_PER_KEY = 4; public const int LOGI_LED_BITMAP_SIZE = LOGI_LED_BITMAP_WIDTH * LOGI_LED_BITMAP_HEIGHT * LOGI_LED_BITMAP_BYTES_PER_KEY; public const int LOGI_LED_DURATION_INFINITE = 0; private const int LOGI_DEVICETYPE_MONOCHROME_ORD = 0; private const int LOGI_DEVICETYPE_RGB_ORD = 1; private const int LOGI_DEVICETYPE_PERKEY_RGB_ORD = 2; public const int LOGI_DEVICETYPE_MONOCHROME = (1 << LOGI_DEVICETYPE_MONOCHROME_ORD); public const int LOGI_DEVICETYPE_RGB = (1 << LOGI_DEVICETYPE_RGB_ORD); public const int LOGI_DEVICETYPE_PERKEY_RGB = (1 << LOGI_DEVICETYPE_PERKEY_RGB_ORD); public enum keyboardNames { ESC = 0x01, F1 = 0x3b, F2 = 0x3c, F3 = 0x3d, F4 = 0x3e, F5 = 0x3f, F6 = 0x40, F7 = 0x41, F8 = 0x42, F9 = 0x43, F10 = 0x44, F11 = 0x57, F12 = 0x58, PRINT_SCREEN = 0x137, SCROLL_LOCK = 0x46, PAUSE_BREAK = 0x45, TILDE = 0x29, ONE = 0x02, TWO = 0x03, THREE = 0x04, FOUR = 0x05, FIVE = 0x06, SIX = 0x07, SEVEN = 0x08, EIGHT = 0x09, NINE = 0x0A, ZERO = 0x0B, MINUS = 0x0C, EQUALS = 0x0D, BACKSPACE = 0x0E, INSERT = 0x152, HOME = 0x147, PAGE_UP = 0x149, NUM_LOCK = 0x145, NUM_SLASH = 0x135, NUM_ASTERISK = 0x37, NUM_MINUS = 0x4A, TAB = 0x0F, Q = 0x10, W = 0x11, E = 0x12, R = 0x13, T = 0x14, Y = 0x15, U = 0x16, I = 0x17, O = 0x18, P = 0x19, OPEN_BRACKET = 0x1A, CLOSE_BRACKET = 0x1B, BACKSLASH = 0x2B, KEYBOARD_DELETE = 0x153, END = 0x14F, PAGE_DOWN = 0x151, NUM_SEVEN = 0x47, NUM_EIGHT = 0x48, NUM_NINE = 0x49, NUM_PLUS = 0x4E, CAPS_LOCK = 0x3A, A = 0x1E, S = 0x1F, D = 0x20, F = 0x21, G = 0x22, H = 0x23, J = 0x24, K = 0x25, L = 0x26, SEMICOLON = 0x27, APOSTROPHE = 0x28, ENTER = 0x1C, NUM_FOUR = 0x4B, NUM_FIVE = 0x4C, NUM_SIX = 0x4D, LEFT_SHIFT = 0x2A, Z = 0x2C, X = 0x2D, C = 0x2E, V = 0x2F, B = 0x30, N = 0x31, M = 0x32, COMMA = 0x33, PERIOD = 0x34, FORWARD_SLASH = 0x35, RIGHT_SHIFT = 0x36, ARROW_UP = 0x148, NUM_ONE = 0x4F, NUM_TWO = 0x50, NUM_THREE = 0x51, NUM_ENTER = 0x11C, LEFT_CONTROL = 0x1D, LEFT_WINDOWS = 0x15B, LEFT_ALT = 0x38, SPACE = 0x39, RIGHT_ALT = 0x138, RIGHT_WINDOWS = 0x15C, APPLICATION_SELECT = 0x15D, RIGHT_CONTROL = 0x11D, ARROW_LEFT = 0x14B, ARROW_DOWN = 0x150, ARROW_RIGHT = 0x14D, NUM_ZERO = 0x52, NUM_PERIOD = 0x53, }; public enum DeviceType { Keyboard = 0x0, Mouse = 0x3, Mousemat = 0x4, Headset = 0x8, Speaker = 0xe }; [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedInit(); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetTargetDevice(int targetDevice); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedGetSdkVersion(ref int majorNum, ref int minorNum, ref int buildNum); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSaveCurrentLighting(); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetLighting(int redPercentage, int greenPercentage, int bluePercentage); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedRestoreLighting(); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedFlashLighting(int redPercentage, int greenPercentage, int bluePercentage, int milliSecondsDuration, int milliSecondsInterval); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedPulseLighting(int redPercentage, int greenPercentage, int bluePercentage, int milliSecondsDuration, int milliSecondsInterval); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedStopEffects(); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetLightingFromBitmap(byte[] bitmap); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetLightingForKeyWithScanCode(int keyCode, int redPercentage, int greenPercentage, int bluePercentage); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetLightingForKeyWithHidCode(int keyCode, int redPercentage, int greenPercentage, int bluePercentage); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetLightingForKeyWithQuartzCode(int keyCode, int redPercentage, int greenPercentage, int bluePercentage); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetLightingForKeyWithKeyName(keyboardNames keyCode, int redPercentage, int greenPercentage, int bluePercentage); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSetLightingForTargetZone(LogitechGSDK.DeviceType deviceType, int zone, int redPercentage, int greenPercentage, int bluePercentage); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedSaveLightingForKey(keyboardNames keyName); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedRestoreLightingForKey(keyboardNames keyName); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedFlashSingleKey(keyboardNames keyName, int redPercentage, int greenPercentage, int bluePercentage, int msDuration, int msInterval); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedPulseSingleKey(keyboardNames keyName, int startRedPercentage, int startGreenPercentage, int startBluePercentage, int finishRedPercentage, int finishGreenPercentage, int finishBluePercentage, int msDuration, bool isInfinite); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLedStopEffectsOnKey(keyboardNames keyName); [DllImport("LogitechLedEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern void LogiLedShutdown(); //END OF LED SDK //LCD SDK public const int LOGI_LCD_COLOR_BUTTON_LEFT = (0x00000100); public const int LOGI_LCD_COLOR_BUTTON_RIGHT = (0x00000200); public const int LOGI_LCD_COLOR_BUTTON_OK = (0x00000400); public const int LOGI_LCD_COLOR_BUTTON_CANCEL = (0x00000800); public const int LOGI_LCD_COLOR_BUTTON_UP = (0x00001000); public const int LOGI_LCD_COLOR_BUTTON_DOWN = (0x00002000); public const int LOGI_LCD_COLOR_BUTTON_MENU = (0x00004000); public const int LOGI_LCD_MONO_BUTTON_0 = (0x00000001); public const int LOGI_LCD_MONO_BUTTON_1 = (0x00000002); public const int LOGI_LCD_MONO_BUTTON_2 = (0x00000004); public const int LOGI_LCD_MONO_BUTTON_3 = (0x00000008); public const int LOGI_LCD_MONO_WIDTH = 160; public const int LOGI_LCD_MONO_HEIGHT = 43; public const int LOGI_LCD_COLOR_WIDTH = 320; public const int LOGI_LCD_COLOR_HEIGHT = 240; public const int LOGI_LCD_TYPE_MONO = (0x00000001); public const int LOGI_LCD_TYPE_COLOR = (0x00000002); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdInit(String friendlyName, int lcdType); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdIsConnected(int lcdType); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdIsButtonPressed(int button); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void LogiLcdUpdate(); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void LogiLcdShutdown(); // Monochrome LCD functions [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdMonoSetBackground(byte[] monoBitmap); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdMonoSetText(int lineNumber, String text); // Color LCD functions [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdColorSetBackground(byte[] colorBitmap); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdColorSetTitle(String text, int red, int green, int blue); [DllImport("LogitechLcdEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiLcdColorSetText(int lineNumber, String text, int red, int green, int blue); //END OF LCD SDK //G-KEY SDK public const int LOGITECH_MAX_MOUSE_BUTTONS = 20; public const int LOGITECH_MAX_GKEYS = 29; public const int LOGITECH_MAX_M_STATES = 3; [StructLayout(LayoutKind.Sequential, Pack = 2)] public struct GkeyCode { public ushort complete; // index of the G key or mouse button, for example, 6 for G6 or Button 6 public int keyIdx { get { return complete & 255; } } // key up or down, 1 is down, 0 is up public int keyDown { get { return (complete >> 8) & 1; } } // mState (1, 2 or 3 for M1, M2 and M3) public int mState { get { return (complete >> 9) & 3; } } // indicate if the Event comes from a mouse, 1 is yes, 0 is no. public int mouse { get { return (complete >> 11) & 15; } } // reserved1 public int reserved1 { get { return (complete >> 15) & 1; } } // reserved2 public int reserved2 { get { return (complete >> 16) & 131071; } } } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void logiGkeyCB(GkeyCode gkeyCode, [MarshalAs(UnmanagedType.LPWStr)]String gkeyOrButtonString, IntPtr context); public struct logiGKeyCbContext { public logiGkeyCB gkeyCallBack; public IntPtr gkeyContext; } [DllImport("LogitechGKeyEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiGkeyInitWithoutCallback(); [DllImport("LogitechGKeyEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiGkeyInitWithoutContext(logiGkeyCB gkeyCB); [DllImport("LogitechGKeyEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiGkeyInit(ref logiGKeyCbContext cbStruct); [DllImport("LogitechGKeyEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiGkeyIsMouseButtonPressed(int buttonNumber); [DllImport("LogitechGKeyEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr LogiGkeyGetMouseButtonString(int buttonNumber); public static String LogiGkeyGetMouseButtonStr(int buttonNumber) { String str = Marshal.PtrToStringUni(LogiGkeyGetMouseButtonString(buttonNumber)); return str; } [DllImport("LogitechGKeyEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiGkeyIsKeyboardGkeyPressed(int gkeyNumber, int modeNumber); [DllImport("LogitechGKeyEnginesWrapper")] private static extern IntPtr LogiGkeyGetKeyboardGkeyString(int gkeyNumber, int modeNumber); public static String LogiGkeyGetKeyboardGkeyStr(int gkeyNumber, int modeNumber) { String str = Marshal.PtrToStringUni(LogiGkeyGetKeyboardGkeyString(gkeyNumber, modeNumber)); return str; } [DllImport("LogitechGKeyEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void LogiGkeyShutdown(); //STEERING WHEEL SDK public const int LOGI_MAX_CONTROLLERS = 2; //Force types public const int LOGI_FORCE_NONE = -1; public const int LOGI_FORCE_SPRING = 0;//µ¯Á¦ public const int LOGI_FORCE_CONSTANT = 1;//²»±ä public const int LOGI_FORCE_DAMPER = 2;//×èÁ¦ public const int LOGI_FORCE_SIDE_COLLISION = 3; public const int LOGI_FORCE_FRONTAL_COLLISION = 4; public const int LOGI_FORCE_DIRT_ROAD = 5; public const int LOGI_FORCE_BUMPY_ROAD = 6; public const int LOGI_FORCE_SLIPPERY_ROAD = 7; public const int LOGI_FORCE_SURFACE_EFFECT = 8; public const int LOGI_NUMBER_FORCE_EFFECTS = 9; public const int LOGI_FORCE_SOFTSTOP = 10; public const int LOGI_FORCE_CAR_AIRBORNE = 11; //Periodic types for surface effect public const int LOGI_PERIODICTYPE_NONE = -1; public const int LOGI_PERIODICTYPE_SINE = 0; public const int LOGI_PERIODICTYPE_SQUARE = 1; public const int LOGI_PERIODICTYPE_TRIANGLE = 2; //Devices types public const int LOGI_DEVICE_TYPE_NONE = -1; public const int LOGI_DEVICE_TYPE_WHEEL = 0; public const int LOGI_DEVICE_TYPE_JOYSTICK = 1; public const int LOGI_DEVICE_TYPE_GAMEPAD = 2; public const int LOGI_DEVICE_TYPE_OTHER = 3; public const int LOGI_NUMBER_DEVICE_TYPES = 4; //Manufacturer types public const int LOGI_MANUFACTURER_NONE = -1; public const int LOGI_MANUFACTURER_LOGITECH = 0; public const int LOGI_MANUFACTURER_MICROSOFT = 1; public const int LOGI_MANUFACTURER_OTHER = 2; //Model types public const int LOGI_MODEL_G27 = 0; public const int LOGI_MODEL_DRIVING_FORCE_GT = 1; public const int LOGI_MODEL_G25 = 2; public const int LOGI_MODEL_MOMO_RACING = 3; public const int LOGI_MODEL_MOMO_FORCE = 4; public const int LOGI_MODEL_DRIVING_FORCE_PRO = 5; public const int LOGI_MODEL_DRIVING_FORCE = 6; public const int LOGI_MODEL_NASCAR_RACING_WHEEL = 7; public const int LOGI_MODEL_FORMULA_FORCE = 8; public const int LOGI_MODEL_FORMULA_FORCE_GP = 9; public const int LOGI_MODEL_FORCE_3D_PRO = 10; public const int LOGI_MODEL_EXTREME_3D_PRO = 11; public const int LOGI_MODEL_FREEDOM_24 = 12; public const int LOGI_MODEL_ATTACK_3 = 13; public const int LOGI_MODEL_FORCE_3D = 14; public const int LOGI_MODEL_STRIKE_FORCE_3D = 15; public const int LOGI_MODEL_G940_JOYSTICK = 16; public const int LOGI_MODEL_G940_THROTTLE = 17; public const int LOGI_MODEL_G940_PEDALS = 18; public const int LOGI_MODEL_RUMBLEPAD = 19; public const int LOGI_MODEL_RUMBLEPAD_2 = 20; public const int LOGI_MODEL_CORDLESS_RUMBLEPAD_2 = 21; public const int LOGI_MODEL_CORDLESS_GAMEPAD = 22; public const int LOGI_MODEL_DUAL_ACTION_GAMEPAD = 23; public const int LOGI_MODEL_PRECISION_GAMEPAD_2 = 24; public const int LOGI_MODEL_CHILLSTREAM = 25; public const int LOGI_NUMBER_MODELS = 26; [StructLayout(LayoutKind.Sequential, Pack = 2)] public struct LogiControllerPropertiesData { public bool forceEnable; public int overallGain; public int springGain; public int damperGain; public bool defaultSpringEnabled; public int defaultSpringGain; public bool combinePedals; public int wheelRange; public bool gameSettingsEnabled; public bool allowGameSettings; } [StructLayout(LayoutKind.Sequential, Pack = 2)] public struct DIJOYSTATE2ENGINES { public int lX; /* x-axis position */ public int lY; /* y-axis position */ public int lZ; /* z-axis position */ public int lRx; /* x-axis rotation */ public int lRy; /* y-axis rotation */ public int lRz; /* z-axis rotation */ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglSlider; /* extra axes positions */ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] rgdwPOV; /* POV directions */ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] rgbButtons; /* 128 buttons */ public int lVX; /* x-axis velocity */ public int lVY; /* y-axis velocity */ public int lVZ; /* z-axis velocity */ public int lVRx; /* x-axis angular velocity */ public int lVRy; /* y-axis angular velocity */ public int lVRz; /* z-axis angular velocity */ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglVSlider; /* extra axes velocities */ public int lAX; /* x-axis acceleration */ public int lAY; /* y-axis acceleration */ public int lAZ; /* z-axis acceleration */ public int lARx; /* x-axis angular acceleration */ public int lARy; /* y-axis angular acceleration */ public int lARz; /* z-axis angular acceleration */ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglASlider; /* extra axes accelerations */ public int lFX; /* x-axis force */ public int lFY; /* y-axis force */ public int lFZ; /* z-axis force */ public int lFRx; /* x-axis torque */ public int lFRy; /* y-axis torque */ public int lFRz; /* z-axis torque */ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglFSlider; /* extra axes forces */ }; [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiSteeringInitialize(bool ignoreXInputControllers); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiSteeringShutdown(); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiUpdate(); [DllImport("LogitechSteeringWheelEnginesWrapper", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr LogiGetStateENGINES(int index); public static DIJOYSTATE2ENGINES LogiGetStateUnity(int index) { DIJOYSTATE2ENGINES ret = new DIJOYSTATE2ENGINES(); ret.rglSlider = new int[2]; ret.rgdwPOV = new uint[4]; ret.rgbButtons = new byte[128]; ret.rglVSlider = new int[2]; ret.rglASlider = new int[2]; ret.rglFSlider = new int[2]; try { ret = (DIJOYSTATE2ENGINES)Marshal.PtrToStructure(LogiGetStateENGINES(index), typeof(DIJOYSTATE2ENGINES)); } catch (System.ArgumentException) { Debug.Log("Exception catched"); } return ret; } [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiGetFriendlyProductName(int index, StringBuilder buffer, int bufferSize); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiIsConnected(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiIsDeviceConnected(int index, int deviceType); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiIsManufacturerConnected(int index, int manufacturerName); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiIsModelConnected(int index, int modelName); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiButtonTriggered(int index, int buttonNbr); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiButtonReleased(int index, int buttonNbr); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiButtonIsPressed(int index, int buttonNbr); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiGenerateNonLinearValues(int index, int nonLinCoeff); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiGetNonLinearValue(int index, int inputValue); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiHasForceFeedback(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiIsPlaying(int index, int forceType); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlaySpringForce(int index, int offsetPercentage, int saturationPercentage, int coefficientPercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopSpringForce(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlayConstantForce(int index, int magnitudePercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopConstantForce(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlayDamperForce(int index, int coefficientPercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopDamperForce(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlaySideCollisionForce(int index, int magnitudePercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlayFrontalCollisionForce(int index, int magnitudePercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlayDirtRoadEffect(int index, int magnitudePercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopDirtRoadEffect(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlayBumpyRoadEffect(int index, int magnitudePercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopBumpyRoadEffect(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlaySlipperyRoadEffect(int index, int magnitudePercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopSlipperyRoadEffect(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlaySurfaceEffect(int index, int type, int magnitudePercentage, int period); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopSurfaceEffect(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlayCarAirborne(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopCarAirborne(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlaySoftstopForce(int index, int usableRangePercentage); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiStopSoftstopForce(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiSetPreferredControllerProperties(LogiControllerPropertiesData properties); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiGetCurrentControllerProperties(int index, ref LogiControllerPropertiesData properties); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int LogiGetShifterMode(int index); [DllImport("LogitechSteeringWheelEnginesWrapper", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern bool LogiPlayLeds(int index, float currentRPM, float rpmFirstLedTurnsOn, float rpmRedLine); }