Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 2428 → Rev 2429

/MKLiveView/v1.0/Source/MainWindow.xaml
374,7 → 374,7
<Style x:Key="HideSwitchNCLabel" TargetType="{x:Type Label}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding Tag.Content}" Value="FC">
<DataTrigger Binding="{Binding Tag.Text}" Value="FC">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
382,7 → 382,7
<Style x:Key="HideSwitchNCButton" TargetType="{x:Type Button}">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding Tag.Content}" Value="FC">
<DataTrigger Binding="{Binding Tag.Text}" Value="FC">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
594,7 → 594,7
</Label.Style>
</Label>
</Grid>
<Grid x:Name="GridData" Background="#7F000000" HorizontalAlignment="Left" Width="204" Margin="23,36,0,0" >
<Grid x:Name="GridData" Background="#7F000000" HorizontalAlignment="Left" Width="204" Margin="23,36,0,0" Visibility="Collapsed" >
<TabControl x:Name="tabControl" HorizontalAlignment="Left" Height="619" VerticalAlignment="Top" Width="200" Background="{x:Null}" Margin="2,0,0,0">
<TabItem Header="Analog">
<Grid>
882,7 → 882,7
</Grid>
</GroupBox>
<TextBox x:Name="tbSettingsCapa" HorizontalAlignment="Left" Height="21" Margin="74,457,0,0" TextWrapping="Wrap" Text="5000" VerticalAlignment="Top" Width="36" Visibility="Hidden"/>
<Button x:Name="buttonSwitchNC" Content="switch to NC" HorizontalAlignment="Left" Height="49" Margin="48,447,0,0" VerticalAlignment="Top" Width="112" Click="buttonSwitchNC_Click" Style="{StaticResource HideSwitchNCButton}" Tag="{Binding ElementName=tbCtrl}" FontSize="16" Visibility="Hidden" Background="#FFF7ACAC" BorderBrush="Red"/>
<Button x:Name="buttonSwitchNC" Content="switch to NC" HorizontalAlignment="Left" Height="49" Margin="48,447,0,0" VerticalAlignment="Top" Width="112" Click="buttonSwitchNC_Click" FontSize="16" Background="#FFF7ACAC" BorderBrush="Red" Visibility="Hidden"/>
</Grid>
</TabItem>
<TabItem Header="Style" Margin="-6.849,0,-2.022,0">
1243,7 → 1243,7
</LinearGradientBrush>
</Label.Background>
</Label>
<Grid x:Name="GridWP" Margin="23,36,25,0" Background="#7F000000" Height="526" VerticalAlignment="Top" Visibility="Collapsed">
<Grid x:Name="GridWP" Margin="23,36,25,0" Background="#7F000000" Height="526" VerticalAlignment="Top">
<Label x:Name="label4" Content="points" HorizontalAlignment="Right" Margin="0,480,51,0" VerticalAlignment="Top" Width="53" Foreground="White" Height="19" HorizontalContentAlignment="Right" Padding="0" VerticalContentAlignment="Center" FontSize="13" Visibility="Hidden"/>
<Label x:Name="lblWPCount" Content="##" HorizontalAlignment="Right" Margin="0,482,19,0" VerticalAlignment="Top" Width="26" Foreground="White" HorizontalContentAlignment="Right" Padding="0" Height="16" FontSize="13" Visibility="Hidden"/>
<Label x:Name="label4_Copy" Content="WP Index" HorizontalAlignment="Left" Margin="94,194,0,0" VerticalAlignment="Top" Width="80" Foreground="White" Visibility="Hidden"/>
1694,7 → 1694,7
</Grid>
<!--<Rectangle x:Name="rctConnection" Fill="#FFF4F4F5" Height="16" Margin="0,10,7,0" Stroke="Black" VerticalAlignment="Top" HorizontalAlignment="Right" Width="15"/>-->
</Grid>
<Label x:Name="labelSwitchToNavi" Content="The communication is set to FlightControl&#xA;The necessary data can ONLY be accessed &#xA;by the NaviControl!&#xA;Please switch to NaviControl in the settings tab" HorizontalAlignment="Left" Height="161" Margin="347,147,0,0" VerticalAlignment="Top" Width="574" Foreground="White" FontSize="26.667" Style="{StaticResource HideSwitchNCLabel}" Tag="{Binding ElementName=tbCtrl}" >
<Label x:Name="labelSwitchToNavi" Content="The communication is set to FlightControl&#xA;The necessary data can ONLY be accessed &#xA;by the NaviControl!&#xA;Please switch to NaviControl in the settings tab" HorizontalAlignment="Left" Height="161" Margin="347,147,0,0" VerticalAlignment="Top" Width="574" Foreground="White" FontSize="26.667" Visibility="Collapsed">
<Label.Background>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#B2FF2121" Offset="0.457"/>
/MKLiveView/v1.0/Source/MainWindow.xaml.cs
786,18 → 786,21
}
void _setActiveWP(int iIndex)
{
if (wpActiveMarker == null || !MainMap.Markers.Contains(wpActiveMarker))
if (iIndex < wpList.Count)
{
Dispatcher.Invoke(() =>
if (wpActiveMarker == null || !MainMap.Markers.Contains(wpActiveMarker))
{
wpActiveMarker = new GMapMarker(wpList[iIndex]);
wpActiveMarker.Shape = new CustomMarkerWPActive(this, wpActiveMarker, "wpActive", 0);
wpActiveMarker.Offset = new Point(-17.5, -17.5);
MainMap.Markers.Add(wpActiveMarker);
});
Dispatcher.Invoke(() =>
{
wpActiveMarker = new GMapMarker(wpList[iIndex]);
wpActiveMarker.Shape = new CustomMarkerWPActive(this, wpActiveMarker, "wpActive", 0);
wpActiveMarker.Offset = new Point(-17.5, -17.5);
MainMap.Markers.Add(wpActiveMarker);
});
}
else
Dispatcher.Invoke(() => wpActiveMarker.Position = wpList[iIndex]);
}
else
Dispatcher.Invoke(() => wpActiveMarker.Position = wpList[iIndex]);
 
Dispatcher.Invoke(() => tbWPStatusHeight.Text = dtWaypoints.Rows[iIndex][5].ToString() + " m");
}
1405,14 → 1408,14
{
case 1:
Dispatcher.Invoke(() => tbCtrl.Text = "FC");
// Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Visible);
// Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Visible);
Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Visible);
Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Visible);
// _setFieldsNA(); //display fields NA for FC
break;
case 2:
Dispatcher.Invoke(() => tbCtrl.Text = "NC");
//Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Hidden);
//Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Hidden);
Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Hidden);
Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Hidden);
break;
//case 3:
// lblCtrl.Invoke((Action)(() => lblCtrl.Text = "MK3MAG"));
1822,339 → 1825,337
/// <param name="data">the received byte array to process</param>
 
 
byte OSD_FLAG_MASK1 = 0x04 + 0x20 + 0x40 + 0x80;
byte OSD_FLAG_MASK2 = 0x01 + 0x02 + 0x08 + 0x10;
int FCSTATUSFLAGS1 = 0;
int FCSTATUSFLAGS2 = 0;
byte OSDSTATUSFLAGS1 = 0;
byte OSDSTATUSFLAGS2 = 0;
void _processNCDataV2(byte[] data)
{
int i_32, i_16, iVal;
double d;
OSD_Base_Data_t osd = new OSD_Base_Data_t(data);
OSDSTATUSFLAGS1 = osd.OSDSTATUSFLAGS1();
FCSTATUSFLAGS1 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK1) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK1);
FCSTATUSFLAGS2 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK2) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK2);
Dispatcher.Invoke(() => { drGPX[2] = osd.Pos().Lng; });
Dispatcher.Invoke(() => { drGPX[1] = osd.Pos().Lat; });
Dispatcher.Invoke(() => { drGPX[4] = DateTime.UtcNow.ToString("u", System.Globalization.CultureInfo.InvariantCulture); }); //2011-01-14T01:59:01Z });
Dispatcher.Invoke((Action)(() => tbNCGrSpeed.Text = osd.Speed().ToString("0.0 m/s")));
if (_Simulate)
Dispatcher.Invoke((Action)(() => tbTopSpeed.Text = osd.Speed().ToString("0.0 m/s")));
 
switch ((int)data[0])
if ((int)data[0] < 17)
{
case 10:
break;
case 11:
//---------------NC-Flags--------------------------
Dispatcher.Invoke((Action)(() => NC1_2.Background = ((data[14] & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_PH 0x02
Dispatcher.Invoke((Action)(() => NC1_3.Background = ((data[14] & 4) == 4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => NC1_4.Background = ((data[14] & 8) == 8) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_RANGE_LIMIT 0x08
Dispatcher.Invoke((Action)(() => NC1_5.Background = ((data[14] & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_NOSERIALLINK 0x10
Dispatcher.Invoke((Action)(() => NC1_6.Background = ((data[14] & 32) == 32) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_TARGET_REACHED 0x20
Dispatcher.Invoke((Action)(() => NC1_7.Background = ((data[14] & 64) == 64) ? new SolidColorBrush(Colors.DodgerBlue) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_MANUAL_CONTROL 0x40
Dispatcher.Invoke((Action)(() => NC1_8.Background = ((data[14] & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_GPS_OK 0x80
int i_32, i_16, iVal;
double d;
OSD_Base_Data_t osd = new OSD_Base_Data_t(data);
OSDSTATUSFLAGS1 = osd.OSDSTATUSFLAGS1();
Dispatcher.Invoke(() => { drGPX[2] = osd.Pos().Lng; });
Dispatcher.Invoke(() => { drGPX[1] = osd.Pos().Lat; });
Dispatcher.Invoke(() => { drGPX[4] = DateTime.UtcNow.ToString("u", System.Globalization.CultureInfo.InvariantCulture); }); //2011-01-14T01:59:01Z });
Dispatcher.Invoke((Action)(() => tbNCGrSpeed.Text = osd.Speed().ToString("0.0 m/s")));
if (_Simulate)
Dispatcher.Invoke((Action)(() => tbTopSpeed.Text = osd.Speed().ToString("0.0 m/s")));
 
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Text = ((data[14] & 4) == 4) ? "CH" : "PH"));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Background = (((data[14] & 2) == 2) | ((data[14] & 4) == 4)) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Foreground = (((data[14] & 2) == 2) | ((data[14] & 4) == 4)) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.BorderBrush = (((data[14] & 2) == 2) | ((data[14] & 4) == 4)) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
switch ((int)data[0])
{
case 10:
break;
case 11:
OSDSTATUSFLAGS2 = osd.OSDSTATUSFLAGS2();
//---------------NC-Flags--------------------------
Dispatcher.Invoke((Action)(() => NC1_2.Background = ((data[14] & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_PH 0x02
Dispatcher.Invoke((Action)(() => NC1_3.Background = ((data[14] & 4) == 4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => NC1_4.Background = ((data[14] & 8) == 8) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_RANGE_LIMIT 0x08
Dispatcher.Invoke((Action)(() => NC1_5.Background = ((data[14] & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_NOSERIALLINK 0x10
Dispatcher.Invoke((Action)(() => NC1_6.Background = ((data[14] & 32) == 32) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_TARGET_REACHED 0x20
Dispatcher.Invoke((Action)(() => NC1_7.Background = ((data[14] & 64) == 64) ? new SolidColorBrush(Colors.DodgerBlue) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_MANUAL_CONTROL 0x40
Dispatcher.Invoke((Action)(() => NC1_8.Background = ((data[14] & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_GPS_OK 0x80
 
//--------------- NC Error ------------------------
Dispatcher.Invoke((Action)(() => tbNCErr.Text = data[16].ToString())); //NC Errornumber
if (data[16] > 0)
_readNCError();
if (data[16] > 0 & data[16] < 44)
ErrorLog(LogMsgType.Error, " NC Error [" + data[16].ToString() + "]: ", NC_Error_Link[data[16]], NC_Error[data[16]]);
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Text = ((data[14] & 4) == 4) ? "CH" : "PH"));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Background = (((data[14] & 2) == 2) | ((data[14] & 4) == 4)) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Foreground = (((data[14] & 2) == 2) | ((data[14] & 4) == 4)) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.BorderBrush = (((data[14] & 2) == 2) | ((data[14] & 4) == 4)) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
 
break;
case 12:
//--------------- RC quality ------------------------
Dispatcher.Invoke((Action)(() => tbRCQ.Text = data[23].ToString()));
Dispatcher.Invoke((Action)(() => tbTopRC.Text = data[23].ToString()));
//--------------- NC Error ------------------------
Dispatcher.Invoke((Action)(() => tbNCErr.Text = data[16].ToString())); //NC Errornumber
if (data[16] > 0)
_readNCError();
if (data[16] > 0 & data[16] < 44)
ErrorLog(LogMsgType.Error, " NC Error [" + data[16].ToString() + "]: ", NC_Error_Link[data[16]], NC_Error[data[16]]);
 
if (data[23] > _iThresholdRC)
{
_iRCLevelJitter = 0; _bVoiceRCLevelActive = false;
if (stbRCLevelAnim != null && _bAnimRCLevelActive)
break;
case 12:
//--------------- RC quality ------------------------
Dispatcher.Invoke((Action)(() => tbRCQ.Text = data[23].ToString()));
Dispatcher.Invoke((Action)(() => tbTopRC.Text = data[23].ToString()));
 
if (data[23] > _iThresholdRC)
{
Dispatcher.Invoke(() => stbRCLevelAnim.Stop());
_bAnimRCLevelActive = false;
_iRCLevelJitter = 0; _bVoiceRCLevelActive = false;
if (stbRCLevelAnim != null && _bAnimRCLevelActive)
{
Dispatcher.Invoke(() => stbRCLevelAnim.Stop());
_bAnimRCLevelActive = false;
}
}
}
else
{
if (_iRCLevelJitter < 20) _iRCLevelJitter++;
if (_iRCLevelJitter == 20)
else
{
if (stbRCLevelAnim != null && !_bAnimRCLevelActive)
if (_iRCLevelJitter < 20) _iRCLevelJitter++;
if (_iRCLevelJitter == 20)
{
Dispatcher.Invoke(() => stbRCLevelAnim.Begin());
_bAnimRCLevelActive = true;
if (stbRCLevelAnim != null && !_bAnimRCLevelActive)
{
Dispatcher.Invoke(() => stbRCLevelAnim.Begin());
_bAnimRCLevelActive = true;
}
if (_bVoiceRCLevelPlay && !_bVoiceRCLevelActive)
{
_bVoiceRCLevelActive = true;
ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\MagneticField.mp3");
//Thread th = new Thread(() => _mediaPlayer("Voice\\RCLevel.mp3"));
//th.Start();
}
_iRCLevelJitter++;
}
if (_bVoiceRCLevelPlay && !_bVoiceRCLevelActive)
{
_bVoiceRCLevelActive = true;
ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\MagneticField.mp3");
//Thread th = new Thread(() => _mediaPlayer("Voice\\RCLevel.mp3"));
//th.Start();
}
_iRCLevelJitter++;
}
}
break;
case 13:
//-------------------------Waypoint max range (by license)------------------------------
i_32 = data[24];
iVal = i_32 << 8;
iVal += data[23];
break;
case 13:
//-------------------------Waypoint max range (by license)------------------------------
i_32 = data[24];
iVal = i_32 << 8;
iVal += data[23];
 
if (dWPMaxRange != iVal)
{
dWPMaxRange = iVal;
if (home != null && checkBoxShowWPMaxRange.IsChecked == true)
if (dWPMaxRange != iVal)
{
if (cWPBound != null && cWPBound.Tag != null)
MainMap.Markers.Remove(cWPBound.Tag as GMapMarker);
dWPMaxRange = iVal;
if (home != null && checkBoxShowWPMaxRange.IsChecked == true)
{
if (cWPBound != null && cWPBound.Tag != null)
MainMap.Markers.Remove(cWPBound.Tag as GMapMarker);
 
createCircle(home.Position, dWPMaxRange);
Dispatcher.Invoke(() =>
{
if (comboBoxWPMaxRangeColor.SelectionBoxItem != null)
createCircle(home.Position, dWPMaxRange);
Dispatcher.Invoke(() =>
{
string s = comboBoxWPMaxRangeColor.SelectionBoxItem.ToString();
cWPBound.setColor(s);
}
});
if (comboBoxWPMaxRangeColor.SelectionBoxItem != null)
{
string s = comboBoxWPMaxRangeColor.SelectionBoxItem.ToString();
cWPBound.setColor(s);
}
});
}
Dispatcher.Invoke((Action)(() => tbWPMaxRange.Text = iVal.ToString() + " m"));
}
Dispatcher.Invoke((Action)(() => tbWPMaxRange.Text = iVal.ToString() + " m"));
}
 
OSDSTATUSFLAGS2 = osd.OSDSTATUSFLAGS2();
FCSTATUSFLAGS1 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK1) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK1);
FCSTATUSFLAGS2 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK2) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK2);
break;
break;
 
case 14:
//--------------- Flying time ------------------------
i_16 = data[14];
i_16 = (Int16)(i_16 << 8);
iVal = data[13] + i_16;
TimeSpan t = TimeSpan.FromSeconds(iVal);
string Text = t.Hours.ToString("D2") + ":" + t.Minutes.ToString("D2") + ":" + t.Seconds.ToString("D2");
Dispatcher.Invoke((Action)(() => tbFTime.Text = Text.ToString()));
Dispatcher.Invoke((Action)(() => tbTopFTime.Text = Text.ToString()));
case 14:
//--------------- Flying time ------------------------
i_16 = data[14];
i_16 = (Int16)(i_16 << 8);
iVal = data[13] + i_16;
TimeSpan t = TimeSpan.FromSeconds(iVal);
string Text = t.Hours.ToString("D2") + ":" + t.Minutes.ToString("D2") + ":" + t.Seconds.ToString("D2");
Dispatcher.Invoke((Action)(() => tbFTime.Text = Text.ToString()));
Dispatcher.Invoke((Action)(() => tbTopFTime.Text = Text.ToString()));
 
//--------------------------------Distance HP------------------------------------
i_16 = data[16];
i_16 = (Int16)(i_16 << 8);
iVal = data[15] + i_16;
Dispatcher.Invoke((Action)(() => tbHP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
//--------------------------------Distance HP------------------------------------
i_16 = data[16];
i_16 = (Int16)(i_16 << 8);
iVal = data[15] + i_16;
Dispatcher.Invoke((Action)(() => tbHP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
 
//--------------------------Distance to next WP--------------------------------
i_16 = data[19];
i_16 = (Int16)(i_16 << 8);
iVal = data[18] + i_16;
Dispatcher.Invoke((Action)(() => tbWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
Dispatcher.Invoke((Action)(() => lblWPRouteDistanceWP.Content = ((double)iVal / (double)10).ToString("0.0 m")));
Dispatcher.Invoke((Action)(() => tbWPStatusDistanceWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
//--------------------------Distance to next WP--------------------------------
i_16 = data[19];
i_16 = (Int16)(i_16 << 8);
iVal = data[18] + i_16;
Dispatcher.Invoke((Action)(() => tbWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
Dispatcher.Invoke((Action)(() => lblWPRouteDistanceWP.Content = ((double)iVal / (double)10).ToString("0.0 m")));
Dispatcher.Invoke((Action)(() => tbWPStatusDistanceWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
 
//-------------------Satellites----------------------------------
Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[23].ToString()));
//-------------------Satellites----------------------------------
Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[23].ToString()));
 
if (data[23] > 4)//if more than 4 sats in use . otherwise the map would jump and scroll insane at beginning
{
_bSatFix = true; _iSatsJitter = 0; _bVoiceSatFixActive = false;
if (_bAutoHome && !_bFirstSatFix)
if (data[23] > 4)//if more than 4 sats in use . otherwise the map would jump and scroll insane at beginning
{
if (_iFirstSatFix < 3)
_iFirstSatFix++;
else
_bSatFix = true; _iSatsJitter = 0; _bVoiceSatFixActive = false;
if (_bAutoHome && !_bFirstSatFix)
{
_bFirstSatFix = true;
Dispatcher.Invoke(() => _setHomePos());
if (_iFirstSatFix < 3)
_iFirstSatFix++;
else
{
_bFirstSatFix = true;
Dispatcher.Invoke(() => _setHomePos());
}
}
}
if (stbSatFixLostAnim != null && _bAnimSatFixActive)
{
Dispatcher.Invoke(() => stbSatFixLostAnim.Stop());
_bAnimSatFixActive = false;
}
if (!_bFollowCopter)
{
_setCopterData(osd.Pos());
if (!MainMap.ViewArea.Contains(osd.Pos()))
if (stbSatFixLostAnim != null && _bAnimSatFixActive)
{
Dispatcher.Invoke(() => stbSatFixLostAnim.Stop());
_bAnimSatFixActive = false;
}
if (!_bFollowCopter)
{
_setCopterData(osd.Pos());
if (!MainMap.ViewArea.Contains(osd.Pos()))
Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
 
}
else
Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
 
}
else
Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
}
else
{
if (_bSatFix)
{
if (data[23] == _iSatsLast)
if (_bSatFix)
{
if (_iSatsJitter < 20) _iSatsJitter++;
}
else
{
_iSatsJitter = 0;
_iSatsLast = data[23];
}
 
if (_iSatsJitter == 20)
{
if (stbSatFixLostAnim != null && !_bAnimSatFixActive)
if (data[23] == _iSatsLast)
{
Dispatcher.Invoke(() => stbSatFixLostAnim.Begin());
_bAnimSatFixActive = true;
if (_iSatsJitter < 20) _iSatsJitter++;
}
if (_bVoiceSatFixPlay && !_bVoiceSatFixActive)
else
{
_bVoiceSatFixActive = true;
ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\SatFixLost.mp3");
//Thread th = new Thread(() => _mediaPlayer("Voice\\SatFixLost.mp3"));
//th.Start();
_iSatsJitter = 0;
_iSatsLast = data[23];
}
 
_bSatFix = false;
if (_iSatsJitter == 20)
{
if (stbSatFixLostAnim != null && !_bAnimSatFixActive)
{
Dispatcher.Invoke(() => stbSatFixLostAnim.Begin());
_bAnimSatFixActive = true;
}
if (_bVoiceSatFixPlay && !_bVoiceSatFixActive)
{
_bVoiceSatFixActive = true;
ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\SatFixLost.mp3");
//Thread th = new Thread(() => _mediaPlayer("Voice\\SatFixLost.mp3"));
//th.Start();
}
 
_bSatFix = false;
}
}
}
}
 
break;
break;
 
case 15:
//--------------------------------Waypoint index------------------------------------
Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[13].ToString()));
Dispatcher.Invoke((Action)(() => lblWPIndexNC.Content = data[13].ToString()));
Dispatcher.Invoke((Action)(() => lblWPStatusIndexNC.Content = data[13].ToString()));
if (data[13] > 0 && _wpIndex != data[13]-1 && wpList.Count >= data[13]-1)
{
_setActiveWP(data[13]-1);
if ((FCSTATUSFLAGS1 & 2) == 2)
Dispatcher.Invoke(() => {
DataGridRow row;
if (_wpIndex > -1)
case 15:
//--------------------------------Waypoint index------------------------------------
Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[13].ToString()));
Dispatcher.Invoke((Action)(() => lblWPIndexNC.Content = data[13].ToString()));
Dispatcher.Invoke((Action)(() => lblWPStatusIndexNC.Content = data[13].ToString()));
if (data[13] > 0 && _wpIndex != data[13] - 1 && wpList.Count > data[13] - 1)
{
_setActiveWP(data[13] - 1);
if ((OSDSTATUSFLAGS2 & 2) == 2)
Dispatcher.Invoke(() =>
{
DataGridRow row;
if (_wpIndex > -1)
{
row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
row.Background = new SolidColorBrush(Colors.Transparent);
row.BorderBrush = new SolidColorBrush(Colors.Transparent);
row.BorderThickness = new Thickness(0);
}
 
_wpIndex = data[13] - 1;
row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
row.Background = new SolidColorBrush(Colors.Transparent);
row.BorderBrush = new SolidColorBrush(Colors.Transparent);
row.BorderThickness = new Thickness(0);
}
 
_wpIndex = data[13]-1;
row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
row.Background = new SolidColorBrush(Color.FromArgb(80, 0, 255, 100));
row.BorderBrush = new SolidColorBrush(Colors.SpringGreen);
row.BorderThickness = new Thickness(2);
dgvWP.UpdateLayout();
});
_wpIndex = data[13]-1;
}
else
{
if ((data[13] == 0 || wpList.Count == 0) & MainMap.Markers.Contains(wpActiveMarker))
row.Background = new SolidColorBrush(Color.FromArgb(80, 0, 255, 100));
row.BorderBrush = new SolidColorBrush(Colors.SpringGreen);
row.BorderThickness = new Thickness(2);
dgvWP.UpdateLayout();
});
_wpIndex = data[13] - 1;
}
else
{
Dispatcher.Invoke(() => MainMap.Markers.Remove(wpActiveMarker));
Dispatcher.Invoke(() =>
if ((data[13] == 0 || wpList.Count == 0) & MainMap.Markers.Contains(wpActiveMarker))
{
DataGridRow row;
if (_wpIndex > -1 && data[13] == 0 && wpList.Count > _wpIndex)
Dispatcher.Invoke(() => MainMap.Markers.Remove(wpActiveMarker));
Dispatcher.Invoke(() =>
{
row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
row.Background = new SolidColorBrush(Colors.Transparent);
row.BorderBrush = new SolidColorBrush(Colors.Transparent);
row.BorderThickness = new Thickness(0);
_wpIndex = -1;
}
});
DataGridRow row;
if (_wpIndex > -1 && data[13] == 0 && wpList.Count > _wpIndex)
{
row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
row.Background = new SolidColorBrush(Colors.Transparent);
row.BorderBrush = new SolidColorBrush(Colors.Transparent);
row.BorderThickness = new Thickness(0);
_wpIndex = -1;
}
});
 
}
}
}
//----------------Waypoints count----------------------
Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[14].ToString())); //Waypoints count
Dispatcher.Invoke((Action)(() => lblWPCountNC.Content = data[14].ToString())); //Waypoints count
Dispatcher.Invoke((Action)(() => lblWPStatusCountNC.Content = data[14].ToString())); //Waypoints count
_wpCount = data[14];
//----------------Waypoints count----------------------
Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[14].ToString())); //Waypoints count
Dispatcher.Invoke((Action)(() => lblWPCountNC.Content = data[14].ToString())); //Waypoints count
Dispatcher.Invoke((Action)(() => lblWPStatusCountNC.Content = data[14].ToString())); //Waypoints count
_wpCount = data[14];
if(_wpCount > dtWaypoints.Rows.Count)
{
Log(LogMsgType.Warning, "The copter reports more waypoints than there are in the local list!");
}
 
//---------------------------------Target hold time------------------------------
Dispatcher.Invoke((Action)(() => lblWPHoldTime.Content = data[15].ToString() + " s"));
Dispatcher.Invoke((Action)(() => tbWPStatusHoldTime.Text = data[15].ToString() + " s"));
//---------------------------------Target hold time------------------------------
Dispatcher.Invoke((Action)(() => lblWPHoldTime.Content = data[15].ToString() + " s"));
Dispatcher.Invoke((Action)(() => tbWPStatusHoldTime.Text = data[15].ToString() + " s"));
 
break;
break;
 
case 16:
//--------------- Capacity used ------------------------
i_16 = data[18];
i_16 = (Int16)(i_16 << 8);
iVal = data[17] + i_16;
Dispatcher.Invoke((Action)(() => tbCapacity.Text = iVal.ToString() + " mAh"));
Dispatcher.Invoke((Action)(() => tbTopCapacity.Text = iVal.ToString() + " mAh"));
case 16:
//--------------- Capacity used ------------------------
i_16 = data[18];
i_16 = (Int16)(i_16 << 8);
iVal = data[17] + i_16;
Dispatcher.Invoke((Action)(() => tbCapacity.Text = iVal.ToString() + " mAh"));
Dispatcher.Invoke((Action)(() => tbTopCapacity.Text = iVal.ToString() + " mAh"));
 
//--------------- Heading compass ------------------------
i_16 = data[21];
iVal = 2 * i_16;
Dispatcher.Invoke((Action)(() => tbHeadingCompass.Text = iVal.ToString() + " °"));
if (_Simulate)
{
Dispatcher.Invoke(() => ArtHor.rotate = iVal);
Dispatcher.Invoke(() => ((CustomMarkerCopter)(copter.Shape)).rotate = iVal);
}
//--------------- Heading compass ------------------------
i_16 = data[21];
iVal = 2 * i_16;
Dispatcher.Invoke((Action)(() => tbHeadingCompass.Text = iVal.ToString() + " °"));
if (_Simulate)
{
Dispatcher.Invoke(() => ArtHor.rotate = iVal);
Dispatcher.Invoke(() => ((CustomMarkerCopter)(copter.Shape)).rotate = iVal);
}
 
break;
case 17:
break;
case 17:
 
break;
case 18:
break;
case 18:
 
break;
default:
break;
}
//--------------------------------------------------------------------------------
//-----------------------------FC Status Flags-------------------------------
//--------------------------------------------------------------------------------
Dispatcher.Invoke((Action)(() => FC1_1.Background = ((FCSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN 0x01
Dispatcher.Invoke((Action)(() => FC1_2.Background = ((FCSTATUSFLAGS1 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_FLY 0x02
Dispatcher.Invoke((Action)(() => FC1_3.Background = ((FCSTATUSFLAGS1 & 4) == 4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_CALIBRATE 0x04
Dispatcher.Invoke((Action)(() => FC1_4.Background = ((FCSTATUSFLAGS1 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_START 0x08
Dispatcher.Invoke((Action)(() => FC1_5.Background = ((FCSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_EMERGENCY_LANDING 0x10
Dispatcher.Invoke((Action)(() => FC1_6.Background = ((FCSTATUSFLAGS1 & 32) == 32) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_LOWBAT 0x20
break;
default:
break;
}
//--------------------------------------------------------------------------------
//-----------------------------FC Status Flags-------------------------------
//--------------------------------------------------------------------------------
Dispatcher.Invoke((Action)(() => FC1_1.Background = ((OSDSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN 0x01
Dispatcher.Invoke((Action)(() => FC1_2.Background = ((OSDSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_FLY 0x02
Dispatcher.Invoke((Action)(() => FC1_3.Background = ((OSDSTATUSFLAGS1 & 4) == 4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_CALIBRATE 0x04
Dispatcher.Invoke((Action)(() => FC1_4.Background = ((OSDSTATUSFLAGS2 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_START 0x08
Dispatcher.Invoke((Action)(() => FC1_5.Background = ((OSDSTATUSFLAGS2 & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_EMERGENCY_LANDING 0x10
Dispatcher.Invoke((Action)(() => FC1_6.Background = ((OSDSTATUSFLAGS1 & 32) == 32) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_LOWBAT 0x20
 
Dispatcher.Invoke((Action)(() => FC2_1.Background = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE 0x01
Dispatcher.Invoke((Action)(() => FC2_2.Background = ((FCSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_ALTITUDE_CONTROL 0x02
Dispatcher.Invoke((Action)(() => FC2_3.Background = ((FCSTATUSFLAGS2 & 4) == 4) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04
Dispatcher.Invoke((Action)(() => FC2_4.Background = ((FCSTATUSFLAGS2 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT1_ACTIVE 0x08
Dispatcher.Invoke((Action)(() => FC2_5.Background = ((FCSTATUSFLAGS2 & 16) == 16) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT2_ACTIVE 0x10
Dispatcher.Invoke((Action)(() => FC2_6.Background = ((FCSTATUSFLAGS2 & 32) == 32) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_WAIT_FOR_TAKEOFF 0x20 // Motor Running, but still on the ground
Dispatcher.Invoke((Action)(() => FC2_7.Background = ((FCSTATUSFLAGS2 & 64) == 64) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_STARTING 0x40
Dispatcher.Invoke((Action)(() => FC2_8.Background = ((FCSTATUSFLAGS2 & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_LANDING 0x80
Dispatcher.Invoke((Action)(() => FC2_1.Background = ((OSDSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE 0x01
Dispatcher.Invoke((Action)(() => FC2_2.Background = ((OSDSTATUSFLAGS1 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_ALTITUDE_CONTROL 0x02
Dispatcher.Invoke((Action)(() => FC2_3.Background = ((OSDSTATUSFLAGS2 & 4) == 4) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04
Dispatcher.Invoke((Action)(() => FC2_4.Background = ((OSDSTATUSFLAGS1 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT1_ACTIVE 0x08
Dispatcher.Invoke((Action)(() => FC2_5.Background = ((OSDSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT2_ACTIVE 0x10
Dispatcher.Invoke((Action)(() => FC2_6.Background = ((OSDSTATUSFLAGS2 & 32) == 32) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_WAIT_FOR_TAKEOFF 0x20 // Motor Running, but still on the ground
Dispatcher.Invoke((Action)(() => FC2_7.Background = ((OSDSTATUSFLAGS2 & 64) == 64) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_STARTING 0x40
Dispatcher.Invoke((Action)(() => FC2_8.Background = ((OSDSTATUSFLAGS2 & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_LANDING 0x80
 
//Sidebar StatusSymbols
Dispatcher.Invoke((Action)(() => tbSideBarStatusMotors.Background = ((FCSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusMotors.Foreground = ((FCSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_MOTOR_RUN 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusMotors.BorderBrush = ((FCSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_MOTOR_RUN 0x01
//Sidebar StatusSymbols
Dispatcher.Invoke((Action)(() => tbSideBarStatusMotors.Background = ((OSDSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusMotors.Foreground = ((OSDSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_MOTOR_RUN 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusMotors.BorderBrush = ((OSDSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_MOTOR_RUN 0x01
 
Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.Background = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.Foreground = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_CAREFREE 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.BorderBrush = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_CAREFREE 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.Background = ((OSDSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.Foreground = ((OSDSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_CAREFREE 0x01
Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.BorderBrush = ((OSDSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_CAREFREE 0x01
 
Dispatcher.Invoke((Action)(() => tbSideBarStatusEmergencyLanding.Background = ((FCSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_EMERGENCY_LANDING 0x10
Dispatcher.Invoke((Action)(() => tbSideBarStatusEmergencyLanding.Foreground = ((FCSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_EMERGENCY_LANDING 0x10
Dispatcher.Invoke((Action)(() => tbSideBarStatusEmergencyLanding.BorderBrush = ((FCSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_EMERGENCY_LANDING 0x10
Dispatcher.Invoke((Action)(() => tbSideBarStatusEmergencyLanding.Background = ((OSDSTATUSFLAGS2 & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_EMERGENCY_LANDING 0x10
Dispatcher.Invoke((Action)(() => tbSideBarStatusEmergencyLanding.Foreground = ((OSDSTATUSFLAGS2 & 16) == 16) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_EMERGENCY_LANDING 0x10
Dispatcher.Invoke((Action)(() => tbSideBarStatusEmergencyLanding.BorderBrush = ((OSDSTATUSFLAGS2 & 16) == 16) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS_EMERGENCY_LANDING 0x10
 
Dispatcher.Invoke((Action)(() => tbSideBarStatusAC.Background = ((FCSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_ALTITUDE_CONTROL 0x02
Dispatcher.Invoke((Action)(() => tbSideBarStatusAC.Foreground = ((FCSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_ALTITUDE_CONTROL 0x02
Dispatcher.Invoke((Action)(() => tbSideBarStatusAC.BorderBrush = ((FCSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_ALTITUDE_CONTROL 0x02
Dispatcher.Invoke((Action)(() => tbSideBarStatusAC.Background = ((OSDSTATUSFLAGS1 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_ALTITUDE_CONTROL 0x02
Dispatcher.Invoke((Action)(() => tbSideBarStatusAC.Foreground = ((OSDSTATUSFLAGS1 & 2) == 2) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_ALTITUDE_CONTROL 0x02
Dispatcher.Invoke((Action)(() => tbSideBarStatusAC.BorderBrush = ((OSDSTATUSFLAGS1 & 2) == 2) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_ALTITUDE_CONTROL 0x02
 
_bAirborne = (FCSTATUSFLAGS1 & 2) == 2 ? true : false;
 
 
_bAirborne = (OSDSTATUSFLAGS2 & 2) == 2 ? true : false;
}
}
public class OSD_Base_Data_t
{
2207,16 → 2208,22
 
public double Speed()
{
return (double)data[11]/10;
if (data.Length > 11)
return (double)data[11]/10;
else return 0;
}
 
public byte OSDSTATUSFLAGS1()
{
return data[12];
if (data.Length > 12)
return data[12];
else return 0;
}
public byte OSDSTATUSFLAGS2()
{
return data[13];
if (data.Length > 13)
return data[13];
else return 0;
}
}
void _processNCData(byte[] data)
2785,8 → 2792,8
private void _readNavData(bool auto)
{
byte interval = auto ? navctrlInterval : (byte)0;
// _sendControllerMessage('o', 2, new byte[1] { interval });
_sendControllerMessage('o', 2, new byte[3] { interval,4,0 });
// _sendControllerMessage('o', 2, new byte[1] { interval });
_sendControllerMessage('o', 2, new byte[3] { interval,4,0 });
}
/// <summary>
/// request the license info
4490,8 → 4497,8
else
_sendWayPoint(dr, 1, 'w', false);
 
if(_wpIndex > -1 && _wpIndex < dtWaypoints.Rows.Count)
_sendWayPoint(dtWaypoints.Rows[_wpIndex], _wpIndex + 1, 's', false);
if (_wpIndex > -1 && _wpIndex < dtWaypoints.Rows.Count)
_sendWayPoint(dtWaypoints.Rows[wpOffset[_wpIndex]], _wpIndex+1, 's', false);
}
}
private void btnWPSimulateStart_Click(object sender, RoutedEventArgs e)