Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 2312 → Rev 2313

/MKLiveView/v1.0/Source/MainWindow.xaml
6,11 → 6,14
xmlns:local="clr-namespace:MKLiveView"
xmlns:WindowsPresentation="clr-namespace:GMap.NET.WindowsPresentation;assembly=GMap.NET.WindowsPresentation"
xmlns:ArtificialHorizon="clr-namespace:MKLiveView.ArtificialHorizon"
xmlns:wpConverter="clr-namespace:MKLiveView"
x:Class="MKLiveView.MainWindow"
mc:Ignorable="d"
Title="MK LiveView 1.0" Height="686" Width="1017" Icon="MK.ico"
DataContext="{Binding RelativeSource={RelativeSource Self}}" Loaded="Window_Loaded" Closing="Window_Closing">
<Window.Resources>
<wpConverter:waypointsConverter x:Key="wpConvert" />
 
<BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
<LinearGradientBrush x:Key="ActiveItemBrush" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFC6F5FF"/>
948,27 → 951,44
<Button x:Name="btnOSDEnter" Content="" HorizontalAlignment="Left" Height="34" Margin="87,90,0,0" VerticalAlignment="Top" Width="52" Click="btnOSDEnter_Click"/>
<Button x:Name="btnOSDLeave" Content="" HorizontalAlignment="Left" Height="34" Margin="144,90,0,0" VerticalAlignment="Top" Width="52" Click="btnOSDLeave_Click"/>
</Grid>
<Grid x:Name="GridWP" Margin="23,36,25,0" Background="#7F000000" Height="387" VerticalAlignment="Top">
<DataGrid x:Name="dgvWP" Height="162" Margin="10,10,10,0" VerticalAlignment="Top" Background="{x:Null}" ItemsSource="{Binding}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="14" HorizontalGridLinesBrush="#FF688CAF" VerticalGridLinesBrush="#FF688CAF" HeadersVisibility="Column" BorderBrush="{x:Null}" Padding="0"/>
<Button x:Name="btnGetWPList" Content="" HorizontalAlignment="Left" Height="39" Margin="10,172,0,0" VerticalAlignment="Top" Width="78" Click="btnGetWP_Click" ToolTip="Download WP-list from copter" BorderBrush="#FFBDBDBD">
<Grid x:Name="GridWP" Margin="23,36,25,0" Background="#7F000000" Height="456" VerticalAlignment="Top">
<Button x:Name="btnGetWPList" Content="" HorizontalAlignment="Left" Height="39" Margin="10,362,0,0" VerticalAlignment="Top" Width="78" Click="btnGetWP_Click" ToolTip="Download WP-list from copter" BorderBrush="#FFBDBDBD">
<Button.Background>
<ImageBrush ImageSource="Images/FromCopterToPc.png" Stretch="Uniform"/>
</Button.Background>
</Button>
<Label x:Name="label4" Content="Items" HorizontalAlignment="Right" Margin="0,350,5,0" VerticalAlignment="Top" Width="80" Foreground="White"/>
<Label x:Name="lblWPCount" Content="##" HorizontalAlignment="Right" Margin="0,351,23,0" VerticalAlignment="Top" Width="28" Foreground="White"/>
<Label x:Name="label4" Content="Items" HorizontalAlignment="Right" Margin="0,361,5,0" VerticalAlignment="Top" Width="80" Foreground="White"/>
<Label x:Name="lblWPCount" Content="##" HorizontalAlignment="Right" Margin="0,362,23,0" VerticalAlignment="Top" Width="28" Foreground="White"/>
<Label x:Name="label4_Copy" Content="WP Index" HorizontalAlignment="Left" Margin="94,194,0,0" VerticalAlignment="Top" Width="80" Foreground="White" Visibility="Hidden"/>
<Label x:Name="lblWPIndex" Content="##" HorizontalAlignment="Left" Margin="170,194,0,0" VerticalAlignment="Top" Width="28" Foreground="White" Visibility="Hidden"/>
<Button x:Name="btnSendWPList" Content="" HorizontalAlignment="Left" Height="39" Margin="10,211,0,0" VerticalAlignment="Top" Width="78" ToolTip="Upload WP-list to copter" BorderBrush="#FFBDBDBD" Click="btnSendWPList_Click">
<Button x:Name="btnSendWPList" Content="" HorizontalAlignment="Left" Height="39" Margin="96,362,0,0" VerticalAlignment="Top" Width="78" ToolTip="Upload WP-list to copter" BorderBrush="#FFBDBDBD" Click="btnSendWPList_Click">
<Button.Background>
<ImageBrush ImageSource="Images/FromPcToCopter.png" Stretch="Uniform"/>
</Button.Background>
</Button>
<Button x:Name="btnLoadWPLFile" Content="" HorizontalAlignment="Left" Height="43" Margin="10,257,0,0" VerticalAlignment="Top" Width="42" ToolTip="load wp-list from file" BorderBrush="#FFBDBDBD" HorizontalContentAlignment="Center" Click="btnLoadWPLFile_Click">
<Button x:Name="btnLoadWPLFile" Content="" HorizontalAlignment="Left" Height="43" Margin="10,406,0,0" VerticalAlignment="Top" Width="42" ToolTip="load wp-list from file" BorderBrush="#FFBDBDBD" HorizontalContentAlignment="Center" Click="btnLoadWPLFile_Click">
<Button.Background>
<ImageBrush ImageSource="Images/LoadFile.png" Stretch="Uniform"/>
</Button.Background>
</Button>
<DataGrid x:Name="dgvWP" Height="352" Margin="10,5,10,0" VerticalAlignment="Top" Background="{x:Null}" ItemsSource="{Binding dtWaypoints1}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="14" HorizontalGridLinesBrush="#FF688CAF" VerticalGridLinesBrush="#FF688CAF" HeadersVisibility="Column" BorderBrush="{x:Null}" Padding="0" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Index" Binding="{Binding Path=Index}"/>
<DataGridTextColumn Header="Type" Binding="{Binding Path=Type, Converter={StaticResource wpConvert}, ConverterParameter= Type}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
<DataGridTextColumn Header="Latitude" Binding="{Binding Path=Latitude, Converter={StaticResource wpConvert}, ConverterParameter= Latitude}"/>
<DataGridTextColumn Header="Longitude" Binding="{Binding Path=Longitude, Converter={StaticResource wpConvert}, ConverterParameter= Longitude}"/>
<DataGridTextColumn Header="Altitude" Binding="{Binding Path=Altitude, Converter={StaticResource wpConvert}, ConverterParameter= Altitude}"/>
<DataGridTextColumn Header="Heading" Binding="{Binding Path=Heading, Converter={StaticResource wpConvert}, ConverterParameter= Heading}"/>
<DataGridTextColumn Header="Speed" Binding="{Binding Path=Speed, Converter={StaticResource wpConvert}, ConverterParameter= Speed}"/>
<DataGridTextColumn Header="ClimbRate" Binding="{Binding Path=ClimbRate, Converter={StaticResource wpConvert}, ConverterParameter= ClimbRate}"/>
<DataGridTextColumn Header="Radius" Binding="{Binding Path=Radius, Converter={StaticResource wpConvert}, ConverterParameter= Radius}"/>
<DataGridTextColumn Header="HoldTime" Binding="{Binding Path=HoldTime, Converter={StaticResource wpConvert}, ConverterParameter= DelayTime}"/>
<DataGridTextColumn Header="AutoTrigger" Binding="{Binding Path=AutoTrigger, Converter={StaticResource wpConvert}, ConverterParameter= AutoTrigger}"/>
<DataGridTextColumn Header="CamAngle" Binding="{Binding Path=CamAngle, Converter={StaticResource wpConvert}, ConverterParameter= CamAngle}"/>
<DataGridTextColumn Header="Out1Timer" Binding="{Binding Path=Out1Timer}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<Grid x:Name="GridSideBarR" Background="#66000000" Margin="0,36,0,0" HorizontalAlignment="Right" Width="23">
<Label x:Name="labelMotordata" Content="Motors" Padding="0" RenderTransformOrigin="0.5,0.5" Margin="-25,233,-26,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Stretch" MouseDown="labelMotorData_MouseDown" FontSize="14" HorizontalAlignment="Left" Width="74" Height="22" VerticalAlignment="Top">
/MKLiveView/v1.0/Source/MainWindow.xaml.cs
26,6 → 26,7
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.Globalization;
 
namespace MKLiveView
{
262,7 → 263,9
DataTable dtMotors1 = new DataTable();
 
DataTable dtWaypoints = new DataTable();
static volatile int _iWP = -1;
static volatile int _iWPCount = -1;
static volatile int _iWPIndex = -1;
int _iWPTimeout = 1000;
bool _bGetWP = false;
static volatile bool _bGetWPCount = false;
 
347,50 → 350,15
/// </summary>
void _dataTablesInit()
{
//dtAnalog.Columns.Add("ID");
//dtAnalog.Columns.Add("Value");
// dataGridView1.DataSource = dtAnalog;
 
dtMotors1.Columns.Add("#");
if (Thread.CurrentThread.CurrentUICulture.Name == "")
if (Thread.CurrentThread.CurrentUICulture.Name == "de-DE")
dtMotors1.Columns.Add("Strom");
else
dtMotors1.Columns.Add("Current");
else
dtMotors1.Columns.Add("Strom");
dtMotors1.Columns.Add("Temp");
//dtMotors2.Columns.Add("#");
//if (Thread.CurrentThread.CurrentUICulture.Name == "")
// dtMotors2.Columns.Add("Current");
//else
// dtMotors2.Columns.Add("Strom");
//dtMotors2.Columns.Add("Temp");
dgvMotors1.DataContext = dtMotors1.DefaultView;
//dgvMotors2.DataContext = dtMotors2.DefaultView;
_initDTMotors();
//dgvMotors1.Columns[0].Width = 24;
//dgvMotors1.Columns[1].Width = 74;
//dgvMotors1.Columns[2].Width = 74;
//dgvMotors2.Columns[0].Width = 24;
//dgvMotors2.Columns[1].Width = 74;
//dgvMotors2.Columns[2].Width = 74;
 
dtWaypoints.Columns.Add("Index");
dtWaypoints.Columns.Add("Type");
dtWaypoints.Columns.Add("Name");
dtWaypoints.Columns.Add("Latitude");
dtWaypoints.Columns.Add("Longitude");
dtWaypoints.Columns.Add("Altitude");
dtWaypoints.Columns.Add("Heading");
dtWaypoints.Columns.Add("Speed");
dtWaypoints.Columns.Add("Altitude rate");
dtWaypoints.Columns.Add("Tol radius");
dtWaypoints.Columns.Add("Hold time");
dtWaypoints.Columns.Add("AutoTrigger");
dtWaypoints.Columns.Add("Cam angle");
dtWaypoints.Columns.Add("Event");
dtWaypoints.Columns.Add("Eventchan Val");
dtWaypoints.Columns.Add("Status");
dtWaypoints.PrimaryKey = new DataColumn[] { dtWaypoints.Columns["Index"] };
dgvWP.DataContext = dtWaypoints.DefaultView;
Setter setter = new Setter(ContentControl.PaddingProperty, new Thickness(5,0,5,0));
Style style = new Style(typeof(System.Windows.Controls.Primitives.DataGridColumnHeader));
style.Setters.Add(setter);
398,14 → 366,33
style.Setters.Add(setter);
setter = new Setter(ContentControl.ForegroundProperty, new SolidColorBrush(Colors.White));
style.Setters.Add(setter);
 
dtWaypoints.Columns.Add("Index",typeof(int));
dtWaypoints.Columns.Add("Type",typeof(string));
dtWaypoints.Columns.Add("Name",typeof(string));
dtWaypoints.Columns.Add("Latitude",typeof(string));
dtWaypoints.Columns.Add("Longitude",typeof(string));
dtWaypoints.Columns.Add("Altitude",typeof(string));
dtWaypoints.Columns.Add("Heading",typeof(string));
dtWaypoints.Columns.Add("Speed",typeof(string));
dtWaypoints.Columns.Add("ClimbRate",typeof(string));
dtWaypoints.Columns.Add("Radius",typeof(string));
dtWaypoints.Columns.Add("HoldTime",typeof(string));
dtWaypoints.Columns.Add("AutoTrigger",typeof(string));
dtWaypoints.Columns.Add("CamAngle",typeof(string));
dtWaypoints.Columns.Add("Event",typeof(string));
dtWaypoints.Columns.Add("Out1Timer",typeof(string));
dtWaypoints.Columns.Add("Status",typeof(string));
dtWaypoints.PrimaryKey = new DataColumn[] { dtWaypoints.Columns["Index"] };
dgvWP.ItemsSource = dtWaypoints.DefaultView;
dgvWP.ColumnHeaderStyle = new Style();
dgvWP.ColumnHeaderStyle = style;
 
 
}
/// <summary>
/// initialize the 2 datatables for motor values
/// dtMotors1 - motor 1 - 4
/// dtMotors2 - motor 5 - 8
/// DataGridView dgvMotors1/2 are bound to dtMotors1/2
/// initialize the datatable dtMotors1 for motor values
/// DataGridView dgvMotors1 is bound to dtMotors1
/// </summary>
void _initDTMotors()
{
418,16 → 405,7
dtMotors1.Rows[i].SetField(1, "NA");
dtMotors1.Rows[i].SetField(2, "NA");
}
//if (dtMotors2.Rows.Count < 4)
// dtMotors2.Rows.Add((i + 5).ToString(), "NA", "NA");
//else
//{
// dtMotors2.Rows[i].SetField(1, "NA");
// dtMotors2.Rows[i].SetField(2, "NA");
//}
}
// Dispatcher.Invoke((Action)(() => dgvMotors1.UpdateLayout()));
//dgvMotors2.Invoke((Action)(() => dgvMotors2.Refresh()));
}
 
#endregion init
523,7 → 501,8
}
private void btnSendWPList_Click(object sender, RoutedEventArgs e)
{
 
Thread t = new Thread(new ThreadStart(_sendWPList));
t.Start();
}
 
private void btnConnectToCopter_Click(object sender, RoutedEventArgs e)
1241,6 → 1220,9
_processWPData(data);
break;
 
case 'W': //return new Waypoint items count after sending waypoint to copter
_iWPCount = data[0];
break;
//default:
// Log(LogMsgType.Incoming, "cmd: " + cmdID.ToString());
// Log(LogMsgType.Incoming, BitConverter.ToString(data));
1778,16 → 1760,10
/// <param name="data">the received byte array to process</param>
void _processWPData(byte[] data)
{
_iWP = data[0];
_iWPCount = data[0];
_bGetWPCount = false;
if (data.Length >= 28)
{
//int count = data[0];
//int index = data[1];
//cbWPIndex.Invoke((Action)(() => cbWPIndex.Items.Clear()));
//for (int i = 0; i < count; i++)
// cbWPIndex.Invoke((Action)(() => cbWPIndex.Items.Add(i + 1)));
//cbWPIndex.Invoke((Action)(() => cbWPIndex.SelectedItem = index));
Dispatcher.Invoke(() => lblWPIndex.Content = data[1].ToString());
Dispatcher.Invoke(() => lblWPCount.Content = data[0].ToString());
if (_bGetWP)
1796,14 → 1772,9
dtWaypoints.Rows.Clear();
DataRow dr = dtWaypoints.NewRow();
dr = Waypoints.toDataRow(data, dr);
//if (dtWaypoints.Rows.Contains(data[1]))
//{
// dtWaypoints.Rows.Find(data[1]).Delete();
// dtWaypoints.Rows.InsertAt(dr, data[1] - 1);
//}
//else
dtWaypoints.Rows.Add(dr);
 
dtWaypoints.Rows.Add(dr);
Dispatcher.Invoke(() => dgvWP.Items.Refresh());
Dispatcher.Invoke(() => _iWPIndex = data[1]);
if (data[1] == data[0])
{
_bGetWP = false;
1816,7 → 1787,6
{
Dispatcher.Invoke(() => lblWPIndex.Content = 0);
Dispatcher.Invoke(() => lblWPCount.Content = 0);
// Debug.Print(new string(ASCIIEncoding.ASCII.GetChars(data, 0, data.Length)));
}
}
/// <summary>
2047,7 → 2017,7
_getpWP(1);
while (_bGetWPCount)
Thread.Sleep(100);
if (_iWP > 0)
if (_iWPCount > 0)
_getWPList();
// }
//}
2055,14 → 2025,108
void _getWPList()
{
_bGetWP = true;
for (int j = 0; j < _iWP; j++)
int iTimeout=0;
for (int j = 0; j < _iWPCount; j++)
{
_getpWP(j + 1);
Thread.Sleep(10);
iTimeout = 0;
while (_iWPIndex != j + 1 & iTimeout < _iWPTimeout * 5)
{
Thread.Sleep(1);
iTimeout++;
}
}
}
void _sendWPList()
{
if (serialPortCtrl.Port.IsOpen)
{
byte[] bData = new byte[30];
for (int i = 0; i < 30; i++)
bData[i] = 0;
Stream serialStream = serialPortCtrl.Port.BaseStream;
byte[] bytes = FlightControllerMessage.CreateMessage('w', 2, bData); //delete all WP on Copter by sending 'invalid'(==0) at index 0
serialStream.Write(bytes, 0, bytes.Length);
 
_iWPCount = -1;
while (_iWPCount == -1)
Thread.Sleep(10);
Dispatcher.Invoke(() => lblWPCount.Content = _iWPCount.ToString());
 
int iVal;
double dVal;
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
for (int i = 0; i < dtWaypoints.Rows.Count; i++)
{
//longitude
dVal = Convert.ToDouble(dtWaypoints.Rows[i][4], nfi);
iVal = (int)(dVal * Math.Pow(10, 7));
bData[0] = (byte)(iVal & 0xff);
bData[1] = (byte)((iVal >> 8) & 0xff);
bData[2] = (byte)((iVal >> 16) & 0xff);
bData[3] = (byte)(iVal >> 24);
//latitude
dVal = Convert.ToDouble(dtWaypoints.Rows[i][3], nfi);
iVal = (int)(dVal * Math.Pow(10, 7));
bData[4] = (byte)(iVal & 0xff);
bData[5] = (byte)((iVal >> 8) & 0xff);
bData[6] = (byte)((iVal >> 16) & 0xff);
bData[7] = (byte)(iVal >> 24);
//altitude
dVal = Convert.ToDouble(dtWaypoints.Rows[i][5], nfi);
iVal = (int)(dVal * 10);
bData[8] = (byte)(iVal & 0xff);
bData[9] = (byte)((iVal >> 8) & 0xff);
bData[10] = (byte)((iVal >> 16) & 0xff);
bData[11] = (byte)(iVal >> 24);
//Status 'NEWDATA'
bData[12] = 1;
//heading
iVal = Convert.ToInt16(dtWaypoints.Rows[i][6]);
bData[13] = (byte)(iVal & 0xff);
bData[14] = (byte)((iVal >> 8) & 0xff);
//ToleranceRadius
bData[15] = Convert.ToByte(dtWaypoints.Rows[i][9]);
//HoldTime
bData[16] = Convert.ToByte(dtWaypoints.Rows[i][10]);
//Event_Flag
bData[17] = Convert.ToByte(dtWaypoints.Rows[i][13]);
//Index
bData[18] = Convert.ToByte((int)dtWaypoints.Rows[i][0]);
//Type
bData[19] = Convert.ToByte(dtWaypoints.Rows[i][1]);
//WP_EventChannelValue
bData[20] = Convert.ToByte(dtWaypoints.Rows[i][14]);
//AltitudeRate
bData[21] = Convert.ToByte(dtWaypoints.Rows[i][8]);
//Speed
bData[22] = Convert.ToByte(dtWaypoints.Rows[i][7]);
//CamAngle
bData[23] = (byte)Convert.ToInt16(dtWaypoints.Rows[i][12]);
//Name
byte[] name = ASCIIEncoding.ASCII.GetBytes((string)dtWaypoints.Rows[i][2]);
bData[24] = name.Length > 0 ? name[0] : (byte)0;
bData[25] = name.Length > 1 ? name[1] : (byte)0;
bData[26] = name.Length > 2 ? name[2] : (byte)0;
bData[27] = name.Length > 3 ? name[3] : (byte)0;
//Autotrigger
bData[28] = Convert.ToByte(dtWaypoints.Rows[i][11]);
 
bytes = FlightControllerMessage.CreateMessage('w', 2, bData);
serialStream.Write(bytes, 0, bytes.Length);
 
_iWPCount = -1;
while (_iWPCount == -1)
Thread.Sleep(10);
Dispatcher.Invoke(() => lblWPCount.Content = _iWPCount.ToString());
}
}
else
Log(LogMsgType.Error, "NOT CONNECTED!");
 
}
 
#region OSD-Menue
 
/// <summary>
2524,6 → 2588,8
int wpnum = Convert.ToInt16(sVal);
string wp;
int i;
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ".";
dtWaypoints.Rows.Clear();
for (int k = 1; k <= wpnum; k++)
{
2536,23 → 2602,23
i++;
sVal = ini.IniReadValue(wp, "Type");
if (sVal != "")
o[i] = ((Waypoints.pointType)(Convert.ToInt16(sVal) - 1)).ToString();
o[i] = Convert.ToInt16(sVal) -1;
i++;
sVal = ini.IniReadValue(wp, "Prefix");
if (sVal != "")
o[i] = sVal == "0" ? "P" + k.ToString() : sVal + k.ToString();
i++;
sVal = ini.IniReadValue(wp, "Longitude");
sVal = ini.IniReadValue(wp, "Latitude");
if (sVal != "")
o[i] = Convert.ToDouble(sVal);
o[i] = Convert.ToDouble(sVal, nfi);
i++;
sVal = ini.IniReadValue(wp, "Latitude");
sVal = ini.IniReadValue(wp, "Longitude");
if (sVal != "")
o[i] = Convert.ToDouble(sVal);
o[i] = Convert.ToDouble(sVal, nfi);
i++;
sVal = ini.IniReadValue(wp, "Altitude");
if (sVal != "")
o[i] = Convert.ToInt16(sVal);
o[i] = Convert.ToDouble(sVal, nfi);
i++;
sVal = ini.IniReadValue(wp, "Heading");
if (sVal != "")
2560,7 → 2626,7
i++;
sVal = ini.IniReadValue(wp, "Speed");
if (sVal != "")
o[i] = Waypoints.WPSpeed(Convert.ToInt16(sVal));
o[i] =Convert.ToInt16(sVal);
i++;
sVal = ini.IniReadValue(wp, "ClimbRate");
if (sVal != "")
2580,7 → 2646,7
i++;
sVal = ini.IniReadValue(wp, "CAM-Nick");
if (sVal != "")
o[i] = Waypoints.CAMAngle(Convert.ToInt16(sVal));
o[i] = Convert.ToInt16(sVal);
i++;
o[i] = 0;
i++;
2591,6 → 2657,7
o[i] = "New";
 
dr.ItemArray = o;
// dtWaypoints.Rows.Add(dr);
dtWaypoints.Rows.Add(dr);
Dispatcher.Invoke(() => lblWPIndex.Content = k.ToString());
Dispatcher.Invoke(() => lblWPCount.Content = k.ToString());
2631,6 → 2698,51
}
}
 
public class waypointsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
switch ((string)parameter)
{
case "Latitude":
return value.ToString() + " °";
case "Longitude":
return value.ToString() + " °";
case "Radius":
return value.ToString() + " m";
case "Altitude":
return value.ToString() + " m";
case "ClimbRate":
return value.ToString() == "255" ? "Auto" : (System.Convert.ToDouble(value) / 10).ToString("0.0 m/s");
case "DelayTime":
return value.ToString() + " s";
case "Heading":
return Waypoints.Heading(System.Convert.ToInt32(value));
case "Speed":
return Waypoints.WPSpeed(System.Convert.ToInt16(value));
case "CamAngle":
return Waypoints.CAMAngle(System.Convert.ToInt16(value));
case "Type":
return ((Waypoints.pointType)(System.Convert.ToInt16(value))).ToString();
case "AutoTrigger":
return value.ToString() == "0" ? "- - -" : value.ToString() + " m";
case "Status":
return Waypoints.WPSpeed(System.Convert.ToInt16(value));
}
 
return value.ToString();
}
else return value;
}
 
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
 
public class IniFile
{
public string path;
/MKLiveView/v1.0/Source/Waypoints.cs
25,14 → 25,14
 
public static string CAMAngle(int iVal)
{
if (iVal == 255)
if (iVal == 255 | iVal < 0)
return "Auto";
if (iVal < 0)
return "POI " + iVal.ToString();
//if (iVal < 0)
// return "WP " + (Math.Abs(iVal)).ToString();
if (iVal == 0)
return "- - -";
 
return iVal.ToString();
return iVal.ToString("0 °");
}
 
public static string WPSpeed(int iVal)
47,6 → 47,17
return iVal.ToString();
}
 
public static string Heading(int iVal)
{
if (iVal == 0)
return "- - -";
if (iVal > 0 && iVal < 360)
return iVal.ToString("0 °");
if (iVal < 0)
return "WP " + (Math.Abs(iVal)).ToString();
 
return iVal.ToString();
}
public static DataRow toDataRow(byte[]data, DataRow dr)
{
double longitude = 0, latitude = 0, altitude = 0;
56,6 → 67,7
if (data.Length >= 28)
{
int i_32, iVal;
 
i_32 = data[5];
iVal = i_32 << 24;
i_32 = data[4];
63,7 → 75,6
i_32 = data[3];
iVal += i_32 << 8;
iVal += data[2];
 
longitude = (double)iVal / Math.Pow(10, 7);
 
i_32 = data[9];
77,21 → 88,21
 
 
i_32 = data[13];
iVal = i_32 << 24;
iVal = (i_32 << 24);
i_32 = data[12];
iVal += i_32 << 16;
i_32 = data[11];
iVal += i_32 << 8;
iVal += data[10];
altitude = (double)iVal / Math.Pow(10, 7);
altitude = (double)iVal/10;
 
pstatus = data[14];
 
i_32 = data[16];
i_32 = (int)(sbyte)data[16];
iVal = i_32 << 8;
iVal += data[15];
heading = iVal;
 
heading = iVal;
tolRadius = data[17];
holdTime = data[18];
eventFlag = data[19];
101,13 → 112,14
WPeventChanVal = data[22];
altitudeRate = data[23];
speed = data[24];
camAngle = data[25];
camAngle = (int)(sbyte)data[25];
 
name = new string(ASCIIEncoding.ASCII.GetChars(data, 26, 4)).Trim('\0');
 
autoTrigger = data[30];
dr.ItemArray = new object[] { data[1], type, name, latitude, longitude, altitude, heading, speed, altitudeRate, tolRadius, holdTime, autoTrigger, camAngle, eventFlag, WPeventChanVal, pstatus};
 
dr.ItemArray = new object[] { data[1], ((pointType)type).ToString(), name, longitude, latitude, altitude, heading, WPSpeed(speed), altitudeRate, tolRadius, holdTime, autoTrigger, CAMAngle(camAngle), eventFlag, WPeventChanVal, ((status)pstatus).ToString() };
// dr.ItemArray = new object[] { data[1], ((pointType)type).ToString(), name, longitude, latitude, altitude, heading, WPSpeed(speed), altitudeRate, tolRadius, holdTime, autoTrigger, CAMAngle(camAngle), eventFlag, WPeventChanVal, ((status)pstatus).ToString() };
// dr.ItemArray = new object[] {data[1],((pointType)type).ToString(),name,longitude,latitude,altitude,heading,speed,altitudeRate,tolRadius,holdTime,autoTrigger, CAMAngle(camAngle),((status)pstatus).ToString() };
return dr;