public Configuration SaveConfiguration(Dictionarys dicts) { var returnConf = new Configuration { Name = Name, FileLocation = FileLocation, DisplayConfigurations = new List<DisplayConfiguration>(), ControllerConfigurations = new List<ControllerConfiguration>(), TMDisplaySettings = new TMDisplaySettings { ColourDeltaByDD = this.ColourDeltaByDD, ShiftIntensity = this.ShiftIntensity, Intensity = this.Intensity, ShiftIntensityType = this.ShiftIntensityType, ShiftIntensityAmount = this.ShiftIntensityAmount, ShowHeaders = this.ShowHeader, HeaderDisplayTime = this.HeaderDisplayTime + 1, QuickInfoDisplayTime = this.QuickInfoDisplayTime + 1, LapDisplayTime = this.LapTimeDisplayTime + 1, DeltaRange = this.DeltaRange + 1, DeltaMessageScreen = this.DeltaMessageScreen, DeltaLightsOnDefault = this.DeltaLightsOnDefault, WarningTextDisplayTime = this.WarningTextDisplayTime + 1, QuickInfoLightsColour = this.QuickInfoLightsColour }, SerialPortSettings = new SerialPortConfiguration { PreferredComPort = this .PreferredComPort, SerialPortSpeed = AdvancedOptions .ParseSerialSpeedString ( this .SerialPortSpeed), UseCustomSerialSpeed = this .UseCustomSerialSpeed }, OtherSettings = new OtherSettings { FuelCalculationLaps = this.FuelCalculationLaps + 2, UseCustomFuelCalculationOptions = this .UseCustomFuelCalculationOptions, UseWeightedFuelCalculations = this .UseWeightedFuelCalculations }, RefreshRates = new RefreshRates { DisplayRefreshRate = AdvancedOptions .ParseRefreshRatesString( this .DisplayRefreshRate), LEDRefreshRate = AdvancedOptions .ParseRefreshRatesString( this.LEDRefreshRate) }, AdvancedSettings = new AdvancedSettings { LogArduinoMessages = this.LogArduinoMessages } }; if(returnConf.TMDisplaySettings.DeltaRange <= 0) { returnConf.TMDisplaySettings.DeltaRange = 1; } if (!UseCustomSerialSpeed) //Calculate and Auto Set Serial Speed { int numberTM1638 = 0; int numberTM1640 = 0; foreach (var unit in DisplayUnitConfigurations) { if (unit.IsTM1640) { numberTM1640++; } else { numberTM1638++; } } returnConf.SerialPortSettings.SerialPortSpeed = AdvancedOptions.CalculateRecommendSerialSpeed( returnConf.RefreshRates.DisplayRefreshRate,returnConf.RefreshRates.LEDRefreshRate, numberTM1638, numberTM1640); } //int controllerCount = 0; foreach (ControllerButtonConfiguration item in ControllerConfigurations) { var temp = new ControllerConfiguration(); for (int y = 0; y < Constants.MaxNumberJoystickButtons; y++) { var butFuncTemp = ButtonFunctionsEnum.None; foreach (var butFunc in dicts.ButtonFunctions) { if (butFunc.Value.Name == item.ButtonFunctions[y]) { butFuncTemp = butFunc.Key; } } temp.ButtonFunctions[y] = butFuncTemp; temp.ButtonOptions[y] = item.ButtonOptions[y]; temp.ButtonOptionsScreens[y] = item.ButtonOptionsScreens[y]; temp.ButtonNumbers[y] = item.ButtonNumbers[y]; temp.DeviceGuid = item.DeviceGuid; temp.Selected = item.Selected; } //controllerCount++; returnConf.ControllerConfigurations.Add(temp); } returnConf.NumberControllers = returnConf.ControllerConfigurations.Count; foreach (DisplayUnitConfiguration displayConf in DisplayUnitConfigurations) { var temp = new DisplayConfiguration(false) { NumScreens = displayConf.NumScreens + 1, Inverted = displayConf.Inverted, IsTM1640 = displayConf.IsTM1640, SwitchLEDs = displayConf.SwitchLEDs, ShowDC = displayConf.ShowDC, DCDisplayTime = displayConf.DCDisplayTime, ShowLap = displayConf.ShowLap, FFBClippingLights = displayConf.LEDsConfigurations.FFBClippingLights, FFBClippingScreen = displayConf.LEDsConfigurations.FFBClippingScreen + 1, PitLights = displayConf.LEDsConfigurations.PitLights, ShiftClumps = displayConf.LEDsConfigurations.ShiftClumps, RevLimiterLights = displayConf.LEDsConfigurations.RevLimiterLights, ShowShiftLights = displayConf.LEDsConfigurations.ShowShiftLights, DeltaLightsShow = displayConf.LEDsConfigurations.DeltaLightsShow, ShowEngineWarnings = displayConf.ShowEngineWarnings }; List<Screen> screenTemp = displayConf.Screens; foreach (Screen screen in screenTemp) { int place = 0; while (place < screen.Variables.Count) { if (screen.Variables[place] == null || screen.Variables[place] == "") { screen.Variables.RemoveAt(place); } else { place++; } } if (screen.Variables.Count == 0) { screen.Variables.Add("Space"); } } temp.Screens = displayConf.Screens; try { temp.WarningType = dicts.WarningTypes[displayConf.WarningType]; } catch { Enum.TryParse(displayConf.WarningType, out temp.WarningType); } try { temp.LapStyle = dicts.LapDisplayStyles[displayConf.LapStyle]; } catch { Enum.TryParse(displayConf.LapStyle, out temp.LapStyle); } try { temp.PitLimiterStyle = dicts.PitFlashStyles[displayConf.LEDsConfigurations.PitLimiterStyle]; } catch { Enum.TryParse(displayConf.LEDsConfigurations.PitLimiterStyle, out temp.PitLimiterStyle); } try { temp.PitLimiterSpeed = dicts.PitFlashSpeeds[displayConf.LEDsConfigurations.PitLimiterSpeed]; } catch { Enum.TryParse(displayConf.LEDsConfigurations.PitLimiterSpeed, out temp.PitLimiterSpeed); } try { temp.ShiftLightStyle = dicts.ShiftStyles[displayConf.LEDsConfigurations.ShiftLightStyle]; } catch { Enum.TryParse(displayConf.LEDsConfigurations.ShiftLightStyle, out temp.ShiftLightStyle); } try { temp.RevLimiterStyle = dicts.RevFlashStyles[displayConf.LEDsConfigurations.RevLimiterStyle]; } catch { Enum.TryParse(displayConf.LEDsConfigurations.RevLimiterStyle, out temp.RevLimiterStyle); } temp.MatchCarShiftStyle = displayConf.LEDsConfigurations.MatchCarShiftLights; temp.MatchRedShift = displayConf.LEDsConfigurations.MatchRedShift; try { temp.MatchCarShiftStyleOption = dicts.MatchCarShiftOptions[displayConf.LEDsConfigurations.MatchCarShiftOptions]; } catch { Enum.TryParse(displayConf.LEDsConfigurations.MatchCarShiftOptions, out temp.MatchCarShiftStyleOption); } temp.DeltaLightsShow = displayConf.LEDsConfigurations.DeltaLightsShow; try { temp.DeltaLightsPosition = dicts.DeltaLightsPositionOptions[displayConf.LEDsConfigurations.DeltaLightsPosition]; } catch { Enum.TryParse(displayConf.LEDsConfigurations.DeltaLightsPosition, out temp.DeltaLightsPosition); } for (int y = 0; y < Constants.NumberButtonsOnTm1638; y++) { var butFuncTemp = ButtonFunctionsEnum.None; foreach (var butFunc in dicts.ButtonFunctions) { if (butFunc.Value.Name == displayConf.ButtonConfigurations.ButtonFunctions[y]) { butFuncTemp = butFunc.Key; } } temp.ButtonFunctions[y] = butFuncTemp; temp.ButtonOptions[y] = displayConf.ButtonConfigurations.ButtonOptions[y]; temp.ButtonOptionsScreens[y] = displayConf.ButtonConfigurations.ButtonOptionsScreens[y]; } returnConf.DisplayConfigurations.Add(temp); } return returnConf; }
public void LoadConfiguration(Configuration configuration, Dictionarys dicts) { Name = configuration.Name; FileLocation = configuration.FileLocation; Intensity = configuration.TMDisplaySettings.Intensity; ShiftIntensity = configuration.TMDisplaySettings.ShiftIntensity; ShiftIntensityType = configuration.TMDisplaySettings.ShiftIntensityType; ShiftIntensityAmount = configuration.TMDisplaySettings.ShiftIntensityAmount; ShowHeader = configuration.TMDisplaySettings.ShowHeaders; HeaderDisplayTime = configuration.TMDisplaySettings.HeaderDisplayTime - 1; QuickInfoDisplayTime = configuration.TMDisplaySettings.QuickInfoDisplayTime - 1; LapTimeDisplayTime = configuration.TMDisplaySettings.LapDisplayTime - 1; PreferredComPort = configuration.SerialPortSettings.PreferredComPort; LogArduinoMessages = configuration.AdvancedSettings.LogArduinoMessages; SerialPortSpeed = configuration.SerialPortSettings.SerialPortSpeed.ToString(CultureInfo.InvariantCulture); DisplayRefreshRate = configuration.RefreshRates.DisplayRefreshRate.ToString(CultureInfo.InvariantCulture); LEDRefreshRate = configuration.RefreshRates.LEDRefreshRate.ToString(CultureInfo.InvariantCulture); UseCustomSerialSpeed = configuration.SerialPortSettings.UseCustomSerialSpeed; ColourDeltaByDD = configuration.TMDisplaySettings.ColourDeltaByDD; DeltaLightsOnDefault = configuration.TMDisplaySettings.DeltaLightsOnDefault; DeltaMessageScreen = configuration.TMDisplaySettings.DeltaMessageScreen; DeltaRange = configuration.TMDisplaySettings.DeltaRange - 1; UseCustomFuelCalculationOptions = configuration.OtherSettings.UseCustomFuelCalculationOptions; FuelCalculationLaps = configuration.OtherSettings.FuelCalculationLaps - 2; UseWeightedFuelCalculations = configuration.OtherSettings.UseWeightedFuelCalculations; WarningTextDisplayTime = configuration.TMDisplaySettings.WarningTextDisplayTime - 1; QuickInfoLightsColour = configuration.TMDisplaySettings.QuickInfoLightsColour; ArduinoIOConfiguration = new ArduinoIO(); FergoTechConfiguration = new FergoTechComponents(); ControllerConfigurations = new List<ControllerButtonConfiguration>(); foreach (ControllerConfiguration item in configuration.ControllerConfigurations) { var temp = new ControllerButtonConfiguration { DeviceGuid = item.DeviceGuid, ButtonNumbers = item.ButtonNumbers, ButtonOptions = item.ButtonOptions, ButtonOptionsScreens = item.ButtonOptionsScreens, Selected = item.Selected }; for (int k = 0; k < Constants.MaxNumberJoystickButtons; k++) { temp.ButtonFunctions[k] = dicts.ButtonFunctions[item.ButtonFunctions[k]].Name; } ControllerConfigurations.Add(temp); } NumberControllers = configuration.ControllerConfigurations.Count; DisplayUnitConfigurations = new List<DisplayUnitConfiguration>(); int unitCount = 0; foreach (DisplayConfiguration displayConf in configuration.DisplayConfigurations) { unitCount++; var temp = new DisplayUnitConfiguration { NumScreens = displayConf.NumScreens - 1, Inverted = displayConf.Inverted, IsTM1640 = displayConf.IsTM1640, SwitchLEDs = displayConf.SwitchLEDs, ShowDC = displayConf.ShowDC, DCDisplayTime = displayConf.DCDisplayTime, ShowLap = displayConf.ShowLap, ButtonConfigurations = new ButtonConfiguration(), UnitNumber = unitCount, ShowEngineWarnings = displayConf.ShowEngineWarnings }; DisplayConfiguration conf = displayConf; foreach (var lstyle in dicts.LapDisplayStyles.Where(lstyle => conf.LapStyle == lstyle.Value)) { temp.LapStyle = lstyle.Key; } foreach (var wtype in dicts.WarningTypes.Where(wtype => conf.WarningType == wtype.Value)) { temp.WarningType = wtype.Key; } for (int n = 0; n < Constants.NumberButtonsOnTm1638; n++) { temp.ButtonConfigurations.ButtonFunctions[n] = dicts.ButtonFunctions[displayConf.ButtonFunctions[n]].Name; temp.ButtonConfigurations.ButtonOptions[n] = displayConf.ButtonOptions[n]; temp.ButtonConfigurations.ButtonOptionsScreens[n] = displayConf.ButtonOptionsScreens[n]; } temp.LEDsConfigurations = new LEDsConfiguration { FFBClippingLights = displayConf.FFBClippingLights, FFBClippingScreen = displayConf.FFBClippingScreen - 1, PitLights = displayConf.PitLights, RevLimiterLights = displayConf.RevLimiterLights, ShowShiftLights = displayConf.ShowShiftLights, ShiftClumps = displayConf.ShiftClumps, MatchCarShiftLights = displayConf.MatchCarShiftStyle, MatchRedShift = displayConf.MatchRedShift, DeltaLightsShow = displayConf.DeltaLightsShow, MatchCarShiftOptions = "", }; foreach (var opt in dicts.MatchCarShiftOptions) { if (opt.Value == displayConf.MatchCarShiftStyleOption) { temp.LEDsConfigurations.MatchCarShiftOptions = opt.Key; } } temp.LEDsConfigurations.DeltaLightsPosition = ""; foreach (var opt in dicts.DeltaLightsPositionOptions) { if (opt.Value == displayConf.DeltaLightsPosition) { temp.LEDsConfigurations.DeltaLightsPosition = opt.Key; } } foreach (var plspeed in dicts.PitFlashSpeeds) { if (plspeed.Value == displayConf.PitLimiterSpeed) { temp.LEDsConfigurations.PitLimiterSpeed = plspeed.Key; } } foreach (var plstyle in dicts.PitFlashStyles) { if (plstyle.Value == displayConf.PitLimiterStyle) { temp.LEDsConfigurations.PitLimiterStyle = plstyle.Key; } } foreach (var revlstyle in dicts.RevFlashStyles) { if (revlstyle.Value == displayConf.RevLimiterStyle) { temp.LEDsConfigurations.RevLimiterStyle = revlstyle.Key; } } foreach (var shiftstyle in dicts.ShiftStyles) { if (shiftstyle.Value == displayConf.ShiftLightStyle) { temp.LEDsConfigurations.ShiftLightStyle = shiftstyle.Key; } } temp.Screens = displayConf.Screens; DisplayUnitConfigurations.Add(temp); } }
private void CreateNewConfiguration() { var temp = new Configuration(true) { Name = "Unnamed" + this.rand.Next(1, 100).ToString(CultureInfo.InvariantCulture) }; this.hostApp.DisplayMngr.Configurations.Add(temp); CurrentConfigurationCBox.Items.Add(temp.Name); CurrentConfigurationCBox.SelectedIndex = CurrentConfigurationCBox.Items.Count - 1; }
/// <summary> /// Load configuration file from disk /// </summary> /// <param name="filename">File path</param> /// <param name="confOut">New Loaded Configuration</param> /// <returns>Bool. True if good, False if failed</returns> public bool LoadConfFile(string filename, out Configuration confOut) { Configuration configurationLoaded; if (Configuration.LoadConfigurationFromFile(filename, out configurationLoaded)) { confOut = configurationLoaded; return true; } //Not True below... confOut = configurationLoaded; return false; }
public static bool LoadConfigurationFromFile(string fileLocation, out Configuration loaded) { var newConf = new Configuration { FileLocation = fileLocation }; bool fileReadOk = true; int currentDisplayUnit = 0; int currentController = 0; int currentButton = 0; int currentScreen = 0; try { using (var sr = new StreamReader(fileLocation)) { bool fileEnded = false; while (sr.EndOfStream == false && !fileEnded) { string line = sr.ReadLine(); // ReSharper disable StringIndexOfIsCultureSpecific.1 if (line == null) continue; int commaLoc = line.IndexOf(","); // ReSharper restore StringIndexOfIsCultureSpecific.1 if (commaLoc <= 0) continue; string parameter = line.Substring(0, commaLoc); string value = line.Substring(commaLoc + 1); ButtonFunctionsEnum temp; switch (parameter) { //ButtonOptionsScreens case "ConfName": newConf.Name = value; break; case "ComPort": int.TryParse(value, out newConf.SerialPortSettings.PreferredComPort); break; case "SerialSpeed": int.TryParse(value, out newConf.SerialPortSettings.SerialPortSpeed); break; case "LogArduinoMessages": Boolean.TryParse(value, out newConf.AdvancedSettings.LogArduinoMessages); break; case "UseCustomSerialSpeed": Boolean.TryParse(value, out newConf.SerialPortSettings.UseCustomSerialSpeed); break; case "DisplayRefreshRate": int.TryParse(value, out newConf.RefreshRates.DisplayRefreshRate); break; case "LEDRefreshRate": int.TryParse(value, out newConf.RefreshRates.LEDRefreshRate); break; case "UseCustomFuelCalculations": Boolean.TryParse(value, out newConf.OtherSettings.UseCustomFuelCalculationOptions); break; case "UseWeightedFuelCalculation": Boolean.TryParse(value, out newConf.OtherSettings.UseWeightedFuelCalculations); break; case "CustomFuelLaps": int.TryParse(value, out newConf.OtherSettings.FuelCalculationLaps); break; case "ButtonFunction1": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[0] = temp; } break; case "ButtonFunction2": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[1] = temp; } break; case "ButtonFunction3": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[2] = temp; } break; case "ButtonFunction4": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[3] = temp; } break; case "ButtonFunction5": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[4] = temp; } break; case "ButtonFunction6": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[5] = temp; } break; case "ButtonFunction7": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[6] = temp; } break; case "ButtonFunction8": if (Enum.TryParse(value, out temp)) { newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[7] = temp; } break; case "ButtonOption1": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[0] = value; break; case "ButtonOption2": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[1] = value; break; case "ButtonOption3": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[2] = value; break; case "ButtonOption4": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[3] = value; break; case "ButtonOption5": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[4] = value; break; case "ButtonOption6": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[5] = value; break; case "ButtonOption7": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[6] = value; break; case "ButtonOption8": newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[7] = value; break; /////// case "ButtonOptionScreens1": int buttonOptionScreenInt1; int.TryParse(value, out buttonOptionScreenInt1); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[0] = buttonOptionScreenInt1; break; case "ButtonOptionScreens2": int buttonOptionScreenInt2; int.TryParse(value, out buttonOptionScreenInt2); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[1] = buttonOptionScreenInt2; break; case "ButtonOptionScreens3": int buttonOptionScreenInt3; int.TryParse(value, out buttonOptionScreenInt3); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[2] = buttonOptionScreenInt3; break; case "ButtonOptionScreens4": int buttonOptionScreenInt4; int.TryParse(value, out buttonOptionScreenInt4); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[3] = buttonOptionScreenInt4; break; case "ButtonOptionScreens5": int buttonOptionScreenInt5; int.TryParse(value, out buttonOptionScreenInt5); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[4] = buttonOptionScreenInt5; break; case "ButtonOptionScreens6": int buttonOptionScreenInt6; int.TryParse(value, out buttonOptionScreenInt6); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[5] = buttonOptionScreenInt6; break; case "ButtonOptionScreens7": int buttonOptionScreenInt7; int.TryParse(value, out buttonOptionScreenInt7); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[6] = buttonOptionScreenInt7; break; case "ButtonOptionScreens8": int buttonOptionScreenInt8; int.TryParse(value, out buttonOptionScreenInt8); newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[7] = buttonOptionScreenInt8; break; case "FFBClipLights": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].FFBClippingLights); break; case "FFBClipScreen": Int32.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].FFBClippingScreen); break; case "HeaderDisplayTime": Int32.TryParse(value, out newConf.TMDisplaySettings.HeaderDisplayTime); break; case "LapDisplayTime": Int32.TryParse(value, out newConf.TMDisplaySettings.LapDisplayTime); break; case "ShowEngineWarnings": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowEngineWarnings); break; case "WarningType": Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].WarningType); break; case "LapStyle": Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].LapStyle); break; case "PitLights": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].PitLights); break; case "ShiftClumps": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShiftClumps); break; case "PitLimiterSpeed": Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].PitLimiterSpeed); break; case "PitLimiterStyle": Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].PitLimiterStyle); break; case "QuickInfoDisplayTime": Int32.TryParse(value, out newConf.TMDisplaySettings.QuickInfoDisplayTime); break; case "RevLimiterLights": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].RevLimiterLights); break; case "RevLimiterStyle": Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].RevLimiterStyle); break; case "ShiftLightStyle": Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShiftLightStyle); break; case "MatchCarShiftStyle": Boolean.TryParse( value, out newConf.DisplayConfigurations[currentDisplayUnit].MatchCarShiftStyle); break; case "MatchCarShiftConfiguration": Enum.TryParse( value, out newConf.DisplayConfigurations[currentDisplayUnit].MatchCarShiftStyleOption); break; case "MatchRedShift": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].MatchRedShift); break; case "ShowHeaders": Boolean.TryParse(value, out newConf.TMDisplaySettings.ShowHeaders); break; case "ColourDeltaByDD": Boolean.TryParse(value, out newConf.TMDisplaySettings.ColourDeltaByDD); break; case "DeltaLightsOnDefault": Boolean.TryParse(value, out newConf.TMDisplaySettings.DeltaLightsOnDefault); break; case "DeltamessageScreen": Int32.TryParse(value, out newConf.TMDisplaySettings.DeltaMessageScreen); break; case "DeltaRange": Int32.TryParse(value, out newConf.TMDisplaySettings.DeltaRange); break; case "ShowLap": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowLap); break; case "Inverted": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].Inverted); break; case "TM1640": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].IsTM1640); break; case "DeltaLightsPosition": Enum.TryParse( value, out newConf.DisplayConfigurations[currentDisplayUnit].DeltaLightsPosition); break; case "DeltaLightsShow": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].DeltaLightsShow); break; case "SwitchLEDs": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].SwitchLEDs); break; case "ShowDC": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowDC); break; case "DCDisplayTime": Int32.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].DCDisplayTime); break; case "ShowShiftLights": Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowShiftLights); break; case "NumScreens": Int32.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].NumScreens); break; case "Intensity": Int32.TryParse(value, out newConf.TMDisplaySettings.Intensity); break; case "ShiftIntensity": Boolean.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensity); break; case "ShiftIntensityType": Boolean.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensityType); break; case "WarningTextDisplayTime": Int32.TryParse(value, out newConf.TMDisplaySettings.WarningTextDisplayTime); break; case "QuickInfoLightsColour": Boolean.TryParse(value, out newConf.TMDisplaySettings.QuickInfoLightsColour); break; case "ShiftIntensityAmount": Int32.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensityAmount); break; case "ScreenNumber": Int32.TryParse(value, out currentScreen); if (newConf.DisplayConfigurations[currentDisplayUnit].Screens.Count <= currentScreen) { var tempScreen = new Screen(); tempScreen.Variables.Clear(); newConf.DisplayConfigurations[currentDisplayUnit].Screens.Add(tempScreen); } break; case "DisplayUnit": Int32.TryParse(value, out currentDisplayUnit); if (newConf.DisplayConfigurations.Count <= currentDisplayUnit) { var unitTemp = new DisplayConfiguration(true); unitTemp.Screens.Clear(); newConf.DisplayConfigurations.Add(unitTemp); } currentScreen = 0; break; case "UseCustomHeader": bool tempUch; Boolean.TryParse(value, out tempUch); newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].UseCustomHeader = tempUch; break; case "CustomHeader": newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].CustomHeader = value; break; case "Variable": newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].Variables.Add( value); break; case "ControllerNumber": currentButton = -1; Int32.TryParse(value, out currentController); if (newConf.ControllerConfigurations.Count <= currentController) { var controllerTemp = new ControllerConfiguration(); newConf.ControllerConfigurations.Add(controllerTemp); } break; case "DeviceGuid": Guid.TryParse(value, out newConf.ControllerConfigurations[currentController].DeviceGuid); break; case "ConButtonFunction": currentButton++; if (Enum.TryParse(value, out temp)) { newConf.ControllerConfigurations[currentController].ButtonFunctions[currentButton] = temp; } break; case "ConButtonOption": newConf.ControllerConfigurations[currentController].ButtonOptions[currentButton] = value; break; case "ConButtonOptionScreens": int conButtonOptionScreenInt1; int.TryParse(value, out conButtonOptionScreenInt1); newConf.ControllerConfigurations[currentController].ButtonOptionsScreens[currentButton] = conButtonOptionScreenInt1; break; case "ConButtonNumber": int conButtonNumberInt1; int.TryParse(value, out conButtonNumberInt1); newConf.ControllerConfigurations[currentController].ButtonNumbers[currentButton] = conButtonNumberInt1; break; case "ContSelected": Boolean.TryParse(value, out newConf.ControllerConfigurations[currentController].Selected); break; case "END": fileEnded = true; break; } } } } catch (Exception e) { MessageBox.Show(String.Format("The file could not be read: {0}", e.Message), "File Read Error"); fileReadOk = false; } loaded = fileReadOk ? newConf : null; return fileReadOk; }
// Add Error checking for BOOL Return!!! public static bool SaveConfigurationToFile(string fileLocation, Configuration conf) { var sb = new StringBuilder(""); sb.AppendLine("iRduino Configuration File"); sb.AppendLine(String.Format("File saved on: {0} {1}", DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString())); sb.AppendLine("[ Configuration Options ]"); sb.AppendLine(String.Format("{0},{1}", "ConfName", conf.Name)); sb.AppendLine(String.Format("{0},{1}", "ComPort", conf.SerialPortSettings.PreferredComPort)); sb.AppendLine(String.Format("{0},{1}", "SerialSpeed", conf.SerialPortSettings.SerialPortSpeed)); sb.AppendLine(String.Format("{0},{1}", "UseCustomSerialSpeed", conf.SerialPortSettings.UseCustomSerialSpeed)); sb.AppendLine(String.Format("{0},{1}", "LogArduinoMessages", conf.AdvancedSettings.LogArduinoMessages)); sb.AppendLine(String.Format("{0},{1}", "DisplayRefreshRate", conf.RefreshRates.DisplayRefreshRate)); sb.AppendLine(String.Format("{0},{1}", "LEDRefreshRate", conf.RefreshRates.LEDRefreshRate)); sb.AppendLine(String.Format("{0},{1}", "UseCustomFuelCalculations", conf.OtherSettings.UseCustomFuelCalculationOptions)); sb.AppendLine(String.Format("{0},{1}", "UseWeightedFuelCalculation", conf.OtherSettings.UseWeightedFuelCalculations)); sb.AppendLine(String.Format("{0},{1}", "CustomFuelLaps", conf.OtherSettings.FuelCalculationLaps)); sb.AppendLine("[ Common Display Options ]"); sb.AppendLine(String.Format("{0},{1}", "HeaderDisplayTime", conf.TMDisplaySettings.HeaderDisplayTime.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "LapDisplayTime", conf.TMDisplaySettings.LapDisplayTime.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "QuickInfoDisplayTime", conf.TMDisplaySettings.QuickInfoDisplayTime.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "ShowHeaders", conf.TMDisplaySettings.ShowHeaders)); sb.AppendLine(String.Format("{0},{1}", "Intensity", conf.TMDisplaySettings.Intensity.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "ShiftIntensity", conf.TMDisplaySettings.ShiftIntensity.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "ShiftIntensityType", conf.TMDisplaySettings.ShiftIntensityType.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "ShiftIntensityAmount", conf.TMDisplaySettings.ShiftIntensityAmount.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "ColourDeltaByDD", conf.TMDisplaySettings.ColourDeltaByDD.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "DeltaLightsOnDefault", conf.TMDisplaySettings.DeltaLightsOnDefault.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "DeltamessageScreen", conf.TMDisplaySettings.DeltaMessageScreen.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "DeltaRange", conf.TMDisplaySettings.DeltaRange.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "QuickInfoLightsColour", conf.TMDisplaySettings.QuickInfoLightsColour.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "WarningTextDisplayTime", conf.TMDisplaySettings.WarningTextDisplayTime.ToString( CultureInfo.InvariantCulture))); sb.AppendLine("[ TM Display Units ]"); //Start looping display units for (int unit = 0; unit < conf.DisplayConfigurations.Count; unit++) { //displayUnitString sb.AppendLine(String.Format("{0},{1}", "DisplayUnit", unit)); sb.AppendLine(" [ Display Unit Button Functions ]"); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction1", conf.DisplayConfigurations[unit].ButtonFunctions[0])); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction2", conf.DisplayConfigurations[unit].ButtonFunctions[1])); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction3", conf.DisplayConfigurations[unit].ButtonFunctions[2])); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction4", conf.DisplayConfigurations[unit].ButtonFunctions[3])); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction5", conf.DisplayConfigurations[unit].ButtonFunctions[4])); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction6", conf.DisplayConfigurations[unit].ButtonFunctions[5])); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction7", conf.DisplayConfigurations[unit].ButtonFunctions[6])); sb.AppendLine(String.Format("{0},{1}", "ButtonFunction8", conf.DisplayConfigurations[unit].ButtonFunctions[7])); sb.AppendLine(" [ Display Unit Button Options ]"); sb.AppendLine(String.Format("{0},{1}", "ButtonOption1", conf.DisplayConfigurations[unit].ButtonOptions[0])); sb.AppendLine(String.Format("{0},{1}", "ButtonOption2", conf.DisplayConfigurations[unit].ButtonOptions[1])); sb.AppendLine(String.Format("{0},{1}", "ButtonOption3", conf.DisplayConfigurations[unit].ButtonOptions[2])); sb.AppendLine(String.Format("{0},{1}", "ButtonOption4", conf.DisplayConfigurations[unit].ButtonOptions[3])); sb.AppendLine(String.Format("{0},{1}", "ButtonOption5", conf.DisplayConfigurations[unit].ButtonOptions[4])); sb.AppendLine(String.Format("{0},{1}", "ButtonOption6", conf.DisplayConfigurations[unit].ButtonOptions[5])); sb.AppendLine(String.Format("{0},{1}", "ButtonOption7", conf.DisplayConfigurations[unit].ButtonOptions[6])); sb.AppendLine(String.Format("{0},{1}", "ButtonOption8", conf.DisplayConfigurations[unit].ButtonOptions[7])); sb.AppendLine(" [ Display Unit Button Screens ]"); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens1", conf.DisplayConfigurations[unit].ButtonOptionsScreens[0])); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens2", conf.DisplayConfigurations[unit].ButtonOptionsScreens[1])); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens3", conf.DisplayConfigurations[unit].ButtonOptionsScreens[2])); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens4", conf.DisplayConfigurations[unit].ButtonOptionsScreens[3])); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens5", conf.DisplayConfigurations[unit].ButtonOptionsScreens[4])); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens6", conf.DisplayConfigurations[unit].ButtonOptionsScreens[5])); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens7", conf.DisplayConfigurations[unit].ButtonOptionsScreens[6])); sb.AppendLine(String.Format("{0},{1}", "ButtonOptionScreens8", conf.DisplayConfigurations[unit].ButtonOptionsScreens[7])); sb.AppendLine(" [ Display Unit Configuration ]"); sb.AppendLine(String.Format("{0},{1}", "FFBClipLights", conf.DisplayConfigurations[unit].FFBClippingLights)); sb.AppendLine(String.Format("{0},{1}", "FFBClipScreen", conf.DisplayConfigurations[unit].FFBClippingScreen.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "Inverted", conf.DisplayConfigurations[unit].Inverted)); sb.AppendLine(String.Format("{0},{1}", "TM1640", conf.DisplayConfigurations[unit].IsTM1640)); sb.AppendLine(String.Format("{0},{1}", "SwitchLEDs", conf.DisplayConfigurations[unit].SwitchLEDs)); sb.AppendLine(String.Format("{0},{1}", "ShowDC", conf.DisplayConfigurations[unit].ShowDC)); sb.AppendLine(String.Format("{0},{1}", "DCDisplayTime", conf.DisplayConfigurations[unit].DCDisplayTime.ToString( CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "LapStyle", conf.DisplayConfigurations[unit].LapStyle)); sb.AppendLine(String.Format("{0},{1}", "PitLights", conf.DisplayConfigurations[unit].PitLights)); sb.AppendLine(String.Format("{0},{1}", "PitLimiterSpeed", conf.DisplayConfigurations[unit].PitLimiterSpeed)); sb.AppendLine(String.Format("{0},{1}", "PitLimiterStyle", conf.DisplayConfigurations[unit].PitLimiterStyle)); sb.AppendLine(String.Format("{0},{1}", "RevLimiterLights", conf.DisplayConfigurations[unit].RevLimiterLights)); sb.AppendLine(String.Format("{0},{1}", "RevLimiterStyle", conf.DisplayConfigurations[unit].RevLimiterStyle)); sb.AppendLine(String.Format("{0},{1}", "ShiftLightStyle", conf.DisplayConfigurations[unit].ShiftLightStyle)); sb.AppendLine(String.Format("{0},{1}", "MatchCarShiftStyle", conf.DisplayConfigurations[unit].MatchCarShiftStyle)); sb.AppendLine(String.Format("{0},{1}", "MatchCarShiftConfiguration", conf.DisplayConfigurations[unit].MatchCarShiftStyleOption)); sb.AppendLine(String.Format("{0},{1}", "MatchRedShift", conf.DisplayConfigurations[unit].MatchRedShift)); sb.AppendLine(String.Format("{0},{1}", "ShowLap", conf.DisplayConfigurations[unit].ShowLap)); sb.AppendLine(String.Format("{0},{1}", "ShowShiftLights", conf.DisplayConfigurations[unit].ShowShiftLights)); sb.AppendLine(String.Format("{0},{1}", "ShiftClumps", conf.DisplayConfigurations[unit].ShiftClumps)); sb.AppendLine(String.Format("{0},{1}", "DeltaLightsShow", conf.DisplayConfigurations[unit].DeltaLightsShow)); sb.AppendLine(String.Format("{0},{1}", "DeltaLightsPosition", conf.DisplayConfigurations[unit].DeltaLightsPosition)); sb.AppendLine(String.Format("{0},{1}", "WarningType", conf.DisplayConfigurations[unit].WarningType)); sb.AppendLine(String.Format("{0},{1}", "ShowEngineWarnings", conf.DisplayConfigurations[unit].ShowEngineWarnings)); sb.AppendLine(" [ Display Unit Screens ]"); sb.AppendLine(String.Format("{0},{1}", "NumScreens", conf.DisplayConfigurations[unit].NumScreens.ToString( CultureInfo.InvariantCulture))); for (int i = 0; i < conf.DisplayConfigurations[unit].NumScreens; i++) { sb.AppendLine(String.Format("{0},{1}", "ScreenNumber", i.ToString(CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "UseCustomHeader", conf.DisplayConfigurations[unit].Screens[i].UseCustomHeader)); sb.AppendLine(String.Format("{0},{1}", "CustomHeader", conf.DisplayConfigurations[unit].Screens[i].CustomHeader)); foreach (string dv in conf.DisplayConfigurations[unit].Screens[i].Variables) { sb.AppendLine(String.Format("{0},{1}", "Variable", dv)); } } } sb.AppendLine("[ Controller Configuration ]"); for (int c = 0; c < conf.ControllerConfigurations.Count; c++) { sb.AppendLine(String.Format("{0},{1}", "ControllerNumber", c.ToString(CultureInfo.InvariantCulture))); sb.AppendLine(String.Format("{0},{1}", "DeviceGuid", conf.ControllerConfigurations[c].DeviceGuid)); sb.AppendLine(String.Format("{0},{1}", "ContSelected", conf.ControllerConfigurations[c].Selected)); for (int t = 1; t <= Constants.MaxNumberJoystickButtons; t++) { sb.AppendLine(String.Format("{0},{1}", "ConButtonFunction", conf.ControllerConfigurations[c].ButtonFunctions[t - 1])); sb.AppendLine(String.Format("{0},{1}", "ConButtonOption", conf.ControllerConfigurations[c].ButtonOptions[t - 1])); sb.AppendLine(String.Format("{0},{1}", "ConButtonOptionScreens", conf.ControllerConfigurations[c].ButtonOptionsScreens[t - 1])); sb.AppendLine(String.Format("{0},{1}", "ConButtonNumber", conf.ControllerConfigurations[c].ButtonNumbers[t - 1])); } } sb.AppendLine(String.Format("{0},{1}", "END", "END")); sb.AppendLine("[ END ]"); using (var outfile = new StreamWriter(fileLocation)) { outfile.Write(sb.ToString()); } return true; }