/// <summary>Loads a ParameterDatabase from checkpoint if "-params" is in the command-line arguments. </summary> public static IParameterDatabase LoadParameterDatabase(string paramsFileName) { if (string.IsNullOrEmpty(paramsFileName)) { Output.InitialError("The parameter file name is null or empty.", false); Environment.Exit(1); // This was originally part of the InitialError call in ECJ. But we make Evolve responsible. } if (!File.Exists(paramsFileName)) { Output.InitialError($"The specified parameter file does not exist: {paramsFileName}", false); Environment.Exit(1); // This was originally part of the InitialError call in ECJ. But we make Evolve responsible. } IParameterDatabase parameters = null; try { if (!string.IsNullOrEmpty(paramsFileName)) { parameters = new ParameterDatabase(new FileInfo(paramsFileName)); } } catch (Exception e) { Output.InitialError($"Error reading the parameter file \"{paramsFileName}\": {e.Message}", false); Environment.Exit(1); // This was originally part of the InitialError call in ECJ. But we make Evolve responsible. } if (parameters == null) { Output.InitialError("No parameter file was specified.", false); Environment.Exit(1); // This was originally part of the InitialError call in ECJ. But we make Evolve responsible. } return(parameters); }
/// <summary> /// Initialize the logger /// </summary> private void InitializeLogger(Stream stream) { Trace.WriteLine("InitializeLogger"); if (stream == null) { throw new ArgumentNullException("stream"); } string configurationDirectory = Path.Combine( Environment.CurrentDirectory, "Configuration"); SsmBasicLogger localLogger = SsmBasicLogger.GetInstance(configurationDirectory, stream); localLogger.LogEntry += this.OnLogEntry; localLogger.LogError += this.OnLogError; Trace.WriteLine("Connecting to ECU"); IAsyncResult asyncResult = localLogger.BeginConnect(null, null); asyncResult.AsyncWaitHandle.WaitOne(); ParameterSource source = localLogger.EndConnect(asyncResult); this.database = ParameterDatabase.GetInstance(); this.database.Add(source); Trace.WriteLine("Connected to ECU"); this.logger = localLogger; }
public void LoggerAddressesDuplicates() { this.logger = SsmLogger.GetInstance(Environment.CurrentDirectory, MockEcuStream.PortName); IAsyncResult result = logger.BeginConnect(null, null); result.AsyncWaitHandle.WaitOne(); ParameterSource source = logger.EndConnect(result); ParameterDatabase database = ParameterDatabase.GetInstance(); database.Add(source); LogProfile profile = LogProfile.CreateInstance(); Parameter parameter; database.TryGetParameterById("P8", out parameter); profile.Add(parameter, parameter.Conversions[0]); database.TryGetParameterById("P201", out parameter); profile.Add(parameter, parameter.Conversions[0]); database.TryGetParameterById("P202", out parameter); profile.Add(parameter, parameter.Conversions[0]); database.TryGetParameterById("P7", out parameter); profile.Add(parameter, parameter.Conversions[0]); this.logger.SetProfile(profile, database); List <int> addresses = this.logger.Addresses; Assert.AreEqual(5, addresses.Count); int[] expected = new int[] { 14, 15, 13, 32, 35 }; Utility.CompareArrays("Address arrays", expected, addresses.ToArray()); }
public void GetPropertyCallDoesNotAffectAccessedOrGottenStatus() { var pd = new ParameterDatabase(); // Nothing in the database yet Assert.AreEqual(pd.Count, 0); var key = "Hi there"; var val = "Whatever"; // Set single parameter var p1 = new Parameter(key); pd.SetParameter(p1, val); Assert.AreEqual(pd.Count, 1); // Neither Accessed nor Gotten Assert.IsFalse(pd.Accessed.ContainsKey(key)); Assert.IsFalse(pd.Gotten.ContainsKey(key)); var propValue = pd.GetProperty(key); // Neither Accessed nor Gotten Assert.IsFalse(pd.Accessed.ContainsKey(key)); Assert.IsFalse(pd.Gotten.ContainsKey(key)); }
public void OneLayerAdHocParametersTest() { var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); // Add some miscellaneous parameters, some valid, some not pd.SetParameter(new Parameter("Hi there"), "Whatever"); pd.SetParameter(new Parameter(new[] { "1", "2", "3" }), " Whatever "); // extra whitespace is trimmed pd.SetParameter(new Parameter(new[] { "a", "b", "c" }).Pop().Push("d"), "Whatever"); // This becomes a.b.d Assert.AreEqual(pd.Count, 3); foreach (var k in pd.Keys) { Assert.AreEqual(pd.GetProperty(k.ToString()), "Whatever"); context.WriteLine("{0} = {1}", k, pd[k]); } context.WriteLine(""); context.WriteLine("\n\n PRINTING ALL PARAMETERS \n\n"); using (var memStream = new MemoryStream()) { var temp_writer = new StreamWriter(memStream, Encoding.Default) { AutoFlush = true }; // let the database write to our stream pd.List(temp_writer, false); // No shadowed parameters here memStream.Position = 0; // now write those out for diagnostics context.WriteLine(new StreamReader(memStream).ReadToEnd()); } }
/// <summary> /// Show the list of parameters available for logging /// </summary> /// <param name="database">parameter database</param> void IUserInterface.PopulateParameterList(ParameterDatabase database) { Trace("PopulateParameterList"); this.parameterGrid.Rows.Clear(); foreach (Parameter parameter in database.Parameters) { DataGridViewRow row = new DataGridViewRow(); row.CreateCells(this.parameterGrid); row.Cells[(int)GridColumns.Enabled].Value = false; row.Cells[(int)GridColumns.Parameter].Value = parameter; DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)row.Cells[(int)GridColumns.Conversions]; cell.DisplayMember = "Units"; foreach (Conversion conversion in parameter.Conversions) { DataGridViewComboBoxCell.ObjectCollection items = cell.Items; items.Add(conversion); } Conversion defaultConversion = parameter.Conversions[0]; cell.Value = defaultConversion; this.parameterGrid.Rows.Add(row); } this.parameterGrid.Sort(this.parameterGrid.Columns[1], ListSortDirection.Ascending); }
public void BasicLoggerAddressesDuplicates() { MockEcuStream stream = MockEcuStream.CreateInstance(); this.logger = SsmBasicLogger.GetInstance(Environment.CurrentDirectory, stream); IAsyncResult result = logger.BeginConnect(null, null); result.AsyncWaitHandle.WaitOne(); ParameterSource source = logger.EndConnect(result); ParameterDatabase database = ParameterDatabase.GetInstance(); database.Add(source); LogProfile profile = LogProfile.CreateInstance(); Parameter parameter; database.TryGetParameterById("P8", out parameter); // engine speed (14) profile.Add(parameter, parameter.Conversions[0]); database.TryGetParameterById("P201", out parameter); // IDC, requires engine speed (14), IPW (32) profile.Add(parameter, parameter.Conversions[0]); database.TryGetParameterById("P202", out parameter); // MRP(corrected), requires MAP (13), Atmo (35) profile.Add(parameter, parameter.Conversions[0]); database.TryGetParameterById("P7", out parameter); // MAP (13) profile.Add(parameter, parameter.Conversions[0]); // IPW is not in the resulting set of addresses, why? this.logger.SetProfile(profile, database); List <int> addresses = this.logger.Addresses; Assert.AreEqual(5, addresses.Count); int[] expected = new int[] { 14, 15, 13, 32, 35 }; Utility.CompareArrays("Address arrays", expected, addresses.ToArray()); }
public void ParameterDatabaseLoadRemove() { ParameterDatabase db = ParameterDatabase.GetInstance(); ParameterSource source = new MockParameterSource(); db.Add(source); Assert.AreEqual(source.Parameters.Count, db.Parameters.Count); db.Remove(source); Assert.AreEqual(0, db.Parameters.Count); }
public void LoggerSuspendResume() { this.logger = SsmLogger.GetInstance(Environment.CurrentDirectory, MockEcuStream.PortName); IAsyncResult result = logger.BeginConnect(null, null); result.AsyncWaitHandle.WaitOne(); ParameterSource source = logger.EndConnect(result); ParameterDatabase database = ParameterDatabase.GetInstance(); database.Add(source); LogProfile profile = LogProfile.CreateInstance(); foreach (SsmParameter parameter in database.Parameters) { profile.Add(parameter, parameter.Conversions[0]); if (profile.Columns.Count > 3) { break; } } this.logStartCalls = 0; this.logEntryCalls = 0; this.logEndCalls = 0; this.logErrorCalls = 0; this.logger.SetProfile(profile, database); this.logger.LogStart += this.LogStart; this.logger.LogEntry += this.LogEntry; this.logger.LogStop += this.LogStop; this.logger.LogError += this.LogError; this.logger.StartLogging(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.25)); this.logger.Suspend(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.25)); int entriesBeforeSuspend = this.logEntryCalls; Debug.WriteLine("Entries before suspend: " + entriesBeforeSuspend.ToString()); this.logger.Resume(TimeSpan.FromMilliseconds(250)); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.5)); int entriesAfterSuspend = this.logEntryCalls; Debug.WriteLine("Entries after suspend: " + entriesAfterSuspend.ToString()); this.logger.BeginStopLogging(NoOp, null); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1)); Assert.IsTrue(entriesAfterSuspend > entriesBeforeSuspend, "Resumed logging after suspend/resume."); }
public static IParameterDatabase LoadParametersFromFile(string fileName) { var fileInfo = new FileInfo(fileName); if (!fileInfo.Exists) { throw new FileNotFoundException(String.Format("The specified file could not be found: {0}", fileInfo.FullName)); } var parameterDatabase = new ParameterDatabase(fileInfo); return(parameterDatabase); }
public void BasicLoggerDependencyConversions() { MockEcuStream stream = MockEcuStream.CreateInstance(); this.logger = SsmBasicLogger.GetInstance(Environment.CurrentDirectory, stream); IAsyncResult result = logger.BeginConnect(null, null); result.AsyncWaitHandle.WaitOne(); ParameterSource source = logger.EndConnect(result); ParameterDatabase database = ParameterDatabase.GetInstance(); database.Add(source); LogProfile baseParameters = LogProfile.CreateInstance(); foreach (SsmParameter parameter in database.Parameters) { if (parameter.Id == "P201") { baseParameters.Add(parameter, parameter.Conversions[0]); } if (parameter.Id == "P202") { baseParameters.Add(parameter, parameter.Conversions[0]); break; } } this.logger.SetProfile(baseParameters, database); LogEventArgs args = this.logger.GetOneRow(); Utility.AssertColumnParameterId(args, 0, "P201"); Utility.AssertColumnParameterId(args, 1, "P202"); Utility.AssertColumnParameterId(args, 2, "P8"); Utility.AssertColumnParameterId(args, 3, "P21"); Utility.AssertColumnParameterId(args, 4, "P7"); Utility.AssertColumnParameterId(args, 5, "P24"); Assert.AreEqual(6, args.Row.Columns.Count); List <int> addresses = this.logger.Addresses; Assert.AreEqual(5, addresses.Count); int[] expected = new int[] { 14, 15, 32, 13, 35 }; Utility.CompareArrays("Address arrays", expected, addresses.ToArray()); // Values from observation... Assert.AreEqual("2.08", args.Row.Columns[0].ValueAsString); Assert.AreEqual("1.02", args.Row.Columns[1].ValueAsString); }
public void InternalLogProfileNoParameters() { ParameterDatabase database = ParameterDatabase.GetInstance(); MockParameterSource source = new MockParameterSource(); database.Add(source); LogProfile publicProfile = LogProfile.CreateInstance(); InternalLogProfile internalProfile = InternalLogProfile.GetInstance(publicProfile, database); Assert.AreEqual(0, internalProfile.Addresses.Count); }
public void TwoLayerParameterDatabaseTest() { var fileSpec = Path.Combine(RelativePath, "ec.params"); Assert.IsTrue(System.IO.File.Exists(fileSpec)); var pd = new ParameterDatabase(new FileInfo(fileSpec)); pd.SetParameter(new Parameter("Hi there"), "Whatever"); pd.SetParameter(new Parameter(new[] { "1", "2", "3" }), " Whatever "); pd.SetParameter(new Parameter(new[] { "a", "b", "c" }).Pop().Push("d"), "Whatever"); // key becomes a.b.d var pd2 = new ParameterDatabase(); pd2.SetParameter(new Parameter("Hi there"), "Hello!"); // This will override parent.0 pd2.SetParameter(new Parameter(new[] { "1", "2", "3" }), "GoofBall"); // This will override parent.0 pd2.SetParameter(new Parameter(new[] { "4", "5", "6" }), "GoofBall7"); // This is just added pd2.AddParent(pd); foreach (var k in pd2.Keys) { context.WriteLine("{0} = {1}", k, pd2[k]); } context.WriteLine(""); context.WriteLine("\n\n PRINTING ALL PARAMETERS \n\n"); var memStream = new MemoryStream(); var temp_writer = new StreamWriter(memStream, Encoding.Default) { AutoFlush = true }; pd2.List(temp_writer, true); memStream.Position = 0; context.WriteLine(new StreamReader(memStream).ReadToEnd()); memStream.Close(); context.WriteLine("\n\n PRINTING ONLY VALID PARAMETERS \n\n"); memStream = new MemoryStream(); var temp_writer2 = new StreamWriter(memStream, Encoding.Default) { AutoFlush = true }; pd2.List(temp_writer2, false); memStream.Position = 0; context.WriteLine(new StreamReader(memStream).ReadToEnd()); memStream.Close(); }
public void GetFloatWithMaxThatExceedsMaxReturnsMinMinusOne() { var key = "Hi there"; var val = "11.09"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetFloatWithMax(p1, null, 5.09, 10.09); // Min is 5, max is 10, then the return value is 4 Assert.AreEqual(v, 4.09f); }
public void GetLongWillNotParseHexLiteralValue() { var key = "Hi there"; var val = "0x01"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var intVal = pd.GetLong(p1, null); Assert.AreEqual(intVal, 1); }
public void GetFloatWithDefaultConstant() { var key = "myparam"; var pd1 = new ParameterDatabase(); var pd2 = new ParameterDatabase(); var p1 = new Parameter(key); var p2 = new Parameter(key); pd1.AddParent(pd2); // Neither database has p1 or p2, thus the third constant argument (1) will be returned... var v = pd1.GetFloatWithDefault(p1, p2, 1.09); Assert.AreEqual(v, 1.09f); }
public void GetFloatWillNotParseExplicitFloatingPointLiteralCodes() { var key = "Hi there"; var val = "1.09f"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetFloat(p1, null); Assert.AreEqual(v, 1.09f); }
public void GetFloatWillParseExponentialLiteralValue() { var key = "Hi there"; var val = "1.097e2"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetFloat(p1, null); Assert.AreEqual(v, 109.7f); }
public void GetFloatFromInt() { var key = "Hi there"; var val = "1"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetFloat(p1, null); Assert.AreEqual(v, 1.0f); }
public void GetLongWillNotParseNonIntegralLiteralValues() { var key = "Hi there"; var val = "1.038"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetLong(p1, null); Assert.AreEqual(v, 1); }
public void GetLongWillNotParseExponentialLiteralValueOutOfRange() { var key = "Hi there"; var val = "1.097e2"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetLong(p1, null); Assert.AreEqual(v, 109); }
public void GetFloatWithMaxReturnsMinusOneWhenMinIsZero() { var key = "Hi there"; var val = "11.29"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetFloatWithMax(p1, null, 0.0, 10.09); // Min is 0.0, max is 10.09, then the return value is -1.0 Assert.AreEqual(v, -1.0f); }
public void GetFloatWillNotParseHexLiteralValue() { var key = "Hi there"; var val = "0x01"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetFloat(p1, null); Assert.AreEqual(v, 1.0f); }
public void GetInt() { var key = "Hi there"; var val = "1"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var intVal = pd.GetInt(p1, null); Assert.AreEqual(intVal, 1); }
public void GetLongWillParseRealNumberLiterals() { var key = "Hi there"; var val = "1.0"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var v = pd.GetLong(p1, null); Assert.AreEqual(v, 1); }
public void GetIntWithMaxReturnsMinusOneWhenMinIsZero() { var key = "Hi there"; var val = "11"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var intVal = pd.GetIntWithMax(p1, null, 0, 10); // Min is 0, max is 10, then the return value is -1 Assert.AreEqual(intVal, -1); }
public void GetIntWithMaxThatExceedsMaxReturnsMinMinusOne() { var key = "Hi there"; var val = "11"; var pd = new ParameterDatabase(); Assert.AreEqual(pd.Count, 0); var p1 = new Parameter(key); pd.SetParameter(p1, val); var intVal = pd.GetIntWithMax(p1, null, 5, 10); // Min is 5, max is 10, then the return value is 4 Assert.AreEqual(intVal, 4); }
public void SingleParameterFileTest() { var fileSpec = Path.Combine(RelativePath, "ec.params"); Assert.IsTrue(System.IO.File.Exists(fileSpec)); var pd = new ParameterDatabase(new FileInfo(fileSpec)); Assert.AreEqual(pd.Count, 6); // Add some miscellaneous parameters, some valid, some not pd.SetParameter(new Parameter("Hi there"), "Whatever"); pd.SetParameter(new Parameter(new[] { "1", "2", "3" }), " Whatever "); // extra whitespace is trimmed pd.SetParameter(new Parameter(new[] { "a", "b", "c" }).Pop().Push("d"), "Whatever"); // This becomes a.b.d Assert.AreEqual(pd.Count, 9); foreach (var k in pd.Keys) { context.WriteLine("{0} = {1}", k, pd[k]); } context.WriteLine(""); context.WriteLine("\n\n PRINTING ALL PARAMETERS (Including Shadowed) \n\n"); var memStream = new MemoryStream(); var temp_writer = new StreamWriter(memStream, Encoding.Default) { AutoFlush = true }; pd.List(temp_writer, true); memStream.Position = 0; context.WriteLine(new StreamReader(memStream).ReadToEnd()); memStream.Close(); context.WriteLine("\n\n PRINTING SORTED PARAMETERS (Excluding Shadowed) \n\n"); memStream = new MemoryStream(); var temp_writer2 = new StreamWriter(memStream, Encoding.Default) { AutoFlush = true }; pd.List(temp_writer2, false); memStream.Position = 0; context.WriteLine(new StreamReader(memStream).ReadToEnd()); memStream.Close(); }
public void InternalLogProfileMockParameters() { ParameterDatabase database = ParameterDatabase.GetInstance(); MockParameterSource source = new MockParameterSource(); database.Add(source); LogProfile publicProfile = LogProfile.CreateInstance(); publicProfile.Add(database.Parameters[0], database.Parameters[0].Conversions[0]); publicProfile.Add(database.Parameters[1], database.Parameters[1].Conversions[0]); InternalLogProfile internalProfile = InternalLogProfile.GetInstance(publicProfile, database); Assert.AreEqual(0, internalProfile.Addresses.Count); Assert.AreEqual(2, internalProfile.LogEventArgs.Row.Columns.Count); }
public void GetFloatWithDefaultParameter() { var key = "myparam"; var pd1 = new ParameterDatabase(); var pd2 = new ParameterDatabase(); var p1 = new Parameter(key); var p2 = new Parameter(key); pd2.SetParameter(p2, "9.01"); pd1.AddParent(pd2); // Database pd1 has no parameters, pd2 has parameter p2, // thus the default parameter argument (9.01), not the constant argument (1.09), will be returned... var v = pd1.GetFloatWithDefault(p1, p2, 1.09); Assert.AreEqual(v, 9.01f); }