Add gyro mouse smoothing routine

This commit is contained in:
Travis Nickles 2017-06-28 21:42:16 -07:00
parent 86816db41a
commit 484337f42f
6 changed files with 327 additions and 40 deletions

View File

@ -18,7 +18,20 @@ namespace DS4Windows
private Direction horizontalDirection = Direction.Neutral, verticalDirection = Direction.Neutral;
private Direction hDirection = Direction.Neutral, vDirection = Direction.Neutral;
private double GYRO_MOUSE_COEFFICIENT = 0.0095;
private int GYRO_MOUSE_DEADZONE = 12;
private double GYRO_MOUSE_OFFSET = 0.1463;
private double GYRO_SMOOTH_MOUSE_OFFSET = 0.14698;
private const int SMOOTH_BUFFER_LEN = 3;
private double[] xSmoothBuffer = new double[SMOOTH_BUFFER_LEN];
private double[] ySmoothBuffer = new double[SMOOTH_BUFFER_LEN];
private int smoothBufferTail = 0;
double coefficient = 0.0;
double verticalScale = 0.0;
bool gyroSmooth = false;
//double gyroSmoothWeight = 0.0;
public virtual void sixaxisMoved(SixAxisEventArgs arg)
{
@ -27,8 +40,20 @@ namespace DS4Windows
deltaY = -arg.sixAxis.gyroYFull;
//Console.WriteLine(arg.sixAxis.deltaX);
double coefficient = (Global.getGyroSensitivity(deviceNumber) * 0.01) * 0.0095;
double offset = 0.1463;
gyroSmooth = Global.getGyroSmoothing(deviceNumber);
double gyroSmoothWeight = 0.0;
coefficient = (Global.getGyroSensitivity(deviceNumber) * 0.01) * GYRO_MOUSE_COEFFICIENT;
double offset = GYRO_MOUSE_OFFSET;
if (gyroSmooth)
{
gyroSmoothWeight = Global.getGyroSmoothingWeight(deviceNumber);
if (gyroSmoothWeight > 0.0)
{
offset = GYRO_SMOOTH_MOUSE_OFFSET;
}
}
double tempAngle = System.Math.Atan2(-deltaY, deltaX);
double normX = System.Math.Abs(System.Math.Cos(tempAngle));
double normY = System.Math.Abs(System.Math.Sin(tempAngle));
@ -45,7 +70,7 @@ namespace DS4Windows
vRemainder = 0.0;
}
int deadzone = 12;
int deadzone = GYRO_MOUSE_DEADZONE;
//int deadzone = 0;
int deadzoneX = (int)System.Math.Abs(normX * deadzone);
int deadzoneY = (int)System.Math.Abs(normY * deadzone);
@ -73,12 +98,12 @@ namespace DS4Windows
if (xMotion != 0.0)
{
xMotion += hRemainder;
xAction = (int)xMotion;
hRemainder = xMotion - xAction;
//xAction = (int)xMotion;
//hRemainder = xMotion - xAction;
}
else
{
hRemainder = 0.0;
//hRemainder = 0.0;
}
//hRemainder -= (int)hRemainder;
@ -88,6 +113,51 @@ namespace DS4Windows
if (yMotion != 0.0)
{
yMotion += vRemainder;
//yAction = (int)yMotion;
//vRemainder = yMotion - yAction;
}
else
{
//vRemainder = 0.0;
}
if (gyroSmooth)
{
int iIndex = smoothBufferTail % SMOOTH_BUFFER_LEN;
xSmoothBuffer[iIndex] = xMotion;
ySmoothBuffer[iIndex] = yMotion;
smoothBufferTail = iIndex + 1;
double currentWeight = 1.0;
double finalWeight = 0.0;
double x_out = 0.0, y_out = 0.0;
for (int i = 0; i < SMOOTH_BUFFER_LEN; i++)
{
int idx = System.Math.Abs(smoothBufferTail - i - 1) % SMOOTH_BUFFER_LEN;
x_out += xSmoothBuffer[idx] * currentWeight;
y_out += ySmoothBuffer[idx] * currentWeight;
finalWeight += currentWeight;
currentWeight *= gyroSmoothWeight;
}
x_out /= finalWeight;
xMotion = x_out;
y_out /= finalWeight;
yMotion = y_out;
}
if (xMotion != 0.0)
{
xAction = (int)xMotion;
hRemainder = xMotion - xAction;
}
else
{
hRemainder = 0.0;
}
if (yMotion != 0.0)
{
yAction = (int)yMotion;
vRemainder = yMotion - yAction;
}
@ -115,6 +185,10 @@ namespace DS4Windows
public void mouseRemainderReset()
{
hRemainder = vRemainder = 0.0;
int iIndex = smoothBufferTail % SMOOTH_BUFFER_LEN;
xSmoothBuffer[iIndex] = 0.0;
ySmoothBuffer[iIndex] = 0.0;
smoothBufferTail = iIndex + 1;
}
public void touchesBegan(TouchpadEventArgs arg)

View File

@ -596,6 +596,18 @@ namespace DS4Windows
return m_Config.gyroTriggerTurns[index];
}
public static bool[] GyroSmoothing => m_Config.gyroSmoothing;
public static bool getGyroSmoothing(int index)
{
return m_Config.gyroSmoothing[index];
}
public static double[] GyroSmoothingWeight => m_Config.gyroSmoothWeight;
public static double getGyroSmoothingWeight(int index)
{
return m_Config.gyroSmoothWeight[index];
}
public static DS4Color[] MainColor => m_Config.m_Leds;
public static DS4Color getMainColor(int index)
{
@ -1240,6 +1252,8 @@ namespace DS4Windows
public int[] gyroSensVerticalScale = { 100, 100, 100, 100, 100 };
public int[] gyroInvert = { 0, 0, 0, 0, 0 };
public bool[] gyroTriggerTurns = { true, true, true, true, true };
public bool[] gyroSmoothing = { false, false, false, false, false };
public double[] gyroSmoothWeight = { 0.5, 0.5, 0.5, 0.5, 0.5 };
public BackingStore()
{
@ -1450,6 +1464,8 @@ namespace DS4Windows
XmlNode xmlGyroSensVerticalScale = m_Xdoc.CreateNode(XmlNodeType.Element, "GyroSensVerticalScale", null); xmlGyroSensVerticalScale.InnerText = gyroSensVerticalScale[device].ToString(); Node.AppendChild(xmlGyroSensVerticalScale);
XmlNode xmlGyroInvert = m_Xdoc.CreateNode(XmlNodeType.Element, "GyroInvert", null); xmlGyroInvert.InnerText = gyroInvert[device].ToString(); Node.AppendChild(xmlGyroInvert);
XmlNode xmlGyroTriggerTurns = m_Xdoc.CreateNode(XmlNodeType.Element, "GyroTriggerTurns", null); xmlGyroTriggerTurns.InnerText = gyroTriggerTurns[device].ToString(); Node.AppendChild(xmlGyroTriggerTurns);
XmlNode xmlGyroSmoothWeight = m_Xdoc.CreateNode(XmlNodeType.Element, "GyroSmoothingWeight", null); xmlGyroSmoothWeight.InnerText = Convert.ToInt32(gyroSmoothWeight[device] * 100).ToString(); Node.AppendChild(xmlGyroSmoothWeight);
XmlNode xmlGyroSmoothing = m_Xdoc.CreateNode(XmlNodeType.Element, "GyroSmoothing", null); xmlGyroSmoothing.InnerText = gyroSmoothing[device].ToString(); Node.AppendChild(xmlGyroSmoothing);
XmlNode xmlLSC = m_Xdoc.CreateNode(XmlNodeType.Element, "LSCurve", null); xmlLSC.InnerText = lsCurve[device].ToString(); Node.AppendChild(xmlLSC);
XmlNode xmlRSC = m_Xdoc.CreateNode(XmlNodeType.Element, "RSCurve", null); xmlRSC.InnerText = rsCurve[device].ToString(); Node.AppendChild(xmlRSC);
XmlNode xmlProfileActions = m_Xdoc.CreateNode(XmlNodeType.Element, "ProfileActions", null); xmlProfileActions.InnerText = string.Join("/", profileActions[device]); Node.AppendChild(xmlProfileActions);
@ -2368,6 +2384,12 @@ namespace DS4Windows
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/GyroTriggerTurns"); bool.TryParse(Item.InnerText, out gyroTriggerTurns[device]); }
catch { gyroTriggerTurns[device] = true; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/GyroSmoothing"); bool.TryParse(Item.InnerText, out gyroSmoothing[device]); }
catch { gyroSmoothing[device] = false; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/GyroSmoothingWeight"); int temp = 0; int.TryParse(Item.InnerText, out temp); gyroSmoothWeight[device] = Convert.ToDouble(temp * 0.01); }
catch { gyroSmoothWeight[device] = 0.5; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LSCurve"); int.TryParse(Item.InnerText, out lsCurve[device]); }
catch { lsCurve[device] = 0; missingSetting = true; }
@ -3419,9 +3441,11 @@ namespace DS4Windows
gyroSensitivity[device] = 100;
gyroSensVerticalScale[device] = 100;
gyroInvert[device] = 0;
gyroTriggerTurns[device] = true;
gyroSmoothing[device] = false;
gyroSmoothWeight[device] = 0.5;
lsOutCurveMode[device] = 0;
rsOutCurveMode[device] = 0;
gyroTriggerTurns[device] = true;
}
}

View File

@ -287,6 +287,7 @@
this.rBSAControls = new System.Windows.Forms.RadioButton();
this.rBSAMouse = new System.Windows.Forms.RadioButton();
this.pnlSAMouse = new System.Windows.Forms.Panel();
this.label12 = new System.Windows.Forms.Label();
this.nUDGyroMouseVertScale = new System.Windows.Forms.NumericUpDown();
this.label11 = new System.Windows.Forms.Label();
this.gyroTriggerBehavior = new System.Windows.Forms.CheckBox();
@ -331,8 +332,11 @@
this.shareToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pSToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.alwaysOnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.nUDGyroSmoothWeight = new System.Windows.Forms.NumericUpDown();
this.lbSmoothWeight = new System.Windows.Forms.Label();
this.cBGyroSmooth = new System.Windows.Forms.CheckBox();
this.advColorDialog = new DS4Windows.AdvancedColorDialog();
this.label12 = new System.Windows.Forms.Label();
this.lbGyroSmooth = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.nUDRainbow)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tBBlueBar)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tBGreenBar)).BeginInit();
@ -416,6 +420,7 @@
((System.ComponentModel.ISupportInitialize)(this.nUDSXS)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSZS)).BeginInit();
this.cMGyroTriggers.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDGyroSmoothWeight)).BeginInit();
this.SuspendLayout();
//
// lowColorChooserButton
@ -3017,6 +3022,10 @@
//
// pnlSAMouse
//
this.pnlSAMouse.Controls.Add(this.lbGyroSmooth);
this.pnlSAMouse.Controls.Add(this.cBGyroSmooth);
this.pnlSAMouse.Controls.Add(this.lbSmoothWeight);
this.pnlSAMouse.Controls.Add(this.nUDGyroSmoothWeight);
this.pnlSAMouse.Controls.Add(this.label12);
this.pnlSAMouse.Controls.Add(this.nUDGyroMouseVertScale);
this.pnlSAMouse.Controls.Add(this.label11);
@ -3031,6 +3040,11 @@
resources.ApplyResources(this.pnlSAMouse, "pnlSAMouse");
this.pnlSAMouse.Name = "pnlSAMouse";
//
// label12
//
resources.ApplyResources(this.label12, "label12");
this.label12.Name = "label12";
//
// nUDGyroMouseVertScale
//
this.nUDGyroMouseVertScale.Increment = new decimal(new int[] {
@ -3518,10 +3532,39 @@
resources.ApplyResources(this.alwaysOnToolStripMenuItem, "alwaysOnToolStripMenuItem");
this.alwaysOnToolStripMenuItem.CheckedChanged += new System.EventHandler(this.SATrigger_CheckedChanged);
//
// label12
// nUDGyroSmoothWeight
//
resources.ApplyResources(this.label12, "label12");
this.label12.Name = "label12";
this.nUDGyroSmoothWeight.DecimalPlaces = 3;
resources.ApplyResources(this.nUDGyroSmoothWeight, "nUDGyroSmoothWeight");
this.nUDGyroSmoothWeight.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDGyroSmoothWeight.Name = "nUDGyroSmoothWeight";
this.nUDGyroSmoothWeight.Value = new decimal(new int[] {
5,
0,
0,
65536});
this.nUDGyroSmoothWeight.ValueChanged += new System.EventHandler(this.nUDGyroSmoothWeight_ValueChanged);
//
// lbSmoothWeight
//
resources.ApplyResources(this.lbSmoothWeight, "lbSmoothWeight");
this.lbSmoothWeight.Name = "lbSmoothWeight";
//
// cBGyroSmooth
//
resources.ApplyResources(this.cBGyroSmooth, "cBGyroSmooth");
this.cBGyroSmooth.Name = "cBGyroSmooth";
this.cBGyroSmooth.UseVisualStyleBackColor = true;
this.cBGyroSmooth.CheckedChanged += new System.EventHandler(this.cBGyroSmooth_CheckedChanged);
//
// lbGyroSmooth
//
resources.ApplyResources(this.lbGyroSmooth, "lbGyroSmooth");
this.lbGyroSmooth.Name = "lbGyroSmooth";
//
// Options
//
@ -3635,6 +3678,7 @@
((System.ComponentModel.ISupportInitialize)(this.nUDSXS)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSZS)).EndInit();
this.cMGyroTriggers.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.nUDGyroSmoothWeight)).EndInit();
this.ResumeLayout(false);
}
@ -3946,5 +3990,9 @@
private System.Windows.Forms.NumericUpDown nUDGyroMouseVertScale;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.Label lbSmoothWeight;
private System.Windows.Forms.NumericUpDown nUDGyroSmoothWeight;
private System.Windows.Forms.CheckBox cBGyroSmooth;
private System.Windows.Forms.Label lbGyroSmooth;
}
}

View File

@ -581,6 +581,9 @@ namespace DS4Windows
cBGyroInvertY.Checked = invert == 1 || invert == 3;
if (s.Count > 0)
btnGyroTriggers.Text = string.Join(", ", s);
cBGyroSmooth.Checked = nUDGyroSmoothWeight.Enabled = GyroSmoothing[device];
nUDGyroSmoothWeight.Value = (decimal)(GyroSmoothingWeight[device]);
}
else
{
@ -667,6 +670,8 @@ namespace DS4Windows
gyroTriggerBehavior.Checked = true;
cBGyroInvertX.Checked = false;
cBGyroInvertY.Checked = false;
cBGyroSmooth.Checked = false;
nUDGyroSmoothWeight.Value = 0.5m;
Set();
}
@ -1324,6 +1329,8 @@ namespace DS4Windows
GyroSensitivity[device] = (int)Math.Round(nUDGyroSensitivity.Value, 0);
GyroTriggerTurns[device] = gyroTriggerBehavior.Checked;
GyroSensVerticalScale[device] = (int)nUDGyroMouseVertScale.Value;
GyroSmoothing[device] = cBGyroSmooth.Checked;
GyroSmoothingWeight[device] = (double)nUDGyroSmoothWeight.Value;
int invert = 0;
if (cBGyroInvertX.Checked)
@ -2828,6 +2835,24 @@ namespace DS4Windows
}
}
private void nUDGyroSmoothWeight_ValueChanged(object sender, EventArgs e)
{
if (!loading)
{
GyroSmoothingWeight[device] = (double)nUDGyroSmoothWeight.Value;
}
}
private void cBGyroSmooth_CheckedChanged(object sender, EventArgs e)
{
bool value = cBGyroSmooth.Checked;
nUDGyroSmoothWeight.Enabled = value;
if (!loading)
{
GyroSmoothing[device] = value;
}
}
private void Options_Resize(object sender, EventArgs e)
{
fLPSettings.AutoScroll = false;

View File

@ -4496,7 +4496,7 @@ with profile</value>
<value>6, 51</value>
</data>
<data name="fLPTiltControls.Size" type="System.Drawing.Size, System.Drawing">
<value>271, 139</value>
<value>271, 167</value>
</data>
<data name="fLPTiltControls.TabIndex" type="System.Int32, mscorlib">
<value>254</value>
@ -8947,9 +8947,123 @@ with profile</value>
<data name="&gt;&gt;rBSAMouse.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lbGyroSmooth.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lbGyroSmooth.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 145</value>
</data>
<data name="lbGyroSmooth.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lbGyroSmooth.TabIndex" type="System.Int32, mscorlib">
<value>269</value>
</data>
<data name="lbGyroSmooth.Text" xml:space="preserve">
<value>Smoothing:</value>
</data>
<data name="&gt;&gt;lbGyroSmooth.Name" xml:space="preserve">
<value>lbGyroSmooth</value>
</data>
<data name="&gt;&gt;lbGyroSmooth.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lbGyroSmooth.Parent" xml:space="preserve">
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;lbGyroSmooth.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cBGyroSmooth.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cBGyroSmooth.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cBGyroSmooth.Location" type="System.Drawing.Point, System.Drawing">
<value>75, 145</value>
</data>
<data name="cBGyroSmooth.RightToLeft" type="System.Windows.Forms.RightToLeft, System.Windows.Forms">
<value>Yes</value>
</data>
<data name="cBGyroSmooth.Size" type="System.Drawing.Size, System.Drawing">
<value>15, 14</value>
</data>
<data name="cBGyroSmooth.TabIndex" type="System.Int32, mscorlib">
<value>268</value>
</data>
<data name="&gt;&gt;cBGyroSmooth.Name" xml:space="preserve">
<value>cBGyroSmooth</value>
</data>
<data name="&gt;&gt;cBGyroSmooth.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cBGyroSmooth.Parent" xml:space="preserve">
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;cBGyroSmooth.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lbSmoothWeight.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lbSmoothWeight.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lbSmoothWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 145</value>
</data>
<data name="lbSmoothWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 13</value>
</data>
<data name="lbSmoothWeight.TabIndex" type="System.Int32, mscorlib">
<value>267</value>
</data>
<data name="lbSmoothWeight.Text" xml:space="preserve">
<value>Smooth Weight:</value>
</data>
<data name="&gt;&gt;lbSmoothWeight.Name" xml:space="preserve">
<value>lbSmoothWeight</value>
</data>
<data name="&gt;&gt;lbSmoothWeight.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lbSmoothWeight.Parent" xml:space="preserve">
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;lbSmoothWeight.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="nUDGyroSmoothWeight.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="nUDGyroSmoothWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>185, 141</value>
</data>
<data name="nUDGyroSmoothWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 20</value>
</data>
<data name="nUDGyroSmoothWeight.TabIndex" type="System.Int32, mscorlib">
<value>266</value>
</data>
<data name="&gt;&gt;nUDGyroSmoothWeight.Name" xml:space="preserve">
<value>nUDGyroSmoothWeight</value>
</data>
<data name="&gt;&gt;nUDGyroSmoothWeight.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nUDGyroSmoothWeight.Parent" xml:space="preserve">
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;nUDGyroSmoothWeight.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label12.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label12.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label12.Location" type="System.Drawing.Point, System.Drawing">
<value>151, 98</value>
</data>
@ -8972,7 +9086,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;label12.ZOrder" xml:space="preserve">
<value>0</value>
<value>4</value>
</data>
<data name="nUDGyroMouseVertScale.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 93</value>
@ -8993,11 +9107,14 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;nUDGyroMouseVertScale.ZOrder" xml:space="preserve">
<value>1</value>
<value>5</value>
</data>
<data name="label11.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label11.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label11.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 95</value>
</data>
@ -9020,7 +9137,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;label11.ZOrder" xml:space="preserve">
<value>2</value>
<value>6</value>
</data>
<data name="gyroTriggerBehavior.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -9053,7 +9170,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;gyroTriggerBehavior.ZOrder" xml:space="preserve">
<value>3</value>
<value>7</value>
</data>
<data name="cBGyroInvertY.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -9086,7 +9203,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;cBGyroInvertY.ZOrder" xml:space="preserve">
<value>4</value>
<value>8</value>
</data>
<data name="cBGyroInvertX.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -9119,7 +9236,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;cBGyroInvertX.ZOrder" xml:space="preserve">
<value>5</value>
<value>9</value>
</data>
<data name="lbGyroInvert.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -9128,7 +9245,7 @@ with profile</value>
<value>NoControl</value>
</data>
<data name="lbGyroInvert.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 120</value>
<value>8, 119</value>
</data>
<data name="lbGyroInvert.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 13</value>
@ -9152,7 +9269,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;lbGyroInvert.ZOrder" xml:space="preserve">
<value>6</value>
<value>10</value>
</data>
<data name="lbGyroTriggers.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -9185,7 +9302,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;lbGyroTriggers.ZOrder" xml:space="preserve">
<value>7</value>
<value>11</value>
</data>
<data name="btnGyroTriggers.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -9215,10 +9332,10 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;btnGyroTriggers.ZOrder" xml:space="preserve">
<value>8</value>
<value>12</value>
</data>
<data name="nUDGyroSensitivity.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 63</value>
<value>96, 67</value>
</data>
<data name="nUDGyroSensitivity.Size" type="System.Drawing.Size, System.Drawing">
<value>49, 20</value>
@ -9236,7 +9353,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;nUDGyroSensitivity.ZOrder" xml:space="preserve">
<value>9</value>
<value>13</value>
</data>
<data name="lbGyroSens.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -9245,7 +9362,7 @@ with profile</value>
<value>NoControl</value>
</data>
<data name="lbGyroSens.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 66</value>
<value>8, 69</value>
</data>
<data name="lbGyroSens.Size" type="System.Drawing.Size, System.Drawing">
<value>82, 13</value>
@ -9269,7 +9386,7 @@ with profile</value>
<value>pnlSAMouse</value>
</data>
<data name="&gt;&gt;lbGyroSens.ZOrder" xml:space="preserve">
<value>10</value>
<value>14</value>
</data>
<data name="pnlSAMouse.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 43</value>
@ -9278,7 +9395,7 @@ with profile</value>
<value>2, 2, 2, 2</value>
</data>
<data name="pnlSAMouse.Size" type="System.Drawing.Size, System.Drawing">
<value>263, 139</value>
<value>263, 170</value>
</data>
<data name="pnlSAMouse.TabIndex" type="System.Int32, mscorlib">
<value>259</value>
@ -9299,7 +9416,7 @@ with profile</value>
<value>3, 253</value>
</data>
<data name="gBGyro.Size" type="System.Drawing.Size, System.Drawing">
<value>272, 196</value>
<value>272, 224</value>
</data>
<data name="gBGyro.TabIndex" type="System.Int32, mscorlib">
<value>248</value>
@ -9982,6 +10099,9 @@ with profile</value>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>1010, 481</value>
</data>
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
@ -10286,7 +10406,7 @@ with profile</value>
<value>advColorDialog</value>
</data>
<data name="&gt;&gt;advColorDialog.Type" xml:space="preserve">
<value>DS4Windows.AdvancedColorDialog, DS4Windows, Version=1.4.80.0, Culture=neutral, PublicKeyToken=null</value>
<value>DS4Windows.AdvancedColorDialog, DS4Windows, Version=1.4.81.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>Options</value>

View File

@ -671,23 +671,19 @@ namespace DS4Windows
currerror = string.Empty;
curTimeDouble = sw.Elapsed.TotalMilliseconds;
curtime = sw.ElapsedMilliseconds;
lastTimeElapsed = curtime - oldtime;
lastTimeElapsedDouble = (curTimeDouble - oldTimeDouble);
//latencyList.Add(this.lastTimeElapsed);
latencyQueue.Enqueue(this.lastTimeElapsed);
tempLatencyCount++;
oldtime = curtime;
oldTimeDouble = curTimeDouble;
if (tempLatencyCount > 50)
if (tempLatencyCount >= 50)
{
//latencyList.RemoveAt(0);
latencyQueue.Dequeue();
tempLatencyCount--;
}
//Latency = latencyList.Average();
//latencyList.Average();
lastTimeElapsed = curtime - oldtime;
lastTimeElapsedDouble = (curTimeDouble - oldTimeDouble);
latencyQueue.Enqueue(this.lastTimeElapsed);
tempLatencyCount++;
oldtime = curtime;
oldTimeDouble = curTimeDouble;
Latency = latencyQueue.Average();
if (conType == ConnectionType.BT)