Subversion Repositories Projects

Rev

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

Rev 2428 Rev 2429
Line 784... Line 784...
784
            }
784
            }
Line 785... Line 785...
785
 
785
 
786
        }
786
        }
787
        void _setActiveWP(int iIndex)
787
        void _setActiveWP(int iIndex)
788
        {
788
        {
789
            if (wpActiveMarker == null || !MainMap.Markers.Contains(wpActiveMarker))
789
            if (iIndex < wpList.Count)
790
            {
790
            {
791
                Dispatcher.Invoke(() =>
791
                if (wpActiveMarker == null || !MainMap.Markers.Contains(wpActiveMarker))
-
 
792
                {
-
 
793
                    Dispatcher.Invoke(() =>
792
                {
794
                    {
793
                    wpActiveMarker = new GMapMarker(wpList[iIndex]);
795
                        wpActiveMarker = new GMapMarker(wpList[iIndex]);
794
                    wpActiveMarker.Shape = new CustomMarkerWPActive(this, wpActiveMarker, "wpActive", 0);
796
                        wpActiveMarker.Shape = new CustomMarkerWPActive(this, wpActiveMarker, "wpActive", 0);
795
                    wpActiveMarker.Offset = new Point(-17.5, -17.5);
797
                        wpActiveMarker.Offset = new Point(-17.5, -17.5);
-
 
798
                        MainMap.Markers.Add(wpActiveMarker);
796
                    MainMap.Markers.Add(wpActiveMarker);
799
                    });
-
 
800
                }
-
 
801
                else
797
                });
802
                    Dispatcher.Invoke(() => wpActiveMarker.Position = wpList[iIndex]);
798
            }
-
 
799
            else
-
 
Line 800... Line 803...
800
                Dispatcher.Invoke(() => wpActiveMarker.Position = wpList[iIndex]);
803
            }
801
 
804
 
802
            Dispatcher.Invoke(() => tbWPStatusHeight.Text = dtWaypoints.Rows[iIndex][5].ToString() + " m");
805
            Dispatcher.Invoke(() => tbWPStatusHeight.Text = dtWaypoints.Rows[iIndex][5].ToString() + " m");
803
        }
806
        }
Line 1403... Line 1406...
1403
                        _iCtrlAct = adr;
1406
                        _iCtrlAct = adr;
1404
                        switch (adr)
1407
                        switch (adr)
1405
                        {
1408
                        {
1406
                            case 1:
1409
                            case 1:
1407
                                Dispatcher.Invoke(() => tbCtrl.Text = "FC");
1410
                                Dispatcher.Invoke(() => tbCtrl.Text = "FC");
1408
                                // Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Visible);
1411
                                Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Visible);
1409
                                // Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Visible);
1412
                                Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Visible);
1410
                                //  _setFieldsNA(); //display fields NA for FC 
1413
                                //  _setFieldsNA(); //display fields NA for FC 
1411
                                break;
1414
                                break;
1412
                            case 2:
1415
                            case 2:
1413
                                Dispatcher.Invoke(() => tbCtrl.Text = "NC");
1416
                                Dispatcher.Invoke(() => tbCtrl.Text = "NC");
1414
                                //Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Hidden);
1417
                                Dispatcher.Invoke(() => buttonSwitchNC.Visibility = Visibility.Hidden);
1415
                                //Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Hidden);
1418
                                Dispatcher.Invoke(() => labelSwitchToNavi.Visibility = Visibility.Hidden);
1416
                                break;
1419
                                break;
1417
                            //case 3:
1420
                            //case 3:
1418
                            //    lblCtrl.Invoke((Action)(() => lblCtrl.Text = "MK3MAG"));
1421
                            //    lblCtrl.Invoke((Action)(() => lblCtrl.Text = "MK3MAG"));
1419
                            //    break;
1422
                            //    break;
1420
                            //case 4:
1423
                            //case 4:
Line 1820... Line 1823...
1820
        /// GPS-Position, capacatiy, flying time...
1823
        /// GPS-Position, capacatiy, flying time...
1821
        /// </summary>
1824
        /// </summary>
1822
        /// <param name="data">the received byte array to process</param>
1825
        /// <param name="data">the received byte array to process</param>
Line 1823... Line -...
1823
 
-
 
1824
 
-
 
1825
        byte OSD_FLAG_MASK1 = 0x04 + 0x20 + 0x40 + 0x80;
-
 
1826
        byte OSD_FLAG_MASK2 = 0x01 + 0x02 + 0x08 + 0x10;
-
 
1827
        int FCSTATUSFLAGS1 = 0;
1826
 
1828
        int FCSTATUSFLAGS2 = 0;
1827
 
1829
        byte OSDSTATUSFLAGS1 = 0;
1828
        byte OSDSTATUSFLAGS1 = 0;
1830
        byte OSDSTATUSFLAGS2 = 0;
1829
        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")));
1830
        void _processNCDataV2(byte[] data)
1845
 
1831
        {
1846
            switch ((int)data[0])
1832
            if ((int)data[0] < 17)
1847
            {
1833
            {
1848
                case 10:
1834
                int i_32, i_16, iVal;
1849
                    break;
1835
                double d;
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
 
1836
                OSD_Base_Data_t osd = new OSD_Base_Data_t(data);
1860
                    Dispatcher.Invoke((Action)(() => tbSideBarStatusPH.Text = ((data[14] & 4) == 4) ? "CH" : "PH"));// NC_FLAG_PH 0x02 / NC_FLAG_CH 0x04
1837
                OSDSTATUSFLAGS1 = osd.OSDSTATUSFLAGS1();
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
1838
                Dispatcher.Invoke(() => { drGPX[2] = osd.Pos().Lng; });
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
 
1839
                Dispatcher.Invoke(() => { drGPX[1] = osd.Pos().Lat; });
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]]);
1840
                Dispatcher.Invoke(() => { drGPX[4] = DateTime.UtcNow.ToString("u", System.Globalization.CultureInfo.InvariantCulture); }); //2011-01-14T01:59:01Z });
1871
 
-
 
1872
                    break;
-
 
1873
                case 12:
-
 
1874
                    //--------------- RC quality ------------------------
1841
                Dispatcher.Invoke((Action)(() => tbNCGrSpeed.Text = osd.Speed().ToString("0.0 m/s")));
Line 1875... Line 1842...
1875
                    Dispatcher.Invoke((Action)(() => tbRCQ.Text = data[23].ToString()));
1842
                if (_Simulate)
1876
                    Dispatcher.Invoke((Action)(() => tbTopRC.Text = data[23].ToString()));
1843
                    Dispatcher.Invoke((Action)(() => tbTopSpeed.Text = osd.Speed().ToString("0.0 m/s")));
-
 
1844
 
-
 
1845
                switch ((int)data[0])
-
 
1846
                {
1877
 
1847
                    case 10:
1878
                    if (data[23] > _iThresholdRC)
1848
                        break;
-
 
1849
                    case 11:
-
 
1850
                        OSDSTATUSFLAGS2 = osd.OSDSTATUSFLAGS2();
-
 
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
1879
                    {
1858
                        Dispatcher.Invoke((Action)(() => NC1_8.Background = ((data[14] & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// NC_FLAG_GPS_OK                                 0x80
1880
                        _iRCLevelJitter = 0; _bVoiceRCLevelActive = false;
1859
 
1881
                        if (stbRCLevelAnim != null && _bAnimRCLevelActive)
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
1882
                        {
1864
 
1883
                            Dispatcher.Invoke(() => stbRCLevelAnim.Stop());
1865
                        //--------------- NC Error ------------------------
-
 
1866
                        Dispatcher.Invoke((Action)(() => tbNCErr.Text = data[16].ToString()));  //NC Errornumber
-
 
1867
                        if (data[16] > 0)
-
 
1868
                            _readNCError();
1884
                            _bAnimRCLevelActive = false;
1869
                        if (data[16] > 0 & data[16] < 44)
1885
                        }
1870
                            ErrorLog(LogMsgType.Error, " NC Error [" + data[16].ToString() + "]: ", NC_Error_Link[data[16]], NC_Error[data[16]]);
1886
                    }
1871
 
-
 
1872
                        break;
-
 
1873
                    case 12:
-
 
1874
                        //--------------- RC quality ------------------------
1887
                    else
1875
                        Dispatcher.Invoke((Action)(() => tbRCQ.Text = data[23].ToString()));
1888
                    {
1876
                        Dispatcher.Invoke((Action)(() => tbTopRC.Text = data[23].ToString()));
-
 
1877
 
1889
                        if (_iRCLevelJitter < 20) _iRCLevelJitter++;
1878
                        if (data[23] > _iThresholdRC)
1890
                        if (_iRCLevelJitter == 20)
1879
                        {
1891
                        {
1880
                            _iRCLevelJitter = 0; _bVoiceRCLevelActive = false;
1892
                            if (stbRCLevelAnim != null && !_bAnimRCLevelActive)
1881
                            if (stbRCLevelAnim != null && _bAnimRCLevelActive)
1893
                            {
1882
                            {
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();
1883
                                Dispatcher.Invoke(() => stbRCLevelAnim.Stop());
1903
                            }
-
 
1904
                            _iRCLevelJitter++;
1884
                                _bAnimRCLevelActive = false;
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
                    {
1885
                            }
1916
                        dWPMaxRange = iVal;
1886
                        }
1917
                        if (home != null && checkBoxShowWPMaxRange.IsChecked == true)
-
 
1918
                        {
-
 
1919
                            if (cWPBound != null && cWPBound.Tag != null)
-
 
1920
                                MainMap.Markers.Remove(cWPBound.Tag as GMapMarker);
1887
                        else
1921
 
1888
                        {
-
 
1889
                            if (_iRCLevelJitter < 20) _iRCLevelJitter++;
-
 
1890
                            if (_iRCLevelJitter == 20)
-
 
1891
                            {
-
 
1892
                                if (stbRCLevelAnim != null && !_bAnimRCLevelActive)
-
 
1893
                                {
1922
                            createCircle(home.Position, dWPMaxRange);
1894
                                    Dispatcher.Invoke(() => stbRCLevelAnim.Begin());
1923
                            Dispatcher.Invoke(() =>
1895
                                    _bAnimRCLevelActive = true;
-
 
1896
                                }
-
 
1897
                                if (_bVoiceRCLevelPlay && !_bVoiceRCLevelActive)
1924
                            {
1898
                                {
1925
                                if (comboBoxWPMaxRangeColor.SelectionBoxItem != null)
1899
                                    _bVoiceRCLevelActive = true;
1926
                                {
1900
                                    ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\MagneticField.mp3");
-
 
1901
                                    //Thread th = new Thread(() => _mediaPlayer("Voice\\RCLevel.mp3"));
1927
                                    string s = comboBoxWPMaxRangeColor.SelectionBoxItem.ToString();
1902
                                    //th.Start();
1928
                                    cWPBound.setColor(s);
1903
                                }
1929
                                }
-
 
1930
                            });
-
 
1931
                        }
-
 
1932
                        Dispatcher.Invoke((Action)(() => tbWPMaxRange.Text = iVal.ToString() + " m"));
-
 
1933
                    }
-
 
1934
 
-
 
1935
                    OSDSTATUSFLAGS2 = osd.OSDSTATUSFLAGS2();
1904
                                _iRCLevelJitter++;
1936
                    FCSTATUSFLAGS1 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK1) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK1);
-
 
1937
                    FCSTATUSFLAGS2 = (OSDSTATUSFLAGS1 & OSD_FLAG_MASK2) | (OSDSTATUSFLAGS2 & ~OSD_FLAG_MASK2);
1905
                            }
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()));
1906
                        }
1948
                    Dispatcher.Invoke((Action)(() => tbTopFTime.Text = Text.ToString()));
1907
                        break;
1949
 
1908
                    case 13:
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")));
1909
                        //-------------------------Waypoint max range (by license)------------------------------
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")));
-
 
Line 1963... Line -...
1963
 
-
 
1964
                    //-------------------Satellites----------------------------------
-
 
1965
                    Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[23].ToString()));
-
 
1966
 
1910
                        i_32 = data[24];
1967
                    if (data[23] > 4)//if more than 4 sats in use . otherwise the map would jump and scroll insane at beginning
1911
                        iVal = i_32 << 8;
1968
                    {
1912
                        iVal += data[23];
1969
                        _bSatFix = true; _iSatsJitter = 0; _bVoiceSatFixActive = false;
1913
 
1970
                        if (_bAutoHome && !_bFirstSatFix)
-
 
1971
                        {
1914
                        if (dWPMaxRange != iVal)
-
 
1915
                        {
-
 
1916
                            dWPMaxRange = iVal;
-
 
1917
                            if (home != null && checkBoxShowWPMaxRange.IsChecked == true)
1972
                            if (_iFirstSatFix < 3)
1918
                            {
1973
                                _iFirstSatFix++;
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
                                    {
1974
                            else
1927
                                        string s = comboBoxWPMaxRangeColor.SelectionBoxItem.ToString();
-
 
1928
                                        cWPBound.setColor(s);
1975
                            {
1929
                                    }
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)
-
 
Line 1986... Line 1930...
1986
                        {
1930
                                });
-
 
1931
                            }
1987
                            _setCopterData(osd.Pos());
1932
                            Dispatcher.Invoke((Action)(() => tbWPMaxRange.Text = iVal.ToString() + " m"));
-
 
1933
                        }
-
 
1934
 
-
 
1935
                        break;
-
 
1936
 
-
 
1937
                    case 14:
-
 
1938
                        //--------------- Flying time ------------------------
1988
                            if (!MainMap.ViewArea.Contains(osd.Pos()))
1939
                        i_16 = data[14];
-
 
1940
                        i_16 = (Int16)(i_16 << 8);
-
 
1941
                        iVal = data[13] + i_16;
-
 
1942
                        TimeSpan t = TimeSpan.FromSeconds(iVal);
1989
                                Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
1943
                        string Text = t.Hours.ToString("D2") + ":" + t.Minutes.ToString("D2") + ":" + t.Seconds.ToString("D2");
-
 
1944
                        Dispatcher.Invoke((Action)(() => tbFTime.Text = Text.ToString()));
1990
 
1945
                        Dispatcher.Invoke((Action)(() => tbTopFTime.Text = Text.ToString()));
-
 
1946
 
-
 
1947
                        //--------------------------------Distance HP------------------------------------
-
 
1948
                        i_16 = data[16];
1991
                        }
1949
                        i_16 = (Int16)(i_16 << 8);
-
 
1950
                        iVal = data[15] + i_16;
1992
                        else
1951
                        Dispatcher.Invoke((Action)(() => tbHP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
-
 
1952
 
-
 
1953
                        //--------------------------Distance to next WP--------------------------------
-
 
1954
                        i_16 = data[19];
-
 
1955
                        i_16 = (Int16)(i_16 << 8);
-
 
1956
                        iVal = data[18] + i_16;
-
 
1957
                        Dispatcher.Invoke((Action)(() => tbWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
-
 
1958
                        Dispatcher.Invoke((Action)(() => lblWPRouteDistanceWP.Content = ((double)iVal / (double)10).ToString("0.0 m")));
-
 
1959
                        Dispatcher.Invoke((Action)(() => tbWPStatusDistanceWP.Text = ((double)iVal / (double)10).ToString("0.0 m")));
1993
                            Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
1960
 
-
 
1961
                        //-------------------Satellites----------------------------------
1994
                    }
1962
                        Dispatcher.Invoke((Action)(() => tbTopSats.Text = data[23].ToString()));
1995
                    else
1963
 
1996
                    {
1964
                        if (data[23] > 4)//if more than 4 sats in use . otherwise the map would jump and scroll insane at beginning
-
 
1965
                        {
-
 
1966
                            _bSatFix = true; _iSatsJitter = 0; _bVoiceSatFixActive = false;
-
 
1967
                            if (_bAutoHome && !_bFirstSatFix)
-
 
1968
                            {
-
 
1969
                                if (_iFirstSatFix < 3)
-
 
1970
                                    _iFirstSatFix++;
1997
                        if (_bSatFix)
1971
                                else
1998
                        {
1972
                                {
1999
                            if (data[23] == _iSatsLast)
1973
                                    _bFirstSatFix = true;
2000
                            {
1974
                                    Dispatcher.Invoke(() => _setHomePos());
2001
                                if (_iSatsJitter < 20) _iSatsJitter++;
1975
                                }
2002
                            }
1976
                            }
-
 
1977
                            if (stbSatFixLostAnim != null && _bAnimSatFixActive)
-
 
1978
                            {
-
 
1979
                                Dispatcher.Invoke(() => stbSatFixLostAnim.Stop());
-
 
1980
                                _bAnimSatFixActive = false;
-
 
1981
                            }
Line -... Line 1982...
-
 
1982
                            if (!_bFollowCopter)
-
 
1983
                            {
-
 
1984
                                _setCopterData(osd.Pos());
-
 
1985
                                if (!MainMap.ViewArea.Contains(osd.Pos()))
-
 
1986
                                    Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
-
 
1987
 
2003
                            else
1988
                            }
2004
                            {
1989
                            else
2005
                                _iSatsJitter = 0;
1990
                                Dispatcher.Invoke(() => MainMap.Position = osd.Pos());
2006
                                _iSatsLast = data[23];
1991
                        }
2007
                            }
-
 
2008
 
1992
                        else
2009
                            if (_iSatsJitter == 20)
1993
                        {
2010
                            {
1994
                            if (_bSatFix)
2011
                                if (stbSatFixLostAnim != null && !_bAnimSatFixActive)
1995
                            {
2012
                                {
1996
                                if (data[23] == _iSatsLast)
2013
                                    Dispatcher.Invoke(() => stbSatFixLostAnim.Begin());
-
 
2014
                                    _bAnimSatFixActive = true;
-
 
2015
                                }
1997
                                {
2016
                                if (_bVoiceSatFixPlay && !_bVoiceSatFixActive)
1998
                                    if (_iSatsJitter < 20) _iSatsJitter++;
Line -... Line 1999...
-
 
1999
                                }
-
 
2000
                                else
-
 
2001
                                {
-
 
2002
                                    _iSatsJitter = 0;
-
 
2003
                                    _iSatsLast = data[23];
-
 
2004
                                }
-
 
2005
 
-
 
2006
                                if (_iSatsJitter == 20)
-
 
2007
                                {
-
 
2008
                                    if (stbSatFixLostAnim != null && !_bAnimSatFixActive)
-
 
2009
                                    {
-
 
2010
                                        Dispatcher.Invoke(() => stbSatFixLostAnim.Begin());
-
 
2011
                                        _bAnimSatFixActive = true;
-
 
2012
                                    }
-
 
2013
                                    if (_bVoiceSatFixPlay && !_bVoiceSatFixActive)
2017
                                {
2014
                                    {
-
 
2015
                                        _bVoiceSatFixActive = true;
2018
                                    _bVoiceSatFixActive = true;
2016
                                        ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\SatFixLost.mp3");
2019
                                    ThreadPool.QueueUserWorkItem(new WaitCallback(_mediaPlayer), "Voice\\SatFixLost.mp3");
2017
                                        //Thread th = new Thread(() => _mediaPlayer("Voice\\SatFixLost.mp3"));
2020
                                    //Thread th = new Thread(() => _mediaPlayer("Voice\\SatFixLost.mp3"));
-
 
Line 2021... Line 2018...
2021
                                    //th.Start();
2018
                                        //th.Start();
Line 2022... Line 2019...
2022
                                }
2019
                                    }
2023
 
2020
 
2024
                                _bSatFix = false;
2021
                                    _bSatFix = false;
2025
                            }
2022
                                }
2026
                        }
2023
                            }
2027
                    }
2024
                        }
2028
 
2025
 
2029
                    break;
2026
                        break;
2030
 
2027
 
2031
                case 15:
2028
                    case 15:
2032
                    //--------------------------------Waypoint index------------------------------------
-
 
2033
                    Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[13].ToString()));
-
 
2034
                    Dispatcher.Invoke((Action)(() => lblWPIndexNC.Content = data[13].ToString()));
2029
                        //--------------------------------Waypoint index------------------------------------
-
 
2030
                        Dispatcher.Invoke((Action)(() => tbWPIndex.Text = data[13].ToString()));
-
 
2031
                        Dispatcher.Invoke((Action)(() => lblWPIndexNC.Content = data[13].ToString()));
-
 
2032
                        Dispatcher.Invoke((Action)(() => lblWPStatusIndexNC.Content = data[13].ToString()));
2035
                    Dispatcher.Invoke((Action)(() => lblWPStatusIndexNC.Content = data[13].ToString()));
2033
                        if (data[13] > 0 && _wpIndex != data[13] - 1 && wpList.Count > data[13] - 1)
2036
                    if (data[13] > 0 && _wpIndex != data[13]-1 && wpList.Count >= data[13]-1)
2034
                        {
2037
                    {
2035
                            _setActiveWP(data[13] - 1);
2038
                        _setActiveWP(data[13]-1);
2036
                            if ((OSDSTATUSFLAGS2 & 2) == 2)
2039
                        if ((FCSTATUSFLAGS1 & 2) == 2)
2037
                                Dispatcher.Invoke(() =>
Line 2040... Line 2038...
2040
                            Dispatcher.Invoke(() => {
2038
                                {
2041
                                DataGridRow row;
2039
                                    DataGridRow row;
2042
                                if (_wpIndex > -1)
2040
                                    if (_wpIndex > -1)
2043
                                {
2041
                                    {
2044
                                    row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
2042
                                        row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
2045
                                    row.Background = new SolidColorBrush(Colors.Transparent);
2043
                                        row.Background = new SolidColorBrush(Colors.Transparent);
2046
                                    row.BorderBrush = new SolidColorBrush(Colors.Transparent);
2044
                                        row.BorderBrush = new SolidColorBrush(Colors.Transparent);
2047
                                    row.BorderThickness = new Thickness(0);
2045
                                        row.BorderThickness = new Thickness(0);
2048
                                }
2046
                                    }
2049
 
2047
 
2050
                                _wpIndex = data[13]-1;
-
 
2051
                                row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
-
 
2052
                                row.Background = new SolidColorBrush(Color.FromArgb(80, 0, 255, 100));
2048
                                    _wpIndex = data[13] - 1;
2053
                                row.BorderBrush = new SolidColorBrush(Colors.SpringGreen);
2049
                                    row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
2054
                                row.BorderThickness = new Thickness(2);
-
 
2055
                                dgvWP.UpdateLayout();
2050
                                    row.Background = new SolidColorBrush(Color.FromArgb(80, 0, 255, 100));
2056
                            });
2051
                                    row.BorderBrush = new SolidColorBrush(Colors.SpringGreen);
2057
                        _wpIndex = data[13]-1;
2052
                                    row.BorderThickness = new Thickness(2);
2058
                    }
2053
                                    dgvWP.UpdateLayout();
-
 
2054
                                });
-
 
2055
                            _wpIndex = data[13] - 1;
-
 
2056
                        }
2059
                    else
2057
                        else
2060
                    {
2058
                        {
2061
                        if ((data[13] == 0 || wpList.Count == 0) & MainMap.Markers.Contains(wpActiveMarker))
2059
                            if ((data[13] == 0 || wpList.Count == 0) & MainMap.Markers.Contains(wpActiveMarker))
2062
                        {
2060
                            {
2063
                            Dispatcher.Invoke(() => MainMap.Markers.Remove(wpActiveMarker));
2061
                                Dispatcher.Invoke(() => MainMap.Markers.Remove(wpActiveMarker));
2064
                            Dispatcher.Invoke(() =>
2062
                                Dispatcher.Invoke(() =>
2065
                            {
2063
                                {
Line -... Line 2064...
-
 
2064
                                    DataGridRow row;
-
 
2065
                                    if (_wpIndex > -1 && data[13] == 0 && wpList.Count > _wpIndex)
-
 
2066
                                    {
-
 
2067
                                        row = (DataGridRow)dgvWP.ItemContainerGenerator.ContainerFromIndex(wpOffset[_wpIndex]);
-
 
2068
                                        row.Background = new SolidColorBrush(Colors.Transparent);
-
 
2069
                                        row.BorderBrush = new SolidColorBrush(Colors.Transparent);
-
 
2070
                                        row.BorderThickness = new Thickness(0);
-
 
2071
                                        _wpIndex = -1;
-
 
2072
                                    }
-
 
2073
                                });
2066
                                DataGridRow row;
2074
 
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);
-
 
Line 2073... Line 2075...
2073
                                    _wpIndex = -1;
2075
                            }
2074
                                }
2076
                        }
2075
                            });
2077
                        //----------------Waypoints count----------------------
Line 2076... Line 2078...
2076
 
2078
                        Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[14].ToString())); //Waypoints count
Line 2077... Line 2079...
2077
                        }
2079
                        Dispatcher.Invoke((Action)(() => lblWPCountNC.Content = data[14].ToString())); //Waypoints count
2078
                    }
2080
                        Dispatcher.Invoke((Action)(() => lblWPStatusCountNC.Content = data[14].ToString())); //Waypoints count
2079
                    //----------------Waypoints count----------------------
2081
                        _wpCount = data[14];
2080
                    Dispatcher.Invoke((Action)(() => tbWPCount.Text = data[14].ToString())); //Waypoints count
2082
                        if(_wpCount > dtWaypoints.Rows.Count)
2081
                    Dispatcher.Invoke((Action)(() => lblWPCountNC.Content = data[14].ToString())); //Waypoints count
2083
                        {
2082
                    Dispatcher.Invoke((Action)(() => lblWPStatusCountNC.Content = data[14].ToString())); //Waypoints count
2084
                            Log(LogMsgType.Warning, "The copter reports more waypoints than there are in the local list!");
2083
                    _wpCount = data[14];
2085
                        }
-
 
2086
 
-
 
2087
                        //---------------------------------Target hold time------------------------------
-
 
2088
                        Dispatcher.Invoke((Action)(() => lblWPHoldTime.Content = data[15].ToString() + " s"));
-
 
2089
                        Dispatcher.Invoke((Action)(() => tbWPStatusHoldTime.Text = data[15].ToString() + " s"));
-
 
2090
 
-
 
2091
                        break;
-
 
2092
 
-
 
2093
                    case 16:
-
 
2094
                        //--------------- Capacity used ------------------------
-
 
2095
                        i_16 = data[18];
Line 2084... Line -...
2084
 
-
 
2085
                    //---------------------------------Target hold time------------------------------
-
 
2086
                    Dispatcher.Invoke((Action)(() => lblWPHoldTime.Content = data[15].ToString() + " s"));
2096
                        i_16 = (Int16)(i_16 << 8);
2087
                    Dispatcher.Invoke((Action)(() => tbWPStatusHoldTime.Text = data[15].ToString() + " s"));
-
 
2088
 
-
 
2089
                    break;
-
 
2090
 
-
 
2091
                case 16:
-
 
2092
                    //--------------- Capacity used ------------------------
2097
                        iVal = data[17] + i_16;
Line 2093... Line 2098...
2093
                    i_16 = data[18];
2098
                        Dispatcher.Invoke((Action)(() => tbCapacity.Text = iVal.ToString() + " mAh"));
2094
                    i_16 = (Int16)(i_16 << 8);
2099
                        Dispatcher.Invoke((Action)(() => tbTopCapacity.Text = iVal.ToString() + " mAh"));
Line 2095... Line 2100...
2095
                    iVal = data[17] + i_16;
2100
 
-
 
2101
                        //--------------- Heading compass ------------------------
-
 
2102
                        i_16 = data[21];
-
 
2103
                        iVal = 2 * i_16;
-
 
2104
                        Dispatcher.Invoke((Action)(() => tbHeadingCompass.Text = iVal.ToString() + " °"));
-
 
2105
                        if (_Simulate)
-
 
2106
                        {
-
 
2107
                            Dispatcher.Invoke(() => ArtHor.rotate = iVal);
-
 
2108
                            Dispatcher.Invoke(() => ((CustomMarkerCopter)(copter.Shape)).rotate = iVal);
-
 
2109
                        }
-
 
2110
 
-
 
2111
                        break;
-
 
2112
                    case 17:
-
 
2113
 
-
 
2114
                        break;
-
 
2115
                    case 18:
-
 
2116
 
-
 
2117
                        break;
-
 
2118
                    default:
-
 
2119
                        break;
-
 
2120
                }
-
 
2121
                //--------------------------------------------------------------------------------
-
 
2122
                //-----------------------------FC Status Flags-------------------------------
-
 
2123
                //--------------------------------------------------------------------------------
-
 
2124
                Dispatcher.Invoke((Action)(() => FC1_1.Background = ((OSDSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_MOTOR_RUN                                 0x01
-
 
2125
                Dispatcher.Invoke((Action)(() => FC1_2.Background = ((OSDSTATUSFLAGS2 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_FLY                                       0x02
-
 
2126
                Dispatcher.Invoke((Action)(() => FC1_3.Background = ((OSDSTATUSFLAGS1 & 4) == 4) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_CALIBRATE                                 0x04
-
 
2127
                Dispatcher.Invoke((Action)(() => FC1_4.Background = ((OSDSTATUSFLAGS2 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_START                                     0x08
-
 
2128
                Dispatcher.Invoke((Action)(() => FC1_5.Background = ((OSDSTATUSFLAGS2 & 16) == 16) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_EMERGENCY_LANDING          0x10
-
 
2129
                Dispatcher.Invoke((Action)(() => FC1_6.Background = ((OSDSTATUSFLAGS1 & 32) == 32) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS_LOWBAT                                 0x20
-
 
2130
 
-
 
2131
                Dispatcher.Invoke((Action)(() => FC2_1.Background = ((OSDSTATUSFLAGS1 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE                         0x01
-
 
2132
                Dispatcher.Invoke((Action)(() => FC2_2.Background = ((OSDSTATUSFLAGS1 & 2) == 2) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_ALTITUDE_CONTROL                 0x02
-
 
2133
                Dispatcher.Invoke((Action)(() => FC2_3.Background = ((OSDSTATUSFLAGS2 & 4) == 4) ? new SolidColorBrush(Colors.LightCoral) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_RC_FAILSAVE_ACTIVE                  0x04
2096
                    Dispatcher.Invoke((Action)(() => tbCapacity.Text = iVal.ToString() + " mAh"));
2134
                Dispatcher.Invoke((Action)(() => FC2_4.Background = ((OSDSTATUSFLAGS1 & 8) == 8) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT1_ACTIVE                              0x08
-
 
2135
                Dispatcher.Invoke((Action)(() => FC2_5.Background = ((OSDSTATUSFLAGS1 & 16) == 16) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_OUT2_ACTIVE                            0x10
-
 
2136
                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
-
 
2137
                Dispatcher.Invoke((Action)(() => FC2_7.Background = ((OSDSTATUSFLAGS2 & 64) == 64) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_STARTING                  0x40
-
 
2138
                Dispatcher.Invoke((Action)(() => FC2_8.Background = ((OSDSTATUSFLAGS2 & 128) == 128) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_AUTO_LANDING                 0x80
Line 2097... Line -...
2097
                    Dispatcher.Invoke((Action)(() => tbTopCapacity.Text = iVal.ToString() + " mAh"));
-
 
2098
 
-
 
2099
                    //--------------- Heading compass ------------------------
2139
 
2100
                    i_16 = data[21];
2140
                //Sidebar StatusSymbols
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.Background = ((OSDSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// 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
                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
2142
 
2143
                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
2143
            Dispatcher.Invoke((Action)(() => tbSideBarStatusCF.Background = ((FCSTATUSFLAGS2 & 1) == 1) ? new SolidColorBrush(Colors.LightSeaGreen) : new SolidColorBrush(Colors.Transparent)));// FC_STATUS2_CAREFREE                                  0x01
2144
 
Line 2205... Line 2206...
2205
                return iVal;
2206
                return iVal;
2206
            }
2207
            }
Line 2207... Line 2208...
2207
 
2208
 
2208
            public double Speed()
2209
            public double Speed()
-
 
2210
            {
2209
            {
2211
                if (data.Length > 11)
-
 
2212
                    return (double)data[11]/10;
2210
                return (double)data[11]/10;
2213
                else return 0;
Line 2211... Line 2214...
2211
            }
2214
            }
2212
 
2215
 
-
 
2216
            public byte OSDSTATUSFLAGS1()
2213
            public byte OSDSTATUSFLAGS1()
2217
            {
-
 
2218
                if (data.Length > 12)
2214
            {
2219
                    return data[12];
2215
                return data[12];
2220
                else return 0;
2216
            }
2221
            }
-
 
2222
            public byte OSDSTATUSFLAGS2()
2217
            public byte OSDSTATUSFLAGS2()
2223
            {
-
 
2224
                if (data.Length > 13)
2218
            {
2225
                    return data[13];
2219
                return data[13];
2226
                else return 0;
2220
            }
2227
            }
2221
        }
2228
        }
2222
        void _processNCData(byte[] data)
2229
        void _processNCData(byte[] data)
Line 2783... Line 2790...
2783
        /// </summary>
2790
        /// </summary>
2784
        /// <param name="auto"> onetimequery(false) or autoupdate(true) with set timing interval </param>
2791
        /// <param name="auto"> onetimequery(false) or autoupdate(true) with set timing interval </param>
2785
        private void _readNavData(bool auto)
2792
        private void _readNavData(bool auto)
2786
        {
2793
        {
2787
            byte interval = auto ? navctrlInterval : (byte)0;
2794
            byte interval = auto ? navctrlInterval : (byte)0;
2788
           // _sendControllerMessage('o', 2, new byte[1] { interval });
2795
          // _sendControllerMessage('o', 2, new byte[1] { interval });
2789
            _sendControllerMessage('o', 2, new byte[3] { interval,4,0 });
2796
             _sendControllerMessage('o', 2, new byte[3] { interval,4,0 });
2790
        }
2797
        }
2791
        /// <summary>
2798
        /// <summary>
2792
        /// request the license info
2799
        /// request the license info
2793
        /// </summary>
2800
        /// </summary>
2794
        void _getLic()
2801
        void _getLic()
Line 4488... Line 4495...
4488
                if (_wpCount > 0)
4495
                if (_wpCount > 0)
4489
                    _sendWayPoint(dr, -1, 'w', false);
4496
                    _sendWayPoint(dr, -1, 'w', false);
4490
                else
4497
                else
4491
                    _sendWayPoint(dr, 1, 'w', false);
4498
                    _sendWayPoint(dr, 1, 'w', false);
Line 4492... Line 4499...
4492
 
4499
 
4493
                if(_wpIndex > -1 && _wpIndex < dtWaypoints.Rows.Count)
4500
                if (_wpIndex > -1 && _wpIndex < dtWaypoints.Rows.Count)
4494
                    _sendWayPoint(dtWaypoints.Rows[_wpIndex], _wpIndex + 1, 's', false);
4501
                    _sendWayPoint(dtWaypoints.Rows[wpOffset[_wpIndex]], _wpIndex+1, 's', false);
4495
            }
4502
            }
4496
        }
4503
        }
4497
        private void btnWPSimulateStart_Click(object sender, RoutedEventArgs e)
4504
        private void btnWPSimulateStart_Click(object sender, RoutedEventArgs e)
4498
        {
4505
        {