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 = 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_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 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 = 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_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 = 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(); } }
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 = 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_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 == MessageBox.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; Console.WriteLine(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 { MessageBox.Show("Communication Error - WPs wrote but no config"); } } else { MessageBox.Show("Communication Error - Bad data"); } } else { MessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { MessageBox.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 = 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"); } } }
private void BUT_flashdl_Click(object sender, EventArgs e) { byte[] FLASH = new byte[256 * 1024]; ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == MessageBox.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; Console.WriteLine(start + " to " + FLASH.Length); while (start < FLASH.Length) { Console.WriteLine("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(); Console.WriteLine("Downloaded"); } else { MessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { MessageBox.Show("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) { MessageBox.Show("Failed to read firmware.hex : " + ex.Message); } ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == MessageBox.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()) { Console.WriteLine("starting"); port.uploadflash(FLASH, 0, FLASH.Length, 0); Console.WriteLine("Uploaded"); } else { MessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { MessageBox.Show("Check port settings or 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 = ArdupilotMega.MainV2.comportname; Console.WriteLine("Open Port"); port.Open(); Console.WriteLine("Connect AP"); if (port.connectAP()) { Console.WriteLine("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); } Console.WriteLine("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(); Console.WriteLine("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 { MessageBox.Show("Communication Error - Bad data"); } } else { MessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { MessageBox.Show("Port Error? " + ex.ToString()); if (port != null && port.IsOpen) { port.Close(); } } }
private void BUT_dleeprom_Click(object sender, EventArgs e) { ArduinoComms port = new ArduinoSTK(); if (DialogResult.Yes == MessageBox.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; Console.WriteLine("Open Port"); port.Open(); Console.WriteLine("Connect AP"); if (port.connectAP()) { Console.WriteLine("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); } Console.WriteLine("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 { MessageBox.Show("Communication Error - Bad data"); } } else { MessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { MessageBox.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 == MessageBox.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; Console.WriteLine(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 { MessageBox.Show("Communication Error - WPs wrote but no config"); } } else { MessageBox.Show("Communication Error - Bad data"); } } else { MessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { MessageBox.Show("Port in use? " + ex.ToString()); port.Close(); } } catch (Exception) { MessageBox.Show("Error reading file"); } } }
public static int decodeApVar(string comport, string version) { ArduinoComms port = new ArduinoSTK(); if (version == "1280") { port = new ArduinoSTK(); port.BaudRate = 57600; } else if (version == "2560" || version == "2560-2") { port = new ArduinoSTKv2(); port.BaudRate = 115200; } else { return -1; } port.PortName = comport; port.DtrEnable = true; port.Open(); port.connectAP(); byte[] buffer = port.download(1024 * 4); port.Close(); if (buffer[0] != 'A' || buffer[1] != 'P') // this is the apvar header { return -1; } else { if (buffer[0] == 'A' && buffer[1] == 'P' && buffer[2] == 2) { // apvar header and version int pos = 4; byte key = 0; while (pos < (1024 * 4)) { int size = buffer[pos] & 63; pos++; key = buffer[pos]; pos++; Console.Write("{0:X4}: key {1} size {2}\n ", pos - 2, key, size + 1); if (key == 0xff) { Console.WriteLine("end sentinal at {0}", pos - 2); break; } if (key == 0) { //Array.Reverse(buffer, pos, 2); return BitConverter.ToUInt16(buffer, pos); } for (int i = 0; i <= size; i++) { Console.Write(" {0:X2}", buffer[pos]); pos++; } Console.WriteLine(); } } } return -1; }
/// <summary> /// return the software id from eeprom /// </summary> /// <param name="comport">Port</param> /// <param name="version">Board type</param> /// <returns></returns> public static int decodeApVar(string comport, string version) { ArduinoComms port = new ArduinoSTK(); if (version == "1280") { port = new ArduinoSTK(); port.BaudRate = 57600; } else if (version == "2560" || version == "2560-2") { port = new ArduinoSTKv2(); port.BaudRate = 115200; } else { return(-1); } port.PortName = comport; port.DtrEnable = true; port.Open(); port.connectAP(); byte[] buffer = port.download(1024 * 4); port.Close(); if (buffer[0] != 'A' && buffer[0] != 'P' || buffer[1] != 'P' && buffer[1] != 'A') // this is the apvar header { return(-1); } else { if (buffer[0] == 'A' && buffer[1] == 'P' && buffer[2] == 2) { // apvar header and version int pos = 4; byte key = 0; while (pos < (1024 * 4)) { int size = buffer[pos] & 63; pos++; key = buffer[pos]; pos++; log.InfoFormat("{0:X4}: key {1} size {2}\n ", pos - 2, key, size + 1); if (key == 0xff) { log.InfoFormat("end sentinal at {0}", pos - 2); break; } if (key == 0) { //Array.Reverse(buffer, pos, 2); return(BitConverter.ToUInt16(buffer, pos)); } for (int i = 0; i <= size; i++) { Console.Write(" {0:X2}", buffer[pos]); pos++; } } } if (buffer[0] == 'P' && buffer[1] == 'A' && buffer[2] == 5) // ap param { int pos = 4; byte key = 0; while (pos < (1024 * 4)) { key = buffer[pos]; pos++; int group = buffer[pos]; pos++; int type = buffer[pos]; pos++; int size = type_size((ap_var_type)Enum.Parse(typeof(ap_var_type), type.ToString())); Console.Write("{0:X4}: type {1} ({2}) key {3} group {4} size {5}\n ", pos - 2, type, type_names[type], key, group, size); if (key == 0xff) { log.InfoFormat("end sentinal at {0}", pos - 2); break; } if (key == 0) { //Array.Reverse(buffer, pos, 2); return(BitConverter.ToUInt16(buffer, pos)); } for (int i = 0; i < size; i++) { Console.Write(" {0:X2}", buffer[pos]); pos++; } } } } return(-1); }
private void MenuConnect_Click(object sender, EventArgs e) { givecomport = false; if (comPort.BaseStream.IsOpen) { try { if (talk != null) // cancel all pending speech talk.SpeakAsyncCancelAll(); if (comPort.logfile != null) comPort.logfile.Close(); comPort.BaseStream.DtrEnable = false; comPort.Close(); } catch { } this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.connect; } else { if (CMB_serialport.Text == "TCP") { comPort.BaseStream = new TcpSerial(); } else if (CMB_serialport.Text == "UDP") { comPort.BaseStream = new UdpSerial(); } else { comPort.BaseStream = new SerialPort(); } try { comPort.BaseStream.BaudRate = int.Parse(CMB_baudrate.Text); } catch { } comPort.BaseStream.DataBits = 8; comPort.BaseStream.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1"); comPort.BaseStream.Parity = (Parity)Enum.Parse(typeof(Parity), "None"); comPort.BaseStream.DtrEnable = false; if (config["CHK_resetapmonconnect"] == null || bool.Parse(config["CHK_resetapmonconnect"].ToString()) == true) comPort.BaseStream.DtrEnable = true; if (DialogResult.OK != Common.MessageShowAgain("Mavlink Connect", "Make sure your APM slider switch is in Flight Mode (away from RC pins)")) { return; } try { if (comPort.logfile != null) comPort.logfile.Close(); 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)); } catch { MessageBox.Show("Failed to create log - wont log this session"); } // soft fail comPort.BaseStream.PortName = CMB_serialport.Text; comPort.Open(true); if (comPort.param["SYSID_SW_TYPE"] != null) { if (float.Parse(comPort.param["SYSID_SW_TYPE"].ToString()) == 10) { TOOL_APMFirmware.SelectedIndex = TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduCopter2); } else if (float.Parse(comPort.param["SYSID_SW_TYPE"].ToString()) == 0) { TOOL_APMFirmware.SelectedIndex = TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduPlane); } } cs.firmware = APMFirmware; config[CMB_serialport.Text + "_BAUD"] = CMB_baudrate.Text; if (config["loadwpsonconnect"] != null && bool.Parse(config["loadwpsonconnect"].ToString()) == true) { MenuFlightPlanner_Click(null, null); FlightPlanner.BUT_read_Click(null, null); } this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.disconnect; } catch (Exception ex) { try { comPort.Close(); } catch { } 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[1] != 'P') // this is the apvar header { MessageBox.Show("You dont appear to have uploaded a firmware yet,\n\nPlease goto the firmware page and upload one."); return; } else { Console.WriteLine("Valid eeprom contents"); } } } catch { } MessageBox.Show("Is your CLI switch in Flight position?\n(this is required for MAVlink comms)\n\n" + ex.ToString()); return; } } }
public static int decodeApVar(string comport, string version) { ArduinoComms port = new ArduinoSTK(); if (version == "1280") { port = new ArduinoSTK(); port.BaudRate = 57600; } else if (version == "2560" || version == "2560-2") { port = new ArduinoSTKv2(); port.BaudRate = 115200; } else { return(-1); } port.PortName = comport; port.DtrEnable = true; port.Open(); port.connectAP(); byte[] buffer = port.download(1024 * 4); port.Close(); if (buffer[0] != 'A' || buffer[1] != 'P') // this is the apvar header { return(-1); } else { if (buffer[0] == 'A' && buffer[1] == 'P' && buffer[2] == 2) { // apvar header and version int pos = 4; byte key = 0; while (pos < (1024 * 4)) { int size = buffer[pos] & 63; pos++; key = buffer[pos]; pos++; Console.Write("{0:X4}: key {1} size {2}\n ", pos - 2, key, size + 1); if (key == 0xff) { Console.WriteLine("end sentinal at {0}", pos - 2); break; } if (key == 0) { //Array.Reverse(buffer, pos, 2); return(BitConverter.ToUInt16(buffer, pos)); } for (int i = 0; i <= size; i++) { Console.Write(" {0:X2}", buffer[pos]); pos++; } Console.WriteLine(); } } } return(-1); }