Ejemplo n.º 1
0
        public fmMain()
        {
            InitializeComponent();
            DevFile = null;// new DeviceFile();

            //ListEditor.DevFile = DevFile;
        }
Ejemplo n.º 2
0
        private void buttonExecute_Click(object sender, EventArgs e)
        {
            DeviceFile file = this.textBoxScript.Tag as DeviceFile;

            if (file == null)
            {
                return;
            }

            buttonSave_Click(sender, e);

            string filename = ConfigHelper.GetFullPath(file.Location);

            ProcessControl pc  = new ProcessControl();
            bool           res = pc.Execute(filename, "");

            MessageBox.Show(res.ToString() + " " + pc.ExitCode);

            //ProcessStartInfo pi = new ProcessStartInfo();
            //pi.FileName = filename;
            //pi.CreateNoWindow = false;
            //pi.Arguments = " >> " + filename + ".log";

            //Process p = Process.Start(pi);
            //if (p != null)
            //{
            //    p.Exited += new EventHandler(process_Exited);
            //    p.EnableRaisingEvents = true;
            //}
            //else
            //{
            //    MessageBox.Show("Execute script failed.");
            //}
        }
Ejemplo n.º 3
0
        private void Form1_Load(object sender, EventArgs e)
        {
            DevFile = new DeviceFile();

            bool result = false;

            result = DevFile.LoadFromFile("PK2DeviceFile.dat");

            /*
             * if (!result) result = DevFile.LoadFromFile("C:\\Program Files\\Microchip\\PICkit 2\\PK2DeviceFile.dat");
             * if (!result) result = DevFile.LoadFromFile("C:\\Program Files\\Microchip\\PICkit 2 v2\\PK2DeviceFile.dat");
             * if (!result) result = DevFile.LoadFromFile("C:\\Program Files (x86)\\Microchip\\PICkit 2\\PK2DeviceFile.dat");
             * if (!result) result = DevFile.LoadFromFile("C:\\Program Files (x86)\\Microchip\\PICkit 2 v2\\PK2DeviceFile.dat");
             */

            if (!result)
            {
                if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    result = DevFile.LoadFromFile(openFileDialog1.FileName);
                }
            }

            if (result)
            {
                DeviceFileLoaded();
            }
        }
Ejemplo n.º 4
0
        private void buttonFileAdd_Click(object sender, EventArgs e)
        {
            DeviceFile file = new DeviceFile();

            _dirMgt.DeviceDirInfor.Files.Add(file);
            RefreshFileList(file);
        }
Ejemplo n.º 5
0
        private bool ExecuteFile(GCInterface gcInterface, DeviceFileType type, bool wait)
        {
            switch (type)
            {
            case DeviceFileType.StartScript:
                return(ServiceControl.SetServiceStatus(gcInterface.InterfaceName, AdapterStatus.Running));

            case DeviceFileType.StopScript:
                return(ServiceControl.SetServiceStatus(gcInterface.InterfaceName, AdapterStatus.Stopped));
            }

            // map type
            DeviceFileType t = type;

            if (type == DeviceFileType.InstallScript ||
                type == DeviceFileType.UninstallScript)
            {
                t = DeviceFileType.ServiceAssembly;
            }

            // find script
            DeviceFile file = gcInterface.Directory.Files.FindFirstFile(t);

            if (file == null)
            {
                GCError.SetLastError("Cannot find file : " + t.ToString() + " in " + gcInterface.ToString());
                return(false);
            }

            // find installer
            DeviceFile installer = gcInterface.Directory.Files.FindFirstFile(DeviceFileType.Installer);

            if (installer == null)
            {
                GCError.SetLastError("Cannot find installer in " + gcInterface.ToString());
                return(false);
            }

            ProcessControl pc              = new ProcessControl();
            string         exefilename     = ConfigHelper.GetFullPath(gcInterface.FolderPath + "\\" + file.Location);
            string         installfilename = ConfigHelper.GetFullPath(gcInterface.FolderPath + "\\" + installer.Location);

            switch (type)
            {
            case DeviceFileType.ConfigAssembly:
                return(ProcessControl.ExecuteAssemblyDirectly(exefilename, AdapterConfigArgument.InIMWizard));

            case DeviceFileType.MonitorAssembly:
                return(ProcessControl.ExecuteAssemblyDirectly(exefilename, ""));

            case DeviceFileType.InstallScript:
                return(pc.ExecuteAssembly(installfilename, "\"" + exefilename + "\"", true));

            case DeviceFileType.UninstallScript:
                return(pc.ExecuteAssembly(installfilename, "-u \"" + exefilename + "\"", true));
            }

            return(false);
        }
Ejemplo n.º 6
0
        private void listBoxFile_SelectedIndexChanged(object sender, EventArgs e)
        {
            DeviceFile file = this.listBoxFile.SelectedItem as DeviceFile;

            if (file != null)
            {
                this.propertyGridFile.SelectedObject = file;
            }
        }
Ejemplo n.º 7
0
        private bool CallAdapterConfigProcess(GCInterface gcInterface, string arg)
        {
            if (gcInterface == null)
            {
                return(false);
            }
            if (_cfgP != null && !_cfgP.HasExited && waitEvent == null)
            {
                waitEvent = new ManualResetEvent(false);
                waitEvent.Reset();
                _cfgP.Kill();
                waitEvent.WaitOne(20000, true);
            }

            DeviceFile file = null;

            if (arg == null)
            {
                file = gcInterface.Directory.Files.FindFirstFile(DeviceFileType.MonitorAssembly);
                arg  = AdapterConfigArgument.InIM;
            }
            else
            {
                file = gcInterface.Directory.Files.FindFirstFile(DeviceFileType.ConfigAssembly);
            }

            if (file == null)
            {
                return(false);
            }

            string exefilename = ConfigHelper.GetFullPath(gcInterface.FolderPath + "\\" + file.Location);

            if (!System.IO.File.Exists(exefilename))
            {
                Program.Log.Write("{Interface} cannot find file : " + exefilename);
                return(false);
            }


            _gcInterface = gcInterface;

            ProcessStartInfo pi = new ProcessStartInfo();

            pi.WorkingDirectory = Path.GetDirectoryName(exefilename);
            pi.Arguments        = arg; // AdapterConfigArgument.InIM;
            pi.FileName         = exefilename;

            Process p = Process.Start(pi);

            p.Exited += new EventHandler(p_Exited);
            p.EnableRaisingEvents = true;
            _cfgP = p;

            return(true);
        }
Ejemplo n.º 8
0
        private void buttonFileDelete_Click(object sender, EventArgs e)
        {
            DeviceFile file = this.listBoxFile.SelectedItem as DeviceFile;

            if (file != null)
            {
                _dirMgt.DeviceDirInfor.Files.Remove(file);
            }
            RefreshFileList(null);
        }
Ejemplo n.º 9
0
        private void comboBoxType_SelectedIndexChanged(object sender, EventArgs e)
        {
            string strType = this.comboBoxType.Text;

            if (strType == null || strType.Length < 1)
            {
                return;
            }

            DeviceFileType type = (DeviceFileType)Enum.Parse(typeof(DeviceFileType), this.comboBoxType.Text);
            DeviceFile     file = _dirMgt.DeviceDirInfor.Files.FindFirstFile(type);

            string filename = null;

            if (file != null)
            {
                filename = ConfigHelper.GetFullPath(file.Location);
                if (!File.Exists(filename))
                {
                    filename = null;
                }
            }

            if (filename == null)
            {
                if (MessageBox.Show(this, "Cannot find " + type.ToString() + ". Do you want to create one?", "Warning",
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    string fn    = type.ToString() + ".bat";
                    string fname = ConfigHelper.GetFullPath(fn);
                    using (StreamWriter sw = File.CreateText(fname))
                    {
                        sw.WriteLine("REM " + type.ToString());
                    }

                    if (file == null)
                    {
                        file            = new DeviceFile();
                        file.Backupable = true;
                        file.Location   = fn;
                        file.Type       = type;

                        _dirMgt.DeviceDirInfor.Files.Add(file);
                        if (!_dirMgt.SaveDeviceDir())
                        {
                            MessageBox.Show("Save DeviceDir file failed.");
                            return;
                        }
                    }
                }
            }

            this.textBoxScript.Tag = file;
            buttonLoad_Click(sender, e);
        }
Ejemplo n.º 10
0
 private void openToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
     {
         DevFile = new DeviceFile();
         if (DevFile.LoadFromFile(openFileDialog1.FileName))
         {
             DeviceFileLoaded();
         }
     }
 }
Ejemplo n.º 11
0
 private void RefreshFileList(DeviceFile file)
 {
     this.listBoxFile.Items.Clear();
     foreach (DeviceFile f in _dirMgt.DeviceDirInfor.Files)
     {
         int index = this.listBoxFile.Items.Add(f);
         if (file == f)
         {
             this.listBoxFile.SelectedIndex = index;
         }
     }
 }
Ejemplo n.º 12
0
        private string BuildMessage()
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine($"Device File: {DeviceFile.GetType().Name}");
            sb.AppendLine();

            sb.AppendLine($"Event ID: (0x{EventId:x8})");

            sb.AppendLine("Guest Stack Trace:");
            sb.AppendLine(Context.Thread.GetGuestStackTrace());

            return(sb.ToString());
        }
Ejemplo n.º 13
0
        private static bool UpdateInterfaceScript(Hashtable paramTable, DeviceFile file, DeviceFileType type, bool essentialFile)
        {
            if (file == null)
            {
                if (essentialFile)
                {
                    GCError.SetLastError("Cannot find script file of type: " + type.ToString());
                    return(false);
                }
                else
                {
                    return(true);
                }
            }

            string path     = paramTable[IMParameter.InterfaceDirectory] as string;
            string filename = path + "\\" + file.Location;

            try
            {
                string str = "";

                using (StreamReader sr = File.OpenText(filename))
                {
                    str = sr.ReadToEnd();
                }

                foreach (DictionaryEntry de in paramTable)
                {
                    string key   = de.Key as string;
                    string value = de.Value as string;
                    str = str.Replace(key, value);
                }

                using (StreamWriter sw = File.CreateText(filename))
                {
                    sw.Write(str);
                }

                return(true);
            }
            catch (Exception err)
            {
                GCError.SetLastError("Error when processing file: " + filename);
                GCError.SetLastError(err);
                return(false);
            }
        }
Ejemplo n.º 14
0
    private static List <DeviceFile> FromGPXV1(XmlDocument document, decimal lapIntervalMeters)
    {
        var result = new List <DeviceFile>();

        var baseFile = FromGPXV1_Base(document, lapIntervalMeters);

        foreach (var activity in baseFile.Activities)
        {
            var attach = new DeviceFile {
                Author = baseFile.Author.Clone()
            };
            result.Add(attach);
            attach.Activities.Add(activity);
        }
        return(result);
    }
Ejemplo n.º 15
0
    private static List <DeviceFile> FromTcxV2(XmlDocument Doc)
    {
        var Res = new List <DeviceFile>();

        var        BaseFile = FromTcxV2_Base(Doc);
        DeviceFile attach;

        foreach (var Act in BaseFile.Activities)
        {
            attach = new DeviceFile {
                Author = BaseFile.Author.Clone()
            };
            Res.Add(attach);
            attach.Activities.Add(Act);
        }
        return(Res);
    }
Ejemplo n.º 16
0
        private void buttonSave_Click(object sender, EventArgs e)
        {
            DeviceFile file = this.textBoxScript.Tag as DeviceFile;

            if (file == null)
            {
                return;
            }

            string filename = ConfigHelper.GetFullPath(file.Location);

            using (StreamWriter sw = File.CreateText(filename))
            {
                string str = this.textBoxScript.Text;
                sw.Write(str);
            }
        }
        private string BuildMessage()
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine($"Device File: {DeviceFile.GetType().Name}");
            sb.AppendLine();

            sb.AppendLine($"Ioctl (0x{Command.RawValue:x8})");
            sb.AppendLine($"\tNumber: 0x{Command.Number:x8}");
            sb.AppendLine($"\tType: 0x{Command.Type:x8}");
            sb.AppendLine($"\tSize: 0x{Command.Size:x8}");
            sb.AppendLine($"\tDirection: {Command.DirectionValue}");

            sb.AppendLine("Guest Stack Trace:");
            sb.AppendLine(Context.Thread.GetGuestStackTrace());

            return(sb.ToString());
        }
Ejemplo n.º 18
0
        private void buttonLoad_Click(object sender, EventArgs e)
        {
            DeviceFile file = this.textBoxScript.Tag as DeviceFile;

            if (file == null)
            {
                return;
            }

            string filename = ConfigHelper.GetFullPath(file.Location);

            using (StreamReader sr = File.OpenText(filename))
            {
                string str = sr.ReadToEnd();
                this.textBoxScript.Text = str;
            }

            this.textBoxLocation.Text = filename;
        }
Ejemplo n.º 19
0
        public static DeviceFile.DevicePartParams NewPart24r2(DeviceFile DevFile, string basePartName, string partName, DeviceTemplate template)
        {
            DeviceFile.DevicePartParams newPart = DevFile.PartsList.First(p => p.PartName == basePartName);

            // These can be easily found from the family programmer's manual
            newPart.PartName    = partName;
            newPart.DeviceID    = template.deviceId;
            newPart.ProgramMem  = template.family.programSize / 2 + 1;  // Size of program FLASH. Not sure what units this is
            newPart.ConfigAddr  = template.family.configAddr * 2;       // Address of the highest config register (ie. CONFIG4)
            newPart.ConfigWords = 4;                                    // Number of config registers

            // Mask out unused bits.
            // This can be found in the PIC datasheet. Reserved bits should be masked out.
            // Configuration registers are in reverse order, ie. { CONFIG4, CONFIG3, CONFIG2, CONFIG1 }, with the CONFIG4 at the LOWEST address.
            newPart.ConfigMasks = new ushort[8] {
                0x0000, 0xFFFF, 0xFFF3, 0x7BFF, 0, 0, 0, 0
            };
            newPart.ConfigBlank = new ushort[8] {
                0xFFFF, 0xFFFF, 0xFFF3, 0x7BFF, 0, 0, 0, 0
            };                                                                                  // Default configuration (Check the datasheet to see what the reserved bits should be set to)
            //NOTE: Above only tested with PIC24FJ256DA206.

            // Code-protect detection (only used in PicKit2 GUI?)
            newPart.CPConfig = 4;       // Which config contains the code-protect bits. This corresponds to CONFIG1
            newPart.CPMask   = 0x3000;  // There are two CP-config bits, if either are 0 then CP is active.

            // PIC Family
            newPart.Family = DevFile.Families.First(f => f.FamilyName == "PIC24r2").FamilyID;

            // Update scripts to PIC24r2
            newPart.ChipEraseScript      = DevFile.Scripts.First(s => s.ScriptName == "24r2_ChpErase450ms.1").ScriptNumber;
            newPart.ProgMemAddrSetScript = DevFile.Scripts.First(s => s.ScriptName == "24r2_SetAddr.1").ScriptNumber;
            newPart.ProgMemRdScript      = DevFile.Scripts.First(s => s.ScriptName == "24r2_ProgMemRd32.1").ScriptNumber;
            newPart.ProgMemWrPrepScript  = DevFile.Scripts.First(s => s.ScriptName == "24r2_ProgMemWrPrep.1").ScriptNumber;
            newPart.ProgMemWrScript      = DevFile.Scripts.First(s => s.ScriptName == "24r2_ProgMemWr64.1").ScriptNumber;

            return(newPart);
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Note: when copying passive SQL interface, this is only a shadow copy, which results in a new NT service, new tables (always empty), new GC SP and the same inbound/outbound SPs.
        /// </summary>
        /// <param name="fromInterface"></param>
        /// <param name="toInterfaceName"></param>
        /// <param name="toInterfaceDescription"></param>
        /// <returns></returns>
        public GCInterface CopyInterface(GCInterface fromInterface, string toInterfaceName, string toInterfaceDescription)
        {
            try
            {
                GCError.ClearLastError();
                if (fromInterface == null || string.IsNullOrEmpty(toInterfaceName))
                {
                    return(null);
                }
                string fromFolder = ConfigHelper.GetFullPath(fromInterface.FolderPath);
                if (!Directory.Exists(fromFolder))
                {
                    return(null);
                }

                // copy files

                string toPath   = Path.Combine(InterfacesFolder, toInterfaceName);
                string toFolder = ConfigHelper.GetFullPath(toPath);
                if (!Directory.Exists(toFolder))
                {
                    Directory.CreateDirectory(toFolder);
                }
                string sourceDirFile = Path.Combine(fromFolder, DeviceDirManager.IndexFileName);
                string targetDirFile = Path.Combine(toFolder, DeviceDirManager.IndexFileName);
                File.Copy(sourceDirFile, targetDirFile, true);

                int index = 0;
                NotifyStart(fromInterface.Directory.Files.Count + 2, 0, index++, "Copying files...");
                foreach (DeviceFile df in fromInterface.Directory.Files)
                {
                    string f          = df.Location;
                    string sourceFile = ConfigHelper.GetFullPath(fromFolder, f);
                    string fn         = ConfigHelper.GetRelativePath(fromFolder, sourceFile);
                    string targetFile = ConfigHelper.GetFullPath(toFolder, fn);
                    string path       = Path.GetDirectoryName(targetFile);
                    if (!Directory.Exists(path))
                    {
                        if (Directory.CreateDirectory(path) == null)
                        {
                            GCError.SetLastError("Cannot create folder " + path);
                            NotifyComplete(false, "");
                            return(null);
                        }
                    }
                    File.Copy(sourceFile, targetFile, true);
                    NotifyGoing(index++, "Copying files...");
                }

                // Update device dir

                GCInterface      i   = null;
                DeviceDirManager mgr = new DeviceDirManager(targetDirFile);
                if (mgr.LoadDeviceDir())
                {
                    mgr.DeviceDirInfor.Header.ID          = "0";
                    mgr.DeviceDirInfor.Header.Name        = toInterfaceName;
                    mgr.DeviceDirInfor.Header.Description = toInterfaceDescription;

                    // update interface name and description

                    if (!mgr.SaveDeviceDir())
                    {
                        GCError.SetLastError(mgr.LastError);
                        return(null);
                    }

                    // copy object

                    i                   = new GCInterface();
                    i.Directory         = mgr.DeviceDirInfor;
                    i.Device            = new GCDevice(mgr.DeviceDirInfor, toPath);
                    i.Device.DeviceID   = int.Parse(mgr.DeviceDirInfor.Header.RefDeviceID);
                    i.Device.DeviceName = mgr.DeviceDirInfor.Header.RefDeviceName;
                    i.InterfaceName     = toInterfaceName;
                    i.FolderPath        = toPath;

                    // AddInterfaceToDatabase & update interface ID to DeviceDir file.

                    if (!AddInterfaceToDatabase(i))
                    {
                        return(null);
                    }
                    NotifyGoing(index++, "Registering interface...");

                    // update service config

                    DeviceFile           df  = mgr.DeviceDirInfor.Files.FindFirstFile(DeviceFileType.ServiceConfig);
                    string               fn  = ConfigHelper.GetFullPath(toFolder, df.Location);
                    AdapterServiceCfgMgt mgt = new AdapterServiceCfgMgt(fn);
                    if (mgt.Load())
                    {
                        mgt.Config.ServiceName = toInterfaceName;
                        if (!mgt.Save())
                        {
                            GCError.SetLastError(mgt.LastError);
                            return(null);
                        }
                    }
                    else
                    {
                        GCError.SetLastError(mgt.LastError);
                        return(null);
                    }
                }
                else
                {
                    GCError.SetLastError(mgr.LastError);
                    return(null);
                }

                NotifyComplete(true, "Copy interface completed.");

                return(i);
            }
            catch (Exception err)
            {
                GCError.SetLastError(err);
                NotifyComplete(false, "Copy interface failed.");
                return(null);
            }
        }
Ejemplo n.º 21
0
    private static DeviceFile FromTcxV2_Base(XmlDocument Doc)
    {
        var ns = new XmlNamespaceManager(Doc.NameTable);

        ns.AddNamespace("tcd", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2");
        ns.AddNamespace("ae", "http://www.garmin.com/xmlschemas/ActivityExtension/v2");
        XMLParserHelper.Manager = ns;
        //var Activities = Doc.SelectNodes("/tcd:TrainingCenterDatabase/tcd:Activities/tcd:Activity", ns);
        var            Activities = Doc.GetElementsByTagName("Activity");
        DeviceActivity CurrentActivity;
        DeviceLap      CurrentLap;
        DevicePoint    CurrentPoint;
        DeviceCreator  CurrentCreator;
        DeviceAuthor   CurrentAuthor;
        XmlNode        WorkNode;
        XmlAttribute   WorkAttr;
        DateTime       dtTryParse;
        DateTimeOffset dtoTryParse;

        DeviceFile File = new DeviceFile();

        CurrentAuthor = new DeviceAuthor();
        File.Author   = CurrentAuthor;

        string VMajor, VMinor, BMajor, BMinor;

        CurrentAuthor.Name       = XMLParserHelper.SelectSingleTextString(Doc, "/tcd:TrainingCenterDatabase/tcd:Author/tcd:Name");
        CurrentAuthor.Language   = XMLParserHelper.SelectSingleTextString(Doc, "/tcd:TrainingCenterDatabase/tcd:Author/tcd:LangID");
        CurrentAuthor.PartNumber = XMLParserHelper.SelectSingleTextString(Doc, "/tcd:TrainingCenterDatabase/tcd:Author/tcd:PartNumber");
        VMajor = XMLParserHelper.SelectSingleTextString(Doc, "/tcd:TrainingCenterDatabase/tcd:Author/tcd:Build/tcd:Version/tcd:VersionMajor", "0");
        VMinor = XMLParserHelper.SelectSingleTextString(Doc, "/tcd:TrainingCenterDatabase/tcd:Author/tcd:Build/tcd:Version/tcd:VersionMinor", "0");
        BMajor = XMLParserHelper.SelectSingleTextString(Doc, "/tcd:TrainingCenterDatabase/tcd:Author/tcd:Build/tcd:Version/tcd:BuildMajor", "0");
        BMinor = XMLParserHelper.SelectSingleTextString(Doc, "/tcd:TrainingCenterDatabase/tcd:Author/tcd:Build/tcd:Version/tcd:BuildMinor", "0");
        CurrentAuthor.Version = VMajor + "." + VMinor + "." + BMajor + "." + BMinor;

        foreach (XmlNode Activity in Activities)
        {
            CurrentActivity = new DeviceActivity();
            File.Activities.Add(CurrentActivity);
            CurrentActivity.Id = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Id");
            if (CurrentActivity.Id != null && DateTimeOffset.TryParse(CurrentActivity.Id, out dtoTryParse))
            {
                //dtoTryParse = FSSecurity.Current.ToUserTime(dtoTryParse);
                dtTryParse = new DateTime(dtoTryParse.Year, dtoTryParse.Month, dtoTryParse.Day, dtoTryParse.Hour, dtoTryParse.Minute, dtoTryParse.Second);
                CurrentActivity.ActivityTime = dtTryParse;
            }
            CurrentActivity.Sport = XMLParserHelper.SelectSingleAttributeString(Activity, "Sport", "Unknown");

            CurrentCreator          = new DeviceCreator();
            CurrentActivity.Creator = CurrentCreator;

            CurrentCreator.Name      = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Creator/tcd:Name");
            CurrentCreator.UnitID    = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Creator/tcd:UnitId");
            CurrentCreator.ProductID = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Creator/tcd:ProductID");
            VMajor = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Creator/tcd:Version/tcd:VersionMajor", "0");
            VMinor = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Creator/tcd:Version/tcd:VersionMinor", "0");
            BMajor = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Creator/tcd:Version/tcd:BuildMajor", "0");
            BMinor = XMLParserHelper.SelectSingleTextString(Activity, "tcd:Creator/tcd:Version/tcd:BuildMinor", "0");
            CurrentCreator.Version = VMajor + "." + VMinor + "." + BMajor + "." + BMinor;
            var CreatorName = CurrentCreator.Name ?? "";
            var Laps        = Activity.SelectNodes("tcd:Lap", ns);
            var IsFirst     = true;
            foreach (XmlNode Lap in Laps)
            {
                var MyInt = XMLParserHelper.SelectSingleTextString(Lap, "tcd:Intensity", "");
                // This is for trailing resting tomtom laps that have zero distance and time
                if (MyInt.ToLower() == "resting" && CreatorName.ToLower().IndexOf("tomtom") >= 0)
                {
                    continue;
                }
                if (IsFirst)
                {
                    IsFirst = false;
                    var TestSeconds = XMLParserHelper.SelectSingleTextDecimal(Lap, "tcd:TotalTimeSeconds", null);
                    var TestDist    = XMLParserHelper.SelectSingleTextDecimal(Lap, "tcd:DistanceMeters", null);
                    if (TestSeconds == 0 && TestDist == 0)
                    {
                        continue;
                    }
                }
                CurrentLap = new DeviceLap();
                CurrentActivity.Laps.Add(CurrentLap);
                WorkAttr = Lap.Attributes["StartTime"];
                if (null != WorkAttr && null != CurrentActivity.ActivityTime && DateTimeOffset.TryParse(WorkAttr.Value, out dtoTryParse))
                {
                    //dtoTryParse = FSSecurity.Current.ToUserTime(dtoTryParse);
                    dtTryParse = new DateTime(dtoTryParse.Year, dtoTryParse.Month, dtoTryParse.Day, dtoTryParse.Hour, dtoTryParse.Minute, dtoTryParse.Second);
                    CurrentLap.StartSeconds = (dtTryParse - (CurrentActivity.ActivityTime ?? DateTime.Now)).TotalSeconds;
                }

                CurrentLap.Time         = XMLParserHelper.SelectSingleTextDecimal(Lap, "tcd:TotalTimeSeconds", null);
                CurrentLap.Distance     = XMLParserHelper.SelectSingleTextDecimal(Lap, "tcd:DistanceMeters", null);
                CurrentLap.SpeedAvg     = XMLParserHelper.SelectSingleTextDecimal(Lap, "tcd:Extensions/ae:LX/ae:AvgSpeed", null);
                CurrentLap.SpeedMax     = XMLParserHelper.SelectSingleTextDecimal(Lap, "tcd:MaximumSpeed", null);
                CurrentLap.Calories     = XMLParserHelper.SelectSingleTextInt(Lap, "tcd:Calories", null);
                CurrentLap.RPMAvg       = XMLParserHelper.SelectSingleTextInt(Lap, "tcd:Cadence", null);
                CurrentLap.RPMMax       = XMLParserHelper.SelectSingleTextInt(Lap, "tcd:Extensions/ae:LX/ae:MaxBikeCadence", null);
                CurrentLap.HeartRateAvg = XMLParserHelper.SelectSingleTextInt(Lap, "tcd:AverageHeartRateBpm/tcd:Value", null);
                CurrentLap.HeartRateMax = XMLParserHelper.SelectSingleTextInt(Lap, "tcd:MaximumHeartRateBpm/tcd:Value", null);
                CurrentLap.WattsAvg     = XMLParserHelper.SelectSingleTextInt(Lap, "tcd:Extensions/ae:LX/ae:AvgWatts", null);
                CurrentLap.WattsMax     = XMLParserHelper.SelectSingleTextInt(Lap, "tcd:Extensions/ae:LX/ae:MaxWatts", null);

                var         TrackPoints    = Lap.SelectNodes("tcd:Track/tcd:Trackpoint", ns);
                DevicePoint LastTrackPoint = null;
                foreach (XmlNode Point in TrackPoints)
                {
                    CurrentPoint = new DevicePoint();
                    CurrentLap.Track.Add(CurrentPoint);
                    WorkNode = Point.SelectSingleNode("tcd:Time", ns);
                    if (null != WorkNode && null != CurrentActivity.ActivityTime && DateTimeOffset.TryParse(WorkNode.InnerText, out dtoTryParse))
                    {
                        //dtoTryParse = FSSecurity.Current.ToUserTime(dtoTryParse);
                        dtTryParse = new DateTime(dtoTryParse.Year, dtoTryParse.Month, dtoTryParse.Day, dtoTryParse.Hour, dtoTryParse.Minute, dtoTryParse.Second);
                        CurrentPoint.StartSeconds = (dtTryParse - (CurrentActivity.ActivityTime ?? DateTime.Now)).TotalSeconds;
                    }

                    CurrentPoint.Latitude  = XMLParserHelper.SelectSingleTextDecimal(Point, "tcd:Position/tcd:LatitudeDegrees", null);
                    CurrentPoint.Longitude = XMLParserHelper.SelectSingleTextDecimal(Point, "tcd:Position/tcd:LongitudeDegrees", null);
                    CurrentPoint.Altitude  = XMLParserHelper.SelectSingleTextDecimal(Point, "tcd:AltitudeMeters", null);
                    CurrentPoint.Distance  = XMLParserHelper.SelectSingleTextDecimal(Point, "tcd:DistanceMeters", null);
                    CurrentPoint.HR        = XMLParserHelper.SelectSingleTextInt(Point, "tcd:HeartRateBpm/tcd:Value", null);
                    CurrentPoint.RPM       = XMLParserHelper.SelectSingleTextInt(Point, "tcd:Cadence", null);
                    CurrentPoint.CAD       = XMLParserHelper.SelectSingleTextInt(Point, "tcd:Extensions/ae:TPX/ae:RunCadence", null);
                    if (CurrentPoint.CAD != null)
                    {
                        CurrentPoint.CAD = CurrentPoint.CAD.Value * 2;
                    }
                    CurrentPoint.Speed = XMLParserHelper.SelectSingleTextDecimal(Point, "tcd:Extensions/ae:TPX/ae:Speed", null);
                    CurrentPoint.Watts = XMLParserHelper.SelectSingleTextInt(Point, "tcd:Extensions/ae:TPX/ae:Watts", null);
                    if (LastTrackPoint != null && CurrentPoint.Speed == null && (CurrentPoint.Distance != null && CurrentPoint.StartSeconds != null) && (LastTrackPoint.Distance != null && LastTrackPoint.StartSeconds != null))
                    {
                        // Last Distance and Time vs Current Distance and Time ->
                        var SecondDelta   = (decimal)(CurrentPoint.StartSeconds - LastTrackPoint.StartSeconds);
                        var DistanceDelta = CurrentPoint.Distance - LastTrackPoint.Distance;
                        if (SecondDelta == 0 || DistanceDelta == 0)
                        {
                            CurrentPoint.Speed = 0;
                        }
                        else
                        {
                            CurrentPoint.Speed = DistanceDelta / SecondDelta;
                        }
                    }
                    LastTrackPoint = CurrentPoint;
                }

                var CadencePoints = from x in CurrentLap.Track
                                    where x.CAD != null
                                    select x;
                if (CadencePoints.Any())
                {
                    var m = (from x in CadencePoints
                             select x.CAD).Max();
                    var a = (from x in CadencePoints
                             select x.CAD).Average();
                    CurrentLap.CADAvg = (int?)a;
                    CurrentLap.CADMax = (int?)m;
                }
            }
        }
        return(File);
    }
Ejemplo n.º 22
0
 public fmPartWizard(DeviceFile DevFile)
 {
     InitializeComponent();
     this.DevFile = DevFile;
     this.step    = 1;
 }
Ejemplo n.º 23
0
        public async Task <DeviceFile> HandleMultipartRequest()
        {
            var deviceFile = new DeviceFile();

            var boundary = MultipartRequestHelper.GetBoundary(
                MediaTypeHeaderValue.Parse(Request.ContentType),
                _defaultFormOptions.MultipartBoundaryLengthLimit);
            var reader = new MultipartReader(boundary, HttpContext.Request.Body);

            var section = await reader.ReadNextSectionAsync();

            while (section != null)
            {
                ContentDispositionHeaderValue contentDisposition;
                var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out contentDisposition);

                if (hasContentDispositionHeader)
                {
                    if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
                    {
                        await section.Body.CopyToAsync(deviceFile.memoryStream);

                        deviceFile.memoryStream.Seek(0, SeekOrigin.Begin);
                    }
                    else if (MultipartRequestHelper.HasFormDataContentDisposition(contentDisposition))
                    {
                        // Content-Disposition: form-data; name="key"
                        //
                        // value

                        // Do not limit the key name length here because the
                        // multipart headers length limit is already in effect.
                        var key      = HeaderUtilities.RemoveQuotes(contentDisposition.Name);
                        var encoding = GetEncoding(section);
                        using (var streamReader = new StreamReader(
                                   section.Body,
                                   encoding,
                                   detectEncodingFromByteOrderMarks: true,
                                   bufferSize: 1024,
                                   leaveOpen: true))
                        {
                            // The value length limit is enforced by MultipartBodyLengthLimit
                            var value = await streamReader.ReadToEndAsync();

                            if (String.Equals(value, "undefined", StringComparison.OrdinalIgnoreCase))
                            {
                                value = String.Empty;
                            }
                            deviceFile.formAccumulator.Append(key.Value, value);

                            if (deviceFile.formAccumulator.ValueCount > _defaultFormOptions.ValueCountLimit)
                            {
                                throw new InvalidDataException($"Form key count limit {_defaultFormOptions.ValueCountLimit} exceeded.");
                            }
                        }
                    }
                }

                // Drains any remaining section body that has not been consumed and
                // reads the headers for the next section.
                section = await reader.ReadNextSectionAsync();
            }
            return(deviceFile);
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Patches the device file to add new PIC24r2 scripts and support
        /// for various devices. Note that "PIC24r2" is not an official name,
        /// I made it to distinguish it from the regular PIC24 chips since they
        /// seem to have changed stuff.
        /// </summary>
        /// <param name="DevFile">The device file to patch</param>
        public static void PatchDeviceFile(DeviceFile DevFile)
        {
            //// 1. Duplicate 24F scripts and patch ////

            // Skip the script patching if they've already been patched
            if (DevFile.Scripts.Where(s => s.ScriptName.StartsWith("24r2_")).Count() == 0)
            {
                // Get the PIC24 scripts
                var    PIC24Scripts = DevFile.Scripts.Where(s => s.ScriptName.StartsWith("24_"));
                var    newScripts   = new List <DeviceFile.DeviceScripts>();
                ushort sidx         = (ushort)DevFile.Scripts.Length;

                foreach (var script in PIC24Scripts)
                {
                    DeviceFile.DeviceScripts newScript = script;

                    // Rename and re-index
                    sidx++;
                    newScript.ScriptName   = "24r2_" + newScript.ScriptName.Substring(3);
                    newScript.ScriptNumber = sidx;
                    newScript.Script       = (ushort[])newScript.Script.Clone();

                    // Patch the opcodes:
                    // TBLPAG address has changed from 0x32 to 0x54
                    // eg. MOV W0, TBLPAG instruction has changed from 0x880190 to 0x8802A0
                    List <DeviceFile.Opcode> opcodes = newScript.ParseScript();

                    foreach (DeviceFile.Opcode opcode in opcodes)
                    {
                        if ((OPCODES)opcode.opcode == OPCODES._COREINST24)
                        {
                            uint operand = (uint)(((uint)opcode.data[0] << 16) | ((uint)opcode.data[1] << 8) | opcode.data[2]);

                            // MOV W0, TBLPAG
                            // 88 01 90 -> 99 02 A0
                            if (operand == 0x880190)
                            {
                                int idx = opcode.index;

                                newScript.Script[idx + 2] = (ushort)((newScript.Script[idx + 2] & 0xFF00) | 0x02);
                                newScript.Script[idx + 1] = (ushort)((newScript.Script[idx + 1] & 0xFF00) | 0xA0);
                            }
                        }
                    }

                    newScripts.Add(newScript);
                }

                // Update DeviceFile
                DevFile.Scripts             = DevFile.Scripts.Concat(newScripts).ToArray();
                DevFile.Info.NumberScripts += newScripts.Count;
            }

            //// 2. Add new PIC24 family ////
            if (DevFile.Families.Where(f => f.FamilyName == "PIC24r2").Count() == 0)
            {
                var PIC24Family = DevFile.Families.First(f => f.FamilyName == "PIC24");

                DeviceFile.DeviceFamilyParams newFamily = PIC24Family;
                newFamily.FamilyName = "PIC24r2";
                newFamily.FamilyID   = (ushort)DevFile.Families.Length;
                newFamily.FamilyType = newFamily.FamilyID;

                // Assign new scripts
                newFamily.ProgEntryScript = DevFile.Scripts.First(s => s.ScriptName == "24r2_ProgEntry.1").ScriptNumber;
                newFamily.ReadDevIDScript = DevFile.Scripts.First(s => s.ScriptName == "24r2_RdDevID.1").ScriptNumber;

                // Update DeviceFile
                DevFile.Families = DevFile.Families.Concat(new DeviceFile.DeviceFamilyParams[1] {
                    newFamily
                }).ToArray();
                DevFile.Info.NumberFamilies++;
            }

            //// 3. Add new PIC24 chips ////
            var newParts = new List <DeviceFile.DevicePartParams>();

            foreach (var dev in devices)
            {
                // Make sure the chip doesn't already exist
                if (DevFile.PartsList.Where(p => p.PartName == dev.partName).Count() == 0)
                {
                    // Add a chip by template
                    newParts.Add(NewPart24r2(DevFile, basePart, dev.partName, dev));
                }
            }

            DevFile.PartsList         = DevFile.PartsList.Concat(newParts).ToArray();
            DevFile.Info.NumberParts += newParts.Count;
        }
Ejemplo n.º 25
0
        private void propertyGridFile_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            DeviceFile file = this.propertyGridFile.SelectedObject as DeviceFile;

            RefreshFileList(file);
        }
Ejemplo n.º 26
0
    private static DeviceFile FromGPXV1_Base(XmlDocument document, decimal lapIntervalMeters)
    {
        var nav = document.CreateNavigator();

        nav.MoveToFollowing(XPathNodeType.Element);
        if (nav == null)
        {
            throw new Exception("File Type Not Supported");
        }

        var namespaces = nav.GetNamespacesInScope(XmlNamespaceScope.Local);

        if (namespaces == null || !namespaces.Keys.Any())
        {
            throw new Exception("File Type Not Supported");
        }

        var namespacePrefixes =
            namespaces.Join(
                ValidNamespaces,
                o => o.Value.ToLower(),
                i => i.Value.ToLower(),
                (i, o) => new { Type = o.Key, Prefix = string.IsNullOrWhiteSpace(i.Key) ? "gpx" : i.Key, Url = o.Value })
            .ToList();

        var prefixGpx           = namespacePrefixes.Single(x => x.Type == NamespaceType.GPX).Prefix;
        var prefixTrackPointExt = namespacePrefixes.SingleOrDefault(x => x.Type == NamespaceType.TrackPointExtensions)?.Prefix;
        var prefixCluetrustExt  = namespacePrefixes.SingleOrDefault(x => x.Type == NamespaceType.CluetrustExtensions)?.Prefix;

        var namespaceManager = new XmlNamespaceManager(document.NameTable);

        namespacePrefixes.ForEach(x => namespaceManager.AddNamespace(x.Prefix, x.Url));
        XMLParserHelper.Manager = namespaceManager;

        var creator = new DeviceCreator
        {
            Name =
                XMLParserHelper.SelectSingleAttributeString(
                    document.DocumentElement,
                    "creator"),
            Version =
                XMLParserHelper.SelectSingleAttributeString(
                    document.DocumentElement,
                    "version")
        };

        var author = new DeviceAuthor {
            Name = creator.Name, Version = creator.Version
        };

        var file = new DeviceFile();

        file.Author = author;
        DateTimeOffset dtoFileTime;
        DateTime?      fileTime       = null;
        var            fileTimeString = XMLParserHelper.SelectSingleTextString(document, $"/{prefixGpx}:gpx/{prefixGpx}:metadata/{prefixGpx}:time");

        if (!string.IsNullOrWhiteSpace(fileTimeString) && DateTimeOffset.TryParse(fileTimeString, out dtoFileTime))
        {
            // TODO: dtoFileTime = FSSecurity.Current.ToUserTime(dtoFileTime);
            fileTime = dtoFileTime.DateTime;
        }

        // Walk through all tracks and assign to Activities; usually just 1...
        var activityNodes = document.GetElementsByTagName("trk");

        foreach (XmlNode activityNode in activityNodes)
        {
            var activity = new DeviceActivity();
            file.Activities.Add(activity);

            activity.Id           = XMLParserHelper.SelectSingleTextString(activityNode, $"{prefixGpx}:name");
            activity.Creator      = creator;
            activity.Sport        = XMLParserHelper.SelectSingleTextString(activityNode, $"{prefixGpx}:type", "Unknown");
            activity.ActivityTime = fileTime;

            // Parse entire list of track points...
            var allTrackPoints  = new List <DevicePoint>();
            var trackPointNodes = activityNode.SelectNodes($"{prefixGpx}:trkseg/{prefixGpx}:trkpt", namespaceManager);
            if (trackPointNodes != null)
            {
                DateTime?activityStartTimeUtc = null;
                foreach (XmlNode trackPointNode in trackPointNodes)
                {
                    var point        = new DevicePoint();
                    var pointTimeUtc = XMLParserHelper.SelectSingleTextDateTime(trackPointNode, $"{prefixGpx}:time");
                    if (pointTimeUtc != null)
                    {
                        if (activityStartTimeUtc == null)
                        {
                            activityStartTimeUtc = pointTimeUtc;
                            point.StartSeconds   = 0;
                            point.Distance       = 0;
                        }
                        else
                        {
                            point.StartSeconds = (pointTimeUtc.Value - activityStartTimeUtc.Value.AddSeconds(1)).TotalSeconds;
                        }
                    }

                    // Parse latitude / longitude...
                    point.Latitude  = XMLParserHelper.SelectSingleAttributeDecimal(trackPointNode, "lat");
                    point.Longitude = XMLParserHelper.SelectSingleAttributeDecimal(trackPointNode, "lon");

                    // Parse altitude...
                    point.Altitude = XMLParserHelper.SelectSingleTextDecimal(
                        trackPointNode,
                        $"{prefixGpx}:ele");

                    // Parse TrackPoint extension data...
                    if (prefixTrackPointExt != null)
                    {
                        // Parse heart rate...
                        point.HR = XMLParserHelper.SelectSingleTextInt(
                            trackPointNode,
                            $"{prefixGpx}:extensions/{prefixTrackPointExt}:TrackPointExtension/{prefixTrackPointExt}:hr");

                        // Parse ambient temp...
                        point.Temp = XMLParserHelper.SelectSingleTextInt(
                            trackPointNode,
                            $"{prefixGpx}:extensions/{prefixTrackPointExt}:TrackPointExtension/{prefixTrackPointExt}:atemp");

                        // Parse cadence...
                        point.CAD = XMLParserHelper.SelectSingleTextInt(
                            trackPointNode,
                            $"{prefixGpx}:extensions/{prefixTrackPointExt}:TrackPointExtension/{prefixTrackPointExt}:cad");
                    }

                    // Parse Cluetrust extension data...
                    if (prefixCluetrustExt != null)
                    {
                        // Parse heart rate...
                        if (point.HR == null)
                        {
                            point.HR = XMLParserHelper.SelectSingleTextInt(trackPointNode, $"{prefixGpx}:extensions/{prefixCluetrustExt}:hr");
                        }

                        // Parse ambient temp...
                        if (point.Temp == null)
                        {
                            point.Temp = XMLParserHelper.SelectSingleTextInt(trackPointNode, $"{prefixGpx}:extensions/{prefixCluetrustExt}:temp");
                        }

                        // Parse cadence...
                        if (point.CAD == null)
                        {
                            point.CAD = XMLParserHelper.SelectSingleTextInt(trackPointNode, $"{prefixGpx}:extensions/{prefixCluetrustExt}:cadence");
                        }
                    }

                    // Parse any generic extensions data...
                    // Parse heart rate...
                    if (point.HR == null)
                    {
                        point.HR = XMLParserHelper.SelectSingleTextInt(trackPointNode, $"{prefixGpx}:extensions/{prefixGpx}:heartrate");
                    }

                    // Parse cadence...
                    if (point.CAD == null)
                    {
                        point.CAD = XMLParserHelper.SelectSingleTextInt(trackPointNode, $"{prefixGpx}:extensions/{prefixGpx}:cadence");
                    }

                    // Parse distance...
                    if (point.Distance == null)
                    {
                        point.Distance = XMLParserHelper.SelectSingleTextDecimal(trackPointNode, $"{prefixGpx}:extensions/{prefixGpx}:distance");
                    }

                    // Parse power...
                    if (point.Watts == null)
                    {
                        point.Watts = XMLParserHelper.SelectSingleTextInt(trackPointNode, $"{prefixGpx}:extensions/{prefixGpx}:power");
                    }

                    // Multiply CAD result x 2 like in TCX?
                    // TODO: Bike no...Run yes?
                    if (point.CAD != null)
                    {
                        point.CAD = point.CAD * 2;
                    }

                    allTrackPoints.Add(point);
                }
            }

            // Re-run through point list to calculate distances and break up into laps...
            var pointsHaveTimeInfo = allTrackPoints.All(p => p.StartSeconds.HasValue);
            var lapList            = new List <DeviceLap>();
            var currentLap         = new DeviceLap {
                StartSeconds = pointsHaveTimeInfo ? (double?)0 : null
            };
            for (var i = 1; i < allTrackPoints.Count; i++)
            {
                var currentPoint  = allTrackPoints[i];
                var previousPoint = allTrackPoints[i - 1];

                if (currentLap.Track.Count == 0)
                {
                    var previousLap = activity.Laps.LastOrDefault();
                    if (previousLap != null && pointsHaveTimeInfo)
                    {
                        previousLap.Time = (decimal)(currentPoint.StartSeconds.Value - previousLap.StartSeconds.Value);
                    }

                    activity.Laps.Add(currentLap);
                }

                decimal?currentPointDistanceDelta = null;
                if (currentPoint.Distance == null)
                {
                    if (currentPoint.Latitude == null ||
                        currentPoint.Longitude == null ||
                        previousPoint.Latitude == null ||
                        previousPoint.Longitude == null)
                    {
                        continue;
                    }

                    var distanceKm = HaversineInKM(
                        (double)previousPoint.Latitude.Value,
                        (double)previousPoint.Longitude.Value,
                        (double)currentPoint.Latitude.Value,
                        (double)currentPoint.Longitude.Value);

                    currentPointDistanceDelta = (decimal)(distanceKm * 1000.0);
                    currentPoint.Distance     = currentPointDistanceDelta + (previousPoint.Distance ?? 0);
                }

                if (i == 1)
                {
                    previousPoint.Distance = previousPoint.Distance ?? 0;
                    currentLap.Track.Add(previousPoint);
                }

                currentLap.Track.Add(currentPoint);

                if (pointsHaveTimeInfo)
                {
                    var startSecondsDelta = (decimal)(currentPoint.StartSeconds.Value - previousPoint.StartSeconds.Value);
                    startSecondsDelta = startSecondsDelta == 0 ? 1 : startSecondsDelta;

                    currentPointDistanceDelta = currentPointDistanceDelta ?? currentPoint.Distance - previousPoint.Distance;
                    currentPoint.Speed        = currentPointDistanceDelta / startSecondsDelta;

                    if (currentLap.StartSeconds == null)
                    {
                        currentLap.StartSeconds = currentPoint.StartSeconds;
                    }
                }

                currentLap.Distance = currentLap.Track.Last().Distance.Value - currentLap.Track.First().Distance.Value;
                if (currentLap.Distance.Value < lapIntervalMeters)
                {
                    continue;
                }

                // Reached the end of the lap, start a new one...
                currentLap = new DeviceLap {
                    StartSeconds = currentLap.Track.Last().StartSeconds
                };
            }

            // Calculate Time for last lap...
            var lastLap = activity.Laps.Last();
            if (pointsHaveTimeInfo)
            {
                lastLap.Time = (decimal)(lastLap.Track.Last().StartSeconds.Value - lastLap.Track.First().StartSeconds.Value);
            }

            // Loop through resulting laps to calculate Time and remaining aggregates...
            activity.Laps.ForEach(lap =>
            {
                // Calculate HRMax and HRAvg from lap's collection of HR points...
                var hrPoints     = lap.Track.Where(t => t.HR != null).Select(x => x.HR.Value).ToList();
                lap.HeartRateMax = hrPoints.Any() ? (int?)hrPoints.Max() : null;
                lap.HeartRateAvg = hrPoints.Any() ? (int?)hrPoints.Average() : null;

                // Calculate CADMax and CADAvg from lap's collection of CAD points...
                var cadPoints = lap.Track.Where(t => t.CAD != null).Select(x => x.CAD.Value).ToList();
                lap.CADMax    = cadPoints.Any() ? (int?)cadPoints.Max() : null;
                lap.CADAvg    = cadPoints.Any() ? (int?)cadPoints.Average() : null;

                // Calculate TempMax and TempAvg from lap's collection of Temp points...
                var tempPoints = lap.Track.Where(t => t.Temp != null).Select(x => x.Temp.Value).ToList();
                lap.TempMax    = tempPoints.Any() ? (int?)tempPoints.Max() : null;
                lap.TempAvg    = tempPoints.Any() ? (int?)tempPoints.Average() : null;

                // Calculage SpeedMax and SpeedAvg from lap's collection of points...
                var speedPoints = lap.Track.Where(t => t.Speed != null).Select(x => x.Speed.Value).ToList();
                lap.SpeedMax    = speedPoints.Any() ? (decimal?)speedPoints.Max() : null;
                lap.SpeedAvg    = speedPoints.Any() ? (decimal?)speedPoints.Average() : null;
            });
        }

        return(file);
    }
Ejemplo n.º 27
0
        static void Main(string[] args)
        {
            const string outputDir         = @"..\..\..\Output";
            decimal      lapIntervalMeters = 1000;
            var          gpxFiles          = new List <string>
            {
                @"..\..\..\GPXFiles\activity_1358503471.gpx",
                @"..\..\..\GPXFiles\Morning_Ride.gpx",
                @"..\..\..\GPXFiles\Evening_Run.gpx",
                @"..\..\..\GPXFiles\Morning_Run.gpx",
                @"..\..\..\GPXFiles\Cone Peak.gpx"
            };

            var serializer  = new XmlSerializer(typeof(DeviceFile));
            var deviceFiles = gpxFiles.ToDictionary(f => Path.GetFileNameWithoutExtension(f), f => DeviceFile.FromGpx(f, lapIntervalMeters));

            deviceFiles.Keys.ToList().ForEach(k =>
            {
                var first = true;
                var idx   = 2;
                deviceFiles[k].ToList().ForEach(file =>
                {
                    var filenameSuffix = first ? string.Empty : (idx++).ToString();
                    var outputFile     = Path.Combine(outputDir, $"{k}{filenameSuffix}.xml");

                    using (TextWriter writer = new StreamWriter(outputFile))
                    {
                        serializer.Serialize(writer, file);
                    }

                    first = false;
                });
            });

            Console.WriteLine("\n\nPress any key to continue...");
            Console.ReadKey();
        }