public bool UploadVRBRAIN(string filename, BoardDetect.boards board)
{
px4uploader.Uploader up;
updateProgress(0, "Reading Hex File");
px4uploader.Firmware fw;
try
{
fw = px4uploader.Firmware.ProcessFirmware(filename);
}
catch (Exception ex)
{
CustomMessageBox.Show(Strings.ErrorFirmwareFile + "\n\n" + ex.ToString(), Strings.ERROR);
return false;
}
try
{
// check if we are seeing heartbeats
MainV2.comPort.BaseStream.Open();
MainV2.comPort.giveComport = true;
if (MainV2.comPort.getHeartBeat().Length > 0)
{
MainV2.comPort.doReboot(true, false);
MainV2.comPort.Close();
//specific action for VRBRAIN4 board that needs to be manually disconnected before uploading
if (board == BoardDetect.boards.vrbrainv40)
{
CustomMessageBox.Show(
"VRBRAIN 4 detected. Please unplug the board, and then press OK and plug back in.\n");
}
}
else
{
MainV2.comPort.BaseStream.Close();
CustomMessageBox.Show(Strings.PleaseUnplugTheBoardAnd);
}
}
catch (Exception ex)
{
log.Error(ex);
CustomMessageBox.Show(Strings.PleaseUnplugTheBoardAnd);
}
DateTime DEADLINE = DateTime.Now.AddSeconds(30);
updateProgress(0, "Scanning comports");
while (DateTime.Now < DEADLINE)
{
string[] allports = SerialPort.GetPortNames();
foreach (string port in allports)
{
log.Info(DateTime.Now.Millisecond + " Trying Port " + port);
updateProgress(-1, "Connecting");
try
{
up = new px4uploader.Uploader(port, 115200);
}
catch (Exception ex)
{
//System.Threading.Thread.Sleep(50);
Console.WriteLine(ex.Message);
continue;
}
try
{
up.identify();
updateProgress(-1, "Identify");
log.InfoFormat("Found board type {0} boardrev {1} bl rev {2} fwmax {3} on {4}", up.board_type,
up.board_rev, up.bl_rev, up.fw_maxsize, port);
}
catch (Exception)
{
Console.WriteLine("Not There..");
//Console.WriteLine(ex.Message);
up.close();
continue;
}
up.skipotp = true;
try
{
up.currentChecksum(fw);
}
catch
{
up.__reboot();
up.close();
CustomMessageBox.Show(Strings.NoNeedToUpload);
return true;
}
try
{
up.ProgressEvent += new px4uploader.Uploader.ProgressEventHandler(up_ProgressEvent);
up.LogEvent += new px4uploader.Uploader.LogEventHandler(up_LogEvent);
updateProgress(0, "Upload");
up.upload(fw);
updateProgress(100, "Upload Done");
}
catch (Exception ex)
{
updateProgress(0, "ERROR: " + ex.Message);
log.Info(ex);
Console.WriteLine(ex.ToString());
return false;
}
finally
{
up.close();
}
if (up.board_type == 1140 || up.board_type == 1145 || up.board_type == 1150 || up.board_type == 1151 ||
up.board_type == 1152 || up.board_type == 1210 || up.board_type == 1351 || up.board_type == 1352 ||
up.board_type == 1411 || up.board_type == 1520)
{
//VR boards have no tone alarm
if (up.board_type == 1140)
CustomMessageBox.Show("Upload complete! Please unplug and reconnect board.");
else
CustomMessageBox.Show("Upload complete!");
}
else
{
// wait for IO firmware upgrade and boot to a mavlink state
CustomMessageBox.Show(Strings.PleaseWaitForTheMusicalTones);
}
return true;
}
}
updateProgress(0, "ERROR: No Response from board");
return false;
}