예제 #1
0
        /// <summary>
        /// Try BundlePath first, then arm manifest, then cygwin on server
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        private async Task <string> CheckandGetSITLImage(string filename)
        {
            if (BundledPath != "")
            {
                filename = filename.Replace(".elf", "");
                var file = filename;
                if (!File.Exists(BundledPath + System.IO.Path.DirectorySeparatorChar + file))
                {
                    string[] checks = new string[] { "{0}", "{0}.exe", "lib{0}.so", "{0}.so", "{0}.elf" };

                    foreach (var template in checks)
                    {
                        file = String.Format(template, filename);
                        if (File.Exists(BundledPath + System.IO.Path.DirectorySeparatorChar + file))
                        {
                            return(BundledPath + System.IO.Path.DirectorySeparatorChar + file);
                        }
                        file = file.ToLower();
                        if (File.Exists(BundledPath + System.IO.Path.DirectorySeparatorChar + file))
                        {
                            return(BundledPath + System.IO.Path.DirectorySeparatorChar + file);
                        }
                    }
                }

                return("");
            }

            if ((RuntimeInformation.OSArchitecture == Architecture.X64 ||
                 RuntimeInformation.OSArchitecture == Architecture.X86) && RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                var type = APFirmware.MAV_TYPE.Copter;
                if (filename.ToLower().Contains("copter"))
                {
                    type = APFirmware.MAV_TYPE.Copter;
                }
                if (filename.ToLower().Contains("plane"))
                {
                    type = APFirmware.MAV_TYPE.FIXED_WING;
                }
                if (filename.ToLower().Contains("rover"))
                {
                    type = APFirmware.MAV_TYPE.GROUND_ROVER;
                }
                if (filename.ToLower().Contains("heli"))
                {
                    type = APFirmware.MAV_TYPE.HELICOPTER;
                }

                var fw = APFirmware.GetOptions(new DeviceInfo()
                {
                    board = "", hardwareid = ""
                }, APFirmware.RELEASE_TYPES.OFFICIAL, type);
                fw = fw.Where(a => a.Platform == "SITL_x86_64_linux_gnu").ToList();
                if (fw.Count > 0)
                {
                    var path = sitldirectory + Path.GetFileNameWithoutExtension(filename);
                    if (!chk_skipdownload.Checked)
                    {
                        Download.getFilefromNet(fw.First().Url.AbsoluteUri, path);
                        try
                        {
                            int _0755 = S_IRUSR | S_IXUSR | S_IWUSR
                                        | S_IRGRP | S_IXGRP
                                        | S_IROTH | S_IXOTH;

                            chmod(path, _0755);
                        }
                        catch (Exception ex)
                        {
                            log.Error(ex);
                        }
                    }
                    return(path);
                }
            }

            if (RuntimeInformation.OSArchitecture == Architecture.Arm ||
                RuntimeInformation.OSArchitecture == Architecture.Arm64)
            {
                var type = APFirmware.MAV_TYPE.Copter;
                if (filename.ToLower().Contains("copter"))
                {
                    type = APFirmware.MAV_TYPE.Copter;
                }
                if (filename.ToLower().Contains("plane"))
                {
                    type = APFirmware.MAV_TYPE.FIXED_WING;
                }
                if (filename.ToLower().Contains("rover"))
                {
                    type = APFirmware.MAV_TYPE.GROUND_ROVER;
                }
                if (filename.ToLower().Contains("heli"))
                {
                    type = APFirmware.MAV_TYPE.HELICOPTER;
                }

                var fw = APFirmware.GetOptions(new DeviceInfo()
                {
                    board = "", hardwareid = ""
                }, APFirmware.RELEASE_TYPES.OFFICIAL, type);
                fw = fw.Where(a => a.Platform == "SITL_arm_linux_gnueabihf").ToList();
                if (fw.Count > 0)
                {
                    var path = sitldirectory + Path.GetFileNameWithoutExtension(filename);
                    if (!chk_skipdownload.Checked)
                    {
                        Download.getFilefromNet(fw.First().Url.AbsoluteUri, path);
                        try {
                            int _0755 = S_IRUSR | S_IXUSR | S_IWUSR
                                        | S_IRGRP | S_IXGRP
                                        | S_IROTH | S_IXOTH;

                            chmod(path, _0755);
                        }
                        catch (Exception ex)
                        {
                            log.Error(ex);
                        }
                    }
                    return(path);
                }
            }

            if (!chk_skipdownload.Checked)
            {
                // kill old session - so we can overwrite if needed
                try
                {
                    simulator.ForEach(a =>
                    {
                        try
                        {
                            a.Kill();
                        }
                        catch { }
                    });
                }
                catch
                {
                }

                var url    = sitlmasterurl;
                var result = CustomMessageBox.Show("Select the version you want to use?", "Select your version", CustomMessageBox.MessageBoxButtons.YesNo, CustomMessageBox.MessageBoxIcon.Question, "Latest(Dev)", "Stable");

                if (result == CustomMessageBox.DialogResult.Yes)
                {
                    // master by default
                }
                else if (result == CustomMessageBox.DialogResult.No)
                {
                    if (filename.ToLower().Contains("copter"))
                    {
                        url = sitlcopterstableurl;
                    }
                    if (filename.ToLower().Contains("rover"))
                    {
                        url = sitlroverstableurl;
                    }
                    if (filename.ToLower().Contains("plane"))
                    {
                        url = sitlplanestableurl;
                    }
                }

                Uri fullurl = new Uri(url, filename);

                var load = Common.LoadingBox("Downloading", "Downloading sitl software");

                var t1 = Download.getFilefromNetAsync(fullurl.ToString(),
                                                      sitldirectory + Path.GetFileNameWithoutExtension(filename) + ".exe");

                load.Refresh();

                var files = new string[] { "cygatomic-1.dll",
                                           "cyggcc_s-1.dll",
                                           "cyggomp-1.dll",
                                           "cygquadmath-0.dll",
                                           "cygssp-0.dll",
                                           "cygstdc++-6.dll",
                                           "cygwin1.dll" };

                // dependancys

                Parallel.ForEach(files, new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 2
                }, (a, b) =>
                {
                    var depurl = new Uri(url, a);
                    var t2     = Download.getFilefromNet(depurl.ToString(), sitldirectory + depurl.Segments[depurl.Segments.Length - 1]);
                });

                await t1;

                load.Close();
            }

            return(sitldirectory + Path.GetFileNameWithoutExtension(filename) + ".exe");
        }
예제 #2
0
        /// <summary>
        /// Try BundlePath first, then arm manifest, then cygwin on server
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        private async Task <string> CheckandGetSITLImage(string filename)
        {
            if (BundledPath != "")
            {
                filename = filename.Replace(".elf", "");
                var file = filename;
                if (!File.Exists(BundledPath + System.IO.Path.DirectorySeparatorChar + file))
                {
                    string[] checks = new string[] { "{0}", "{0}.exe", "lib{0}.so", "{0}.so", "{0}.elf" };

                    foreach (var template in checks)
                    {
                        file = String.Format(template, filename);
                        if (File.Exists(BundledPath + System.IO.Path.DirectorySeparatorChar + file))
                        {
                            return(BundledPath + System.IO.Path.DirectorySeparatorChar + file);
                        }
                        file = file.ToLower();
                        if (File.Exists(BundledPath + System.IO.Path.DirectorySeparatorChar + file))
                        {
                            return(BundledPath + System.IO.Path.DirectorySeparatorChar + file);
                        }
                    }
                }

                return("");
            }

            if (RuntimeInformation.OSArchitecture == Architecture.Arm ||
                RuntimeInformation.OSArchitecture == Architecture.Arm64)
            {
                var type = APFirmware.MAV_TYPE.Copter;
                if (filename.ToLower().Contains("copter"))
                {
                    type = APFirmware.MAV_TYPE.Copter;
                }
                if (filename.ToLower().Contains("plane"))
                {
                    type = APFirmware.MAV_TYPE.FIXED_WING;
                }
                if (filename.ToLower().Contains("rover"))
                {
                    type = APFirmware.MAV_TYPE.GROUND_ROVER;
                }
                if (filename.ToLower().Contains("heli"))
                {
                    type = APFirmware.MAV_TYPE.HELICOPTER;
                }

                var fw = APFirmware.GetOptions(new DeviceInfo()
                {
                    board = "", hardwareid = ""
                }, APFirmware.RELEASE_TYPES.OFFICIAL, type);
                fw = fw.Where(a => a.Platform == "SITL_arm_linux_gnueabihf").ToList();
                if (fw.Count > 0)
                {
                    if (!chk_skipdownload.Checked)
                    {
                        Download.getFilefromNetAsync(fw.First().Url.AbsoluteUri, sitldirectory + Path.GetFileNameWithoutExtension(filename));
                    }
                    return(sitldirectory + Path.GetFileNameWithoutExtension(filename));
                }
            }

            if (!chk_skipdownload.Checked)
            {
                Uri fullurl = new Uri(sitlurl, filename);

                var load = Common.LoadingBox("Downloading", "Downloading sitl software");

                var t1 = Download.getFilefromNetAsync(fullurl.ToString(),
                                                      sitldirectory + Path.GetFileNameWithoutExtension(filename) + ".exe");

                load.Refresh();

                var files = new string[] { "cygatomic-1.dll",
                                           "cyggcc_s-1.dll",
                                           "cyggomp-1.dll",
                                           "cygquadmath-0.dll",
                                           "cygssp-0.dll",
                                           "cygstdc++-6.dll",
                                           "cygwin1.dll" };

                // dependancys

                Parallel.ForEach(files, new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 2
                }, (a, b) =>
                {
                    var depurl = new Uri(sitlurl, a);
                    var t2     = Download.getFilefromNet(depurl.ToString(), sitldirectory + depurl.Segments[depurl.Segments.Length - 1]);
                });

                load.Close();
            }

            return(sitldirectory + Path.GetFileNameWithoutExtension(filename) + ".exe");
        }