private void BUT_flashup_Click(object sender, EventArgs e) { byte[] FLASH = new byte[1]; try { StreamReader sr = new StreamReader(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex"); FLASH = readIntelHEXv2(sr); sr.Close(); } catch (Exception ex) { CustomMessageBox.Show("Failed to read firmware.hex : " + ex.Message); } IArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = MissionPlanner.MainV2.comPortName; port.Open(); if (port.connectAP()) { log.Info("starting"); port.uploadflash(FLASH, 0, FLASH.Length, 0); log.Info("Uploaded"); } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Check port settings or Port in use? " + ex.ToString()); port.Close(); } }
/// <summary> /// Search for GD serial port based on Vendor ID /// </summary> /// <returns></returns> private void FindGD_port() { // list of all available com ports string[] ports = System.IO.Ports.SerialPort.GetPortNames().Select(p => p.TrimEnd()).ToArray(); List <string> portsFound = new List <string>(); try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM%'"); foreach (ManagementObject queryObj in searcher.Get()) { if (queryObj["DeviceID"].ToString().Contains("VID_0403")) // GD FTDI Vendor ID { string devCaption = queryObj["Caption"].ToString(); foreach (string p in ports) { if (devCaption.Contains(p)) { portsFound.Add(p); } } } } } catch { MessageBox.Show("PX4 Board is not connected!"); } // check each FTDI port on connection? IArduinoComms port = new ArduinoSTKv2 { BaudRate = 115200 }; foreach (var p in portsFound) { try { port.PortName = p; port.Open(); if (port.connectAP()) { GD_Serial_Port = p; GD_Port.Items.Add(p); } } catch { } } }
private void BUT_copy2560_Click(object sender, EventArgs e) { ArduinoSTKv2 port = new ArduinoSTKv2(); port.BaudRate = 115200; port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = ArdupilotMega.MainV2.comPortName; log.Info("Open Port"); port.Open(); log.Info("Connect AP"); if (port.connectAP()) { log.Info("Download AP"); byte[] EEPROM = new byte[1024 * 4]; for (int a = 0; a < EEPROM.Length; a += 0x100) { port.setaddress(a); port.download(0x100).CopyTo(EEPROM, a); } log.Info("Verify State"); if (port.keepalive()) { StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"EEPROM2560.bin"); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(EEPROM, 0, EEPROM.Length); bw.Close(); log.Info("Download AP"); byte[] FLASH = new byte[1024 * 256]; for (int a = 0; a < FLASH.Length; a += 0x100) { port.setaddress(a); port.downloadflash(0x100).CopyTo(FLASH, a); } sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"FLASH2560.bin"); bw = new BinaryWriter(sw.BaseStream); bw.Write(FLASH, 0, FLASH.Length); bw.Close(); } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port Error? " + ex.ToString()); if (port != null && port.IsOpen) { port.Close(); } } }
private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "EEPROM.bin|*.bin"; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; openFileDialog1.InitialDirectory = Path.GetDirectoryName(Application.ExecutablePath); if (openFileDialog1.ShowDialog() == DialogResult.OK) { try { StreamReader sr = new StreamReader(openFileDialog1.FileName); BinaryReader br = new BinaryReader(sr.BaseStream); byte[] EEPROM = br.ReadBytes(1024 * 4); br.Close(); sr.Close(); ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; port.PortName = ArdupilotMega.MainV2.comPortName; try { port.Open(); if (port.connectAP()) { // waypoints int start = 0; int end = 1024*4; log.Info(start + " to " + end); port.upload(EEPROM, (short)start, (short)(end - start), (short)start); if (port.keepalive()) { // Config if (port.keepalive()) { System.Threading.Thread.Sleep(2000); //MessageBox.Show("Upload Completed"); } else { CustomMessageBox.Show("Communication Error - WPs wrote but no config"); } } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port in use? " + ex.ToString()); port.Close(); } } catch (Exception) { CustomMessageBox.Show("Error reading file"); } } }
/// <summary> /// upload to arduino standalone /// </summary> /// <param name="filename"></param> /// <param name="board"></param> public bool UploadFlash(string comport, string filename, BoardDetect.boards board) { if (board == BoardDetect.boards.px4 || board == BoardDetect.boards.px4v2) { try { return(UploadPX4(filename)); } catch (MissingFieldException) { CustomMessageBox.Show("Please update, your install is currupt", Strings.ERROR); return(false); } } if (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) { return(UploadVRBRAIN(filename)); } byte[] FLASH = new byte[1]; try { updateProgress(0, Strings.ReadingHexFile); using (StreamReader sr = new StreamReader(filename)) { FLASH = readIntelHEXv2(sr); } log.InfoFormat("\n\nSize: {0}\n\n", FLASH.Length); } catch (Exception ex) { updateProgress(0, Strings.FailedReadHEX); CustomMessageBox.Show(Strings.FailedToReadHex + ex.Message); return(false); } IArduinoComms port = new ArduinoSTK(); if (board == BoardDetect.boards.b1280) { if (FLASH.Length > 126976) { CustomMessageBox.Show("Firmware is to big for a 1280, Please upgrade your hardware!!"); return(false); } //port = new ArduinoSTK(); port.BaudRate = 57600; } else if (board == BoardDetect.boards.b2560 || board == BoardDetect.boards.b2560v2) { port = new ArduinoSTKv2 { BaudRate = 115200 }; } port.DataBits = 8; port.StopBits = System.IO.Ports.StopBits.One; port.Parity = System.IO.Ports.Parity.None; port.DtrEnable = true; try { port.PortName = comport; port.Open(); if (port.connectAP()) { log.Info("starting"); updateProgress(0, String.Format(Strings.UploadingBytesToBoard, FLASH.Length) + board); // this is enough to make ap_var reset //port.upload(new byte[256], 0, 2, 0); port.Progress += updateProgress; if (!port.uploadflash(FLASH, 0, FLASH.Length, 0)) { if (port.IsOpen) { port.Close(); } throw new Exception("Upload failed. Lost sync. Try Arduino!!"); } port.Progress -= updateProgress; updateProgress(100, Strings.UploadComplete); log.Info("Uploaded"); int start = 0; short length = 0x100; byte[] flashverify = new byte[FLASH.Length + 256]; updateProgress(0, Strings.VerifyFirmware); while (start < FLASH.Length) { updateProgress((int)((start / (float)FLASH.Length) * 100), Strings.VerifyFirmware); port.setaddress(start); //log.Info("Downloading " + length + " at " + start); port.downloadflash(length).CopyTo(flashverify, start); start += length; } for (int s = 0; s < FLASH.Length; s++) { if (FLASH[s] != flashverify[s]) { CustomMessageBox.Show(String.Format(Strings.UploadSucceededButVerifyFailed, FLASH[s].ToString("X"), flashverify[s].ToString("X")) + s); port.Close(); return(false); } } updateProgress(100, Strings.VerifyComplete); } else { updateProgress(0, Strings.FailedUpload); CustomMessageBox.Show(Strings.CommunicationErrorNoConnection); } port.Close(); try { ((SerialPort)port).Open(); } catch { } //CustomMessageBox.Show("1. If you are updating your firmware from a previous version, please verify your parameters are appropriate for the new version.\n2. Please ensure your accelerometer is calibrated after installing or re-calibrated after updating the firmware."); try { ((SerialPort)port).Close(); } catch { } updateProgress(100, Strings.Done); } catch (Exception ex) { updateProgress(0, Strings.FailedUpload); CustomMessageBox.Show(Strings.CheckPortSettingsOr + ex); try { port.Close(); } catch { } return(false); } MainV2.comPort.giveComport = false; return(true); }
/// <summary> /// upload to arduino standalone /// </summary> /// <param name="filename"></param> /// <param name="board"></param> public bool UploadFlash(string comport, string filename, string board) { if (board == "px4") { return(UploadPX4(filename)); } byte[] FLASH = new byte[1]; StreamReader sr = null; try { updateProgress(0, "Reading Hex File"); sr = new StreamReader(filename); FLASH = readIntelHEXv2(sr); sr.Close(); log.InfoFormat("\n\nSize: {0}\n\n", FLASH.Length); } catch (Exception ex) { if (sr != null) { sr.Dispose(); } updateProgress(0, "Failed read HEX"); CustomMessageBox.Show("Failed to read firmware.hex : " + ex.Message); return(false); } IArduinoComms port = new ArduinoSTK(); if (board == "1280") { if (FLASH.Length > 126976) { CustomMessageBox.Show("Firmware is to big for a 1280, Please upgrade your hardware!!"); return(false); } //port = new ArduinoSTK(); port.BaudRate = 57600; } else if (board == "2560" || board == "2560-2") { port = new ArduinoSTKv2 { BaudRate = 115200 }; } port.DataBits = 8; port.StopBits = System.IO.Ports.StopBits.One; port.Parity = System.IO.Ports.Parity.None; port.DtrEnable = true; try { port.PortName = comport; port.Open(); if (port.connectAP()) { log.Info("starting"); updateProgress(0, "Uploading " + FLASH.Length + " bytes to Board: " + board); // this is enough to make ap_var reset //port.upload(new byte[256], 0, 2, 0); port.Progress += updateProgress; if (!port.uploadflash(FLASH, 0, FLASH.Length, 0)) { if (port.IsOpen) { port.Close(); } throw new Exception("Upload failed. Lost sync. Try Arduino!!"); } port.Progress -= updateProgress; updateProgress(100, "Upload Complete"); log.Info("Uploaded"); int start = 0; short length = 0x100; byte[] flashverify = new byte[FLASH.Length + 256]; updateProgress(0, "Verify Firmware"); while (start < FLASH.Length) { updateProgress((int)((start / (float)FLASH.Length) * 100), "Verify Firmware"); port.setaddress(start); log.Info("Downloading " + length + " at " + start); port.downloadflash(length).CopyTo(flashverify, start); start += length; } for (int s = 0; s < FLASH.Length; s++) { if (FLASH[s] != flashverify[s]) { CustomMessageBox.Show("Upload succeeded, but verify failed: exp " + FLASH[s].ToString("X") + " got " + flashverify[s].ToString("X") + " at " + s); port.Close(); return(false); } } updateProgress(100, "Verify Complete"); } else { updateProgress(0, "Failed upload"); CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); try { ((SerialPort)port).Open(); } catch { } //CustomMessageBox.Show("1. If you are updating your firmware from a previous version, please verify your parameters are appropriate for the new version.\n2. Please ensure your accelerometer is calibrated after installing or re-calibrated after updating the firmware."); try { ((SerialPort)port).Close(); } catch { } updateProgress(100, "Done"); } catch (Exception ex) { updateProgress(0, "Failed upload"); CustomMessageBox.Show("Check port settings or Port in use? " + ex); try { port.Close(); } catch { } return(false); } MainV2.comPort.giveComport = false; return(true); }
private void MenuConnect_Click(object sender, EventArgs e) { comPort.giveComport = false; // sanity check if (comPort.BaseStream.IsOpen && MainV2.comPort.MAV.cs.groundspeed > 4) { if (DialogResult.No == CustomMessageBox.Show("Your model is still moving are you sure you want to disconnect?", "Disconnect", MessageBoxButtons.YesNo)) { return; } } // cleanup from any previous sessions if (comPort.logfile != null) comPort.logfile.Close(); if (comPort.rawlogfile != null) comPort.rawlogfile.Close(); comPort.logfile = null; comPort.rawlogfile = null; // decide if this is a connect or disconnect if (comPort.BaseStream.IsOpen) { try { if (speechEngine != null) // cancel all pending speech speechEngine.SpeakAsyncCancelAll(); comPort.BaseStream.DtrEnable = false; comPort.Close(); } catch (Exception ex) { log.Error(ex); } // now that we have closed the connection, cancel the connection stats // so that the 'time connected' etc does not grow, but the user can still // look at the now frozen stats on the still open form try { // if terminal is used, then closed using this button.... exception ((ConnectionStats)this.connectionStatsForm.Controls[0]).StopUpdates(); } catch { } this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.connect; } else { switch (_connectionControl.CMB_serialport.Text) { case "TCP": comPort.BaseStream = new TcpSerial(); break; case "UDP": comPort.BaseStream = new UdpSerial(); break; case "AUTO": default: comPort.BaseStream = new Comms.SerialPort(); break; } // Tell the connection UI that we are now connected. _connectionControl.IsConnected(true); // Here we want to reset the connection stats counter etc. this.ResetConnectionStats(); MainV2.comPort.MAV.cs.timeInAir = 0; //cleanup any log being played comPort.logreadmode = false; if (comPort.logplaybackfile != null) comPort.logplaybackfile.Close(); comPort.logplaybackfile = null; try { // do autoscan if (_connectionControl.CMB_serialport.Text == "AUTO") { Comms.CommsSerialScan.Scan(false); DateTime deadline = DateTime.Now.AddSeconds(50); while (Comms.CommsSerialScan.foundport == false) { System.Threading.Thread.Sleep(100); if (DateTime.Now > deadline) { CustomMessageBox.Show("Timeout waiting for autoscan/no mavlink device connected"); _connectionControl.IsConnected(false); return; } } _connectionControl.CMB_serialport.Text = Comms.CommsSerialScan.portinterface.PortName; _connectionControl.CMB_baudrate.Text = Comms.CommsSerialScan.portinterface.BaudRate.ToString(); } // set port, then options comPort.BaseStream.PortName = _connectionControl.CMB_serialport.Text; comPort.BaseStream.DataBits = 8; comPort.BaseStream.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1"); comPort.BaseStream.Parity = (Parity)Enum.Parse(typeof(Parity), "None"); try { comPort.BaseStream.BaudRate = int.Parse(_connectionControl.CMB_baudrate.Text); } catch (Exception exp) { log.Error(exp); } // false here comPort.BaseStream.DtrEnable = false; comPort.BaseStream.RtsEnable = false; // prevent serialreader from doing anything comPort.giveComport = true; // reset on connect logic. if (config["CHK_resetapmonconnect"] == null || bool.Parse(config["CHK_resetapmonconnect"].ToString()) == true) comPort.BaseStream.toggleDTR(); comPort.giveComport = false; // setup to record new logs try { Directory.CreateDirectory(MainV2.LogDir); comPort.logfile = new BinaryWriter(File.Open(MainV2.LogDir + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".tlog", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)); comPort.rawlogfile = new BinaryWriter(File.Open(MainV2.LogDir + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".rlog", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)); } catch (Exception exp2) { log.Error(exp2); CustomMessageBox.Show("Failed to create log - wont log this session"); } // soft fail // reset connect time - for timeout functions connecttime = DateTime.Now; // do the connect comPort.Open(true); // detect firmware we are conected to. if (comPort.MAV.param["SYSID_SW_TYPE"] != null) { if (float.Parse(comPort.MAV.param["SYSID_SW_TYPE"].ToString()) == 10) { _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduCopter2); } else if (float.Parse(comPort.MAV.param["SYSID_SW_TYPE"].ToString()) == 7) { _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.Ateryx); } else if (float.Parse(comPort.MAV.param["SYSID_SW_TYPE"].ToString()) == 20) { _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduRover); } else if (float.Parse(comPort.MAV.param["SYSID_SW_TYPE"].ToString()) == 0) { _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduPlane); } } // save the baudrate for this port config[_connectionControl.CMB_serialport.Text + "_BAUD"] = _connectionControl.CMB_baudrate.Text; // refresh config window if needed if (MyView.current != null && MyView.current.Name == "Config") { MyView.ShowScreen("Config"); } // load wps on connect option. if (config["loadwpsonconnect"] != null && bool.Parse(config["loadwpsonconnect"].ToString()) == true) { MenuFlightPlanner_Click(null, null); FlightPlanner.BUT_read_Click(null, null); } // set connected icon this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.disconnect; } catch (Exception ex) { log.Warn(ex); try { _connectionControl.IsConnected(false); UpdateConnectIcon(); comPort.Close(); } catch { } // detect firmware -> scan eeprom contents -> error if no valid ap param/apvar header detected. try { string version = ArduinoDetect.DetectVersion(comPort.BaseStream.PortName); IArduinoComms port = new ArduinoSTK(); if (version == "1280") { port = new ArduinoSTK(); port.BaudRate = 57600; } else if (version == "2560") { port = new ArduinoSTKv2(); port.BaudRate = 115200; } else { throw new Exception("Can not determine APM board type"); } port.PortName = comPort.BaseStream.PortName; port.DtrEnable = true; port.Open(); if (port.connectAP()) { byte[] buffer = port.download(20); port.Close(); if ((buffer[0] == 'A' || buffer[0] == 'P') && (buffer[1] == 'A' || buffer[1] == 'P')) // this is the apvar header { log.Info("Valid eeprom contents"); } else { CustomMessageBox.Show("You dont appear to have uploaded a firmware yet,\n\nPlease goto the firmware page and upload one."); return; } } else { log.Error("Could not download eeprom contents"); } } catch (Exception exp3) { log.Error(exp3); } CustomMessageBox.Show("Can not establish a connection\n\n" + ex.Message); return; } } }
public static void UploadFlash(string filename, string board, string portname) { byte[] FLASH = new byte[1]; StreamReader sr = null; try { updateprogress("Reading Hex File", 0); sr = new StreamReader(filename); FLASH = readIntelHEXv2(sr); sr.Close(); Console.WriteLine("\n\nSize: {0}\n\n", FLASH.Length); } catch (Exception ex) { if (sr != null) { sr.Dispose(); } updateprogress("Failed read HEX", 0); MessageBox.Show("Failed to read firmware.hex : " + ex.Message); return; } IArduinoComms port = new ArduinoSTK(); if (board == "1280") { if (FLASH.Length > 126976) { MessageBox.Show("Firmware is to big for a 1280, Please upgrade!!"); return; } //port = new ArduinoSTK(); port.BaudRate = 57600; } else if (board == "2560" || board == "2560-2") { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = portname; port.Open(); if (port.connectAP()) { Console.WriteLine("starting"); updateprogress("Uploading " + FLASH.Length + " bytes to APM", 0); // this is enough to make ap_var reset //port.upload(new byte[256], 0, 2, 0); port.Progress += new ArdupilotMega.Arduino.ProgressEventHandler(port_Progress); if (!port.uploadflash(FLASH, 0, FLASH.Length, 0)) { if (port.IsOpen) { port.Close(); } throw new Exception("Upload failed. Lost sync. Try Arduino!!"); } port.Progress -= port_Progress; updateprogress("", 100); Console.WriteLine("Uploaded"); int start = 0; short length = 0x100; byte[] flashverify = new byte[FLASH.Length + 256]; updateprogress("Verify APM", 0); while (start < FLASH.Length) { updateprogress("", (int)((start / (float)FLASH.Length) * 100)); port.setaddress(start); Console.WriteLine("Downloading " + length + " at " + start); port.downloadflash(length).CopyTo(flashverify, start); start += length; } updateprogress("", 100); for (int s = 0; s < FLASH.Length; s++) { if (FLASH[s] != flashverify[s]) { MessageBox.Show("Upload succeeded, but verify failed: exp " + FLASH[s].ToString("X") + " got " + flashverify[s].ToString("X") + " at " + s); break; } } } else { updateprogress("Failed upload", -1); MessageBox.Show("Communication Error - no connection"); } port.Close(); Application.DoEvents(); updateprogress("Done", 100); } catch (Exception ex) { updateprogress("Failed upload", -1); MessageBox.Show("Check port settings or Port in use? " + ex.ToString()); port.Close(); } }
private void BUT_flashup_Click(object sender, EventArgs e) { byte[] FLASH = new byte[1]; try { StreamReader sr = new StreamReader(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex"); FLASH = readIntelHEXv2(sr); sr.Close(); } catch (Exception ex) { CustomMessageBox.Show("Failed to read firmware.hex : " + ex.Message); } ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = ArdupilotMega.MainV2.comPortName; port.Open(); if (port.connectAP()) { log.Info("starting"); port.uploadflash(FLASH, 0, FLASH.Length, 0); log.Info("Uploaded"); } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Check port settings or Port in use? " + ex.ToString()); port.Close(); } }
private void BUT_dleeprom_Click(object sender, EventArgs e) { IArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = MissionPlanner.MainV2.comPortName; log.Info("Open Port"); port.Open(); log.Info("Connect AP"); if (port.connectAP()) { log.Info("Download AP"); byte[] EEPROM = new byte[1024 * 4]; for (int a = 0; a < 4 * 1024; a += 0x100) { port.setaddress(a); port.download(0x100).CopyTo(EEPROM, a); } log.Info("Verify State"); if (port.keepalive()) { StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"EEPROM.bin"); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(EEPROM, 0, 1024 * 4); bw.Close(); } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port Error? " + ex.ToString()); if (port != null && port.IsOpen) { port.Close(); } } }
private void BUT_flashdl_Click(object sender, EventArgs e) { byte[] FLASH = new byte[256 * 1024]; IArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; port.PortName = MissionPlanner.MainV2.comPortName; try { port.Open(); System.Threading.Thread.Sleep(100); if (port.connectAP()) { // waypoints int start = 0; short length = 0x100; log.Info(start + " to " + FLASH.Length); while (start < FLASH.Length) { log.Info("Doing " + length + " at " + start); port.setaddress(start); port.downloadflash(length).CopyTo(FLASH, start); start += length; } StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"flash.bin", false); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(FLASH, 0, FLASH.Length); bw.Close(); sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"flash.hex", false); for (int i = 0; i < FLASH.Length; i += 16) { string add = string.Format("{0:X4}", i); if (i % (0x1000 << 4) == 0) { if (i != 0) { sw.WriteLine(":02000002{0:X4}{1:X2}", ((i >> 4) & 0xf000), 0x100 - (2 + 2 + (((i >> 4) & 0xf000) >> 8) & 0xff)); } } if (add.Length == 5) { add = add.Substring(1); } sw.Write(":{0:X2}{1}00", 16, add); byte ck = (byte)(16 + (i & 0xff) + ((i >> 8) & 0xff)); for (int a = 0; a < 16; a++) { ck += FLASH[i + a]; sw.Write("{0:X2}", FLASH[i + a]); } sw.WriteLine("{0:X2}", (byte)(0x100 - ck)); } sw.Close(); log.Info("Downloaded"); } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port in use? " + ex.ToString()); port.Close(); } }
private void BUT_wipeeeprom_Click(object sender, EventArgs e) { byte[] EEPROM = new byte[4 * 1024]; for (int i = 0; i < EEPROM.Length; i++) { EEPROM[i] = 0xff; } IArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; port.PortName = MissionPlanner.MainV2.comPortName; try { port.Open(); if (port.connectAP()) { // waypoints int start = 0; int end = 1024 * 4; log.Info(start + " to " + end); port.upload(EEPROM, (short)start, (short)(end - start), (short)start); if (port.keepalive()) { // Config if (port.keepalive()) { System.Threading.Thread.Sleep(2000); //MessageBox.Show("Upload Completed"); } else { CustomMessageBox.Show("Communication Error - WPs wrote but no config"); } } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port in use? " + ex.ToString()); port.Close(); } }
} // Swap private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "EEPROM.bin|*.bin"; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; openFileDialog1.InitialDirectory = Path.GetDirectoryName(Application.ExecutablePath); if (openFileDialog1.ShowDialog() == DialogResult.OK) { try { StreamReader sr = new StreamReader(openFileDialog1.FileName); BinaryReader br = new BinaryReader(sr.BaseStream); byte[] EEPROM = br.ReadBytes(1024 * 4); br.Close(); sr.Close(); IArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; port.PortName = MissionPlanner.MainV2.comPortName; try { port.Open(); if (port.connectAP()) { // waypoints int start = 0; int end = 1024 * 4; log.Info(start + " to " + end); port.upload(EEPROM, (short)start, (short)(end - start), (short)start); if (port.keepalive()) { // Config if (port.keepalive()) { System.Threading.Thread.Sleep(2000); //MessageBox.Show("Upload Completed"); } else { CustomMessageBox.Show("Communication Error - WPs wrote but no config"); } } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port in use? " + ex.ToString()); port.Close(); } } catch (Exception) { CustomMessageBox.Show("Error reading file"); } } }
void UploadFlash(string filename, string board) { byte[] FLASH = new byte[1]; StreamReader sr = null; try { lbl_status.Text = "Reading Hex File"; this.Refresh(); sr = new StreamReader(filename); FLASH = readIntelHEXv2(sr); sr.Close(); Console.WriteLine("\n\nSize: {0}\n\n", FLASH.Length); } catch (Exception ex) { if (sr != null) { sr.Dispose(); } lbl_status.Text = "Failed read HEX"; MessageBox.Show("Failed to read firmware.hex : " + ex.Message); return; } ArduinoComms port = new ArduinoSTK(); if (board == "1280") { if (FLASH.Length > 126976) { MessageBox.Show("Firmware is to big for a 1280, Please upgrade!!"); return; } //port = new ArduinoSTK(); port.BaudRate = 57600; } else if (board == "2560" || board == "2560-2") { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = MainV2.comportname; port.Open(); flashing = true; if (port.connectAP()) { Console.WriteLine("starting"); lbl_status.Text = "Uploading " + FLASH.Length + " bytes to APM"; progress.Value = 0; this.Refresh(); // this is enough to make ap_var reset //port.upload(new byte[256], 0, 2, 0); port.Progress += new ProgressEventHandler(port_Progress); if (!port.uploadflash(FLASH, 0, FLASH.Length, 0)) { flashing = false; if (port.IsOpen) port.Close(); throw new Exception("Upload failed. Lost sync. Try Arduino!!"); } port.Progress -= new ProgressEventHandler(port_Progress); progress.Value = 100; Console.WriteLine("Uploaded"); this.Refresh(); int start = 0; short length = 0x100; byte[] flashverify = new byte[FLASH.Length + 256]; lbl_status.Text = "Verify APM"; progress.Value = 0; this.Refresh(); while (start < FLASH.Length) { progress.Value = (int)((start / (float)FLASH.Length) * 100); progress.Refresh(); port.setaddress(start); Console.WriteLine("Downloading " + length + " at " + start); port.downloadflash(length).CopyTo(flashverify, start); start += length; } progress.Value = 100; for (int s = 0; s < FLASH.Length; s++) { if (FLASH[s] != flashverify[s]) { MessageBox.Show("Upload succeeded, but verify failed: exp " + FLASH[s].ToString("X") + " got " + flashverify[s].ToString("X") + " at " + s); break; } } lbl_status.Text = "Write Done... Waiting (60 sec)"; } else { lbl_status.Text = "Failed upload"; MessageBox.Show("Communication Error - no connection"); } port.Close(); flashing = false; Application.DoEvents(); System.Threading.Thread.Sleep(60000); // 10 seconds - new apvar erases eeprom on new format version, this should buy us some time. lbl_status.Text = "Done"; } catch (Exception ex) { lbl_status.Text = "Failed upload"; MessageBox.Show("Check port settings or Port in use? " + ex.ToString()); port.Close(); } flashing = false; MainV2.givecomport = false; }
private void MenuConnect_Click(object sender, EventArgs e) { giveComport = false; if (comPort.BaseStream.IsOpen && cs.groundspeed > 4) { if (DialogResult.No == CustomMessageBox.Show("Your model is still moving are you sure you want to disconnect?", "Disconnect", MessageBoxButtons.YesNo)) { return; } } if (comPort.BaseStream.IsOpen) { try { try { if (speechEngine != null) // cancel all pending speech speechEngine.SpeakAsyncCancelAll(); } catch { } if (comPort.logfile != null) comPort.logfile.Close(); if (comPort.rawlogfile != null) comPort.rawlogfile.Close(); comPort.BaseStream.DtrEnable = false; comPort.Close(); } catch (Exception ex) { log.Debug(ex.ToString()); } this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.connect; } else { if (_connectionControl.CMB_serialport.Text == "TCP") { comPort.BaseStream = new TcpSerial(); } else if (_connectionControl.CMB_serialport.Text == "UDP") { comPort.BaseStream = new UdpSerial(); } else { comPort.BaseStream = new ArdupilotMega.Comms.SerialPort(); } try { // set port, then options comPort.BaseStream.PortName = _connectionControl.CMB_serialport.Text; comPort.BaseStream.DataBits = 8; comPort.BaseStream.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1"); comPort.BaseStream.Parity = (Parity)Enum.Parse(typeof(Parity), "None"); try { comPort.BaseStream.BaudRate = int.Parse(_connectionControl.CMB_baudrate.Text); } catch { } // false here comPort.BaseStream.DtrEnable = false; comPort.BaseStream.RtsEnable = false; if (config["CHK_resetapmonconnect"] == null || bool.Parse(config["CHK_resetapmonconnect"].ToString()) == true) comPort.BaseStream.toggleDTR(); // cleanup from any previous sessions if (comPort.logfile != null) comPort.logfile.Close(); if (comPort.rawlogfile != null) comPort.rawlogfile.Close(); // setup to record new logs try { Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs"); comPort.logfile = new BinaryWriter(File.Open(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".tlog", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read)); comPort.rawlogfile = new BinaryWriter(File.Open(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".rlog", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read)); } catch { CustomMessageBox.Show("Failed to create log - wont log this session"); } // soft fail // do the connect comPort.Open(true); // detect firmware we are conected to. if (comPort.param["SYSID_SW_TYPE"] != null) { if (float.Parse(comPort.param["SYSID_SW_TYPE"].ToString()) == 10) { _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduCopter2); } else if (float.Parse(comPort.param["SYSID_SW_TYPE"].ToString()) == 0) { _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduPlane); } } // save the baudrate for this port config[_connectionControl.CMB_serialport.Text + "_BAUD"] = _connectionControl.CMB_baudrate.Text; // load wps on connect option. if (config["loadwpsonconnect"] != null && bool.Parse(config["loadwpsonconnect"].ToString()) == true) { MenuFlightPlanner_Click(null, null); FlightPlanner.BUT_read_Click(null, null); } // set connected icon this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.disconnect; } catch (Exception ex) { log.Warn(ex.ToString()); try { comPort.Close(); } catch { } // detect firmware -> scan eeprom contents -> error if no valid ap param/apvar header detected. try { string version = ArduinoDetect.DetectVersion(comPort.BaseStream.PortName); ArduinoComms port = new ArduinoSTK(); if (version == "1280") { port = new ArduinoSTK(); port.BaudRate = 57600; } else if (version == "2560") { port = new ArduinoSTKv2(); port.BaudRate = 115200; } else { throw new Exception("Can not determine APM board type"); } port.PortName = comPort.BaseStream.PortName; port.DtrEnable = true; port.Open(); if (port.connectAP()) { byte[] buffer = port.download(20); port.Close(); if ((buffer[0] == 'A' || buffer[0] == 'P') && (buffer[1] == 'A' || buffer[1] == 'P')) // this is the apvar header { log.Info("Valid eeprom contents"); } else { CustomMessageBox.Show("You dont appear to have uploaded a firmware yet,\n\nPlease goto the firmware page and upload one."); return; } } } catch { } log.Debug(ex.ToString()); //MessageBox.Show("Can not establish a connection\n\n" + ex.ToString()); return; } } }
private void BUT_dleeprom_Click(object sender, EventArgs e) { ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = ArdupilotMega.MainV2.comPortName; log.Info("Open Port"); port.Open(); log.Info("Connect AP"); if (port.connectAP()) { log.Info("Download AP"); byte[] EEPROM = new byte[1024*4]; for (int a = 0; a < 4 * 1024; a += 0x100) { port.setaddress(a); port.download(0x100).CopyTo(EEPROM,a); } log.Info("Verify State"); if (port.keepalive()) { StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"EEPROM.bin"); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(EEPROM, 0, 1024 * 4); bw.Close(); } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port Error? " + ex.ToString()); if (port != null && port.IsOpen) { port.Close(); } } }
private void BUT_flashdl_Click(object sender, EventArgs e) { byte[] FLASH = new byte[256 * 1024]; ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; port.PortName = ArdupilotMega.MainV2.comPortName; try { port.Open(); System.Threading.Thread.Sleep(100); if (port.connectAP()) { // waypoints int start = 0; short length = 0x100; log.Info(start + " to " + FLASH.Length); while (start < FLASH.Length) { log.Info("Doing " + length + " at " + start); port.setaddress(start); port.downloadflash(length).CopyTo(FLASH, start); start += length; } StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"flash.bin", false); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(FLASH, 0, FLASH.Length); bw.Close(); sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"flash.hex", false); for (int i = 0; i < FLASH.Length; i += 16) { string add = string.Format("{0:X4}", i); if (i % (0x1000 << 4) == 0) { if (i != 0) sw.WriteLine(":02000002{0:X4}{1:X2}", ((i >> 4) & 0xf000), 0x100 - (2 + 2 + (((i >> 4) & 0xf000) >> 8) & 0xff)); } if (add.Length == 5) { add = add.Substring(1); } sw.Write(":{0:X2}{1}00", 16, add); byte ck = (byte)(16 + (i & 0xff) + ((i >> 8) & 0xff)); for (int a = 0; a < 16; a++) { ck += FLASH[i + a]; sw.Write("{0:X2}", FLASH[i + a]); } sw.WriteLine("{0:X2}", (byte)(0x100 - ck)); } sw.Close(); log.Info("Downloaded"); } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port in use? " + ex.ToString()); port.Close(); } }
private void BUT_copy2560_Click(object sender, EventArgs e) { ArduinoSTKv2 port = new ArduinoSTKv2(); port.BaudRate = 115200; port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = MissionPlanner.MainV2.comPortName; log.Info("Open Port"); port.Open(); log.Info("Connect AP"); if (port.connectAP()) { log.Info("Download AP"); byte[] EEPROM = new byte[1024 * 4]; for (int a = 0; a < EEPROM.Length; a += 0x100) { port.setaddress(a); port.download(0x100).CopyTo(EEPROM, a); } log.Info("Verify State"); if (port.keepalive()) { StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"EEPROM2560.bin"); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(EEPROM, 0, EEPROM.Length); bw.Close(); log.Info("Download AP"); byte[] FLASH = new byte[1024 * 256]; for (int a = 0; a < FLASH.Length; a += 0x100) { port.setaddress(a); port.downloadflash(0x100).CopyTo(FLASH, a); } sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"FLASH2560.bin"); bw = new BinaryWriter(sw.BaseStream); bw.Write(FLASH, 0, FLASH.Length); bw.Close(); } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port Error? " + ex.ToString()); if (port != null && port.IsOpen) { port.Close(); } } }
private void BUT_wipeeeprom_Click(object sender, EventArgs e) { byte[] EEPROM = new byte[4*1024]; for (int i = 0; i < EEPROM.Length;i++) { EEPROM[i] = 0xff; } ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == CustomMessageBox.Show("is this a 1280?", "", MessageBoxButtons.YesNo)) { port = new ArduinoSTK(); port.BaudRate = 57600; } else { port = new ArduinoSTKv2(); port.BaudRate = 115200; } port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; port.PortName = ArdupilotMega.MainV2.comPortName; try { port.Open(); if (port.connectAP()) { // waypoints int start = 0; int end = 1024*4; log.Info(start + " to " + end); port.upload(EEPROM, (short)start, (short)(end - start), (short)start); if (port.keepalive()) { // Config if (port.keepalive()) { System.Threading.Thread.Sleep(2000); //MessageBox.Show("Upload Completed"); } else { CustomMessageBox.Show("Communication Error - WPs wrote but no config"); } } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port in use? " + ex.ToString()); port.Close(); } }
public void UploadFlash(string filename, string board) { if (board == "px4") { UploadPX4(filename); return; } byte[] FLASH = new byte[1]; StreamReader sr = null; try { lbl_status.Text = "Reading Hex File"; this.Refresh(); Application.DoEvents(); sr = new StreamReader(filename); FLASH = readIntelHEXv2(sr); sr.Close(); log.InfoFormat("\n\nSize: {0}\n\n", FLASH.Length); } catch (Exception ex) { if (sr != null) { sr.Dispose(); } lbl_status.Text = "Failed read HEX"; CustomMessageBox.Show("Failed to read firmware.hex : " + ex.Message); return; } IArduinoComms port = new ArduinoSTK(); if (board == "1280") { if (FLASH.Length > 126976) { CustomMessageBox.Show("Firmware is to big for a 1280, Please upgrade your hardware!!"); return; } //port = new ArduinoSTK(); port.BaudRate = 57600; } else if (board == "2560" || board == "2560-2") { port = new ArduinoSTKv2 { BaudRate = 115200 }; } port.DataBits = 8; port.StopBits = System.IO.Ports.StopBits.One; port.Parity = System.IO.Ports.Parity.None; port.DtrEnable = true; try { port.PortName = MainV2.comPortName; port.Open(); flashing = true; if (port.connectAP()) { log.Info("starting"); lbl_status.Text = "Uploading " + FLASH.Length + " bytes to APM Board: " + board; progress.Value = 0; this.Refresh(); // this is enough to make ap_var reset //port.upload(new byte[256], 0, 2, 0); port.Progress += port_Progress; if (!port.uploadflash(FLASH, 0, FLASH.Length, 0)) { flashing = false; if (port.IsOpen) { port.Close(); } throw new Exception("Upload failed. Lost sync. Try Arduino!!"); } port.Progress -= new ProgressEventHandler(port_Progress); progress.Value = 100; log.Info("Uploaded"); this.Refresh(); int start = 0; short length = 0x100; byte[] flashverify = new byte[FLASH.Length + 256]; lbl_status.Text = "Verify APM"; progress.Value = 0; this.Refresh(); while (start < FLASH.Length) { progress.Value = (int)((start / (float)FLASH.Length) * 100); progress.Refresh(); port.setaddress(start); log.Info("Downloading " + length + " at " + start); port.downloadflash(length).CopyTo(flashverify, start); start += length; } progress.Value = 100; for (int s = 0; s < FLASH.Length; s++) { if (FLASH[s] != flashverify[s]) { CustomMessageBox.Show("Upload succeeded, but verify failed: exp " + FLASH[s].ToString("X") + " got " + flashverify[s].ToString("X") + " at " + s); break; } } lbl_status.Text = "Write Done... Waiting (17 sec)"; } else { lbl_status.Text = "Failed upload"; CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); flashing = false; Application.DoEvents(); try { ((SerialPort)port).Open(); } catch { } DateTime startwait = DateTime.Now; //CustomMessageBox.Show("1. If you are updating your firmware from a previous version, please verify your parameters are appropriate for the new version.\n2. Please ensure your accelerometer is calibrated after installing or re-calibrated after updating the firmware."); while ((DateTime.Now - startwait).TotalSeconds < 17) { try { // Console.Write(((SerialPort)port).ReadExisting().Replace("\0"," ")); } catch { } System.Threading.Thread.Sleep(1000); progress.Value = (int)Math.Min(((DateTime.Now - startwait).TotalSeconds / 17 * 100), 100); Application.DoEvents(); } try { ((SerialPort)port).Close(); } catch { } progress.Value = 100; lbl_status.Text = "Done"; } catch (Exception ex) { lbl_status.Text = "Failed upload"; CustomMessageBox.Show("Check port settings or Port in use? " + ex); try { port.Close(); } catch { } } flashing = false; MainV2.comPort.giveComport = false; }