Exemplo n.º 1
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());
        }
Exemplo n.º 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;
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        public void BasicLoggerConnect()
        {
            MockEcuStream    mock   = MockEcuStream.CreateInstance();
            FragmentedStream stream = FragmentedStream.GetInstance(mock);

            this.logger = SsmBasicLogger.GetInstance(Environment.CurrentDirectory, stream);
            IAsyncResult result = logger.BeginConnect(null, null);

            result.AsyncWaitHandle.WaitOne();
            ParameterSource source = logger.EndConnect(result);

            Assert.AreEqual("2F12785206", this.logger.EcuIdentifier, "EcuIdentifier");
            Assert.IsNotNull(source);
            Assert.IsNotNull(source.Parameters);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Invoked before the window closes
        /// </summary>
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Trace.WriteLine("MainForm_FormClosing");

            SsmBasicLogger localLogger = this.logger;

            if (localLogger != null)
            {
                Trace.WriteLine("MainForm_FormClosing: stopping logger.");
                localLogger.BeginStopLogging(Logger_LoggingStopped, true);
                e.Cancel = true;
            }
            else
            {
                Trace.WriteLine("MainForm_FormClosing: allowing close");
            }

            Trace.WriteLine("MainForm_FormClosing: returning.");
        }
Exemplo n.º 6
0
        public void ManualLoggingTest(Action <ParameterDatabase> callback)
        {
            MockEcuStream    stream     = MockEcuStream.CreateInstance();
            FragmentedStream fragStream = FragmentedStream.GetInstance(stream);

            this.logger = SsmBasicLogger.GetInstance(Environment.CurrentDirectory, fragStream);
            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));
            callback(database);
            this.logger.BeginStopLogging(NoOp, null);
            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1));
        }
Exemplo n.º 7
0
        private ParameterDatabase InitializeLogger()
        {
            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);

            Assert.AreEqual("2F12785206", this.logger.EcuIdentifier, "EcuIdentifier");
            Assert.IsNotNull(source);
            Assert.AreEqual(178, source.Parameters.Count);

            ParameterDatabase database = ParameterDatabase.GetInstance();

            database.Add(source);
            Assert.AreEqual(178, database.Parameters.Count);

            return(database);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Invoked after the logger has stopped.
        /// </summary>
        private void Logger_LoggingStopped(IAsyncResult asyncResult)
        {
            Trace.WriteLine("MainForm.Logger_LoggingStopped");

            this.logger.EndStopLogging(asyncResult);

            this.Invoke(
                new ThreadStart(delegate
            {
                this.logger = null;

                Trace.WriteLine("Logger_LoggingStopped: Releasing serial port.");
                this.ReleaseSerialPort();

                if ((bool)asyncResult.AsyncState)
                {
                    Trace.WriteLine("Logger_LoggingStopped: Closing form.");
                    this.Close();
                }
            }));
        }
Exemplo n.º 9
0
        public void BasicLoggerAddresses()
        {
            MockEcuStream  stream = MockEcuStream.CreateInstance();
            SsmBasicLogger 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();

            foreach (SsmParameter parameter in database.Parameters)
            {
                profile.Add(parameter, parameter.Conversions[0]);
                if (profile.Columns.Count == 8)
                {
                    break;
                }
            }

            logger.SetProfile(profile, database);
            IList <int> actual = logger.Addresses;

            // Note that parameters get re-ordered alphabetically
            IList <int> expected = new int[]
            {
                // 9, 10, 8, 14, 15, 17, 18, 13, 16,
                8, 9, 10, 13, 14, 15, 16, 17, 18,
            };

            Assert.AreEqual(expected.Count, actual.Count, "Addresses.Length");
            for (int i = 0; i < expected.Count; i++)
            {
                Assert.AreEqual(expected[i], actual[i], "Addresses[" + i + "]");
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Stop/start logging when the system hibernates and resumes
        /// </summary>
        void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e)
        {
            Trace.WriteLine("### PowerModeChanged: " + e.Mode);

            switch (e.Mode)
            {
            case Microsoft.Win32.PowerModes.Suspend:
                this.powerOn = false;
                SsmBasicLogger localLogger = this.logger;
                if (localLogger != null)
                {
                    Trace.WriteLine("SystemEvents_PowerModeChanged: stopping logger");
                    localLogger.BeginStopLogging(Logger_LoggingStopped, false);
                }
                break;

            case Microsoft.Win32.PowerModes.Resume:
                this.powerOn = true;
                this.DisplayResume();
                this.ScheduleRestart("System resumed", TimeSpan.FromSeconds(10));
                break;
            }
        }
Exemplo n.º 11
0
        public void BasicLoggerProfile()
        {
            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 expectedProfile = LogProfile.CreateInstance();

            foreach (SsmParameter parameter in database.Parameters)
            {
                expectedProfile.Add(parameter, parameter.Conversions[0]);
                if (expectedProfile.Columns.Count > 3)
                {
                    break;
                }
            }
            logger.SetProfile(expectedProfile, database);
            LogProfile actualProfile = logger.CurrentProfile;

            Assert.AreEqual(expectedProfile.Columns.Count, actualProfile.Columns.Count, "Actual count and expected count");
            foreach (LogColumn expectedColumn in expectedProfile.Columns)
            {
                Assert.IsTrue(actualProfile.Contains(expectedColumn.Parameter), "Actual expected parameter set is missing something");
            }
            foreach (LogColumn actualColumn in actualProfile.Columns)
            {
                Assert.IsTrue(expectedProfile.Contains(actualColumn.Parameter), "Actual expected parameter set contains something extra");
            }
        }