Subversion Repositories Projects

Rev

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

Rev 392 Rev 393
Line 1457... Line 1457...
1457
////////////////////////////////////////////////////////////////////
1457
////////////////////////////////////////////////////////////////////
Line 1458... Line 1458...
1458
 
1458
 
1459
// Neues Datenpacket empfangen -> Verarbeiten
1459
// Neues Datenpacket empfangen -> Verarbeiten
1460
void MKTool::slot_newData(sRxData RX) // DONE 0.71g
1460
void MKTool::slot_newData(sRxData RX) // DONE 0.71g
1461
{
-
 
1462
    if (LastSend.length() > 2)
-
 
1463
    {
-
 
1464
    }
-
 
1465
    int HardwareID = RX.input[1] - 'a';
-
 
1466
 
-
 
1467
    switch(HardwareID)
-
 
1468
    {
-
 
1469
        case ADDRESS_FC :
-
 
1470
            switch(RX.input[2])
-
 
1471
            {
-
 
1472
                // Motor-Mixer
-
 
1473
                case 'N' :
-
 
1474
                    if (Parser::decode64(RX))
-
 
1475
                    {
-
 
1476
                        o_Connection->stop_ReSend();
-
 
1477
 
-
 
1478
                        if (RX.decode[0] == VERSION_MIXER)
-
 
1479
                        {
-
 
1480
                            f_MotorMixer->set_MotorConfig(RX);
-
 
1481
                        }
-
 
1482
                    }
-
 
1483
                break;
-
 
1484
                // Motor-Mixer Schreib-Bestätigung
-
 
1485
                case 'M' :
-
 
1486
                    if (Parser::decode64(RX))
-
 
1487
                    {
-
 
1488
                        o_Connection->stop_ReSend();
-
 
1489
 
-
 
1490
                        if (RX.decode[0] == 1)
-
 
1491
                        {
-
 
1492
                            lb_Status->setText(tr("MotorMixer-Daten in FC geschrieben."));
-
 
1493
                        }
-
 
1494
                    }
-
 
1495
                break;
-
 
1496
 
-
 
1497
                // Stick-Belegung der Fernsteuerung
-
 
1498
                case 'P' : // DONE 0.71g
-
 
1499
                    if (Parser::decode64(RX))
-
 
1500
                    {
-
 
1501
                        f_Settings->pb_K1->setValue(Parser::dataToInt(RX.decode,  2,true));
-
 
1502
                        f_Settings->pb_K2->setValue(Parser::dataToInt(RX.decode,  4,true));
-
 
1503
                        f_Settings->pb_K3->setValue(Parser::dataToInt(RX.decode,  6,true));
-
 
1504
                        f_Settings->pb_K4->setValue(Parser::dataToInt(RX.decode,  8,true));
-
 
1505
                        f_Settings->pb_K5->setValue(Parser::dataToInt(RX.decode, 10 ,true));
-
 
1506
                        f_Settings->pb_K6->setValue(Parser::dataToInt(RX.decode, 12,true));
-
 
1507
                        f_Settings->pb_K7->setValue(Parser::dataToInt(RX.decode, 14,true));
-
 
1508
                        f_Settings->pb_K8->setValue(Parser::dataToInt(RX.decode, 16,true));
-
 
1509
                    }
-
 
1510
                break;
-
 
1511
                // Settings lesen
-
 
1512
                case 'Q' : // DONE 0.71g
-
 
1513
                    if (Parser::decode64(RX))
-
 
1514
                    {
-
 
1515
                        o_Connection->stop_ReSend();
-
 
1516
 
-
 
1517
                        if (RX.decode[1] == VERSION_SETTINGS)
-
 
1518
                        {
-
 
1519
                            int Settings_ID = RX.decode[0];
-
 
1520
                            for (int a = 0; a < MaxParameter; a++)
-
 
1521
                            {
-
 
1522
                                FCSettings[a] = RX.decode[a + 2];
-
 
1523
                            }
-
 
1524
                            f_Settings->show_FCSettings(Settings_ID, FCSettings);
-
 
1525
                            f_Settings->pb_Read->setEnabled(true);
-
 
1526
                            f_Settings->pb_Write->setEnabled(true);
-
 
1527
                        }
-
 
1528
                        else
-
 
1529
                        {
-
 
1530
                            f_Settings->pb_Read->setDisabled(true);
-
 
1531
                            f_Settings->pb_Write->setDisabled(true);
-
 
1532
 
-
 
1533
                            QString name = QString("Versionen inkompatibel.\n") +
-
 
1534
                                      QString("Version von GroundStation benoetigt: ") +
-
 
1535
                                      QString(VERSION_SETTINGS) +
-
 
1536
                                      QString("\nVersion auf der FlightCtrl: ") +
-
 
1537
                                      QString(RX.decode[1]) +
-
 
1538
                                      QString("\nParameterbearbeitung nicht moeglich.");
-
 
1539
                            QMessageBox::warning(this, QA_NAME,
-
 
1540
                                   name, QMessageBox::Ok);
-
 
1541
                        }
-
 
1542
                    }
-
 
1543
                break;
-
 
1544
                // Settings geschrieben
-
 
1545
                case 'S' : // DONE 0.71g
-
 
1546
                    o_Connection->stop_ReSend();
-
 
1547
                break;
-
 
1548
            }
-
 
1549
 
-
 
1550
        case ADDRESS_NC :
-
 
1551
            switch(RX.input[2])
-
 
1552
            {
-
 
1553
                // Navigationsdaten
-
 
1554
                case 'O' : // NOT DONE 0.12h
-
 
1555
                    if (Parser::decode64(RX))
-
 
1556
                    {
1461
{
1557
                        new_NaviData(RX);
-
 
1558
                    }
-
 
1559
                break;
-
 
1560
            }
-
 
1561
//        case ADDRESS_MK3MAG :
-
 
1562
 
-
 
1563
        default :
-
 
1564
            switch(RX.input[2])
-
 
1565
            {
-
 
1566
                // LCD-Anzeige
-
 
1567
                case 'L' : // DONE 0.71g
-
 
1568
                    if (Parser::decode64(RX))
-
 
1569
                    {
-
 
1570
                        o_Connection->stop_ReSend();
-
 
1571
 
-
 
1572
                        int LCD[150];
-
 
1573
                        memcpy(LCD,RX.decode, sizeof(RX.decode));
-
 
1574
 
-
 
1575
                        f_LCD->show_Data(LCD);
-
 
1576
 
-
 
1577
                        LCD_Page     = RX.decode[0];
-
 
1578
                        LCD_MAX_Page = RX.decode[1];
-
 
1579
                    }
-
 
1580
                break;
-
 
1581
                // Analoglabels
-
 
1582
                case 'A' : // DONE 0.71g
-
 
1583
                    if (Parser::decode64(RX))
-
 
1584
                    {
-
 
1585
                        o_Connection->stop_ReSend();
-
 
1586
 
-
 
1587
                        int Position = RX.decode[0];
-
 
1588
                        if (Position != 31)
-
 
1589
                        {
-
 
1590
                            Settings->Analog1.Label[Position] = ToolBox::dataToQString(RX.decode,1,17).trimmed();
-
 
1591
                            if (Settings->Analog1.Label[Position] == "")
-
 
1592
                            {
-
 
1593
                                Settings->Analog1.Label[Position] = "A-" + QString("%1").arg(Position);
-
 
1594
                            }
-
 
1595
                            Position ++;
-
 
1596
                            TX_Data[0] = Position;
-
 
1597
                            o_Connection->send_Cmd('a', ADDRESS_ALL, TX_Data, 1, true);
-
 
1598
                        }
-
 
1599
                        if (Position == 31)
-
 
1600
                        {
-
 
1601
                            for (int a = 0; a < MaxAnalog; a++)
-
 
1602
                            {
-
 
1603
                                lb_Analog[a]->setText(Settings->Analog1.Label[a]);
-
 
1604
                            }
-
 
1605
                            Settings->Analog1.Version = QString(Mode.Version);
-
 
1606
                            Settings->write_Settings_AnalogLabels(HardwareID);
-
 
1607
                            config_Plot();
-
 
1608
                        }
-
 
1609
                    }
-
 
1610
                break;
-
 
1611
                // Debug-Daten
-
 
1612
                case 'D' : // DONE 0.71g
-
 
1613
                    if (Parser::decode64(RX))
-
 
1614
                    {
-
 
1615
                        for (int i = 0; i < MaxAnalog; i++)
-
 
1616
                        {
-
 
1617
                            AnalogData[i] = Parser::dataToInt(RX.decode, (i * 2) + 2);
-
 
1618
                        }
-
 
1619
                        show_DebugData();
-
 
1620
                    }
-
 
1621
                break;
-
 
1622
                // Version
-
 
1623
                case 'V' : // DONE 0.71h
-
 
1624
                    if (Parser::decode64(RX))
-
 
1625
                    {
-
 
1626
                        o_Connection->stop_ReSend();
-
 
1627
 
-
 
1628
                        Mode.ID            = HardwareID;
-
 
1629
                        Mode.VERSION_MAJOR = RX.decode[0];
-
 
1630
                        Mode.VERSION_MINOR = RX.decode[1];
-
 
1631
                        Mode.VERSION_PATCH = RX.decode[4];
-
 
1632
                        Mode.VERSION_SERIAL_MAJOR = RX.decode[2];
-
 
1633
                        Mode.VERSION_SERIAL_MINOR = RX.decode[3];
-
 
1634
 
-
 
1635
                        Mode.Hardware   = HardwareType[Mode.ID];
-
 
1636
                        //TODO: Funktion im Handler get_version() oder sowas
-
 
1637
                        QString version = QString("%1").arg(RX.decode[0]) + "." +
-
 
1638
                                          QString("%1").arg(RX.decode[1]) +
-
 
1639
                                          QString(RX.decode[4] + 'a');
-
 
1640
                        Mode.Version = version.toLatin1().data;
-
 
1641
                        setWindowTitle(QA_NAME + " v" + QA_VERSION + " - " +
-
 
1642
                                 Mode.Hardware + " " +
-
 
1643
                                 Mode.Version);
-
 
1644
 
-
 
1645
                        if (Mode.VERSION_SERIAL_MAJOR != VERSION_SERIAL_MAJOR)
-
 
1646
                        {
-
 
1647
//                                AllowSend = false;
-
 
1648
                                QMessageBox::warning(this, QA_NAME,
-
 
1649
                                   tr("Serielles Protokoll Inkompatibel. \nBitte neue Programmversion installieren,"), QMessageBox::Ok);
-
 
1650
                        }
-
 
1651
 
-
 
1652
                        if (ac_NoDebug->isChecked())
-
 
1653
                        {
-
 
1654
                            TX_Data[0] = 0;
-
 
1655
                        }
-
 
1656
                        else
-
 
1657
                        if (ac_FastDebug->isChecked())
-
 
1658
                        {
-
 
1659
                            TX_Data[0] = Settings->Data.Debug_Fast / 10;
-
 
1660
                        }
-
 
1661
                        else
-
 
1662
                        {
-
 
1663
                            TX_Data[0] = Settings->Data.Debug_Slow / 10;
-
 
1664
                        }
-
 
1665
 
-
 
1666
                        o_Connection->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false);
-
 
1667
 
-
 
1668
                        // Wenn MK3MAG dann andauernd Daten neu anfragen.
-
 
1669
                        if (Mode.ID == ADDRESS_MK3MAG)
-
 
1670
                        {
-
 
1671
                            TickerEvent[3] = true;
-
 
1672
                            rb_SelMag->setChecked(true);
-
 
1673
                        }
-
 
1674
 
-
 
1675
                        // Wenn NaviCtrl dann hier.
-
 
1676
                        if (Mode.ID == ADDRESS_NC)
-
 
1677
                        {
-
 
1678
                            rb_SelNC->setChecked(true);
-
 
1679
 
-
 
1680
                            if (ac_NoNavi->isChecked())
-
 
1681
                            {
-
 
1682
                                TX_Data[0] = 0;
-
 
1683
                            }
-
 
1684
                            else
-
 
1685
                            if (ac_FastNavi->isChecked())
-
 
1686
                            {
-
 
1687
                                TX_Data[0] = Settings->Data.Navi_Fast / 10;
-
 
1688
                            }
-
 
1689
                            else
-
 
1690
                            {
-
 
1691
                                TX_Data[0] = Settings->Data.Navi_Slow / 10;
-
 
1692
                            }
-
 
1693
 
-
 
1694
                            o_Connection->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false);
-
 
1695
                        }
-
 
1696
 
-
 
1697
 
-
 
1698
                        // Wenn FlightCtrl dann Settings abfragen.
-
 
1699
                        if (Mode.ID == ADDRESS_FC)
-
 
1700
                        {
-
 
1701
                            rb_SelFC->setChecked(true);
-
 
1702
                            {
-
 
1703
                                TX_Data[0] = 0xff;
-
 
1704
                                TX_Data[1] = 0;
-
 
1705
 
-
 
1706
                                // DEP: Raus wenn Resend implementiert.
-
 
1707
//                                ToolBox::Wait(SLEEP);
-
 
1708
                                o_Connection->send_Cmd('q', ADDRESS_FC, TX_Data, 1, true);
-
 
1709
                                qDebug("FC - Get Settings");
-
 
1710
                            }
-
 
1711
                        }
-
 
1712
                        // Wenn nicht Lesen und Schreiben der Settings deaktivieren.
-
 
1713
                        else
-
 
1714
                        {
-
 
1715
                                f_Settings->pb_Read->setDisabled(true);
-
 
1716
                                f_Settings->pb_Write->setDisabled(true);
-
 
1717
                        }
-
 
1718
 
-
 
1719
                        Settings->read_Settings_Analog(HardwareID);
-
 
1720
                        Settings->read_Settings_AnalogLabels(HardwareID);
-
 
1721
 
-
 
1722
                        if (Settings->Analog1.Version != QString(Mode.Version))
-
 
1723
                        {
-
 
1724
                            lb_Status->setText(tr("Analoglabel-Version unterschiedlich. Lese Analoglabels neu aus."));
-
 
1725
                            slot_ac_GetLabels();
-
 
1726
                        }
-
 
1727
                        else
-
 
1728
                        for (int a = 0; a < MaxAnalog; a++)
-
 
1729
                        {
-
 
1730
                            lb_Analog[a]->setText(Settings->Analog1.Label[a]);
-
 
1731
                        }
-
 
1732
                        config_Plot();
-
 
1733
                    }
-
 
1734
                break;
-
 
1735
            }
-
 
Line 1736... Line 1462...
1736
    }
1462
    //handler->receiveData(RX)
1737
 
1463
 
1738
    // TODO: Roh-Daten senden zum QMK-Server dazu Sendebuffer bauen.
1464
    // TODO: Roh-Daten senden zum QMK-Server dazu Sendebuffer bauen.
1739
    if ((QMK_Server->property("Connect")) == true)
1465
    if ((QMK_Server->property("Connect")) == true)
1740
    {
1466
    {
Line 1741... Line 1467...
1741
//        QMK_Server->send_RawData(RX.String);
1467
//        QMK_Server->send_RawData(RX.String);
1742
    }
1468
    }
Line 1743... Line 1469...
1743
 
1469
 
1744
    slot_showTerminal(1, QString(RX.str));
1470
    slot_showTerminal(1, QString(RX.str.c_str()));
1745
}
1471
}