/// <summary>
        /// Execute when quiting this app.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Closed(object sender, EventArgs e)
        {
            try
            {
                if (appReg == null)
                {
                    return;
                }

                // Save UI Properties(Like Button Status).
                appProperties.SaveUISetup();
                if (ApplicationOverride.IsChecked == false)
                {
                    appReg.getOverrideWriter().Execute(inGameAxis, deviceControl, keyFile);
                }
            }
            catch (FileNotFoundException ex)
            {
                Console.WriteLine(ex.Message);

                StreamWriter sw = new StreamWriter(appReg.GetInstallDir() + "\\Error.txt", false, System.Text.Encoding.GetEncoding("shift_jis"));
                sw.Write(ex.Message);
                sw.Close();

                MessageBox.Show("Error Log Saved To " + appReg.GetInstallDir() + "\\Error.txt", "WARNING", MessageBoxButton.OK, MessageBoxImage.Information);

                Close();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Execute when quiting this app.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Closed(object sender, EventArgs e)
        {
            try
            {
                Torrent.status = false;

                if (appReg == null)
                {
                    return;
                }

                // Save UI Properties(Like Button Status).
                appProperties.SaveUISetup();
                if (ApplicationOverride.IsChecked == false)
                {
                    appReg.getOverrideWriter().Execute(inGameAxis, deviceControl, keyFile);
                }
            }
            catch (Exception ex)
            {
                Diagnostics.WriteLogFile(ex);
                Close();
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Make new instance.
        /// </summary>
        public void ImportStockSetup(AppRegInfo appReg, int devcount, int povnum, int joynum)
        {
            Invoke    invokeStatus    = Invoke.UI;
            Behaviour behaviourStatus = Behaviour.Press;

            string deviceSorting = appReg.GetInstallDir() + "/User/Config/DeviceSorting.txt";

            if (Path.GetFileName(deviceSorting) != "DeviceSorting.txt")
            {
                return;
            }
            if (File.Exists(deviceSorting) == false)
            {
                return;
            }
            string[] lines     = File.ReadAllLines(deviceSorting, Encoding.UTF8);
            int      currentID = -1;

            for (int i = 0; i < lines.Length; i++)
            {
                if (lines[i] == GetDeviceSortingLine().Replace("\r\n", ""))
                {
                    currentID = i;
                }
            }
            if (currentID == -1)
            {
                return;
            }
            string keyfile = appReg.GetInstallDir() + "/User/Config/" + appReg.getKeyFileName();

            string[] Klines = File.ReadAllLines(keyfile, Encoding.UTF8);
            foreach (string stBuffer in Klines)
            {
                string[] stArrayData = stBuffer.Split(' ');
                if (stArrayData.Length < 7)
                {
                    continue;
                }
                if (stBuffer.Substring(0, 1) == "#")
                {
                    continue;
                }
                if (stArrayData[3] == "-2" | stArrayData[3] == "-3")
                {
                    if (stArrayData[2] == "-1")
                    {
                        invokeStatus = Invoke.Default;
                    }
                    if (stArrayData[2] == "-2")
                    {
                        invokeStatus = Invoke.Down;
                    }
                    if (stArrayData[2] == "-4")
                    {
                        invokeStatus = Invoke.Up;
                    }
                    if (stArrayData[2] == "8")
                    {
                        invokeStatus = Invoke.UI;
                    }
                    if (stArrayData[3] == "0")
                    {
                        behaviourStatus = Behaviour.Press;
                    }
                    if (stArrayData[3] == "0x42")
                    {
                        behaviourStatus = Behaviour.Release;
                    }
                }
                // Import DX Setup
                if (stArrayData[3] == "-2")
                {
                    for (int i = 0; i < 32; i++)
                    {
                        if (int.Parse(stArrayData[1]) == i + currentID * 32)
                        {
                            dx[i].Assign(stArrayData[0], Pinky.UnShift, behaviourStatus, invokeStatus, 0);
                        }
                        if (int.Parse(stArrayData[1]) == i + currentID * 32 + devcount * 32) // Okay This has to be the problem. I have to read FalconBMS.cfg for
                        {
                            dx[i].Assign(stArrayData[0], Pinky.Shift, behaviourStatus, invokeStatus, 0);
                        }
                    }
                }
                // Import POV Setup
                if (stArrayData[3] == "-3")
                {
                    for (int i = 0; i < 4; i++)
                    {
                        if (int.Parse(stArrayData[1]) != i)
                        {
                            continue;
                        }
                        if (povnum < 3)
                        {
                            if (i == 0 | i == 1)
                            {
                                pov[i].direction[int.Parse(stArrayData[4])].Assign(stArrayData[0], Pinky.UnShift, 0);
                            }
                            if (i == 2 | i == 3)
                            {
                                pov[i - 2].direction[int.Parse(stArrayData[4])].Assign(stArrayData[0], Pinky.Shift, 0);
                            }
                            continue;
                        }
                        pov[i].direction[int.Parse(stArrayData[4])].Assign(stArrayData[0], Pinky.UnShift, 0);
                    }
                }
                // Import Axis Setup
                string filename = appReg.GetInstallDir() + "/User/Config/axismapping.dat";
                if (!File.Exists(filename))
                {
                    return;
                }
                FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
                byte[]     ad = new byte[fs.Length];
                fs.Read(ad, 0, ad.Length);
                fs.Close();

                filename = appReg.GetInstallDir() + "/User/Config/joystick.cal";
                if (!File.Exists(filename))
                {
                    return;
                }
                fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
                byte[] jc = new byte[fs.Length];
                fs.Read(jc, 0, jc.Length);
                fs.Close();

                AxisName[] axisMappingList = appReg.getOverrideWriter().getAxisMappingList();
                AxisName[] joystickCalList = appReg.getOverrideWriter().getJoystickCalList();
                for (int i = 0; i < axisMappingList.Length; i++)
                {
                    for (int ii = 0; ii < devcount; ii++)
                    {
                        if (ad[24 + i * 16] == currentID + 2)
                        {
                            int     axisNum  = ad[24 + i * 16 + 4];
                            AxCurve deadzone = AxCurve.None;
                            if (ad[24 + i * 16 + 8] == 0x64)
                            {
                                deadzone = AxCurve.Small;
                            }
                            if (ad[24 + i * 16 + 8] == 0xF4)
                            {
                                deadzone = AxCurve.Medium;
                            }
                            if (ad[24 + i * 16 + 8] == 0xE8)
                            {
                                deadzone = AxCurve.Large;
                            }
                            AxCurve saturation = AxCurve.None;
                            if (ad[24 + i * 16 + 12] == 0x1C)
                            {
                                saturation = AxCurve.Small;
                            }
                            if (ad[24 + i * 16 + 12] == 0x28)
                            {
                                saturation = AxCurve.Medium;
                            }
                            if (ad[24 + i * 16 + 12] == 0x34)
                            {
                                saturation = AxCurve.Large;
                            }
                            bool invert = false;

                            for (int iii = 0; iii < joystickCalList.Length; iii++)
                            {
                                // read joystick.cal
                                if (axisMappingList[i] != joystickCalList[iii])
                                {
                                    continue;
                                }
                                int invertnum = jc[iii * 28 + 20];
                                if (invertnum == 1)
                                {
                                    invert = true;
                                }
                            }

                            InGameAxAssgn inGameAxAssgn = new InGameAxAssgn(currentID, axisNum, invert, deadzone, saturation);
                            axis[axisNum] = new AxAssgn(axisMappingList[i].ToString(), inGameAxAssgn);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// As the name implies...
        /// </summary>
        protected virtual void SaveJoystickCal(Hashtable inGameAxis, DeviceControl deviceControl)
        {
            string filename    = appReg.GetInstallDir() + "/User/Config/joystick.cal";
            string fbackupname = appReg.GetInstallDir() + "/User/Config/Backup/joystick.cal";

            if (!File.Exists(fbackupname) & File.Exists(filename))
            {
                File.Copy(filename, fbackupname, true);
            }

            if (File.Exists(filename))
            {
                File.SetAttributes(filename, File.GetAttributes(filename) & ~FileAttributes.ReadOnly);
            }

            FileStream fs = new FileStream
                                (filename, FileMode.Create, FileAccess.Write);

            byte[] bs;

            AxisName[] localJoystickCalList = appReg.getOverrideWriter().getJoystickCalList();
            foreach (AxisName nme in localJoystickCalList)
            {
                bs = new byte[]
                {
                    0x00, 0x00, 0x00, 0x00, 0x98, 0x3A, 0x00, 0x00,
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                    0x00, 0x00, 0x00, 0x00
                };
                if (((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber() != -1)
                {
                    bs[12] = 0x01;

                    if (nme == AxisName.Throttle)
                    {
                        if (((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber() >= 0)
                        {
                            double iAB   = deviceControl.joyAssign[((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber()].detentPosition.GetAB();
                            double iIdle = deviceControl.joyAssign[((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber()].detentPosition.GetIDLE();

                            const double MAXIN  = 65536;
                            const double MAXOUT = 14848;

                            iAB   = -iAB * (MAXOUT / MAXIN) + MAXOUT;
                            iIdle = -iIdle * (MAXOUT / MAXIN) + MAXOUT;

                            byte[] ab   = BitConverter.GetBytes((int)iAB);
                            byte[] idle = BitConverter.GetBytes((int)iIdle);

                            bs[1] = ab[1];
                            bs[5] = idle[1];
                        }
                    }
                }
                if (((InGameAxAssgn)inGameAxis[nme.ToString()]).GetInvert())
                {
                    bs[20] = 0x01;
                }
                fs.Write(bs, 0, bs.Length);
            }
            fs.Close();
        }