Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 2340 → Rev 2338

/MKLiveView/v1.0/Source/MainWindow.xaml
664,7 → 664,7
</TabItem>
</TabControl>
</Grid>
<Grid x:Name="GridSettings" Background="#7B000000" HorizontalAlignment="Left" Width="233" Margin="23,36,0,0" Visibility="Collapsed">
<Grid x:Name="GridSettings" Background="#7B000000" HorizontalAlignment="Left" Width="233" Margin="23,36,0,0">
<TabControl x:Name="tabControlSettings" HorizontalAlignment="Left" Width="229" Background="{x:Null}" Margin="2,0,0,0">
<TabItem Header="General" Margin="0,0,-0.237,0">
<Grid x:Name="TabGridGeneral">
970,14 → 970,14
<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="500" VerticalAlignment="Top">
<Grid x:Name="GridWP" Margin="23,36,25,0" Background="#7F000000" Height="500" VerticalAlignment="Top" Visibility="Collapsed">
<Label x:Name="label4" Content="points" HorizontalAlignment="Right" Margin="0,376,41,0" VerticalAlignment="Top" Width="53" Foreground="White" Height="26" HorizontalContentAlignment="Right"/>
<Label x:Name="lblWPCount" Content="##" HorizontalAlignment="Right" Margin="0,382,5,0" VerticalAlignment="Top" Width="38" Foreground="White" HorizontalContentAlignment="Right" Padding="0" Height="16"/>
<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"/>
<Border Margin="10,359,0,3" BorderBrush="White" BorderThickness="0.5" CornerRadius="5" HorizontalAlignment="Left" Width="322">
<Grid Margin="0,-4,-1,4">
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="103,0,0,61" Height="40" VerticalAlignment="Bottom">
<Border Margin="10,370,0,3" BorderBrush="White" BorderThickness="0.5" CornerRadius="5" HorizontalAlignment="Left" Width="214">
<Grid Margin="-0.5,-3.5,-0.5,4.5">
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="103,25,0,61">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
993,7 → 993,7
<ImageBrush ImageSource="Images/FromCopterToPc.png" Stretch="Uniform"/>
</Button.Background>
</Button>
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="4,0,0,61" Height="40" VerticalAlignment="Bottom">
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="4,25,0,61">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
1009,7 → 1009,7
<ImageBrush ImageSource="Images/FromPcToCopter.png" Stretch="Uniform"/>
</Button.Background>
</Button>
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="4,0,0,0" Height="40" VerticalAlignment="Bottom">
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="4,86,0,0">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
1028,7 → 1028,7
<Label x:Name="label4_Copy5" Content="receive from copter" HorizontalAlignment="Left" Margin="98,0,0,98" VerticalAlignment="Bottom" Width="116" Foreground="White"/>
<Label x:Name="label4_Copy6" Content="send to copter" HorizontalAlignment="Left" Margin="1,0,0,98" VerticalAlignment="Bottom" Width="86" Foreground="White"/>
<Label x:Name="label4_Copy7" Content="load from file" HorizontalAlignment="Left" Margin="0,0,0,36" VerticalAlignment="Bottom" Width="86" Foreground="White"/>
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="221,0,0,0" Height="40" VerticalAlignment="Bottom">
<Rectangle HorizontalAlignment="Left" Width="48" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="149,86,0,0">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
1039,32 → 1039,15
</Style>
</Rectangle.Style>
</Rectangle>
<Button x:Name="btnClearWPList" Content="" HorizontalAlignment="Left" Height="36" Margin="221,0,0,2" VerticalAlignment="Bottom" Width="94" ToolTip="Download WP-list from copter" BorderBrush="#FFBDBDBD" Style="{DynamicResource ButtonWithoutEffectStyle}" Click="btnClearWPList_Click">
<Button x:Name="btnClearWPList" Content="" HorizontalAlignment="Left" Height="36" Margin="149,0,0,2" VerticalAlignment="Bottom" Width="48" ToolTip="Download WP-list from copter" BorderBrush="#FFBDBDBD" Style="{DynamicResource ButtonWithoutEffectStyle}" Click="btnClearWPList_Click">
<Button.Background>
<ImageBrush ImageSource="Images/DeleteList.png" Stretch="Uniform"/>
</Button.Background>
</Button>
<Label x:Name="label4_Copy11" Content="clear local list" HorizontalAlignment="Left" Margin="217,0,0,36" VerticalAlignment="Bottom" Width="93" Foreground="White"/>
<Rectangle HorizontalAlignment="Left" Width="94" Stroke="#FFE4E4E4" StrokeThickness="0.5" Margin="221,0,0,61" Height="40" VerticalAlignment="Bottom">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, ElementName=btnClearCopterList}" Value="True">
<Setter Property="Fill" Value="{DynamicResource PressedItemBrush}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
<Button x:Name="btnClearCopterList" Content="" HorizontalAlignment="Left" Height="36" Margin="223,0,0,63" VerticalAlignment="Bottom" Width="92" ToolTip="Download WP-list from copter" BorderBrush="#FFBDBDBD" Style="{DynamicResource ButtonWithoutEffectStyle}" Click="btnClearCopterList_Click">
<Button.Background>
<ImageBrush ImageSource="Images/DeleteCopterList.png" Stretch="Uniform"/>
</Button.Background>
</Button>
<Label x:Name="label4_Copy12" Content="clear copter list" HorizontalAlignment="Left" Margin="217,0,0,98" VerticalAlignment="Bottom" Width="93" Foreground="White" Height="26"/>
<Label x:Name="label4_Copy11" Content="clear list" HorizontalAlignment="Left" Margin="145,0,0,36" VerticalAlignment="Bottom" Width="56" Foreground="White"/>
</Grid>
</Border>
<DataGrid x:Name="dgvWP" Margin="10,5,10,143" Background="{x:Null}" ItemsSource="{Binding}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="14" HorizontalGridLinesBrush="#FF688CAF" VerticalGridLinesBrush="#FF688CAF" HeadersVisibility="Column" BorderBrush="{x:Null}" Padding="0" AutoGenerateColumns="False" MouseUp="dgvWP_MouseUp">
<DataGrid x:Name="dgvWP" Margin="10,5,10,143" Background="{x:Null}" ItemsSource="{Binding}" 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}"/>
/MKLiveView/v1.0/Source/MainWindow.xaml.cs
277,8 → 277,6
DataTable dtGPX = new DataTable();
DataRow drGPX;
bool _bAirborne = false;
int _wpIndex = -1, _wpCount = 0;
 
DispatcherTimer timer = new DispatcherTimer();
 
/// <summary>
704,7 → 702,7
for (int k = 0; k < MainMap.Markers.Count;)
{
GMapMarker p = MainMap.Markers[k];
if (p.GetType() == markerType | (p.Shape != null && p.Shape.GetType() == markerType))
if (p.GetType() == markerType | p.Shape.GetType() == markerType)
MainMap.Markers.Remove(p);
else
k++;
1694,28 → 1692,11
Dispatcher.Invoke((Action)(() => tbHP.Text = ((double)iVal / (double)10).ToString("0.0 m"))); //Distance to HP set by GPS on
 
Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[48].ToString())); //Waypoint index
_wpIndex = data[48];
//if(wpList.Count > 0 && ((data[67] & 2) == 2))
//{
// Dispatcher.Invoke(() =>
// {
// if(data[48] < wpList.Count)
// {
// DataGridRow row;
// if (data[48] - 1 > -1)
// {
// row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(data[48] - 1);
// row.Background = new SolidColorBrush(Colors.Transparent);
// }
// row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(data[48]);
// row.Background = new SolidColorBrush(Color.FromArgb(50, 0, 100, 255));
// }
// });
//}
Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[49].ToString())); //Waypoints count
_wpCount = data[49];
Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[50].ToString())); //Satellites
 
 
//--------------- Capacity used ------------------------
i_16 = data[81];
i_16 = (Int16)(i_16 << 8);
2144,13 → 2125,8
}
}
}
 
void clearCopterWPList()
void _sendWPList()
{
_clearCopterWPList();
}
bool _clearCopterWPList()
{
int iTimeout = 0;
if (serialPortCtrl.Port.IsOpen)
{
2162,7 → 2138,7
serialStream.Write(bytes, 0, bytes.Length);
 
_iWPCount = -1;
while (_iWPCount == -1 & iTimeout < _iWPTimeout)
while (_iWPCount == -1 & iTimeout < _iWPTimeout * 5)
{
Thread.Sleep(10);
iTimeout++;
2169,26 → 2145,71
}
Dispatcher.Invoke(() => lblWPCount.Content = _iWPCount.ToString());
if (_iWPCount > -1)
return true;
else
Log(LogMsgType.Error, "Timeout while sending list!");
}
else
Log(LogMsgType.Error, "NOT CONNECTED!");
{
 
return false;
}
void _sendWPList()
{
int iTimeout = 0;
if (serialPortCtrl.Port.IsOpen)
{
if (_clearCopterWPList())
{
int iVal;
double dVal;
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
for (int i = 0; i < dtWaypoints.Rows.Count; i++)
{
_sendWayPoint(dtWaypoints.Rows[i],-1);
//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;
iTimeout = 0;
while (_iWPCount == -1 & iTimeout < _iWPTimeout * 5)
2204,88 → 2225,14
Dispatcher.Invoke(() => lblWPCount.Content = _iWPCount.ToString());
}
}
else
Log(LogMsgType.Error, "Timeout while sending list!");
}
else
Log(LogMsgType.Error, "NOT CONNECTED!");
 
}
bool _sendWayPoint(DataRow dr, int index)
{
 
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;
int iVal;
double dVal;
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
 
//longitude
dVal = Convert.ToDouble(dr[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(dr[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(dr[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(dr[6]);
bData[13] = (byte)(iVal & 0xff);
bData[14] = (byte)((iVal >> 8) & 0xff);
//ToleranceRadius
bData[15] = Convert.ToByte(dr[9]);
//HoldTime
bData[16] = Convert.ToByte(dr[10]);
//Event_Flag
bData[17] = Convert.ToByte(dr[13]);
//Index
bData[18] = index > 0 ? (byte)index : Convert.ToByte((int)dr[0]);
//Type
bData[19] = Convert.ToByte(dr[1]);
//WP_EventChannelValue
bData[20] = Convert.ToByte(dr[14]);
//AltitudeRate
bData[21] = Convert.ToByte(dr[8]);
//Speed
bData[22] = Convert.ToByte(dr[7]);
//CamAngle
bData[23] = (byte)Convert.ToInt16(dr[12]);
//Name
byte[] name = ASCIIEncoding.ASCII.GetBytes((string)dr[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(dr[11]);
 
bytes = FlightControllerMessage.CreateMessage('w', 2, bData);
serialStream.Write(bytes, 0, bytes.Length);
 
return true;
}
 
return false;
}
#region OSD-Menue
 
/// <summary>
3077,22 → 3024,6
Dispatcher.Invoke(() => lblWPCount.Content = 0);
Dispatcher.Invoke(() => lblWPRouteDistance.Content = "0 m");
}
private void btnClearCopterList_Click(object sender, RoutedEventArgs e)
{
Thread t = new Thread(new ThreadStart(clearCopterWPList));
t.Start();
}
private void dgvWP_MouseUp(object sender, MouseButtonEventArgs e)
{
if (dgvWP.SelectedIndex > -1 && dgvWP.SelectedIndex < dtWaypoints.Rows.Count)
{
if(_wpCount > 0)
_sendWayPoint(dtWaypoints.Rows[dgvWP.SelectedIndex],-1);
else
_sendWayPoint(dtWaypoints.Rows[dgvWP.SelectedIndex],1);
}
}
 
#endregion WP
 
#region GPX
3174,7 → 3105,6
_clearMapMarkers(typeof(GMapRoute));
}
 
 
void _loadGPXLog()
{