Configurator.Net: Adding Eeprom Save/Reset to default commands

git-svn-id: https://arducopter.googlecode.com/svn/trunk@1635 f9c3cf11-9bcb-44bc-f272-b75c42450872
This commit is contained in:
mandrolic 2011-02-13 18:14:28 +00:00
parent ede88898e7
commit a2d00fefb3
13 changed files with 391 additions and 309 deletions

View File

@ -50,7 +50,6 @@
<Compile Include="PresentationModels\PositionAltitudePidsVm.cs" /> <Compile Include="PresentationModels\PositionAltitudePidsVm.cs" />
<Compile Include="PresentationModels\FlightControlPidsVm.cs" /> <Compile Include="PresentationModels\FlightControlPidsVm.cs" />
<Compile Include="PresentationModels\ItalksToApm.cs" /> <Compile Include="PresentationModels\ItalksToApm.cs" />
<Compile Include="PresentationModels\MonitorVm.cs" />
<Compile Include="PresentationModels\MainVm.cs" /> <Compile Include="PresentationModels\MainVm.cs" />
<Compile Include="PresentationModels\FlightDataMonitorVm.cs" /> <Compile Include="PresentationModels\FlightDataMonitorVm.cs" />
<Compile Include="PresentationModels\VmBase.cs" /> <Compile Include="PresentationModels\VmBase.cs" />
@ -213,8 +212,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Views\icons\arrow_up.png" /> <Content Include="Views\icons\arrow_up.png" />
<Content Include="Views\icons\chip.gif" />
<Content Include="Views\icons\connect.ico" /> <Content Include="Views\icons\connect.ico" />
<Content Include="Views\icons\disconnect.ico" /> <Content Include="Views\icons\disconnect.ico" />
<Content Include="Views\icons\install.png" />
<Content Include="Views\icons\saveIcon.png" /> <Content Include="Views\icons\saveIcon.png" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@ -29,13 +29,13 @@ namespace ArducopterConfigurator.PresentationModels
new PositionAltitudePidsVm(), new PositionAltitudePidsVm(),
//new MotorCommandsVm(session), //new MotorCommandsVm(session),
new CalibrationOffsetsDataVm(), new CalibrationOffsetsDataVm(),
new SerialMonitorVm(session) new SerialMonitorVm()
}; };
foreach (var vm in MonitorVms) foreach (var vm in MonitorVms)
{ {
if (vm is ItalksToApm) if (vm is ItalksToApm)
(vm as ItalksToApm).sendTextToApm += MainVm_sendTextToApm; vm.sendTextToApm += MainVm_sendTextToApm;
} }
ConnectCommand = new DelegateCommand( ConnectCommand = new DelegateCommand(
@ -46,6 +46,10 @@ namespace ArducopterConfigurator.PresentationModels
RefreshPortListCommand = new DelegateCommand(_ => RefreshPorts()); RefreshPortListCommand = new DelegateCommand(_ => RefreshPorts());
RestoreDefaultsCommand = new DelegateCommand(_ => RestoreDefaults(), _ => IsConnected);
WriteToEepromCommand = new DelegateCommand(_ => WriteToEeprom(), _ => IsConnected);
ConnectionState = SessionStates.Disconnected; ConnectionState = SessionStates.Disconnected;
AvailablePorts = new BindingList<string>(); AvailablePorts = new BindingList<string>();
@ -60,6 +64,8 @@ namespace ArducopterConfigurator.PresentationModels
SelectedPort = AvailablePorts[AvailablePorts.Count-1]; SelectedPort = AvailablePorts[AvailablePorts.Count-1];
} }
void MainVm_sendTextToApm(object sender, sendTextToApmEventArgs e) void MainVm_sendTextToApm(object sender, sendTextToApmEventArgs e)
{ {
if (sender.Equals(_selectedVm)==false) if (sender.Equals(_selectedVm)==false)
@ -80,6 +86,18 @@ namespace ArducopterConfigurator.PresentationModels
AvailablePorts.Add(c); AvailablePorts.Add(c);
} }
private void RestoreDefaults()
{
if (_comms.IsConnected)
_comms.Send("Y");
}
private void WriteToEeprom()
{
if (_comms.IsConnected)
_comms.Send("W");
}
void _session_LineOfDataReceived(string strRx) void _session_LineOfDataReceived(string strRx)
{ {
// If we are waiting for the version string // If we are waiting for the version string
@ -106,6 +124,10 @@ namespace ArducopterConfigurator.PresentationModels
public ICommand RefreshPortListCommand { get; private set; } public ICommand RefreshPortListCommand { get; private set; }
public ICommand RestoreDefaultsCommand { get; private set; }
public ICommand WriteToEepromCommand { get; private set; }
public BindingList<string> AvailablePorts { get; private set; } public BindingList<string> AvailablePorts { get; private set; }
public enum SessionStates public enum SessionStates

View File

@ -1,184 +0,0 @@
using System;
using System.Diagnostics;
using System.Text;
namespace ArducopterConfigurator
{
// Vm base has functionality for populating properties using reflection
/// <summary>
/// Monitor VM base class
/// </summary>
/// <remarks>
/// Common base for some factored out things like only passing data to an active
/// Monitor, etc
/// </remarks>
public abstract class MonitorVm : NotifyProperyChangedBase, IPresentationModel
{
private readonly IComms _sp;
protected bool isActive;
protected string[] PropsInUpdateOrder;
protected MonitorVm(IComms sp)
{
_sp = sp;
_sp.LineOfDataReceived += sp_LineOfDataReceived;
}
void sp_LineOfDataReceived(string obj)
{
if (isActive)
OnStringReceived(obj);
}
/// <summary>
/// Called when the mode is selected
/// </summary>
/// <remarks>
/// Any initialising commands should be sent to the serial port
/// when this method is called.
/// </remarks>
public void Activate()
{
isActive = true;
OnActivated();
}
public void DeActivate()
{
isActive = false;
OnDeactivated();
}
public event EventHandler updatedByApm;
protected virtual void OnDeactivated()
{
}
protected virtual void OnActivated()
{
}
/// <summary>
/// Send raw text to the Arducopter
/// </summary>
protected void SendString(string strToSend)
{
if (_sp.IsConnected)
_sp.Send(strToSend);
}
/// <summary>
/// Call-back for text sent back from the Arducopter
/// </summary>
/// <remarks>
/// This is called when a full line of text is received from the APM
/// This will not be called when the mode is not selected
/// </remarks>
protected abstract void OnStringReceived(string strReceived);
#region Implementation of IPresentationModel
public abstract string Name { get; }
#endregion
// Common method for populating properties, using a hardcoded
// property update order, and reflection to get the property type
protected void PopulatePropsFromUpdate(string strRx, bool fireInpc)
{
var strs = strRx.Split(',');
if (PropsInUpdateOrder.Length!=strs.Length)
{
Console.WriteLine(Name + ": Processing update with " + strs.Length
+ " values, but have " + PropsInUpdateOrder.Length
+ " properties to populate. Ignoring this update");
return;
}
for (int i = 0; i < PropsInUpdateOrder.Length; i++)
{
var prop = this.GetType().GetProperty(PropsInUpdateOrder[i]);
var s = strs[i];
object value = null;
if (prop == null)
{
Console.WriteLine("Trying to set non existant property: " + PropsInUpdateOrder[i]);
break;
}
if (prop.PropertyType == typeof(float))
{
float val;
if (!float.TryParse(s, out val))
{
Console.WriteLine("Error parsing float: {0}, VM: {1}" + s, Name);
break;
}
value = val;
}
if (prop.PropertyType == typeof(bool))
{
float val;
if (!float.TryParse(s, out val))
{
Console.WriteLine("Error parsing float (bool): {0}, VM: {1}" + s, Name);
break;
}
value = val != 0.0;
}
if (prop.PropertyType == typeof(int))
{
int val;
if (!int.TryParse(s, out val))
{
Console.WriteLine("Error parsing int:{0}, VM: {1}" + s, Name);
break;
}
value = val;
}
prop.SetValue(this, value, null);
if (fireInpc)
FirePropertyChanged(PropsInUpdateOrder[i]);
}
}
// Common method for sending/updating data
// sentence sent to APM is the commandChar followed by the property
// vals in the correct order, seperated by semicolons
protected void SendPropsWithCommand(string commandChar)
{
var strings = new string[PropsInUpdateOrder.Length];
for (int i = 0; i < PropsInUpdateOrder.Length; i++)
{
var prop = this.GetType().GetProperty(PropsInUpdateOrder[i]);
if (prop.PropertyType == typeof(bool))
strings[i] = ((bool) prop.GetValue(this, null)) ? "1" : "0";
else
strings[i] = prop.GetValue(this, null).ToString();
}
var sentence = commandChar + string.Join(";", strings);
SendString(sentence);
}
public void handleLineOfText(string strRx)
{
throw new System.NotImplementedException();
}
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
}
}

View File

@ -1,17 +1,25 @@
using System;
namespace ArducopterConfigurator.PresentationModels namespace ArducopterConfigurator.PresentationModels
{ {
public class MotorCommandsVm : MonitorVm public class MotorCommandsVm : NotifyProperyChangedBase, IPresentationModel
{ {
public MotorCommandsVm(IComms _sp) public string Name
: base(_sp)
{
}
public override string Name
{ {
get { return "Motor Commands"; } get { return "Motor Commands"; }
} }
public void Activate()
{
}
public void DeActivate()
{
// todo stop
}
public event EventHandler updatedByApm;
public int MotorFront { get; set; } public int MotorFront { get; set; }
public int MotorRear { get; set; } public int MotorRear { get; set; }
public int MotorLeft { get; set; } public int MotorLeft { get; set; }
@ -25,20 +33,10 @@ namespace ArducopterConfigurator.PresentationModels
{ {
} }
public void handleLineOfText(string strRx)
protected override void OnDeactivated()
{ {
} }
protected override void OnActivated() public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
{
}
protected override void OnStringReceived(string strReceived)
{
}
} }
} }

View File

@ -3,52 +3,47 @@ using System.IO.Ports;
namespace ArducopterConfigurator.PresentationModels namespace ArducopterConfigurator.PresentationModels
{ {
public class SerialMonitorVm : MonitorVm public class SerialMonitorVm : NotifyProperyChangedBase, IPresentationModel
{ {
private string _text; private string _text;
public SerialMonitorVm(IComms _sp) : base(_sp)
{
_sp.LineOfDataReceived += new Action<string>(_sp_DataReceived);
}
void _sp_DataReceived(string obj)
{
_text += obj;
FirePropertyChanged("ReceviedText");
}
public string ReceviedText { get { return _text; } } public string ReceviedText { get { return _text; } }
public string SendText { get; set; } public string SendText { get; set; }
public string Name
protected override void OnActivated()
{
SendString("X");
_text = string.Empty;
FirePropertyChanged("ReceviedText");
}
protected override void OnStringReceived(string strReceived)
{
_text += strReceived;
FirePropertyChanged("ReceviedText");
}
public override string Name
{ {
get { return "Serial Monitor"; } get { return "Serial Monitor"; }
} }
public void Activate()
{
_text = string.Empty;
FirePropertyChanged("ReceviedText");
}
public void DeActivate()
{
if (sendTextToApm!=null)
sendTextToApm(this, new sendTextToApmEventArgs("X"));
}
public event EventHandler updatedByApm;
public void SendTextCommand() public void SendTextCommand()
{ {
SendString(SendText); if (sendTextToApm != null)
sendTextToApm(this, new sendTextToApmEventArgs(SendText));
SendText = ""; SendText = "";
FirePropertyChanged("SendText"); FirePropertyChanged("SendText");
} }
public void handleLineOfText(string strRx)
{
_text += strRx + Environment.NewLine;
FirePropertyChanged("ReceviedText");
}
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
} }
} }

View File

@ -12,10 +12,13 @@ namespace ArducopterConfiguratorTest
[SetUp] [SetUp]
public void Setup() public void Setup()
{ {
_mockComms = new MockComms();
_vm = new MotorCommandsVm(_mockComms);
} }
// Todo
// test that it stops all motors on deactivate

View File

@ -3,55 +3,55 @@ using NUnit.Framework;
namespace ArducopterConfiguratorTest namespace ArducopterConfiguratorTest
{ {
public abstract class VmTestBase<T> where T : MonitorVm // public abstract class VmTestBase<T> where T : MonitorVm
{ // {
protected T _vm; // protected T _vm;
protected MockComms _mockComms; // protected MockComms _mockComms;
protected string sampleLineOfData; // should be taken from a real APM if possible // protected string sampleLineOfData; // should be taken from a real APM if possible
protected string getCommand; // protected string getCommand;
protected string setCommand; // protected string setCommand;
//
[Test] // [Test]
public void ActivateSendsCorrectCommand() // public void ActivateSendsCorrectCommand()
{ // {
_vm.Activate(); // _vm.Activate();
Assert.AreEqual(1, _mockComms.SentItems.Count); // Assert.AreEqual(1, _mockComms.SentItems.Count);
Assert.AreEqual(getCommand, _mockComms.SentItems[0]); // Assert.AreEqual(getCommand, _mockComms.SentItems[0]);
} // }
//
[Test] // [Test]
public void ReceivedDataIgnoredWhenNotActive() // public void ReceivedDataIgnoredWhenNotActive()
{ // {
bool inpcFired = false; // bool inpcFired = false;
_vm.PropertyChanged += delegate { inpcFired = true; }; // _vm.PropertyChanged += delegate { inpcFired = true; };
//
_mockComms.FireLineRecieve(sampleLineOfData); // _mockComms.FireLineRecieve(sampleLineOfData);
Assert.False(inpcFired); // Assert.False(inpcFired);
} // }
//
[Test] // [Test]
public void ReceivedDataIgnoredAfterDeActive() // public void ReceivedDataIgnoredAfterDeActive()
{ // {
_vm.Activate(); // _vm.Activate();
_mockComms.FireLineRecieve(sampleLineOfData); // _mockComms.FireLineRecieve(sampleLineOfData);
_vm.DeActivate(); // _vm.DeActivate();
_mockComms.FireLineRecieve(sampleLineOfData); // _mockComms.FireLineRecieve(sampleLineOfData);
bool inpcFired = false; // bool inpcFired = false;
_vm.PropertyChanged += delegate { inpcFired = true; }; // _vm.PropertyChanged += delegate { inpcFired = true; };
//
Assert.False(inpcFired); // Assert.False(inpcFired);
} // }
//
[Test] // [Test]
public void UpdateStringReceivedPopulatesValues() // public void UpdateStringReceivedPopulatesValues()
{ // {
bool inpcFired = false; // bool inpcFired = false;
_vm.PropertyChanged += delegate { inpcFired = true; }; // _vm.PropertyChanged += delegate { inpcFired = true; };
//
_vm.Activate(); // _vm.Activate();
_mockComms.FireLineRecieve(sampleLineOfData); // _mockComms.FireLineRecieve(sampleLineOfData);
//
Assert.True(inpcFired); // Assert.True(inpcFired);
} // }
} // }
} }

View File

@ -29,6 +29,7 @@
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AcroConfigView));
this.button2 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button();
this.AcroModeConfigVmBindingSource = new System.Windows.Forms.BindingSource(this.components); this.AcroModeConfigVmBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.groupBox4 = new System.Windows.Forms.GroupBox(); this.groupBox4 = new System.Windows.Forms.GroupBox();
@ -65,11 +66,11 @@
// button2 // button2
// //
this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AcroModeConfigVmBindingSource, "RefreshCommand", true)); this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AcroModeConfigVmBindingSource, "RefreshCommand", true));
this.button2.Location = new System.Drawing.Point(125, 109); this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image")));
this.button2.Location = new System.Drawing.Point(206, 108);
this.button2.Name = "button2"; this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(65, 23); this.button2.Size = new System.Drawing.Size(26, 26);
this.button2.TabIndex = 12; this.button2.TabIndex = 12;
this.button2.Text = "Refresh";
this.button2.UseVisualStyleBackColor = true; this.button2.UseVisualStyleBackColor = true;
// //
// AcroModeConfigVmBindingSource // AcroModeConfigVmBindingSource
@ -277,11 +278,11 @@
// button1 // button1
// //
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AcroModeConfigVmBindingSource, "UpdateCommand", true)); this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AcroModeConfigVmBindingSource, "UpdateCommand", true));
this.button1.Location = new System.Drawing.Point(196, 109); this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
this.button1.Location = new System.Drawing.Point(235, 108);
this.button1.Name = "button1"; this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(65, 23); this.button1.Size = new System.Drawing.Size(26, 26);
this.button1.TabIndex = 8; this.button1.TabIndex = 8;
this.button1.Text = "Update";
this.button1.UseVisualStyleBackColor = true; this.button1.UseVisualStyleBackColor = true;
// //
// textBox10 // textBox10

View File

@ -120,6 +120,90 @@
<metadata name="AcroModeConfigVmBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="AcroModeConfigVmBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="button2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAALVSURBVDhPY2CgGojfz8Hgd0SKIXC/DBiD2CAxYoFW3fnE
yHl37sUvufskFogj591+KF92NhGkXzDjqI5GzdlyqawjBjjNk8g6GpK35t7XGeff/p8OxJ0Hn/3RqjyZ
yhC4Uyx8xrXDc0++/l+x4cEF3bLjngwM9UyoBlms5LRvOzOncfeT/73HXv7vP/Hqf+GaO+9ks/bbMPiv
F/DqPTeza9fDz+uuvv9fs/HeVbA4MpBL2eGTv+rWh66Dz/7Hzrx0r2TN7S+xMy7eYXBbLgtWZzyTSyVr
b2Hp6hsf5p569T94wpntDPbzBaBmpLE61R2cWb/94f/U+ZfeiEVv8DMr2VNmVbZ7CoNFLyfCono248Kd
rR077/+tWHvzo3zyRg+InFK3mH/HoVPVm+79927av41BvZMXaCMrg8tMfvQAE/Ceq58w/fSr2g13/qsk
rS6HyKvUy1iW7bgVMOXCf930NdMZGEKZcYa0Vb+6VdXu54FTzv+XjVjUCHVBsZh6ypoTetVH/qvELVnO
wBCPGvcWvUI8tl3BQIv4xDwnR+kU7f6uU7r3t4jX1GSYRczygTMm6JXu/6+RvPo+p36VGbILhBy73IzS
Vz5T8J82XSly/gn1koP/NVNXP+W2aNKFqxMwrbbTSlrxSit/938538kHuVRyDWFekXDuqtXK3flfIXXz
H4X07f/Usnf8l/PqB3rVmBXJImNWCYfmOs3ktd+0snb8142ed0fMtCqQgcGVWyVg6laxxB3/2SJ3/BdO
2PFf0X/aLVbVLIwUycjAby8gZl7aqR0x75NuyJRrfCrhbgwitkYawdMeKyVt/i8ZswEY8pv+6wRPfcKp
EGOO7E1GIIcdiMUYGPiNOMVt8lh51FKAfC8GJu4IbjnPqbwqEct5VCMX86nFLBBUj2piFdTTgeoB6QUD
UNoGhT4vEAsCsSgQSwKxFBBLQPnCQFoAiLmhmsH5AQAEwRbllcrpQwAAAABJRU5ErkJggg==
</value>
</data>
<data name="button1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
c7uNnGi8xn9S4RHZGLiTUQAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>259, 17</value> <value>259, 17</value>
</metadata> </metadata>

View File

@ -29,6 +29,7 @@
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AltitudeHoldConfigView));
this.label4 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label();
@ -73,7 +74,7 @@
this.textBox4.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AltitudeHoldConfigBindingSource, "D", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); this.textBox4.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AltitudeHoldConfigBindingSource, "D", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.textBox4.Location = new System.Drawing.Point(27, 64); this.textBox4.Location = new System.Drawing.Point(27, 64);
this.textBox4.Name = "textBox4"; this.textBox4.Name = "textBox4";
this.textBox4.Size = new System.Drawing.Size(78, 20); this.textBox4.Size = new System.Drawing.Size(50, 20);
this.textBox4.TabIndex = 13; this.textBox4.TabIndex = 13;
// //
// AltitudeHoldConfigBindingSource // AltitudeHoldConfigBindingSource
@ -85,7 +86,7 @@
this.textBox5.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AltitudeHoldConfigBindingSource, "I", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); this.textBox5.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AltitudeHoldConfigBindingSource, "I", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.textBox5.Location = new System.Drawing.Point(27, 38); this.textBox5.Location = new System.Drawing.Point(27, 38);
this.textBox5.Name = "textBox5"; this.textBox5.Name = "textBox5";
this.textBox5.Size = new System.Drawing.Size(78, 20); this.textBox5.Size = new System.Drawing.Size(50, 20);
this.textBox5.TabIndex = 12; this.textBox5.TabIndex = 12;
// //
// textBox6 // textBox6
@ -93,29 +94,29 @@
this.textBox6.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AltitudeHoldConfigBindingSource, "P", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); this.textBox6.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AltitudeHoldConfigBindingSource, "P", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.textBox6.Location = new System.Drawing.Point(27, 12); this.textBox6.Location = new System.Drawing.Point(27, 12);
this.textBox6.Name = "textBox6"; this.textBox6.Name = "textBox6";
this.textBox6.Size = new System.Drawing.Size(78, 20); this.textBox6.Size = new System.Drawing.Size(50, 20);
this.textBox6.TabIndex = 11; this.textBox6.TabIndex = 11;
// //
// button2 // button2
// //
this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AltitudeHoldConfigBindingSource, "RefreshCommand", true)); this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AltitudeHoldConfigBindingSource, "RefreshCommand", true));
this.button2.Location = new System.Drawing.Point(119, 96); this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image")));
this.button2.Location = new System.Drawing.Point(205, 93);
this.button2.Name = "button2"; this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(74, 23); this.button2.Size = new System.Drawing.Size(26, 26);
this.button2.TabIndex = 18; this.button2.TabIndex = 18;
this.button2.Text = "Refresh";
this.button2.UseVisualStyleBackColor = true; this.button2.UseVisualStyleBackColor = true;
// //
// button1 // button1
// //
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AltitudeHoldConfigBindingSource, "UpdateCommand", true)); this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AltitudeHoldConfigBindingSource, "UpdateCommand", true));
this.button1.Location = new System.Drawing.Point(199, 96); this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
this.button1.Location = new System.Drawing.Point(237, 93);
this.button1.Name = "button1"; this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(74, 23); this.button1.Size = new System.Drawing.Size(26, 26);
this.button1.TabIndex = 17; this.button1.TabIndex = 17;
this.button1.Text = "Update";
this.button1.UseVisualStyleBackColor = true; this.button1.UseVisualStyleBackColor = true;
// //
// AltitudeHoldConfigView // AltitudeHoldConfigView

View File

@ -120,4 +120,88 @@
<metadata name="AltitudeHoldConfigBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="AltitudeHoldConfigBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="button2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALVSURBVDhPY2CgGojfz8Hgd0SKIXC/DBiD2CAxYoFW3fnE
yHl37sUvufskFogj591+KF92NhGkXzDjqI5GzdlyqawjBjjNk8g6GpK35t7XGeff/p8OxJ0Hn/3RqjyZ
yhC4Uyx8xrXDc0++/l+x4cEF3bLjngwM9UyoBlms5LRvOzOncfeT/73HXv7vP/Hqf+GaO+9ks/bbMPiv
F/DqPTeza9fDz+uuvv9fs/HeVbA4MpBL2eGTv+rWh66Dz/7Hzrx0r2TN7S+xMy7eYXBbLgtWZzyTSyVr
b2Hp6hsf5p569T94wpntDPbzBaBmpLE61R2cWb/94f/U+ZfeiEVv8DMr2VNmVbZ7CoNFLyfCono248Kd
rR077/+tWHvzo3zyRg+InFK3mH/HoVPVm+79927av41BvZMXaCMrg8tMfvQAE/Ceq58w/fSr2g13/qsk
rS6HyKvUy1iW7bgVMOXCf930NdMZGEKZcYa0Vb+6VdXu54FTzv+XjVjUCHVBsZh6ypoTetVH/qvELVnO
wBCPGvcWvUI8tl3BQIv4xDwnR+kU7f6uU7r3t4jX1GSYRczygTMm6JXu/6+RvPo+p36VGbILhBy73IzS
Vz5T8J82XSly/gn1koP/NVNXP+W2aNKFqxMwrbbTSlrxSit/938538kHuVRyDWFekXDuqtXK3flfIXXz
H4X07f/Usnf8l/PqB3rVmBXJImNWCYfmOs3ktd+0snb8142ed0fMtCqQgcGVWyVg6laxxB3/2SJ3/BdO
2PFf0X/aLVbVLIwUycjAby8gZl7aqR0x75NuyJRrfCrhbgwitkYawdMeKyVt/i8ZswEY8pv+6wRPfcKp
EGOO7E1GIIcdiMUYGPiNOMVt8lh51FKAfC8GJu4IbjnPqbwqEct5VCMX86nFLBBUj2piFdTTgeoB6QUD
UNoGhT4vEAsCsSgQSwKxFBBLQPnCQFoAiLmhmsH5AQAEwRbllcrpQwAAAABJRU5ErkJggg==
</value>
</data>
<data name="button1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
c7uNnGi8xn9S4RHZGLiTUQAAAABJRU5ErkJggg==
</value>
</data>
</root> </root>

View File

@ -40,6 +40,8 @@ namespace ArducopterConfigurator
this.lblConnectionStatus = new System.Windows.Forms.Label(); this.lblConnectionStatus = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button();
this.toolTip = new System.Windows.Forms.ToolTip(this.components); this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.mainVmBindingSource)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.mainVmBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.availablePortsBindingSource)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.availablePortsBindingSource)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
@ -54,7 +56,7 @@ namespace ArducopterConfigurator
this.tabCtrlMonitorVms.Location = new System.Drawing.Point(12, 10); this.tabCtrlMonitorVms.Location = new System.Drawing.Point(12, 10);
this.tabCtrlMonitorVms.Name = "tabCtrlMonitorVms"; this.tabCtrlMonitorVms.Name = "tabCtrlMonitorVms";
this.tabCtrlMonitorVms.SelectedIndex = 0; this.tabCtrlMonitorVms.SelectedIndex = 0;
this.tabCtrlMonitorVms.Size = new System.Drawing.Size(530, 396); this.tabCtrlMonitorVms.Size = new System.Drawing.Size(530, 386);
this.tabCtrlMonitorVms.TabIndex = 3; this.tabCtrlMonitorVms.TabIndex = 3;
this.tabCtrlMonitorVms.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabCtrlConfigs_Selected); this.tabCtrlMonitorVms.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabCtrlConfigs_Selected);
// //
@ -102,7 +104,7 @@ namespace ArducopterConfigurator
// lblConnectionStatus // lblConnectionStatus
// //
this.lblConnectionStatus.AutoSize = true; this.lblConnectionStatus.AutoSize = true;
this.lblConnectionStatus.Location = new System.Drawing.Point(307, 417); this.lblConnectionStatus.Location = new System.Drawing.Point(189, 418);
this.lblConnectionStatus.Name = "lblConnectionStatus"; this.lblConnectionStatus.Name = "lblConnectionStatus";
this.lblConnectionStatus.Size = new System.Drawing.Size(112, 13); this.lblConnectionStatus.Size = new System.Drawing.Size(112, 13);
this.lblConnectionStatus.TabIndex = 8; this.lblConnectionStatus.TabIndex = 8;
@ -121,11 +123,35 @@ namespace ArducopterConfigurator
this.toolTip.SetToolTip(this.button2, "Refresh port list"); this.toolTip.SetToolTip(this.button2, "Refresh port list");
this.button2.UseVisualStyleBackColor = true; this.button2.UseVisualStyleBackColor = true;
// //
// button3
//
this.button3.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.mainVmBindingSource, "RestoreDefaultsCommand", true, System.Windows.Forms.DataSourceUpdateMode.Never));
this.button3.Image = ((System.Drawing.Image)(resources.GetObject("button3.Image")));
this.button3.Location = new System.Drawing.Point(502, 402);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(40, 34);
this.button3.TabIndex = 10;
this.toolTip.SetToolTip(this.button3, "Restore Defaults");
this.button3.UseVisualStyleBackColor = true;
//
// button4
//
this.button4.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.mainVmBindingSource, "WriteToEepromCommand", true));
this.button4.Image = ((System.Drawing.Image)(resources.GetObject("button4.Image")));
this.button4.Location = new System.Drawing.Point(456, 402);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(40, 34);
this.button4.TabIndex = 11;
this.toolTip.SetToolTip(this.button4, "Save to Eprom");
this.button4.UseVisualStyleBackColor = true;
//
// mainForm // mainForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(554, 445); this.ClientSize = new System.Drawing.Size(554, 445);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2); this.Controls.Add(this.button2);
this.Controls.Add(this.lblConnectionStatus); this.Controls.Add(this.lblConnectionStatus);
this.Controls.Add(this.button1); this.Controls.Add(this.button1);
@ -154,6 +180,8 @@ namespace ArducopterConfigurator
private System.Windows.Forms.Label lblConnectionStatus; private System.Windows.Forms.Label lblConnectionStatus;
private System.Windows.Forms.Button button2; private System.Windows.Forms.Button button2;
private System.Windows.Forms.ToolTip toolTip; private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
} }
} }

View File

@ -178,6 +178,55 @@
LyBmXtqpHTHvk27IlGt8KuFuDCK2RhrB0x4rJW3+LxmzARjym/7rBE99wqkQY47sTUYghx2IxRgY+I04 LyBmXtqpHTHvk27IlGt8KuFuDCK2RhrB0x4rJW3+LxmzARjym/7rBE99wqkQY47sTUYghx2IxRgY+I04
xW3yWHnUUoB8LwYm7ghuOc+pvCoRy3lUIxfzqcUsEFSPamIV1NOB6gHpBQNQ2gaFPi8QCwKxKBBLArEU xW3yWHnUUoB8LwYm7ghuOc+pvCoRy3lUIxfzqcUsEFSPamIV1NOB6gHpBQNQ2gaFPi8QCwKxKBBLArEU
EEtA+cJAWgCIuaGawfkBAATBFuWVyulDAAAAAElFTkSuQmCC EEtA+cJAWgCIuaGawfkBAATBFuWVyulDAAAAAElFTkSuQmCC
</value>
</data>
<data name="button3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
DAAACwwBP0AiyAAAACt0RVh0Q3JlYXRpb24gVGltZQBNb24gNiBEZWMgMjAwNCAxNTozNjo1NyAtMDUw
MOzj3kYAAAAHdElNRQfVBB4SExc2/xIbAAAEtElEQVRYR+1WbUyTVxglWfw3E+MPs2XZh4BZYkKWJZtj
G7APMh1gMcimCIob0gGphVFQS4WC7wApn7UIaDtlQGEO11gzKQxo+abFIl/CgCFO7BgIG4QgiAw8671O
dFjatXPhjz9Omia995zzPOd5eu0A2K0mVpWcGH8qwOoKbFV4YKPMHnZiu3/gZdlGvFPsZqyqdZmyWoCT
3Am/oQdti9XQLqpQs3ABqj/PoWGxDC8WOfz/AtZJ16LzngaSeQFS5qIhnOGCN82GelEJu7xnUNPcapUI
sxUgJV0jWQNCSrBW+iz9bF2sROZdPhJnIiG4zUHE1AFUGKuwvC3kO7mjqrtlRVFmBZR11dF+y3rFMNzr
hHq+FKr5IpTezUXKnSjq/tDUFwgd8UPqxFEkjB/C0TEesmdTcHCQjeekzyOn6huzFflXGXCUvYov60Og
X6hE7ixDncdPh4M/FQrOrQAEGXzhf8Mbnw3tRspUHPz0PrCXbkJBlcJiSywK0Oq0EPFY2Cl1gbvCDbWz
Skhn0yg5dzxwiZw3GoL0yQS8dfENeGRtRiz3PRTn51jMg0UBX2cJMNCuwNxEC+Q6Bg5nX4H81ikUzGWD
PbwH+2/6InkiBswwH45ye2QqAtChZtB4gQ/Rkb22C6irU0McH4xI/y0QhntRCDieYEe64oWcDRD08CCb
yYRkOhmRfaHYkL0erP2vw2+HM3y3b4GP55vIjPEFw9kO5flC60KobdEhS/AJ9BoZdns4ITfWGycFLJyI
YSHjiBeYw1vhkLYePjVeYGm24SXROnDZrggPdEVYgAuC/d5G0C5n9LcUoiw/AscjPkJ52UWTIky2gDhv
VechPf4A/D02o4DZQXEmwRtSIYuKEfM9sS3REe6MAxiuO+LCPgSf/T6igtyokIP73sWAXo42tQT5qXtW
bIdJAeSy2OAPcEmehLnJdkwMqTA2qMRofymGe4ox1HEG16+cxjV9Dvp1J/BTYzq661PRVZNM+3+lMgH6
iji0qASQJe6id/EDnaEqVz1WBZMCyi8pIIkNwMLMAGbGmjE1rH5MhOFq4ZKQAX2eUUg2epvE6G7IQFdd
Gjo1IrSrk6BTCZEa5YXS74pMjuSKFRBHueNJglTB1B+V2TH82GUTRAwXAt5OitjoTymEh/0oEvj+FIxg
n0mIMwQgd5RrmlDdYHodmxXwufdrUH2fBnluGEpOcXBWEkZRcJKDwlwuhfx05BJKZNF4FOXKXAR4Oq1I
bvFFRFpw82oJWn8U0mCRgHVqktBVe5yGjoD0mvS8qz6D9p+go+Y+DH1ldI+s5N4qAe3Vx9CpTvybXEST
39ecgX5tFp2Ea5cldCqutz7E9EgtzZG68bJ1i+hBWMhhQ/e3y9ynUOdEACH/WSem5JTYOJo32u9jqEOK
26P1T0LAOaPrFFp+Mufd9Q/dLycnpA8w2ldiHOHG/ybgqwhvDLYV4tfe8xjpV2B0QGlcSD/g919Uxr1Q
gUlDFd0R0yM1mDa6JYSz482484fWCB0mDBocC2dB06S3sQVMCL3A1n1AzmbEs1Gna7NNAMkCOUzeeSRI
j4Ik2xKIc3PkFqfA2ie2Lb+3+CCx5VJrzjwVsOoV+AugwI2V5L/L8QAAAABJRU5ErkJggg==
</value>
</data>
<data name="button4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
R0lGODlhIAAYAIcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8BISEh0dHSEhISIiISUlIDc3
Nzw8PD09PURERExMTGdnZ21tbYuLi5+fn6ioqKqqqvT09Pr6+v39/f7+/v///wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/78KCgpICAgP8AAAD/AP//AAAA//8A/wD/////
/yH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAD9ACwAAAAAIAAYAAAI3gD7CRzY70LBgwYTIiTIsKHAChkg
SoxIcaLDi/0iZNDIcaPHjhgbSoBAsqTJkxBCCrxQIYJLlDAhMGAwgULIDBsjLKDwoKfPnw9m4sR5kaXL
CBQsAF06k6ZNjDhdLp3qwMHQDEVbSp0KtGnNmzm5dmVwNetRsT+9Pr0YNQJanw0alHVodOtbtWDtohU6
1KxesXihhn0blGxfulrdEg7MdvBdw0QRH11AubLlygoUOA2JYePlz5ivYlVJtnQG06hHqxw4IUPr165j
w15NkEIG27hv685NmyDW3/2AC8cYEAA7
</value> </value>
</data> </data>
</root> </root>