예제 #1
0
 public bool PopulateInfo()
 {
     try
     {
         string      dslogPath = FilePath + "\\" + Name + ".dslog";
         DSLOGReader reader    = new DSLOGReader(FilePath + "\\" + Name + ".dslog");
         reader.OnlyReadMetaData();
         if (reader.Version != 4 || reader.StartingPDPType == PDPType.Unknown)
         {
             Useless = true;
             return(false);
         }
         SetSeconds(reader.StartingPDPType);
         if (!SetTime(reader) || !SetFMS() || !SetUseless())
         {
             Useless = true;
             return(false);
         }
     } catch (Exception ex)
     {
         Useless = true;
         return(false);
     }
     Live = CheckLive();
     return(true);
 }
예제 #2
0
        public void TestReadLogRev()
        {
            var reader = new DSLOGReader("TestFiles\\2022_02_27 15_17_59 Sun.dslog");

            reader.Read();
            Assert.IsTrue(reader.Version == 4);
        }
예제 #3
0
        private bool SetUseless()
        {
            string dslogPath = FilePath + "\\" + Name + ".dslog";

            if (File.Exists(dslogPath))
            {
                if (Seconds <= 20 && !IsFMSMatch)
                {
                    Useless = true;
                    return(true);
                }
                if (IsFMSMatch)
                {
                    DSLOGReader reader = new DSLOGReader(dslogPath);
                    reader.Read();

                    foreach (var entry in reader.Entries)
                    {
                        if (entry.RobotAuto || entry.RobotTele || entry.DSAuto || entry.DSTele)
                        {
                            Useless = false;
                            return(true);
                        }
                    }
                    Useless = true;
                }
                return(true);
            }
            return(false);
        }
예제 #4
0
        public void TestReadLog()
        {
            var reader = new DSLOGReader("TestFiles\\2022_02_25 21_25_39 Fri.dslog");

            reader.Read();
            Assert.IsTrue(reader.Version == 4);
        }
예제 #5
0
        private void backgroundWorkerReadMatches_DoWork(object sender, DoWorkEventArgs e)
        {
            int    num        = 0;
            double matchCount = Matches.Count;

            foreach (var match in Matches)
            {
                DSLOGReader reader = new DSLOGReader($"{FileView.GetPath()}\\{match.Name}.dslog");
                try
                {
                    reader.Read();
                }
                catch (Exception ex)
                {
                    MatchReaders.Add(null);
                    continue;
                }

                MatchReaders.Add(reader);
                backgroundWorkerReadMatches.ReportProgress((int)((((double)++num) / Matches.Count) * 100.0));
                if (backgroundWorkerReadMatches.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
            }
        }
예제 #6
0
        public void TestReadMetadata()
        {
            var reader = new DSLOGReader("TestFiles\\2022_02_25 21_25_39 Fri.dslog");

            reader.OnlyReadMetaData();
            Assert.IsTrue(reader.Version == 4);
            var expectedTime = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2022, 02, 26, 2, 25, 39, 855), TimeZoneInfo.Local);

            Assert.AreEqual(reader.StartTime, expectedTime);
        }
예제 #7
0
        public void TestReadMultiPdpType()
        {
            var reader = new DSLOGReader("TestFiles\\2022_03_19 12_55_56 Sat.dslog");

            reader.Read();
            Assert.IsTrue(reader.Version == 4);
            foreach (var entry in reader.Entries)
            {
                Assert.IsFalse(entry.Watchdog);
                Assert.IsFalse(entry.Brownout);
            }
        }
예제 #8
0
        private bool SetTime(DSLOGReader reader)
        {
            DateTime sTime;

            if (!DateTime.TryParseExact(Name, "yyyy_MM_dd HH_mm_ss ddd", CultureInfo.InvariantCulture, DateTimeStyles.None, out sTime))
            {
                StartTime = reader.StartTime;
            }
            else
            {
                StartTime = sTime;
            }
            return(true);
        }
예제 #9
0
        private void backgroundWorkerExport_DoWork(object sender, DoWorkEventArgs e)
        {
            var tempDict = new Dictionary <string, DSLOGFileEntry>();

            Files.ForEach(en => tempDict.Add(en.Name, en));
            TotalExported = 0;
            Parallel.ForEach(CheckedFiles, (file, state) =>
            {
                DSLOGFileEntry entry;
                if (tempDict.TryGetValue(file, out entry))
                {
                    DateTime matchTime = DateTime.Now;
                    if (checkBoxLogs.Checked)
                    {
                        string dsFile = $"{entry.FilePath}\\{entry.Name}.dslog";
                        if (File.Exists(dsFile))
                        {
                            DSLOGReader reader = new DSLOGReader(dsFile);
                            try
                            {
                                reader.Read();
                            }
                            catch (Exception ex)
                            {
                                return;
                            }



                            if (entry.IsFMSMatch)
                            {
                                string eventName = entry.EventName;
                                if (!UseFilledInEvents && entry.FMSFilledIn)
                                {
                                    eventName = "";
                                }
                                string data = Util.GetTableFromLogEntries(reader.Entries, Series, IdToPDPGroup, checkBoxMatchTime.Checked && reader.Entries.TryFindMatchStart(out matchTime), matchTime, ",");
                                var dir     = $"{FilePath}\\{eventName}{entry.StartTime.Year}";
                                if (!Directory.Exists(dir))
                                {
                                    Directory.CreateDirectory(dir);
                                }
                                File.WriteAllText($"{dir}\\{entry.Name} {entry.MatchType}_{entry.FMSMatchNum}.csv", data);
                            }
                            else
                            {
                                string data = Util.GetTableFromLogEntries(reader.Entries, Series, IdToPDPGroup, false, matchTime, ",");
                                var dir     = $"{FilePath}\\{entry.StartTime.Year}";
                                if (!Directory.Exists(dir))
                                {
                                    Directory.CreateDirectory(dir);
                                }
                                File.WriteAllText($"{dir}\\{entry.Name}.csv", data);
                            }
                        }
                    }
                    if (checkBoxEvents.Checked)
                    {
                        string dsFile = $"{entry.FilePath}\\{entry.Name}.dsevents";
                        if (File.Exists(dsFile))
                        {
                            DSEVENTSReader reader = new DSEVENTSReader(dsFile);
                            try
                            {
                                reader.Read();
                            }
                            catch (Exception ex)
                            {
                                return;
                            }

                            if (entry.IsFMSMatch)
                            {
                                string eventName = entry.EventName;
                                if (!UseFilledInEvents && entry.FMSFilledIn)
                                {
                                    eventName = "";
                                }
                                string data = Util.GetTableFromEvents(reader.Entries, checkBoxMatchTime.Checked && checkBoxLogs.Checked, matchTime, ",");
                                var dir     = $"{FilePath}\\{eventName}{entry.StartTime.Year}";
                                if (!Directory.Exists(dir))
                                {
                                    Directory.CreateDirectory(dir);
                                }
                                File.WriteAllText($"{dir}\\{entry.Name} {entry.MatchType}_{entry.FMSMatchNum}_Events.csv", data);
                            }
                            else
                            {
                                string data = Util.GetTableFromEvents(reader.Entries, false, matchTime, ",");
                                var dir     = $"{FilePath}\\{entry.StartTime.Year}";
                                if (!Directory.Exists(dir))
                                {
                                    Directory.CreateDirectory(dir);
                                }
                                File.WriteAllText($"{dir}\\{entry.Name}_Events.csv", data);
                            }
                        }
                    }
                }
                if (backgroundWorkerExport.CancellationPending)
                {
                    e.Cancel = true;
                    state.Break();
                }
                int precent = (int)((double)++TotalExported / CheckedFiles.Count * 100.0);
                backgroundWorkerExport.ReportProgress(precent);
            });
        }
예제 #10
0
        public void LoadLog(DSLOGFileEntry logInfo)
        {
            if (logInfo == null)
            {
                return;
            }
            WaitForLoadingPlotting();

            LoadingLog = true;
            LogInfo    = logInfo;
            string dslogFile = $"{logInfo.FilePath}\\{logInfo.Name}.dslog";

            chart.Invoke((Action)(() =>
            {
                StopStreaming();
                LogStreamer = null;
                InitChart();
                LogEntries = null;
                ClearInfoLabel();
                ProbeView.SetProbe(null);
            }));

            if (File.Exists(dslogFile))
            {
                DSLOGReader reader = null;
                LastEntry = 0;
                if (logInfo.Live)
                {
                    LogStreamer = new DSLOGStreamer(dslogFile);
                    reader      = LogStreamer;
                    LogStreamer.Stream();
                }
                else
                {
                    reader = new DSLOGReader(dslogFile);
                    try
                    {
                        reader.Read();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Log Corrupted!");
                        LoadingLog = false;
                        return;
                    }
                }



                if (reader.Version != 4)
                {
                    LoadingLog = false;
                    return;
                }
                chart.Invoke((Action)(() =>
                {
                    ChartArea area = chart.ChartAreas[0];
                    StartTime = reader.StartTime;
                    EndTime = reader.Entries.Last().Time;
                    LogEntries = reader.Entries;
                    area.AxisX.Minimum = StartTime.ToOADate();
                    area.AxisX.Maximum = EndTime.ToOADate();
                    area.CursorX.IntervalOffset = reader.StartTime.Millisecond % 20;


                    labelFileInfo.Text = $"{logInfo.Name}.dslog";


                    if (logInfo.IsFMSMatch)
                    {
                        labelFileInfo.Text = labelFileInfo.Text + $" ({logInfo.EventName} {logInfo.MatchType.ToString()} {logInfo.FMSMatchNum})";
                        labelFileInfo.BackColor = logInfo.GetMatchTypeColor();
                        //buttonAnalysis.Enabled = true;
                        SetUpMatchTime();
                    }
                    else
                    {
                        CanUseMatchTime = false;
                        ChangeUseMatchTime(false);
                    }
                }));


                PlotLog();
                PointCount = LogEntries.Count;

                chart.Invoke((Action)(() =>
                {
                    SetEnergy();

                    chart.ChartAreas[0].AxisX.ScaleView.ZoomReset();
                    chart.ChartAreas[0].AxisY2.ScaleView.ZoomReset();
                    this.chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = false;
                }));
                LoadingLog = false;
                labelFileInfo.Invoke((Action)(() => {
                    if (logInfo.Live)
                    {
                        labelFileInfo.BackColor = Color.Lime;
                        BackColor = Color.Lime;
                        timerStream.Start();
                    }
                }));
                SetAutoScrollColor();
            }
            else
            {
                LoadingLog = false;
                MessageBox.Show("Log Corrupted!");
            }
        }