public SwitchProControl(AxisCalibration _leftXCal, AxisCalibration _leftYCal, AxisCalibration _rightXCal, AxisCalibration _rightYCal) : this()
 {
     leftXCalibration  = _leftXCal;
     leftYCalibration  = _leftYCal;
     rightXCalibration = _rightXCal;
     rightYCalibration = _rightYCal;
 }
 internal Raildriver()
 {
     for (int i = 0; i < Calibration.Length; i++)
     {
         Calibration[i] = new AxisCalibration();
     }
     LoadCalibration(OpenBveApi.Path.CombineFile(Program.FileSystem.SettingsFolder, "RailDriver.xml"));
 }
 public SwitchProControl()
 {
     InitializeComponent();
     _calLeftJoystick  = new NintrollerLib.Joystick();
     _calRightJoystick = new NintrollerLib.Joystick();
     leftXCalibration  = new AxisCalibration(0, 65535, 32767, 2048);
     leftYCalibration  = new AxisCalibration(0, 65535, 32767, 2048);
     rightXCalibration = new AxisCalibration(0, 65535, 32767, 2048);
     rightYCalibration = new AxisCalibration(0, 65535, 32767, 2048);
 }
示例#4
0
 public AxisCalibrationWindow(AxisCalibration prevCalibration, string filename = "") : this()
 {
     _axis         = prevCalibration;
     FileName      = filename;
     set           = true;
     center.Value  = prevCalibration.center;
     min.Value     = (int)Math.Round(100 - 100 * prevCalibration.min / 65535d);
     max.Value     = (int)Math.Round(100 * prevCalibration.max / 65535d);
     deadMax.Value = (int)Math.Round(100 * prevCalibration.deadPos / 65535d);
     deadMin.Value = (int)Math.Round(-100 * prevCalibration.deadNeg / 65535d);
 }
示例#5
0
        internal RailDriver32(PIEDevice device)
        {
            ConfigurationLink = ConfigurationLink.RailDriver;
            myDevice          = device;
            for (int i = 0; i < Calibration.Length; i++)
            {
                Calibration[i] = new AxisCalibration();
            }

            LoadCalibration(OpenBveApi.Path.CombineFile(Program.FileSystem.SettingsFolder, "RailDriver.xml"));
        }
示例#6
0
 private float GetSliderSensitivity(AxisCalibration axisCalibration)
 {
     if (axisCalibration.sensitivityType == AxisSensitivityType.Multiplier)
     {
         return(axisCalibration.sensitivity);
     }
     else if (axisCalibration.sensitivityType == AxisSensitivityType.Power)
     {
         return(ProcessPowerValue(axisCalibration.sensitivity, 0f, sensitivitySlider.maxValue));
     }
     else
     {
         return(axisCalibration.sensitivity);
     }
 }
示例#7
0
        public void Set(AxisCalibration cal)
        {
            if (!set)
            {
                return;
            }

            _axis = cal;

            limit.Width  = 400 * Math.Abs(_axis.max - _axis.min) / 65535d;
            limit.Margin = new Thickness(10 + (400 * _axis.min / 65535d), 13, 0, 0);

            dead.Width  = 400 * (_axis.deadPos - _axis.deadNeg) / 65535d;
            dead.Margin = new Thickness(10 + 200 - (dead.Width / 2) + ((_axis.deadPos + _axis.deadNeg) / 65535d) * 200, 13, 0, 0);
            Update(_lastValue);
        }
示例#8
0
 public void SetSensitivity(AxisCalibration axisCalibration, float sliderValue)
 {
     if (axisCalibration.sensitivityType == AxisSensitivityType.Multiplier)
     {
         // Enforce a min sensitivity to prevent axis from becoming useless
         axisCalibration.sensitivity = Mathf.Clamp(sliderValue, minSensitivity, Mathf.Infinity);
         if (sliderValue < minSensitivity)
         {
             sensitivitySlider.value = minSensitivity;                               // prevent control from going outside range
         }
     }
     else if (axisCalibration.sensitivityType == AxisSensitivityType.Power)
     {
         axisCalibration.sensitivity = ProcessPowerValue(sliderValue, 0f, sensitivitySlider.maxValue);
     }
     else
     {
         axisCalibration.sensitivity = sliderValue;
     }
 }
示例#9
0
            public void Commit()
            {
                if (axis == null)
                {
                    return;
                }
                AxisCalibration calibration = joystick.calibrationMap.GetAxis(axisIndex);

                if (calibration == null)
                {
                    return;
                }

                // Make sure min/max isn't the same or joystick cannot move
                if (Mathf.Abs(data.max - data.min) < 0.1)
                {
                    return;                                      // too close, joystick would be useless
                }
                calibration.SetData(data);
            }
            internal void LoadCalibration(string calibrationFile)
            {
                if (!File.Exists(calibrationFile))
                {
                    return;
                }
                try
                {
                    for (int i = 0; i < Calibration.Length; i++)
                    {
                        Calibration[i] = new AxisCalibration();
                    }
                    XmlDocument currentXML = new XmlDocument();
                    currentXML.Load(calibrationFile);
                    XmlNodeList documentNodes = currentXML.SelectNodes("openBVE/RailDriverCalibration");
                    if (documentNodes != null && documentNodes.Count != 0)
                    {
                        for (int i = 0; i < documentNodes.Count; i++)
                        {
                            int idx  = -1;
                            int lMin = 0;
                            int lMax = 255;
                            foreach (XmlNode node in documentNodes[i].ChildNodes)
                            {
                                switch (node.Name.ToLowerInvariant())
                                {
                                case "axis":
                                    foreach (XmlNode n in node.ChildNodes)
                                    {
                                        switch (n.Name.ToLowerInvariant())
                                        {
                                        case "index":
                                            if (!NumberFormats.TryParseIntVb6(n.InnerText, out idx))
                                            {
                                                Program.AppendToLogFile(@"Invalid index in RailDriver calibration file");
                                            }
                                            break;

                                        case "minimum":
                                            if (!NumberFormats.TryParseIntVb6(n.InnerText, out lMin))
                                            {
                                                Program.AppendToLogFile(@"Invalid minimum in RailDriver calibration file");
                                            }
                                            break;

                                        case "maximum":
                                            if (!NumberFormats.TryParseIntVb6(n.InnerText, out lMax))
                                            {
                                                Program.AppendToLogFile(@"Invalid minimum in RailDriver calibration file");
                                            }
                                            break;
                                        }
                                    }
                                    lMin = Math.Abs(lMin);
                                    lMax = Math.Abs(lMax);
                                    if (lMin > 255)
                                    {
                                        lMin = 255;
                                    }
                                    else if (lMin < 0)
                                    {
                                        lMin = 0;
                                    }
                                    if (lMax >= 255)
                                    {
                                        lMax = 255;
                                    }
                                    else if (lMax < 0)
                                    {
                                        lMax = 0;
                                    }
                                    if (lMin >= lMax)
                                    {
                                        throw new InvalidDataException(@"Maximum must be non-zero and greater than minimum.");
                                    }
                                    if (idx == -1)
                                    {
                                        throw new InvalidDataException(@"Invalid axis specified.");
                                    }
                                    Calibration[idx].Minimum = lMin;
                                    Calibration[idx].Maximum = lMax;
                                    break;
                                }
                            }
                        }
                    }
                }
                catch
                {
                    for (int i = 0; i < Calibration.Length; i++)
                    {
                        Calibration[i] = new AxisCalibration();
                    }
                    MessageBox.Show(Interface.GetInterfaceString("raildriver_config_error"), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    //Clear the calibration file
                    File.Delete(calibrationFile);
                }
            }
示例#11
0
        public void MapTest()
        {
            var a = AxisCalibration.Map(10, 5, 15, 20, 40);

            Assert.AreEqual(a, 30);
        }