Merge pull request #5 from Ryochan7/jay

Update to Version 1.4.86
This commit is contained in:
Yuki-nyan 2017-07-21 19:35:49 +01:00 committed by GitHub
commit 86d311b72a
16 changed files with 2849 additions and 3962 deletions

View File

@ -23,7 +23,7 @@ namespace DS4Windows
public DS4StateExposed[] ExposedState = new DS4StateExposed[DS4_CONTROLLER_COUNT];
public bool recordingMacro = false;
public event EventHandler<DebugEventArgs> Debug = null;
bool[] buttonsdown = { false, false, false, false };
bool[] buttonsdown = new bool[4] { false, false, false, false };
List<DS4Controls> dcs = new List<DS4Controls>();
bool[] held = new bool[DS4_CONTROLLER_COUNT];
int[] oldmouse = new int[DS4_CONTROLLER_COUNT] { -1, -1, -1, -1 };
@ -249,7 +249,7 @@ namespace DS4Windows
DS4LightBar.updateLightBar(DS4Controllers[i], i, CurrentState[i],
ExposedState[i], touchPad[i]);
tempDevice.IsRemoved = true;
System.Threading.Thread.Sleep(50);
Thread.Sleep(50);
}
CurrentState[i].Battery = PreviousState[i].Battery = 0; // Reset for the next connection's initial status change.
@ -264,7 +264,7 @@ namespace DS4Windows
}
if (anyUnplugged)
System.Threading.Thread.Sleep(XINPUT_UNPLUG_SETTLE_TIME);
Thread.Sleep(XINPUT_UNPLUG_SETTLE_TIME);
x360Bus.UnplugAll();
x360Bus.Stop();
@ -691,10 +691,10 @@ namespace DS4Windows
}
}
public bool[] lag = { false, false, false, false };
public bool[] inWarnMonitor = { false, false, false, false };
private byte[] currentBattery = { 0, 0, 0, 0 };
private bool[] charging = { false, false, false, false };
public bool[] lag = new bool[4] { false, false, false, false };
public bool[] inWarnMonitor = new bool[4] { false, false, false, false };
private byte[] currentBattery = new byte[4] { 0, 0, 0, 0 };
private bool[] charging = new bool[4] { false, false, false, false };
// Called every time a new input report has arrived
protected virtual void On_Report(object sender, EventArgs e)
@ -747,7 +747,7 @@ namespace DS4Windows
}
}
device.getExposedState(ExposedState[ind], CurrentState[ind]);
device.getCurrentState(CurrentState[ind]);
DS4State cState = CurrentState[ind];
device.getPreviousState(PreviousState[ind]);
DS4State pState = PreviousState[ind];
@ -963,9 +963,11 @@ namespace DS4Windows
return result;
}
public bool[] touchreleased = { true, true, true, true }, touchslid = { false, false, false, false };
public byte[] oldtouchvalue = { 0, 0, 0, 0 };
public int[] oldscrollvalue = { 0, 0, 0, 0 };
public bool[] touchreleased = new bool[4] { true, true, true, true },
touchslid = new bool[4] { false, false, false, false };
public byte[] oldtouchvalue = new byte[4] { 0, 0, 0, 0 };
public int[] oldscrollvalue = new int[4] { 0, 0, 0, 0 };
protected virtual void CheckForTouchToggle(int deviceID, DS4State cState, DS4State pState)
{

View File

@ -21,10 +21,15 @@ namespace DS4Windows
{ 224, 56 }, // on 80% of the time at 80, etc.
{ 252, 28 } // on 90% of the time at 90
};
static double[] counters = new double[4] { 0, 0, 0, 0 };
public static Stopwatch[] fadewatches = { new Stopwatch(), new Stopwatch(), new Stopwatch(), new Stopwatch() };
public static Stopwatch[] fadewatches = new Stopwatch[4]
{ new Stopwatch(), new Stopwatch(), new Stopwatch(), new Stopwatch() };
static bool[] fadedirection = new bool[4] { false, false, false, false };
static DateTime[] oldnow = { DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow };
static DateTime[] oldnow = new DateTime[4]
{ DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow };
public static bool[] forcelight = new bool[4] { false, false, false, false };
public static DS4Color[] forcedColor = new DS4Color[4];
public static byte[] forcedFlash = new byte[4];
@ -291,10 +296,6 @@ namespace DS4Windows
if (tempLightBarOnDuration != haptics.LightBarFlashDurationOn && tempLightBarOnDuration != 1 && haptics.LightBarFlashDurationOn == 0)
haptics.LightBarFlashDurationOff = haptics.LightBarFlashDurationOn = 1;
// Comment out code for now. This condition gets hit too often and bogs down the GUI
//if (device.LightBarOnDuration == 1) //helps better reset the color
// System.Threading.Thread.Sleep(5);
device.pushHapticState(haptics);
}

View File

@ -90,13 +90,13 @@ namespace DS4Windows
buttons[(int)DS4Controls.TouchUpper] = tp != null ? (!priorMouse ? tp.upperDown : tp.priorUpperDown) : false;
buttons[(int)DS4Controls.TouchMulti] = tp != null ? (!priorMouse ? tp.multiDown : tp.priorMultiDown) : false;
int gyroX = exposeState.getGyroX();
gryodirs[(int)DS4Controls.GyroXPos] = gyroX > 0 ? gyroX : 0;
gryodirs[(int)DS4Controls.GyroXNeg] = gyroX < 0 ? gyroX : 0;
int sixAxisX = -exposeState.getAccelX();
gryodirs[(int)DS4Controls.GyroXPos] = sixAxisX > 0 ? sixAxisX : 0;
gryodirs[(int)DS4Controls.GyroXNeg] = sixAxisX < 0 ? sixAxisX : 0;
int gyroZ = exposeState.getGyroZ();
gryodirs[(int)DS4Controls.GyroZPos] = gyroZ > 0 ? gyroZ : 0;
gryodirs[(int)DS4Controls.GyroZNeg] = gyroZ < 0 ? gyroZ : 0;
int sixAxisZ = exposeState.getAccelZ();
gryodirs[(int)DS4Controls.GyroZPos] = sixAxisZ > 0 ? sixAxisZ : 0;
gryodirs[(int)DS4Controls.GyroZNeg] = sixAxisZ < 0 ? sixAxisZ : 0;
swipedirs[(int)DS4Controls.SwipeLeft] = tp != null ? (!priorMouse ? tp.swipeLeftB : tp.priorSwipeLeftB): (byte)0;
swipedirs[(int)DS4Controls.SwipeRight] = tp != null ? (!priorMouse ? tp.swipeRightB : tp.priorSwipeRightB) : (byte)0;

View File

@ -59,7 +59,9 @@ namespace DS4Windows
}
public static SyntheticState globalState = new SyntheticState();
public static SyntheticState[] deviceState = { new SyntheticState(), new SyntheticState(), new SyntheticState(), new SyntheticState() };
public static SyntheticState[] deviceState = new SyntheticState[4]
{ new SyntheticState(), new SyntheticState(), new SyntheticState(),
new SyntheticState() };
// TODO When we disconnect, process a null/dead state to release any keys or buttons.
public static DateTime oldnow = DateTime.UtcNow;
@ -71,25 +73,24 @@ namespace DS4Windows
static bool[] macroControl = new bool[25];
//actions
public static int[] fadetimer = { 0, 0, 0, 0 };
public static int[] prevFadetimer = { 0, 0, 0, 0 };
public static int[] fadetimer = new int[4] { 0, 0, 0, 0 };
public static int[] prevFadetimer = new int[4] { 0, 0, 0, 0 };
public static DS4Color[] lastColor = new DS4Color[4];
public static List<ActionState> actionDone = new List<ActionState>();
//public static List<bool>[] actionDone = { new List<bool>(), new List<bool>(), new List<bool>(), new List<bool>() };
//public static bool[,] actionDone = new bool[4, 50];
public static SpecialAction[] untriggeraction = new SpecialAction[4];
public static DateTime[] nowAction = { DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue };
public static DateTime[] oldnowAction = { DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue };
public static int[] untriggerindex = { -1, -1, -1, -1 };
public static DateTime[] oldnowKeyAct = { DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue };
//private static bool tappedOnce = false, firstTouch = false, secondtouchbegin = false;
//private static DateTime pastTime, firstTap, TimeofEnd;
public static int[] untriggerindex = new int[4] { -1, -1, -1, -1 };
public static DateTime[] oldnowKeyAct = new DateTime[4] { DateTime.MinValue,
DateTime.MinValue, DateTime.MinValue, DateTime.MinValue };
private static DS4Controls[] shiftTriggerMapping = { DS4Controls.None, DS4Controls.Cross, DS4Controls.Circle, DS4Controls.Square,
DS4Controls.Triangle, DS4Controls.Options, DS4Controls.Share, DS4Controls.DpadUp, DS4Controls.DpadDown,
DS4Controls.DpadLeft, DS4Controls.DpadRight, DS4Controls.PS, DS4Controls.L1, DS4Controls.R1, DS4Controls.L2,
DS4Controls.R2, DS4Controls.L3, DS4Controls.R3, DS4Controls.TouchLeft, DS4Controls.TouchUpper, DS4Controls.TouchMulti,
DS4Controls.TouchRight, DS4Controls.GyroZNeg, DS4Controls.GyroZPos, DS4Controls.GyroXPos, DS4Controls.GyroXNeg
};
private static int[] ds4ControlMapping = { 0, // DS4Control.None
16, // DS4Controls.LXNeg
20, // DS4Controls.LXPos
@ -128,13 +129,16 @@ namespace DS4Windows
// Define here to save some time processing.
// It is enough to feel a difference during gameplay.
private static int[] rsOutCurveModeArray = { 0, 0, 0, 0 };
private static int[] lsOutCurveModeArray = { 0, 0, 0, 0 };
private static int[] rsOutCurveModeArray = new int[4] { 0, 0, 0, 0 };
private static int[] lsOutCurveModeArray = new int[4] { 0, 0, 0, 0 };
static bool tempBool = false;
private static double[] tempDoubleArray = new double[4] { 0.0, 0.0, 0.0, 0.0 };
private static int[] tempIntArray = new int[4] { 0, 0, 0, 0 };
// Special macros
static bool altTabDone = true;
static DateTime altTabNow = DateTime.UtcNow, oldAltTabNow = DateTime.UtcNow - TimeSpan.FromSeconds(1);
static DateTime altTabNow = DateTime.UtcNow,
oldAltTabNow = DateTime.UtcNow - TimeSpan.FromSeconds(1);
// Mouse
public static int mcounter = 34;
@ -347,6 +351,7 @@ namespace DS4Windows
}
state.SavePrevious(true);
}
public enum Click { None, Left, Middle, Right, Fourth, Fifth, WUP, WDOWN };
public static void MapClick(int device, Click mouseClick)
{
@ -394,31 +399,19 @@ namespace DS4Windows
return value1 * percent + value2 * (1 - percent);
}
/*static double Clamp(double min, double value, double max)
{
if (value > max)
return max;
else if (value < min)
return min;
else
return value;
}
*/
private static int ClampInt(int min, int value, int max)
{
return (value < min) ? min : (value > max) ? max : value;
}
private static double[] tempDoubleArray = { 0.0, 0.0, 0.0, 0.0 };
public static DS4State SetCurveAndDeadzone(int device, DS4State cState)
{
double rotation = tempDoubleArray[device] = getLSRotation(device);
if (rotation != 0.0)
if (rotation > 0.0 || rotation < 0.0)
cState.rotateLSCoordinates(rotation);
double rotationRS = tempDoubleArray[device] = getRSRotation(device);
if (rotationRS != 0.0)
if (rotationRS > 0.0 || rotationRS < 0.0)
cState.rotateRSCoordinates(rotationRS);
DS4State dState = new DS4State(cState);
@ -442,7 +435,6 @@ namespace DS4Windows
{
curvex = (x > 127.5f ? Math.Min(x, (x / max) * multimax) : Math.Max(x, (x / max) * multimin));
curvey = (y > 127.5f ? Math.Min(y, (y / max) * multimax) : Math.Max(y, (y / max) * multimin));
//btnLSTrack.Location = new Point((int)(dpix * curvex / 2.09 + lbLSTrack.Location.X), (int)(dpiy * curvey / 2.09 + lbLSTrack.Location.Y));
}
else
{
@ -511,17 +503,17 @@ namespace DS4Windows
}
else if ((lsDeadzone > 0 && lsSquared > lsDeadzoneSquared) || lsAntiDead > 0 || lsMaxZone != 100)
{
double r = Math.Atan2(-(dState.LY - 127.5f), (dState.LX - 127.5f));
double r = Math.Atan2(-(dState.LY - 127.5), (dState.LX - 127.5));
double maxXValue = dState.LX >= 127.5 ? 127.5 : -127.5;
double maxYValue = dState.LY >= 127.5 ? 127.5 : -127.5;
double ratio = lsMaxZone / 100.0;
double maxZoneXNegValue = (ratio * -127.5f) + 127.5f;
double maxZoneXPosValue = (ratio * 127.5f) + 127.5f;
double maxZoneXNegValue = (ratio * -127.5) + 127.5;
double maxZoneXPosValue = (ratio * 127.5) + 127.5;
double maxZoneYNegValue = maxZoneXNegValue;
double maxZoneYPosValue = maxZoneXPosValue;
double maxZoneX = dState.LX >= 127.5 ? (maxZoneXPosValue - 127.5f) : (maxZoneXNegValue - 127.5f);
double maxZoneY = dState.LY >= 127.5 ? (maxZoneYPosValue - 127.5f) : (maxZoneYNegValue - 127.5f);
double maxZoneX = dState.LX >= 127.5 ? (maxZoneXPosValue - 127.5) : (maxZoneXNegValue - 127.5);
double maxZoneY = dState.LY >= 127.5 ? (maxZoneYPosValue - 127.5) : (maxZoneYNegValue - 127.5);
double tempLsXDead = 0.0, tempLsYDead = 0.0;
double tempOutputX = 0.0, tempOutputY = 0.0;
@ -534,18 +526,16 @@ namespace DS4Windows
{
double currentX = Global.Clamp(maxZoneXNegValue, dState.LX, maxZoneXPosValue);
double currentY = Global.Clamp(maxZoneYNegValue, dState.LY, maxZoneYPosValue);
//currentX = (byte)((dState.LX >= 127.5f) ? Math.Min(dState.LX, maxZoneX) : Math.Max(dState.LX, maxZoneX));
//currentY = (byte)((dState.LY >= 127.5f) ? Math.Min(dState.LY, maxZoneY) : Math.Max(dState.LY, maxZoneY));
tempOutputX = ((currentX - 127.5f - tempLsXDead) / (double)(maxZoneX - tempLsXDead));
tempOutputY = ((currentY - 127.5f - tempLsYDead) / (double)(maxZoneY - tempLsYDead));
tempOutputX = ((currentX - 127.5 - tempLsXDead) / (maxZoneX - tempLsXDead));
tempOutputY = ((currentY - 127.5 - tempLsYDead) / (maxZoneY - tempLsYDead));
}
}
else
{
double currentX = Global.Clamp(maxZoneXNegValue, dState.LX, maxZoneXPosValue);
double currentY = Global.Clamp(maxZoneYNegValue, dState.LY, maxZoneYPosValue);
tempOutputX = (currentX - 127.5f) / (double)(maxZoneX);
tempOutputY = (currentY - 127.5f) / (double)(maxZoneY);
tempOutputX = (currentX - 127.5) / maxZoneX;
tempOutputY = (currentY - 127.5) / maxZoneY;
}
double tempLsXAntiDeadPercent = 0.0, tempLsYAntiDeadPercent = 0.0;
@ -557,7 +547,7 @@ namespace DS4Windows
if (tempOutputX > 0.0)
{
dState.LX = (byte)((((1.0 - tempLsXAntiDeadPercent) * tempOutputX + tempLsXAntiDeadPercent)) * maxXValue + 127.5f);
dState.LX = (byte)((((1.0 - tempLsXAntiDeadPercent) * tempOutputX + tempLsXAntiDeadPercent)) * maxXValue + 127.5);
}
else
{
@ -566,7 +556,7 @@ namespace DS4Windows
if (tempOutputY > 0.0)
{
dState.LY = (byte)((((1.0 - tempLsYAntiDeadPercent) * tempOutputY + tempLsYAntiDeadPercent)) * maxYValue + 127.5f);
dState.LY = (byte)((((1.0 - tempLsYAntiDeadPercent) * tempOutputY + tempLsYAntiDeadPercent)) * maxYValue + 127.5);
}
else
{
@ -580,7 +570,7 @@ namespace DS4Windows
int rsMaxZone = getRSMaxzone(device);
if (rsDeadzone > 0 || rsAntiDead > 0 || rsMaxZone != 100)
{
double rsSquared = Math.Pow(cState.RX - 127.5f, 2) + Math.Pow(cState.RY - 127.5f, 2);
double rsSquared = Math.Pow(cState.RX - 127.5, 2) + Math.Pow(cState.RY - 127.5, 2);
double rsDeadzoneSquared = Math.Pow(rsDeadzone, 2);
if (rsDeadzone > 0 && rsSquared <= rsDeadzoneSquared)
{
@ -589,17 +579,17 @@ namespace DS4Windows
}
else if ((rsDeadzone > 0 && rsSquared > rsDeadzoneSquared) || rsAntiDead > 0 || rsMaxZone != 100)
{
double r = Math.Atan2(-(dState.RY - 127.5f), (dState.RX - 127.5f));
double r = Math.Atan2(-(dState.RY - 127.5), (dState.RX - 127.5));
double maxXValue = dState.RX >= 127.5 ? 127.5 : -127.5;
double maxYValue = dState.RY >= 127.5 ? 127.5 : -127.5;
double ratio = rsMaxZone / 100.0;
double maxZoneXNegValue = (ratio * -127.5f) + 127.5f;
double maxZoneXPosValue = (ratio * 127.5f) + 127.5f;
double maxZoneXNegValue = (ratio * -127.5) + 127.5;
double maxZoneXPosValue = (ratio * 127.5) + 127.5;
double maxZoneYNegValue = maxZoneXNegValue;
double maxZoneYPosValue = maxZoneXPosValue;
double maxZoneX = dState.RX >= 127.5 ? (maxZoneXPosValue - 127.5f) : (maxZoneXNegValue - 127.5f);
double maxZoneY = dState.RY >= 127.5 ? (maxZoneYPosValue - 127.5f) : (maxZoneYNegValue - 127.5f);
double maxZoneX = dState.RX >= 127.5 ? (maxZoneXPosValue - 127.5) : (maxZoneXNegValue - 127.5);
double maxZoneY = dState.RY >= 127.5 ? (maxZoneYPosValue - 127.5) : (maxZoneYNegValue - 127.5);
double tempRsXDead = 0.0, tempRsYDead = 0.0;
double tempOutputX = 0.0, tempOutputY = 0.0;
@ -613,10 +603,8 @@ namespace DS4Windows
double currentX = Global.Clamp(maxZoneXNegValue, dState.RX, maxZoneXPosValue);
double currentY = Global.Clamp(maxZoneYNegValue, dState.RY, maxZoneYPosValue);
tempOutputX = ((currentX - 127.5f - tempRsXDead) / (double)(maxZoneX - tempRsXDead));
tempOutputY = ((currentY - 127.5f - tempRsYDead) / (double)(maxZoneY - tempRsYDead));
//tempOutputX = ((dState.RX - 127.5f - tempRsXDead) / (double)(maxXValue - tempRsXDead));
//tempOutputY = ((dState.RY - 127.5f - tempRsYDead) / (double)(maxYValue - tempRsYDead));
tempOutputX = ((currentX - 127.5 - tempRsXDead) / (maxZoneX - tempRsXDead));
tempOutputY = ((currentY - 127.5 - tempRsYDead) / (maxZoneY - tempRsYDead));
}
}
else
@ -624,10 +612,8 @@ namespace DS4Windows
double currentX = Global.Clamp(maxZoneXNegValue, dState.RX, maxZoneXPosValue);
double currentY = Global.Clamp(maxZoneYNegValue, dState.RY, maxZoneYPosValue);
tempOutputX = (currentX - 127.5f) / (double)(maxZoneX);
tempOutputY = (currentY - 127.5f) / (double)(maxZoneY);
//tempOutputX = ((dState.RX - 127.5f) / (double)(maxXValue));
//tempOutputY = ((dState.RY - 127.5f) / (double)(maxYValue));
tempOutputX = (currentX - 127.5) / maxZoneX;
tempOutputY = (currentY - 127.5) / maxZoneY;
}
double tempRsXAntiDeadPercent = 0.0, tempRsYAntiDeadPercent = 0.0;
@ -639,7 +625,7 @@ namespace DS4Windows
if (tempOutputX > 0.0)
{
dState.RX = (byte)((((1.0 - tempRsXAntiDeadPercent) * tempOutputX + tempRsXAntiDeadPercent)) * maxXValue + 127.5f);
dState.RX = (byte)((((1.0 - tempRsXAntiDeadPercent) * tempOutputX + tempRsXAntiDeadPercent)) * maxXValue + 127.5);
}
else
{
@ -648,7 +634,7 @@ namespace DS4Windows
if (tempOutputY > 0.0)
{
dState.RY = (byte)((((1.0 - tempRsYAntiDeadPercent) * tempOutputY + tempRsYAntiDeadPercent)) * maxYValue + 127.5f);
dState.RY = (byte)((((1.0 - tempRsYAntiDeadPercent) * tempOutputY + tempRsYAntiDeadPercent)) * maxYValue + 127.5);
}
else
{
@ -662,17 +648,17 @@ namespace DS4Windows
int l2Maxzone = getL2Maxzone(device);
if (l2Deadzone > 0 || l2AntiDeadzone > 0 || l2Maxzone != 100)
{
double tempL2Output = (cState.L2 / 255.0);
double tempL2Output = cState.L2 / 255.0;
double tempL2AntiDead = 0.0;
double ratio = (l2Maxzone / 100.0);
double maxValue = 255 * ratio;
double ratio = l2Maxzone / 100.0;
double maxValue = 255.0 * ratio;
if (l2Deadzone > 0)
{
if (cState.L2 > l2Deadzone)
{
double current = Global.Clamp(0, dState.L2, maxValue);
tempL2Output = ((current - l2Deadzone) / (double)(maxValue - l2Deadzone));
tempL2Output = (current - l2Deadzone) / (maxValue - l2Deadzone);
}
else
{
@ -687,7 +673,7 @@ namespace DS4Windows
if (tempL2Output > 0.0)
{
dState.L2 = (byte)(((1.0 - tempL2AntiDead) * tempL2Output + tempL2AntiDead) * 255);
dState.L2 = (byte)(((1.0 - tempL2AntiDead) * tempL2Output + tempL2AntiDead) * 255.0);
}
else
{
@ -700,9 +686,9 @@ namespace DS4Windows
int r2Maxzone = getR2Maxzone(device);
if (r2Deadzone > 0 || r2AntiDeadzone > 0 || r2Maxzone != 100)
{
double tempR2Output = (cState.R2 / 255.0);
double tempR2Output = cState.R2 / 255.0;
double tempR2AntiDead = 0.0;
double ratio = (r2Maxzone / 100.0);
double ratio = r2Maxzone / 100.0;
double maxValue = 255 * ratio;
if (r2Deadzone > 0)
@ -710,7 +696,7 @@ namespace DS4Windows
if (cState.R2 > r2Deadzone)
{
double current = Global.Clamp(0, dState.R2, maxValue);
tempR2Output = ((current - r2Deadzone) / (double)(maxValue - r2Deadzone));
tempR2Output = (current - r2Deadzone) / (maxValue - r2Deadzone);
}
else
{
@ -725,7 +711,7 @@ namespace DS4Windows
if (tempR2Output > 0.0)
{
dState.R2 = (byte)(((1.0 - tempR2AntiDead) * tempR2Output + tempR2AntiDead) * 255);
dState.R2 = (byte)(((1.0 - tempR2AntiDead) * tempR2Output + tempR2AntiDead) * 255.0);
}
else
{
@ -736,15 +722,15 @@ namespace DS4Windows
double lsSens = getLSSens(device);
if (lsSens != 1.0)
{
dState.LX = (byte)Global.Clamp(0, lsSens * (dState.LX - 127.5f) + 127.5f, 255);
dState.LY = (byte)Global.Clamp(0, lsSens * (dState.LY - 127.5f) + 127.5f, 255);
dState.LX = (byte)Global.Clamp(0, lsSens * (dState.LX - 127.5) + 127.5, 255);
dState.LY = (byte)Global.Clamp(0, lsSens * (dState.LY - 127.5) + 127.5, 255);
}
double rsSens = getRSSens(device);
if (rsSens != 1.0)
{
dState.RX = (byte)Global.Clamp(0, rsSens * (dState.RX - 127.5f) + 127.5f, 255);
dState.RY = (byte)Global.Clamp(0, rsSens * (dState.RY - 127.5f) + 127.5f, 255);
dState.RX = (byte)Global.Clamp(0, rsSens * (dState.RX - 127.5) + 127.5, 255);
dState.RY = (byte)Global.Clamp(0, rsSens * (dState.RY - 127.5) + 127.5, 255);
}
double l2Sens = getL2Sens(device);
@ -756,10 +742,10 @@ namespace DS4Windows
dState.R2 = (byte)Global.Clamp(0, r2Sens * dState.R2, 255);
int lsOutCurveMode = lsOutCurveModeArray[device] = getLsOutCurveMode(device);
if (lsOutCurveMode != 0)
if (lsOutCurveMode > 0)
{
double tempX = (dState.LX - 127.5f) / 127.5;
double tempY = (dState.LY - 127.5f) / 127.5;
double tempX = (dState.LX - 127.5) / 127.5;
double tempY = (dState.LY - 127.5) / 127.5;
double signX = tempX >= 0.0 ? 1.0 : -1.0;
double signY = tempY >= 0.0 ? 1.0 : -1.0;
@ -796,30 +782,30 @@ namespace DS4Windows
outputY = (absY * 1.992) - 0.992;
}
dState.LX = (byte)(outputX * signX * 127.5f + 127.5f);
dState.LY = (byte)(outputY * signY * 127.5f + 127.5f);
dState.LX = (byte)(outputX * signX * 127.5 + 127.5);
dState.LY = (byte)(outputY * signY * 127.5 + 127.5);
}
else if (lsOutCurveMode == 2)
{
double outputX = tempX * tempX;
double outputY = tempY * tempY;
dState.LX = (byte)(outputX * signX * 127.5f + 127.5f);
dState.LY = (byte)(outputY * signY * 127.5f + 127.5f);
dState.LX = (byte)(outputX * signX * 127.5 + 127.5);
dState.LY = (byte)(outputY * signY * 127.5 + 127.5);
}
else if (lsOutCurveMode == 3)
{
double outputX = tempX * tempX * tempX;
double outputY = tempY * tempY * tempY;
dState.LX = (byte)(outputX * 127.5f + 127.5f);
dState.LY = (byte)(outputY * 127.5f + 127.5f);
dState.LX = (byte)(outputX * 127.5 + 127.5);
dState.LY = (byte)(outputY * 127.5 + 127.5);
}
}
int rsOutCurveMode = rsOutCurveModeArray[device] = getRsOutCurveMode(device);
if (rsOutCurveMode != 0)
if (rsOutCurveMode > 0)
{
double tempX = (dState.RX - 127.5f) / 127.5;
double tempY = (dState.RY - 127.5f) / 127.5;
double tempX = (dState.RX - 127.5) / 127.5;
double tempY = (dState.RY - 127.5) / 127.5;
double signX = tempX >= 0.0 ? 1.0 : -1.0;
double signY = tempY >= 0.0 ? 1.0 : -1.0;
@ -856,22 +842,144 @@ namespace DS4Windows
outputY = (absY * 1.992) - 0.992;
}
dState.RX = (byte)(outputX * signX * 127.5f + 127.5f);
dState.RY = (byte)(outputY * signY * 127.5f + 127.5f);
dState.RX = (byte)(outputX * signX * 127.5 + 127.5);
dState.RY = (byte)(outputY * signY * 127.5 + 127.5);
}
else if (rsOutCurveMode == 2)
{
double outputX = tempX * tempX;
double outputY = tempY * tempY;
dState.RX = (byte)(outputX * signX * 127.5f + 127.5f);
dState.RY = (byte)(outputY * signY * 127.5f + 127.5f);
dState.RX = (byte)(outputX * signX * 127.5 + 127.5);
dState.RY = (byte)(outputY * signY * 127.5 + 127.5);
}
else if (rsOutCurveMode == 3)
{
double outputX = tempX * tempX * tempX;
double outputY = tempY * tempY * tempY;
dState.RX = (byte)(outputX * 127.5f + 127.5f);
dState.RY = (byte)(outputY * 127.5f + 127.5f);
dState.RX = (byte)(outputX * 127.5 + 127.5);
dState.RY = (byte)(outputY * 127.5 + 127.5);
}
}
int l2OutCurveMode = tempIntArray[device] = getL2OutCurveMode(device);
if (l2OutCurveMode > 0)
{
double temp = dState.L2 / 255.0;
if (l2OutCurveMode == 1)
{
double output = temp * temp;
dState.L2 = (byte)(output * 255.0);
}
else if (l2OutCurveMode == 2)
{
double output = temp * temp * temp;
dState.L2 = (byte)(output * 255.0);
}
}
int r2OutCurveMode = tempIntArray[device] = getR2OutCurveMode(device);
if (r2OutCurveMode > 0)
{
double temp = dState.R2 / 255.0;
if (r2OutCurveMode == 1)
{
double output = temp * temp;
dState.R2 = (byte)(output * 255.0);
}
else if (r2OutCurveMode == 2)
{
double output = temp * temp * temp;
dState.R2 = (byte)(output * 255.0);
}
}
bool sOff = tempBool = isUsingSAforMouse(device);
if (sOff == false)
{
int SXD = (int)(10d * getSXDeadzone(device));
int SZD = (int)(10d * getSZDeadzone(device));
double SXMax = getSXMaxzone(device);
double SZMax = getSZMaxzone(device);
double sxAntiDead = getSXAntiDeadzone(device);
double szAntiDead = getSZAntiDeadzone(device);
double sxsens = getSXSens(device);
double szsens = getSZSens(device);
int gyroX = cState.Motion.accelX, gyroZ = cState.Motion.accelZ;
int absx = Math.Abs(gyroX), absz = Math.Abs(gyroZ);
if (SXD > 0 || SXMax < 1.0 || sxAntiDead > 0)
{
int maxValue = (int)(SXMax * 128d);
if (absx > SXD)
{
double ratioX = absx < maxValue ? (absx - SXD) / (double)(maxValue - SXD) : 1.0;
dState.Motion.accelX = Math.Sign(gyroX) *
(int)Math.Min(128d, sxsens * 128d * ((1.0 - sxAntiDead) * ratioX + sxAntiDead));
}
else
{
dState.Motion.accelX = 0;
}
}
else
{
dState.Motion.accelX = Math.Sign(gyroX) *
(int)Math.Min(128d, sxsens * 128d * (absx / 128d));
}
if (SZD > 0 || SZMax < 1.0 || szAntiDead > 0)
{
int maxValue = (int)(SZMax * 128d);
if (absz > SZD)
{
double ratioZ = absz < maxValue ? (absz - SZD) / (double)(maxValue - SZD) : 1.0;
dState.Motion.accelZ = Math.Sign(gyroZ) *
(int)Math.Min(128d, szsens * 128d * ((1.0 - szAntiDead) * ratioZ + szAntiDead));
}
else
{
dState.Motion.accelZ = 0;
}
}
else
{
dState.Motion.accelZ = Math.Sign(gyroZ) *
(int)Math.Min(128d, szsens * 128d * (absz / 128d));
}
int sxOutCurveMode = tempIntArray[device] = getSXOutCurveMode(device);
if (sxOutCurveMode > 0)
{
double temp = Math.Abs(dState.Motion.accelX) / 128.0;
double sign = Math.Sign(temp);
if (sxOutCurveMode == 1)
{
double output = temp * temp;
dState.Motion.accelX = (byte)(output * sign * 128.0);
}
else if (sxOutCurveMode == 2)
{
double output = temp * temp * temp;
dState.Motion.accelX = (byte)(output * 128.0);
}
}
int szOutCurveMode = tempIntArray[device] = getSZOutCurveMode(device);
if (szOutCurveMode > 0)
{
double temp = Math.Abs(dState.Motion.accelZ) / 128.0;
double sign = Math.Sign(temp);
if (szOutCurveMode == 1)
{
double output = temp * temp;
dState.Motion.accelZ = (byte)(output * sign * 128.0);
}
else if (szOutCurveMode == 2)
{
double output = temp * temp * temp;
dState.Motion.accelZ = (byte)(output * 128.0);
}
}
}
@ -916,6 +1024,7 @@ namespace DS4Windows
X360Controls x3c;
if (Enum.TryParse(key, true, out x3c))
return x3c;
switch (key)
{
case "Back": return X360Controls.Back;
@ -959,8 +1068,9 @@ namespace DS4Windows
case "Mouse Left": return X360Controls.MouseLeft;
case "Mouse Right": return X360Controls.MouseRight;
case "Unbound": return X360Controls.Unbound;
default: break;
}
return X360Controls.Unbound;
}
@ -1036,7 +1146,6 @@ namespace DS4Windows
}
else if (actionType == DS4ControlSettings.ActionType.Key)
{
//ushort value = ushort.Parse(action.ToString());
ushort value = Convert.ToUInt16(action);
if (getBoolActionMapping2(device, dcs.control, cState, eState, tp, fieldMapping))
{
@ -1331,28 +1440,28 @@ namespace DS4Windows
if (macroControl[24]) MappedState.RY = 0;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LXNeg), device, cState, eState, tp, fieldMapping), DS4Controls.LXNeg))
tempControlDict.Add(DS4Controls.LXNeg, DS4Controls.LXNeg);
tempControlDict[DS4Controls.LXNeg] = DS4Controls.LXNeg;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LXPos), device, cState, eState, tp, fieldMapping), DS4Controls.LXPos))
tempControlDict.Add(DS4Controls.LXPos, DS4Controls.LXPos);
tempControlDict[DS4Controls.LXPos] = DS4Controls.LXPos;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LYNeg), device, cState, eState, tp, fieldMapping), DS4Controls.LYNeg))
tempControlDict.Add(DS4Controls.LYNeg, DS4Controls.LYNeg);
tempControlDict[DS4Controls.LYNeg] = DS4Controls.LYNeg;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LYPos), device, cState, eState, tp, fieldMapping), DS4Controls.LYPos))
tempControlDict.Add(DS4Controls.LYPos, DS4Controls.LYPos);
tempControlDict[DS4Controls.LYPos] = DS4Controls.LYPos;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RXNeg), device, cState, eState, tp, fieldMapping), DS4Controls.RXNeg))
tempControlDict.Add(DS4Controls.RXNeg, DS4Controls.RXNeg);
tempControlDict[DS4Controls.RXNeg] = DS4Controls.RXNeg;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RXPos), device, cState, eState, tp, fieldMapping), DS4Controls.RXPos))
tempControlDict.Add(DS4Controls.RXPos, DS4Controls.RXPos);
tempControlDict[DS4Controls.RXPos] = DS4Controls.RXPos;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RYNeg), device, cState, eState, tp, fieldMapping), DS4Controls.RYNeg))
tempControlDict.Add(DS4Controls.RYNeg, DS4Controls.RYNeg);
tempControlDict[DS4Controls.RYNeg] = DS4Controls.RYNeg;
if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RYPos), device, cState, eState, tp, fieldMapping), DS4Controls.RYPos))
tempControlDict.Add(DS4Controls.RYPos, DS4Controls.RYPos);
tempControlDict[DS4Controls.RYPos] = DS4Controls.RYPos;
Dictionary<DS4Controls, DS4Controls>.KeyCollection controlKeys = tempControlDict.Keys;
//Dictionary<DS4Controls, List<DS4Controls>>.KeyCollection controlKeys = tempControlDict.Keys;
@ -2483,33 +2592,33 @@ namespace DS4Windows
}
else if (controlType == DS4StateFieldMapping.ControlType.GyroDir)
{
double SXD = getSXDeadzone(device);
double SZD = getSZDeadzone(device);
//double SXD = getSXDeadzone(device);
//double SZD = getSZDeadzone(device);
switch (control)
{
case DS4Controls.GyroXPos:
{
int gyroX = fieldMapping.gryodirs[controlNum];
value = (byte)(gyroX > SXD * 10 ? Math.Pow(root + speed / divide, gyroX) : 0);
value = (byte)(gyroX > 0 ? Math.Pow(root + speed / divide, gyroX) : 0);
break;
}
case DS4Controls.GyroXNeg:
{
int gyroX = fieldMapping.gryodirs[controlNum];
value = (byte)(gyroX < -SXD * 10 ? Math.Pow(root + speed / divide, -gyroX) : 0);
value = (byte)(gyroX < 0 ? Math.Pow(root + speed / divide, -gyroX) : 0);
break;
}
case DS4Controls.GyroZPos:
{
int gyroZ = fieldMapping.gryodirs[controlNum];
value = (byte)(gyroZ > SZD * 10 ? Math.Pow(root + speed / divide, gyroZ) : 0);
value = (byte)(gyroZ > 0 ? Math.Pow(root + speed / divide, gyroZ) : 0);
break;
}
case DS4Controls.GyroZNeg:
{
int gyroZ = fieldMapping.gryodirs[controlNum];
value = (byte)(gyroZ < -SZD * 10 ? Math.Pow(root + speed / divide, -gyroZ) : 0);
value = (byte)(gyroZ < 0 ? Math.Pow(root + speed / divide, -gyroZ) : 0);
break;
}
default: break;
@ -2535,7 +2644,7 @@ namespace DS4Windows
mcounter = 34;
}
value *= 1 + (double)Math.Min(20000, (mouseaccel)) / 10000d;
value *= 1 + Math.Min(20000, (mouseaccel)) / 10000d;
prevmouseaccel = mouseaccel;
}
@ -2633,36 +2742,32 @@ namespace DS4Windows
}
else if (controlType == DS4StateFieldMapping.ControlType.GyroDir)
{
double SXD = getSXDeadzone(device);
double SZD = getSZDeadzone(device);
bool sOff = isUsingSAforMouse(device);
double sxsens = getSXSens(device);
double szsens = getSZSens(device);
switch (control)
{
case DS4Controls.GyroXPos:
{
int gyroX = fieldMap.gryodirs[controlNum];
result = (byte)(!sOff && sxsens * gyroX > SXD * 10 ? Math.Min(255, sxsens * gyroX * 2) : 0);
result = (byte)(sOff == false ? Math.Min(255, gyroX * 2) : 0);
break;
}
case DS4Controls.GyroXNeg:
{
int gyroX = fieldMap.gryodirs[controlNum];
result = (byte)(!sOff && sxsens * gyroX < -SXD * 10 ? Math.Min(255, sxsens * -gyroX * 2) : 0);
result = (byte)(sOff == false ? Math.Min(255, -gyroX * 2) : 0);
break;
}
case DS4Controls.GyroZPos:
{
int gyroZ = fieldMap.gryodirs[controlNum];
result = (byte)(!sOff && szsens * gyroZ > SZD * 10 ? Math.Min(255, szsens * gyroZ * 2) : 0);
result = (byte)(sOff == false ? Math.Min(255, gyroZ * 2) : 0);
break;
}
case DS4Controls.GyroZNeg:
{
int gyroZ = fieldMap.gryodirs[controlNum];
result = (byte)(!sOff && szsens * gyroZ < -SZD * 10 ? Math.Min(255, szsens * -gyroZ * 2) : 0);
result = (byte)(sOff == false ? Math.Min(255, -gyroZ * 2) : 0);
break;
}
default: break;
@ -2760,25 +2865,25 @@ namespace DS4Windows
{
case DS4Controls.GyroXPos:
{
int gyroX = eState.GyroX;
int gyroX = -eState.AccelX;
result = (byte)(!sOff && sxsens * gyroX > SXD * 10 ? Math.Min(255, sxsens * gyroX * 2) : 0);
break;
}
case DS4Controls.GyroXNeg:
{
int gyroX = eState.GyroX;
int gyroX = -eState.AccelX;
result = (byte)(!sOff && sxsens * gyroX < -SXD * 10 ? Math.Min(255, sxsens * -gyroX * 2) : 0);
break;
}
case DS4Controls.GyroZPos:
{
int gyroZ = eState.GyroZ;
int gyroZ = eState.AccelZ;
result = (byte)(!sOff && szsens * gyroZ > SZD * 10 ? Math.Min(255, szsens * gyroZ * 2) : 0);
break;
}
case DS4Controls.GyroZNeg:
{
int gyroZ = eState.GyroZ;
int gyroZ = eState.AccelZ;
result = (byte)(!sOff && szsens * gyroZ < -SZD * 10 ? Math.Min(255, szsens * -gyroZ * 2) : 0);
break;
}
@ -2882,10 +2987,10 @@ namespace DS4Windows
switch (control)
{
case DS4Controls.GyroXPos: result = !sOff ? SXSens[device] * eState.GyroX > 67 : false; break;
case DS4Controls.GyroXNeg: result = !sOff ? SXSens[device] * eState.GyroX < -67 : false; break;
case DS4Controls.GyroZPos: result = !sOff ? SZSens[device] * eState.GyroZ > 67 : false; break;
case DS4Controls.GyroZNeg: result = !sOff ? SZSens[device] * eState.GyroZ < -67 : false; break;
case DS4Controls.GyroXPos: result = !sOff ? SXSens[device] * -eState.AccelX > 67 : false; break;
case DS4Controls.GyroXNeg: result = !sOff ? SXSens[device] * -eState.AccelX < -67 : false; break;
case DS4Controls.GyroZPos: result = !sOff ? SZSens[device] * eState.AccelZ > 67 : false; break;
case DS4Controls.GyroZNeg: result = !sOff ? SZSens[device] * eState.AccelZ < -67 : false; break;
default: break;
}
}
@ -2946,14 +3051,14 @@ namespace DS4Windows
switch (control)
{
case DS4Controls.GyroXPos: safeTest = SXSens[device] * fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroXNeg: safeTest = SXSens[device] * fieldMap.gryodirs[controlNum] < -67; break;
case DS4Controls.GyroZPos: safeTest = SZSens[device] * fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroZNeg: safeTest = SZSens[device] * fieldMap.gryodirs[controlNum] < -67; break;
case DS4Controls.GyroXPos: safeTest = fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroXNeg: safeTest = fieldMap.gryodirs[controlNum] < -67; break;
case DS4Controls.GyroZPos: safeTest = fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroZNeg: safeTest = fieldMap.gryodirs[controlNum] < -67; break;
default: break;
}
result = !sOff ? safeTest : false;
result = sOff == false ? safeTest : false;
}
return result;
@ -3108,14 +3213,14 @@ namespace DS4Windows
switch (control)
{
case DS4Controls.GyroXPos: safeTest = SXSens[device] * fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroXNeg: safeTest = SXSens[device] * fieldMap.gryodirs[controlNum] < -67; break;
case DS4Controls.GyroZPos: safeTest = SZSens[device] * fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroZNeg: safeTest = SZSens[device] * fieldMap.gryodirs[controlNum] < -67; break;
case DS4Controls.GyroXPos: safeTest = fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroXNeg: safeTest = fieldMap.gryodirs[controlNum] < -67; break;
case DS4Controls.GyroZPos: safeTest = fieldMap.gryodirs[controlNum] > 67; break;
case DS4Controls.GyroZNeg: safeTest = fieldMap.gryodirs[controlNum] < -67; break;
default: break;
}
result = !sOff ? safeTest : false;
result = sOff == false ? safeTest : false;
}
return result;
@ -3309,10 +3414,10 @@ namespace DS4Windows
switch (control)
{
case DS4Controls.GyroXPos: result = !sOff ? SXSens[device] * eState.GyroX > 67 : false; break;
case DS4Controls.GyroXNeg: result = !sOff ? SXSens[device] * eState.GyroX < -67 : false; break;
case DS4Controls.GyroZPos: result = !sOff ? SZSens[device] * eState.GyroZ > 67 : false; break;
case DS4Controls.GyroZNeg: result = !sOff ? SZSens[device] * eState.GyroZ < -67 : false; break;
case DS4Controls.GyroXPos: result = !sOff ? SXSens[device] * eState.AccelX > 67 : false; break;
case DS4Controls.GyroXNeg: result = !sOff ? SXSens[device] * eState.AccelX < -67 : false; break;
case DS4Controls.GyroZPos: result = !sOff ? SZSens[device] * eState.AccelZ > 67 : false; break;
case DS4Controls.GyroZNeg: result = !sOff ? SZSens[device] * eState.AccelZ < -67 : false; break;
default: break;
}
}
@ -3365,7 +3470,7 @@ namespace DS4Windows
if (controlType == DS4StateFieldMapping.ControlType.Button)
{
result = (byte)(fieldMap.buttons[controlNum] ? trueVal : falseVal);
result = fieldMap.buttons[controlNum] ? trueVal : falseVal;
}
else if (controlType == DS4StateFieldMapping.ControlType.AxisDir)
{
@ -3393,7 +3498,7 @@ namespace DS4Windows
}
else if (controlType == DS4StateFieldMapping.ControlType.Touch)
{
result = (byte)(fieldMap.buttons[controlNum] ? trueVal : falseVal);
result = fieldMap.buttons[controlNum] ? trueVal : falseVal;
}
else if (controlType == DS4StateFieldMapping.ControlType.SwipeDir)
{
@ -3408,44 +3513,42 @@ namespace DS4Windows
}
else if (controlType == DS4StateFieldMapping.ControlType.GyroDir)
{
double SXD = getSXDeadzone(device);
double SZD = getSZDeadzone(device);
bool sOff = isUsingSAforMouse(device);
switch (control)
{
case DS4Controls.GyroXPos:
{
if (!sOff && fieldMap.gryodirs[controlNum] > SXD * 10)
if (sOff == false && fieldMap.gryodirs[controlNum] > 0)
{
if (alt) result = (byte)Math.Min(255, 127 + SXSens[device] * fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - SXSens[device] * fieldMap.gryodirs[controlNum]);
if (alt) result = (byte)Math.Min(255, 127 + fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - fieldMap.gryodirs[controlNum]);
}
else result = falseVal;
break;
}
case DS4Controls.GyroXNeg:
{
if (!sOff && fieldMap.gryodirs[controlNum] < -SXD * 10)
if (sOff == false && fieldMap.gryodirs[controlNum] < 0)
{
if (alt) result = (byte)Math.Min(255, 127 + SXSens[device] * -fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - SXSens[device] * -fieldMap.gryodirs[controlNum]);
if (alt) result = (byte)Math.Min(255, 127 + -fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - -fieldMap.gryodirs[controlNum]);
}
else result = falseVal;
break;
}
case DS4Controls.GyroZPos:
{
if (!sOff && fieldMap.gryodirs[controlNum] > SZD * 10)
if (sOff == false && fieldMap.gryodirs[controlNum] > 0)
{
if (alt) result = (byte)Math.Min(255, 127 + SZSens[device] * fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - SZSens[device] * fieldMap.gryodirs[controlNum]);
if (alt) result = (byte)Math.Min(255, 127 + fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - fieldMap.gryodirs[controlNum]);
}
else return falseVal;
break;
}
case DS4Controls.GyroZNeg:
{
if (!sOff && fieldMap.gryodirs[controlNum] < -SZD * 10)
if (sOff == false && fieldMap.gryodirs[controlNum] < 0)
{
if (alt) result = (byte)Math.Min(255, 127 + SZSens[device] * -fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - SZSens[device] * -fieldMap.gryodirs[controlNum]);
if (alt) result = (byte)Math.Min(255, 127 + -fieldMap.gryodirs[controlNum]); else result = (byte)Math.Max(0, 127 - -fieldMap.gryodirs[controlNum]);
}
else result = falseVal;
break;
@ -3548,36 +3651,36 @@ namespace DS4Windows
{
case DS4Controls.GyroXPos:
{
if (!sOff && eState.GyroX > SXD * 10)
if (!sOff && -eState.AccelX > SXD * 10)
{
if (alt) result = (byte)Math.Min(255, 127 + SXSens[device] * eState.GyroX); else result = (byte)Math.Max(0, 127 - SXSens[device] * eState.GyroX);
if (alt) result = (byte)Math.Min(255, 127 + SXSens[device] * -eState.AccelX); else result = (byte)Math.Max(0, 127 - SXSens[device] * -eState.AccelX);
}
else result = falseVal;
break;
}
case DS4Controls.GyroXNeg:
{
if (!sOff && eState.GyroX < -SXD * 10)
if (!sOff && -eState.AccelX < -SXD * 10)
{
if (alt) result = (byte)Math.Min(255, 127 + SXSens[device] * -eState.GyroX); else result = (byte)Math.Max(0, 127 - SXSens[device] * -eState.GyroX);
if (alt) result = (byte)Math.Min(255, 127 + SXSens[device] * eState.AccelX); else result = (byte)Math.Max(0, 127 - SXSens[device] * eState.AccelX);
}
else result = falseVal;
break;
}
case DS4Controls.GyroZPos:
{
if (!sOff && eState.GyroZ > SZD * 10)
if (!sOff && eState.AccelZ > SZD * 10)
{
if (alt) result = (byte)Math.Min(255, 127 + SZSens[device] * eState.GyroZ); else result = (byte)Math.Max(0, 127 - SZSens[device] * eState.GyroZ);
if (alt) result = (byte)Math.Min(255, 127 + SZSens[device] * eState.AccelZ); else result = (byte)Math.Max(0, 127 - SZSens[device] * eState.AccelZ);
}
else return falseVal;
break;
}
case DS4Controls.GyroZNeg:
{
if (!sOff && eState.GyroZ < -SZD * 10)
if (!sOff && eState.AccelZ < -SZD * 10)
{
if (alt) result = (byte)Math.Min(255, 127 + SZSens[device] * -eState.GyroZ); else result = (byte)Math.Max(0, 127 - SZSens[device] * -eState.GyroZ);
if (alt) result = (byte)Math.Min(255, 127 + SZSens[device] * -eState.AccelZ); else result = (byte)Math.Max(0, 127 - SZSens[device] * -eState.AccelZ);
}
else result = falseVal;
break;

View File

@ -15,13 +15,14 @@ namespace DS4Windows
/** Indicate x/y direction for doing jitter compensation, etc. */
public enum Direction { Negative, Neutral, Positive }
// Track direction vector separately and very trivially for now.
private Direction horizontalDirection = Direction.Neutral, verticalDirection = Direction.Neutral;
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 double GYRO_SMOOTH_MOUSE_OFFSET = 0.14696;
private const int SMOOTH_BUFFER_LEN = 3;
private double[] xSmoothBuffer = new double[SMOOTH_BUFFER_LEN];
@ -31,14 +32,17 @@ namespace DS4Windows
double coefficient = 0.0;
double verticalScale = 0.0;
bool gyroSmooth = false;
//double gyroSmoothWeight = 0.0;
int tempInt = 0;
double tempDouble = 0.0;
public virtual void sixaxisMoved(SixAxisEventArgs arg)
{
int deltaX = 0, deltaY = 0;
deltaX = -arg.sixAxis.gyroXFull;
deltaY = -arg.sixAxis.gyroYFull;
//Console.WriteLine(arg.sixAxis.deltaX);
deltaX = Global.getGyroMouseHorizontalAxis(deviceNumber) == 0 ? arg.sixAxis.gyroYawFull :
arg.sixAxis.gyroRollFull;
deltaY = -arg.sixAxis.gyroPitchFull;
tempDouble = arg.sixAxis.elapsed * 0.001 * 250.0; // Base default speed on 4 ms
gyroSmooth = Global.getGyroSmoothing(deviceNumber);
double gyroSmoothWeight = 0.0;
@ -60,12 +64,12 @@ namespace DS4Windows
int signX = System.Math.Sign(deltaX);
int signY = System.Math.Sign(deltaY);
if ((hRemainder > 0) != (deltaX > 0))
if (deltaX == 0 || (hRemainder > 0 != deltaX > 0))
{
hRemainder = 0.0;
}
if ((vRemainder > 0) != (deltaY > 0))
if (deltaY == 0 || (vRemainder > 0 != deltaY > 0))
{
vRemainder = 0.0;
}
@ -93,32 +97,23 @@ namespace DS4Windows
deltaY = 0;
}
double xMotion = deltaX != 0 ? coefficient * deltaX + (normX * (offset * signX)) : 0;
double xMotion = deltaX != 0 ? coefficient * (deltaX * tempDouble)
+ (normX * (offset * signX)) : 0;
int xAction = 0;
if (xMotion != 0.0)
{
xMotion += hRemainder;
//xAction = (int)xMotion;
//hRemainder = xMotion - xAction;
}
else
{
//hRemainder = 0.0;
}
//hRemainder -= (int)hRemainder;
verticalScale = Global.getGyroSensVerticalScale(deviceNumber) * 0.01;
double yMotion = deltaY != 0 ? (coefficient * verticalScale) * deltaY + (normY * (offset * signY)) : 0;
double yMotion = deltaY != 0 ? (coefficient * verticalScale) * (deltaY * tempDouble)
+ (normY * (offset * signY)) : 0;
int yAction = 0;
if (yMotion != 0.0)
{
yMotion += vRemainder;
//yAction = (int)yMotion;
//vRemainder = yMotion - yAction;
}
else
{
//vRemainder = 0.0;
}
if (gyroSmooth)
@ -131,9 +126,10 @@ namespace DS4Windows
double currentWeight = 1.0;
double finalWeight = 0.0;
double x_out = 0.0, y_out = 0.0;
int idx = 0;
for (int i = 0; i < SMOOTH_BUFFER_LEN; i++)
{
int idx = System.Math.Abs(smoothBufferTail - i - 1) % SMOOTH_BUFFER_LEN;
idx = System.Math.Abs(smoothBufferTail - i - 1) % SMOOTH_BUFFER_LEN;
x_out += xSmoothBuffer[idx] * currentWeight;
y_out += ySmoothBuffer[idx] * currentWeight;
finalWeight += currentWeight;
@ -166,13 +162,11 @@ namespace DS4Windows
vRemainder = 0.0;
}
//vRemainder -= (int)vRemainder;
int gyroInvert = Global.getGyroInvert(deviceNumber);
if (gyroInvert == 2 || gyroInvert == 3)
if ((gyroInvert & 0x02) == 2)
xAction *= -1;
if (gyroInvert == 1 || gyroInvert == 3)
if ((gyroInvert & 0x01) == 1)
yAction *= -1;
if (yAction != 0 || xAction != 0)
@ -279,7 +273,7 @@ namespace DS4Windows
}
}
double coefficient = Global.TouchSensitivity[deviceNumber] / 100.0;
double coefficient = Global.TouchSensitivity[deviceNumber] * 0.01;
// Collect rounding errors instead of losing motion.
double xMotion = coefficient * deltaX;
if (xMotion > 0.0)
@ -309,6 +303,13 @@ namespace DS4Windows
int yAction = (int)yMotion;
verticalRemainder = yMotion - yAction;
int touchpadInvert = tempInt = Global.getTouchpadInvert(deviceNumber);
if ((touchpadInvert & 0x02) == 2)
xAction *= -1;
if ((touchpadInvert & 0x01) == 1)
yAction *= -1;
if (yAction != 0 || xAction != 0)
InputMethods.MoveCursorBy(xAction, yAction);

View File

@ -608,6 +608,12 @@ namespace DS4Windows
return m_Config.gyroSmoothWeight[index];
}
public static int[] GyroMouseHorizontalAxis => m_Config.gyroMouseHorizontalAxis;
public static int getGyroMouseHorizontalAxis(int index)
{
return m_Config.gyroMouseHorizontalAxis[index];
}
public static DS4Color[] MainColor => m_Config.m_Leds;
public static DS4Color getMainColor(int index)
{
@ -660,6 +666,12 @@ namespace DS4Windows
public static bool[] LowerRCOn => m_Config.lowerRCOn;
public static bool[] TouchpadJitterCompensation => m_Config.touchpadJitterCompensation;
public static int[] TouchpadInvert => m_Config.touchpadInvert;
public static int getTouchpadInvert(int index)
{
return m_Config.touchpadInvert[index];
}
public static byte[] L2Deadzone => m_Config.l2Deadzone;
public static byte getL2Deadzone(int index)
{
@ -708,6 +720,18 @@ namespace DS4Windows
return m_Config.RSAntiDeadzone[index];
}
public static double[] SXAntiDeadzone => m_Config.SXAntiDeadzone;
public static double getSXAntiDeadzone(int index)
{
return m_Config.SXAntiDeadzone[index];
}
public static double[] SZAntiDeadzone => m_Config.SZAntiDeadzone;
public static double getSZAntiDeadzone(int index)
{
return m_Config.SZAntiDeadzone[index];
}
public static int[] LSMaxzone => m_Config.LSMaxzone;
public static int getLSMaxzone(int index)
{
@ -720,6 +744,18 @@ namespace DS4Windows
return m_Config.RSMaxzone[index];
}
public static double[] SXMaxzone => m_Config.SXMaxzone;
public static double getSXMaxzone(int index)
{
return m_Config.SXMaxzone[index];
}
public static double[] SZMaxzone => m_Config.SZMaxzone;
public static double getSZMaxzone(int index)
{
return m_Config.SZMaxzone[index];
}
public static int[] L2AntiDeadzone => m_Config.l2AntiDeadzone;
public static int getL2AntiDeadzone(int index)
{
@ -828,6 +864,30 @@ namespace DS4Windows
return m_Config.rsOutCurveMode[index];
}
public static int[] l2OutCurveMode => m_Config.l2OutCurveMode;
public static int getL2OutCurveMode(int index)
{
return m_Config.l2OutCurveMode[index];
}
public static int[] r2OutCurveMode => m_Config.r2OutCurveMode;
public static int getR2OutCurveMode(int index)
{
return m_Config.r2OutCurveMode[index];
}
public static int[] sxOutCurveMode => m_Config.sxOutCurveMode;
public static int getSXOutCurveMode(int index)
{
return m_Config.sxOutCurveMode[index];
}
public static int[] szOutCurveMode => m_Config.szOutCurveMode;
public static int getSZOutCurveMode(int index)
{
return m_Config.szOutCurveMode[index];
}
public static string[] LaunchProgram => m_Config.launchProgram;
public static string[] ProfilePath => m_Config.profilePath;
public static bool[] DistanceProfiles = m_Config.distanceProfiles;
@ -1158,18 +1218,27 @@ namespace DS4Windows
public int[] l2Maxzone = { 100, 100, 100, 100, 100 }, r2Maxzone = { 100, 100, 100, 100, 100 };
public double[] LSRotation = { 0.0, 0.0, 0.0, 0.0, 0.0 }, RSRotation = { 0.0, 0.0, 0.0, 0.0, 0.0 };
public double[] SXDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 }, SZDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 };
public double[] SXMaxzone = new double[5] { 1.0, 1.0, 1.0, 1.0, 1.0 },
SZMaxzone = new double[5] { 1.0, 1.0, 1.0, 1.0, 1.0 };
public double[] SXAntiDeadzone = new double[5] { 0.0, 0.0, 0.0, 0.0, 0.0 },
SZAntiDeadzone = new double[5] { 0.0, 0.0, 0.0, 0.0, 0.0 };
public double[] l2Sens = { 1, 1, 1, 1, 1 }, r2Sens = { 1, 1, 1, 1, 1 };
public double[] LSSens = { 1, 1, 1, 1, 1 }, RSSens = { 1, 1, 1, 1, 1 };
public double[] SXSens = { 1, 1, 1, 1, 1 }, SZSens = { 1, 1, 1, 1, 1 };
public Byte[] tapSensitivity = { 0, 0, 0, 0, 0 };
public bool[] doubleTap = { false, false, false, false, false };
public int[] scrollSensitivity = { 0, 0, 0, 0, 0 };
public int[] touchpadInvert = { 0, 0, 0, 0, 0 };
public double[] rainbow = { 0, 0, 0, 0, 0 };
public int[] flashAt = { 0, 0, 0, 0, 0 };
public bool[] mouseAccel = { true, true, true, true, true };
public int[] btPollRate = { 0, 0, 0, 0, 0 };
public int[] btPollRate = { 4, 4, 4, 4, 4 };
public int[] lsOutCurveMode = { 0, 0, 0, 0, 0 };
public int[] rsOutCurveMode = { 0, 0, 0, 0, 0 };
public int[] l2OutCurveMode = new int[5] { 0, 0, 0, 0, 0 };
public int[] r2OutCurveMode = new int[5] { 0, 0, 0, 0, 0 };
public int[] sxOutCurveMode = new int[5] { 0, 0, 0, 0, 0 };
public int[] szOutCurveMode = new int[5] { 0, 0, 0, 0, 0 };
public DS4Color[] m_LowLeds = new DS4Color[]
{
@ -1267,6 +1336,7 @@ namespace DS4Windows
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 int[] gyroMouseHorizontalAxis = new int[5] { 0, 0, 0, 0, 0 };
bool tempBool = false;
@ -1368,7 +1438,7 @@ namespace DS4Windows
catch { return 0; }
}*/
private string outputCurveString(int id)
private string stickOutputCurveString(int id)
{
string result = "linear";
switch (id)
@ -1383,7 +1453,7 @@ namespace DS4Windows
return result;
}
private int outputCurveId(string name)
private int stickOutputCurveId(string name)
{
int id = 0;
switch (name)
@ -1398,6 +1468,34 @@ namespace DS4Windows
return id;
}
private string axisOutputCurveString(int id)
{
string result = "linear";
switch (id)
{
case 0: break;
case 1: result = "quadratic"; break;
case 2: result = "cubic"; break;
default: break;
}
return result;
}
private int axisOutputCurveId(string name)
{
int id = 0;
switch (name)
{
case "linear": id = 0; break;
case "quadratic": id = 1; break;
case "cubic": id = 2; break;
default: break;
}
return id;
}
public bool SaveProfile(int device, string propath)
{
bool Saved = true;
@ -1447,6 +1545,7 @@ namespace DS4Windows
XmlNode xmlScrollSensitivity = m_Xdoc.CreateNode(XmlNodeType.Element, "scrollSensitivity", null); xmlScrollSensitivity.InnerText = scrollSensitivity[device].ToString(); Node.AppendChild(xmlScrollSensitivity);
XmlNode xmlLeftTriggerMiddle = m_Xdoc.CreateNode(XmlNodeType.Element, "LeftTriggerMiddle", null); xmlLeftTriggerMiddle.InnerText = l2Deadzone[device].ToString(); Node.AppendChild(xmlLeftTriggerMiddle);
XmlNode xmlRightTriggerMiddle = m_Xdoc.CreateNode(XmlNodeType.Element, "RightTriggerMiddle", null); xmlRightTriggerMiddle.InnerText = r2Deadzone[device].ToString(); Node.AppendChild(xmlRightTriggerMiddle);
XmlNode xmlTouchpadInvert = m_Xdoc.CreateNode(XmlNodeType.Element, "TouchpadInvert", null); xmlTouchpadInvert.InnerText = touchpadInvert[device].ToString(); Node.AppendChild(xmlTouchpadInvert);
XmlNode xmlL2AD = m_Xdoc.CreateNode(XmlNodeType.Element, "L2AntiDeadZone", null); xmlL2AD.InnerText = l2AntiDeadzone[device].ToString(); Node.AppendChild(xmlL2AD);
XmlNode xmlR2AD = m_Xdoc.CreateNode(XmlNodeType.Element, "R2AntiDeadZone", null); xmlR2AD.InnerText = r2AntiDeadzone[device].ToString(); Node.AppendChild(xmlR2AD);
XmlNode xmlL2Maxzone = m_Xdoc.CreateNode(XmlNodeType.Element, "L2MaxZone", null); xmlL2Maxzone.InnerText = l2Maxzone[device].ToString(); Node.AppendChild(xmlL2Maxzone);
@ -1465,6 +1564,12 @@ namespace DS4Windows
XmlNode xmlSXD = m_Xdoc.CreateNode(XmlNodeType.Element, "SXDeadZone", null); xmlSXD.InnerText = SXDeadzone[device].ToString(); Node.AppendChild(xmlSXD);
XmlNode xmlSZD = m_Xdoc.CreateNode(XmlNodeType.Element, "SZDeadZone", null); xmlSZD.InnerText = SZDeadzone[device].ToString(); Node.AppendChild(xmlSZD);
XmlNode xmlSXMaxzone = m_Xdoc.CreateNode(XmlNodeType.Element, "SXMaxZone", null); xmlSXMaxzone.InnerText = Convert.ToInt32(SXMaxzone[device] * 100.0).ToString(); Node.AppendChild(xmlSXMaxzone);
XmlNode xmlSZMaxzone = m_Xdoc.CreateNode(XmlNodeType.Element, "SZMaxZone", null); xmlSZMaxzone.InnerText = Convert.ToInt32(SZMaxzone[device] * 100.0).ToString(); Node.AppendChild(xmlSZMaxzone);
XmlNode xmlSXAntiDeadzone = m_Xdoc.CreateNode(XmlNodeType.Element, "SXAntiDeadZone", null); xmlSXAntiDeadzone.InnerText = Convert.ToInt32(SXAntiDeadzone[device] * 100.0).ToString(); Node.AppendChild(xmlSXAntiDeadzone);
XmlNode xmlSZAntiDeadzone = m_Xdoc.CreateNode(XmlNodeType.Element, "SZAntiDeadZone", null); xmlSZAntiDeadzone.InnerText = Convert.ToInt32(SZAntiDeadzone[device] * 100.0).ToString(); Node.AppendChild(xmlSZAntiDeadzone);
XmlNode xmlSens = m_Xdoc.CreateNode(XmlNodeType.Element, "Sensitivity", null);
xmlSens.InnerText = $"{LSSens[device]}|{RSSens[device]}|{l2Sens[device]}|{r2Sens[device]}|{SXSens[device]}|{SZSens[device]}";
Node.AppendChild(xmlSens);
@ -1484,12 +1589,19 @@ namespace DS4Windows
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 xmlGyroMouseHAxis = m_Xdoc.CreateNode(XmlNodeType.Element, "GyroMouseHAxis", null); xmlGyroMouseHAxis.InnerText = gyroMouseHorizontalAxis[device].ToString(); Node.AppendChild(xmlGyroMouseHAxis);
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);
XmlNode xmlBTPollRate = m_Xdoc.CreateNode(XmlNodeType.Element, "BTPollRate", null); xmlBTPollRate.InnerText = btPollRate[device].ToString(); Node.AppendChild(xmlBTPollRate);
XmlNode xmlLsOutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "LSOutputCurveMode", null); xmlLsOutputCurveMode.InnerText = outputCurveString(lsOutCurveMode[device]); Node.AppendChild(xmlLsOutputCurveMode);
XmlNode xmlRsOutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "RSOutputCurveMode", null); xmlRsOutputCurveMode.InnerText = outputCurveString(rsOutCurveMode[device]); Node.AppendChild(xmlRsOutputCurveMode);
XmlNode xmlLsOutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "LSOutputCurveMode", null); xmlLsOutputCurveMode.InnerText = stickOutputCurveString(lsOutCurveMode[device]); Node.AppendChild(xmlLsOutputCurveMode);
XmlNode xmlRsOutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "RSOutputCurveMode", null); xmlRsOutputCurveMode.InnerText = stickOutputCurveString(rsOutCurveMode[device]); Node.AppendChild(xmlRsOutputCurveMode);
XmlNode xmlL2OutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "L2OutputCurveMode", null); xmlL2OutputCurveMode.InnerText = axisOutputCurveString(l2OutCurveMode[device]); Node.AppendChild(xmlL2OutputCurveMode);
XmlNode xmlR2OutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "R2OutputCurveMode", null); xmlR2OutputCurveMode.InnerText = axisOutputCurveString(r2OutCurveMode[device]); Node.AppendChild(xmlR2OutputCurveMode);
XmlNode xmlSXOutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "SXOutputCurveMode", null); xmlSXOutputCurveMode.InnerText = axisOutputCurveString(sxOutCurveMode[device]); Node.AppendChild(xmlSXOutputCurveMode);
XmlNode xmlSZOutputCurveMode = m_Xdoc.CreateNode(XmlNodeType.Element, "SZOutputCurveMode", null); xmlSZOutputCurveMode.InnerText = axisOutputCurveString(szOutCurveMode[device]); Node.AppendChild(xmlSZOutputCurveMode);
XmlNode NodeControl = m_Xdoc.CreateNode(XmlNodeType.Element, "Control", null);
XmlNode Key = m_Xdoc.CreateNode(XmlNodeType.Element, "Key", null);
@ -2190,12 +2302,18 @@ namespace DS4Windows
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/scrollSensitivity"); int.TryParse(Item.InnerText, out scrollSensitivity[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/TouchpadInvert"); int temp = 0; int.TryParse(Item.InnerText, out temp); touchpadInvert[device] = Math.Min(Math.Max(temp, 0), 3); }
catch { touchpadInvert[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LeftTriggerMiddle"); byte.TryParse(Item.InnerText, out l2Deadzone[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RightTriggerMiddle"); byte.TryParse(Item.InnerText, out r2Deadzone[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/L2AntiDeadZone"); int.TryParse(Item.InnerText, out l2AntiDeadzone[device]); }
catch { l2AntiDeadzone[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/R2AntiDeadZone"); int.TryParse(Item.InnerText, out r2AntiDeadzone[device]); }
catch { r2AntiDeadzone[device] = 0; missingSetting = true; }
@ -2259,9 +2377,37 @@ namespace DS4Windows
catch { RSMaxzone[device] = 100; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SXDeadZone"); double.TryParse(Item.InnerText, out SXDeadzone[device]); }
catch { missingSetting = true; }
catch { SXDeadzone[device] = 0.25; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SZDeadZone"); double.TryParse(Item.InnerText, out SZDeadzone[device]); }
catch { missingSetting = true; }
catch { SZDeadzone[device] = 0.25; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SXMaxZone");
int temp = 0;
int.TryParse(Item.InnerText, out temp);
SXMaxzone[device] = Math.Min(Math.Max(temp * 0.01, 0.0), 1.0);
}
catch { SXMaxzone[device] = 1.0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SZMaxZone");
int temp = 0;
int.TryParse(Item.InnerText, out temp);
SZMaxzone[device] = Math.Min(Math.Max(temp * 0.01, 0.0), 1.0);
}
catch { SZMaxzone[device] = 1.0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SXAntiDeadZone");
int temp = 0;
int.TryParse(Item.InnerText, out temp);
SXAntiDeadzone[device] = Math.Min(Math.Max(temp * 0.01, 0.0), 1.0);
}
catch { SXAntiDeadzone[device] = 0.0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SZAntiDeadZone");
int temp = 0;
int.TryParse(Item.InnerText, out temp);
SZAntiDeadzone[device] = Math.Min(Math.Max(temp * 0.01, 0.0), 1.0);
}
catch { SZAntiDeadzone[device] = 0.0; missingSetting = true; }
try
{
@ -2428,6 +2574,9 @@ namespace DS4Windows
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/GyroSmoothingWeight"); int temp = 0; int.TryParse(Item.InnerText, out temp); gyroSmoothWeight[device] = Math.Min(Math.Max(0.0, Convert.ToDouble(temp * 0.01)), 1.0); }
catch { gyroSmoothWeight[device] = 0.5; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/GyroMouseHAxis"); int temp = 0; int.TryParse(Item.InnerText, out temp); gyroMouseHorizontalAxis[device] = Math.Min(Math.Max(0, temp), 1); }
catch { gyroMouseHorizontalAxis[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LSCurve"); int.TryParse(Item.InnerText, out lsCurve[device]); }
catch { lsCurve[device] = 0; missingSetting = true; }
@ -2440,14 +2589,26 @@ namespace DS4Windows
int.TryParse(Item.InnerText, out temp);
btPollRate[device] = (temp >= 0 && temp <= 16) ? temp : 0;
}
catch { btPollRate[device] = 0; missingSetting = true; }
catch { btPollRate[device] = 4; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LSOutputCurveMode"); lsOutCurveMode[device] = outputCurveId(Item.InnerText); }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LSOutputCurveMode"); lsOutCurveMode[device] = stickOutputCurveId(Item.InnerText); }
catch { lsOutCurveMode[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RSOutputCurveMode"); rsOutCurveMode[device] = outputCurveId(Item.InnerText); }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RSOutputCurveMode"); rsOutCurveMode[device] = stickOutputCurveId(Item.InnerText); }
catch { rsOutCurveMode[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/L2OutputCurveMode"); l2OutCurveMode[device] = axisOutputCurveId(Item.InnerText); }
catch { l2OutCurveMode[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/R2OutputCurveMode"); r2OutCurveMode[device] = axisOutputCurveId(Item.InnerText); }
catch { r2OutCurveMode[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SXOutputCurveMode"); sxOutCurveMode[device] = axisOutputCurveId(Item.InnerText); }
catch { sxOutCurveMode[device] = 0; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SZOutputCurveMode"); szOutCurveMode[device] = axisOutputCurveId(Item.InnerText); }
catch { szOutCurveMode[device] = 0; missingSetting = true; }
try
{
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ProfileActions");
@ -3440,16 +3601,19 @@ namespace DS4Windows
LSRotation[device] = 0.0;
RSRotation[device] = 0.0;
SXDeadzone[device] = SZDeadzone[device] = 0.25;
SXMaxzone[device] = SZMaxzone[device] = 1.0;
SXAntiDeadzone[device] = SZAntiDeadzone[device] = 0.0;
l2Sens[device] = r2Sens[device] = 1;
LSSens[device] = RSSens[device] = 1;
SXSens[device] = SZSens[device] = 1;
tapSensitivity[device] = 0;
doubleTap[device] = false;
scrollSensitivity[device] = 0;
touchpadInvert[device] = 0;
rainbow[device] = 0;
flashAt[device] = 0;
mouseAccel[device] = true;
btPollRate[device] = 0;
btPollRate[device] = 4;
m_LowLeds[device] = new DS4Color(Color.Black);
@ -3484,8 +3648,12 @@ namespace DS4Windows
gyroTriggerTurns[device] = true;
gyroSmoothing[device] = false;
gyroSmoothWeight[device] = 0.5;
gyroMouseHorizontalAxis[device] = 0;
lsOutCurveMode[device] = 0;
rsOutCurveMode[device] = 0;
l2OutCurveMode[device] = 0;
r2OutCurveMode[device] = 0;
sxOutCurveMode[device] = szOutCurveMode[device] = 0;
}
}

View File

@ -56,10 +56,8 @@ namespace DS4Windows
public bool mAllowVisible;
bool contextclose;
string logFile = appdatapath + @"\DS4Service.log";
//StreamWriter logWriter;
bool turnOffTemp;
bool runningBat;
//bool outputlog = false;
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 = { "DS4Windows v" + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion,
@ -114,6 +112,7 @@ namespace DS4Windows
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[1],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[2],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[3] };
SystemEvents.PowerModeChanged += OnPowerChange;
tSOptions.Visible = false;
bool firstrun = false;
@ -184,16 +183,14 @@ namespace DS4Windows
Log.GuiLog += On_Debug;
logFile = appdatapath + "\\DS4Windows.log";
//logWriter = File.AppendText(logFile);
Log.TrayIconLog += ShowNotification;
// tmrUpdate.Enabled = true; TODO remove tmrUpdate and leave tick()
Directory.CreateDirectory(appdatapath);
Global.Load();
if (!Save()) //if can't write to file
{
if (MessageBox.Show("Cannot write at current location\nCopy Settings to appdata?", "DS4Windows",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
try
{
@ -270,12 +267,14 @@ namespace DS4Windows
if (Path.GetExtension(s) == ".xml")
{
xDoc.Load(s);
XmlNode el = xDoc.SelectSingleNode("DS4Windows/ProfileActions"); //.CreateElement("Action");
XmlNode el = xDoc.SelectSingleNode("DS4Windows/ProfileActions");
if (el != null)
{
if (string.IsNullOrEmpty(el.InnerText))
el.InnerText = "Disconnect Controller";
else
el.InnerText += "/Disconnect Controller";
}
else
{
XmlNode Node = xDoc.SelectSingleNode("DS4Windows");
@ -283,6 +282,7 @@ namespace DS4Windows
el.InnerText = "Disconnect Controller";
Node.AppendChild(el);
}
xDoc.Save(s);
LoadActions();
}
@ -312,11 +312,10 @@ namespace DS4Windows
Form_Resize(null, null);
RefreshProfiles();
opt = new Options(this);
//opt.Text = "Options for Controller " + (devID + 1);
opt.Icon = this.Icon;
opt.TopLevel = false;
opt.Dock = DockStyle.Fill;
opt.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
opt.FormBorderStyle = FormBorderStyle.None;
tabProfiles.Controls.Add(opt);
for (int i = 0; i < 4; i++)
@ -1374,7 +1373,7 @@ namespace DS4Windows
private void pBStatus_MouseClick(object sender, MouseEventArgs e)
{
int i = Int32.Parse(((PictureBox)sender).Tag.ToString());
int i = Convert.ToInt32(((PictureBox)sender).Tag);
DS4Device d = Program.rootHub.DS4Controllers[i];
if (d != null)
{
@ -1412,8 +1411,6 @@ namespace DS4Windows
protected void On_Debug(object sender, DebugEventArgs e)
{
//logWriter.WriteLine(e.Time + ":\t" + e.Data);
//logWriter.Flush();
LogDebug(e.Time, e.Data, e.Warning);
}
@ -1613,7 +1610,7 @@ namespace DS4Windows
this.Show();
WindowState = FormWindowState.Normal;
ToolStripMenuItem em = (ToolStripMenuItem)sender;
int i = Int32.Parse(em.Tag.ToString());
int i = Convert.ToInt32(em.Tag);
if (em.Text == Properties.Resources.ContextNew.Replace("*number*", (i + 1).ToString()))
ShowOptions(i, "");
else
@ -1668,7 +1665,7 @@ namespace DS4Windows
private void Profile_Changed(object sender, EventArgs e) //cbs[i] changed
{
ComboBox cb = (ComboBox)sender;
int tdevice = Int32.Parse(cb.Tag.ToString());
int tdevice = Convert.ToInt32(cb.Tag);
if (cb.Items[cb.Items.Count - 1].ToString() == "+" + Properties.Resources.PlusNewProfile)
{
if (cb.SelectedIndex < cb.Items.Count - 1)
@ -1701,7 +1698,7 @@ namespace DS4Windows
private void Profile_Changed_Menu(object sender, ToolStripItemClickedEventArgs e)
{
ToolStripMenuItem tS = (ToolStripMenuItem)sender;
int tdevice = Int32.Parse(tS.Tag.ToString());
int tdevice = Convert.ToInt32(tS.Tag);
if (!(e.ClickedItem is ToolStripSeparator))
{
if (e.ClickedItem != tS.DropDownItems[tS.DropDownItems.Count - 1]) //if +New Profile not selected
@ -1835,12 +1832,6 @@ namespace DS4Windows
lbLastMessage.Text = lvDebug.Items[lvDebug.Items.Count - 1].SubItems[1].Text;
else
lbLastMessage.Text = "";
/*if (tabMain.SelectedIndex != 1 || !opt.Visible)
opt.inputtimer.Stop();
else if (opt.Visible && tabMain.SelectedIndex == 1)
opt.inputtimer.Start();
*/
}
private void Items_MouseHover(object sender, EventArgs e)
@ -1853,23 +1844,6 @@ namespace DS4Windows
}
lbLastMessage.Text = hoverText;
/*switch (((System.Windows.Forms.Control)sender).Name)
{
//if (File.Exists(appdatapath + "\\Auto Profiles.xml"))
case "linkUninstall": lbLastMessage.Text = Properties.Resources.IfRemovingDS4Windows; break;
case "cBSwipeProfiles": lbLastMessage.Text = Properties.Resources.TwoFingerSwipe; break;
case "cBQuickCharge": lbLastMessage.Text = Properties.Resources.QuickCharge; break;
case "pnlXIPorts": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "lbUseXIPorts": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "nUDXIPorts": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "lbLastXIPort": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "cBCloseMini": lbLastMessage.Text = Properties.Resources.CloseMinimize; break;
default: lbLastMessage.Text = Properties.Resources.HoverOverItems; break;
}
*/
//if (lbLastMessage.Text != Properties.Resources.HoverOverItems)
if (hoverText != Properties.Resources.HoverOverItems)
lbLastMessage.ForeColor = Color.Black;
else
@ -2223,6 +2197,9 @@ namespace DS4Windows
blankControllerTab();
Program.rootHub.Stop();
}
// Make sure to stop event generation routines. Should fix odd crashes on shutdown
Application.Exit();
}
private void cBSwipeProfiles_CheckedChanged(object sender, EventArgs e)
@ -2296,7 +2273,7 @@ namespace DS4Windows
private void Pads_MouseHover(object sender, EventArgs e)
{
Label lb = (Label)sender;
int i = Int32.Parse(lb.Tag.ToString());
int i = Convert.ToInt32(lb.Tag);
DS4Device d = Program.rootHub.DS4Controllers[i];
if (d != null && d.ConnectionType == ConnectionType.BT)
{
@ -2331,10 +2308,12 @@ namespace DS4Windows
int currentCustomLed;
private void EditCustomLed(object sender, EventArgs e)
{
currentCustomLed = int.Parse(((Button)sender).Tag.ToString());
useCustomColorToolStripMenuItem.Checked = UseCustomLed[currentCustomLed];
useProfileColorToolStripMenuItem.Checked = !UseCustomLed[currentCustomLed];
cMCustomLed.Show((Button)sender, new Point(0, ((Button)sender).Height));
Button btn = (Button)sender;
currentCustomLed = Convert.ToInt32(btn.Tag);
bool customLedChecked = UseCustomLed[currentCustomLed];
useCustomColorToolStripMenuItem.Checked = customLedChecked;
useProfileColorToolStripMenuItem.Checked = !customLedChecked;
cMCustomLed.Show(btn, new Point(0, btn.Height));
}
private void useProfileColorToolStripMenuItem_Click(object sender, EventArgs e)
@ -2422,7 +2401,7 @@ namespace DS4Windows
if (principal.IsInRole(WindowsBuiltInRole.Administrator))
{
TaskService ts = new TaskService();
Microsoft.Win32.TaskScheduler.Task tasker = ts.FindTask("RunDS4Windows");
Task tasker = ts.FindTask("RunDS4Windows");
if (tasker != null)
{
ts.RootFolder.DeleteTask("RunDS4Windows");
@ -2444,7 +2423,7 @@ namespace DS4Windows
if (principal.IsInRole(WindowsBuiltInRole.Administrator))
{
TaskService ts = new TaskService();
Microsoft.Win32.TaskScheduler.Task tasker = ts.FindTask("RunDS4Windows");
Task tasker = ts.FindTask("RunDS4Windows");
if (tasker != null)
{
ts.RootFolder.DeleteTask("RunDS4Windows");

View File

@ -76,6 +76,8 @@
this.nUDL2 = new System.Windows.Forms.NumericUpDown();
this.gBTouchpad = new System.Windows.Forms.GroupBox();
this.pnlTPMouse = new System.Windows.Forms.Panel();
this.label15 = new System.Windows.Forms.Label();
this.touchpadInvertComboBox = new System.Windows.Forms.ComboBox();
this.cbStartTouchpadOff = new System.Windows.Forms.CheckBox();
this.rBTPControls = new System.Windows.Forms.RadioButton();
this.rBTPMouse = new System.Windows.Forms.RadioButton();
@ -253,6 +255,10 @@
this.tCSens = new System.Windows.Forms.TabControl();
this.tPDeadzone = new System.Windows.Forms.TabPage();
this.antiDeadzoneTabPage = new System.Windows.Forms.TabPage();
this.nUDSixaxisZAntiDead = new System.Windows.Forms.NumericUpDown();
this.nUDSixaxisXAntiDead = new System.Windows.Forms.NumericUpDown();
this.label20 = new System.Windows.Forms.Label();
this.label19 = new System.Windows.Forms.Label();
this.nUDR2AntiDead = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.nUDL2AntiDead = new System.Windows.Forms.NumericUpDown();
@ -262,6 +268,10 @@
this.nUDLSAntiDead = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.maxZoneTabPage = new System.Windows.Forms.TabPage();
this.nUDSixAxisZMaxZone = new System.Windows.Forms.NumericUpDown();
this.nUDSixAxisXMaxZone = new System.Windows.Forms.NumericUpDown();
this.label18 = new System.Windows.Forms.Label();
this.label17 = new System.Windows.Forms.Label();
this.nUDR2Maxzone = new System.Windows.Forms.NumericUpDown();
this.nUDL2Maxzone = new System.Windows.Forms.NumericUpDown();
this.label8 = new System.Windows.Forms.Label();
@ -270,6 +280,19 @@
this.label6 = new System.Windows.Forms.Label();
this.nUDLSMaxZone = new System.Windows.Forms.NumericUpDown();
this.label5 = new System.Windows.Forms.Label();
this.tPOutCurve = new System.Windows.Forms.TabPage();
this.cBSixaxisZOutputCurve = new System.Windows.Forms.ComboBox();
this.cBSixaxisXOutputCurve = new System.Windows.Forms.ComboBox();
this.label24 = new System.Windows.Forms.Label();
this.label23 = new System.Windows.Forms.Label();
this.cBR2OutputCurve = new System.Windows.Forms.ComboBox();
this.cBL2OutputCurve = new System.Windows.Forms.ComboBox();
this.label22 = new System.Windows.Forms.Label();
this.label21 = new System.Windows.Forms.Label();
this.rsOutCurveComboBox = new System.Windows.Forms.ComboBox();
this.lsOutCurveComboBox = new System.Windows.Forms.ComboBox();
this.label10 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.tPCurve = new System.Windows.Forms.TabPage();
this.nUDLSCurve = new System.Windows.Forms.NumericUpDown();
this.nUDRSCurve = new System.Windows.Forms.NumericUpDown();
@ -277,16 +300,18 @@
this.lbRSCurvePercent = new System.Windows.Forms.Label();
this.lbLSCurvePercent = new System.Windows.Forms.Label();
this.lbLSCurve = new System.Windows.Forms.Label();
this.tPOutCurve = new System.Windows.Forms.TabPage();
this.rsOutCurveComboBox = new System.Windows.Forms.ComboBox();
this.lsOutCurveComboBox = new System.Windows.Forms.ComboBox();
this.label10 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.tpRotation = new System.Windows.Forms.TabPage();
this.nUDRSRotation = new System.Windows.Forms.NumericUpDown();
this.label14 = new System.Windows.Forms.Label();
this.nUDLSRotation = new System.Windows.Forms.NumericUpDown();
this.label13 = new System.Windows.Forms.Label();
this.fLPSettings = new System.Windows.Forms.FlowLayoutPanel();
this.gBGyro = new System.Windows.Forms.GroupBox();
this.rBSAControls = new System.Windows.Forms.RadioButton();
this.rBSAMouse = new System.Windows.Forms.RadioButton();
this.pnlSAMouse = new System.Windows.Forms.Panel();
this.cBGyroMouseXAxis = new System.Windows.Forms.ComboBox();
this.label16 = new System.Windows.Forms.Label();
this.lbGyroSmooth = new System.Windows.Forms.Label();
this.cBGyroSmooth = new System.Windows.Forms.CheckBox();
this.lbSmoothWeight = new System.Windows.Forms.Label();
@ -337,11 +362,6 @@
this.pSToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.alwaysOnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.advColorDialog = new DS4Windows.AdvancedColorDialog();
this.tpRotation = new System.Windows.Forms.TabPage();
this.label13 = new System.Windows.Forms.Label();
this.nUDLSRotation = new System.Windows.Forms.NumericUpDown();
this.label14 = new System.Windows.Forms.Label();
this.nUDRSRotation = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.nUDRainbow)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tBBlueBar)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tBGreenBar)).BeginInit();
@ -399,19 +419,26 @@
this.tCSens.SuspendLayout();
this.tPDeadzone.SuspendLayout();
this.antiDeadzoneTabPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDSixaxisZAntiDead)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSixaxisXAntiDead)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDR2AntiDead)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDL2AntiDead)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSAntiDead)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDLSAntiDead)).BeginInit();
this.maxZoneTabPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDSixAxisZMaxZone)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSixAxisXMaxZone)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDR2Maxzone)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDL2Maxzone)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSMaxZone)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDLSMaxZone)).BeginInit();
this.tPOutCurve.SuspendLayout();
this.tPCurve.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDLSCurve)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSCurve)).BeginInit();
this.tPOutCurve.SuspendLayout();
this.tpRotation.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDRSRotation)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDLSRotation)).BeginInit();
this.fLPSettings.SuspendLayout();
this.gBGyro.SuspendLayout();
this.pnlSAMouse.SuspendLayout();
@ -426,9 +453,6 @@
((System.ComponentModel.ISupportInitialize)(this.nUDSXS)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSZS)).BeginInit();
this.cMGyroTriggers.SuspendLayout();
this.tpRotation.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDLSRotation)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSRotation)).BeginInit();
this.SuspendLayout();
//
// lowColorChooserButton
@ -887,6 +911,8 @@
//
// pnlTPMouse
//
this.pnlTPMouse.Controls.Add(this.label15);
this.pnlTPMouse.Controls.Add(this.touchpadInvertComboBox);
this.pnlTPMouse.Controls.Add(this.nUDScroll);
this.pnlTPMouse.Controls.Add(this.cBDoubleTap);
this.pnlTPMouse.Controls.Add(this.cBScroll);
@ -900,6 +926,24 @@
resources.ApplyResources(this.pnlTPMouse, "pnlTPMouse");
this.pnlTPMouse.Name = "pnlTPMouse";
//
// label15
//
resources.ApplyResources(this.label15, "label15");
this.label15.Name = "label15";
//
// touchpadInvertComboBox
//
this.touchpadInvertComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.touchpadInvertComboBox.FormattingEnabled = true;
this.touchpadInvertComboBox.Items.AddRange(new object[] {
resources.GetString("touchpadInvertComboBox.Items"),
resources.GetString("touchpadInvertComboBox.Items1"),
resources.GetString("touchpadInvertComboBox.Items2"),
resources.GetString("touchpadInvertComboBox.Items3")});
resources.ApplyResources(this.touchpadInvertComboBox, "touchpadInvertComboBox");
this.touchpadInvertComboBox.Name = "touchpadInvertComboBox";
this.touchpadInvertComboBox.SelectedIndexChanged += new System.EventHandler(this.touchpadInvertComboBox_SelectedIndexChanged);
//
// cbStartTouchpadOff
//
resources.ApplyResources(this.cbStartTouchpadOff, "cbStartTouchpadOff");
@ -2639,8 +2683,8 @@
this.tCSens.Controls.Add(this.tPDeadzone);
this.tCSens.Controls.Add(this.antiDeadzoneTabPage);
this.tCSens.Controls.Add(this.maxZoneTabPage);
this.tCSens.Controls.Add(this.tPCurve);
this.tCSens.Controls.Add(this.tPOutCurve);
this.tCSens.Controls.Add(this.tPCurve);
this.tCSens.Controls.Add(this.tpRotation);
resources.ApplyResources(this.tCSens, "tCSens");
this.tCSens.Name = "tCSens";
@ -2666,6 +2710,10 @@
//
// antiDeadzoneTabPage
//
this.antiDeadzoneTabPage.Controls.Add(this.nUDSixaxisZAntiDead);
this.antiDeadzoneTabPage.Controls.Add(this.nUDSixaxisXAntiDead);
this.antiDeadzoneTabPage.Controls.Add(this.label20);
this.antiDeadzoneTabPage.Controls.Add(this.label19);
this.antiDeadzoneTabPage.Controls.Add(this.nUDR2AntiDead);
this.antiDeadzoneTabPage.Controls.Add(this.label3);
this.antiDeadzoneTabPage.Controls.Add(this.nUDL2AntiDead);
@ -2678,6 +2726,50 @@
this.antiDeadzoneTabPage.Name = "antiDeadzoneTabPage";
this.antiDeadzoneTabPage.UseVisualStyleBackColor = true;
//
// nUDSixaxisZAntiDead
//
this.nUDSixaxisZAntiDead.DecimalPlaces = 2;
this.nUDSixaxisZAntiDead.Increment = new decimal(new int[] {
1,
0,
0,
65536});
resources.ApplyResources(this.nUDSixaxisZAntiDead, "nUDSixaxisZAntiDead");
this.nUDSixaxisZAntiDead.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDSixaxisZAntiDead.Name = "nUDSixaxisZAntiDead";
this.nUDSixaxisZAntiDead.ValueChanged += new System.EventHandler(this.nUDSixaxisZAntiDead_ValueChanged);
//
// nUDSixaxisXAntiDead
//
this.nUDSixaxisXAntiDead.DecimalPlaces = 2;
this.nUDSixaxisXAntiDead.Increment = new decimal(new int[] {
1,
0,
0,
65536});
resources.ApplyResources(this.nUDSixaxisXAntiDead, "nUDSixaxisXAntiDead");
this.nUDSixaxisXAntiDead.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDSixaxisXAntiDead.Name = "nUDSixaxisXAntiDead";
this.nUDSixaxisXAntiDead.ValueChanged += new System.EventHandler(this.nUDSixaxisXAntiDead_ValueChanged);
//
// label20
//
resources.ApplyResources(this.label20, "label20");
this.label20.Name = "label20";
//
// label19
//
resources.ApplyResources(this.label19, "label19");
this.label19.Name = "label19";
//
// nUDR2AntiDead
//
this.nUDR2AntiDead.DecimalPlaces = 2;
@ -2768,6 +2860,10 @@
//
// maxZoneTabPage
//
this.maxZoneTabPage.Controls.Add(this.nUDSixAxisZMaxZone);
this.maxZoneTabPage.Controls.Add(this.nUDSixAxisXMaxZone);
this.maxZoneTabPage.Controls.Add(this.label18);
this.maxZoneTabPage.Controls.Add(this.label17);
this.maxZoneTabPage.Controls.Add(this.nUDR2Maxzone);
this.maxZoneTabPage.Controls.Add(this.nUDL2Maxzone);
this.maxZoneTabPage.Controls.Add(this.label8);
@ -2780,6 +2876,60 @@
this.maxZoneTabPage.Name = "maxZoneTabPage";
this.maxZoneTabPage.UseVisualStyleBackColor = true;
//
// nUDSixAxisZMaxZone
//
this.nUDSixAxisZMaxZone.DecimalPlaces = 2;
this.nUDSixAxisZMaxZone.Increment = new decimal(new int[] {
1,
0,
0,
65536});
resources.ApplyResources(this.nUDSixAxisZMaxZone, "nUDSixAxisZMaxZone");
this.nUDSixAxisZMaxZone.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDSixAxisZMaxZone.Name = "nUDSixAxisZMaxZone";
this.nUDSixAxisZMaxZone.Value = new decimal(new int[] {
1,
0,
0,
0});
this.nUDSixAxisZMaxZone.ValueChanged += new System.EventHandler(this.nUDSixAxisZMaxZone_ValueChanged);
//
// nUDSixAxisXMaxZone
//
this.nUDSixAxisXMaxZone.DecimalPlaces = 2;
this.nUDSixAxisXMaxZone.Increment = new decimal(new int[] {
1,
0,
0,
65536});
resources.ApplyResources(this.nUDSixAxisXMaxZone, "nUDSixAxisXMaxZone");
this.nUDSixAxisXMaxZone.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDSixAxisXMaxZone.Name = "nUDSixAxisXMaxZone";
this.nUDSixAxisXMaxZone.Value = new decimal(new int[] {
1,
0,
0,
0});
this.nUDSixAxisXMaxZone.ValueChanged += new System.EventHandler(this.nUDSixAxisXMaxZone_ValueChanged);
//
// label18
//
resources.ApplyResources(this.label18, "label18");
this.label18.Name = "label18";
//
// label17
//
resources.ApplyResources(this.label17, "label17");
this.label17.Name = "label17";
//
// nUDR2Maxzone
//
this.nUDR2Maxzone.DecimalPlaces = 2;
@ -2888,6 +3038,134 @@
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// tPOutCurve
//
this.tPOutCurve.Controls.Add(this.cBSixaxisZOutputCurve);
this.tPOutCurve.Controls.Add(this.cBSixaxisXOutputCurve);
this.tPOutCurve.Controls.Add(this.label24);
this.tPOutCurve.Controls.Add(this.label23);
this.tPOutCurve.Controls.Add(this.cBR2OutputCurve);
this.tPOutCurve.Controls.Add(this.cBL2OutputCurve);
this.tPOutCurve.Controls.Add(this.label22);
this.tPOutCurve.Controls.Add(this.label21);
this.tPOutCurve.Controls.Add(this.rsOutCurveComboBox);
this.tPOutCurve.Controls.Add(this.lsOutCurveComboBox);
this.tPOutCurve.Controls.Add(this.label10);
this.tPOutCurve.Controls.Add(this.label9);
resources.ApplyResources(this.tPOutCurve, "tPOutCurve");
this.tPOutCurve.Name = "tPOutCurve";
this.tPOutCurve.UseVisualStyleBackColor = true;
//
// cBSixaxisZOutputCurve
//
this.cBSixaxisZOutputCurve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBSixaxisZOutputCurve.DropDownWidth = 70;
this.cBSixaxisZOutputCurve.FormattingEnabled = true;
this.cBSixaxisZOutputCurve.Items.AddRange(new object[] {
resources.GetString("cBSixaxisZOutputCurve.Items"),
resources.GetString("cBSixaxisZOutputCurve.Items1"),
resources.GetString("cBSixaxisZOutputCurve.Items2")});
resources.ApplyResources(this.cBSixaxisZOutputCurve, "cBSixaxisZOutputCurve");
this.cBSixaxisZOutputCurve.Name = "cBSixaxisZOutputCurve";
this.cBSixaxisZOutputCurve.SelectedIndexChanged += new System.EventHandler(this.cBSixaxisZOutputCurve_SelectedIndexChanged);
//
// cBSixaxisXOutputCurve
//
this.cBSixaxisXOutputCurve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBSixaxisXOutputCurve.DropDownWidth = 70;
this.cBSixaxisXOutputCurve.FormattingEnabled = true;
this.cBSixaxisXOutputCurve.Items.AddRange(new object[] {
resources.GetString("cBSixaxisXOutputCurve.Items"),
resources.GetString("cBSixaxisXOutputCurve.Items1"),
resources.GetString("cBSixaxisXOutputCurve.Items2")});
resources.ApplyResources(this.cBSixaxisXOutputCurve, "cBSixaxisXOutputCurve");
this.cBSixaxisXOutputCurve.Name = "cBSixaxisXOutputCurve";
this.cBSixaxisXOutputCurve.SelectedIndexChanged += new System.EventHandler(this.cBSixaxisXOutputCurve_SelectedIndexChanged);
//
// label24
//
resources.ApplyResources(this.label24, "label24");
this.label24.Name = "label24";
//
// label23
//
resources.ApplyResources(this.label23, "label23");
this.label23.Name = "label23";
//
// cBR2OutputCurve
//
this.cBR2OutputCurve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBR2OutputCurve.DropDownWidth = 70;
this.cBR2OutputCurve.FormattingEnabled = true;
this.cBR2OutputCurve.Items.AddRange(new object[] {
resources.GetString("cBR2OutputCurve.Items"),
resources.GetString("cBR2OutputCurve.Items1"),
resources.GetString("cBR2OutputCurve.Items2")});
resources.ApplyResources(this.cBR2OutputCurve, "cBR2OutputCurve");
this.cBR2OutputCurve.Name = "cBR2OutputCurve";
this.cBR2OutputCurve.SelectedIndexChanged += new System.EventHandler(this.cBR2OutputCurve_SelectedIndexChanged);
//
// cBL2OutputCurve
//
this.cBL2OutputCurve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBL2OutputCurve.DropDownWidth = 70;
this.cBL2OutputCurve.FormattingEnabled = true;
this.cBL2OutputCurve.Items.AddRange(new object[] {
resources.GetString("cBL2OutputCurve.Items"),
resources.GetString("cBL2OutputCurve.Items1"),
resources.GetString("cBL2OutputCurve.Items2")});
resources.ApplyResources(this.cBL2OutputCurve, "cBL2OutputCurve");
this.cBL2OutputCurve.Name = "cBL2OutputCurve";
this.cBL2OutputCurve.SelectedIndexChanged += new System.EventHandler(this.cBL2OutputCurve_SelectedIndexChanged);
//
// label22
//
resources.ApplyResources(this.label22, "label22");
this.label22.Name = "label22";
//
// label21
//
resources.ApplyResources(this.label21, "label21");
this.label21.Name = "label21";
//
// rsOutCurveComboBox
//
this.rsOutCurveComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.rsOutCurveComboBox.DropDownWidth = 120;
this.rsOutCurveComboBox.FormattingEnabled = true;
this.rsOutCurveComboBox.Items.AddRange(new object[] {
resources.GetString("rsOutCurveComboBox.Items"),
resources.GetString("rsOutCurveComboBox.Items1"),
resources.GetString("rsOutCurveComboBox.Items2"),
resources.GetString("rsOutCurveComboBox.Items3")});
resources.ApplyResources(this.rsOutCurveComboBox, "rsOutCurveComboBox");
this.rsOutCurveComboBox.Name = "rsOutCurveComboBox";
this.rsOutCurveComboBox.SelectedIndexChanged += new System.EventHandler(this.rsOutCurveComboBox_SelectedIndexChanged);
//
// lsOutCurveComboBox
//
this.lsOutCurveComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.lsOutCurveComboBox.DropDownWidth = 120;
this.lsOutCurveComboBox.FormattingEnabled = true;
this.lsOutCurveComboBox.Items.AddRange(new object[] {
resources.GetString("lsOutCurveComboBox.Items"),
resources.GetString("lsOutCurveComboBox.Items1"),
resources.GetString("lsOutCurveComboBox.Items2"),
resources.GetString("lsOutCurveComboBox.Items3")});
resources.ApplyResources(this.lsOutCurveComboBox, "lsOutCurveComboBox");
this.lsOutCurveComboBox.Name = "lsOutCurveComboBox";
this.lsOutCurveComboBox.SelectedIndexChanged += new System.EventHandler(this.lsOutCurveComboBox_SelectedIndexChanged);
//
// label10
//
resources.ApplyResources(this.label10, "label10");
this.label10.Name = "label10";
//
// label9
//
resources.ApplyResources(this.label9, "label9");
this.label9.Name = "label9";
//
// tPCurve
//
this.tPCurve.BackColor = System.Drawing.Color.WhiteSmoke;
@ -2942,53 +3220,57 @@
resources.ApplyResources(this.lbLSCurve, "lbLSCurve");
this.lbLSCurve.Name = "lbLSCurve";
//
// tPOutCurve
// tpRotation
//
this.tPOutCurve.Controls.Add(this.rsOutCurveComboBox);
this.tPOutCurve.Controls.Add(this.lsOutCurveComboBox);
this.tPOutCurve.Controls.Add(this.label10);
this.tPOutCurve.Controls.Add(this.label9);
resources.ApplyResources(this.tPOutCurve, "tPOutCurve");
this.tPOutCurve.Name = "tPOutCurve";
this.tPOutCurve.UseVisualStyleBackColor = true;
this.tpRotation.Controls.Add(this.nUDRSRotation);
this.tpRotation.Controls.Add(this.label14);
this.tpRotation.Controls.Add(this.nUDLSRotation);
this.tpRotation.Controls.Add(this.label13);
resources.ApplyResources(this.tpRotation, "tpRotation");
this.tpRotation.Name = "tpRotation";
this.tpRotation.UseVisualStyleBackColor = true;
//
// rsOutCurveComboBox
// nUDRSRotation
//
this.rsOutCurveComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.rsOutCurveComboBox.DropDownWidth = 100;
this.rsOutCurveComboBox.FormattingEnabled = true;
this.rsOutCurveComboBox.Items.AddRange(new object[] {
resources.GetString("rsOutCurveComboBox.Items"),
resources.GetString("rsOutCurveComboBox.Items1"),
resources.GetString("rsOutCurveComboBox.Items2"),
resources.GetString("rsOutCurveComboBox.Items3")});
resources.ApplyResources(this.rsOutCurveComboBox, "rsOutCurveComboBox");
this.rsOutCurveComboBox.Name = "rsOutCurveComboBox";
this.rsOutCurveComboBox.SelectedIndexChanged += new System.EventHandler(this.rsOutCurveComboBox_SelectedIndexChanged);
resources.ApplyResources(this.nUDRSRotation, "nUDRSRotation");
this.nUDRSRotation.Maximum = new decimal(new int[] {
180,
0,
0,
0});
this.nUDRSRotation.Minimum = new decimal(new int[] {
180,
0,
0,
-2147483648});
this.nUDRSRotation.Name = "nUDRSRotation";
this.nUDRSRotation.ValueChanged += new System.EventHandler(this.nUDRSRotation_ValueChanged);
//
// lsOutCurveComboBox
// label14
//
this.lsOutCurveComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.lsOutCurveComboBox.DropDownWidth = 100;
this.lsOutCurveComboBox.FormattingEnabled = true;
this.lsOutCurveComboBox.Items.AddRange(new object[] {
resources.GetString("lsOutCurveComboBox.Items"),
resources.GetString("lsOutCurveComboBox.Items1"),
resources.GetString("lsOutCurveComboBox.Items2"),
resources.GetString("lsOutCurveComboBox.Items3")});
resources.ApplyResources(this.lsOutCurveComboBox, "lsOutCurveComboBox");
this.lsOutCurveComboBox.Name = "lsOutCurveComboBox";
this.lsOutCurveComboBox.SelectedIndexChanged += new System.EventHandler(this.lsOutCurveComboBox_SelectedIndexChanged);
resources.ApplyResources(this.label14, "label14");
this.label14.Name = "label14";
//
// label10
// nUDLSRotation
//
resources.ApplyResources(this.label10, "label10");
this.label10.Name = "label10";
resources.ApplyResources(this.nUDLSRotation, "nUDLSRotation");
this.nUDLSRotation.Maximum = new decimal(new int[] {
180,
0,
0,
0});
this.nUDLSRotation.Minimum = new decimal(new int[] {
180,
0,
0,
-2147483648});
this.nUDLSRotation.Name = "nUDLSRotation";
this.nUDLSRotation.ValueChanged += new System.EventHandler(this.nUDLSRotation_ValueChanged);
//
// label9
// label13
//
resources.ApplyResources(this.label9, "label9");
this.label9.Name = "label9";
resources.ApplyResources(this.label13, "label13");
this.label13.Name = "label13";
//
// fLPSettings
//
@ -3031,6 +3313,8 @@
//
// pnlSAMouse
//
this.pnlSAMouse.Controls.Add(this.cBGyroMouseXAxis);
this.pnlSAMouse.Controls.Add(this.label16);
this.pnlSAMouse.Controls.Add(this.lbGyroSmooth);
this.pnlSAMouse.Controls.Add(this.cBGyroSmooth);
this.pnlSAMouse.Controls.Add(this.lbSmoothWeight);
@ -3049,6 +3333,22 @@
resources.ApplyResources(this.pnlSAMouse, "pnlSAMouse");
this.pnlSAMouse.Name = "pnlSAMouse";
//
// cBGyroMouseXAxis
//
this.cBGyroMouseXAxis.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBGyroMouseXAxis.FormattingEnabled = true;
this.cBGyroMouseXAxis.Items.AddRange(new object[] {
resources.GetString("cBGyroMouseXAxis.Items"),
resources.GetString("cBGyroMouseXAxis.Items1")});
resources.ApplyResources(this.cBGyroMouseXAxis, "cBGyroMouseXAxis");
this.cBGyroMouseXAxis.Name = "cBGyroMouseXAxis";
this.cBGyroMouseXAxis.SelectedIndexChanged += new System.EventHandler(this.cBGyroMouseXAxis_SelectedIndexChanged);
//
// label16
//
resources.ApplyResources(this.label16, "label16");
this.label16.Name = "label16";
//
// lbGyroSmooth
//
resources.ApplyResources(this.lbGyroSmooth, "lbGyroSmooth");
@ -3575,58 +3875,6 @@
resources.ApplyResources(this.alwaysOnToolStripMenuItem, "alwaysOnToolStripMenuItem");
this.alwaysOnToolStripMenuItem.CheckedChanged += new System.EventHandler(this.SATrigger_CheckedChanged);
//
// tpRotation
//
this.tpRotation.Controls.Add(this.nUDRSRotation);
this.tpRotation.Controls.Add(this.label14);
this.tpRotation.Controls.Add(this.nUDLSRotation);
this.tpRotation.Controls.Add(this.label13);
resources.ApplyResources(this.tpRotation, "tpRotation");
this.tpRotation.Name = "tpRotation";
this.tpRotation.UseVisualStyleBackColor = true;
//
// label13
//
resources.ApplyResources(this.label13, "label13");
this.label13.Name = "label13";
//
// nUDLSRotation
//
resources.ApplyResources(this.nUDLSRotation, "nUDLSRotation");
this.nUDLSRotation.Maximum = new decimal(new int[] {
180,
0,
0,
0});
this.nUDLSRotation.Minimum = new decimal(new int[] {
180,
0,
0,
-2147483648});
this.nUDLSRotation.Name = "nUDLSRotation";
this.nUDLSRotation.ValueChanged += new System.EventHandler(this.nUDLSRotation_ValueChanged);
//
// label14
//
resources.ApplyResources(this.label14, "label14");
this.label14.Name = "label14";
//
// nUDRSRotation
//
resources.ApplyResources(this.nUDRSRotation, "nUDRSRotation");
this.nUDRSRotation.Maximum = new decimal(new int[] {
180,
0,
0,
0});
this.nUDRSRotation.Minimum = new decimal(new int[] {
180,
0,
0,
-2147483648});
this.nUDRSRotation.Name = "nUDRSRotation";
this.nUDRSRotation.ValueChanged += new System.EventHandler(this.nUDRSRotation_ValueChanged);
//
// Options
//
resources.ApplyResources(this, "$this");
@ -3707,22 +3955,30 @@
this.tPDeadzone.PerformLayout();
this.antiDeadzoneTabPage.ResumeLayout(false);
this.antiDeadzoneTabPage.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDSixaxisZAntiDead)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSixaxisXAntiDead)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDR2AntiDead)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDL2AntiDead)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSAntiDead)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDLSAntiDead)).EndInit();
this.maxZoneTabPage.ResumeLayout(false);
this.maxZoneTabPage.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDSixAxisZMaxZone)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSixAxisXMaxZone)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDR2Maxzone)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDL2Maxzone)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSMaxZone)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDLSMaxZone)).EndInit();
this.tPOutCurve.ResumeLayout(false);
this.tPOutCurve.PerformLayout();
this.tPCurve.ResumeLayout(false);
this.tPCurve.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDLSCurve)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSCurve)).EndInit();
this.tPOutCurve.ResumeLayout(false);
this.tPOutCurve.PerformLayout();
this.tpRotation.ResumeLayout(false);
this.tpRotation.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDRSRotation)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDLSRotation)).EndInit();
this.fLPSettings.ResumeLayout(false);
this.gBGyro.ResumeLayout(false);
this.gBGyro.PerformLayout();
@ -3740,10 +3996,6 @@
((System.ComponentModel.ISupportInitialize)(this.nUDSXS)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSZS)).EndInit();
this.cMGyroTriggers.ResumeLayout(false);
this.tpRotation.ResumeLayout(false);
this.tpRotation.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDLSRotation)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSRotation)).EndInit();
this.ResumeLayout(false);
}
@ -4064,5 +4316,25 @@
private System.Windows.Forms.Label label14;
private System.Windows.Forms.NumericUpDown nUDLSRotation;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.ComboBox touchpadInvertComboBox;
private System.Windows.Forms.ComboBox cBGyroMouseXAxis;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.NumericUpDown nUDSixAxisZMaxZone;
private System.Windows.Forms.NumericUpDown nUDSixAxisXMaxZone;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.NumericUpDown nUDSixaxisZAntiDead;
private System.Windows.Forms.NumericUpDown nUDSixaxisXAntiDead;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label19;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.ComboBox cBR2OutputCurve;
private System.Windows.Forms.ComboBox cBL2OutputCurve;
private System.Windows.Forms.ComboBox cBSixaxisZOutputCurve;
private System.Windows.Forms.ComboBox cBSixaxisXOutputCurve;
private System.Windows.Forms.Label label24;
private System.Windows.Forms.Label label23;
}
}

View File

@ -30,6 +30,9 @@ namespace DS4Windows
private Dictionary<Control, int> hoverIndexDict = new Dictionary<Control, int>();
private Dictionary<Control, Bitmap> hoverImageDict = new Dictionary<Control, Bitmap>();
private Dictionary<Control, Label> hoverLabelDict = new Dictionary<Control, Label>();
private int[] touchpadInvertToValue = new int[4] { 0, 2, 1, 3 };
int tempInt = 0;
public Options(DS4Form rt)
{
@ -338,6 +341,10 @@ namespace DS4Windows
cBTap.Checked = TapSensitivity[device] > 0;
cBDoubleTap.Checked = DoubleTap[device];
cBTouchpadJitterCompensation.Checked = TouchpadJitterCompensation[device];
tempInt = TouchpadInvert[device];
touchpadInvertComboBox.SelectedIndex = touchpadInvertToValue[tempInt];
cBlowerRCOn.Checked = LowerRCOn[device];
cBFlushHIDQueue.Checked = FlushHIDQueue[device];
enableTouchToggleCheckbox.Checked = getEnableTouchToggle(device);
@ -361,6 +368,10 @@ namespace DS4Windows
btPollRateComboBox.SelectedIndex = getBTPollRate(device);
lsOutCurveComboBox.SelectedIndex = getLsOutCurveMode(device);
rsOutCurveComboBox.SelectedIndex = getRsOutCurveMode(device);
cBL2OutputCurve.SelectedIndex = getL2OutCurveMode(device);
cBR2OutputCurve.SelectedIndex = getR2OutCurveMode(device);
cBSixaxisXOutputCurve.SelectedIndex = getSXOutCurveMode(device);
cBSixaxisZOutputCurve.SelectedIndex = getSZOutCurveMode(device);
try
{
@ -490,6 +501,7 @@ namespace DS4Windows
{
nUDSX.Value = 0.25m;
}
try
{
nUDSZ.Value = (decimal)SZDeadzone[device];
@ -498,6 +510,43 @@ namespace DS4Windows
{
nUDSZ.Value = 0.25m;
}
try
{
nUDSixAxisXMaxZone.Value = (decimal)SXMaxzone[device];
}
catch
{
nUDSixAxisXMaxZone.Value = 1.0m;
}
try
{
nUDSixAxisZMaxZone.Value = (decimal)SZMaxzone[device];
}
catch
{
nUDSixAxisZMaxZone.Value = 1.0m;
}
try
{
nUDSixaxisXAntiDead.Value = (decimal)SXAntiDeadzone[device];
}
catch
{
nUDSixaxisXAntiDead.Value = 0.0m;
}
try
{
nUDSixaxisZAntiDead.Value = (decimal)SZAntiDeadzone[device];
}
catch
{
nUDSixaxisZAntiDead.Value = 0.0m;
}
try
{
nUDL2S.Value = Math.Round((decimal)L2Sens[device], 2);
@ -567,27 +616,28 @@ namespace DS4Windows
string[] satriggers = SATriggers[device].Split(',');
List<string> s = new List<string>();
int gyroTriggerCount = cMGyroTriggers.Items.Count;
for (int i = 0, satrigLen = satriggers.Length; i < satrigLen; i++)
{
int tr;
int tr = 0;
if (int.TryParse(satriggers[i], out tr))
{
if (tr < cMGyroTriggers.Items.Count && tr > -1)
if (tr < gyroTriggerCount && tr > -1)
{
((ToolStripMenuItem)cMGyroTriggers.Items[tr]).Checked = true;
s.Add(cMGyroTriggers.Items[tr].Text);
}
else
{
((ToolStripMenuItem)cMGyroTriggers.Items[cMGyroTriggers.Items.Count - 1]).Checked = true;
s.Add(cMGyroTriggers.Items[cMGyroTriggers.Items.Count - 1].Text);
((ToolStripMenuItem)cMGyroTriggers.Items[gyroTriggerCount - 1]).Checked = true;
s.Add(cMGyroTriggers.Items[gyroTriggerCount - 1].Text);
break;
}
}
else
{
((ToolStripMenuItem)cMGyroTriggers.Items[cMGyroTriggers.Items.Count - 1]).Checked = true;
s.Add(cMGyroTriggers.Items[cMGyroTriggers.Items.Count - 1].Text);
((ToolStripMenuItem)cMGyroTriggers.Items[gyroTriggerCount - 1]).Checked = true;
s.Add(cMGyroTriggers.Items[gyroTriggerCount - 1].Text);
break;
}
}
@ -595,21 +645,26 @@ namespace DS4Windows
gyroTriggerBehavior.Checked = GyroTriggerTurns[device];
nUDGyroMouseVertScale.Value = GyroSensVerticalScale[device];
int invert = GyroInvert[device];
cBGyroInvertX.Checked = invert == 2 || invert == 3;
cBGyroInvertY.Checked = invert == 1 || invert == 3;
cBGyroInvertX.Checked = (invert & 0x02) == 2;
cBGyroInvertY.Checked = (invert & 0x01) == 1;
if (s.Count > 0)
btnGyroTriggers.Text = string.Join(", ", s);
cBGyroSmooth.Checked = nUDGyroSmoothWeight.Enabled = GyroSmoothing[device];
nUDGyroSmoothWeight.Value = (decimal)(GyroSmoothingWeight[device]);
cBGyroMouseXAxis.SelectedIndex = GyroMouseHorizontalAxis[device];
}
else
{
cBFlashType.SelectedIndex = 0;
cBWhileCharging.SelectedIndex = 0;
btPollRateComboBox.SelectedIndex = 0;
btPollRateComboBox.SelectedIndex = 4;
lsOutCurveComboBox.SelectedIndex = 0;
rsOutCurveComboBox.SelectedIndex = 0;
cBL2OutputCurve.SelectedIndex = 0;
cBR2OutputCurve.SelectedIndex = 0;
cBSixaxisXOutputCurve.SelectedIndex = 0;
cBSixaxisZOutputCurve.SelectedIndex = 0;
rBTPMouse.Checked = true;
rBSAControls.Checked = true;
ToggleRainbow(false);
@ -643,6 +698,7 @@ namespace DS4Windows
cBTap.Checked = false;
cBDoubleTap.Checked = false;
cBTouchpadJitterCompensation.Checked = true;
touchpadInvertComboBox.SelectedIndex = 0;
cBlowerRCOn.Checked = false;
cBFlushHIDQueue.Checked = false;
enableTouchToggleCheckbox.Checked = true;
@ -667,6 +723,10 @@ namespace DS4Windows
nUDRSRotation.Value = 0;
nUDSX.Value = .25m;
nUDSZ.Value = .25m;
nUDSixAxisXMaxZone.Value = 1.0m;
nUDSixAxisZMaxZone.Value = 1.0m;
nUDSixaxisXAntiDead.Value = 0.0m;
nUDSixaxisZAntiDead.Value = 0.0m;
nUDL2S.Value = 1;
nUDR2S.Value = 1;
@ -692,6 +752,7 @@ namespace DS4Windows
cBGyroInvertY.Checked = false;
cBGyroSmooth.Checked = false;
nUDGyroSmoothWeight.Value = 0.5m;
cBGyroMouseXAxis.SelectedIndex = 0;
Set();
}
@ -716,7 +777,7 @@ namespace DS4Windows
case "Macro": lvi.SubItems.Add(Properties.Resources.Macro + (action.keyType.HasFlag(DS4KeyType.ScanCode) ? " (" + Properties.Resources.ScanCode + ")" : "")); break;
case "Program": lvi.SubItems.Add(Properties.Resources.LaunchProgram.Replace("*program*", Path.GetFileNameWithoutExtension(action.details))); break;
case "Profile": lvi.SubItems.Add(Properties.Resources.LoadProfile.Replace("*profile*", action.details)); break;
case "Key": lvi.SubItems.Add(((Keys)int.Parse(action.details)).ToString() + (action.uTrigger.Count > 0 ? " (Toggle)" : "")); break;
case "Key": lvi.SubItems.Add(((Keys)Convert.ToInt32(action.details)).ToString() + (action.uTrigger.Count > 0 ? " (Toggle)" : "")); break;
case "DisconnectBT":
lvi.SubItems.Add(Properties.Resources.DisconnectBT);
break;
@ -754,18 +815,7 @@ namespace DS4Windows
}
}
/*public double Clamp(double min, double value, double max)
{
if (value > max)
return max;
else if (value < min)
return min;
else
return value;
}
*/
void EnableReadings(bool on)
private void EnableReadings(bool on)
{
lbL2Track.Enabled = on;
lbR2Track.Enabled = on;
@ -780,13 +830,14 @@ namespace DS4Windows
btnSATrackS.Visible = on;
}
void ControllerReadout_Tick(object sender, EventArgs e)
private void ControllerReadout_Tick(object sender, EventArgs e)
{
// MEMS gyro data is all calibrated to roughly -1G..1G for values -0x2000..0x1fff
// Enough additional acceleration and we are no longer mostly measuring Earth's gravity...
// We should try to indicate setpoints of the calibration when exposing this measurement....
int tempDeviceNum = (int)nUDSixaxis.Value - 1;
DS4Device ds = Program.rootHub.DS4Controllers[tempDeviceNum];
if (ds == null)
{
EnableReadings(false);
@ -797,15 +848,19 @@ namespace DS4Windows
else
{
EnableReadings(true);
SetDynamicTrackBarValue(tBsixaxisGyroX, (Program.rootHub.ExposedState[tempDeviceNum].GyroX + tBsixaxisGyroX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroY, (Program.rootHub.ExposedState[tempDeviceNum].GyroY + tBsixaxisGyroY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroZ, (Program.rootHub.ExposedState[tempDeviceNum].GyroZ + tBsixaxisGyroZ.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelX, (int)(Program.rootHub.ExposedState[tempDeviceNum].AccelX + tBsixaxisAccelX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelY, (int)(Program.rootHub.ExposedState[tempDeviceNum].AccelY + tBsixaxisAccelY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelZ, (int)(Program.rootHub.ExposedState[tempDeviceNum].AccelZ + tBsixaxisAccelZ.Value * 2) / 3);
int x = Program.rootHub.getDS4State(tempDeviceNum).LX;
int y = Program.rootHub.getDS4State(tempDeviceNum).LY;
DS4StateExposed exposeState = Program.rootHub.ExposedState[tempDeviceNum];
DS4State baseState = Program.rootHub.getDS4State(tempDeviceNum);
SetDynamicTrackBarValue(tBsixaxisGyroX, (exposeState.getGyroYaw() + tBsixaxisGyroX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroY, (exposeState.getGyroPitch() + tBsixaxisGyroY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroZ, (exposeState.getGyroRoll() + tBsixaxisGyroZ.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelX, (exposeState.getAccelX() + tBsixaxisAccelX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelY, (exposeState.getAccelY() + tBsixaxisAccelY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelZ, (exposeState.getAccelZ() + tBsixaxisAccelZ.Value * 2) / 3);
int x = baseState.LX;
int y = baseState.LY;
double tempLSS = (double)nUDLSS.Value;
btnLSTrackS.Visible = tempLSS != 1;
@ -849,8 +904,8 @@ namespace DS4Windows
(int)(tempLSS * (btnLSTrack.Location.Y - pnlLSTrack.Size.Height / 2f) + pnlLSTrack.Size.Height / 2f));
}
x = Program.rootHub.getDS4State(tempDeviceNum).RX;
y = Program.rootHub.getDS4State(tempDeviceNum).RY;
x = baseState.RX;
y = baseState.RY;
double tempRSS = (double)nUDRSS.Value;
btnRSTrackS.Visible = tempRSS != 1;
@ -894,8 +949,8 @@ namespace DS4Windows
(int)(tempRSS * (btnRSTrack.Location.Y - pnlRSTrack.Size.Height / 2f) + pnlRSTrack.Size.Height / 2f));
}
x = -Program.rootHub.ExposedState[tempDeviceNum].GyroX + 127;
y = Program.rootHub.ExposedState[tempDeviceNum].GyroZ + 127;
x = exposeState.getAccelX() + 127;
y = exposeState.getAccelZ() + 127;
btnSATrack.Location = new Point((int)(dpix * Global.Clamp(0, x / 2.09, pnlSATrack.Size.Width)), (int)(dpiy * Global.Clamp(0, y / 2.09, pnlSATrack.Size.Height)));
double tempSXS = (double)nUDSXS.Value;
@ -909,7 +964,7 @@ namespace DS4Windows
double tempL2 = (double)nUDL2.Value;
double tempL2S = (double)nUDL2S.Value;
tBL2.Value = Program.rootHub.getDS4State(tempDeviceNum).L2;
tBL2.Value = baseState.L2;
lbL2Track.Location = new Point(tBL2.Location.X - (int)(dpix * 25),
Math.Max((int)(((tBL2.Location.Y + tBL2.Size.Height) - (tBL2.Value * tempL2S) / (tBL2.Size.Height * .0209f / Math.Pow(dpix, 2))) - dpix * 20),
(int)(1 * ((tBL2.Location.Y + tBL2.Size.Height) - 255 / (tBL2.Size.Height * .0209f / Math.Pow(dpix, 2))) - dpix * 20)));
@ -923,7 +978,7 @@ namespace DS4Windows
double tempR2 = (double)nUDR2.Value;
double tempR2S = (double)nUDR2S.Value;
tBR2.Value = Program.rootHub.getDS4State(tempDeviceNum).R2;
tBR2.Value = baseState.R2;
lbR2Track.Location = new Point(tBR2.Location.X + (int)(dpix * 25),
Math.Max((int)(1 * ((tBR2.Location.Y + tBR2.Size.Height) - (tBR2.Value * tempR2S) / (tBR2.Size.Height * .0209f / Math.Pow(dpix, 2))) - dpix * 20),
(int)(1 * ((tBR2.Location.Y + tBR2.Size.Height) - 255 / (tBR2.Size.Height * .0209f / Math.Pow(dpix, 2))) - dpix * 20)));
@ -943,7 +998,7 @@ namespace DS4Windows
lbInputDelay.BackColor = Color.Red;
lbInputDelay.ForeColor = Color.White;
}
else if (latency > (warnInterval / 2))
else if (latency > (warnInterval * 0.5))
{
lbInputDelay.BackColor = Color.Yellow;
lbInputDelay.ForeColor = Color.Black;
@ -1301,6 +1356,10 @@ namespace DS4Windows
BTPollRate[device] = btPollRateComboBox.SelectedIndex;
lsOutCurveMode[device] = lsOutCurveComboBox.SelectedIndex;
rsOutCurveMode[device] = rsOutCurveComboBox.SelectedIndex;
l2OutCurveMode[device] = cBL2OutputCurve.SelectedIndex;
r2OutCurveMode[device] = cBR2OutputCurve.SelectedIndex;
sxOutCurveMode[device] = cBSixaxisXOutputCurve.SelectedIndex;
szOutCurveMode[device] = cBSixaxisZOutputCurve.SelectedIndex;
L2Deadzone[device] = (byte)Math.Round((nUDL2.Value * 255), 0);
R2Deadzone[device] = (byte)Math.Round((nUDR2.Value * 255), 0);
L2AntiDeadzone[device] = (int)(nUDL2AntiDead.Value * 100);
@ -1312,6 +1371,10 @@ namespace DS4Windows
ScrollSensitivity[device] = (int)nUDScroll.Value;
DoubleTap[device] = cBDoubleTap.Checked;
TapSensitivity[device] = (byte)nUDTap.Value;
tempInt = touchpadInvertComboBox.SelectedIndex;
TouchpadInvert[device] = touchpadInvertToValue[tempInt];
IdleDisconnectTimeout[device] = (int)(nUDIdleDisconnect.Value * 60);
Rainbow[device] = (int)nUDRainbow.Value;
RSDeadzone[device] = (int)Math.Round((nUDRS.Value * 127), 0);
@ -1326,6 +1389,10 @@ namespace DS4Windows
FlashAt[device] = (int)nUDflashLED.Value;
SXDeadzone[device] = (double)nUDSX.Value;
SZDeadzone[device] = (double)nUDSZ.Value;
SXMaxzone[device] = (double)nUDSixAxisXMaxZone.Value;
SZMaxzone[device] = (double)nUDSixAxisZMaxZone.Value;
SXAntiDeadzone[device] = (double)nUDSixaxisXAntiDead.Value;
SZAntiDeadzone[device] = (double)nUDSixaxisZAntiDead.Value;
MouseAccel[device] = cBMouseAccel.Checked;
DinputOnly[device] = cBDinput.Checked;
StartTouchpadOff[device] = cbStartTouchpadOff.Checked;
@ -1355,6 +1422,7 @@ namespace DS4Windows
GyroSensVerticalScale[device] = (int)nUDGyroMouseVertScale.Value;
GyroSmoothing[device] = cBGyroSmooth.Checked;
GyroSmoothingWeight[device] = (double)nUDGyroSmoothWeight.Value;
GyroMouseHorizontalAxis[device] = cBGyroMouseXAxis.SelectedIndex;
int invert = 0;
if (cBGyroInvertX.Checked)
@ -2893,6 +2961,87 @@ namespace DS4Windows
}
}
private void touchpadInvertComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (!loading)
{
tempInt = touchpadInvertToValue[touchpadInvertComboBox.SelectedIndex];
TouchpadInvert[device] = tempInt;
}
}
private void cBGyroMouseXAxis_SelectedIndexChanged(object sender, EventArgs e)
{
if (!loading)
{
GyroMouseHorizontalAxis[device] = cBGyroMouseXAxis.SelectedIndex;
}
}
private void nUDSixAxisXMaxZone_ValueChanged(object sender, EventArgs e)
{
if (!loading)
{
SXMaxzone[device] = (double)nUDSixAxisXMaxZone.Value;
}
}
private void nUDSixAxisZMaxZone_ValueChanged(object sender, EventArgs e)
{
if (!loading)
{
SZMaxzone[device] = (double)nUDSixAxisZMaxZone.Value;
}
}
private void nUDSixaxisXAntiDead_ValueChanged(object sender, EventArgs e)
{
if (loading == false)
{
SXAntiDeadzone[device] = (double)nUDSixaxisXAntiDead.Value;
}
}
private void nUDSixaxisZAntiDead_ValueChanged(object sender, EventArgs e)
{
if (loading == false)
{
SZAntiDeadzone[device] = (double)nUDSixaxisZAntiDead.Value;
}
}
private void cBL2OutputCurve_SelectedIndexChanged(object sender, EventArgs e)
{
if (loading == false)
{
l2OutCurveMode[device] = cBL2OutputCurve.SelectedIndex;
}
}
private void cBR2OutputCurve_SelectedIndexChanged(object sender, EventArgs e)
{
if (loading == false)
{
r2OutCurveMode[device] = cBR2OutputCurve.SelectedIndex;
}
}
private void cBSixaxisXOutputCurve_SelectedIndexChanged(object sender, EventArgs e)
{
if (loading == false)
{
sxOutCurveMode[device] = cBSixaxisXOutputCurve.SelectedIndex;
}
}
private void cBSixaxisZOutputCurve_SelectedIndexChanged(object sender, EventArgs e)
{
if (loading == false)
{
szOutCurveMode[device] = cBSixaxisZOutputCurve.SelectedIndex;
}
}
private void Options_Resize(object sender, EventArgs e)
{
fLPSettings.AutoScroll = false;

File diff suppressed because it is too large Load Diff

View File

@ -133,7 +133,6 @@ namespace DS4Windows
private byte[] accel = new byte[6];
private byte[] gyro = new byte[6];
private byte[] inputReport;
//private byte[] inputReport2;
private byte[] btInputReport = null;
private byte[] outputReportBuffer, outputReport;
private readonly DS4Touchpad touchpad = null;
@ -164,7 +163,7 @@ namespace DS4Windows
public event EventHandler<EventArgs> Removal = null;
public event EventHandler<EventArgs> SyncChange = null;
public event EventHandler<EventArgs> SerialChange = null;
public event EventHandler<EventArgs> PublishRemoval = null;
//public event EventHandler<EventArgs> PublishRemoval = null;
public HidDevice HidDevice => hDevice;
public bool IsExclusive => HidDevice.IsExclusive;
@ -415,7 +414,6 @@ namespace DS4Windows
if (conType == ConnectionType.USB || conType == ConnectionType.SONYWA)
{
inputReport = new byte[64];
//inputReport2 = new byte[64];
outputReport = new byte[hDevice.Capabilities.OutputReportByteLength];
outputReportBuffer = new byte[hDevice.Capabilities.OutputReportByteLength];
if (conType == ConnectionType.USB)
@ -668,8 +666,6 @@ namespace DS4Windows
{
oldCharging = charging;
currerror = string.Empty;
curTimeDouble = sw.Elapsed.TotalMilliseconds;
curtime = sw.ElapsedMilliseconds;
if (tempLatencyCount >= 50)
{
@ -677,12 +673,9 @@ namespace DS4Windows
tempLatencyCount--;
}
lastTimeElapsed = curtime - oldtime;
lastTimeElapsedDouble = (curTimeDouble - oldTimeDouble);
latencyQueue.Enqueue(this.lastTimeElapsed);
tempLatencyCount++;
oldtime = curtime;
oldTimeDouble = curTimeDouble;
Latency = latencyQueue.Average();
if (conType == ConnectionType.BT)
@ -691,7 +684,6 @@ namespace DS4Windows
//HidDevice.ReadStatus res = hDevice.ReadAsyncWithFileStream(btInputReport, READ_STREAM_TIMEOUT);
HidDevice.ReadStatus res = hDevice.ReadWithFileStream(btInputReport);
timeoutEvent = false;
//HidDevice.ReadStatus res = hDevice.ReadFileOverlapped(btInputReport, READ_STREAM_TIMEOUT);
if (res == HidDevice.ReadStatus.Success)
{
Array.Copy(btInputReport, 2, inputReport, 0, inputReport.Length);
@ -705,7 +697,7 @@ namespace DS4Windows
else
{
int winError = Marshal.GetLastWin32Error();
Console.WriteLine(Mac.ToString() + " " + System.DateTime.UtcNow.ToString("o") + "> disconnect due to read failure: " + winError);
Console.WriteLine(Mac.ToString() + " " + DateTime.UtcNow.ToString("o") + "> disconnect due to read failure: " + winError);
//Log.LogToGui(Mac.ToString() + " disconnected due to read failure: " + winError, true);
}
@ -730,7 +722,6 @@ namespace DS4Windows
//Array.Clear(inputReport, 0, inputReport.Length);
//HidDevice.ReadStatus res = hDevice.ReadAsyncWithFileStream(inputReport, READ_STREAM_TIMEOUT);
HidDevice.ReadStatus res = hDevice.ReadWithFileStream(inputReport);
//HidDevice.ReadStatus res = hDevice.ReadFileOverlapped(inputReport, READ_STREAM_TIMEOUT);
if (res != HidDevice.ReadStatus.Success)
{
if (res == HidDevice.ReadStatus.WaitTimedOut)
@ -740,7 +731,7 @@ namespace DS4Windows
else
{
int winError = Marshal.GetLastWin32Error();
Console.WriteLine(Mac.ToString() + " " + System.DateTime.UtcNow.ToString("o") + "> disconnect due to read failure: " + winError);
Console.WriteLine(Mac.ToString() + " " + DateTime.UtcNow.ToString("o") + "> disconnect due to read failure: " + winError);
//Log.LogToGui(Mac.ToString() + " disconnected due to read failure: " + winError, true);
}
@ -757,12 +748,17 @@ namespace DS4Windows
timeoutExecuted = true;
return;
}
else
{
//Array.Copy(inputReport2, 0, inputReport, 0, inputReport.Length);
}
}
curTimeDouble = sw.Elapsed.TotalMilliseconds;
curtime = sw.ElapsedMilliseconds;
lastTimeElapsed = curtime - oldtime;
lastTimeElapsedDouble = (curTimeDouble - oldTimeDouble);
oldtime = curtime;
oldTimeDouble = curTimeDouble;
if (conType == ConnectionType.BT && btInputReport[0] != 0x11)
{
//Received incorrect report, skip it
@ -855,7 +851,7 @@ namespace DS4Windows
// Store Gyro and Accel values
Array.Copy(inputReport, 13, gyro, 0, 6);
Array.Copy(inputReport, 19, accel, 0, 6);
sixAxis.handleSixaxis(gyro, accel, cState);
sixAxis.handleSixaxis(gyro, accel, cState, lastTimeElapsedDouble);
/* Debug output of incoming HID data:
if (cState.L2 == 0xff && cState.R2 == 0xff)
@ -996,7 +992,7 @@ namespace DS4Windows
//outputReportBuffer[1] = 0x80;
//outputReportBuffer[1] = 0x84;
outputReportBuffer[1] = (byte)(0x80 | btPollRate); // input report rate
// enable lightbar, rumble, flash
// enable rumble (0x01), lightbar (0x02), flash (0x04)
outputReportBuffer[3] = 0xf7;
outputReportBuffer[6] = rightLightFastRumble; // fast motor
outputReportBuffer[7] = leftHeavySlowRumble; // slow motor
@ -1009,7 +1005,7 @@ namespace DS4Windows
else
{
outputReportBuffer[0] = 0x05;
// enable lightbar, rumble, flash
// enable rumble (0x01), lightbar (0x02), flash (0x04)
outputReportBuffer[1] = 0xf7;
outputReportBuffer[4] = rightLightFastRumble; // fast motor
outputReportBuffer[5] = leftHeavySlowRumble; // slow motor
@ -1200,13 +1196,6 @@ namespace DS4Windows
return pState.Clone();
}
public void getExposedState(DS4StateExposed expState, DS4State state)
{
cState.CopyTo(state);
expState.setAccel(accel);
expState.setGyro(gyro);
}
public void getCurrentState(DS4State state)
{
cState.CopyTo(state);

View File

@ -15,100 +15,79 @@ namespace DS4Windows
public class SixAxis
{
public readonly int gyroX, gyroY, gyroZ, deltaX, deltaY, deltaZ, accelX, accelY, accelZ;
public readonly int gyroXFull, gyroYFull, gyroZFull;
public readonly int accelXFull, accelYFull, accelZFull;
public int gyroYaw, gyroPitch, gyroRoll, accelX, accelY, accelZ;
public readonly int gyroYawFull, gyroPitchFull, gyroRollFull;
public int accelXFull, accelYFull, accelZFull;
public readonly byte touchID;
public readonly SixAxis previousAxis;
public SixAxis(int X, int Y, int Z, int aX, int aY, int aZ, SixAxis prevAxis = null)
public readonly double elapsed;
public readonly SixAxis previousAxis = null;
public SixAxis(int X, int Y, int Z, int aX, int aY, int aZ,
double milliseconds, SixAxis prevAxis = null)
{
gyroX = X / 256;
gyroY = Y / 256;
gyroZ = Z / 256;
gyroXFull = X;
gyroYFull = Y;
gyroZFull = Z;
gyroYaw = -X / 256;
gyroPitch = Y / 256;
gyroRoll = -Z / 256;
gyroYawFull = -X;
gyroPitchFull = Y;
gyroRollFull = -Z;
accelX = aX / 64;
accelY = aY / 64;
// Put accel ranges between 0 - 128 abs
accelX = -aX / 64;
accelY = -aY / 64;
accelZ = aZ / 64;
accelXFull = aX;
accelYFull = aY;
accelXFull = -aX;
accelYFull = -aY;
accelZFull = aZ;
elapsed = milliseconds;
previousAxis = prevAxis;
if (previousAxis != null)
{
deltaX = gyroX - previousAxis.gyroX;
deltaY = gyroY - previousAxis.gyroY;
deltaZ = gyroZ - previousAxis.gyroZ;
}
}
}
public class DS4SixAxis
{
//public event EventHandler<SixAxisEventArgs> SixAxisMoved = null; // deltaX/deltaY are set because one or both fingers were already down on a prior sensor reading
public event EventHandler<SixAxisEventArgs> SixAccelMoved = null; // no status change for the touchpad itself... but other sensors may have changed, or you may just want to do some processing
public event EventHandler<SixAxisEventArgs> SixAccelMoved = null;
internal int lastGyroX, lastGyroY, lastGyroZ, lastAX, lastAY, lastAZ; // tracks 0, 1 or 2 touches; we maintain touch 1 and 2 separately
internal int lastGyroYaw, lastGyroPitch, lastGyroRoll,
lastAX, lastAY, lastAZ;
internal double lastMilliseconds;
internal byte[] previousPacket = new byte[8];
public void handleSixaxis(byte[] gyro, byte[] accel, DS4State state)
public void handleSixaxis(byte[] gyro, byte[] accel, DS4State state, double milliseconds)
{
//bool touchPadIsDown = sensors.TouchButton;
/*if (!PacketChanged(data, touchPacketOffset) && touchPadIsDown == lastTouchPadIsDown)
{
if (SixAxisUnchanged != null)
SixAxisUnchanged(this, EventArgs.Empty);
return;
}*/
/* byte touchID1 = (byte)(data[0 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x7F);
byte touchID2 = (byte)(data[4 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x7F);*/
int currentYaw = (short)((ushort)(gyro[3] << 8) | gyro[2]);
int currentPitch = (short)((ushort)(gyro[1] << 8) | gyro[0]);
int currentRoll = (short)((ushort)(gyro[5] << 8) | gyro[4]);
int AccelX = (short)((ushort)(accel[1] << 8) | accel[0]);
int AccelY = (short)((ushort)(accel[3] << 8) | accel[2]);
int AccelZ = (short)((ushort)(accel[5] << 8) | accel[4]);
int currentX = (short)((ushort)(gyro[3] << 8) | gyro[2]); // Gyro Pitch
int currentY = (short)((ushort)(gyro[1] << 8) | gyro[0]); // Gyro Yaw
int currentZ = (short)((ushort)(gyro[5] << 8) | gyro[4]); // Gyro Roll
int AccelX = (short)((ushort)(accel[1] << 8) | accel[0]); // Accel Pitch
int AccelY = (short)((ushort)(accel[3] << 8) | accel[2]); // Accel Roll
int AccelZ = (short)((ushort)(accel[5] << 8) | accel[4]); // Accel Yaw
SixAxisEventArgs args;
//if (sensors.Touch1 || sensors.Touch2)
{
/* if (SixAxisMoved != null)
{
SixAxis sPrev, now;
sPrev = new SixAxis(lastGyroX, lastGyroY, lastGyroZ, lastAX,lastAY,lastAZ);
now = new SixAxis(currentX, currentY, currentZ, AccelX, AccelY, AccelZ, sPrev);
args = new SixAxisEventArgs(state.ReportTimeStamp, now);
SixAxisMoved(this, args);
}
lastGyroX = currentX;
lastGyroY = currentY;
lastGyroZ = currentZ;
lastAX = AccelX;
lastAY = AccelY;
lastAZ = AccelZ;*/
}
SixAxisEventArgs args = null;
if (AccelX != 0 || AccelY != 0 || AccelZ != 0)
{
if (SixAccelMoved != null)
{
SixAxis sPrev, now;
sPrev = new SixAxis(lastGyroX, lastGyroY, lastGyroZ, lastAX, lastAY, lastAZ);
now = new SixAxis(currentX, currentY, currentZ, AccelX, AccelY, AccelZ, sPrev);
SixAxis sPrev = null, now = null;
sPrev = new SixAxis(lastGyroYaw, lastGyroPitch, lastGyroRoll,
lastAX, lastAY, lastAZ, lastMilliseconds);
now = new SixAxis(currentYaw, currentPitch, currentRoll,
AccelX, AccelY, AccelZ, milliseconds, sPrev);
args = new SixAxisEventArgs(state.ReportTimeStamp, now);
state.Motion = now;
SixAccelMoved(this, args);
}
lastGyroX = currentX;
lastGyroY = currentY;
lastGyroZ = currentZ;
lastGyroYaw = currentYaw;
lastGyroPitch = currentPitch;
lastGyroRoll = currentRoll;
lastAX = AccelX;
lastAY = AccelY;
lastAZ = AccelZ;
lastMilliseconds = milliseconds;
}
}
}

View File

@ -8,7 +8,8 @@ namespace DS4Windows
public bool Square, Triangle, Circle, Cross;
public bool DpadUp, DpadDown, DpadLeft, DpadRight;
public bool L1, L3, R1, R3;
public bool Share, Options, PS, Touch1, Touch2, TouchButton, TouchRight, TouchLeft, Touch1Finger, Touch2Fingers;
public bool Share, Options, PS, Touch1, Touch2, TouchButton, TouchRight,
TouchLeft, Touch1Finger, Touch2Fingers;
public byte Touch1Identifier, Touch2Identifier;
public byte LX, RX, LY, RY, L2, R2;
public byte FrameCounter; // 0, 1, 2...62, 63, 0....
@ -22,6 +23,7 @@ namespace DS4Windows
public double LYUnit;
public double RXUnit;
public double RYUnit;
public SixAxis Motion = null;
public static readonly int DEFAULT_AXISDIR_VALUE = 127;
public DS4State()
@ -44,6 +46,7 @@ namespace DS4Windows
LYUnit = 0.0;
RXUnit = 0.0;
RYUnit = 0.0;
Motion = new SixAxis(0, 0, 0, 0, 0, 0, 0.0);
}
public DS4State(DS4State state)
@ -90,6 +93,7 @@ namespace DS4Windows
LYUnit = state.LYUnit;
RXUnit = state.RXUnit;
RYUnit = state.RYUnit;
Motion = state.Motion;
}
public DS4State Clone()
@ -141,6 +145,7 @@ namespace DS4Windows
state.LYUnit = LYUnit;
state.RXUnit = RXUnit;
state.RYUnit = RYUnit;
state.Motion = Motion;
}
public void calculateStickAngles()
@ -164,20 +169,16 @@ namespace DS4Windows
{
double sinAngle = Math.Sin(rotation), cosAngle = Math.Cos(rotation);
double tempLX = LX - 127.5, tempLY = LY - 127.5;
Byte tempx = (Byte)(tempLX * cosAngle - tempLY * sinAngle + 127.5);
Byte tempy = (Byte)(tempLX * sinAngle + tempLY * cosAngle + 127.5);
LX = tempx;
LY = tempy;
LX = (Byte)(Global.Clamp(-127.5, (tempLX * cosAngle - tempLY * sinAngle), 127.5) + 127.5);
LY = (Byte)(Global.Clamp(-127.5, (tempLX * sinAngle + tempLY * cosAngle), 127.5) + 127.5);
}
public void rotateRSCoordinates(double rotation)
{
double sinAngle = Math.Sin(rotation), cosAngle = Math.Cos(rotation);
double tempRX = RX - 127.5, tempRY = RY - 127.5;
Byte tempx = (Byte)(tempRX * cosAngle - tempRY * sinAngle + 127.5);
Byte tempy = (Byte)(tempRX * sinAngle + tempRY * cosAngle + 127.5);
RX = tempx;
RY = tempy;
RX = (Byte)(Global.Clamp(-127.5, (tempRX * cosAngle - tempRY * sinAngle), 127.5) + 127.5);
RY = (Byte)(Global.Clamp(-127.5, (tempRX * sinAngle + tempRY * cosAngle), 127.5) + 127.5);
}
}
}

View File

@ -4,13 +4,12 @@ namespace DS4Windows
public class DS4StateExposed
{
private DS4State _state;
private byte[] accel = new byte[] { 0, 0, 0, 0, 0, 0 },
gyro = new byte[] { 0, 0, 0, 0, 0, 0 };
public DS4StateExposed()
{
_state = new DS4State();
}
public DS4StateExposed(DS4State state)
{
_state = state;
@ -44,75 +43,40 @@ namespace DS4Windows
byte R2 { get { return _state.R2; } }
int Battery { get { return _state.Battery; } }
/// <summary> Holds raw DS4 input data from 14 to 19 </summary>
public byte[] Accel { set { accel = value; } }
public void setAccel(byte[] value)
public int GyroYaw { get { return _state.Motion.gyroYaw; } }
public int getGyroYaw()
{
accel = value;
return _state.Motion.gyroYaw;
}
/// <summary> Holds raw DS4 input data from 20 to 25 </summary>
public byte[] Gyro { set { gyro = value; } }
public void setGyro(byte[] value)
public int GyroPitch { get { return _state.Motion.gyroPitch; } }
public int getGyroPitch()
{
gyro = value;
return _state.Motion.gyroPitch;
}
/// <summary> Yaw leftward/counter-clockwise/turn to port or larboard side </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
//public int AccelX { get { return (short)((ushort)(accel[2] << 8) | accel[3]) / 256; } }
//public int AccelX { get { return (short)((ushort)(accel[1] << 8) | accel[0]) / 64; } }
public int AccelX { get { return (short)((ushort)(gyro[3] << 8) | gyro[2]) / 256; } }
/// <summary> Pitch upward/backward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
//public int AccelY { get { return (short)((ushort)(accel[0] << 8) | accel[1] ) / 256; } }
//public int AccelY { get { return (short)((ushort)(accel[3] << 8) | accel[2]) / 64; } }
public int AccelY { get { return (short)((ushort)(gyro[1] << 8) | gyro[0]) / 256; } }
/// <summary> roll left/L side of controller down/starboard raising up </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
//public int AccelZ { get { return (short)((ushort)(accel[4] << 8) | accel[5]) / 256; } }
//public int AccelZ { get { return (short)((ushort)(accel[5] << 8) | accel[4]) / 64; } }
public int AccelZ { get { return (short)((ushort)(gyro[5] << 8) | gyro[4]) / 256; } }
/// <summary> R side of controller upward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
//public int GyroX { get { return (short)((ushort)(gyro[0] << 8) | gyro[1]) / 64; } }
//public int GyroX { get { return (short)((ushort)(gyro[3] << 8) | gyro[2]) / 256; } }
public int GyroX { get { return (short)((ushort)(accel[1] << 8) | accel[0]) / 64; } }
public int getGyroX()
public int GyroRoll { get { return _state.Motion.gyroRoll; } }
public int getGyroRoll()
{
//return (short)((ushort)(gyro[0] << 8) | gyro[1]) / 64;
//return (short)((ushort)(gyro[3] << 8) | gyro[2]) / 256;
return (short)((ushort)(accel[1] << 8) | accel[0]) / 64;
return _state.Motion.gyroRoll;
}
/// <summary> touchpad and button face side of controller upward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
//public int GyroY { get { return (short)((ushort)(gyro[2] << 8) | gyro[3]) / 64; } }
//public int GyroY { get { return (short)((ushort)(gyro[1] << 8) | gyro[0]) / 256; } }
public int GyroY { get { return (short)((ushort)(accel[3] << 8) | accel[2]) / 64; } }
public int getGyroY()
public int AccelX { get { return _state.Motion.accelX; } }
public int getAccelX()
{
//return (short)((ushort)(gyro[2] << 8) | gyro[3]) / 64;
//return (short)((ushort)(gyro[1] << 8) | gyro[0]) / 256;
return (short)((ushort)(accel[3] << 8) | accel[2]) / 64;
return _state.Motion.accelX;
}
/// <summary> Audio/expansion ports upward and light bar/shoulders/bumpers/USB port downward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
//public int GyroZ { get { return (short)((ushort)(gyro[4] << 8) | gyro[5]) / 64; } }
//public int GyroZ { get { return (short)((ushort)(gyro[5] << 8) | gyro[4]) / 256; } }
public int GyroZ { get { return (short)((ushort)(accel[5] << 8) | accel[4]) / 64; } }
public int getGyroZ()
public int AccelY { get { return _state.Motion.accelY; } }
public int getAccelY()
{
//return (short)((ushort)(gyro[4] << 8) | gyro[5]) / 64;
//return (short)((ushort)(gyro[5] << 8) | gyro[4]) / 256;
return (short)((ushort)(accel[5] << 8) | accel[4]) / 64;
return _state.Motion.accelY;
}
public int AccelZ { get { return _state.Motion.accelZ; } }
public int getAccelZ()
{
return _state.Motion.accelZ;
}
}
}

View File

@ -32,5 +32,5 @@ 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.4.84")]
[assembly: AssemblyFileVersion("1.4.84")]
[assembly: AssemblyVersion("1.4.86")]
[assembly: AssemblyFileVersion("1.4.86")]

View File

@ -6,14 +6,24 @@ DS4Windows is a portable program that allows you to get the best DualShock 4 exp
You can find the latest and older versions [here](https://github.com/Ryochan7/DS4Windows/releases).
This project is a fork of the work of Jays2Kings. You can find the old project
website at [ds4windows.com](http://ds4windows.com).
## Requirements
- [Microsoft .NET 4.5 or higher (needed to unzip the driver and for macros to work properly)](http://www.microsoft.com/en-us/download/details.aspx?id=42642)
- DS4 Driver (Downloaded & Installed with DS4Windows)
- SCP Virtual Bus Driver (Downloaded & Installed with DS4Windows)
- Microsoft 360 Driver (link inside DS4Windows, already installed on Windows 7 SP1 and higher or if you've used a 360 controller before)
- Sony DualShock 4 (This should be obvious)
- Micro USB cable
- (Optional)Bluetooth 2.1+, via adapter or built in pc [(My recommendation)](http://www.amazon.com/gp/product/B004LNXO28/ref=oh_aui_search_detailpage?ie=UTF8&psc=1) (Toshiba's bluetooth & Bluetooth adapters using CSR currently does not work)
Note: Hide DS4 currently doesn't work on Windows 10 without a workaround (disabling Network list service and restarting, but this causes serious issues with windows, use caution).
You can find more info out at [ds4windows.com](http://ds4windows.com).
## Pull Requests
Pull requests for DS4Windows are welcome. Before making a pull request, please
test your changes to ensure that the changes made do not negatively affect
the performance of other parts of the application. Some consideration will
be made during code review to try to tweak the changes in order to improve
application performance. However, there is a chance that a pull request will be
rejected if no reasonable solution can be found to incorporate code changes.