diff --git a/DS4Windows/DS4Control/ControlService.cs b/DS4Windows/DS4Control/ControlService.cs index 7e67ad4..8a78649 100644 --- a/DS4Windows/DS4Control/ControlService.cs +++ b/DS4Windows/DS4Control/ControlService.cs @@ -166,6 +166,18 @@ namespace DS4Windows // Thread.SpinWait(500); //} + if (Global.IsHidGuardianInstalled()) + { + ProcessStartInfo startInfo = + new ProcessStartInfo(Global.exepath + "\\HidGuardHelper.exe"); + startInfo.Verb = "runas"; + startInfo.Arguments = Process.GetCurrentProcess().Id.ToString(); + startInfo.WorkingDirectory = Global.exepath; + try + { Process tempProc = Process.Start(startInfo); tempProc.Dispose(); } + catch { } + } + for (int i = 0, arlength = DS4Controllers.Length; i < arlength; i++) { processingData[i] = new X360Data(); diff --git a/DS4Windows/DS4Control/Mapping.cs b/DS4Windows/DS4Control/Mapping.cs index 3632319..d663640 100644 --- a/DS4Windows/DS4Control/Mapping.cs +++ b/DS4Windows/DS4Control/Mapping.cs @@ -3077,11 +3077,11 @@ namespace DS4Windows switch (control) { - case DS4Controls.LXNeg: result = cState.LX < 127 - 55; break; - case DS4Controls.LYNeg: result = cState.LY < 127 - 55; break; - case DS4Controls.RXNeg: result = cState.RX < 127 - 55; break; - case DS4Controls.RYNeg: result = cState.RY < 127 - 55; break; - default: result = axisValue > 127 + 55; break; + case DS4Controls.LXNeg: result = cState.LX < 128 - 55; break; + case DS4Controls.LYNeg: result = cState.LY < 128 - 55; break; + case DS4Controls.RXNeg: result = cState.RX < 128 - 55; break; + case DS4Controls.RYNeg: result = cState.RY < 128 - 55; break; + default: result = axisValue > 128 + 55; break; } } else if (controlType == DS4StateFieldMapping.ControlType.Trigger) @@ -3448,7 +3448,7 @@ namespace DS4Windows { byte result = 0; byte trueVal = 0; - byte falseVal = 127; + byte falseVal = 128; if (alt) trueVal = 255; @@ -3548,6 +3548,7 @@ namespace DS4Windows return result; } + /* TODO: Possibly remove usage of this version of the method */ public static byte getXYAxisMapping(int device, DS4Controls control, DS4State cState, DS4StateExposed eState, Mouse tp, bool alt = false) { byte result = 0; @@ -3690,74 +3691,6 @@ namespace DS4Windows return result; } - /* TODO: Possibly remove usage of this version of the method */ - //Returns false for any bool, - //if control is one of the xy axis returns 127 - //if its a trigger returns 0 - public static void resetToDefaultValue(DS4Controls control, DS4State cState) - { - if (control >= DS4Controls.Square && control <= DS4Controls.Cross) - { - switch (control) - { - case DS4Controls.Cross: cState.Cross = false; break; - case DS4Controls.Square: cState.Square = false; break; - case DS4Controls.Triangle: cState.Triangle = false; break; - case DS4Controls.Circle: cState.Circle = false; break; - default: break; - } - } - else if (control >= DS4Controls.L1 && control <= DS4Controls.R3) - { - switch (control) - { - case DS4Controls.L1: cState.L1 = false; break; - case DS4Controls.L2: cState.L2 = 0; break; - case DS4Controls.L3: cState.L3 = false; break; - case DS4Controls.R1: cState.R1 = false; break; - case DS4Controls.R2: cState.R2 = 0; break; - case DS4Controls.R3: cState.R3 = false; break; - default: break; - } - } - else if (control >= DS4Controls.DpadUp && control <= DS4Controls.DpadLeft) - { - switch (control) - { - case DS4Controls.DpadUp: cState.DpadUp = false; break; - case DS4Controls.DpadDown: cState.DpadDown = false; break; - case DS4Controls.DpadLeft: cState.DpadLeft = false; break; - case DS4Controls.DpadRight: cState.DpadRight = false; break; - default: break; - } - } - else if (control >= DS4Controls.LXNeg && control <= DS4Controls.RYPos) - { - switch (control) - { - case DS4Controls.LXNeg: cState.LX = 127; break; - case DS4Controls.LYNeg: cState.LY = 127; break; - case DS4Controls.RXNeg: cState.RX = 127; break; - case DS4Controls.RYNeg: cState.RY = 127; break; - case DS4Controls.LXPos: cState.LX = 127; break; - case DS4Controls.LYPos: cState.LY = 127; break; - case DS4Controls.RXPos: cState.RX = 127; break; - case DS4Controls.RYPos: cState.RY = 127; break; - default: break; - } - } - else - { - switch (control) - { - case DS4Controls.Share: cState.Share = false; break; - case DS4Controls.Options: cState.Options = false; break; - case DS4Controls.PS: cState.PS = false; break; - default: break; - } - } - } - private static void resetToDefaultValue2(DS4Controls control, DS4State cState, DS4StateFieldMapping fieldMap) { @@ -3769,9 +3702,9 @@ namespace DS4Windows } else if (controlType == DS4StateFieldMapping.ControlType.AxisDir) { - fieldMap.axisdirs[controlNum] = 127; + fieldMap.axisdirs[controlNum] = 128; int controlRelation = (controlNum % 2 == 0 ? controlNum - 1 : controlNum + 1); - fieldMap.axisdirs[controlRelation] = 127; + fieldMap.axisdirs[controlRelation] = 128; } else if (controlType == DS4StateFieldMapping.ControlType.Trigger) { diff --git a/DS4Windows/DS4Control/ScpUtil.cs b/DS4Windows/DS4Control/ScpUtil.cs index d22af86..f8ff2fa 100644 --- a/DS4Windows/DS4Control/ScpUtil.cs +++ b/DS4Windows/DS4Control/ScpUtil.cs @@ -227,7 +227,7 @@ namespace DS4Windows { protected static BackingStore m_Config = new BackingStore(); protected static Int32 m_IdleTimeout = 600000; - public static string exepath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName; + public static readonly string exepath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName; public static string appdatapath; public static bool firstRun = false; public static bool multisavespots = false; @@ -297,25 +297,28 @@ namespace DS4Windows return principal.IsInRole(WindowsBuiltInRole.Administrator); } - public static bool IsScpVBusInstalled() + private static bool CheckForSysDevice(string searchHardwareId) { bool result = false; Guid sysGuid = Guid.Parse("{4d36e97d-e325-11ce-bfc1-08002be10318}"); - NativeMethods.SP_DEVINFO_DATA deviceInfoData = new NativeMethods.SP_DEVINFO_DATA(); - deviceInfoData.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(deviceInfoData); + NativeMethods.SP_DEVINFO_DATA deviceInfoData = + new NativeMethods.SP_DEVINFO_DATA(); + deviceInfoData.cbSize = + System.Runtime.InteropServices.Marshal.SizeOf(deviceInfoData); var dataBuffer = new byte[4096]; ulong propertyType = 0; var requiredSize = 0; IntPtr deviceInfoSet = NativeMethods.SetupDiGetClassDevs(ref sysGuid, null, 0, 0); for (int i = 0; !result && NativeMethods.SetupDiEnumDeviceInfo(deviceInfoSet, i, ref deviceInfoData); i++) { - if (NativeMethods.SetupDiGetDeviceProperty(deviceInfoSet, ref deviceInfoData, ref NativeMethods.DEVPKEY_Device_HardwareIds, ref propertyType, + if (NativeMethods.SetupDiGetDeviceProperty(deviceInfoSet, ref deviceInfoData, + ref NativeMethods.DEVPKEY_Device_HardwareIds, ref propertyType, dataBuffer, dataBuffer.Length, ref requiredSize, 0)) { string hardwareId = dataBuffer.ToUTF16String(); //if (hardwareIds.Contains("Virtual Gamepad Emulation Bus")) // result = true; - if (hardwareId.Equals(@"Root\ViGEmBus")) + if (hardwareId.Equals(searchHardwareId)) result = true; } } @@ -328,6 +331,16 @@ namespace DS4Windows return result; } + public static bool IsHidGuardianInstalled() + { + return CheckForSysDevice(@"Root\HidGuardian"); + } + + public static bool IsScpVBusInstalled() + { + return CheckForSysDevice(@"Root\ViGEmBus"); + } + public static void FindConfigLocation() { if (File.Exists(exepath + "\\Auto Profiles.xml") @@ -3458,15 +3471,12 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) - { - dcs.UpdateSettings(shift, action, exts, kt, trigger); - break; - } + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + dcs.UpdateSettings(shift, action, exts, kt, trigger); } } @@ -3478,19 +3488,15 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) - { - if (shift) - dcs.shiftExtras = exts; - else - dcs.extras = exts; - - break; - } + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + if (shift) + dcs.shiftExtras = exts; + else + dcs.extras = exts; } } @@ -3502,19 +3508,15 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) - { - if (shift) - dcs.shiftKeyType = keyType; - else - dcs.keyType = keyType; - - break; - } + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + if (shift) + dcs.shiftKeyType = keyType; + else + dcs.keyType = keyType; } } @@ -3526,16 +3528,18 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + if (shift) { - if (shift) - return dcs.shiftAction; - else - return dcs.action; + return dcs.shiftTrigger; + } + else + { + return dcs.action; } } @@ -3570,17 +3574,15 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) - { - if (shift) - return dcs.shiftExtras; - else - return dcs.extras; - } + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + if (shift) + return dcs.shiftExtras; + else + return dcs.extras; } return null; @@ -3594,17 +3596,15 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) - { - if (shift) - return dcs.shiftKeyType; - else - return dcs.keyType; - } + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + if (shift) + return dcs.shiftKeyType; + else + return dcs.keyType; } return DS4KeyType.None; @@ -3618,12 +3618,12 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) - return dcs.shiftTrigger; + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + return dcs.shiftTrigger; } return 0; @@ -3650,12 +3650,12 @@ namespace DS4Windows else dc = (DS4Controls)Enum.Parse(typeof(DS4Controls), buttonName, true); - List ds4settingsList = ds4settings[deviceNum]; - for (int i = 0, settingsLen = ds4settingsList.Count; i < settingsLen; i++) + int temp = (int)dc; + if (temp > 0) { - DS4ControlSettings dcs = ds4settingsList[i]; - if (dcs.control == dc) - return dcs; + int index = temp - 1; + DS4ControlSettings dcs = ds4settings[deviceNum][index]; + return dcs; } return null; diff --git a/DS4Windows/DS4Forms/DS4Form.cs b/DS4Windows/DS4Forms/DS4Form.cs index 374d357..bb68dde 100644 --- a/DS4Windows/DS4Forms/DS4Form.cs +++ b/DS4Windows/DS4Forms/DS4Form.cs @@ -401,7 +401,7 @@ namespace DS4Windows if (btnStartStop.Enabled && start) { - TaskRunner.Delay(50).ContinueWith((t) => { + TaskRunner.Delay(100).ContinueWith((t) => { this.BeginInvoke((System.Action)(() => BtnStartStop_Clicked())); }); } diff --git a/DS4Windows/HidLibrary/HidDevice.cs b/DS4Windows/HidLibrary/HidDevice.cs index 7af84f2..0d9c894 100644 --- a/DS4Windows/HidLibrary/HidDevice.cs +++ b/DS4Windows/HidLibrary/HidDevice.cs @@ -450,11 +450,11 @@ namespace DS4Windows if (isExclusive) { - hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, 0, IntPtr.Zero, NativeMethods.OpenExisting, 0x20000000 | 0x80000000 | NativeMethods.FILE_FLAG_OVERLAPPED, 0); + hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, 0, IntPtr.Zero, NativeMethods.OpenExisting, 0x20000000 | 0x80000000 | 0x100 | NativeMethods.FILE_FLAG_OVERLAPPED, 0); } else { - hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, NativeMethods.FILE_SHARE_READ | NativeMethods.FILE_SHARE_WRITE, IntPtr.Zero, NativeMethods.OpenExisting, 0x20000000 | 0x80000000 | NativeMethods.FILE_FLAG_OVERLAPPED, 0); + hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, NativeMethods.FILE_SHARE_READ | NativeMethods.FILE_SHARE_WRITE, IntPtr.Zero, NativeMethods.OpenExisting, 0x20000000 | 0x80000000 | 0x100 | NativeMethods.FILE_FLAG_OVERLAPPED, 0); } return hidHandle; diff --git a/DS4Windows/Properties/AssemblyInfo.cs b/DS4Windows/Properties/AssemblyInfo.cs index 3ddc1a6..1497a9d 100644 --- a/DS4Windows/Properties/AssemblyInfo.cs +++ b/DS4Windows/Properties/AssemblyInfo.cs @@ -33,7 +33,7 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.6.7")] -[assembly: AssemblyFileVersion("1.6.7")] +[assembly: AssemblyVersion("1.6.8")] +[assembly: AssemblyFileVersion("1.6.8")] [assembly: NeutralResourcesLanguage("en")] diff --git a/DS4Windows/newest.txt b/DS4Windows/newest.txt index 400084b..d8c5e72 100644 --- a/DS4Windows/newest.txt +++ b/DS4Windows/newest.txt @@ -1 +1 @@ -1.6.7 +1.6.8