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 if (board == BoardDetect.boards.bebop2)
{
baseurl = temp.urlbebop2.ToString();
}
else if (board == BoardDetect.boards.disco)
{
baseurl = temp.urldisco.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);
var starttime = DateTime.Now;
// 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(
Settings.GetUserDataDirectory() +
@"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();
}
var timetook = (DateTime.Now - starttime).TotalMilliseconds;
Tracking.AddTiming("Firmware Download", board.ToString(), timetook, temp.name);
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());
var uploadstarttime = DateTime.Now;
var ans = UploadFlash(comport,
Settings.GetUserDataDirectory() + @"firmware.hex", board);
var uploadtime = (DateTime.Now - uploadstarttime).TotalMilliseconds;
Tracking.AddTiming("Firmware Upload", board.ToString(), uploadtime, temp.name);
return ans;
}