/// <summary> /// Do full update - get firmware from internet /// </summary> /// <param name="temp"></param> /// <param name="historyhash"></param> public bool update(string comport, software temp, string historyhash) { BoardDetect.boards board = BoardDetect.boards.none; try { updateProgress(-1, "Detecting Board Version"); board = BoardDetect.DetectBoard(comport); if (board == BoardDetect.boards.none) { CustomMessageBox.Show("Cant detect your Board version. Please check your cabling"); return(false); } int apmformat_version = -1; // fail continue if (board != BoardDetect.boards.px4 && board != BoardDetect.boards.px4v2 && board != BoardDetect.boards.vrbrainv40 && board != BoardDetect.boards.vrbrainv45 && board != BoardDetect.boards.vrbrainv50 && board != BoardDetect.boards.vrbrainv51 && board != BoardDetect.boards.vrherov10) { try { apmformat_version = BoardDetect.decodeApVar(comport, board); } catch { } if (apmformat_version != -1 && apmformat_version != temp.k_format_version) { if (DialogResult.No == CustomMessageBox.Show("Epprom changed, all your setting will be lost during the update,\nDo you wish to continue?", "Epprom format changed (" + apmformat_version + " vs " + temp.k_format_version + ")", MessageBoxButtons.YesNo)) { CustomMessageBox.Show("Please connect and backup your config in the configuration tab."); return(false); } } } log.Info("Detected a " + board); updateProgress(-1, "Detected a " + board); string baseurl = ""; if (board == BoardDetect.boards.b2560) { baseurl = temp.url2560.ToString(); } else if (board == BoardDetect.boards.b1280) { baseurl = temp.url.ToString(); } else if (board == BoardDetect.boards.b2560v2) { baseurl = temp.url2560_2.ToString(); } else if (board == BoardDetect.boards.px4) { baseurl = temp.urlpx4v1.ToString(); } else if (board == BoardDetect.boards.px4v2) { baseurl = temp.urlpx4v2.ToString(); } else if (board == BoardDetect.boards.vrbrainv40) { baseurl = temp.urlvrbrainv40.ToString(); } else if (board == BoardDetect.boards.vrbrainv45) { baseurl = temp.urlvrbrainv45.ToString(); } else if (board == BoardDetect.boards.vrbrainv50) { baseurl = temp.urlvrbrainv50.ToString(); } else if (board == BoardDetect.boards.vrbrainv51) { baseurl = temp.urlvrbrainv51.ToString(); } else if (board == BoardDetect.boards.vrherov10) { baseurl = temp.urlvrherov10.ToString(); } else { CustomMessageBox.Show("Invalid Board Type"); return(false); } if (historyhash != "") { baseurl = getUrl(historyhash, baseurl); } log.Info("Using " + baseurl); // Create a request using a URL that can receive a post. WebRequest request = WebRequest.Create(baseurl); 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. WebResponse response = request.GetResponse(); // Display the status. log.Info(((HttpWebResponse)response).StatusDescription); // Get the stream containing content returned by the server. dataStream = response.GetResponseStream(); long bytes = response.ContentLength; long contlen = bytes; byte[] buf1 = new byte[1024]; FileStream fs = new FileStream(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", FileMode.Create); updateProgress(0, "Downloading from Internet"); dataStream.ReadTimeout = 30000; while (dataStream.CanRead) { try { updateProgress(50, "Downloading from Internet"); } catch { } int len = dataStream.Read(buf1, 0, 1024); if (len == 0) { break; } bytes -= len; fs.Write(buf1, 0, len); } fs.Close(); dataStream.Close(); response.Close(); updateProgress(100, "Downloaded from Internet"); log.Info("Downloaded"); } catch (Exception ex) { updateProgress(50, "Failed download"); CustomMessageBox.Show("Failed to download new firmware : " + ex.ToString()); return(false); } MissionPlanner.Utilities.Tracking.AddFW(temp.name, board.ToString()); return(UploadFlash(comport, Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", board)); }
/// <summary> /// Do full update - get firmware from internet /// </summary> /// <param name="temp"></param> /// <param name="historyhash"></param> public bool update(string comport, software temp, string historyhash) { BoardDetect.boards board = BoardDetect.boards.none; try { updateProgress(-1, Strings.DetectingBoardVersion); board = BoardDetect.DetectBoard(comport); if (board == BoardDetect.boards.none) { CustomMessageBox.Show(Strings.CantDetectBoardVersion); return(false); } int apmformat_version = -1; // fail continue if (board != BoardDetect.boards.px4 && board != BoardDetect.boards.px4v2 && board != BoardDetect.boards.vrbrainv40 && board != BoardDetect.boards.vrbrainv45 && board != BoardDetect.boards.vrbrainv50 && board != BoardDetect.boards.vrbrainv51 && board != BoardDetect.boards.vrbrainv52 && board != BoardDetect.boards.vrherov10 && board != BoardDetect.boards.vrubrainv51 && board != BoardDetect.boards.vrubrainv52 && board != BoardDetect.boards.vrgimbalv20 && board != BoardDetect.boards.vrugimbalv11) { try { apmformat_version = BoardDetect.decodeApVar(comport, board); } catch { } if (apmformat_version != -1 && apmformat_version != temp.k_format_version) { if (DialogResult.No == CustomMessageBox.Show(Strings.EppromChanged, String.Format(Strings.EppromFormatChanged, apmformat_version, temp.k_format_version), MessageBoxButtons.YesNo)) { CustomMessageBox.Show(Strings.PleaseConnectAndBackupConfig); return(false); } } } log.Info("Detected a " + board); updateProgress(-1, Strings.DetectedA + board); string baseurl = ""; if (board == BoardDetect.boards.b2560) { baseurl = temp.url2560.ToString(); } else if (board == BoardDetect.boards.b1280) { baseurl = temp.url.ToString(); } else if (board == BoardDetect.boards.b2560v2) { baseurl = temp.url2560_2.ToString(); } else if (board == BoardDetect.boards.px4) { baseurl = temp.urlpx4v1.ToString(); } else if (board == BoardDetect.boards.px4v2) { baseurl = temp.urlpx4v2.ToString(); } else if (board == BoardDetect.boards.vrbrainv40) { baseurl = temp.urlvrbrainv40.ToString(); } else if (board == BoardDetect.boards.vrbrainv45) { baseurl = temp.urlvrbrainv45.ToString(); } else if (board == BoardDetect.boards.vrbrainv50) { baseurl = temp.urlvrbrainv50.ToString(); } else if (board == BoardDetect.boards.vrbrainv51) { baseurl = temp.urlvrbrainv51.ToString(); } else if (board == BoardDetect.boards.vrbrainv52) { baseurl = temp.urlvrbrainv52.ToString(); } else if (board == BoardDetect.boards.vrherov10) { baseurl = temp.urlvrherov10.ToString(); } else if (board == BoardDetect.boards.vrubrainv51) { baseurl = temp.urlvrubrainv51.ToString(); } else if (board == BoardDetect.boards.vrubrainv52) { baseurl = temp.urlvrubrainv52.ToString(); } else if (board == BoardDetect.boards.vrgimbalv20) { baseurl = temp.urlvrgimbalv20.ToString(); } else if (board == BoardDetect.boards.vrugimbalv11) { baseurl = temp.urlvrugimbalv11.ToString(); } else { CustomMessageBox.Show(Strings.InvalidBoardType); return(false); } if (board < BoardDetect.boards.px4) { if (temp.name.ToLower().Contains("arducopter")) { CustomMessageBox.Show("This board has been retired, Mission Planner this will upload the last available version to your board", "Note"); } } if (historyhash != "") { baseurl = getUrl(historyhash, baseurl); } // update to use mirror url Localizations.ReplaceMirrorUrl(ref baseurl); log.Info("Using " + baseurl); // Create a request using a URL that can receive a post. WebRequest request = WebRequest.Create(baseurl); 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. WebResponse response = request.GetResponse(); // Display the status. log.Info(((HttpWebResponse)response).StatusDescription); // Get the stream containing content returned by the server. dataStream = response.GetResponseStream(); long bytes = response.ContentLength; long contlen = bytes; byte[] buf1 = new byte[1024]; FileStream fs = new FileStream(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", FileMode.Create); updateProgress(0, Strings.DownloadingFromInternet); dataStream.ReadTimeout = 30000; while (dataStream.CanRead) { try { updateProgress(50, Strings.DownloadingFromInternet); } catch { } int len = dataStream.Read(buf1, 0, 1024); if (len == 0) { break; } bytes -= len; fs.Write(buf1, 0, len); } fs.Close(); dataStream.Close(); response.Close(); updateProgress(100, Strings.DownloadedFromInternet); log.Info("Downloaded"); } catch (Exception ex) { updateProgress(50, Strings.FailedDownload); CustomMessageBox.Show("Failed to download new firmware : " + ex.ToString()); return(false); } MissionPlanner.Utilities.Tracking.AddFW(temp.name, board.ToString()); return(UploadFlash(comport, Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", board)); }
/// <summary> /// Do full update - get firmware from internet /// </summary> /// <param name="temp"></param> /// <param name="historyhash"></param> public bool update(string comport, software temp, string historyhash) { BoardDetect.boards board = BoardDetect.boards.none; try { updateProgress(-1, Strings.DetectingBoardVersion); board = BoardDetect.DetectBoard(comport); if (board == BoardDetect.boards.none) { CustomMessageBox.Show(Strings.CantDetectBoardVersion); return(false); } log.Info("Detected a " + board); updateProgress(-1, Strings.DetectedA + board); string baseurl = ""; if (board == BoardDetect.boards.b2560) { baseurl = temp.url2560.ToString(); } else if (board == BoardDetect.boards.b1280) { baseurl = temp.url.ToString(); } else if (board == BoardDetect.boards.b2560v2) { baseurl = temp.url2560_2.ToString(); } else if (board == BoardDetect.boards.px4) { baseurl = temp.urlpx4v1.ToString(); } else if (board == BoardDetect.boards.px4v2) { baseurl = temp.urlpx4v2.ToString(); } else if (board == BoardDetect.boards.px4v4) { baseurl = temp.urlpx4v4.ToString(); } else if (board == BoardDetect.boards.vrbrainv40) { baseurl = temp.urlvrbrainv40.ToString(); } else if (board == BoardDetect.boards.vrbrainv45) { baseurl = temp.urlvrbrainv45.ToString(); } else if (board == BoardDetect.boards.vrbrainv50) { baseurl = temp.urlvrbrainv50.ToString(); } else if (board == BoardDetect.boards.vrbrainv51) { baseurl = temp.urlvrbrainv51.ToString(); } else if (board == BoardDetect.boards.vrbrainv52) { baseurl = temp.urlvrbrainv52.ToString(); } else if (board == BoardDetect.boards.vrcorev10) { baseurl = temp.urlvrcorev10.ToString(); } else if (board == BoardDetect.boards.vrubrainv51) { baseurl = temp.urlvrubrainv51.ToString(); } else if (board == BoardDetect.boards.vrubrainv52) { baseurl = temp.urlvrubrainv52.ToString(); } else { CustomMessageBox.Show(Strings.InvalidBoardType); return(false); } if (board < BoardDetect.boards.px4) { if (temp.name.ToLower().Contains("arducopter")) { CustomMessageBox.Show(Strings.ThisBoardHasBeenRetired, Strings.Note); } } if (historyhash != "") { baseurl = getUrl(historyhash, baseurl); } // update to use mirror url L10N.ReplaceMirrorUrl(ref baseurl); log.Info("Using " + baseurl); // Create a request using a URL that can receive a post. WebRequest request = WebRequest.Create(baseurl); 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( Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", FileMode.Create)) { updateProgress(0, Strings.DownloadingFromInternet); long length = response.ContentLength; long progress = 0; dataStream.ReadTimeout = 30000; while (dataStream.CanRead) { try { updateProgress(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(); } updateProgress(100, Strings.DownloadedFromInternet); log.Info("Downloaded"); } catch (Exception ex) { updateProgress(50, Strings.FailedDownload); CustomMessageBox.Show("Failed to download new firmware : " + ex.ToString()); return(false); } MissionPlanner.Utilities.Tracking.AddFW(temp.name, board.ToString()); return(UploadFlash(comport, Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", board)); }