Subversion Repositories Projects

Rev

Rev 2425 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2425 Rev 2428
Line 1455... Line 1455...
1455
                            case 'M'://License info
1455
                            case 'M'://License info
1456
                                _processLicense(data);
1456
                                _processLicense(data);
1457
                                break;
1457
                                break;
Line 1458... Line 1458...
1458
 
1458
 
-
 
1459
                            case 'O': //NC Data
1459
                            case 'O': //NC Data
1460
                                if (data[0] < 10)
-
 
1461
                                    _processNCData(data);
-
 
1462
                                else
1460
                                _processNCData(data);
1463
                                    _processNCDataV2(data);
Line 1461... Line 1464...
1461
                                break;
1464
                                break;
1462
 
1465
 
1463
                            //case 'E': //NC error-string
1466
                            //case 'E': //NC error-string
Line 1815... Line 1818...
1815
        /// <summary>
1818
        /// <summary>
1816
        /// Navi-Ctrl data 'O'
1819
        /// Navi-Ctrl data 'O'
1817
        /// GPS-Position, capacatiy, flying time...
1820
        /// GPS-Position, capacatiy, flying time...
1818
        /// </summary>
1821
        /// </summary>
1819
        /// <param name="data">the received byte array to process</param>
1822
        /// <param name="data">the received byte array to process</param>
-
 
1823
 
-
 
1824
 
-
 
1825
        byte OSD_FLAG_MASK1 = 0x04 + 0x20 + 0x40 + 0x80;
-
 
1826
        byte OSD_FLAG_MASK2 = 0x01 + 0x02 + 0x08 + 0x10;
-
 
1827
        int FCSTATUSFLAGS1 = 0;
-
 
1828
        int FCSTATUSFLAGS2 = 0;
-
 
1829
        byte OSDSTATUSFLAGS1 = 0;
-
 
1830
        byte OSDSTATUSFLAGS2 = 0;
-
 
1831
        void _processNCDataV2(byte[] data)
-
 
1832
        {
-
 
1833
            int i_32, i_16, iVal;
-
 
1834
            double d;
-
 
1835
            OSD_Base_Data_t osd = new OSD_Base_Data_t(data);
-
 
1836
            OSDSTATUSFLAGS1 = osd.OSDSTATUSFLAGS1();
-
 
1837
            FCSTATUSFLAGS1 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK1) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK1);
-
 
1838
            FCSTATUSFLAGS2 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK2) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK2);
-
 
1839
            Dispatcher.Invoke(() => { drGPX[2] = osd.Pos().Lng; });
-
 
1840
            Dispatcher.Invoke(() => { drGPX[1] = osd.Pos().Lat; });
-
 
1841
            Dispatcher.Invoke(() => { drGPX[4] = DateTime.UtcNow.ToString("u", System.Globalization.CultureInfo.InvariantCulture); }); //2011-01-14T01:59:01Z });
-
 
1842
            Dispatcher.Invoke((Action)(() => tbNCGrSpeed.Text = osd.Speed().ToString("0.0 m/s")));
-
 
1843
            if (_Simulate)
-
 
1844
                Dispatcher.Invoke((Action)(() => tbTopSpeed.Text = osd.Speed().ToString("0.0 m/s")));
-
 
1845
 
-
 
1846
            switch ((int)data[0])
-
 
1847
            {
-
 
1848
                case 10:
-
 
1849
                    break;
-
 
1850
                case 11:
-
 
1851
                    //---------------NC-Flags--------------------------
-
 
1852
                    Dispatcher.Invoke((Action)(() => NC1_2.Background = ((data[14] & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_PH                                     0x02
-
 
1853
                    Dispatcher.Invoke((Action)(() => NC1_3.Background = ((data[14] & 4) == 4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_CH                                     0x04
-
 
1854
                    Dispatcher.Invoke((Action)(() => NC1_4.Background = ((data[14] & 8) == 8) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_RANGE_LIMIT                               0x08
-
 
1855
                    Dispatcher.Invoke((Action)(() => NC1_5.Background = ((data[14] & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_NOSERIALLINK                            0x10
-
 
1856
                    Dispatcher.Invoke((Action)(() => NC1_6.Background = ((data[14] & 32) == 32) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_TARGET_REACHED                               0x20
-
 
1857
                    Dispatcher.Invoke((Action)(() => NC1_7.Background = ((data[14] & 64) == 64) ? new SolidColorBrush(Colors.DodgerBlue) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_MANUAL_CONTROL                          0x40
-
 
1858
                    Dispatcher.Invoke((Action)(() => NC1_8.Background = ((data[14] & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_GPS_OK                                     0x80
-
 
1859
 
-
 
1860
                    Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Text = ((data[14] & 4) == 4) ? "CH" : "PH"));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
-
 
1861
                    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
-
 
1862
                    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
-
 
1863
                    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
-
 
1864
 
-
 
1865
                    //--------------- NC Error ------------------------
-
 
1866
                    Dispatcher.Invoke((Action)(() => tbNCErr.Text = data[16].ToString()));  //NC Errornumber
-
 
1867
                    if (data[16] > 0)
-
 
1868
                        _readNCError();
-
 
1869
                    if (data[16] > 0 & data[16] < 44)
-
 
1870
                        ErrorLog(LogMsgType.Error, " NC Error [" + data[16].ToString() + "]: ", NC_Error_Link[data[16]], NC_Error[data[16]]);
-
 
1871
 
-
 
1872
                    break;
-
 
1873
                case 12:
-
 
1874
                    //--------------- RC quality ------------------------
-
 
1875
                    Dispatcher.Invoke((Action)(() => tbRCQ.Text = data[23].ToString()));
-
 
1876
                    Dispatcher.Invoke((Action)(() => tbTopRC.Text = data[23].ToString()));
-
 
1877
 
-
 
1878
                    if (data[23] > _iThresholdRC)
-
 
1879
                    {
-
 
1880
                        _iRCLevelJitter = 0; _bVoiceRCLevelActive = false;
-
 
1881
                        if (stbRCLevelAnim != null && _bAnimRCLevelActive)
-
 
1882
                        {
-
 
1883
                            Dispatcher.Invoke(() => stbRCLevelAnim.Stop());
-
 
1884
                            _bAnimRCLevelActive = false;
-
 
1885
                        }
-
 
1886
                    }
-
 
1887
                    else
-
 
1888
                    {
-
 
1889
                        if (_iRCLevelJitter < 20) _iRCLevelJitter++;
-
 
1890
                        if (_iRCLevelJitter == 20)
-
 
1891
                        {
-
 
1892
                            if (stbRCLevelAnim != null && !_bAnimRCLevelActive)
-
 
1893
                            {
-
 
1894
                                Dispatcher.Invoke(() => stbRCLevelAnim.Begin());
-
 
1895
                                _bAnimRCLevelActive = true;
-
 
1896
                            }
-
 
1897
                            if (_bVoiceRCLevelPlay && !_bVoiceRCLevelActive)
-
 
1898
                            {
-
 
1899
                                _bVoiceRCLevelActive = true;
-
 
1900
                                ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\MagneticField.mp3");
-
 
1901
                                //Thread th = new Thread(() => _mediaPlayer("Voice\\RCLevel.mp3"));
-
 
1902
                                //th.Start();
-
 
1903
                            }
-
 
1904
                            _iRCLevelJitter++;
-
 
1905
                        }
-
 
1906
                    }
-
 
1907
                    break;
-
 
1908
                case 13:
-
 
1909
                    //-------------------------Waypoint max range (by license)------------------------------
-
 
1910
                    i_32 = data[24];
-
 
1911
                    iVal = i_32 << 8;
-
 
1912
                    iVal += data[23];
-
 
1913
 
-
 
1914
                    if (dWPMaxRange != iVal)
-
 
1915
                    {
-
 
1916
                        dWPMaxRange = iVal;
-
 
1917
                        if (home != null && checkBoxShowWPMaxRange.IsChecked == true)
-
 
1918
                        {
-
 
1919
                            if (cWPBound != null && cWPBound.Tag != null)
-
 
1920
                                MainMap.Markers.Remove(cWPBound.Tag as GMapMarker);
-
 
1921
 
-
 
1922
                            createCircle(home.Position, dWPMaxRange);
-
 
1923
                            Dispatcher.Invoke(() =>
-
 
1924
                            {
-
 
1925
                                if (comboBoxWPMaxRangeColor.SelectionBoxItem != null)
-
 
1926
                                {
-
 
1927
                                    string s = comboBoxWPMaxRangeColor.SelectionBoxItem.ToString();
-
 
1928
                                    cWPBound.setColor(s);
-
 
1929
                                }
-
 
1930
                            });
-
 
1931
                        }
-
 
1932
                        Dispatcher.Invoke((Action)(() => tbWPMaxRange.Text = iVal.ToString() + " m"));
-
 
1933
                    }
-
 
1934
 
-
 
1935
                    OSDSTATUSFLAGS2 = osd.OSDSTATUSFLAGS2();
-
 
1936
                    FCSTATUSFLAGS1 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK1) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK1);
-
 
1937
                    FCSTATUSFLAGS2 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK2) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK2);
-
 
1938
                    break;
-
 
1939
 
-
 
1940
                case 14:
-
 
1941
                    //--------------- Flying time ------------------------
-
 
1942
                    i_16 = data[14];
-
 
1943
                    i_16 = (Int16)(i_16 << 8);
-
 
1944
                    iVal = data[13] + i_16;
-
 
1945
                    TimeSpan t = TimeSpan.FromSeconds(iVal);
-
 
1946
                    string Text = t.Hours.ToString("D2") + ":" + t.Minutes.ToString("D2") + ":" + t.Seconds.ToString("D2");
-
 
1947
                    Dispatcher.Invoke((Action)(() => tbFTime.Text = Text.ToString()));
-
 
1948
                    Dispatcher.Invoke((Action)(() => tbTopFTime.Text = Text.ToString()));
-
 
1949
 
-
 
1950
                    //--------------------------------Distance HP------------------------------------
-
 
1951
                    i_16 = data[16];
-
 
1952
                    i_16 = (Int16)(i_16 << 8);
-
 
1953
                    iVal = data[15] + i_16;
-
 
1954
                    Dispatcher.Invoke((Action)(() => tbHP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
-
 
1955
 
-
 
1956
                    //--------------------------Distance to next WP--------------------------------
-
 
1957
                    i_16 = data[19];
-
 
1958
                    i_16 = (Int16)(i_16 << 8);
-
 
1959
                    iVal = data[18] + i_16;
-
 
1960
                    Dispatcher.Invoke((Action)(() => tbWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
-
 
1961
                    Dispatcher.Invoke((Action)(() => lblWPRouteDistanceWP.Content = ((double)iVal / (double)10).ToString("0.0 m")));
-
 
1962
                    Dispatcher.Invoke((Action)(() => tbWPStatusDistanceWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
-
 
1963
 
-
 
1964
                    //-------------------Satellites----------------------------------
-
 
1965
                    Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[23].ToString()));
-
 
1966
 
-
 
1967
                    if (data[23] > 4)//if more than 4 sats in use . otherwise the map would jump and scroll insane at beginning
-
 
1968
                    {
-
 
1969
                        _bSatFix = true; _iSatsJitter = 0; _bVoiceSatFixActive = false;
-
 
1970
                        if (_bAutoHome && !_bFirstSatFix)
-
 
1971
                        {
-
 
1972
                            if (_iFirstSatFix < 3)
-
 
1973
                                _iFirstSatFix++;
-
 
1974
                            else
-
 
1975
                            {
-
 
1976
                                _bFirstSatFix = true;
-
 
1977
                                Dispatcher.Invoke(() => _setHomePos());
-
 
1978
                            }
-
 
1979
                        }
-
 
1980
                        if (stbSatFixLostAnim != null && _bAnimSatFixActive)
-
 
1981
                        {
-
 
1982
                            Dispatcher.Invoke(() => stbSatFixLostAnim.Stop());
-
 
1983
                            _bAnimSatFixActive = false;
-
 
1984
                        }
-
 
1985
                        if (!_bFollowCopter)
-
 
1986
                        {
-
 
1987
                            _setCopterData(osd.Pos());
-
 
1988
                            if (!MainMap.ViewArea.Contains(osd.Pos()))
-
 
1989
                                Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
-
 
1990
 
-
 
1991
                        }
-
 
1992
                        else
-
 
1993
                            Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
-
 
1994
                    }
-
 
1995
                    else
-
 
1996
                    {
-
 
1997
                        if (_bSatFix)
-
 
1998
                        {
-
 
1999
                            if (data[23] == _iSatsLast)
-
 
2000
                            {
-
 
2001
                                if (_iSatsJitter < 20) _iSatsJitter++;
-
 
2002
                            }
-
 
2003
                            else
-
 
2004
                            {
-
 
2005
                                _iSatsJitter = 0;
-
 
2006
                                _iSatsLast = data[23];
-
 
2007
                            }
-
 
2008
 
-
 
2009
                            if (_iSatsJitter == 20)
-
 
2010
                            {
-
 
2011
                                if (stbSatFixLostAnim != null && !_bAnimSatFixActive)
-
 
2012
                                {
-
 
2013
                                    Dispatcher.Invoke(() => stbSatFixLostAnim.Begin());
-
 
2014
                                    _bAnimSatFixActive = true;
-
 
2015
                                }
-
 
2016
                                if (_bVoiceSatFixPlay && !_bVoiceSatFixActive)
-
 
2017
                                {
-
 
2018
                                    _bVoiceSatFixActive = true;
-
 
2019
                                    ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\SatFixLost.mp3");
-
 
2020
                                    //Thread th = new Thread(() => _mediaPlayer("Voice\\SatFixLost.mp3"));
-
 
2021
                                    //th.Start();
-
 
2022
                                }
-
 
2023
 
-
 
2024
                                _bSatFix = false;
-
 
2025
                            }
-
 
2026
                        }
-
 
2027
                    }
-
 
2028
 
-
 
2029
                    break;
-
 
2030
 
-
 
2031
                case 15:
-
 
2032
                    //--------------------------------Waypoint index------------------------------------
-
 
2033
                    Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[13].ToString()));
-
 
2034
                    Dispatcher.Invoke((Action)(() => lblWPIndexNC.Content = data[13].ToString()));
-
 
2035
                    Dispatcher.Invoke((Action)(() => lblWPStatusIndexNC.Content = data[13].ToString()));
-
 
2036
                    if (data[13] > 0 && _wpIndex != data[13]-1 && wpList.Count >= data[13]-1)
-
 
2037
                    {
-
 
2038
                        _setActiveWP(data[13]-1);
-
 
2039
                        if ((FCSTATUSFLAGS1 & 2) == 2)
-
 
2040
                            Dispatcher.Invoke(() => {
-
 
2041
                                DataGridRow row;
-
 
2042
                                if (_wpIndex > -1)
-
 
2043
                                {
-
 
2044
                                    row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
-
 
2045
                                    row.Background = new SolidColorBrush(Colors.Transparent);
-
 
2046
                                    row.BorderBrush = new SolidColorBrush(Colors.Transparent);
-
 
2047
                                    row.BorderThickness = new Thickness(0);
-
 
2048
                                }
-
 
2049
 
-
 
2050
                                _wpIndex = data[13]-1;
-
 
2051
                                row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
-
 
2052
                                row.Background = new SolidColorBrush(Color.FromArgb(80, 0, 255, 100));
-
 
2053
                                row.BorderBrush = new SolidColorBrush(Colors.SpringGreen);
-
 
2054
                                row.BorderThickness = new Thickness(2);
-
 
2055
                                dgvWP.UpdateLayout();
-
 
2056
                            });
-
 
2057
                        _wpIndex = data[13]-1;
-
 
2058
                    }
-
 
2059
                    else
-
 
2060
                    {
-
 
2061
                        if ((data[13] == 0 || wpList.Count == 0) & MainMap.Markers.Contains(wpActiveMarker))
-
 
2062
                        {
-
 
2063
                            Dispatcher.Invoke(() => MainMap.Markers.Remove(wpActiveMarker));
-
 
2064
                            Dispatcher.Invoke(() =>
-
 
2065
                            {
-
 
2066
                                DataGridRow row;
-
 
2067
                                if (_wpIndex > -1 && data[13] == 0 && wpList.Count > _wpIndex)
-
 
2068
                                {
-
 
2069
                                    row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
-
 
2070
                                    row.Background = new SolidColorBrush(Colors.Transparent);
-
 
2071
                                    row.BorderBrush = new SolidColorBrush(Colors.Transparent);
-
 
2072
                                    row.BorderThickness = new Thickness(0);
-
 
2073
                                    _wpIndex = -1;
-
 
2074
                                }
-
 
2075
                            });
-
 
2076
 
-
 
2077
                        }
-
 
2078
                    }
-
 
2079
                    //----------------Waypoints count----------------------
-
 
2080
                    Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[14].ToString())); //Waypoints count
-
 
2081
                    Dispatcher.Invoke((Action)(() => lblWPCountNC.Content = data[14].ToString())); //Waypoints count
-
 
2082
                    Dispatcher.Invoke((Action)(() => lblWPStatusCountNC.Content = data[14].ToString())); //Waypoints count
-
 
2083
                    _wpCount = data[14];
-
 
2084
 
-
 
2085
                    //---------------------------------Target hold time------------------------------
-
 
2086
                    Dispatcher.Invoke((Action)(() => lblWPHoldTime.Content = data[15].ToString() + " s"));
-
 
2087
                    Dispatcher.Invoke((Action)(() => tbWPStatusHoldTime.Text = data[15].ToString() + " s"));
-
 
2088
 
-
 
2089
                    break;
-
 
2090
 
-
 
2091
                case 16:
-
 
2092
                    //--------------- Capacity used ------------------------
-
 
2093
                    i_16 = data[18];
-
 
2094
                    i_16 = (Int16)(i_16 << 8);
-
 
2095
                    iVal = data[17] + i_16;
-
 
2096
                    Dispatcher.Invoke((Action)(() => tbCapacity.Text = iVal.ToString() + " mAh"));
-
 
2097
                    Dispatcher.Invoke((Action)(() => tbTopCapacity.Text = iVal.ToString() + " mAh"));
-
 
2098
 
-
 
2099
                    //--------------- Heading compass ------------------------
-
 
2100
                    i_16 = data[21];
-
 
2101
                    iVal = 2 * i_16;
-
 
2102
                    Dispatcher.Invoke((Action)(() => tbHeadingCompass.Text = iVal.ToString() + " °"));
-
 
2103
                    if (_Simulate)
-
 
2104
                    {
-
 
2105
                        Dispatcher.Invoke(() => ArtHor.rotate = iVal);
-
 
2106
                        Dispatcher.Invoke(() => ((CustomMarkerCopter)(copter.Shape)).rotate = iVal);
-
 
2107
                    }
-
 
2108
 
-
 
2109
                    break;
-
 
2110
                case 17:
-
 
2111
 
-
 
2112
                    break;
-
 
2113
                case 18:
-
 
2114
 
-
 
2115
                    break;
-
 
2116
                default:
-
 
2117
                    break;
-
 
2118
            }
-
 
2119
            //--------------------------------------------------------------------------------
-
 
2120
            //-----------------------------FC Status Flags-------------------------------
-
 
2121
            //--------------------------------------------------------------------------------
-
 
2122
            Dispatcher.Invoke((Action)(() => FC1_1.Background = ((FCSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN                              0x01
-
 
2123
            Dispatcher.Invoke((Action)(() => FC1_2.Background = ((FCSTATUSFLAGS1 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_FLY                                    0x02
-
 
2124
            Dispatcher.Invoke((Action)(() => FC1_3.Background = ((FCSTATUSFLAGS1 & 4) == 4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_CALIBRATE                              0x04
-
 
2125
            Dispatcher.Invoke((Action)(() => FC1_4.Background = ((FCSTATUSFLAGS1 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_START                                  0x08
-
 
2126
            Dispatcher.Invoke((Action)(() => FC1_5.Background = ((FCSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_EMERGENCY_LANDING               0x10
-
 
2127
            Dispatcher.Invoke((Action)(() => FC1_6.Background = ((FCSTATUSFLAGS1 & 32) == 32) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_LOWBAT                              0x20
-
 
2128
 
-
 
2129
            Dispatcher.Invoke((Action)(() => FC2_1.Background = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE                              0x01
-
 
2130
            Dispatcher.Invoke((Action)(() => FC2_2.Background = ((FCSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_ALTITUDE_CONTROL                      0x02
-
 
2131
            Dispatcher.Invoke((Action)(() => FC2_3.Background = ((FCSTATUSFLAGS2 & 4) == 4) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_RC_FAILSAVE_ACTIVE                       0x04
-
 
2132
            Dispatcher.Invoke((Action)(() => FC2_4.Background = ((FCSTATUSFLAGS2 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT1_ACTIVE                           0x08
-
 
2133
            Dispatcher.Invoke((Action)(() => FC2_5.Background = ((FCSTATUSFLAGS2 & 16) == 16) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT2_ACTIVE                         0x10
-
 
2134
            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
-
 
2135
            Dispatcher.Invoke((Action)(() => FC2_7.Background = ((FCSTATUSFLAGS2 & 64) == 64) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_STARTING                       0x40
-
 
2136
            Dispatcher.Invoke((Action)(() => FC2_8.Background = ((FCSTATUSFLAGS2 & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_LANDING                      0x80
-
 
2137
 
-
 
2138
            //Sidebar StatusSymbols
-
 
2139
            Dispatcher.Invoke((Action)(() => tbSideBarStatusMotors.Background = ((FCSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN                                      0x01
-
 
2140
            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
-
 
2141
            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
-
 
2142
 
-
 
2143
            Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.Background = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE                                  0x01
-
 
2144
            Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.Foreground = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_CAREFREE                          0x01
-
 
2145
            Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.BorderBrush = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.White) : new SolidColorBrush(Color.FromArgb(255, 211, 210, 210))));// FC_STATUS2_CAREFREE                         0x01
-
 
2146
 
-
 
2147
            Dispatcher.Invoke((Action)(() => tbSideBarStatusEmergencyLanding.Background = ((FCSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_EMERGENCY_LANDING             0x10
-
 
2148
            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
-
 
2149
            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
-
 
2150
 
-
 
2151
            Dispatcher.Invoke((Action)(() => tbSideBarStatusAC.Background = ((FCSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_ALTITUDE_CONTROL                          0x02
-
 
2152
            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
-
 
2153
            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
-
 
2154
 
-
 
2155
            _bAirborne = (FCSTATUSFLAGS1 & 2) == 2 ? true : false;
-
 
2156
 
-
 
2157
 
-
 
2158
        }
-
 
2159
        public class OSD_Base_Data_t
-
 
2160
        {
-
 
2161
            byte[] data;
-
 
2162
 
-
 
2163
            public OSD_Base_Data_t(byte [] _data)
-
 
2164
            {
-
 
2165
                data = _data;
-
 
2166
            }
-
 
2167
 
-
 
2168
            public PointLatLng Pos()
-
 
2169
            {
-
 
2170
                PointLatLng p = new PointLatLng();
-
 
2171
                int i_32, iVal;
-
 
2172
                double d;
-
 
2173
 
-
 
2174
                i_32 = data[4];
-
 
2175
                iVal = i_32 << 24;
-
 
2176
                i_32 = data[3];
-
 
2177
                iVal += i_32 << 16;
-
 
2178
                i_32 = data[2];
-
 
2179
                iVal += i_32 << 8;
-
 
2180
                iVal += data[1];
-
 
2181
                d = (double)iVal / Math.Pow(10, 7);
-
 
2182
                p.Lng = d;
-
 
2183
 
-
 
2184
                i_32 = data[8];
-
 
2185
                iVal = i_32 << 24;
-
 
2186
                i_32 = data[7];
-
 
2187
                iVal += i_32 << 16;
-
 
2188
                i_32 = data[6];
-
 
2189
                iVal += i_32 << 8;
-
 
2190
                iVal += data[5];
-
 
2191
                d = (double)iVal / Math.Pow(10, 7);
-
 
2192
                p.Lat = d;
-
 
2193
 
-
 
2194
                return p;
-
 
2195
 
-
 
2196
            }
-
 
2197
 
-
 
2198
            public int Height()
-
 
2199
            {
-
 
2200
                int i_32, iVal;
-
 
2201
                i_32 = data[10];
-
 
2202
                iVal = i_32 << 8;
-
 
2203
                iVal += data[9];
-
 
2204
 
-
 
2205
                return iVal;
-
 
2206
            }
-
 
2207
 
-
 
2208
            public double Speed()
-
 
2209
            {
-
 
2210
                return (double)data[11]/10;
-
 
2211
            }
-
 
2212
 
-
 
2213
            public byte OSDSTATUSFLAGS1()
-
 
2214
            {
-
 
2215
                return data[12];
-
 
2216
            }
-
 
2217
            public byte OSDSTATUSFLAGS2()
-
 
2218
            {
-
 
2219
                return data[13];
-
 
2220
            }
-
 
2221
        }
1820
        void _processNCData(byte[] data)
2222
        void _processNCData(byte[] data)
1821
        {
2223
        {
1822
            int i_32, i_16, iVal;
2224
            int i_32, i_16, iVal;
1823
            double d;
2225
            double d;
-
 
2226
 
-
 
2227
            //----------------------------POSITION------------------------------------
1824
            i_32 = data[4];
2228
            i_32 = data[4];
1825
            iVal = i_32 << 24;
2229
            iVal = i_32 << 24;
1826
            i_32 = data[3];
2230
            i_32 = data[3];
1827
            iVal += i_32 << 16;
2231
            iVal += i_32 << 16;
1828
            i_32 = data[2];
2232
            i_32 = data[2];
Line 1847... Line 2251...
1847
            d = (double)iVal / Math.Pow(10, 7);
2251
            d = (double)iVal / Math.Pow(10, 7);
1848
            Dispatcher.Invoke(() => { drGPX[1] = d; });
2252
            Dispatcher.Invoke(() => { drGPX[1] = d; });
1849
            Dispatcher.Invoke(() => { drGPX[4] = DateTime.UtcNow.ToString("u", System.Globalization.CultureInfo.InvariantCulture); }); //2011-01-14T01:59:01Z });
2253
            Dispatcher.Invoke(() => { drGPX[4] = DateTime.UtcNow.ToString("u", System.Globalization.CultureInfo.InvariantCulture); }); //2011-01-14T01:59:01Z });
1850
            p.Lat = d;
2254
            p.Lat = d;
Line -... Line 2255...
-
 
2255
 
1851
 
2256
            //---------------------------SATS-------------------------------------------------
1852
            if (data[50] > 4)//if more than 4 sats in use . otherwise the map would jump and scroll insane at beginning
2257
            if (data[50] > 4)//if more than 4 sats in use . otherwise the map would jump and scroll insane at beginning
1853
            {
2258
            {
1854
                _bSatFix = true; _iSatsJitter = 0; _bVoiceSatFixActive = false;
2259
                _bSatFix = true; _iSatsJitter = 0; _bVoiceSatFixActive = false;
1855
                if(_bAutoHome && !_bFirstSatFix)
2260
                if(_bAutoHome && !_bFirstSatFix)
Line 1909... Line 2314...
1909
                        _bSatFix = false;
2314
                        _bSatFix = false;
1910
                    }
2315
                    }
1911
                }
2316
                }
1912
            }
2317
            }
Line 1913... Line 2318...
1913
 
2318
 
1914
            //Distance to next WP
2319
            //--------------------------Distance to next WP--------------------------------
1915
            i_16 = data[28];
2320
            i_16 = data[28];
1916
            i_16 = (Int16)(i_16 << 8);
2321
            i_16 = (Int16)(i_16 << 8);
1917
            iVal = data[27] + i_16;
2322
            iVal = data[27] + i_16;
1918
            Dispatcher.Invoke((Action)(() => tbWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
2323
            Dispatcher.Invoke((Action)(() => tbWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
1919
            Dispatcher.Invoke((Action)(() => lblWPRouteDistanceWP.Content = ((double)iVal / (double)10).ToString("0.0 m")));
2324
            Dispatcher.Invoke((Action)(() => lblWPRouteDistanceWP.Content = ((double)iVal / (double)10).ToString("0.0 m")));
Line -... Line 2325...
-
 
2325
            Dispatcher.Invoke((Action)(() => tbWPStatusDistanceWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
1920
            Dispatcher.Invoke((Action)(() => tbWPStatusDistanceWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
2326
 
1921
 
2327
            //-------------------------Distance to HP set by GPS on----------------------------------
1922
            i_16 = data[45];
2328
            i_16 = data[45];
1923
            i_16 = (Int16)(i_16 << 8);
-
 
1924
            iVal = data[44] + i_16;
2329
            i_16 = (Int16)(i_16 << 8);
Line -... Line 2330...
-
 
2330
            iVal = data[44] + i_16;
1925
        //    Dispatcher.Invoke((Action)(() => tbTopDistanceHP.Text = ((double)iVal / (double)10).ToString("0.0 m"))); //Distance to HP set by GPS on
2331
            Dispatcher.Invoke((Action)(() => tbHP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
1926
            Dispatcher.Invoke((Action)(() => tbHP.Text = ((double)iVal / (double)10).ToString("0.0 m"))); //Distance to HP set by GPS on
2332
 
1927
 
2333
            //--------------------------------Waypoint index------------------------------------
1928
            Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[48].ToString())); //Waypoint index
2334
            Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[48].ToString()));
1929
            Dispatcher.Invoke((Action)(() => lblWPIndexNC.Content = data[48].ToString()));
2335
            Dispatcher.Invoke((Action)(() => lblWPIndexNC.Content = data[48].ToString()));
1930
            Dispatcher.Invoke((Action)(() => lblWPStatusIndexNC.Content = data[48].ToString()));
2336
            Dispatcher.Invoke((Action)(() => lblWPStatusIndexNC.Content = data[48].ToString()));
Line 1969... Line 2375...
1969
                        }
2375
                        }
1970
                    });
2376
                    });
Line 1971... Line 2377...
1971
 
2377
 
1972
                }
2378
                }
1973
            }
-
 
-
 
2379
            }
1974
 
2380
            //----------------Waypoints count----------------------
1975
            Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[49].ToString())); //Waypoints count
2381
            Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[49].ToString())); //Waypoints count
1976
            Dispatcher.Invoke((Action)(() => lblWPCountNC.Content = data[49].ToString())); //Waypoints count
2382
            Dispatcher.Invoke((Action)(() => lblWPCountNC.Content = data[49].ToString())); //Waypoints count
1977
            Dispatcher.Invoke((Action)(() => lblWPStatusCountNC.Content = data[49].ToString())); //Waypoints count
2383
            Dispatcher.Invoke((Action)(() => lblWPStatusCountNC.Content = data[49].ToString())); //Waypoints count
-
 
2384
            _wpCount = data[49];
1978
            _wpCount = data[49];
2385
            //-------------------Satellites----------------------------------
Line 1979... Line 2386...
1979
            Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[50].ToString())); //Satellites
2386
            Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[50].ToString()));
1980
 
2387
 
1981
            //--------------- Capacity used ------------------------
2388
            //--------------- Capacity used ------------------------
1982
            i_16 = data[81];
2389
            i_16 = data[81];
Line 2050... Line 2457...
2050
                    }
2457
                    }
2051
                        _iRCLevelJitter++;
2458
                        _iRCLevelJitter++;
2052
                }
2459
                }
2053
            }
2460
            }
Line 2054... Line 2461...
2054
 
2461
 
2055
            //Waypoint max range (by license)
2462
            //-------------------------Waypoint max range (by license)------------------------------
2056
            if(dWPMaxRange != (double)data[70])
2463
            if(dWPMaxRange != (double)data[70])
2057
            {
2464
            {
2058
                dWPMaxRange = (double)data[70];
2465
                dWPMaxRange = (double)data[70];
2059
                if (home != null && checkBoxShowWPMaxRange.IsChecked == true)
2466
                if (home != null && checkBoxShowWPMaxRange.IsChecked == true)
Line 2071... Line 2478...
2071
                        }
2478
                        }
2072
                    });
2479
                    });
2073
                }
2480
                }
2074
                Dispatcher.Invoke((Action)(() => tbWPMaxRange.Text = data[70].ToString() + " m"));
2481
                Dispatcher.Invoke((Action)(() => tbWPMaxRange.Text = data[70].ToString() + " m"));
2075
            }
2482
            }
2076
            //Target hold time
2483
            //---------------------------------Target hold time------------------------------
2077
            Dispatcher.Invoke((Action)(() => lblWPHoldTime.Content = data[73].ToString()+ " s"));
2484
            Dispatcher.Invoke((Action)(() => lblWPHoldTime.Content = data[73].ToString()+ " s"));
2078
            Dispatcher.Invoke((Action)(() => tbWPStatusHoldTime.Text = data[73].ToString()+ " s"));
2485
            Dispatcher.Invoke((Action)(() => tbWPStatusHoldTime.Text = data[73].ToString()+ " s"));
Line 2079... Line 2486...
2079
 
2486
 
2080
            //--------------- NC Error ------------------------
2487
            //--------------- NC Error ------------------------
Line 2084... Line 2491...
2084
            if (data[69] > 0 & data[69] < 44)
2491
            if (data[69] > 0 & data[69] < 44)
2085
                ErrorLog(LogMsgType.Error," NC Error [" + data[69].ToString() + "]: ",NC_Error_Link[data[69]], NC_Error[data[69]]);
2492
                ErrorLog(LogMsgType.Error," NC Error [" + data[69].ToString() + "]: ",NC_Error_Link[data[69]], NC_Error[data[69]]);
2086
            //else
2493
            //else
2087
            //    if (_bErrorLog) _clearErrorLog("NC Error");
2494
            //    if (_bErrorLog) _clearErrorLog("NC Error");
Line -... Line 2495...
-
 
2495
 
2088
 
2496
            //--------------------------------------------------------------------------------
-
 
2497
            //-----------------------------FC / NC Status Flags-------------------------------
2089
            //-------------FC / NC Status Flags
2498
            //--------------------------------------------------------------------------------
2090
            Dispatcher.Invoke((Action)(() => FC1_1.Background = ((data[67] & 1) ==1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN                             0x01
2499
            Dispatcher.Invoke((Action)(() => FC1_1.Background = ((data[67] & 1) ==1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN                             0x01
2091
            Dispatcher.Invoke((Action)(() => FC1_2.Background = ((data[67] & 2) ==2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_FLY                                   0x02
2500
            Dispatcher.Invoke((Action)(() => FC1_2.Background = ((data[67] & 2) ==2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_FLY                                   0x02
2092
            Dispatcher.Invoke((Action)(() => FC1_3.Background = ((data[67] & 4) ==4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_CALIBRATE                             0x04
2501
            Dispatcher.Invoke((Action)(() => FC1_3.Background = ((data[67] & 4) ==4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_CALIBRATE                             0x04
2093
            Dispatcher.Invoke((Action)(() => FC1_4.Background = ((data[67] & 8) ==8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_START                                 0x08
2502
            Dispatcher.Invoke((Action)(() => FC1_4.Background = ((data[67] & 8) ==8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_START                                 0x08
Line 2374... Line 2783...
2374
        /// </summary>
2783
        /// </summary>
2375
        /// <param name="auto"> onetimequery(false) or autoupdate(true) with set timing interval </param>
2784
        /// <param name="auto"> onetimequery(false) or autoupdate(true) with set timing interval </param>
2376
        private void _readNavData(bool auto)
2785
        private void _readNavData(bool auto)
2377
        {
2786
        {
2378
            byte interval = auto ? navctrlInterval : (byte)0;
2787
            byte interval = auto ? navctrlInterval : (byte)0;
2379
            _sendControllerMessage('o', 2, new byte[1] { interval });
2788
           // _sendControllerMessage('o', 2, new byte[1] { interval });
-
 
2789
            _sendControllerMessage('o', 2, new byte[3] { interval,4,0 });
2380
        }
2790
        }
2381
        /// <summary>
2791
        /// <summary>
2382
        /// request the license info
2792
        /// request the license info
2383
        /// </summary>
2793
        /// </summary>
2384
        void _getLic()
2794
        void _getLic()
Line 3750... Line 4160...
3750
                });
4160
                });
Line 3751... Line 4161...
3751
 
4161
 
Line 3752... Line 4162...
3752
            }
4162
            }
-
 
4163
 
3753
 
4164
        }
3754
        }
4165
 
3755
        /// <summary>
4166
        /// <summary>
3756
        /// find the index of of a wp from datatable in the waypointlist wpList
4167
        /// find the index of of a wp from datatable in the waypointlist wpList
3757
        /// </summary>
4168
        /// </summary>
Line 3948... Line 4359...
3948
            {
4359
            {
3949
                if (mRouteWP != null)
4360
                if (mRouteWP != null)
3950
                    MainMap.Markers.Remove(mRouteWP);
4361
                    MainMap.Markers.Remove(mRouteWP);
3951
            }
4362
            }
3952
        }
4363
        }
-
 
4364
 
3953
        private void btnLoadWPLFile_Click(object sender, RoutedEventArgs e)
4365
        private void btnLoadWPLFile_Click(object sender, RoutedEventArgs e)
3954
        {
4366
        {
3955
            _readWPLFile();
4367
            _readWPLFile();
3956
        }
4368
        }
3957
        private void btnClearWPList_Click(object sender, RoutedEventArgs e)
4369
        private void btnClearWPList_Click(object sender, RoutedEventArgs e)
Line 4091... Line 4503...
4091
                dr[13] = _Simulate ? 3 : 0;
4503
                dr[13] = _Simulate ? 3 : 0;
4092
                _sendWayPoint(dr, 0, 's', true);
4504
                _sendWayPoint(dr, 0, 's', true);
4093
                rectSimulate.Visibility = lblSimu.Visibility = _Simulate ? Visibility.Visible : Visibility.Hidden;
4505
                rectSimulate.Visibility = lblSimu.Visibility = _Simulate ? Visibility.Visible : Visibility.Hidden;
4094
            }
4506
            }
4095
        }
4507
        }
-
 
4508
 
4096
        private void dgvWP_MouseUp(object sender, MouseButtonEventArgs e)
4509
        private void dgvWP_MouseUp(object sender, MouseButtonEventArgs e)
4097
        {
4510
        {
4098
            _dgvWPselectEditRow();
4511
            _dgvWPselectEditRow();
4099
        }
4512
        }
4100
        private void dgvWP_MouseDoubleClick(object sender, MouseButtonEventArgs e)
4513
        private void dgvWP_MouseDoubleClick(object sender, MouseButtonEventArgs e)
Line 4212... Line 4625...
4212
            }
4625
            }
4213
            iVal = Convert.ToInt16(dtWaypoints.Rows[index][14]);
4626
            iVal = Convert.ToInt16(dtWaypoints.Rows[index][14]);
4214
            tbWPEditOut1.Text = iVal.ToString();
4627
            tbWPEditOut1.Text = iVal.ToString();
Line 4215... Line 4628...
4215
 
4628
 
4216
        }
-
 
4217
        private void btnWPEditmoveUp_Click(object sender, RoutedEventArgs e)
-
 
4218
        {
-
 
4219
            if (dgvWP.SelectedIndex > 0 && dgvWP.SelectedIndex < dtWaypoints.Rows.Count)
-
 
4220
            {
-
 
4221
                int index = dgvWP.SelectedIndex;
-
 
4222
                if (((int)dtWaypoints.Rows[index][1] == 0 | (int)dtWaypoints.Rows[index][1] == 3) && ((int)dtWaypoints.Rows[index - 1][1] == 0 | (int)dtWaypoints.Rows[index - 1][1] == 3))// && wpList.Count > index)
-
 
4223
                {
-
 
4224
                    PointLatLng x = new PointLatLng((double)dtWaypoints.Rows[index][3], (double)dtWaypoints.Rows[index][4]);
-
 
4225
                    int wpListIndex = wpList.IndexOf(x);
-
 
4226
                    if (wpListIndex > 0)
-
 
4227
                    {
-
 
4228
                        wpList.RemoveAt(wpListIndex);
-
 
4229
                        wpList.Insert(wpListIndex - 1, x);
-
 
4230
                        MainMap.Markers.Remove(mRouteWP);
-
 
4231
                        _routeUpdate();
-
 
4232
                    }
-
 
4233
                }
-
 
4234
                DataRow dr = dtWaypoints.Rows[index];
-
 
4235
                DataRow newRow = dtWaypoints.NewRow();
-
 
4236
                newRow.ItemArray = dr.ItemArray;
-
 
4237
                dtWaypoints.Rows.Remove(dr);
-
 
4238
                dtWaypoints.Rows.InsertAt(newRow, index - 1);
-
 
4239
                dtWaypoints.Rows[index][0] = 100;
-
 
4240
                dtWaypoints.Rows[index - 1][0] = index;
-
 
4241
                GMapMarker m1 = _findWPMarker(dtWaypoints.Rows[index - 1][2].ToString());
-
 
4242
                GMapMarker m2 = _findWPMarker(dtWaypoints.Rows[index][2].ToString());
-
 
4243
                dtWaypoints.Rows[index - 1][2] = dtWaypoints.Rows[index - 1][2].ToString().Substring(0, 1) + index.ToString();
-
 
4244
                ((CustomMarkerWP)m1.Shape).text.Text = dtWaypoints.Rows[index - 1][2].ToString();
-
 
4245
                dtWaypoints.Rows[index][0] = index + 1;
-
 
4246
                dtWaypoints.Rows[index][2] = dtWaypoints.Rows[index][2].ToString().Substring(0, 1) + (index+1).ToString();
-
 
4247
                ((CustomMarkerWP)m2.Shape).text.Text = dtWaypoints.Rows[index][2].ToString();
-
 
4248
                dgvWP.Items.Refresh();
-
 
4249
                dgvWP.SelectedIndex = index - 1;
-
 
4250
                _dgvWPselectEditRow();
-
 
4251
                if (wpOffset.Contains(index)) // calculating offset for wpList (index is 0-based - offset starts with index 1)
-
 
4252
                {
-
 
4253
                    int iOffset = wpOffset.IndexOf(index);
-
 
4254
                    if (iOffset > 0) // if not first element
-
 
4255
                    {
-
 
4256
                        if (wpOffset[iOffset - 1] < index-1) //if previous element is not immediately before actual offset
-
 
4257
                            wpOffset[iOffset] = index-1;  //then decrease offset value by one
-
 
4258
                    }
-
 
4259
                    else
-
 
4260
                        wpOffset[iOffset] = index-1; //if first element, decrease offset by one
-
 
4261
                }
-
 
4262
                else //selected line is POI
-
 
4263
                {
-
 
4264
                    if (wpOffset.Contains(index - 1)) // if next point is WP
-
 
4265
                    {
-
 
4266
                        int iOffset = wpOffset.IndexOf(index - 1);
-
 
4267
                        wpOffset[iOffset] = index; //decrease linenumber of following WP
-
 
4268
                    }
-
 
4269
                }
-
 
4270
 
-
 
4271
            }
-
 
4272
        }
-
 
4273
 
-
 
4274
        private void btnWPEditmoveDown_Click(object sender, RoutedEventArgs e)
-
 
4275
        {
-
 
4276
            if (dgvWP.SelectedIndex > -1 && dgvWP.SelectedIndex < dtWaypoints.Rows.Count - 1)
-
 
4277
            {
-
 
4278
                int index = dgvWP.SelectedIndex;
-
 
4279
                if (((int)dtWaypoints.Rows[index][1] == 0 | (int)dtWaypoints.Rows[index][1] == 3) && ((int)dtWaypoints.Rows[index+1][1] == 0 | (int)dtWaypoints.Rows[index+1][1] == 3))// && wpList.Count > index)
-
 
4280
                {
-
 
4281
                    PointLatLng x = new PointLatLng((double)dtWaypoints.Rows[index][3], (double)dtWaypoints.Rows[index][4]);
-
 
4282
                    int wpListIndex = wpList.IndexOf(x);
-
 
4283
                    if (wpListIndex > -1)
-
 
4284
                    {
-
 
4285
                        wpList.RemoveAt(wpListIndex);
-
 
4286
                        if (wpList.Count > wpListIndex)
-
 
4287
                            wpList.Insert(wpListIndex + 1, x);
-
 
4288
                        else
-
 
4289
                            wpList.Add(x);
-
 
4290
                        MainMap.Markers.Remove(mRouteWP);
-
 
4291
                        _routeUpdate();
-
 
4292
                    }
-
 
4293
                }
-
 
4294
                DataRow dr = dtWaypoints.Rows[index];
-
 
4295
                DataRow newRow = dtWaypoints.NewRow();
-
 
4296
                newRow.ItemArray = dr.ItemArray;
-
 
4297
                dtWaypoints.Rows.Remove(dr);
-
 
4298
                dtWaypoints.Rows.InsertAt(newRow, index + 1);
-
 
4299
                dtWaypoints.Rows[index][0] = 100;
-
 
4300
                dtWaypoints.Rows[index + 1][0] = index + 2;
-
 
4301
                GMapMarker m1 = _findWPMarker(dtWaypoints.Rows[index + 1][2].ToString());
-
 
4302
                GMapMarker m2 = _findWPMarker(dtWaypoints.Rows[index][2].ToString());
-
 
4303
                dtWaypoints.Rows[index + 1][2] = dtWaypoints.Rows[index + 1][2].ToString().Substring(0, 1) + (index+2).ToString();
-
 
4304
                ((CustomMarkerWP)m1.Shape).text.Text = dtWaypoints.Rows[index + 1][2].ToString();
-
 
4305
                dtWaypoints.Rows[index][0] = index + 1;
-
 
4306
                dtWaypoints.Rows[index][2] = dtWaypoints.Rows[index][2].ToString().Substring(0, 1) + (index+1).ToString();
-
 
4307
                ((CustomMarkerWP)m2.Shape).text.Text = dtWaypoints.Rows[index][2].ToString();
-
 
4308
                dgvWP.Items.Refresh();
-
 
4309
                dgvWP.SelectedIndex = index + 1;
-
 
4310
                _dgvWPselectEditRow();
-
 
4311
                if(wpOffset.Contains(index)) // If selected line is WP
-
 
4312
                {
-
 
4313
                    int iOffset = wpOffset.IndexOf(index);
-
 
4314
                    if(iOffset < wpOffset.Count -1) // if not last element
-
 
4315
                    {
-
 
4316
                        if (wpOffset[iOffset + 1] > index + 1) //if next element is not immediately after actual offset
-
 
4317
                            wpOffset[iOffset] = index + 1;  //then increase offset value by one
-
 
4318
                    }
-
 
4319
                    else
-
 
4320
                        wpOffset[iOffset] = index + 1; //if last element increase offset by one
-
 
4321
                }
-
 
4322
                else //selected line is POI
-
 
4323
                {
-
 
4324
                    if (wpOffset.Contains(index + 1)) // if next point is WP
-
 
4325
                    {
-
 
4326
                        int iOffset = wpOffset.IndexOf(index + 1);
-
 
4327
                        wpOffset[iOffset] = index; //decrease linenumber of following WP
-
 
4328
                    }
-
 
4329
                }
-
 
4330
            }
-
 
4331
 
-
 
4332
        }
-
 
4333
 
4629
        }
4334
        private void btnEditWPSave_Click(object sender, RoutedEventArgs e)
4630
        private void btnEditWPSave_Click(object sender, RoutedEventArgs e)
4335
        {
4631
        {
4336
            if(dgvWP.SelectedIndex > -1 && dgvWP.SelectedIndex < dtWaypoints.Rows.Count)
4632
            if(dgvWP.SelectedIndex > -1 && dgvWP.SelectedIndex < dtWaypoints.Rows.Count)
4337
            {
4633
            {
Line 4630... Line 4926...
4630
                dgvWP.SelectedIndex = (int)o[0] -1;
4926
                dgvWP.SelectedIndex = (int)o[0] -1;
4631
                dgvWP.UpdateLayout();
4927
                dgvWP.UpdateLayout();
4632
                _dgvWPselectEditRow();
4928
                _dgvWPselectEditRow();
4633
                });
4929
                });
4634
        }
4930
        }
-
 
4931
 
-
 
4932
        private void btnWPEditmoveUp_Click(object sender, RoutedEventArgs e)
-
 
4933
        {
-
 
4934
            if (dgvWP.SelectedIndex > 0 && dgvWP.SelectedIndex < dtWaypoints.Rows.Count)
-
 
4935
            {
-
 
4936
                int index = dgvWP.SelectedIndex;
-
 
4937
                if (((int)dtWaypoints.Rows[index][1] == 0 | (int)dtWaypoints.Rows[index][1] == 3) && ((int)dtWaypoints.Rows[index - 1][1] == 0 | (int)dtWaypoints.Rows[index - 1][1] == 3))// && wpList.Count > index)
-
 
4938
                {
-
 
4939
                    PointLatLng x = new PointLatLng((double)dtWaypoints.Rows[index][3], (double)dtWaypoints.Rows[index][4]);
-
 
4940
                    int wpListIndex = wpList.IndexOf(x);
-
 
4941
                    if (wpListIndex > 0)
-
 
4942
                    {
-
 
4943
                        wpList.RemoveAt(wpListIndex);
-
 
4944
                        wpList.Insert(wpListIndex - 1, x);
-
 
4945
                        MainMap.Markers.Remove(mRouteWP);
-
 
4946
                        _routeUpdate();
-
 
4947
                    }
-
 
4948
                }
-
 
4949
                DataRow dr = dtWaypoints.Rows[index];
-
 
4950
                DataRow newRow = dtWaypoints.NewRow();
-
 
4951
                newRow.ItemArray = dr.ItemArray;
-
 
4952
                dtWaypoints.Rows.Remove(dr);
-
 
4953
                dtWaypoints.Rows.InsertAt(newRow, index - 1);
-
 
4954
                dtWaypoints.Rows[index][0] = 100;
-
 
4955
                dtWaypoints.Rows[index - 1][0] = index;
-
 
4956
                GMapMarker m1 = _findWPMarker(dtWaypoints.Rows[index - 1][2].ToString());
-
 
4957
                GMapMarker m2 = _findWPMarker(dtWaypoints.Rows[index][2].ToString());
-
 
4958
                dtWaypoints.Rows[index - 1][2] = dtWaypoints.Rows[index - 1][2].ToString().Substring(0, 1) + index.ToString();
-
 
4959
                ((CustomMarkerWP)m1.Shape).text.Text = dtWaypoints.Rows[index - 1][2].ToString();
-
 
4960
                dtWaypoints.Rows[index][0] = index + 1;
-
 
4961
                dtWaypoints.Rows[index][2] = dtWaypoints.Rows[index][2].ToString().Substring(0, 1) + (index+1).ToString();
-
 
4962
                ((CustomMarkerWP)m2.Shape).text.Text = dtWaypoints.Rows[index][2].ToString();
-
 
4963
                dgvWP.Items.Refresh();
-
 
4964
                dgvWP.SelectedIndex = index - 1;
-
 
4965
                _dgvWPselectEditRow();
-
 
4966
                if (wpOffset.Contains(index)) // calculating offset for wpList (index is 0-based - offset starts with index 1)
-
 
4967
                {
-
 
4968
                    int iOffset = wpOffset.IndexOf(index);
-
 
4969
                    if (iOffset > 0) // if not first element
-
 
4970
                    {
-
 
4971
                        if (wpOffset[iOffset - 1] < index-1) //if previous element is not immediately before actual offset
-
 
4972
                            wpOffset[iOffset] = index-1;  //then decrease offset value by one
-
 
4973
                    }
-
 
4974
                    else
-
 
4975
                        wpOffset[iOffset] = index-1; //if first element, decrease offset by one
-
 
4976
                }
-
 
4977
                else //selected line is POI
-
 
4978
                {
-
 
4979
                    if (wpOffset.Contains(index - 1)) // if next point is WP
-
 
4980
                    {
-
 
4981
                        int iOffset = wpOffset.IndexOf(index - 1);
-
 
4982
                        wpOffset[iOffset] = index; //decrease linenumber of following WP
-
 
4983
                    }
-
 
4984
                }
-
 
4985
 
-
 
4986
            }
-
 
4987
        }
-
 
4988
        private void btnWPEditmoveDown_Click(object sender, RoutedEventArgs e)
-
 
4989
        {
-
 
4990
            if (dgvWP.SelectedIndex > -1 && dgvWP.SelectedIndex < dtWaypoints.Rows.Count - 1)
-
 
4991
            {
-
 
4992
                int index = dgvWP.SelectedIndex;
-
 
4993
                if (((int)dtWaypoints.Rows[index][1] == 0 | (int)dtWaypoints.Rows[index][1] == 3) && ((int)dtWaypoints.Rows[index+1][1] == 0 | (int)dtWaypoints.Rows[index+1][1] == 3))// && wpList.Count > index)
-
 
4994
                {
-
 
4995
                    PointLatLng x = new PointLatLng((double)dtWaypoints.Rows[index][3], (double)dtWaypoints.Rows[index][4]);
-
 
4996
                    int wpListIndex = wpList.IndexOf(x);
-
 
4997
                    if (wpListIndex > -1)
-
 
4998
                    {
-
 
4999
                        wpList.RemoveAt(wpListIndex);
-
 
5000
                        if (wpList.Count > wpListIndex)
-
 
5001
                            wpList.Insert(wpListIndex + 1, x);
-
 
5002
                        else
-
 
5003
                            wpList.Add(x);
-
 
5004
                        MainMap.Markers.Remove(mRouteWP);
-
 
5005
                        _routeUpdate();
-
 
5006
                    }
-
 
5007
                }
-
 
5008
                DataRow dr = dtWaypoints.Rows[index];
-
 
5009
                DataRow newRow = dtWaypoints.NewRow();
-
 
5010
                newRow.ItemArray = dr.ItemArray;
-
 
5011
                dtWaypoints.Rows.Remove(dr);
-
 
5012
                dtWaypoints.Rows.InsertAt(newRow, index + 1);
-
 
5013
                dtWaypoints.Rows[index][0] = 100;
-
 
5014
                dtWaypoints.Rows[index + 1][0] = index + 2;
-
 
5015
                GMapMarker m1 = _findWPMarker(dtWaypoints.Rows[index + 1][2].ToString());
-
 
5016
                GMapMarker m2 = _findWPMarker(dtWaypoints.Rows[index][2].ToString());
-
 
5017
                dtWaypoints.Rows[index + 1][2] = dtWaypoints.Rows[index + 1][2].ToString().Substring(0, 1) + (index+2).ToString();
-
 
5018
                ((CustomMarkerWP)m1.Shape).text.Text = dtWaypoints.Rows[index + 1][2].ToString();
-
 
5019
                dtWaypoints.Rows[index][0] = index + 1;
-
 
5020
                dtWaypoints.Rows[index][2] = dtWaypoints.Rows[index][2].ToString().Substring(0, 1) + (index+1).ToString();
-
 
5021
                ((CustomMarkerWP)m2.Shape).text.Text = dtWaypoints.Rows[index][2].ToString();
-
 
5022
                dgvWP.Items.Refresh();
-
 
5023
                dgvWP.SelectedIndex = index + 1;
-
 
5024
                _dgvWPselectEditRow();
-
 
5025
                if(wpOffset.Contains(index)) // If selected line is WP
-
 
5026
                {
-
 
5027
                    int iOffset = wpOffset.IndexOf(index);
-
 
5028
                    if(iOffset < wpOffset.Count -1) // if not last element
-
 
5029
                    {
-
 
5030
                        if (wpOffset[iOffset + 1] > index + 1) //if next element is not immediately after actual offset
-
 
5031
                            wpOffset[iOffset] = index + 1;  //then increase offset value by one
-
 
5032
                    }
-
 
5033
                    else
-
 
5034
                        wpOffset[iOffset] = index + 1; //if last element increase offset by one
-
 
5035
                }
-
 
5036
                else //selected line is POI
-
 
5037
                {
-
 
5038
                    if (wpOffset.Contains(index + 1)) // if next point is WP
-
 
5039
                    {
-
 
5040
                        int iOffset = wpOffset.IndexOf(index + 1);
-
 
5041
                        wpOffset[iOffset] = index; //decrease linenumber of following WP
-
 
5042
                    }
-
 
5043
                }
-
 
5044
            }
-
 
5045
 
-
 
5046
        }
-
 
5047
 
4635
        private void checkBoxShowWPStatus_Click(object sender, RoutedEventArgs e)
5048
        private void checkBoxShowWPStatus_Click(object sender, RoutedEventArgs e)
4636
        {
5049
        {
4637
            if (WPStatus.Visibility == Visibility.Visible)
5050
            if (WPStatus.Visibility == Visibility.Visible)
4638
                GridOSD.Margin = new Thickness(GridOSD.Margin.Left, 36 * UIScaleTopSlider.Value + 36, GridOSD.Margin.Right, GridOSD.Margin.Bottom);
5051
                GridOSD.Margin = new Thickness(GridOSD.Margin.Left, 36 * UIScaleTopSlider.Value + 36, GridOSD.Margin.Right, GridOSD.Margin.Bottom);
4639
            else
5052
            else