Rev 2428 | Go to most recent revision | 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 | { |