mirror of https://github.com/ArduPilot/ardupilot
909 lines
32 KiB
C#
909 lines
32 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Text.RegularExpressions;
|
|
using System.IO.Ports;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using System.Net;
|
|
|
|
using GMap.NET.WindowsForms;
|
|
using GMap.NET.CacheProviders;
|
|
using log4net;
|
|
|
|
using System.Security.Permissions;
|
|
using ArdupilotMega.Arduino;
|
|
using ArdupilotMega.Utilities;
|
|
|
|
namespace ArdupilotMega
|
|
{
|
|
public partial class temp : Form
|
|
{
|
|
private static readonly ILog log =
|
|
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
public temp()
|
|
{
|
|
InitializeComponent();
|
|
|
|
if (System.Diagnostics.Debugger.IsAttached) {
|
|
|
|
ArdupilotMega.Controls.OpenGLtest ogl = new Controls.OpenGLtest();
|
|
|
|
this.Controls.Add(ogl);
|
|
|
|
ogl.Dock = DockStyle.Fill;
|
|
}
|
|
}
|
|
|
|
private void temp_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
public static byte[] Swap(params object[] list)
|
|
{
|
|
// The copy is made becuase SetValue won't work on a struct.
|
|
// Boxing was used because SetValue works on classes/objects.
|
|
// Unfortunately, it results in 2 copy operations.
|
|
object thisBoxed = list[0]; // Why make a copy?
|
|
Type test = thisBoxed.GetType();
|
|
|
|
int offset = 0;
|
|
byte[] data = new byte[Marshal.SizeOf(thisBoxed)];
|
|
|
|
// System.Net.IPAddress.NetworkToHostOrder is used to perform byte swapping.
|
|
// To convert unsigned to signed, 'unchecked()' was used.
|
|
// See http://stackoverflow.com/questions/1131843/how-do-i-convert-uint-to-int-in-c
|
|
|
|
// Enumerate each structure field using reflection.
|
|
foreach (var field in test.GetFields())
|
|
{
|
|
// field.Name has the field's name.
|
|
|
|
object fieldValue = field.GetValue(thisBoxed); // Get value
|
|
|
|
// Get the TypeCode enumeration. Multiple types get mapped to a common typecode.
|
|
TypeCode typeCode = Type.GetTypeCode(fieldValue.GetType());
|
|
|
|
switch (typeCode)
|
|
{
|
|
case TypeCode.Single: // float
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((Single)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
case TypeCode.Int32:
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((Int32)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
case TypeCode.UInt32:
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((UInt32)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
case TypeCode.Int16:
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((Int16)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
case TypeCode.UInt16:
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((UInt16)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
case TypeCode.Int64:
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((Int64)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
case TypeCode.UInt64:
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((UInt64)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
case TypeCode.Double:
|
|
{
|
|
Array.Copy(BitConverter.GetBytes((Double)fieldValue), data, offset);
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
// System.Diagnostics.Debug.Fail("No conversion provided for this type");
|
|
break;
|
|
}
|
|
}; // switch
|
|
|
|
offset += Marshal.SizeOf(fieldValue);
|
|
} // foreach
|
|
|
|
return data;
|
|
} // 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();
|
|
|
|
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"); }
|
|
}
|
|
}
|
|
|
|
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(); }
|
|
}
|
|
|
|
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(); }
|
|
}
|
|
|
|
public int swapend(int value)
|
|
{
|
|
int len = Marshal.SizeOf(value);
|
|
|
|
byte[] temp = BitConverter.GetBytes(value);
|
|
|
|
Array.Reverse(temp);
|
|
|
|
return BitConverter.ToInt32(temp, 0);
|
|
}
|
|
|
|
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(); }
|
|
|
|
}
|
|
|
|
byte[] readIntelHEX(StreamReader sr)
|
|
{
|
|
byte[] FLASH = new byte[sr.BaseStream.Length / 2];
|
|
|
|
int optionoffset = 0;
|
|
int total = 0;
|
|
|
|
while (!sr.EndOfStream)
|
|
{
|
|
|
|
string line = sr.ReadLine();
|
|
|
|
Regex regex = new Regex(@"^:(..)(....)(..)(.*)(..)$"); // length - address - option - data - checksum
|
|
|
|
Match match = regex.Match(line);
|
|
|
|
int length = Convert.ToInt32(match.Groups[1].Value.ToString(), 16);
|
|
int address = Convert.ToInt32(match.Groups[2].Value.ToString(), 16);
|
|
int option = Convert.ToInt32(match.Groups[3].Value.ToString(), 16);
|
|
log.InfoFormat("len {0} add {1} opt {2}", length, address, option);
|
|
if (option == 0)
|
|
{
|
|
string data = match.Groups[4].Value.ToString();
|
|
for (int i = 0; i < length; i++)
|
|
{
|
|
byte byte1 = Convert.ToByte(data.Substring(i * 2, 2), 16);
|
|
FLASH[optionoffset + address] = byte1;
|
|
address++;
|
|
if ((optionoffset + address) > total)
|
|
total = optionoffset + address;
|
|
}
|
|
}
|
|
else if (option == 2)
|
|
{
|
|
optionoffset += (int)Convert.ToUInt16(match.Groups[4].Value.ToString(), 16) << 4;
|
|
}
|
|
int checksum = Convert.ToInt32(match.Groups[5].Value.ToString(), 16);
|
|
}
|
|
|
|
Array.Resize<byte>(ref FLASH, total);
|
|
|
|
return FLASH;
|
|
}
|
|
|
|
byte[] readIntelHEXv2(StreamReader sr)
|
|
{
|
|
byte[] FLASH = new byte[sr.BaseStream.Length / 2];
|
|
|
|
int optionoffset = 0;
|
|
int total = 0;
|
|
|
|
while (!sr.EndOfStream)
|
|
{
|
|
|
|
string line = sr.ReadLine();
|
|
|
|
if (line.StartsWith(":"))
|
|
{
|
|
int length = Convert.ToInt32(line.Substring(1, 2), 16);
|
|
int address = Convert.ToInt32(line.Substring(3, 4), 16);
|
|
int option = Convert.ToInt32(line.Substring(7, 2), 16);
|
|
log.InfoFormat("len {0} add {1} opt {2}", length, address, option);
|
|
|
|
if (option == 0)
|
|
{
|
|
string data = line.Substring(9, length * 2);
|
|
for (int i = 0; i < length; i++)
|
|
{
|
|
byte byte1 = Convert.ToByte(data.Substring(i * 2, 2), 16);
|
|
FLASH[optionoffset + address] = byte1;
|
|
address++;
|
|
if ((optionoffset + address) > total)
|
|
total = optionoffset + address;
|
|
}
|
|
}
|
|
else if (option == 2)
|
|
{
|
|
optionoffset += (int)Convert.ToUInt16(line.Substring(9, 4), 16) << 4;
|
|
}
|
|
int checksum = Convert.ToInt32(line.Substring(line.Length - 2, 2), 16);
|
|
}
|
|
//Regex regex = new Regex(@"^:(..)(....)(..)(.*)(..)$"); // length - address - option - data - checksum
|
|
}
|
|
|
|
Array.Resize<byte>(ref FLASH, total);
|
|
|
|
return FLASH;
|
|
}
|
|
|
|
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_copy1280_Click(object sender, EventArgs e)
|
|
{
|
|
ArduinoSTK port = new ArduinoSTK();
|
|
port.BaudRate = 57600;
|
|
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 + @"EEPROM1280.bin");
|
|
BinaryWriter bw = new BinaryWriter(sw.BaseStream);
|
|
bw.Write(EEPROM, 0, EEPROM.Length);
|
|
bw.Close();
|
|
|
|
log.Info("Download AP");
|
|
byte[] FLASH = new byte[1024 * 128];
|
|
|
|
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 + @"FLASH1280.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_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_copyto1280_Click(object sender, EventArgs e)
|
|
{
|
|
ArduinoComms port = new ArduinoSTK();
|
|
|
|
port.BaudRate = 57600;
|
|
|
|
port.DataBits = 8;
|
|
port.StopBits = StopBits.One;
|
|
port.Parity = Parity.None;
|
|
port.DtrEnable = true;
|
|
|
|
StreamReader sr = new StreamReader(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"EEPROM1280.bin");
|
|
BinaryReader br = new BinaryReader(sr.BaseStream);
|
|
byte[] EEPROM = br.ReadBytes(1024 * 4);
|
|
br.Close();
|
|
sr.Close();
|
|
|
|
sr = new StreamReader(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"FLASH1280.bin");
|
|
br = new BinaryReader(sr.BaseStream);
|
|
byte[] FLASH = br.ReadBytes(1024 * 128);
|
|
br.Close();
|
|
sr.Close();
|
|
|
|
try
|
|
{
|
|
port.PortName = ArdupilotMega.MainV2.comPortName;
|
|
|
|
port.Open();
|
|
|
|
|
|
|
|
if (port.connectAP())
|
|
{
|
|
log.Info("starting");
|
|
|
|
|
|
port.uploadflash(FLASH, 0, FLASH.Length, 0);
|
|
|
|
port.upload(EEPROM, 0, (short)EEPROM.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 button2_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); }
|
|
|
|
StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.bin");
|
|
BinaryWriter bw = new BinaryWriter(sw.BaseStream);
|
|
bw.Write(FLASH, 0, FLASH.Length);
|
|
bw.Close();
|
|
|
|
}
|
|
|
|
private void BUT_geinjection_Click(object sender, EventArgs e)
|
|
{
|
|
GMapControl MainMap = new GMapControl();
|
|
MainMap.MapType = GMap.NET.MapType.GoogleSatellite;
|
|
|
|
MainMap.CacheLocation = Path.GetDirectoryName(Application.ExecutablePath) + "/gmapcache/";
|
|
|
|
FolderBrowserDialog fbd = new FolderBrowserDialog();
|
|
|
|
try
|
|
{
|
|
fbd.SelectedPath = @"C:\Users\hog\Documents\albany 2011\New folder";
|
|
}
|
|
catch { }
|
|
|
|
fbd.ShowDialog();
|
|
|
|
if (fbd.SelectedPath != "") {
|
|
|
|
string[] files = Directory.GetFiles(fbd.SelectedPath,"*.jpg",SearchOption.AllDirectories);
|
|
|
|
foreach (string file in files)
|
|
{
|
|
log.Info(DateTime.Now.Millisecond + " Doing "+ file);
|
|
Regex reg = new Regex(@"Z([0-9]+)\\([0-9]+)\\([0-9]+)");
|
|
|
|
Match mat = reg.Match(file);
|
|
|
|
int temp = 1 << int.Parse(mat.Groups[1].Value);
|
|
|
|
GMap.NET.GPoint pnt = new GMap.NET.GPoint(int.Parse(mat.Groups[3].Value), int.Parse(mat.Groups[2].Value));
|
|
|
|
BUT_geinjection.Text = file;
|
|
BUT_geinjection.Refresh();
|
|
|
|
//MainMap.Projection.
|
|
|
|
MemoryStream tile = new MemoryStream();
|
|
|
|
Image Img = Image.FromFile(file);
|
|
Img.Save(tile,System.Drawing.Imaging.ImageFormat.Jpeg);
|
|
|
|
tile.Seek(0, SeekOrigin.Begin);
|
|
log.Info(pnt.X + " " + pnt.Y);
|
|
|
|
Application.DoEvents();
|
|
|
|
MainMap.Manager.ImageCacheLocal.PutImageToCache(tile, GMap.NET.MapType.Custom, pnt, int.Parse(mat.Groups[1].Value));
|
|
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private string getfilepath(int x, int y, int zoom)
|
|
{
|
|
var tileRange = 1 << zoom;
|
|
|
|
if (x < 0 || x >= tileRange)
|
|
{
|
|
x = (x % tileRange + tileRange) % tileRange;
|
|
}
|
|
|
|
return ("Z" + zoom + "/" + y + "/" + x + ".png");
|
|
|
|
//return new GMap.NET.GPoint(x, y);
|
|
}
|
|
|
|
private void BUT_clearcustommaps_Click(object sender, EventArgs e)
|
|
{
|
|
GMapControl MainMap = new GMapControl();
|
|
MainMap.MapType = GMap.NET.MapType.GoogleSatellite;
|
|
|
|
MainMap.CacheLocation = Path.GetDirectoryName(Application.ExecutablePath) + "/gmapcache/";
|
|
|
|
int removed = ((GMap.NET.CacheProviders.SQLitePureImageCache)MainMap.Manager.ImageCacheLocal).DeleteOlderThan(DateTime.Now, GMap.NET.MapType.Custom);
|
|
|
|
CustomMessageBox.Show("Removed "+removed + " images\nshrinking file next");
|
|
|
|
GMap.NET.CacheProviders.SQLitePureImageCache.VacuumDb(MainMap.CacheLocation + @"\TileDBv3\en\Data.gmdb");
|
|
|
|
|
|
log.InfoFormat("Removed {0} images", removed);
|
|
}
|
|
private void BUT_lang_edit_Click(object sender, EventArgs e)
|
|
{
|
|
new resedit.Form1().Show();
|
|
}
|
|
|
|
private void BUT_georefimage_Click(object sender, EventArgs e)
|
|
{
|
|
new Georefimage().Show();
|
|
}
|
|
|
|
private void BUT_follow_me_Click(object sender, EventArgs e)
|
|
{
|
|
FollowMe si = new FollowMe();
|
|
ThemeManager.ApplyThemeTo((Form)si);
|
|
si.Show();
|
|
}
|
|
|
|
private void BUT_paramgen_Click(object sender, EventArgs e)
|
|
{
|
|
ParameterMetaDataParser.GetParameterInformation();
|
|
}
|
|
|
|
private void myButton1_Click(object sender, EventArgs e)
|
|
{
|
|
new SerialOutput2().Show();
|
|
}
|
|
}
|
|
}
|