private void pdr_DoWork(IProgressReporterDialogue sender) { //if ((int)REL_Type == 99) { var fw = new Firmware(); fw.Progress -= fw_Progress1; fw.Progress += fw_ProgressPDR; softwares = fw.getFWList(firmwareurl, REL_Type); foreach (var soft in softwares) { if (sender.doWorkArgs.CancelRequested) { sender.doWorkArgs.CancelAcknowledged = true; return; } updateDisplayNameInvoke(soft); } return; } try { APFirmware.GetList(); var official = APFirmware.GetRelease(REL_Type); var before = softwares.ToJSON(); softwares = ConvertToOld(official); var after = softwares.ToJSON(); } catch { } foreach (var soft in softwares) { if (sender.doWorkArgs.CancelRequested) { sender.doWorkArgs.CancelAcknowledged = true; return; } updateDisplayNameInvoke(soft); } }
public Firmware() { InitializeComponent(); quad.CommandParameter = APFirmware.MAV_TYPE.Copter; rover.CommandParameter = APFirmware.MAV_TYPE.GROUND_ROVER; plane.CommandParameter = APFirmware.MAV_TYPE.FIXED_WING; sub.CommandParameter = APFirmware.MAV_TYPE.SUBMARINE; heli.CommandParameter = APFirmware.MAV_TYPE.HELICOPTER; antennatracker.CommandParameter = APFirmware.MAV_TYPE.ANTENNA_TRACKER; quad.ImageSource = ImageSource.FromStream(() => Xamarin.Properties.Resources.FW_icons_2013_logos_04.ToMemoryStream()); rover.ImageSource = ImageSource.FromStream(() => Xamarin.Properties.Resources.rover_11.ToMemoryStream()); plane.ImageSource = ImageSource.FromStream(() => Xamarin.Properties.Resources.APM_airframes_001.ToMemoryStream()); sub.ImageSource = ImageSource.FromStream(() => Xamarin.Properties.Resources.sub.ToMemoryStream()); heli.ImageSource = ImageSource.FromStream(() => Xamarin.Properties.Resources.APM_airframes_08.ToMemoryStream()); antennatracker.ImageSource = ImageSource.FromStream(() => Xamarin.Properties.Resources.Antenna_Tracker_01.ToMemoryStream()); Task.Run(() => { APFirmware.GetList(); var options = APFirmware.GetRelease(APFirmware.RELEASE_TYPES.OFFICIAL); // get max version for each mavtype options = options.GroupBy(b => b.MavType).Select(a => a.Where(b => a.Key == b.MavType && b.MavFirmwareVersion == a.Max(c => c.MavFirmwareVersion)) .FirstOrDefault()).ToList(); UpdateIconName(antennatracker, options.First(a => a.MavType == APFirmware.MAV_TYPE.ANTENNA_TRACKER.ToString())); UpdateIconName(heli, options.First(a => a.MavType == APFirmware.MAV_TYPE.HELICOPTER.ToString())); UpdateIconName(sub, options.First(a => a.MavType == APFirmware.MAV_TYPE.SUBMARINE.ToString())); UpdateIconName(rover, options.First(a => a.MavType == APFirmware.MAV_TYPE.GROUND_ROVER.ToString())); UpdateIconName(quad, options.First(a => a.MavType == APFirmware.MAV_TYPE.Copter.ToString())); UpdateIconName(plane, options.First(a => a.MavType == APFirmware.MAV_TYPE.FIXED_WING.ToString())); SetLoading(false); }); }
public void Activate() { MainV2.instance.DeviceChanged -= Instance_DeviceChanged; MainV2.instance.DeviceChanged += Instance_DeviceChanged; this.Enabled = false; flashdone = false; Task.Run(() => { APFirmware.GetList("https://firmware.oborne.me/manifest.json.gz"); var options = APFirmware.GetRelease(REL_Type); // get max version for each mavtype options = options.GroupBy(b => b.MavType).Select(a => a.Where(b => a.Key == b.MavType && b.MavFirmwareVersion == a.Max(c => c.MavFirmwareVersion)) .FirstOrDefault()).ToList(); UpdateIconName(pictureAntennaTracker, options.First(a => a.MavType == APFirmware.MAV_TYPE.ANTENNA_TRACKER.ToString())); UpdateIconName(pictureBoxHeli, options.First(a => a.MavType == APFirmware.MAV_TYPE.HELICOPTER.ToString())); UpdateIconName(pictureBoxSub, options.First(a => a.MavType == APFirmware.MAV_TYPE.SUBMARINE.ToString())); UpdateIconName(pictureBoxRover, options.First(a => a.MavType == APFirmware.MAV_TYPE.GROUND_ROVER.ToString())); UpdateIconName(pictureBoxOctaQuad, options.First(a => a.MavType == APFirmware.MAV_TYPE.Copter.ToString())); UpdateIconName(pictureBoxOcta, options.First(a => a.MavType == APFirmware.MAV_TYPE.Copter.ToString())); UpdateIconName(pictureBoxY6, options.First(a => a.MavType == APFirmware.MAV_TYPE.Copter.ToString())); UpdateIconName(pictureBoxTri, options.First(a => a.MavType == APFirmware.MAV_TYPE.Copter.ToString())); UpdateIconName(pictureBoxHexa, options.First(a => a.MavType == APFirmware.MAV_TYPE.Copter.ToString())); UpdateIconName(pictureBoxQuad, options.First(a => a.MavType == APFirmware.MAV_TYPE.Copter.ToString())); UpdateIconName(pictureBoxPlane, options.First(a => a.MavType == APFirmware.MAV_TYPE.FIXED_WING.ToString())); }); }
private void LookForPort(APFirmware.MAV_TYPE mavtype, bool alloptions = false) { var ports = Win32DeviceMgmt.GetAllCOMPorts(); if (alloptions) { ports.Add(default(ArduPilot.DeviceInfo)); } foreach (var deviceInfo in ports) { long?devid = detectedboardid; // make best guess at board_id based on usb info if (!devid.HasValue) { devid = APFirmware.GetBoardID(deviceInfo); } if (devid.HasValue && devid.Value != 0 || alloptions == true) { log.InfoFormat("{0}: {1} - {2}", deviceInfo.name, deviceInfo.description, deviceInfo.board); var baseurl = ""; // get the options for this device var fwitems = APFirmware.Manifest.Firmware.Where(a => a.BoardId == devid && a.MavType == mavtype.ToString() && a.MavFirmwareVersionType == REL_Type.ToString()).ToList(); if (alloptions) { fwitems = APFirmware.Manifest.Firmware.ToList(); } if (fwitems?.Count == 1) { baseurl = fwitems[0].Url.ToString(); } else if (fwitems?.Count > 0) { FirmwareSelection fws = new FirmwareSelection(fwitems, deviceInfo); fws.ShowXamarinControl(550, 400); baseurl = fws.FinalResult; if (fws.FinalResult == null) { // user canceled return; } } else { CustomMessageBox.Show(Strings.No_firmware_available_for_this_board, Strings.ERROR); } var tempfile = Path.GetTempFileName(); try { // update to use mirror url log.Info("Using " + baseurl); var starttime = DateTime.Now; // Create a request using a URL that can receive a post. WebRequest request = WebRequest.Create(baseurl); if (!String.IsNullOrEmpty(Settings.Instance.UserAgent)) { ((HttpWebRequest)request).UserAgent = Settings.Instance.UserAgent; } request.Timeout = 10000; // Set the Method property of the request to POST. request.Method = "GET"; // Get the request stream. Stream dataStream; //= request.GetRequestStream(); // Get the response (using statement is exception safe) using (WebResponse response = request.GetResponse()) { // Display the status. log.Info(((HttpWebResponse)response).StatusDescription); // Get the stream containing content returned by the server. using (dataStream = response.GetResponseStream()) { long bytes = response.ContentLength; long contlen = bytes; byte[] buf1 = new byte[1024]; using (FileStream fs = new FileStream(tempfile, FileMode.Create)) { fw_Progress1(0, Strings.DownloadingFromInternet); long length = response.ContentLength; long progress = 0; dataStream.ReadTimeout = 30000; while (dataStream.CanRead) { try { fw_Progress1(length == 0 ? 50 : (int)((progress * 100) / length), Strings.DownloadingFromInternet); } catch { } int len = dataStream.Read(buf1, 0, 1024); if (len == 0) { break; } progress += len; bytes -= len; fs.Write(buf1, 0, len); } fs.Close(); } dataStream.Close(); } response.Close(); } var timetook = (DateTime.Now - starttime).TotalMilliseconds; Tracking.AddTiming("Firmware Download", deviceInfo.board, timetook, deviceInfo.description); fw_Progress1(100, Strings.DownloadedFromInternet); log.Info("Downloaded"); } catch { CustomMessageBox.Show(Strings.FailedDownload, Strings.ERROR); return; } MissionPlanner.Utilities.Tracking.AddFW(mavtype.ToString(), deviceInfo.board); var fw = new Firmware(); fw.Progress += fw_Progress1; var uploadstarttime = DateTime.Now; flashdone = true; fw.UploadFlash(deviceInfo.name, tempfile, BoardDetect.boards.pass); var uploadtime = (DateTime.Now - uploadstarttime).TotalMilliseconds; Tracking.AddTiming("Firmware Upload", deviceInfo.board, uploadtime, deviceInfo.description); return; } else { CustomMessageBox.Show("Failed to discover board id. Please reconnect via usb and try again.", Strings.ERROR); return; } } CustomMessageBox.Show("Failed to detect port to upload to", Strings.ERROR); return; }
private async Task LookForPort(APFirmware.MAV_TYPE mavtype) { var ports = await Test.UsbDevices.GetDeviceInfoList().ConfigureAwait(false); foreach (var deviceInfo in ports) { long?devid = detectedboardid; // make best guess at board_id based on usb info if (!devid.HasValue) { devid = APFirmware.GetBoardID(deviceInfo); } if (devid.HasValue && devid.Value != 0) { log.InfoFormat("{0}: {1} - {2}", deviceInfo.name, deviceInfo.description, deviceInfo.board); var baseurl = ""; // get the options for this device var fwitems = APFirmware.Manifest.Firmware.Where(a => a.BoardId == devid && a.MavType == mavtype.ToString() && a.MavFirmwareVersionType == REL_Type.ToString()).ToList(); if (fwitems?.Count == 1) { baseurl = fwitems[0].Url.ToString(); await DownloadAndUpload(baseurl).ConfigureAwait(false); } else if (fwitems?.Count > 0) { FirmwareSelection fws = new FirmwareSelection(fwitems, deviceInfo); fws.CloseAction += async() => { Navigation.PopModalAsync(); baseurl = fws.FinalResult; await DownloadAndUpload(baseurl).ConfigureAwait(false); return; }; await this.Navigation.PushModalAsync(fws).ConfigureAwait(false); Debug.WriteLine(fws.FinalResult); baseurl = fws.FinalResult; if (fws.FinalResult == null) { // user canceled return; } } else { CustomMessageBox.Show(Strings.No_firmware_available_for_this_board, Strings.ERROR); return; } return; } else { CustomMessageBox.Show("Failed to discover board id. Please reconnect via usb and try again.", Strings.ERROR); return; } } CustomMessageBox.Show("Failed to detect port to upload to", Strings.ERROR); return; }
/// <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"); }
private void prev() { // check validation of port. string comport = ""; var item = this.ComBoDefault.SelectedItem; if (item is null) { MessageBox.Show("no Comport"); return; } comport = item.ToString(); string filename_fw = comport; if (this.RButtonCustom.Checked) { filename_fw = comport; } // firmware binding. APFirmware firmware; try { this.RichTextProgress.Text = "Load firmware..."; firmware = APFirmware.LoadFirmware(filename_fw); StringBuilder sb = new StringBuilder(); sb.AppendLine($"Board id : {firmware.BoardId}"); sb.AppendLine($"Board revision : {firmware.BoardRevision}"); sb.AppendLine($"Summary : {firmware.Summary}"); sb.AppendLine($"Version : {firmware.Version}"); this.RichTextProgress.Text += "\n" + sb.ToString(); } catch (Exception ex) { this.RichTextProgress.Text += $"\nInvalid firmware. {ex.Message}"; return; } // detect board bl = new ArduPilotBL(comport); try { bl.Initialize(); StringBuilder sb = new StringBuilder(); sb.AppendLine(""); sb.AppendLine($"BL_REV : {bl.BootLoaderRevision}"); sb.AppendLine($"BoardId : {bl.BoardId}"); sb.AppendLine($"BoardRevision : {bl.BoardRevision}"); sb.AppendLine($"FirmwareMaxsize : {bl.FirmwareMaxsize}"); sb.AppendLine($"Chip : {bl.Chip}"); sb.AppendLine($"ChipDesc : {bl.ChipDesc}"); this.RichTextProgress.Text += sb.ToString(); } catch (Exception ex) { this.RichTextProgress.Text += $"\n{ex.Message}"; return; } try { this.RichTextProgress.Text += "\nStart installation..."; bl.ProgressEvent += this.Progress; bl.Install(firmware, true); bl.ProgressEvent -= this.Progress; this.RichTextProgress.Text += "\nComplete..."; } catch (Exception ex) { this.RichTextProgress.Text += $"\nInstallation failed. {ex.Message}"; return; throw; } }
/// <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"); }