Subversion Repositories Projects

Rev

Rev 2312 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2312 Rev 2313
Line 24... Line 24...
24
using System.Windows.Media.Animation;
24
using System.Windows.Media.Animation;
25
using System.Windows.Media.Imaging;
25
using System.Windows.Media.Imaging;
26
using System.Windows.Navigation;
26
using System.Windows.Navigation;
27
using System.Windows.Shapes;
27
using System.Windows.Shapes;
28
using System.Windows.Threading;
28
using System.Windows.Threading;
-
 
29
using System.Globalization;
Line 29... Line 30...
29
 
30
 
30
namespace MKLiveView
31
namespace MKLiveView
31
{
32
{
32
    /// <summary>
33
    /// <summary>
Line 260... Line 261...
260
        /// datatable for motordata (current,temp)
261
        /// datatable for motordata (current,temp)
261
        /// </summary>
262
        /// </summary>
262
        DataTable dtMotors1 = new DataTable();
263
        DataTable dtMotors1 = new DataTable();
Line 263... Line 264...
263
 
264
 
-
 
265
        DataTable dtWaypoints = new DataTable();
264
        DataTable dtWaypoints = new DataTable();
266
        static volatile int _iWPCount = -1;
-
 
267
        static volatile int _iWPIndex = -1;
265
        static volatile int _iWP = -1;
268
        int _iWPTimeout = 1000;
266
        bool _bGetWP = false;
269
        bool _bGetWP = false;
Line 267... Line 270...
267
        static volatile bool _bGetWPCount = false;
270
        static volatile bool _bGetWPCount = false;
Line 345... Line 348...
345
        /// initialize the datatables
348
        /// initialize the datatables
346
        /// with columnnames etc
349
        /// with columnnames etc
347
        /// </summary>
350
        /// </summary>
348
        void _dataTablesInit()
351
        void _dataTablesInit()
349
        {
352
        {
350
            //dtAnalog.Columns.Add("ID");
-
 
351
            //dtAnalog.Columns.Add("Value");
-
 
352
         //   dataGridView1.DataSource = dtAnalog;
-
 
353
 
-
 
354
            dtMotors1.Columns.Add("#");
353
            dtMotors1.Columns.Add("#");
355
            if (Thread.CurrentThread.CurrentUICulture.Name == "")
354
            if (Thread.CurrentThread.CurrentUICulture.Name == "de-DE")
356
                dtMotors1.Columns.Add("Current");
-
 
357
            else
-
 
358
                dtMotors1.Columns.Add("Strom");
355
                dtMotors1.Columns.Add("Strom");
-
 
356
            else
-
 
357
                dtMotors1.Columns.Add("Current");
359
            dtMotors1.Columns.Add("Temp");
358
            dtMotors1.Columns.Add("Temp");
360
            //dtMotors2.Columns.Add("#");
-
 
361
            //if (Thread.CurrentThread.CurrentUICulture.Name == "")
-
 
362
            //    dtMotors2.Columns.Add("Current");
-
 
363
            //else
-
 
364
            //    dtMotors2.Columns.Add("Strom");
-
 
365
            //dtMotors2.Columns.Add("Temp");
-
 
366
            dgvMotors1.DataContext = dtMotors1.DefaultView;
359
            dgvMotors1.DataContext = dtMotors1.DefaultView;
367
            //dgvMotors2.DataContext = dtMotors2.DefaultView;
-
 
368
            _initDTMotors();
360
            _initDTMotors();
369
            //dgvMotors1.Columns[0].Width = 24;
-
 
370
            //dgvMotors1.Columns[1].Width = 74;
-
 
371
            //dgvMotors1.Columns[2].Width = 74;
-
 
372
            //dgvMotors2.Columns[0].Width = 24;
-
 
373
            //dgvMotors2.Columns[1].Width = 74;
-
 
374
            //dgvMotors2.Columns[2].Width = 74;
-
 
375
 
361
 
376
            dtWaypoints.Columns.Add("Index");
-
 
377
            dtWaypoints.Columns.Add("Type");
-
 
378
            dtWaypoints.Columns.Add("Name");
-
 
379
            dtWaypoints.Columns.Add("Latitude");
-
 
380
            dtWaypoints.Columns.Add("Longitude");
-
 
381
            dtWaypoints.Columns.Add("Altitude");
-
 
382
            dtWaypoints.Columns.Add("Heading");
-
 
383
            dtWaypoints.Columns.Add("Speed");
-
 
384
            dtWaypoints.Columns.Add("Altitude rate");
-
 
385
            dtWaypoints.Columns.Add("Tol radius");
-
 
386
            dtWaypoints.Columns.Add("Hold time");
-
 
387
            dtWaypoints.Columns.Add("AutoTrigger");
-
 
388
            dtWaypoints.Columns.Add("Cam angle");
-
 
389
            dtWaypoints.Columns.Add("Event");
-
 
390
            dtWaypoints.Columns.Add("Eventchan Val");
-
 
391
            dtWaypoints.Columns.Add("Status");
-
 
392
            dtWaypoints.PrimaryKey = new DataColumn[] { dtWaypoints.Columns["Index"] };
-
 
393
            dgvWP.DataContext = dtWaypoints.DefaultView;
-
 
394
            Setter setter = new Setter(ContentControl.PaddingProperty, new Thickness(5,0,5,0));
362
            Setter setter = new Setter(ContentControl.PaddingProperty, new Thickness(5,0,5,0));
395
            Style style = new Style(typeof(System.Windows.Controls.Primitives.DataGridColumnHeader));
363
            Style style = new Style(typeof(System.Windows.Controls.Primitives.DataGridColumnHeader));
396
            style.Setters.Add(setter);
364
            style.Setters.Add(setter);
397
            setter = new Setter(ContentControl.BackgroundProperty, new SolidColorBrush(Colors.Transparent));
365
            setter = new Setter(ContentControl.BackgroundProperty, new SolidColorBrush(Colors.Transparent));
398
            style.Setters.Add(setter);
366
            style.Setters.Add(setter);
399
            setter = new Setter(ContentControl.ForegroundProperty, new SolidColorBrush(Colors.White));
367
            setter = new Setter(ContentControl.ForegroundProperty, new SolidColorBrush(Colors.White));
400
            style.Setters.Add(setter);
368
            style.Setters.Add(setter);
-
 
369
 
-
 
370
            dtWaypoints.Columns.Add("Index",typeof(int));
-
 
371
            dtWaypoints.Columns.Add("Type",typeof(string));
-
 
372
            dtWaypoints.Columns.Add("Name",typeof(string));
-
 
373
            dtWaypoints.Columns.Add("Latitude",typeof(string));
-
 
374
            dtWaypoints.Columns.Add("Longitude",typeof(string));
-
 
375
            dtWaypoints.Columns.Add("Altitude",typeof(string));
-
 
376
            dtWaypoints.Columns.Add("Heading",typeof(string));
-
 
377
            dtWaypoints.Columns.Add("Speed",typeof(string));
-
 
378
            dtWaypoints.Columns.Add("ClimbRate",typeof(string));
-
 
379
            dtWaypoints.Columns.Add("Radius",typeof(string));
-
 
380
            dtWaypoints.Columns.Add("HoldTime",typeof(string));
-
 
381
            dtWaypoints.Columns.Add("AutoTrigger",typeof(string));
-
 
382
            dtWaypoints.Columns.Add("CamAngle",typeof(string));
-
 
383
            dtWaypoints.Columns.Add("Event",typeof(string));
-
 
384
            dtWaypoints.Columns.Add("Out1Timer",typeof(string));
-
 
385
            dtWaypoints.Columns.Add("Status",typeof(string));
-
 
386
            dtWaypoints.PrimaryKey = new DataColumn[] { dtWaypoints.Columns["Index"] };
-
 
387
            dgvWP.ItemsSource = dtWaypoints.DefaultView;
401
            dgvWP.ColumnHeaderStyle = new Style();
388
            dgvWP.ColumnHeaderStyle = new Style();
402
            dgvWP.ColumnHeaderStyle = style;
389
            dgvWP.ColumnHeaderStyle = style;
-
 
390
 
-
 
391
 
403
        }
392
        }
404
        /// <summary>
393
        /// <summary>
405
        /// initialize the 2 datatables for motor values
394
        /// initialize the datatable dtMotors1 for motor values
406
        /// dtMotors1 - motor 1 - 4
-
 
407
        /// dtMotors2 - motor 5 - 8
-
 
408
        /// DataGridView dgvMotors1/2 are bound to dtMotors1/2 
395
        /// DataGridView dgvMotors1 is bound to dtMotors1
409
        /// </summary>
396
        /// </summary>
410
        void _initDTMotors()
397
        void _initDTMotors()
411
        {
398
        {
412
            for (int i = 0; i < 12; i++)
399
            for (int i = 0; i < 12; i++)
413
            {
400
            {
Line 416... Line 403...
416
                else
403
                else
417
                {
404
                {
418
                    dtMotors1.Rows[i].SetField(1, "NA");
405
                    dtMotors1.Rows[i].SetField(1, "NA");
419
                    dtMotors1.Rows[i].SetField(2, "NA");
406
                    dtMotors1.Rows[i].SetField(2, "NA");
420
                }
407
                }
421
                //if (dtMotors2.Rows.Count < 4)
-
 
422
                //    dtMotors2.Rows.Add((i + 5).ToString(), "NA", "NA");
-
 
423
                //else
-
 
424
                //{
-
 
425
                //    dtMotors2.Rows[i].SetField(1, "NA");
-
 
426
                //    dtMotors2.Rows[i].SetField(2, "NA");
-
 
427
                //}
-
 
428
            }
408
            }
429
           // Dispatcher.Invoke((Action)(() => dgvMotors1.UpdateLayout()));
-
 
430
            //dgvMotors2.Invoke((Action)(() => dgvMotors2.Refresh()));
-
 
431
        }
409
        }
Line 432... Line 410...
432
 
410
 
Line 433... Line 411...
433
        #endregion init
411
        #endregion init
Line 521... Line 499...
521
            Thread t = new Thread(new ThreadStart(_getWP));
499
            Thread t = new Thread(new ThreadStart(_getWP));
522
            t.Start();
500
            t.Start();
523
        }
501
        }
524
        private void btnSendWPList_Click(object sender, RoutedEventArgs e)
502
        private void btnSendWPList_Click(object sender, RoutedEventArgs e)
525
        {
503
        {
526
 
-
 
-
 
504
            Thread t = new Thread(new ThreadStart(_sendWPList));
-
 
505
            t.Start();
527
        }
506
        }
Line 528... Line 507...
528
 
507
 
529
        private void btnConnectToCopter_Click(object sender, RoutedEventArgs e)
508
        private void btnConnectToCopter_Click(object sender, RoutedEventArgs e)
530
        {
509
        {
Line 1239... Line 1218...
1239
 
1218
 
1240
                            case 'X': //Waypoint data
1219
                            case 'X': //Waypoint data
1241
                                _processWPData(data);
1220
                                _processWPData(data);
Line -... Line 1221...
-
 
1221
                                break;
-
 
1222
 
-
 
1223
                            case 'W': //return new Waypoint items count after sending waypoint to copter
1242
                                break;
1224
                                _iWPCount = data[0];
1243
 
1225
                                break;
1244
                                //default:
1226
                                //default:
1245
                                //    Log(LogMsgType.Incoming, "cmd: " + cmdID.ToString());
1227
                                //    Log(LogMsgType.Incoming, "cmd: " + cmdID.ToString());
1246
                                //    Log(LogMsgType.Incoming, BitConverter.ToString(data));
1228
                                //    Log(LogMsgType.Incoming, BitConverter.ToString(data));
Line 1776... Line 1758...
1776
        /// called by index
1758
        /// called by index
1777
        /// </summary>
1759
        /// </summary>
1778
        /// <param name="data">the received byte array to process</param>
1760
        /// <param name="data">the received byte array to process</param>
1779
        void _processWPData(byte[] data)
1761
        void _processWPData(byte[] data)
1780
        {
1762
        {
1781
            _iWP = data[0];
1763
            _iWPCount = data[0];
1782
            _bGetWPCount = false;
1764
            _bGetWPCount = false;
1783
            if (data.Length >= 28)
1765
            if (data.Length >= 28)
1784
            {
1766
            {
1785
                //int count = data[0];
-
 
1786
                //int index = data[1];
-
 
1787
                //cbWPIndex.Invoke((Action)(() => cbWPIndex.Items.Clear()));
-
 
1788
                //for (int i = 0; i < count; i++)
-
 
1789
                //    cbWPIndex.Invoke((Action)(() => cbWPIndex.Items.Add(i + 1)));
-
 
1790
                //cbWPIndex.Invoke((Action)(() => cbWPIndex.SelectedItem = index));
-
 
1791
                Dispatcher.Invoke(() => lblWPIndex.Content = data[1].ToString());
1767
                Dispatcher.Invoke(() => lblWPIndex.Content = data[1].ToString());
1792
                Dispatcher.Invoke(() => lblWPCount.Content = data[0].ToString());
1768
                Dispatcher.Invoke(() => lblWPCount.Content = data[0].ToString());
1793
                if (_bGetWP)
1769
                if (_bGetWP)
1794
                {
1770
                {
1795
                    if (data[1] == 1)
1771
                    if (data[1] == 1)
1796
                        dtWaypoints.Rows.Clear();
1772
                        dtWaypoints.Rows.Clear();
1797
                    DataRow dr = dtWaypoints.NewRow();
1773
                    DataRow dr = dtWaypoints.NewRow();
1798
                    dr = Waypoints.toDataRow(data, dr);
1774
                    dr = Waypoints.toDataRow(data, dr);
1799
                    //if (dtWaypoints.Rows.Contains(data[1]))
1775
                    dtWaypoints.Rows.Add(dr);
1800
                    //{
-
 
1801
                    //    dtWaypoints.Rows.Find(data[1]).Delete();
1776
                    Dispatcher.Invoke(() => dgvWP.Items.Refresh());
1802
                    //    dtWaypoints.Rows.InsertAt(dr, data[1] - 1);
1777
                    Dispatcher.Invoke(() => _iWPIndex = data[1]);
1803
                    //}
-
 
1804
                    //else
-
 
1805
                        dtWaypoints.Rows.Add(dr);
-
 
1806
 
-
 
1807
                    if (data[1] == data[0])
1778
                    if (data[1] == data[0])
1808
                    {
1779
                    {
1809
                        _bGetWP = false;
1780
                        _bGetWP = false;
1810
                        Dispatcher.Invoke(() => dgvWP.Items.Refresh());
1781
                        Dispatcher.Invoke(() => dgvWP.Items.Refresh());
1811
                    }
1782
                    }
Line 1814... Line 1785...
1814
            }
1785
            }
1815
            else
1786
            else
1816
            {
1787
            {
1817
                Dispatcher.Invoke(() => lblWPIndex.Content = 0);
1788
                Dispatcher.Invoke(() => lblWPIndex.Content = 0);
1818
                Dispatcher.Invoke(() => lblWPCount.Content = 0);
1789
                Dispatcher.Invoke(() => lblWPCount.Content = 0);
1819
               // Debug.Print(new string(ASCIIEncoding.ASCII.GetChars(data, 0, data.Length)));
-
 
1820
            }
1790
            }
1821
        }
1791
        }
1822
        /// <summary>
1792
        /// <summary>
1823
        /// OSD Menue 'L'
1793
        /// OSD Menue 'L'
1824
        /// single page called by pagenumber
1794
        /// single page called by pagenumber
Line 2045... Line 2015...
2045
            //    {
2015
            //    {
2046
            _bGetWPCount = true;
2016
            _bGetWPCount = true;
2047
            _getpWP(1);
2017
            _getpWP(1);
2048
            while (_bGetWPCount)
2018
            while (_bGetWPCount)
2049
                Thread.Sleep(100);
2019
                Thread.Sleep(100);
2050
            if (_iWP > 0)
2020
            if (_iWPCount > 0)
2051
                _getWPList();
2021
                _getWPList();
2052
            //    }
2022
            //    }
2053
            //}
2023
            //}
2054
        }
2024
        }
2055
        void _getWPList()
2025
        void _getWPList()
2056
        {
2026
        {
2057
            _bGetWP = true;
2027
            _bGetWP = true;
-
 
2028
            int iTimeout=0;
2058
            for (int j = 0; j < _iWP; j++)
2029
            for (int j = 0; j < _iWPCount; j++)
2059
            {
2030
            {
2060
                _getpWP(j + 1);
2031
                _getpWP(j + 1);
-
 
2032
                iTimeout = 0;
-
 
2033
                while (_iWPIndex != j + 1 & iTimeout < _iWPTimeout * 5)
-
 
2034
                {
2061
                Thread.Sleep(10);
2035
                    Thread.Sleep(1);
-
 
2036
                    iTimeout++;
-
 
2037
                }
2062
            }
2038
            }
2063
        }
2039
        }
-
 
2040
        void _sendWPList()
-
 
2041
        {
-
 
2042
            if (serialPortCtrl.Port.IsOpen)
-
 
2043
            {
-
 
2044
                byte[] bData = new byte[30];
-
 
2045
                for (int i = 0; i < 30; i++)
-
 
2046
                    bData[i] = 0;
-
 
2047
                Stream serialStream = serialPortCtrl.Port.BaseStream;
-
 
2048
                byte[] bytes = FlightControllerMessage.CreateMessage('w', 2, bData); //delete all WP on Copter by sending 'invalid'(==0) at index 0
-
 
2049
                serialStream.Write(bytes, 0, bytes.Length);
Line -... Line 2050...
-
 
2050
 
-
 
2051
                _iWPCount = -1;
-
 
2052
                while (_iWPCount == -1)
-
 
2053
                    Thread.Sleep(10);
-
 
2054
                Dispatcher.Invoke(() => lblWPCount.Content = _iWPCount.ToString());
-
 
2055
 
-
 
2056
                int iVal;
-
 
2057
                double dVal;
-
 
2058
                NumberFormatInfo nfi = new NumberFormatInfo();
-
 
2059
                nfi.NumberDecimalSeparator = ",";
-
 
2060
                for (int i = 0; i < dtWaypoints.Rows.Count; i++)
-
 
2061
                {
-
 
2062
                    //longitude
-
 
2063
                    dVal = Convert.ToDouble(dtWaypoints.Rows[i][4], nfi);
-
 
2064
                    iVal = (int)(dVal * Math.Pow(10, 7));
-
 
2065
                    bData[0] = (byte)(iVal & 0xff);
-
 
2066
                    bData[1] = (byte)((iVal >> 8) & 0xff);
-
 
2067
                    bData[2] = (byte)((iVal >> 16) & 0xff);
-
 
2068
                    bData[3] = (byte)(iVal >> 24);
-
 
2069
                    //latitude
-
 
2070
                    dVal = Convert.ToDouble(dtWaypoints.Rows[i][3], nfi);
-
 
2071
                    iVal = (int)(dVal * Math.Pow(10, 7));
-
 
2072
                    bData[4] = (byte)(iVal & 0xff);
-
 
2073
                    bData[5] = (byte)((iVal >> 8) & 0xff);
-
 
2074
                    bData[6] = (byte)((iVal >> 16) & 0xff);
-
 
2075
                    bData[7] = (byte)(iVal >> 24);
-
 
2076
                    //altitude
-
 
2077
                    dVal = Convert.ToDouble(dtWaypoints.Rows[i][5], nfi);
-
 
2078
                    iVal = (int)(dVal * 10);
-
 
2079
                    bData[8] = (byte)(iVal & 0xff);
-
 
2080
                    bData[9] = (byte)((iVal >> 8) & 0xff);
-
 
2081
                    bData[10] = (byte)((iVal >> 16) & 0xff);
-
 
2082
                    bData[11] = (byte)(iVal >> 24);
-
 
2083
                    //Status 'NEWDATA'
-
 
2084
                    bData[12] = 1;
-
 
2085
                    //heading
-
 
2086
                    iVal = Convert.ToInt16(dtWaypoints.Rows[i][6]);
-
 
2087
                    bData[13] = (byte)(iVal & 0xff);
-
 
2088
                    bData[14] = (byte)((iVal >> 8) & 0xff);
-
 
2089
                    //ToleranceRadius
-
 
2090
                    bData[15] = Convert.ToByte(dtWaypoints.Rows[i][9]);
-
 
2091
                    //HoldTime
-
 
2092
                    bData[16] = Convert.ToByte(dtWaypoints.Rows[i][10]);
-
 
2093
                    //Event_Flag
-
 
2094
                    bData[17] = Convert.ToByte(dtWaypoints.Rows[i][13]);
-
 
2095
                    //Index
-
 
2096
                    bData[18] = Convert.ToByte((int)dtWaypoints.Rows[i][0]);
-
 
2097
                    //Type
-
 
2098
                    bData[19] = Convert.ToByte(dtWaypoints.Rows[i][1]);
-
 
2099
                    //WP_EventChannelValue
-
 
2100
                    bData[20] = Convert.ToByte(dtWaypoints.Rows[i][14]);
-
 
2101
                    //AltitudeRate
-
 
2102
                    bData[21] = Convert.ToByte(dtWaypoints.Rows[i][8]);
-
 
2103
                    //Speed
-
 
2104
                    bData[22] = Convert.ToByte(dtWaypoints.Rows[i][7]);
-
 
2105
                    //CamAngle
-
 
2106
                    bData[23] = (byte)Convert.ToInt16(dtWaypoints.Rows[i][12]);
-
 
2107
                    //Name
-
 
2108
                    byte[] name = ASCIIEncoding.ASCII.GetBytes((string)dtWaypoints.Rows[i][2]);
-
 
2109
                    bData[24] = name.Length > 0 ? name[0] : (byte)0;
-
 
2110
                    bData[25] = name.Length > 1 ? name[1] : (byte)0;
-
 
2111
                    bData[26] = name.Length > 2 ? name[2] : (byte)0;
-
 
2112
                    bData[27] = name.Length > 3 ? name[3] : (byte)0;
-
 
2113
                    //Autotrigger
-
 
2114
                    bData[28] = Convert.ToByte(dtWaypoints.Rows[i][11]);
-
 
2115
 
-
 
2116
                    bytes = FlightControllerMessage.CreateMessage('w', 2, bData);
-
 
2117
                    serialStream.Write(bytes, 0, bytes.Length);
-
 
2118
 
-
 
2119
                    _iWPCount = -1;
-
 
2120
                    while (_iWPCount == -1)
-
 
2121
                        Thread.Sleep(10);
-
 
2122
                    Dispatcher.Invoke(() => lblWPCount.Content = _iWPCount.ToString());
-
 
2123
                }
-
 
2124
            }
-
 
2125
            else
-
 
2126
                Log(LogMsgType.Error, "NOT CONNECTED!");
-
 
2127
 
Line 2064... Line 2128...
2064
 
2128
        }
Line 2065... Line 2129...
2065
 
2129
 
2066
        #region OSD-Menue
2130
        #region OSD-Menue
Line 2522... Line 2586...
2522
                            else
2586
                            else
2523
                            {
2587
                            {
2524
                                int wpnum = Convert.ToInt16(sVal);
2588
                                int wpnum = Convert.ToInt16(sVal);
2525
                                string wp;
2589
                                string wp;
2526
                                int i;
2590
                                int i;
-
 
2591
                                NumberFormatInfo nfi = new NumberFormatInfo();
-
 
2592
                                nfi.NumberDecimalSeparator = ".";
2527
                                dtWaypoints.Rows.Clear();
2593
                                dtWaypoints.Rows.Clear();
2528
                                for (int k = 1; k <= wpnum; k++)
2594
                                for (int k = 1; k <= wpnum; k++)
2529
                                {
2595
                                {
2530
                                    DataRow dr = dtWaypoints.NewRow();
2596
                                    DataRow dr = dtWaypoints.NewRow();
2531
                                    dr.ItemArray = new object[16];
2597
                                    dr.ItemArray = new object[16];
Line 2534... Line 2600...
2534
                                    wp = "Point" + k.ToString();
2600
                                    wp = "Point" + k.ToString();
2535
                                    o[i] = k;
2601
                                    o[i] = k;
2536
                                    i++;
2602
                                    i++;
2537
                                    sVal = ini.IniReadValue(wp, "Type");
2603
                                    sVal = ini.IniReadValue(wp, "Type");
2538
                                    if (sVal != "")
2604
                                    if (sVal != "")
2539
                                        o[i] = ((Waypoints.pointType)(Convert.ToInt16(sVal) - 1)).ToString();
2605
                                        o[i] = Convert.ToInt16(sVal) -1;
2540
                                    i++;
2606
                                    i++;
2541
                                    sVal = ini.IniReadValue(wp, "Prefix");
2607
                                    sVal = ini.IniReadValue(wp, "Prefix");
2542
                                    if (sVal != "")
2608
                                    if (sVal != "")
2543
                                        o[i] = sVal == "0" ? "P" + k.ToString() : sVal + k.ToString();
2609
                                        o[i] = sVal == "0" ? "P" + k.ToString() : sVal + k.ToString();
2544
                                    i++;
2610
                                    i++;
2545
                                    sVal = ini.IniReadValue(wp, "Longitude");
2611
                                    sVal = ini.IniReadValue(wp, "Latitude");
2546
                                    if (sVal != "")
2612
                                    if (sVal != "")
2547
                                        o[i] = Convert.ToDouble(sVal);
2613
                                        o[i] = Convert.ToDouble(sVal, nfi);
2548
                                    i++;
2614
                                    i++;
2549
                                    sVal = ini.IniReadValue(wp, "Latitude");
2615
                                    sVal = ini.IniReadValue(wp, "Longitude");
2550
                                    if (sVal != "")
2616
                                    if (sVal != "")
2551
                                        o[i] = Convert.ToDouble(sVal);
2617
                                        o[i] = Convert.ToDouble(sVal, nfi);
2552
                                    i++;
2618
                                    i++;
2553
                                    sVal = ini.IniReadValue(wp, "Altitude");
2619
                                    sVal = ini.IniReadValue(wp, "Altitude");
2554
                                    if (sVal != "")
2620
                                    if (sVal != "")
2555
                                        o[i] = Convert.ToInt16(sVal);
2621
                                        o[i] = Convert.ToDouble(sVal, nfi);
2556
                                    i++;
2622
                                    i++;
2557
                                    sVal = ini.IniReadValue(wp, "Heading");
2623
                                    sVal = ini.IniReadValue(wp, "Heading");
2558
                                    if (sVal != "")
2624
                                    if (sVal != "")
2559
                                        o[i] = Convert.ToInt16(sVal);
2625
                                        o[i] = Convert.ToInt16(sVal);
2560
                                    i++;
2626
                                    i++;
2561
                                    sVal = ini.IniReadValue(wp, "Speed");
2627
                                    sVal = ini.IniReadValue(wp, "Speed");
2562
                                    if (sVal != "")
2628
                                    if (sVal != "")
2563
                                        o[i] = Waypoints.WPSpeed(Convert.ToInt16(sVal));
2629
                                        o[i] =Convert.ToInt16(sVal);
2564
                                    i++;
2630
                                    i++;
2565
                                    sVal = ini.IniReadValue(wp, "ClimbRate");
2631
                                    sVal = ini.IniReadValue(wp, "ClimbRate");
2566
                                    if (sVal != "")
2632
                                    if (sVal != "")
2567
                                        o[i] = Convert.ToInt16(sVal);
2633
                                        o[i] = Convert.ToInt16(sVal);
2568
                                    i++;
2634
                                    i++;
Line 2578... Line 2644...
2578
                                    if (sVal != "")
2644
                                    if (sVal != "")
2579
                                        o[i] = Convert.ToInt16(sVal); ;
2645
                                        o[i] = Convert.ToInt16(sVal); ;
2580
                                    i++;
2646
                                    i++;
2581
                                    sVal = ini.IniReadValue(wp, "CAM-Nick");
2647
                                    sVal = ini.IniReadValue(wp, "CAM-Nick");
2582
                                    if (sVal != "")
2648
                                    if (sVal != "")
2583
                                        o[i] = Waypoints.CAMAngle(Convert.ToInt16(sVal));
2649
                                        o[i] = Convert.ToInt16(sVal);
2584
                                    i++;
2650
                                    i++;
2585
                                    o[i] = 0;
2651
                                    o[i] = 0;
2586
                                    i++;
2652
                                    i++;
2587
                                    sVal = ini.IniReadValue(wp, "WP_Event_Channel_Value");
2653
                                    sVal = ini.IniReadValue(wp, "WP_Event_Channel_Value");
2588
                                    if (sVal != "")
2654
                                    if (sVal != "")
2589
                                        o[i] = Convert.ToInt16(sVal);
2655
                                        o[i] = Convert.ToInt16(sVal);
2590
                                    i++;
2656
                                    i++;
2591
                                    o[i] = "New";
2657
                                    o[i] = "New";
Line 2592... Line 2658...
2592
 
2658
 
-
 
2659
                                    dr.ItemArray = o;
2593
                                    dr.ItemArray = o;
2660
                                  //  dtWaypoints.Rows.Add(dr);
2594
                                    dtWaypoints.Rows.Add(dr);
2661
                                    dtWaypoints.Rows.Add(dr);
2595
                                    Dispatcher.Invoke(() => lblWPIndex.Content = k.ToString());
2662
                                    Dispatcher.Invoke(() => lblWPIndex.Content = k.ToString());
2596
                                    Dispatcher.Invoke(() => lblWPCount.Content = k.ToString());
2663
                                    Dispatcher.Invoke(() => lblWPCount.Content = k.ToString());
2597
                                    Dispatcher.Invoke(() => dgvWP.Items.Refresh());
2664
                                    Dispatcher.Invoke(() => dgvWP.Items.Refresh());
Line 2629... Line 2696...
2629
        {
2696
        {
2630
            throw new NotImplementedException();
2697
            throw new NotImplementedException();
2631
        }
2698
        }
2632
    }
2699
    }
Line -... Line 2700...
-
 
2700
 
-
 
2701
    public class waypointsConverter : IValueConverter
-
 
2702
    {
-
 
2703
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
-
 
2704
        {
-
 
2705
            if (value != null)
-
 
2706
            {
-
 
2707
                switch ((string)parameter)
-
 
2708
                {
-
 
2709
                    case "Latitude":
-
 
2710
                        return value.ToString() + " °";
-
 
2711
                    case "Longitude":
-
 
2712
                        return value.ToString() + " °";
-
 
2713
                    case "Radius":
-
 
2714
                        return value.ToString() + " m";
-
 
2715
                    case "Altitude":
-
 
2716
                        return value.ToString() + " m";
-
 
2717
                    case "ClimbRate":
-
 
2718
                        return value.ToString() == "255" ? "Auto" : (System.Convert.ToDouble(value) / 10).ToString("0.0 m/s");
-
 
2719
                    case "DelayTime":
-
 
2720
                        return value.ToString() + " s";
-
 
2721
                    case "Heading":
-
 
2722
                        return Waypoints.Heading(System.Convert.ToInt32(value));
-
 
2723
                    case "Speed":
-
 
2724
                        return Waypoints.WPSpeed(System.Convert.ToInt16(value));
-
 
2725
                    case "CamAngle":
-
 
2726
                        return Waypoints.CAMAngle(System.Convert.ToInt16(value));
-
 
2727
                    case "Type":
-
 
2728
                        return ((Waypoints.pointType)(System.Convert.ToInt16(value))).ToString();
-
 
2729
                    case "AutoTrigger":
-
 
2730
                        return value.ToString() == "0" ? "- - -" : value.ToString() + " m";
-
 
2731
                    case "Status":
-
 
2732
                        return Waypoints.WPSpeed(System.Convert.ToInt16(value));
-
 
2733
                }
-
 
2734
 
-
 
2735
                return value.ToString();
-
 
2736
            }
-
 
2737
            else return value;
-
 
2738
        }
-
 
2739
 
-
 
2740
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
-
 
2741
        {
-
 
2742
            throw new NotImplementedException();
-
 
2743
        }
-
 
2744
    }
2633
 
2745
 
2634
    public class IniFile
2746
    public class IniFile
2635
    {
2747
    {
Line 2636... Line 2748...
2636
        public string path;
2748
        public string path;