Subversion Repositories Projects

Rev

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

Rev 246 Rev 250
Line 15... Line 15...
15
 *   along with this program; if not, write to the                         *
15
 *   along with this program; if not, write to the                         *
16
 *   Free Software Foundation, Inc.,                                       *
16
 *   Free Software Foundation, Inc.,                                       *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
18
 ***************************************************************************/
18
 ***************************************************************************/
Line -... Line 19...
-
 
19
 
-
 
20
// TODO: Wiederholungssenden wieder einbauen
19
 
21
 
Line 20... Line 22...
20
#include <QtGui>
22
#include <QtGui>
21
 
23
 
22
#include <QLineEdit>
24
#include <QLineEdit>
Line 58... Line 60...
58
 
60
 
59
    // Tab mit Debug-Elementen verbergen
61
    // Tab mit Debug-Elementen verbergen
Line 60... Line 62...
60
     tab_Main->removeTab(6);
62
     tab_Main->removeTab(6);
61
 
63
 
Line 62... Line 64...
62
    // Tab mit Wegpunkte-Elementen verbergen
64
    // Tab mit Wegpunkte-Elementen verbergen
63
    tab_Main->removeTab(5);
65
//    tab_Main->removeTab(5);
64
 
66
 
65
    // Settings-Tab hinzufügen.
67
    // Settings-Tab hinzufügen.
Line 97... Line 99...
97
 
99
 
98
    Compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel);
100
    Compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel);
99
    Compass->setScaleTicks(0, 0, 3);
101
    Compass->setScaleTicks(0, 0, 3);
Line 100... Line -...
100
    Compass->setScale(36, 5, 0);
-
 
101
 
102
    Compass->setScale(36, 5, 0);
102
//    Compass->setNeedle(new QwtCompassMagnetNeedle(QwtCompassMagnetNeedle::ThinStyle));
103
 
103
    Compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, true, Qt::red, QColor(Qt::gray).light(130)));
104
    Compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, true, Qt::red, QColor(Qt::gray).light(130)));
104
    Compass->setPalette(newPalette);
105
    Compass->setPalette(newPalette);
Line 194... Line 195...
194
{
195
{
195
    // QTimer-Instanzen
196
    // QTimer-Instanzen
196
    Ticker = new QTimer(this);
197
    Ticker = new QTimer(this);
Line 197... Line 198...
197
 
198
 
198
    // Seriell-Port
199
    // Seriell-Port
-
 
200
//    serialPort = new ManageSerialPort;
-
 
201
 
Line 199... Line 202...
199
    serialPort = new ManageSerialPort;
202
    Conn = new cConnection();
200
 
203
 
Line 201... Line 204...
201
    // neuer Logger
204
    // neuer Logger
202
    logger = new Logger(Settings, &Mode);
205
    logger = new Logger(Settings, &Mode);
Line 203... Line 206...
203
 
206
 
204
    // LCD-Dialog
207
    // LCD-Dialog
Line 205... Line 208...
205
    f_LCD = new dlg_LCD(this);
208
    f_LCD = new dlg_LCD(this);
Line 206... Line 209...
206
 
209
 
207
    // Senden erlauben (Warum auch immer)
210
    // Senden erlauben (Warum auch immer)
Line 220... Line 223...
220
    }
223
    }
221
}
224
}
Line 222... Line 225...
222
 
225
 
223
void MKTool::init_Connections()
226
void MKTool::init_Connections()
224
{
227
{
Line 225... Line 228...
225
    connect(Dec,   SIGNAL(clicked()), this, SLOT(slot_Test()));
228
    connect(Dec, SIGNAL(clicked()), this, SLOT(slot_Test()));
226
 
229
 
-
 
230
    // Daten Senden / Empfangen
Line 227... Line 231...
227
    // Seriel-Port Empfang
231
    connect(Conn, SIGNAL(newData(sRxData)), this, SLOT(slot_newData(sRxData)));
228
    connect(serialPort, SIGNAL(newDataReceived(const QByteArray &)), this, SLOT(slot_newDataReceived(const QByteArray &)));
232
    connect(Conn, SIGNAL(showTerminal(int, QString)), this, SLOT(slot_showTerminal(int, QString)));
Line 229... Line 233...
229
 
233
 
Line 272... Line 276...
272
 
276
 
273
    // firmeware Updateen / flashen
277
    // firmeware Updateen / flashen
274
    connect(pb_Update,   SIGNAL(clicked()), this, SLOT(slot_pb_Update()));
278
    connect(pb_Update,   SIGNAL(clicked()), this, SLOT(slot_pb_Update()));
Line -... Line 279...
-
 
279
    connect(pb_HexFile,  SIGNAL(clicked()), this, SLOT(slot_pb_HexFile()));
-
 
280
 
-
 
281
    // Wegpunkt-Befehl
275
    connect(pb_HexFile,  SIGNAL(clicked()), this, SLOT(slot_pb_HexFile()));
282
    connect(pb_FlyTo,        SIGNAL(clicked()), this, SLOT(slot_pb_SendWaypoint()));
276
 
283
 
Line 277... Line 284...
277
    // CVS-Record starten / stoppen
284
    // CVS-Record starten / stoppen
278
    connect(ac_RecordCSV,  SIGNAL(triggered()), this, SLOT(slot_RecordLog()));
285
    connect(ac_RecordCSV,  SIGNAL(triggered()), this, SLOT(slot_RecordLog()));
Line 342... Line 349...
342
 
349
 
343
    for (int a = 0; a < MaxAnalog; a++)
350
    for (int a = 0; a < MaxAnalog; a++)
344
    {
351
    {
345
        Plot[a] = new QwtPlotCurve(Settings->Analog1.Label[a]);
352
        Plot[a] = new QwtPlotCurve(Settings->Analog1.Label[a]);
346
        Plot[a]->setPen(QPen(QColor(Def_Colors[a])));
353
        Plot[a]->setPen(QPen(QColor(Def_Colors[a])));
Line 347... Line 354...
347
        Plot[a]->setRenderHint(QwtPlotItem::RenderAntialiased);
354
//        Plot[a]->setRenderHint(QwtPlotItem::RenderAntialiased);
348
 
355
 
349
        if (Settings->Analog1.PlotView[a])
356
        if (Settings->Analog1.PlotView[a])
350
            Plot[a]->attach(qwtPlot);
357
            Plot[a]->attach(qwtPlot);
351
    }
358
    }
Line 352... Line -...
352
    qwtPlot->replot();
-
 
353
}
359
    qwtPlot->replot();
354
 
360
}
355
 
361
 
356
void MKTool::slot_Test()
-
 
Line 357... Line 362...
357
{
362
void MKTool::slot_Test()
-
 
363
{
358
/*
364
}
-
 
365
 
Line -... Line 366...
-
 
366
void MKTool::parse_TargetKML()
-
 
367
{
-
 
368
    QString Tmp = te_KML->toPlainText().simplified();
-
 
369
    QStringList List;
-
 
370
 
-
 
371
    if ((Tmp.contains("<kml xmlns=\"http://earth.google.com/kml/2.2\">"))  && (Tmp.contains("<coordinates>")))
-
 
372
    {
-
 
373
        List = Tmp.split("<coordinates>");
-
 
374
        List = List[1].split(",");
-
 
375
 
-
 
376
        le_TarLong->setText(ToolBox::get_Float((List[0].toDouble() * 10000000), 10000000));
-
 
377
        le_TarLat->setText(ToolBox::get_Float((List[1].toDouble() * 10000000), 10000000));
-
 
378
    }
-
 
379
}
-
 
380
 
-
 
381
void MKTool::slot_pb_SendWaypoint()
-
 
382
{
359
    sRxData RX;
383
    if ((Navi.Current.Longitude == 0) && (Navi.Current.Latitude == 0))
-
 
384
    {
-
 
385
        QMessageBox msgB;
-
 
386
        QString msg;
-
 
387
        msgB.setText("Fehler: Es konnten keine GPS-Daten vom Mikrokopter empfangen werden");
-
 
388
        msgB.exec();
-
 
389
        return;
-
 
390
    }
-
 
391
    //erstelle einen Wegpunkt, den die NaviCtrl auswerten kann
-
 
392
 
-
 
393
    Waypoint_t desired_pos;
-
 
394
    bool ok_lat, ok_lon;
-
 
395
 
-
 
396
    //eingegebene Daten holen
-
 
397
    double desired_long, desired_lat;
-
 
398
 
-
 
399
    desired_long = le_TarLong->text().toDouble(&ok_lon);
-
 
400
    desired_lat  = le_TarLat->text().toDouble(&ok_lat);
-
 
401
 
-
 
402
    if (ok_lon && desired_long < 100)
-
 
403
        desired_long *= 10000000+0.5;
-
 
404
 
-
 
405
    if (ok_lat && desired_lat < 100)
-
 
406
        desired_lat *= 10000000+0.5;
-
 
407
 
-
 
408
    //fülle Wegpunkt-Daten
-
 
409
    desired_pos.Position.Altitude = 0;
-
 
410
    desired_pos.Position.Longitude = int32_t(desired_long);
-
 
411
    desired_pos.Position.Latitude =  int32_t(desired_lat);
-
 
412
    desired_pos.Position.Status = NEWDATA;
-
 
413
    desired_pos.Heading = -1;
-
 
414
    desired_pos.ToleranceRadius = 1;
-
 
415
    desired_pos.HoldTime = 60;
360
 
416
    desired_pos.Event_Flag = 0;
-
 
417
    desired_pos.reserve[0] = 0; // reserve
-
 
418
    desired_pos.reserve[1] = 0; // reserve
-
 
419
    desired_pos.reserve[2] = 0; // reserve
-
 
420
    desired_pos.reserve[3] = 0; // reserve
-
 
421
 
-
 
422
    //...und sende ihn an die NaviCtrl
-
 
423
    int max_radius = 10000;
-
 
424
    if (ok_lat && ok_lon &&
-
 
425
        abs(Navi.Current.Longitude - desired_pos.Position.Longitude) < max_radius &&
-
 
426
        abs(Navi.Current.Latitude  - desired_pos.Position.Latitude) < max_radius)
-
 
427
    {
-
 
428
            Conn->send_Cmd('s', ADDRESS_NC, (char *)&desired_pos, sizeof(desired_pos), false);
-
 
429
    }
-
 
430
    else
-
 
431
    {
-
 
432
        QMessageBox msgB;
-
 
433
        QString msg;
-
 
434
        msg += "Bitte die Eingabe ueberpruefen!\n";
-
 
435
        msg += "Die Werte muessen sich in der Naehe der aktuellen Koordinaten befinden\n";
-
 
436
        msg += "(Lon: ";
-
 
437
        msg += ToolBox::get_Float(Navi.Current.Longitude,10000000);
-
 
438
        msg += ", ";
-
 
439
        msg += "Lat: ";
361
    RX.String = IN->text();
440
        msg += ToolBox::get_Float(Navi.Current.Latitude,10000000);
Line 362... Line 441...
362
    RX.Input  = IN->text().toLatin1().data();
441
        msg += ")";
363
 
442
        msgB.setText(msg);
364
    new_RXData(RX);
443
        msgB.exec();
Line 386... Line 465...
386
        TX_Data[1] = 0x1B;
465
        TX_Data[1] = 0x1B;
387
        TX_Data[2] = 0x55;
466
        TX_Data[2] = 0x55;
388
        TX_Data[3] = 0xAA;
467
        TX_Data[3] = 0xAA;
389
        TX_Data[4] = 0x00;
468
        TX_Data[4] = 0x00;
390
        TX_Data[5] = '\r';
469
        TX_Data[5] = '\r';
391
        send_Data('#', ADDRESS_NC, TX_Data, 6, false);
470
        Conn->send_Cmd('#', ADDRESS_NC, TX_Data, 6, false);
392
        ToolBox::Wait(SLEEP);
471
        ToolBox::Wait(SLEEP);
393
    }
472
    }
Line 394... Line 473...
394
 
473
 
395
    if (rb_SelFC->isChecked())
474
    if (rb_SelFC->isChecked())
396
    {
475
    {
397
        lb_Status->setText(tr("Schalte um auf FlightCtrl."));
476
        lb_Status->setText(tr("Schalte um auf FlightCtrl."));
398
        TX_Data[0] = 0;
477
        TX_Data[0] = 0;
399
        send_Data('u', ADDRESS_NC, TX_Data, 1, false);
478
        Conn->send_Cmd('u', ADDRESS_NC, TX_Data, 1, false);
400
    }
479
    }
401
    else
480
    else
402
    if (rb_SelMag->isChecked())
481
    if (rb_SelMag->isChecked())
403
    {
482
    {
404
        lb_Status->setText(tr("Schalte um auf MK3MAG."));
483
        lb_Status->setText(tr("Schalte um auf MK3MAG."));
405
        TX_Data[0] = 1;
484
        TX_Data[0] = 1;
406
        send_Data('u', ADDRESS_NC, TX_Data, 1, false);
485
        Conn->send_Cmd('u', ADDRESS_NC, TX_Data, 1, false);
407
    }
486
    }
408
    else
487
    else
409
    if (rb_SelNC->isChecked())
488
    if (rb_SelNC->isChecked())
410
    {
489
    {
Line 413... Line 492...
413
        TX_Data[1] = 0x1B;
492
        TX_Data[1] = 0x1B;
414
        TX_Data[2] = 0x55;
493
        TX_Data[2] = 0x55;
415
        TX_Data[3] = 0xAA;
494
        TX_Data[3] = 0xAA;
416
        TX_Data[4] = 0x00;
495
        TX_Data[4] = 0x00;
417
        TX_Data[5] = '\r';
496
        TX_Data[5] = '\r';
418
        send_Data('#', ADDRESS_NC, TX_Data, 6, false);
497
        Conn->send_Cmd('#', ADDRESS_NC, TX_Data, 6, false);
419
    }
498
    }
420
    ToolBox::Wait(SLEEP);
499
    ToolBox::Wait(SLEEP);
Line 421... Line 500...
421
 
500
 
422
//    qDebug("Select RB Hardware");
501
//    qDebug("Select RB Hardware");
423
    send_Data('v', ADDRESS_ALL, TX_Data, 0, true);
502
    Conn->send_Cmd('v', ADDRESS_ALL, TX_Data, 0, true);
Line 424... Line 503...
424
}
503
}
425
 
504
 
426
// Ticker-Event
505
// Ticker-Event
Line 430... Line 509...
430
    if (TickerDiv)
509
    if (TickerDiv)
431
        TickerDiv = false;
510
        TickerDiv = false;
432
    else
511
    else
433
        TickerDiv = true;
512
        TickerDiv = true;
Line -... Line 513...
-
 
513
 
-
 
514
    if (cb_ClipBoard->isChecked())
-
 
515
    {
-
 
516
        QString s_OLD = te_KML->toPlainText();
-
 
517
        te_KML->clear();
-
 
518
        te_KML->paste();
-
 
519
        if (s_OLD != te_KML->toPlainText())
-
 
520
        {
-
 
521
            parse_TargetKML();
-
 
522
        }
-
 
523
    }
434
 
524
 
435
    for (int a = 0; a < MaxTickerEvents; a++)
525
    for (int a = 0; a < MaxTickerEvents; a++)
436
    {
526
    {
437
        if (TickerEvent[a] == true)
527
        if (TickerEvent[a] == true)
438
        {
528
        {
439
            switch(a)
529
            switch(a)
440
            {
530
            {
441
                case 0 :
531
                case 0 :
442
                    if (TickerDiv)
532
                    if (TickerDiv)
443
                    {
533
                    {
444
                        QByteArray Temp(LastSend.toUtf8());
534
                        QByteArray Temp(LastSend.toUtf8());
445
                        serialPort->sendData(Temp);
535
//                        serialPort->sendData(Temp);
446
                    }
536
                    }
447
                break;
537
                break;
448
                case 1 :
538
                case 1 :
449
                    TX_Data[0] = 0;
539
                    TX_Data[0] = 0;
450
                    send_Data('p', ADDRESS_FC, TX_Data, 0, false);
540
                    Conn->send_Cmd('p', ADDRESS_FC, TX_Data, 0, false);
451
                break;
541
                break;
452
                case 2 :
542
                case 2 :
453
                    if (f_LCD->cb_LCD->isChecked())
543
                    if (f_LCD->cb_LCD->isChecked())
454
                    {
544
                    {
Line 457... Line 547...
457
                            Ticker->setInterval(2000);
547
                            Ticker->setInterval(2000);
458
                            TickerEvent[2] = false;
548
                            TickerEvent[2] = false;
459
                        }
549
                        }
460
                        TX_Data[0] = LCD_Page;
550
                        TX_Data[0] = LCD_Page;
461
                        TX_Data[1] = 0;
551
                        TX_Data[1] = 0;
462
                        send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
552
                        Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true);
463
                    }
553
                    }
464
                break;
554
                break;
465
                case 3 :
555
                case 3 :
466
                    if (ac_FastDebug->isChecked())
556
                    if (ac_FastDebug->isChecked())
467
                    {
557
                    {
468
                        TX_Data[0] = Settings->Data.Debug_Fast / 10;
558
                        TX_Data[0] = Settings->Data.Debug_Fast / 10;
469
                        send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
559
                        Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false);
470
                    }
560
                    }
471
                    else
561
                    else
472
                    {
562
                    {
473
                        TX_Data[0] = Settings->Data.Debug_Slow / 10;
563
                        TX_Data[0] = Settings->Data.Debug_Slow / 10;
474
                        send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
564
                        Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false);
475
                    }
565
                    }
476
                break;
566
                break;
477
            }
567
            }
478
        }
568
        }
479
    }
569
    }
Line 574... Line 664...
574
        connect(f_LCD->pb_LCDdown, SIGNAL(clicked()), this, SLOT(slot_LCD_DOWN()));
664
        connect(f_LCD->pb_LCDdown, SIGNAL(clicked()), this, SLOT(slot_LCD_DOWN()));
Line 575... Line 665...
575
 
665
 
576
        f_LCD->show();
666
        f_LCD->show();
577
        TX_Data[0] = 0;
667
        TX_Data[0] = 0;
578
        TX_Data[1] = 0;
668
        TX_Data[1] = 0;
Line 579... Line 669...
579
        send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
669
        Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true);
580
 
670
 
581
        Ticker->setInterval(500);
671
        Ticker->setInterval(500);
582
        TickerEvent[2] = true;
672
        TickerEvent[2] = true;
Line 587... Line 677...
587
{
677
{
588
    TX_Data[0] = Motor1;
678
    TX_Data[0] = Motor1;
589
    TX_Data[1] = Motor2;
679
    TX_Data[1] = Motor2;
590
    TX_Data[2] = Motor3;
680
    TX_Data[2] = Motor3;
591
    TX_Data[3] = Motor4;
681
    TX_Data[3] = Motor4;
592
    send_Data('t', ADDRESS_FC, TX_Data, 4, false);
682
    Conn->send_Cmd('t', ADDRESS_FC, TX_Data, 4, false);
593
}
683
}
Line 594... Line 684...
594
 
684
 
595
void MKTool::slot_ac_Config()
685
void MKTool::slot_ac_Config()
596
{
686
{
Line 735... Line 825...
735
        else
825
        else
736
        {
826
        {
737
            lb_Status->setText(tr("Fordere langsame NaviDaten an."));
827
            lb_Status->setText(tr("Fordere langsame NaviDaten an."));
738
            TX_Data[0] = Settings->Data.Navi_Slow / 10;
828
            TX_Data[0] = Settings->Data.Navi_Slow / 10;
739
        }
829
        }
740
        send_Data('o', ADDRESS_NC, TX_Data, 1, false);
830
        Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false);
741
    }
831
    }
742
}
832
}
Line 743... Line 833...
743
 
833
 
744
void MKTool::slot_ac_NoNavi() // DONE NC 0.12i
834
void MKTool::slot_ac_NoNavi() // DONE NC 0.12i
Line 759... Line 849...
759
        {
849
        {
760
            lb_Status->setText(tr("Fordere langsame NaviDaten an."));
850
            lb_Status->setText(tr("Fordere langsame NaviDaten an."));
761
            TX_Data[0] = Settings->Data.Navi_Slow / 10;
851
            TX_Data[0] = Settings->Data.Navi_Slow / 10;
762
        }
852
        }
763
    }
853
    }
764
    send_Data('o', ADDRESS_NC, TX_Data, 1, false);
854
    Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false);
765
}
855
}
Line 766... Line 856...
766
 
856
 
767
void MKTool::slot_ac_FastDebug() // DONE 0.71g
857
void MKTool::slot_ac_FastDebug() // DONE 0.71g
768
{
858
{
Line 776... Line 866...
776
        else
866
        else
777
        {
867
        {
778
            lb_Status->setText(tr("Fordere langsame DebugDaten an."));
868
            lb_Status->setText(tr("Fordere langsame DebugDaten an."));
779
            TX_Data[0] = Settings->Data.Debug_Slow / 10;
869
            TX_Data[0] = Settings->Data.Debug_Slow / 10;
780
        }
870
        }
781
        send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
871
        Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false);
782
    }
872
    }
783
}
873
}
Line 784... Line 874...
784
 
874
 
785
void MKTool::slot_ac_NoDebug() // DONE 0.71g
875
void MKTool::slot_ac_NoDebug() // DONE 0.71g
Line 805... Line 895...
805
        {
895
        {
806
            lb_Status->setText(tr("Fordere langsame DebugDaten an."));
896
            lb_Status->setText(tr("Fordere langsame DebugDaten an."));
807
            TX_Data[0] = Settings->Data.Debug_Slow / 10;
897
            TX_Data[0] = Settings->Data.Debug_Slow / 10;
808
        }
898
        }
809
    }
899
    }
810
    send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
900
    Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false);
811
}
901
}
Line 812... Line 902...
812
 
902
 
813
void MKTool::slot_ac_About()
903
void MKTool::slot_ac_About()
814
{
904
{
Line 817... Line 907...
817
 
907
 
818
void MKTool::slot_ac_GetLabels() // DONE 0.71g
908
void MKTool::slot_ac_GetLabels() // DONE 0.71g
819
{
909
{
820
    lb_Status->setText(tr("Analoglabels auslesen."));
910
    lb_Status->setText(tr("Analoglabels auslesen."));
821
    TX_Data[0] = 0;
911
    TX_Data[0] = 0;
822
    send_Data('a', ADDRESS_ALL, TX_Data, 1, true);
912
    Conn->send_Cmd('a', ADDRESS_ALL, TX_Data, 1, true);
Line 823... Line 913...
823
}
913
}
824
 
914
 
825
void MKTool::slot_ac_StartServer()
915
void MKTool::slot_ac_StartServer()
Line 923... Line 1013...
923
 
1013
 
Line 924... Line 1014...
924
        QStringList Argumente;
1014
        QStringList Argumente;
Line 925... Line 1015...
925
 
1015
 
926
        Update = new QProcess();
1016
        Update = new QProcess();
927
 
1017
 
928
        if (serialPort->isOpen())
1018
        if (Conn->isOpen())
Line 929... Line 1019...
929
        {
1019
        {
Line 983... Line 1073...
983
    if (tab_Main->count() != 0)
1073
    if (tab_Main->count() != 0)
984
    {
1074
    {
985
        if ((tab_Main->currentWidget()->objectName() == QString("Tab_2")) && (f_Settings->tab_Par->currentIndex() == 1))
1075
        if ((tab_Main->currentWidget()->objectName() == QString("Tab_2")) && (f_Settings->tab_Par->currentIndex() == 1))
986
        {
1076
        {
987
            TX_Data[0] = 0;
1077
            TX_Data[0] = 0;
988
            send_Data('p', ADDRESS_FC, TX_Data, 0, true);
1078
            Conn->send_Cmd('p', ADDRESS_FC, TX_Data, 0, true);
Line 989... Line 1079...
989
 
1079
 
990
            Ticker->setInterval(500);
1080
            Ticker->setInterval(500);
991
            TickerEvent[1] = true;
1081
            TickerEvent[1] = true;
992
        }
1082
        }
Line 1021... Line 1111...
1021
        TX_Data[0] = 0;
1111
        TX_Data[0] = 0;
1022
    else
1112
    else
1023
        TX_Data[0] = LCD_Page + 1;
1113
        TX_Data[0] = LCD_Page + 1;
Line 1024... Line 1114...
1024
 
1114
 
1025
    TX_Data[1] = 0;
1115
    TX_Data[1] = 0;
1026
    send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
-
 
1027
 
1116
    Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true);
Line 1028... Line 1117...
1028
}
1117
}
1029
 
1118
 
1030
void MKTool::slot_LCD_DOWN() // DONE 0.71g
1119
void MKTool::slot_LCD_DOWN() // DONE 0.71g
1031
{
1120
{
1032
    if (LCD_Page == 0)
1121
    if (LCD_Page == 0)
1033
        TX_Data[0] = LCD_MAX_Page;
1122
        TX_Data[0] = LCD_MAX_Page;
Line 1034... Line 1123...
1034
    else
1123
    else
1035
        TX_Data[0] = LCD_Page - 1;
1124
        TX_Data[0] = LCD_Page - 1;
1036
 
-
 
1037
    TX_Data[1] = 0;
-
 
1038
    send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
-
 
1039
 
1125
 
Line 1040... Line 1126...
1040
    aa--;
1126
    TX_Data[1] = 0;
1041
 
1127
    Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true);
1042
}
1128
}
1043
 
1129
 
1044
// Settings aus MK lesen / in MK schreiben
1130
// Settings aus MK lesen / in MK schreiben
1045
void MKTool::slot_GetFCSettings() // DONE 0.71g
1131
void MKTool::slot_GetFCSettings() // DONE 0.71g
1046
{
1132
{
1047
    lb_Status->setText(tr("Lese FlightCtrl-Settings aus."));
1133
    lb_Status->setText(tr("Lese FlightCtrl-Settings aus."));
Line 1048... Line 1134...
1048
    TX_Data[0] = f_Settings->sb_Set->value();
1134
    TX_Data[0] = f_Settings->sb_Set->value();
1049
    TX_Data[1] = 0;
1135
    TX_Data[1] = 0;
1050
    send_Data('q', ADDRESS_FC, TX_Data, 1);
1136
    Conn->send_Cmd('q', ADDRESS_FC, TX_Data, 1);
Line 1051... Line 1137...
1051
}
1137
}
Line 1052... Line 1138...
1052
 
1138
 
1053
void MKTool::slot_SetFCSettings() // DONE 0.71g
1139
void MKTool::slot_SetFCSettings() // DONE 0.71g
Line 1054... Line 1140...
1054
{
1140
{
1055
    char *TX_Data2 = f_Settings->GetFCSettings();
1141
    char *TX_Data2 = f_Settings->GetFCSettings();
Line 1228... Line 1314...
1228
 
1314
 
1229
    if ((MyServer->property("Connect")) == true)
1315
    if ((MyServer->property("Connect")) == true)
1230
    {
1316
    {
1231
        MyServer->NewPosition(NaviString);
1317
        MyServer->NewPosition(NaviString);
1232
    }
-
 
1233
 
-
 
1234
    /*
-
 
1235
    qDebug(NaviString.Longitude.toLatin1().data());
-
 
1236
    qDebug(NaviString.Latitude.toLatin1().data());
-
 
1237
    qDebug(NaviString.Altitude.toLatin1().data());
-
 
1238
    */
1318
    }
Line 1239... Line 1319...
1239
}
1319
}
1240
 
1320
 
Line 1241... Line 1321...
1241
// Seriel-Port Bereich, Befehle senden und Daten empfangen
1321
// Seriel-Port Bereich, Befehle senden und Daten empfangen
1242
//////////////////////////////////////////////////////////
1322
//////////////////////////////////////////////////////////
1243
 
1323
 
-
 
1324
// Neues Datenpacket empfangen -> Verarbeiten
Line 1244... Line 1325...
1244
// Neues Datenpacket empfangen -> Verarbeiten
1325
void MKTool::slot_newData(sRxData RX) // DONE 0.71g
1245
void MKTool::new_RXData(sRxData RX) // DONE 0.71g
1326
{
1246
{
1327
    slot_showTerminal(1, RX.String);
Line 1347... Line 1428...
1347
                            {
1428
                            {
1348
                                Settings->Analog1.Label[Position] = "A-" + QString("%1").arg(Position);
1429
                                Settings->Analog1.Label[Position] = "A-" + QString("%1").arg(Position);
1349
                            }
1430
                            }
1350
                            Position ++;
1431
                            Position ++;
1351
                            TX_Data[0] = Position;
1432
                            TX_Data[0] = Position;
1352
                            send_Data('a', ADDRESS_ALL, TX_Data, 1, true);
1433
                            Conn->send_Cmd('a', ADDRESS_ALL, TX_Data, 1, true);
1353
                        }
1434
                        }
1354
                        if (Position == 31)
1435
                        if (Position == 31)
1355
                        {
1436
                        {
1356
                            for (int a = 0; a < MaxAnalog; a++)
1437
                            for (int a = 0; a < MaxAnalog; a++)
1357
                            {
1438
                            {
Line 1411... Line 1492...
1411
                        else
1492
                        else
1412
                        {
1493
                        {
1413
                            TX_Data[0] = Settings->Data.Debug_Slow / 10;
1494
                            TX_Data[0] = Settings->Data.Debug_Slow / 10;
1414
                        }
1495
                        }
Line 1415... Line 1496...
1415
 
1496
 
Line 1416... Line 1497...
1416
                        send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
1497
                        Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false);
1417
 
1498
 
1418
                        // Wenn MK3MAG dann andauernd Daten neu anfragen.
1499
                        // Wenn MK3MAG dann andauernd Daten neu anfragen.
1419
                        if (Mode.ID == ADDRESS_MK3MAG)
1500
                        if (Mode.ID == ADDRESS_MK3MAG)
Line 1439... Line 1520...
1439
                            else
1520
                            else
1440
                            {
1521
                            {
1441
                                TX_Data[0] = Settings->Data.Navi_Slow / 10;
1522
                                TX_Data[0] = Settings->Data.Navi_Slow / 10;
1442
                            }
1523
                            }
Line 1443... Line 1524...
1443
 
1524
 
1444
                            send_Data('o', ADDRESS_NC, TX_Data, 1, false);
1525
                            Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false);
Line 1445... Line 1526...
1445
                        }
1526
                        }
1446
 
1527
 
1447
 
1528
 
1448
                        // Wenn FlightCtrl dann Settings abfragen.
1529
                        // Wenn FlightCtrl dann Settings abfragen.
1449
                        if (Mode.ID == ADDRESS_FC)
1530
                        if (Mode.ID == ADDRESS_FC)
1450
                        {
1531
                        {
1451
                            rb_SelFC->setChecked(true);
1532
                            rb_SelFC->setChecked(true);
-
 
1533
                            {
-
 
1534
                                TX_Data[0] = 0xff;
-
 
1535
                                TX_Data[1] = 0;
1452
                            {
1536
 
-
 
1537
                                // DEP: Raus wenn Resend implementiert.
1453
                                TX_Data[0] = 0xff;
1538
                                ToolBox::Wait(SLEEP);
1454
                                TX_Data[1] = 0;
1539
                                Conn->send_Cmd('q', ADDRESS_FC, TX_Data, 1, true);
1455
                                send_Data('q', ADDRESS_FC, TX_Data, 1);
1540
                                qDebug("FC - Get Settings");
1456
                            }
1541
                            }
1457
                        }
1542
                        }
Line 1480... Line 1565...
1480
                break;
1565
                break;
1481
            }
1566
            }
1482
    }
1567
    }
1483
}
1568
}
Line 1484... Line -...
1484
 
-
 
1485
// Neue Daten an der Schnittstelle
1569
 
1486
void MKTool::slot_newDataReceived(const QByteArray &dataReceived) // DONE 0.71g
1570
void MKTool::slot_showTerminal(int Typ, QString Text)
1487
{
-
 
1488
    const char *RXt;
-
 
1489
    RXt = dataReceived.data();
1571
{
1490
    int a = 0;
-
 
1491
 
-
 
1492
    while (RXt[a] != '\0')
1572
    switch(Typ)
1493
    {
1573
    {
1494
        if (RXt[a] == '\r')
1574
        case 1 :
1495
        {
1575
        {
1496
            while ((RxData.String.length() > 1) && (RxData.String.at(1) == '#'))
1576
            if ((cb_ShowData->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked())))
1497
            {
-
 
1498
                RxData.String.remove(0,1);
-
 
1499
            }
-
 
1500
 
-
 
1501
            if (ToolBox::check_CRC(RxData.String))
-
 
1502
            {
-
 
1503
                RxData.Input = RxData.String.toLatin1().data();
-
 
1504
                new_RXData(RxData);
-
 
1505
 
-
 
1506
                if ((cb_ShowData->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked())))
-
 
1507
                {
1577
            {
1508
                    te_RX->moveCursor(QTextCursor::End,  QTextCursor::MoveAnchor);
-
 
1509
//                    te_RX->insertPlainText(" > " + RxData.String + '\r');
1578
                te_RX->moveCursor(QTextCursor::End,  QTextCursor::MoveAnchor);
1510
                    te_RX->insertHtml("<span style=\"color:#00008b;\">" + RxData.String + "<br /></span>");
-
 
1511
                }
1579
                te_RX->insertHtml("<span style=\"color:#00008b;\">" + Text + "<br /></span>");
-
 
1580
            }
1512
            }
1581
        }
-
 
1582
        break;
-
 
1583
        case 2 :
-
 
1584
        {
1513
            else
1585
            if ((cb_ShowMSG->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked())))
1514
            {
-
 
1515
                if ((cb_ShowMSG->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked())))
-
 
1516
                {
1586
            {
1517
                    te_RX->moveCursor(QTextCursor::End,  QTextCursor::MoveAnchor);
-
 
1518
//                    te_RX->insertPlainText(" > " + RxData.String + '\r');
1587
                te_RX->moveCursor(QTextCursor::End,  QTextCursor::MoveAnchor);
1519
                    te_RX->insertHtml("<span style=\"color:#008b00;\">" + RxData.String + "<br /></span>");
-
 
1520
                }
1588
                te_RX->insertHtml("<span style=\"color:#008b00;\">" + Text + "</span>");
1521
            }
-
 
1522
            RxData.String = QString("");
1589
            }
1523
        }
1590
        }
-
 
1591
        break;
1524
        else
1592
        case 3 :
-
 
1593
        {
1525
        {
1594
            if (cb_ShowSend->isChecked())
1526
            {
1595
            {
-
 
1596
                te_RX->moveCursor(QTextCursor::End,  QTextCursor::MoveAnchor);
1527
                RxData.String = RxData.String + QString(RXt[a]);
1597
                te_RX->insertHtml("<span style='color:#8b0000;'>" + Text + "<br /></span>");
1528
            }
1598
            }
1529
        }
1599
        }
1530
        a++;
1600
        break;
1531
    }
1601
    }
Line 1532... Line 1602...
1532
}
1602
}
1533
 
1603
 
1534
// Seriellen Port öffnen
1604
// Seriellen Port öffnen
1535
void MKTool::slot_OpenPort()
1605
void MKTool::slot_OpenPort()
1536
{
1606
{
1537
    if (serialPort->isOpen())
1607
    if (Conn->isOpen())
1538
    {        
1608
    {
1539
        TX_Data[0] = Settings->Data.Debug_Off / 10;
1609
        TX_Data[0] = Settings->Data.Debug_Off / 10;
Line 1540... Line 1610...
1540
        send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
1610
        Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false);
1541
        ToolBox::Wait(SLEEP);
1611
        ToolBox::Wait(SLEEP);
1542
 
1612
 
1543
        if (Mode.ID == ADDRESS_NC)
1613
        if (Mode.ID == ADDRESS_NC)
1544
        {
1614
        {
1545
            TX_Data[0] = Settings->Data.Navi_Off / 10;
1615
            TX_Data[0] = Settings->Data.Navi_Off / 10;
Line 1546... Line 1616...
1546
            send_Data('o', ADDRESS_NC, TX_Data, 1, false);
1616
            Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false);
1547
            ToolBox::Wait(SLEEP);
1617
            ToolBox::Wait(SLEEP);
1548
        }
1618
        }
1549
 
1619
 
1550
        if (Mode.ID == ADDRESS_NC)
1620
        if (Mode.ID == ADDRESS_NC)
1551
        {
1621
        {
1552
            TX_Data[0] = 0;
1622
            TX_Data[0] = 0;
1553
            TX_Data[1] = 0;
1623
            TX_Data[1] = 0;
1554
            TX_Data[2] = 0;
1624
            TX_Data[2] = 0;
1555
            TX_Data[3] = 0;
-
 
1556
            send_Data('t', ADDRESS_FC, TX_Data, 4, false);
-
 
1557
            ToolBox::Wait(SLEEP);
-
 
1558
        }
-
 
1559
        serialPort->close();
-
 
Line -... Line 1625...
-
 
1625
            TX_Data[3] = 0;
-
 
1626
            Conn->send_Cmd('t', ADDRESS_FC, TX_Data, 4, false);
-
 
1627
            ToolBox::Wait(SLEEP);
1560
//        pb_Open->setText("Seriell Verbinden");
1628
        }
Line 1561... Line 1629...
1561
        ac_ConnectTTY->setText("Seriell Verbinden");
1629
 
1562
//        pb_Open->setIcon(ToolBox::Icon(9));
1630
        Conn->Close();
1563
//        ac_ConnectTTY->setIcon(ToolBox::Icon(9));
1631
 
1564
 
1632
        ac_ConnectTTY->setText("Seriell Verbinden");
1565
        le_Port->setEnabled(true);
1633
        le_Port->setEnabled(true);
1566
 
-
 
1567
        Ticker->stop();
-
 
1568
    }
-
 
1569
    else
-
 
1570
    {
-
 
1571
        serialPort->setPort(le_Port->text()); //Port
-
 
1572
 
-
 
1573
        serialPort->setBaudRate(BAUD57600); //BaudRate
-
 
1574
        serialPort->setDataBits(DATA_8); //DataBits
-
 
1575
        serialPort->setParity(PAR_NONE); //Parity
-
 
1576
        serialPort->setStopBits(STOP_1); //StopBits
-
 
1577
        serialPort->setFlowControl(FLOW_OFF); //FlowControl
-
 
1578
 
-
 
1579
        serialPort->setTimeout(0, 10);
1634
 
-
 
1635
        Ticker->stop();
1580
        serialPort->enableSending();
1636
    }
1581
        serialPort->enableReceiving();
-
 
Line 1582... Line 1637...
1582
 
1637
    else
1583
        serialPort->open();
-
 
1584
        if (serialPort->isOpen())
-
 
1585
        {
-
 
1586
            le_Port->setEnabled(false);
-
 
1587
            serialPort->receiveData();
-
 
Line 1588... Line 1638...
1588
 
1638
    {
1589
            send_Data('v', ADDRESS_ALL, TX_Data, 0, true);
1639
        if (Conn->Open(le_Port->text()))
1590
 
1640
        {
1591
//            pb_Open->setText("Seriell Trennen");
1641
            ac_ConnectTTY->setText("Seriell Trennen");
Line 1592... Line -...
1592
            ac_ConnectTTY->setText("Seriell Trennen");
-
 
1593
//            pb_Open->setIcon(ToolBox::Icon(8));
-
 
1594
//            ac_ConnectTTY->setIcon(ToolBox::Icon(8));
-
 
1595
 
-
 
1596
            Ticker->start(2000);
-
 
1597
        }
-
 
1598
    }
-
 
1599
}
-
 
1600
 
-
 
1601
// Daten senden
-
 
1602
void MKTool::send_Data(char CMD, int Address, char Data[150],unsigned int Length, bool Resend) // DONE 0.71g
-
 
1603
{
-
 
1604
    if (serialPort->isOpen() && AllowSend)
-
 
1605
    {
-
 
1606
        QByteArray Temp;
-
 
1607
        QString TX_Data;
-
 
1608
 
-
 
1609
        if (CMD != '#')
-
 
1610
        {
-
 
1611
//            qDebug("Send data..");
-
 
1612
            TX_Data = ToolBox::Encode64(Data, Length);
-
 
1613
 
-
 
1614
            TX_Data = QString("#") + (QString('a' + Address)) + QString(CMD) + TX_Data;
-
 
1615
 
-
 
1616
//    qDebug(TX_Data.toLatin1().data());
-
 
1617
 
-
 
1618
            TX_Data = ToolBox::add_CRC(TX_Data) + '\r';
-
 
1619
 
-
 
1620
//    qDebug(TX_Data.toLatin1().data());
-
 
1621
 
-
 
1622
            if (Resend)
-
 
1623
            {
-
 
1624
                LastSend = TX_Data;
-
 
1625
                TickerEvent[0] = true;
-
 
1626
            }
-
 
1627
            Temp = QByteArray(TX_Data.toUtf8());
-
 
1628
        }
-
 
1629
        else
-
 
1630
        {
-
 
1631
//            qDebug("Send Raw..");
-
 
1632
            for (unsigned int a = 0; a < Length; a++)
-
 
1633
            {
-
 
1634
                Temp[a] = Data[a];
-
 
1635
//                qDebug(QString("%1").arg(Temp[a]).toLatin1().data());
-
 
1636
            }
-
 
1637
        }
-
 
1638
 
-
 
1639
        serialPort->sendData(Temp);
-
 
1640
 
-
 
1641
        if (cb_ShowSend->isChecked() && (CMD != '#'))
1642
            le_Port->setEnabled(false);
1642
        {
1643
 
Line 1643... Line 1644...
1643
            te_RX->moveCursor(QTextCursor::End,  QTextCursor::MoveAnchor);
1644
            Conn->send_Cmd('v', ADDRESS_ALL, TX_Data, 0, true);
1644
            te_RX->insertHtml("<span style='color:#8b0000;'>" + TX_Data + "<br /></span>");
1645
 
1645
        }
-
 
1646
    }
1646
            Ticker->start(2000);
1647
}
1647
        }
1648
 
1648
    }
1649
 
1649
}
Line 1650... Line 1650...
1650
// Programm beenden
1650
 
1651
///////////////////
1651
// Programm beenden