/// <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"); }
/// <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"); }