Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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;
        }
Exemple #3
0
        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());
            }
        }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        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);
        }
Exemple #9
0
        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.");
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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);
        }