Subversion Repositories Projects

Rev

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

Rev 158 Rev 159
Line 27... Line 27...
27
#include <QSpinBox>
27
#include <QSpinBox>
Line 28... Line 28...
28
 
28
 
29
#include "mktool.h"
29
#include "mktool.h"
30
#include "dlg_Config.h"
30
#include "dlg_Config.h"
-
 
31
#include "dlg_Motortest.h"
31
#include "dlg_Motortest.h"
32
#include "dlg_Preferences.h"
32
#include "../global.h"
33
#include "../global.h"
Line 33... Line 34...
33
#include "../ToolBox.h"
34
#include "../ToolBox.h"
Line 49... Line 50...
49
    init_Objects();
50
    init_Objects();
50
    init_Connections();
51
    init_Connections();
Line 51... Line 52...
51
 
52
 
Line 52... Line 53...
52
    init_Plot();
53
    init_Plot();
53
 
54
 
Line 54... Line 55...
54
    Ticker->start(500);
55
    Ticker->start(2000);
55
}
56
}
56
 
57
 
Line 114... Line 115...
114
    // Seriell-Port
115
    // Seriell-Port
115
    serialPort = new ManageSerialPort;
116
    serialPort = new ManageSerialPort;
Line 116... Line 117...
116
 
117
 
117
    // QFile-Instanz (Log-Datei)
118
    // QFile-Instanz (Log-Datei)
-
 
119
    CSVFile = new QFile("");
-
 
120
 
118
    CSVFile = new QFile("");
121
    AllowSend = true;
Line 119... Line 122...
119
}
122
}
120
 
123
 
121
void MKTool::init_Connections()
124
void MKTool::init_Connections()
Line 127... Line 130...
127
    connect(pb_Load,   SIGNAL(clicked()), this, SLOT(slot_LoadParameter()));
130
    connect(pb_Load,   SIGNAL(clicked()), this, SLOT(slot_LoadParameter()));
128
    connect(pb_Save,   SIGNAL(clicked()), this, SLOT(slot_SaveParameter()));
131
    connect(pb_Save,   SIGNAL(clicked()), this, SLOT(slot_SaveParameter()));
129
    connect(pb_Read,   SIGNAL(clicked()), this, SLOT(slot_GetParameter()));
132
    connect(pb_Read,   SIGNAL(clicked()), this, SLOT(slot_GetParameter()));
130
    connect(pb_Write,  SIGNAL(clicked()), this, SLOT(slot_SetParameter()));
133
    connect(pb_Write,  SIGNAL(clicked()), this, SLOT(slot_SetParameter()));
Line -... Line 134...
-
 
134
 
-
 
135
    connect(pb_LCDup,   SIGNAL(clicked()), this, SLOT(slot_LCD_UP()));
-
 
136
    connect(pb_LCDdown, SIGNAL(clicked()), this, SLOT(slot_LCD_DOWN()));
131
 
137
 
132
    // Actions
138
    // Actions
-
 
139
    connect(ac_Config,       SIGNAL(triggered()), this, SLOT(slot_ac_Config()));
-
 
140
    connect(ac_Preferences,  SIGNAL(triggered()), this, SLOT(slot_ac_Preferences()));
133
    connect(ac_Config,       SIGNAL(triggered()), this, SLOT(slot_ac_Config()));
141
 
134
    connect(ac_Motortest,    SIGNAL(triggered()), this, SLOT(slot_ac_Motortest()));
142
    connect(ac_Motortest,    SIGNAL(triggered()), this, SLOT(slot_ac_Motortest()));
135
    connect(ac_StartPlotter, SIGNAL(triggered()), this, SLOT(slot_ac_StartPlotter()));
143
    connect(ac_StartPlotter, SIGNAL(triggered()), this, SLOT(slot_ac_StartPlotter()));
136
    connect(ac_MehrDaten,    SIGNAL(triggered()), this, SLOT(slot_ac_MehrDaten()));
144
    connect(ac_MehrDaten,    SIGNAL(triggered()), this, SLOT(slot_ac_MehrDaten()));
137
    connect(ac_About,        SIGNAL(triggered()), this, SLOT(slot_ac_About()));
145
    connect(ac_About,        SIGNAL(triggered()), this, SLOT(slot_ac_About()));
Line 293... Line 301...
293
    if (TickerDiv)
301
    if (TickerDiv)
294
        TickerDiv = false;
302
        TickerDiv = false;
295
    else
303
    else
296
        TickerDiv = true;
304
        TickerDiv = true;
Line 297... Line -...
297
 
-
 
298
    if (ac_MehrDaten->isChecked())
-
 
299
    {
-
 
300
        send_Data('f', TX_Data, 0);
-
 
301
    }
-
 
302
 
305
 
303
    for (int a = 0; a < MaxTickerEvents; a++)
306
    for (int a = 0; a < MaxTickerEvents; a++)
304
    {
307
    {
305
        if (TickerEvent[a] == true)
308
        if (TickerEvent[a] == true)
306
        {
309
        {
Line 311... Line 314...
311
                    {
314
                    {
312
                        QByteArray Temp(LastSend.toUtf8());
315
                        QByteArray Temp(LastSend.toUtf8());
313
                        serialPort->sendData(Temp);
316
                        serialPort->sendData(Temp);
314
                    }
317
                    }
315
                break;
318
                break;
316
 
-
 
317
                case 1 :
319
                case 1 :
318
                    TX_Data[0] = 255;
320
                    TX_Data[0] = 0;
-
 
321
                    send_Data('p', ADDRESS_FC, TX_Data, 0, false);
-
 
322
                break;
-
 
323
                case 2 :
-
 
324
                    TX_Data[0] = LCD_Page;
319
                    TX_Data[1] = 255;
325
                    TX_Data[1] = 0;
320
                    send_Data('h', TX_Data, 2, false);
326
                    send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
321
                break;
327
                break;
322
            }
328
            }
323
        }
329
        }
324
    }
330
    }
325
}
331
}
Line 345... Line 351...
345
{
351
{
346
    TX_Data[0] = Motor1;
352
    TX_Data[0] = Motor1;
347
    TX_Data[1] = Motor2;
353
    TX_Data[1] = Motor2;
348
    TX_Data[2] = Motor3;
354
    TX_Data[2] = Motor3;
349
    TX_Data[3] = Motor4;
355
    TX_Data[3] = Motor4;
350
    send_Data('t', TX_Data, 4, false);
356
    send_Data('t', ADDRESS_FC, TX_Data, 4, false);
351
}
357
}
Line 352... Line 358...
352
 
358
 
353
void MKTool::slot_ac_Config()
359
void MKTool::slot_ac_Config()
354
{
360
{
Line 390... Line 396...
390
        }
396
        }
Line 391... Line 397...
391
 
397
 
392
    }
398
    }
Line -... Line 399...
-
 
399
}
-
 
400
 
-
 
401
void MKTool::slot_ac_Preferences()
-
 
402
{
-
 
403
    dlg_Preferences *f_Preferences = new dlg_Preferences(this);
-
 
404
 
-
 
405
    if (f_Preferences->exec()==QDialog::Accepted)
-
 
406
    {
-
 
407
 
-
 
408
    }
393
}
409
}
394
 
410
 
395
void MKTool::slot_ac_StartPlotter()
411
void MKTool::slot_ac_StartPlotter()
396
{
412
{
397
    if (ac_StartPlotter->isChecked())
413
    if (ac_StartPlotter->isChecked())
Line 444... Line 460...
444
//        Action->setChecked(true);
460
//        Action->setChecked(true);
445
        tab_Main->insertTab(Aktive, TabWidgets[Aktive], Action->text());
461
        tab_Main->insertTab(Aktive, TabWidgets[Aktive], Action->text());
446
    }
462
    }
447
}
463
}
Line 448... Line 464...
448
 
464
 
449
void MKTool::slot_ac_MehrDaten()
465
void MKTool::slot_ac_MehrDaten() // DONE 0.71g
450
{
466
{
451
    if (ac_MehrDaten->isChecked())
467
    if (ac_MehrDaten->isChecked())
452
    {
468
    {
453
        Ticker->setInterval(100);
469
        TX_Data[0] = 10;
454
    }
470
        send_Data('d', ADDRESS_ALL, TX_Data, 1, false);    }
455
    else
471
    else
456
    {
472
    {
457
        Ticker->setInterval(500);
473
        TX_Data[0] = 50;
458
    }
474
        send_Data('d', ADDRESS_ALL, TX_Data, 1, false);    }
Line 459... Line 475...
459
}
475
}
460
 
476
 
461
void MKTool::slot_ac_About()
477
void MKTool::slot_ac_About()
462
{
478
{
Line 463... Line 479...
463
    QMessageBox::about(this, trUtf8(("Ãœber ")) + QA_NAME, QA_ABOUT);
479
    QMessageBox::about(this, trUtf8(("Ãœber ")) + QA_NAME, QA_ABOUT);
464
}
480
}
465
 
481
 
466
void MKTool::slot_ac_GetLabels()
482
void MKTool::slot_ac_GetLabels() // DONE 0.71g
467
{
483
{
Line -... Line 484...
-
 
484
    TX_Data[0] = 0;
468
    TX_Data[0] = 0;
485
    send_Data('a', ADDRESS_ALL, TX_Data, 1, false);
469
    send_Data('a', TX_Data, 1, false);
486
}
470
}
487
 
471
 
488
 
472
//  Daten-Plotter
489
//  Daten-Plotter
Line 820... Line 837...
820
    if (Combo->currentText() == QString("Poti 4"))
837
    if (Combo->currentText() == QString("Poti 4"))
821
        return 254;
838
        return 254;
822
    return Combo->currentText().toInt();
839
    return Combo->currentText().toInt();
823
}
840
}
Line 824... Line 841...
824
 
841
 
825
void MKTool::store_ParameterSet(int Set)
842
void MKTool::store_ParameterSet(int Set) // DONE 0.71g
826
{
843
{
Line 827... Line 844...
827
    char *Name = le_SetName->text().toLatin1().data();
844
    char *Name = le_SetName->text().toLatin1().data();
Line 961... Line 978...
961
    ParameterSet[Set][P_NAV_WIND_CORR]  = get_Value(cb_13_1);
978
    ParameterSet[Set][P_NAV_WIND_CORR]  = get_Value(cb_13_1);
962
    ParameterSet[Set][P_NAV_SPEED_COMP] = get_Value(cb_13_2);
979
    ParameterSet[Set][P_NAV_SPEED_COMP] = get_Value(cb_13_2);
963
    ParameterSet[Set][P_NAV_RADIUS]     = get_Value(cb_13_3);
980
    ParameterSet[Set][P_NAV_RADIUS]     = get_Value(cb_13_3);
964
}
981
}
Line 965... Line 982...
965
 
982
 
966
void MKTool::slot_SaveParameter()
983
void MKTool::slot_SaveParameter() // DONE 0.71g
967
{
984
{
Line 968... Line 985...
968
    int Set = sb_Set->value() + 5;
985
    int Set = sb_Set->value() + 5;
Line 1084... Line 1101...
1084
            Setting.setValue("GPS_MaxRadius",         ParameterSet[Set][P_NAV_RADIUS]);
1101
            Setting.setValue("GPS_MaxRadius",         ParameterSet[Set][P_NAV_RADIUS]);
1085
        Setting.endGroup();
1102
        Setting.endGroup();
1086
    }
1103
    }
1087
}
1104
}
Line 1088... Line 1105...
1088
 
1105
 
1089
void MKTool::slot_LoadParameter()
1106
void MKTool::slot_LoadParameter() // DONE 0.71g
1090
{
1107
{
Line 1091... Line 1108...
1091
    QString Filename = QFileDialog::getOpenFileName(this, "Mikrokopter Parameter laden", Settings->DIR.Parameter, "Mikrokopter Parameter(*.mkp);;Alle Dateien (*)");
1108
    QString Filename = QFileDialog::getOpenFileName(this, "Mikrokopter Parameter laden", Settings->DIR.Parameter, "Mikrokopter Parameter(*.mkp);;Alle Dateien (*)");
1092
 
1109
 
Line 1216... Line 1233...
1216
 
1233
 
1217
        show_ParameterSet(Set);
1234
        show_ParameterSet(Set);
1218
    }
1235
    }
Line 1219... Line 1236...
1219
}
1236
}
1220
 
1237
 
1221
void MKTool::show_ParameterSet(int Set)
1238
void MKTool::show_ParameterSet(int Set) // DONE 0.71g
1222
{
1239
{
1223
    char Name[12];
1240
    char Name[12];
1224
    for (int a = 0; a < 12; a++)
1241
    for (int a = 0; a < 12; a++)
Line 1389... Line 1406...
1389
}
1406
}
Line 1390... Line 1407...
1390
 
1407
 
Line 1391... Line 1408...
1391
 
1408
 
1392
}
1409
}
1393
 
1410
 
Line 1394... Line 1411...
1394
void MKTool::slot_TabChanged(int Tab)
1411
void MKTool::slot_TabChanged(int Tab) // DONE 0.71g
1395
{
1412
{
-
 
1413
    Tab = Tab;
-
 
1414
 
-
 
1415
    if ((tab_Main->currentWidget()->objectName() == QString("Tab_2")) && (tab_Par->currentIndex() == 1))
-
 
1416
    {
1396
    Tab = Tab;
1417
        TX_Data[0] = 0;
1397
 
-
 
1398
    if ((tab_Main->currentWidget()->objectName() == QString("Tab_2")) && (tab_Par->currentIndex() == 1))
1418
        send_Data('p', ADDRESS_FC, TX_Data, 0, true);
1399
    {
1419
 
1400
        TickerEvent[1] = true;
1420
        Ticker->setInterval(500);
-
 
1421
        TickerEvent[1] = true;
1401
//        Poll->start(500);
1422
    }
1402
    }
-
 
1403
    else
1423
    else
-
 
1424
    {
-
 
1425
        Ticker->setInterval(2000);
-
 
1426
        TickerEvent[1] = false;
-
 
1427
    }
-
 
1428
 
-
 
1429
    if ((tab_Main->currentWidget()->objectName() == QString("Tab_4")))
-
 
1430
    {
-
 
1431
        TX_Data[0] = 0;
-
 
1432
        TX_Data[1] = 0;
-
 
1433
        send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
-
 
1434
 
-
 
1435
        Ticker->setInterval(500);
-
 
1436
        TickerEvent[2] = true;
-
 
1437
    }
-
 
1438
    else
-
 
1439
    {
-
 
1440
        Ticker->setInterval(2000);
-
 
1441
        TickerEvent[2] = false;
-
 
1442
    }
-
 
1443
 
-
 
1444
}
-
 
1445
 
-
 
1446
void MKTool::slot_LCD_UP() // DONE 0.71g
-
 
1447
{
-
 
1448
    if (LCD_Page == LCD_MAX_Page)
-
 
1449
        TX_Data[0] = 0;
-
 
1450
    else
-
 
1451
        TX_Data[0] = LCD_Page + 1;
-
 
1452
 
-
 
1453
    TX_Data[1] = 0;
-
 
1454
    send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
-
 
1455
}
-
 
1456
 
-
 
1457
void MKTool::slot_LCD_DOWN() // DONE 0.71g
-
 
1458
{
-
 
1459
    if (LCD_Page == 0)
-
 
1460
        TX_Data[0] = LCD_MAX_Page;
-
 
1461
    else
1404
    {
1462
        TX_Data[0] = LCD_Page - 1;
Line 1405... Line 1463...
1405
        TickerEvent[1] = false;
1463
 
1406
//        Poll->stop();
1464
    TX_Data[1] = 0;
1407
    }
1465
    send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
1408
}
1466
}
1409
 
1467
 
1410
void MKTool::slot_GetParameter()
1468
void MKTool::slot_GetParameter() // DONE 0.71g
Line 1411... Line 1469...
1411
{
1469
{
1412
    TX_Data[0] = sb_Set->value();
1470
    TX_Data[0] = sb_Set->value();
1413
    TX_Data[1] = 0;
1471
    TX_Data[1] = 0;
Line -... Line 1472...
-
 
1472
    send_Data('q', ADDRESS_FC, TX_Data, 1);
-
 
1473
}
-
 
1474
 
1414
    send_Data('q', TX_Data, 1);
1475
void MKTool::slot_SetParameter() // DONE 0.71g
1415
}
1476
{
1416
 
1477
    store_ParameterSet(sb_Set->value());
1417
void MKTool::slot_SetParameter()
1478
 
Line 1418... Line 1479...
1418
{
1479
    TX_Data[0] = sb_Set->value();
Line 1419... Line -...
1419
    store_ParameterSet(sb_Set->value());
-
 
1420
 
1480
    TX_Data[1] = VERSION_SETTINGS;
1421
    for (int a = 0; a < 150; a++)
1481
 
Line -... Line 1482...
-
 
1482
    for (int a = 0; a < MaxParameter; a++)
-
 
1483
    {
-
 
1484
        TX_Data[a + 2] = ParameterSet[sb_Set->value()][a];
1422
    {
1485
    }
1423
        TX_Data[a] = ParameterSet[sb_Set->value()][a];
1486
 
1424
    }
1487
    store_ParameterSet(sb_Set->value());
1425
 
1488
 
1426
    store_ParameterSet(sb_Set->value());
1489
    send_Data('s', ADDRESS_FC, TX_Data, MaxParameter + 2, false);
Line 1451... Line 1514...
1451
        Setting.setValue("Point", pos());
1514
        Setting.setValue("Point", pos());
1452
        Setting.setValue("TabViews", QBitArray(TabViews));
1515
        Setting.setValue("TabViews", QBitArray(TabViews));
1453
    Setting.endGroup();
1516
    Setting.endGroup();
1454
}
1517
}
Line -... Line 1518...
-
 
1518
 
1455
 
1519
 
1456
// Debug-Daten anzeigen und Aufzeichnen
1520
// Debug-Daten anzeigen und Aufzeichnen
1457
///////////////////////////////////////
1521
///////////////////////////////////////
1458
void MKTool::write_CSV()
1522
void MKTool::write_CSV()
1459
{
1523
{
Line 1468... Line 1532...
1468
        }
1532
        }
1469
    }
1533
    }
1470
    Out << "\n";
1534
    Out << "\n";
1471
}
1535
}
Line 1472... Line 1536...
1472
 
1536
 
1473
void MKTool::slot_RecordCSV()
1537
void MKTool::slot_RecordCSV() // DONE 0.71g
1474
{
1538
{
1475
    if (!CSVFile->isOpen())
1539
    if (!CSVFile->isOpen())
1476
    {
1540
    {
Line 1477... Line 1541...
1477
        QString Filename = Settings->DIR.Logging + QDate::currentDate().toString(("yyyy-MM-dd")) + " -- " + QTime::currentTime().toString("hh-mm") + ".csv";
1541
        QString Filename = Settings->DIR.Logging + Mode.Hardware + " - " + QDate::currentDate().toString(("yyyy-MM-dd")) + " -- " + QTime::currentTime().toString("hh-mm") + ".csv";
1478
 
1542
 
1479
        CSVFile = new QFile(Filename);
1543
        CSVFile = new QFile(Filename);
1480
        if (!CSVFile->exists())
1544
        if (!CSVFile->exists())
Line 1572... Line 1636...
1572
    le_A_29->setText(QString("%1").arg(AnalogData[29]));
1636
    le_A_29->setText(QString("%1").arg(AnalogData[29]));
1573
    le_A_30->setText(QString("%1").arg(AnalogData[30]));
1637
    le_A_30->setText(QString("%1").arg(AnalogData[30]));
1574
    le_A_31->setText(QString("%1").arg(AnalogData[31]));
1638
    le_A_31->setText(QString("%1").arg(AnalogData[31]));
1575
}
1639
}
Line -... Line 1640...
-
 
1640
 
1576
 
1641
 
1577
// Seriel-Port Bereich, Befehle senden und Daten empfangen
1642
// Seriel-Port Bereich, Befehle senden und Daten empfangen
Line 1578... Line 1643...
1578
//////////////////////////////////////////////////////////
1643
//////////////////////////////////////////////////////////
1579
 
1644
 
1580
// Neues Datenpacket empfangen -> Verarbeiten
1645
// Neues Datenpacket empfangen -> Verarbeiten
Line 1581... Line 1646...
1581
void MKTool::new_RXData(sRxData RX)
1646
void MKTool::new_RXData(sRxData RX) // DONE 0.71g
1582
{
1647
{
1583
 
1648
 
Line 1584... Line 1649...
1584
    if (LastSend.length() > 2)
1649
    if (LastSend.length() > 2)
1585
    {
1650
    {
1586
    }
1651
    }
1587
 
1652
 
1588
    switch(RX.Input[2])
1653
    switch(RX.Input[2])
1589
    {
-
 
1590
        case '0' :
1654
    {
1591
                    if (ToolBox::Decode64(RX, true))
1655
        case 'L' : // DONE 0.71g
1592
                    {
-
 
-
 
1656
                    if (ToolBox::Decode64(RX, true))
1593
                        le_LCD0->setText(ToolBox::DataToString(RX.Decode));
1657
                    {
1594
                    }
1658
                        int LCD[150];
-
 
1659
                        memcpy(LCD,RX.Decode, sizeof(RX.Decode));
1595
                break;
1660
 
1596
        case '1' :
-
 
1597
                    if (ToolBox::Decode64(RX, true))
-
 
1598
                    {
-
 
1599
                        le_LCD1->setText(ToolBox::DataToString(RX.Decode));
1661
                        LCD_Page     = RX.Decode[0];
1600
                    }
1662
                        LCD_MAX_Page = RX.Decode[1];
1601
                break;
1663
 
-
 
1664
                        le_LCD0->setText(ToolBox::Data2QString(LCD,2,22));
-
 
1665
                        le_LCD1->setText(ToolBox::Data2QString(LCD,22,42));
1602
        case '2' :
1666
                        le_LCD2->setText(ToolBox::Data2QString(LCD,42,62));
1603
                    if (ToolBox::Decode64(RX, true))
1667
                        le_LCD3->setText(ToolBox::Data2QString(LCD,62,82));
1604
                    {
1668
 
1605
                        le_LCD2->setText(ToolBox::DataToString(RX.Decode));
1669
                        TickerEvent[0] = false;
1606
                    }
1670
                    }
-
 
1671
                break;
-
 
1672
        case 'P' : // DONE 0.71g
1607
                break;
1673
                    if (ToolBox::Decode64(RX, true))
-
 
1674
                    {
-
 
1675
                        pb_K1->setValue(ToolBox::Data2Int(RX.Decode,  0,true));
-
 
1676
                        pb_K2->setValue(ToolBox::Data2Int(RX.Decode,  2,true));
-
 
1677
                        pb_K3->setValue(ToolBox::Data2Int(RX.Decode,  4,true));
-
 
1678
                        pb_K4->setValue(ToolBox::Data2Int(RX.Decode,  6,true));
1608
        case '3' :
1679
                        pb_K5->setValue(ToolBox::Data2Int(RX.Decode,  8,true));
1609
                    if (ToolBox::Decode64(RX, true))
1680
                        pb_K6->setValue(ToolBox::Data2Int(RX.Decode, 10,true));
1610
                    {
-
 
1611
                        le_LCD3->setText(ToolBox::DataToString(RX.Decode));
-
 
1612
                    }
-
 
1613
                break;
-
 
1614
        case '4' :
-
 
1615
                    if (ToolBox::Decode64(RX, false))
-
 
1616
                    {
-
 
1617
                        pb_K1->setValue(RX.Decode[1]);
-
 
1618
                        pb_K2->setValue(RX.Decode[2]);
-
 
1619
                        pb_K3->setValue(RX.Decode[3]);
-
 
1620
                        pb_K4->setValue(RX.Decode[4]);
-
 
1621
                        pb_K5->setValue(RX.Decode[5]);
-
 
1622
                        pb_K6->setValue(RX.Decode[6]);
-
 
1623
                        pb_K7->setValue(RX.Decode[7]);
1681
                        pb_K7->setValue(ToolBox::Data2Int(RX.Decode, 12,true));
1624
                        pb_K8->setValue(RX.Decode[8]);
1682
                        pb_K8->setValue(ToolBox::Data2Int(RX.Decode, 14,true));
1625
                    }
1683
                    }
1626
                break;
1684
                break;
1627
        case 'A' :
1685
        case 'A' : // DONE 0.71g
1628
                    if (ToolBox::Decode64(RX, true))
1686
                    if (ToolBox::Decode64(RX, true))
1629
                    {
1687
                    {
1630
                        int Position = RX.Input[1] - 48;
1688
                        int Position = RX.Decode[0];
1631
                        if (Position < 32)
1689
                        if (Position < 32)
1632
                        {
1690
                        {
1633
                            Settings->Analog[Position].Name = ToolBox::DataToString(RX.Decode);
1691
                            Settings->Analog[Position].Name = ToolBox::Data2QString(RX.Decode,1,17).trimmed();
1634
                            Position ++;
1692
                            Position ++;
1635
                            TX_Data[0] = Position;
1693
                            TX_Data[0] = Position;
1636
                            send_Data('a', TX_Data, 1, false);
1694
                            send_Data('a', ADDRESS_ALL, TX_Data, 1, false);
1637
                        }
1695
                        }
Line 1644... Line 1702...
1644
                            Settings->write_Settings_FC();
1702
                            Settings->write_Settings_FC();
1645
                            config_Plot();
1703
                            config_Plot();
1646
                        }
1704
                        }
1647
                    }
1705
                    }
1648
                break;
1706
                break;
1649
        case 'D' :
1707
        case 'D' : // DONE 0.71g
1650
                    if (ToolBox::Decode64(RX, true))
1708
                    if (ToolBox::Decode64(RX, true))
1651
                    {
1709
                    {
1652
                        for (int i = 0; i < MaxAnalog; i++)
1710
                        for (int i = 0; i < MaxAnalog; i++)
1653
                        {
1711
                        {
1654
                            AnalogData[i] = ToolBox::Data2Int(RX.Decode, (i * 2) + 2);
1712
                            AnalogData[i] = ToolBox::Data2Int(RX.Decode, (i * 2) + 2);
1655
                        }
1713
                        }
1656
                        show_DebugData();
1714
                        show_DebugData();
1657
                    }
1715
                    }
1658
                break;
1716
                break;
1659
        case 'L' :
-
 
1660
        case 'M' :
-
 
1661
        case 'N' :
1717
        case 'Q' : // DONE 0.71g
1662
        case 'O' :
-
 
1663
        case 'P' :
-
 
1664
                    TickerEvent[0] = false;
1718
                    TickerEvent[0] = false;
Line 1665... Line 1719...
1665
 
1719
 
-
 
1720
                    ToolBox::Decode64(RX, true);
-
 
1721
 
-
 
1722
                    if (RX.Decode[1] == VERSION_SETTINGS)
-
 
1723
                    {
-
 
1724
                        int Settings_ID = RX.Decode[0];
-
 
1725
                        for (int a = 0; a < MaxParameter; a++)
-
 
1726
                        {
-
 
1727
                            ParameterSet[Settings_ID][a] = RX.Decode[a + 2];
1666
                    ToolBox::Decode64(RX, true);
1728
                        }
1667
                    memcpy(ParameterSet[sb_Set->value()],RX.Decode, sizeof(RX.Decode));
1729
//                        memcpy(ParameterSet[Settings_ID],RX.Decode, sizeof(RX.Decode));
-
 
1730
                        show_ParameterSet(Settings_ID);
-
 
1731
                    }
-
 
1732
                    else
-
 
1733
                    {
-
 
1734
                        pb_Read->setDisabled(true);
-
 
1735
                        pb_Write->setDisabled(true);
-
 
1736
 
-
 
1737
                        QMessageBox::warning(this, QA_NAME,
-
 
1738
                               "Versionen inkompatibel. \nParameterbearbeitung nicht moeglich.", QMessageBox::Ok);
-
 
1739
                    }
-
 
1740
 
-
 
1741
                break;
-
 
1742
        case 'S' : // DONE 0.71g
-
 
1743
                    TickerEvent[0] = false;
1668
                    show_ParameterSet(sb_Set->value());
1744
                    qDebug("Settings set...!!!");
1669
                break;
1745
                break;
1670
        case 'V' :
1746
        case 'V' : // DONE 0.71g
Line 1671... Line 1747...
1671
                    TickerEvent[0] = false;
1747
                    TickerEvent[0] = false;
Line 1672... Line 1748...
1672
 
1748
 
-
 
1749
                    ToolBox::Decode64(RX, true);
-
 
1750
 
-
 
1751
                    Mode.ID            = RX.Input[1] - 'a';
-
 
1752
                    Mode.VERSION_MAJOR = RX.Decode[0];
-
 
1753
                    Mode.VERSION_MINOR = RX.Decode[1];
-
 
1754
                    Mode.VERSION_PATCH = RX.Decode[4];
1673
                    ToolBox::Decode64(RX, true);
1755
                    Mode.VERSION_SERIAL_MAJOR = RX.Decode[2];
1674
 
1756
                    Mode.VERSION_SERIAL_MINOR = RX.Decode[3];
1675
                    Mode.ID         = RX.Input[1];
-
 
Line 1676... Line 1757...
1676
                    Mode.Hardware   = HardwareType[Mode.ID];
1757
 
Line 1677... Line 1758...
1677
                    Mode.Version    = QString("%1").arg(RX.Decode[0]) + "." + QString("%1").arg(RX.Decode[1]) + QString(RX.Decode[4] + 'a');
1758
                    Mode.Hardware   = HardwareType[Mode.ID];
1678
                    Mode.Compatible = RX.Decode[2];
1759
                    Mode.Version    = QString("%1").arg(RX.Decode[0]) + "." + QString("%1").arg(RX.Decode[1]) + QString(RX.Decode[4] + 'a');
1679
 
-
 
1680
                    setWindowTitle(QA_NAME + " v" + QA_VERSION + " - " + Mode.Hardware + " " + Mode.Version);
-
 
1681
 
-
 
1682
                    if (Mode.ID == 1)
1760
 
1683
                    {
-
 
1684
                        if (RX.Decode[2] != FC_VERSION)
1761
                    setWindowTitle(QA_NAME + " v" + QA_VERSION + " - " + Mode.Hardware + " " + Mode.Version);
1685
                        {
1762
 
1686
                            pb_Read->setDisabled(true);
1763
                    if (Mode.VERSION_SERIAL_MAJOR != VERSION_SERIAL_MAJOR)
-
 
1764
                    {
-
 
1765
                            AllowSend = false;
-
 
1766
                            QMessageBox::warning(this, QA_NAME,
-
 
1767
                               "Serielles Protokoll Inkompatibel. \nBitte neue Programmversion installieren,", QMessageBox::Ok);
-
 
1768
                    }
1687
                            pb_Write->setDisabled(true);
1769
 
1688
 
1770
                    TX_Data[0] = 50;
1689
                            QMessageBox::warning(this, QA_NAME,
1771
                    send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
1690
                               QA_NAME + " und Flight-Control inkompatibel.\nParameterbearbeitung nicht moeglich.", QMessageBox::Ok);
1772
 
1691
                        }
1773
                    if (Mode.ID == ADDRESS_FC)
1692
                        else
1774
                    {
1693
                        {
1775
                        {
1694
                            TX_Data[0] = 1;
1776
                            TX_Data[0] = 0xff;
1695
                            TX_Data[1] = 0;
1777
                            TX_Data[1] = 0;
1696
                            send_Data('q', TX_Data, 1);
1778
                            send_Data('q', ADDRESS_FC, TX_Data, 1);
1697
                        }
1779
                        }
Line 1698... Line 1780...
1698
                    }
1780
                    }
1699
                    else
1781
                    else
1700
                    {
1782
                    {
1701
                            pb_Read->setDisabled(true);
1783
                            pb_Read->setDisabled(true);
1702
                            pb_Write->setDisabled(true);
1784
                            pb_Write->setDisabled(true);
1703
 
1785
 
Line 1704... Line 1786...
1704
                            QMessageBox::warning(this, QA_NAME,
1786
//                            QMessageBox::warning(this, QA_NAME,
1705
                               "Keine Verbindung zur FlightCtrl. \nParameterbearbeitung nicht moeglich.", QMessageBox::Ok);
1787
//                               "Keine Verbindung zur FlightCtrl. \nParameterbearbeitung nicht moeglich.", QMessageBox::Ok);
1706
                    }
1788
                    }
1707
                break;
1789
                break;
1708
    }
1790
    }
1709
}
1791
}
Line 1762... Line 1844...
1762
    {
1844
    {
1763
        TX_Data[0] = 0;
1845
        TX_Data[0] = 0;
1764
        TX_Data[1] = 0;
1846
        TX_Data[1] = 0;
1765
        TX_Data[2] = 0;
1847
        TX_Data[2] = 0;
1766
        TX_Data[3] = 0;
1848
        TX_Data[3] = 0;
1767
        send_Data('t', TX_Data, 4, false);
1849
        send_Data('t', ADDRESS_FC, TX_Data, 4, false);
Line 1768... Line -...
1768
 
-
 
1769
//        timer->stop();
1850
 
1770
        serialPort->close();
1851
        serialPort->close();
1771
        pb_Open->setText("Verbinden");
1852
        pb_Open->setText("Verbinden");
1772
        ac_ConnectTTY->setText("Verbinden");
1853
        ac_ConnectTTY->setText("Verbinden");
1773
        pb_Open->setIcon(Icons[9]);
1854
        pb_Open->setIcon(Icons[9]);
Line 1790... Line 1871...
1790
        serialPort->open();
1871
        serialPort->open();
1791
        if (serialPort->isOpen())
1872
        if (serialPort->isOpen())
1792
        {
1873
        {
1793
            serialPort->receiveData();
1874
            serialPort->receiveData();
Line 1794... Line 1875...
1794
 
1875
 
-
 
1876
            send_Data('v', ADDRESS_ALL, TX_Data, 0, true);
1795
            send_Data('v', TX_Data, 0, true);
1877
 
1796
            pb_Open->setText("Trennen");
1878
            pb_Open->setText("Trennen");
1797
            ac_ConnectTTY->setText("Trennen");
1879
            ac_ConnectTTY->setText("Trennen");
1798
            pb_Open->setIcon(Icons[8]);
1880
            pb_Open->setIcon(Icons[8]);
1799
            ac_ConnectTTY->setIcon(Icons[8]);
1881
            ac_ConnectTTY->setIcon(Icons[8]);
1800
        }
1882
        }
1801
    }
1883
    }
Line 1802... Line 1884...
1802
}
1884
}
1803
 
1885
 
1804
// Daten senden
1886
// Daten senden
1805
void MKTool::send_Data(char CMD, char Data[150],unsigned int Length, bool Resend)
1887
void MKTool::send_Data(char CMD, int Address, char Data[150],unsigned int Length, bool Resend) // DONE 0.71g
1806
{
1888
{
1807
    if (serialPort->isOpen())
1889
    if (serialPort->isOpen() && AllowSend)
Line 1808... Line 1890...
1808
    {
1890
    {
Line 1809... Line 1891...
1809
        QString TX_Data = ToolBox::Encode64(Data, Length);
1891
        QString TX_Data = ToolBox::Encode64(Data, Length);
Line 1810... Line 1892...
1810
 
1892
 
Line 1811... Line 1893...
1811
        TX_Data = QString("#0") + QString(CMD) + TX_Data;
1893
        TX_Data = QString("#") + (QString('a' + Address)) + QString(CMD) + TX_Data;
Line 1812... Line -...
1812
 
-
 
1813
//    qDebug(TX_Data.toLatin1().data());
1894
 
1814
 
1895
//    qDebug(TX_Data.toLatin1().data());
1815
        TX_Data = ToolBox::add_CRC(TX_Data) + '\r';
1896
 
1816
 
1897
        TX_Data = ToolBox::add_CRC(TX_Data) + '\r';
1817
//    qDebug(TX_Data.toLatin1().data());
1898