mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2025-01-11 15:59:08 +01:00
Merge branch 'jay' of https://github.com/Ryochan7/DS4Windows into jay
This commit is contained in:
commit
13607ebc7c
@ -304,7 +304,8 @@ namespace DS4Windows
|
||||
if (tempLightBarOnDuration != haptics.LightBarFlashDurationOn && tempLightBarOnDuration != 1 && haptics.LightBarFlashDurationOn == 0)
|
||||
haptics.LightBarFlashDurationOff = haptics.LightBarFlashDurationOn = 1;
|
||||
|
||||
device.pushHapticState(ref haptics);
|
||||
device.SetHapticState(ref haptics);
|
||||
//device.pushHapticState(ref haptics);
|
||||
}
|
||||
|
||||
public static bool defaultLight = false, shuttingdown = false;
|
||||
|
@ -1846,6 +1846,9 @@ namespace DS4Windows
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string prolog = Properties.Resources.UsingProfile.Replace("*number*", (device + 1).ToString()).Replace("*Profile name*", action.details);
|
||||
AppLogger.LogToGui(prolog, false);
|
||||
LoadTempProfile(device, action.details, true, ctrl);
|
||||
return;
|
||||
}
|
||||
@ -2233,6 +2236,8 @@ namespace DS4Windows
|
||||
}
|
||||
|
||||
untriggeraction[device] = null;
|
||||
string prolog = Properties.Resources.UsingProfile.Replace("*number*", (device + 1).ToString()).Replace("*Profile name*", ProfilePath[device]);
|
||||
AppLogger.LogToGui(prolog, false);
|
||||
LoadProfile(device, false, ctrl);
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Drawing;
|
||||
using Microsoft.Win32;
|
||||
using System.Diagnostics;
|
||||
using System.Xml;
|
||||
using System.Text;
|
||||
@ -18,6 +17,7 @@ using TaskRunner = System.Threading.Tasks.Task;
|
||||
using NonFormTimer = System.Timers.Timer;
|
||||
using static DS4Windows.Global;
|
||||
using System.Security;
|
||||
using System.Management;
|
||||
|
||||
namespace DS4Windows
|
||||
{
|
||||
@ -37,8 +37,8 @@ namespace DS4Windows
|
||||
private ToolStripMenuItem[] shortcuts;
|
||||
private ToolStripMenuItem[] disconnectShortcuts;
|
||||
protected CheckBox[] linkedProfileCB;
|
||||
NonFormTimer hotkeysTimer = new NonFormTimer();
|
||||
NonFormTimer autoProfilesTimer = new NonFormTimer();
|
||||
NonFormTimer hotkeysTimer = null;// new NonFormTimer();
|
||||
NonFormTimer autoProfilesTimer = null;// new NonFormTimer();
|
||||
string tempProfileProgram = string.Empty;
|
||||
double dpix, dpiy;
|
||||
List<string> profilenames = new List<string>();
|
||||
@ -56,7 +56,7 @@ namespace DS4Windows
|
||||
bool runningBat;
|
||||
private bool changingService;
|
||||
private IntPtr regHandle = new IntPtr();
|
||||
private static DS4Form instance;
|
||||
private ManagementEventWatcher managementEvWatcher;
|
||||
Dictionary<Control, string> hoverTextDict = new Dictionary<Control, string>();
|
||||
// 0 index is used for application version text. 1 - 4 indices are used for controller status
|
||||
string[] notifyText = new string[5]
|
||||
@ -66,7 +66,7 @@ namespace DS4Windows
|
||||
private const string UPDATER_VERSION = "1.3.0";
|
||||
private const int WM_QUERYENDSESSION = 0x11;
|
||||
private const int WM_CLOSE = 0x10;
|
||||
internal string updaterExe = Environment.Is64BitProcess ? "DS4Updater_x64.exe" : "DS4Updater_x86.exe";
|
||||
internal string updaterExe = Environment.Is64BitProcess ? "DS4Updater.exe" : "DS4Updater_x86.exe";
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern IntPtr GetForegroundWindow();
|
||||
@ -126,7 +126,13 @@ namespace DS4Windows
|
||||
|
||||
linkedProfileCB = new CheckBox[4] { linkCB1, linkCB2, linkCB3, linkCB4 };
|
||||
|
||||
SystemEvents.PowerModeChanged += OnPowerChange;
|
||||
WqlEventQuery q = new WqlEventQuery();
|
||||
ManagementScope scope = new ManagementScope("root\\CIMV2");
|
||||
q.EventClassName = "Win32_PowerManagementEvent";
|
||||
managementEvWatcher = new ManagementEventWatcher(scope, q);
|
||||
managementEvWatcher.EventArrived += PowerEventArrive;
|
||||
managementEvWatcher.Start();
|
||||
|
||||
tSOptions.Visible = false;
|
||||
|
||||
TaskRunner.Run(() => CheckDrivers());
|
||||
@ -243,16 +249,10 @@ namespace DS4Windows
|
||||
*/
|
||||
//tabProfiles.Controls.Add(opt);
|
||||
|
||||
//autoProfilesTimer.Elapsed += CheckAutoProfiles;
|
||||
autoProfilesTimer.Interval = 1000;
|
||||
autoProfilesTimer.AutoReset = false;
|
||||
|
||||
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
|
||||
string version = fvi.FileVersion;
|
||||
LogDebug(DateTime.Now, "DS4Windows version " + version, false);
|
||||
|
||||
LoadP();
|
||||
|
||||
Global.BatteryStatusChange += BatteryStatusUpdate;
|
||||
Global.ControllerRemoved += ControllerRemovedChange;
|
||||
Global.DeviceStatusChange += DeviceStatusChanged;
|
||||
@ -264,17 +264,9 @@ namespace DS4Windows
|
||||
Enable_Controls(3, false);
|
||||
btnStartStop.Text = Properties.Resources.StartText;
|
||||
|
||||
//hotkeysTimer.Elapsed += Hotkeys;
|
||||
hotkeysTimer.AutoReset = false;
|
||||
if (SwipeProfiles)
|
||||
{
|
||||
ChangeHotkeysStatus(true);
|
||||
//hotkeysTimer.Start();
|
||||
}
|
||||
|
||||
startToolStripMenuItem.Text = btnStartStop.Text;
|
||||
cBoxNotifications.SelectedIndex = Notifications;
|
||||
cBSwipeProfiles.Checked = SwipeProfiles;
|
||||
//cBSwipeProfiles.Checked = SwipeProfiles;
|
||||
int checkwhen = CheckWhen;
|
||||
cBUpdate.Checked = checkwhen > 0;
|
||||
if (checkwhen > 23)
|
||||
@ -378,7 +370,6 @@ namespace DS4Windows
|
||||
}
|
||||
}
|
||||
|
||||
instance = this;
|
||||
this.Resize += Form_Resize;
|
||||
this.LocationChanged += TrackLocationChanged;
|
||||
if (!(StartMinimized || mini))
|
||||
@ -414,6 +405,33 @@ namespace DS4Windows
|
||||
this.BeginInvoke((System.Action)(() => BtnStartStop_Clicked()));
|
||||
});
|
||||
}
|
||||
|
||||
Thread timerThread = new Thread(() =>
|
||||
{
|
||||
hotkeysTimer = new NonFormTimer();
|
||||
//hotkeysTimer.Elapsed += Hotkeys;
|
||||
hotkeysTimer.AutoReset = false;
|
||||
if (SwipeProfiles)
|
||||
{
|
||||
ChangeHotkeysStatus(true);
|
||||
//hotkeysTimer.Start();
|
||||
}
|
||||
|
||||
autoProfilesTimer = new NonFormTimer();
|
||||
//autoProfilesTimer.Elapsed += CheckAutoProfiles;
|
||||
autoProfilesTimer.Interval = 1000;
|
||||
autoProfilesTimer.AutoReset = false;
|
||||
|
||||
LoadP();
|
||||
|
||||
this.BeginInvoke((System.Action)(() =>
|
||||
{
|
||||
cBSwipeProfiles.Checked = SwipeProfiles;
|
||||
}));
|
||||
});
|
||||
timerThread.IsBackground = true;
|
||||
timerThread.Priority = ThreadPriority.Lowest;
|
||||
timerThread.Start();
|
||||
}
|
||||
|
||||
private void populateHoverTextDict()
|
||||
@ -529,33 +547,37 @@ namespace DS4Windows
|
||||
return text.ToString();
|
||||
}
|
||||
|
||||
private static void OnPowerChange(object s, PowerModeChangedEventArgs e)
|
||||
private void PowerEventArrive(object sender, EventArrivedEventArgs e)
|
||||
{
|
||||
switch (e.Mode)
|
||||
short evType = Convert.ToInt16(e.NewEvent.GetPropertyValue("EventType"));
|
||||
switch (evType)
|
||||
{
|
||||
case PowerModes.Resume:
|
||||
case 7:
|
||||
{
|
||||
if (instance.btnStartStop.Text == Properties.Resources.StartText && instance.wasrunning)
|
||||
if (btnStartStop.Text == Properties.Resources.StartText && wasrunning)
|
||||
{
|
||||
DS4LightBar.shuttingdown = false;
|
||||
instance.wasrunning = false;
|
||||
wasrunning = false;
|
||||
Program.rootHub.suspending = false;
|
||||
instance.BtnStartStop_Clicked();
|
||||
this.Invoke((System.Action)(() => BtnStartStop_Clicked()));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case PowerModes.Suspend:
|
||||
case 4:
|
||||
{
|
||||
if (instance.btnStartStop.Text == Properties.Resources.StopText)
|
||||
if (btnStartStop.Text == Properties.Resources.StopText)
|
||||
{
|
||||
DS4LightBar.shuttingdown = true;
|
||||
Program.rootHub.suspending = true;
|
||||
instance.BtnStartStop_Clicked();
|
||||
instance.wasrunning = true;
|
||||
this.Invoke((System.Action)(() => BtnStartStop_Clicked()));
|
||||
wasrunning = true;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1794,7 +1816,6 @@ Properties.Resources.DS4Update, MessageBoxButtons.YesNo, MessageBoxIcon.Question
|
||||
private void StartWindowsCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
bool isChecked = StartWindowsCheckBox.Checked;
|
||||
RegistryKey KeyLoc = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
|
||||
if (isChecked && !File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\DS4Windows.lnk"))
|
||||
{
|
||||
appShortcutToStartup();
|
||||
@ -1804,8 +1825,6 @@ Properties.Resources.DS4Update, MessageBoxButtons.YesNo, MessageBoxIcon.Question
|
||||
File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\DS4Windows.lnk");
|
||||
}
|
||||
|
||||
KeyLoc.DeleteValue("DS4Tool", false);
|
||||
|
||||
if (isChecked)
|
||||
{
|
||||
runStartupPanel.Visible = true;
|
||||
|
@ -140,10 +140,6 @@ namespace DS4Windows
|
||||
private byte[] outReportBuffer, outputReport;
|
||||
private readonly DS4Touchpad touchpad = null;
|
||||
private readonly DS4SixAxis sixAxis = null;
|
||||
private byte rightLightFastRumble;
|
||||
private byte leftHeavySlowRumble;
|
||||
private DS4Color ligtBarColor;
|
||||
private byte ledFlashOn, ledFlashOff;
|
||||
private Thread ds4Input, ds4Output;
|
||||
private int battery;
|
||||
private DS4Audio audio = null;
|
||||
@ -306,73 +302,44 @@ namespace DS4Windows
|
||||
|
||||
public byte RightLightFastRumble
|
||||
{
|
||||
get { return rightLightFastRumble; }
|
||||
get { return currentHap.RumbleMotorStrengthRightLightFast; }
|
||||
set
|
||||
{
|
||||
if (rightLightFastRumble != value)
|
||||
rightLightFastRumble = value;
|
||||
if (currentHap.RumbleMotorStrengthRightLightFast != value)
|
||||
currentHap.RumbleMotorStrengthRightLightFast = value;
|
||||
}
|
||||
}
|
||||
|
||||
public byte LeftHeavySlowRumble
|
||||
{
|
||||
get { return leftHeavySlowRumble; }
|
||||
get { return currentHap.RumbleMotorStrengthLeftHeavySlow; }
|
||||
set
|
||||
{
|
||||
if (leftHeavySlowRumble != value)
|
||||
leftHeavySlowRumble = value;
|
||||
if (currentHap.RumbleMotorStrengthLeftHeavySlow != value)
|
||||
currentHap.RumbleMotorStrengthLeftHeavySlow = value;
|
||||
}
|
||||
}
|
||||
|
||||
public byte getLeftHeavySlowRumble()
|
||||
{
|
||||
return leftHeavySlowRumble;
|
||||
return currentHap.RumbleMotorStrengthLeftHeavySlow;
|
||||
}
|
||||
|
||||
public DS4Color LightBarColor
|
||||
{
|
||||
get { return ligtBarColor; }
|
||||
get { return currentHap.LightBarColor; }
|
||||
set
|
||||
{
|
||||
if (ligtBarColor.red != value.red || ligtBarColor.green != value.green || ligtBarColor.blue != value.blue)
|
||||
if (currentHap.LightBarColor.red != value.red || currentHap.LightBarColor.green != value.green || currentHap.LightBarColor.blue != value.blue)
|
||||
{
|
||||
ligtBarColor = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte LightBarOnDuration
|
||||
{
|
||||
get { return ledFlashOn; }
|
||||
set
|
||||
{
|
||||
if (ledFlashOn != value)
|
||||
{
|
||||
ledFlashOn = value;
|
||||
currentHap.LightBarColor = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte getLightBarOnDuration()
|
||||
{
|
||||
return ledFlashOn;
|
||||
}
|
||||
|
||||
public byte LightBarOffDuration
|
||||
{
|
||||
get { return ledFlashOff; }
|
||||
set
|
||||
{
|
||||
if (ledFlashOff != value)
|
||||
{
|
||||
ledFlashOff = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte getLightBarOffDuration()
|
||||
{
|
||||
return ledFlashOff;
|
||||
return currentHap.LightBarFlashDurationOn;
|
||||
}
|
||||
|
||||
// Specify the poll rate interval used for the DS4 hardware when
|
||||
@ -561,7 +528,7 @@ namespace DS4Windows
|
||||
if (conType == ConnectionType.BT)
|
||||
{
|
||||
ds4Output = new Thread(performDs4Output);
|
||||
ds4Output.Priority = ThreadPriority.AboveNormal;
|
||||
ds4Output.Priority = ThreadPriority.Normal;
|
||||
ds4Output.Name = "DS4 Output thread: " + Mac;
|
||||
ds4Output.IsBackground = true;
|
||||
ds4Output.Start();
|
||||
@ -575,7 +542,7 @@ namespace DS4Windows
|
||||
else
|
||||
{
|
||||
ds4Output = new Thread(OutReportCopy);
|
||||
ds4Output.Priority = ThreadPriority.AboveNormal;
|
||||
ds4Output.Priority = ThreadPriority.Normal;
|
||||
ds4Output.Name = "DS4 Arr Copy thread: " + Mac;
|
||||
ds4Output.IsBackground = true;
|
||||
ds4Output.Start();
|
||||
@ -647,6 +614,7 @@ namespace DS4Windows
|
||||
}
|
||||
|
||||
private byte outputPendCount = 0;
|
||||
private readonly Stopwatch standbySw = new Stopwatch();
|
||||
private unsafe void performDs4Output()
|
||||
{
|
||||
try
|
||||
@ -689,7 +657,15 @@ namespace DS4Windows
|
||||
byteR[i] = byteB[i];
|
||||
}
|
||||
//outReportBuffer.CopyTo(outputReport, 0);
|
||||
outputPendCount--;
|
||||
if (outputPendCount > 1)
|
||||
outputPendCount--;
|
||||
else if (outputPendCount == 1)
|
||||
{
|
||||
outputPendCount--;
|
||||
standbySw.Restart();
|
||||
}
|
||||
else
|
||||
standbySw.Restart();
|
||||
}
|
||||
|
||||
currentRumble = true;
|
||||
@ -774,6 +750,7 @@ namespace DS4Windows
|
||||
int crcpos = BT_INPUT_REPORT_CRC32_POS;
|
||||
int crcoffset = 0;
|
||||
long latencySum = 0;
|
||||
standbySw.Start();
|
||||
|
||||
while (!exitInputThread)
|
||||
{
|
||||
@ -893,7 +870,7 @@ namespace DS4Windows
|
||||
}
|
||||
|
||||
utcNow = DateTime.UtcNow; // timestamp with UTC in case system time zone changes
|
||||
resetHapticState();
|
||||
|
||||
cState.PacketCounter = pState.PacketCounter + 1;
|
||||
cState.ReportTimeStamp = utcNow;
|
||||
cState.LX = inputReport[1];
|
||||
@ -1162,8 +1139,9 @@ namespace DS4Windows
|
||||
|
||||
private unsafe void sendOutputReport(bool synchronous, bool force = false)
|
||||
{
|
||||
setTestRumble();
|
||||
setHapticState();
|
||||
MergeStates();
|
||||
//setTestRumble();
|
||||
//setHapticState();
|
||||
|
||||
bool quitOutputThread = false;
|
||||
bool usingBT = conType == ConnectionType.BT;
|
||||
@ -1178,13 +1156,13 @@ namespace DS4Windows
|
||||
outReportBuffer[1] = (byte)(0x80 | btPollRate); // input report rate
|
||||
// enable rumble (0x01), lightbar (0x02), flash (0x04)
|
||||
outReportBuffer[3] = 0xf7;
|
||||
outReportBuffer[6] = rightLightFastRumble; // fast motor
|
||||
outReportBuffer[7] = leftHeavySlowRumble; // slow motor
|
||||
outReportBuffer[8] = ligtBarColor.red; // red
|
||||
outReportBuffer[9] = ligtBarColor.green; // green
|
||||
outReportBuffer[10] = ligtBarColor.blue; // blue
|
||||
outReportBuffer[11] = ledFlashOn; // flash on duration
|
||||
outReportBuffer[12] = ledFlashOff; // flash off duration
|
||||
outReportBuffer[6] = currentHap.RumbleMotorStrengthRightLightFast; // fast motor
|
||||
outReportBuffer[7] = currentHap.RumbleMotorStrengthLeftHeavySlow; // slow motor
|
||||
outReportBuffer[8] = currentHap.LightBarColor.red; // red
|
||||
outReportBuffer[9] = currentHap.LightBarColor.green; // green
|
||||
outReportBuffer[10] = currentHap.LightBarColor.blue; // blue
|
||||
outReportBuffer[11] = currentHap.LightBarFlashDurationOn; // flash on duration
|
||||
outReportBuffer[12] = currentHap.LightBarFlashDurationOff; // flash off duration
|
||||
|
||||
fixed (byte* byteR = outputReport, byteB = outReportBuffer)
|
||||
{
|
||||
@ -1197,13 +1175,13 @@ namespace DS4Windows
|
||||
outReportBuffer[0] = 0x05;
|
||||
// enable rumble (0x01), lightbar (0x02), flash (0x04)
|
||||
outReportBuffer[1] = 0xf7;
|
||||
outReportBuffer[4] = rightLightFastRumble; // fast motor
|
||||
outReportBuffer[5] = leftHeavySlowRumble; // slow motor
|
||||
outReportBuffer[6] = ligtBarColor.red; // red
|
||||
outReportBuffer[7] = ligtBarColor.green; // green
|
||||
outReportBuffer[8] = ligtBarColor.blue; // blue
|
||||
outReportBuffer[9] = ledFlashOn; // flash on duration
|
||||
outReportBuffer[10] = ledFlashOff; // flash off duration
|
||||
outReportBuffer[4] = currentHap.RumbleMotorStrengthRightLightFast; // fast motor
|
||||
outReportBuffer[5] = currentHap.RumbleMotorStrengthLeftHeavySlow; // slow motor
|
||||
outReportBuffer[6] = currentHap.LightBarColor.red; // red
|
||||
outReportBuffer[7] = currentHap.LightBarColor.green; // green
|
||||
outReportBuffer[8] = currentHap.LightBarColor.blue; // blue
|
||||
outReportBuffer[9] = currentHap.LightBarFlashDurationOn; // flash on duration
|
||||
outReportBuffer[10] = currentHap.LightBarFlashDurationOff; // flash off duration
|
||||
|
||||
fixed (byte* byteR = outputReport, byteB = outReportBuffer)
|
||||
{
|
||||
@ -1223,10 +1201,24 @@ namespace DS4Windows
|
||||
|
||||
if (synchronous)
|
||||
{
|
||||
outputPendCount = 3;
|
||||
|
||||
if (change)
|
||||
output = output || standbySw.ElapsedMilliseconds >= 4000L;
|
||||
if (output || change)
|
||||
{
|
||||
if (change)
|
||||
{
|
||||
outputPendCount = 3;
|
||||
standbySw.Reset();
|
||||
}
|
||||
else if (outputPendCount > 1)
|
||||
outputPendCount--;
|
||||
else if (outputPendCount == 1)
|
||||
{
|
||||
outputPendCount--;
|
||||
standbySw.Restart();
|
||||
}
|
||||
else
|
||||
standbySw.Restart();
|
||||
|
||||
if (usingBT)
|
||||
{
|
||||
Monitor.Enter(outputReport);
|
||||
@ -1258,11 +1250,13 @@ namespace DS4Windows
|
||||
//for (int i = 0, arlen = outputReport.Length; !change && i < arlen; i++)
|
||||
// change = outputReport[i] != outReportBuffer[i];
|
||||
|
||||
output = output || standbySw.ElapsedMilliseconds >= 4000L;
|
||||
if (output || change)
|
||||
{
|
||||
if (change)
|
||||
{
|
||||
outputPendCount = 3;
|
||||
standbySw.Reset();
|
||||
}
|
||||
|
||||
Monitor.Pulse(outReportBuffer);
|
||||
@ -1398,13 +1392,15 @@ namespace DS4Windows
|
||||
testRumble.RumbleMotorsExplicitlyOff = rightLightFastMotor == 0 && leftHeavySlowMotor == 0;
|
||||
}
|
||||
|
||||
private void setTestRumble()
|
||||
private void MergeStates()
|
||||
{
|
||||
if (testRumble.IsRumbleSet())
|
||||
{
|
||||
pushHapticState(ref testRumble);
|
||||
if (testRumble.RumbleMotorsExplicitlyOff)
|
||||
testRumble.RumbleMotorsExplicitlyOff = false;
|
||||
|
||||
currentHap.RumbleMotorStrengthLeftHeavySlow = testRumble.RumbleMotorStrengthLeftHeavySlow;
|
||||
currentHap.RumbleMotorStrengthRightLightFast = testRumble.RumbleMotorStrengthRightLightFast;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1459,60 +1455,10 @@ namespace DS4Windows
|
||||
return true;
|
||||
}
|
||||
|
||||
private DS4HapticState[] hapticState = new DS4HapticState[1];
|
||||
private int hapticStackIndex = 0;
|
||||
private void resetHapticState()
|
||||
private DS4HapticState currentHap = new DS4HapticState();
|
||||
public void SetHapticState(ref DS4HapticState hs)
|
||||
{
|
||||
hapticStackIndex = 0;
|
||||
}
|
||||
|
||||
delegate void HapticItem(ref DS4HapticState haptic);
|
||||
|
||||
// Use the "most recently set" haptic state for each of light bar/motor.
|
||||
private void setHapticState()
|
||||
{
|
||||
byte lightBarFlashDurationOn = ledFlashOn, lightBarFlashDurationOff = ledFlashOff;
|
||||
byte rumbleMotorStrengthLeftHeavySlow = leftHeavySlowRumble,
|
||||
rumbleMotorStrengthRightLightFast = rightLightFastRumble;
|
||||
int hapticLen = hapticState.Length;
|
||||
for (int i=0; i < hapticLen; i++)
|
||||
{
|
||||
if (i == hapticStackIndex)
|
||||
break; // rest haven't been used this time
|
||||
|
||||
((HapticItem)((ref DS4HapticState haptic) => {
|
||||
if (haptic.IsLightBarSet())
|
||||
{
|
||||
ligtBarColor = haptic.LightBarColor;
|
||||
lightBarFlashDurationOn = haptic.LightBarFlashDurationOn;
|
||||
lightBarFlashDurationOff = haptic.LightBarFlashDurationOff;
|
||||
}
|
||||
|
||||
if (haptic.IsRumbleSet())
|
||||
{
|
||||
rumbleMotorStrengthLeftHeavySlow = haptic.RumbleMotorStrengthLeftHeavySlow;
|
||||
rumbleMotorStrengthRightLightFast = haptic.RumbleMotorStrengthRightLightFast;
|
||||
}
|
||||
}))(ref hapticState[i]);
|
||||
}
|
||||
|
||||
ledFlashOn = lightBarFlashDurationOn;
|
||||
ledFlashOff = lightBarFlashDurationOff;
|
||||
leftHeavySlowRumble = rumbleMotorStrengthLeftHeavySlow;
|
||||
rightLightFastRumble = rumbleMotorStrengthRightLightFast;
|
||||
}
|
||||
|
||||
public void pushHapticState(ref DS4HapticState hs)
|
||||
{
|
||||
int hapsLen = hapticState.Length;
|
||||
if (hapticStackIndex == hapsLen)
|
||||
{
|
||||
DS4HapticState[] newHaptics = new DS4HapticState[hapsLen + 1];
|
||||
Array.Copy(hapticState, newHaptics, hapsLen);
|
||||
hapticState = newHaptics;
|
||||
}
|
||||
|
||||
hapticState[hapticStackIndex++] = hs;
|
||||
currentHap = hs;
|
||||
}
|
||||
|
||||
override
|
||||
|
@ -123,6 +123,7 @@
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Management" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
|
@ -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.2")]
|
||||
[assembly: AssemblyFileVersion("1.6.2")]
|
||||
[assembly: AssemblyVersion("1.6.6")]
|
||||
[assembly: AssemblyFileVersion("1.6.6")]
|
||||
[assembly: NeutralResourcesLanguage("en")]
|
||||
|
||||
|
2
DS4Windows/Properties/Resources.Designer.cs
generated
2
DS4Windows/Properties/Resources.Designer.cs
generated
@ -1419,7 +1419,7 @@ namespace DS4Windows.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Please Download the Updater now, and place it in the programs folder, then check for update again.
|
||||
/// Looks up a localized string similar to Please Download the Updater now, place it in the programs folder and rename to DS4Updater.exe if on x86, then check for update again.
|
||||
/// </summary>
|
||||
public static string PleaseDownloadUpdater {
|
||||
get {
|
||||
|
@ -545,7 +545,7 @@
|
||||
<value>..\Resources\Pairmode.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="PleaseDownloadUpdater" xml:space="preserve">
|
||||
<value>Please Download the Updater now, and place it in the programs folder, then check for update again</value>
|
||||
<value>Please Download the Updater now, place it in the programs folder and rename to DS4Updater.exe if on x86, then check for update again</value>
|
||||
</data>
|
||||
<data name="PleaseImport" xml:space="preserve">
|
||||
<value>Please import or make a profile</value>
|
||||
|
@ -1 +1 @@
|
||||
1.6.2
|
||||
1.6.6
|
||||
|
Loading…
x
Reference in New Issue
Block a user