Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 198 → Rev 199

/QMK-Groundstation/trunk/Classes/cServer.cpp
0,0 → 1,136
/***************************************************************************
* Copyright (C) 2008 by Manuel Schrape *
* manuel.schrape@gmx.de *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
#include <QStringList>
 
#include "cServer.h"
 
cServer::cServer()
{
NaviCount = 0;
}
 
void cServer::start_Server(int Port, cSettings *Set)
{
Settings = Set;
 
TcpServer = new QTcpServer();
if (!TcpServer->listen(QHostAddress::Any, qint16(Port)))
{
qDebug("Kann Serversocket nicht Einrichten..!!");
}
else
{
connect(TcpServer, SIGNAL(newConnection()), this, SLOT(slot_NewConnection()));
}
}
 
void cServer::stop_Server()
{
delete TcpServer;
}
 
void cServer::store_NaviString(sNaviString Navi)
{
Route[NaviCount] = Navi;
NaviCount++;
}
 
void cServer::slot_ReadData()
{
if (TcpSocket->canReadLine())
{
QStringList tokens = QString(TcpSocket->readLine()).split(QRegExp("[ \r\n][ \r\n]*"));
 
qDebug() << "QStringList ---------";
for (QList<QString>::iterator i = tokens.begin(); i != tokens.end(); ++i)
qDebug() << (*i);
}
 
TcpSocket->close();
}
 
void cServer::slot_NewConnection()
{
TcpSocket = TcpServer->nextPendingConnection();
connect(TcpSocket, SIGNAL(readyRead ()),this, SLOT(slot_ReadData()));
 
QByteArray block;
 
block = "HTTP/1.0 200 OK\nContent-Type: application/vnd.google-earth.kml+xml; charset=iso-8859-1\nConnection: close\n\n";
// block = "HTTP/1.0 200 OK\nContent-Type: text/xml; charset=utf-8\nConnection: close\n\n";
 
TcpSocket->write(block);
 
TcpSocket->write(get_KML());
 
TcpSocket->close();
}
 
QByteArray cServer::get_KML()
{
QByteArray block;
 
block = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<kml xmlns=\"http://earth.google.com/kml/2.2\">\n"
" <Document>\n"
" <name>Online Mikrokopter GPS Position</name>\n"
" <Style id=\"MK_gps-style\">\n"
" <LineStyle>\n"
" <color>ff0000ff</color>\n"
" <width>2</width>\n"
" </LineStyle>\n"
" </Style>\n"
" <Placemark>\n"
" <LookAt>\n"
" <range>400</range>\n"
" <tilt>45</tilt>\n"
" </LookAt>\n"
" <name>Flight</name>\n"
" <styleUrl>#MK_gps-style</styleUrl>\n"
" <LineString>\n";
if (Settings->Server.ToGround)
{
block = block + " <extrude>1</extrude>\n";
}
 
block = block +
" <tessellate>1</tessellate>\n"
" <altitudeMode>relativeToGround</altitudeMode>\n"
" <coordinates>\n";
 
for (int a = 0; a < NaviCount; a++)
{
block = block + Route[a].Longitude.toLatin1() + "," + Route[a].Latitude.toLatin1() + "," + Route[a].Altitude.toLatin1() + " " ;
block = block + "\n";
}
 
block = block +
" </coordinates>\n"
" </LineString>\n"
" </Placemark>\n"
" </Document>\n"
" </kml>\n";
 
return block;
}
 
cServer::~cServer()
{
}
/QMK-Groundstation/trunk/Classes/cServer.h
0,0 → 1,57
/***************************************************************************
* Copyright (C) 2008 by Manuel Schrape *
* manuel.schrape@gmx.de *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef CSERVER_H
#define CSERVER_H
 
#include <QTcpServer>
#include <QTcpSocket>
 
#include "../global.h"
#include "../cSettings.h"
 
class cServer : public QObject
{
Q_OBJECT
 
public:
cServer();
~cServer();
 
void start_Server(int Port, cSettings *Set);
 
void stop_Server();
void store_NaviString(sNaviString Navi);
 
 
private:
QTcpServer *TcpServer;
QTcpSocket *TcpSocket;
 
cSettings *Settings;
 
QByteArray get_KML();
sNaviString Route[MaxNaviPos];
int NaviCount;
 
private slots:
void slot_NewConnection();
void slot_ReadData();
};
 
#endif // CSERVER_H
/QMK-Groundstation/trunk/Forms/dlg_Preferences.cpp
35,6 → 35,13
sp_Plotter_Count->setValue(Settings->Data.Plotter_Count);
sp_Debug_Fast->setValue(Settings->Data.Debug_Fast);
sp_Debug_Slow->setValue(Settings->Data.Debug_Slow);
sp_Debug_Off->setValue(Settings->Data.Debug_Off);
sp_Navi_Fast->setValue(Settings->Data.Navi_Fast);
sp_Navi_Slow->setValue(Settings->Data.Navi_Slow);
sp_Navi_Off->setValue(Settings->Data.Navi_Off);
le_ServerPort->setText(Settings->Server.Port);
cb_StartServer->setChecked(Settings->Server.StartServer);
cb_ToGround->setChecked(Settings->Server.ToGround);
}
 
cSettings *dlg_Preferences::get_Settings()
43,6 → 50,13
Settings->Data.Plotter_Count = sp_Plotter_Count->value();
Settings->Data.Debug_Fast = sp_Debug_Fast->value();
Settings->Data.Debug_Slow = sp_Debug_Slow->value();
Settings->Data.Debug_Off = sp_Debug_Off->value();
Settings->Data.Navi_Fast = sp_Navi_Fast->value();
Settings->Data.Navi_Slow = sp_Navi_Slow->value();
Settings->Data.Navi_Off = sp_Navi_Off->value();
Settings->Server.Port = le_ServerPort->text();
Settings->Server.StartServer = cb_StartServer->isChecked();
Settings->Server.ToGround = cb_ToGround->isChecked();
 
return Settings;
}
/QMK-Groundstation/trunk/Forms/dlg_Preferences.ui
6,7 → 6,7
<x>0</x>
<y>0</y>
<width>402</width>
<height>296</height>
<height>298</height>
</rect>
</property>
<property name="windowTitle" >
170,7 → 170,7
<string>Debug-Daten</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3" >
<item row="0" column="0" >
<item row="0" column="0" colspan="2" >
<widget class="QGroupBox" name="groupBox" >
<property name="title" >
<string>Debug-Daten intervall</string>
183,7 → 183,7
</property>
</widget>
</item>
<item row="0" column="1" >
<item row="0" column="3" >
<widget class="QSpinBox" name="sp_Debug_Slow" >
<property name="suffix" >
<string> ms</string>
202,7 → 202,7
</property>
</widget>
</item>
<item row="1" column="0" >
<item rowspan="2" row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Intervall schnell :</string>
209,7 → 209,7
</property>
</widget>
</item>
<item row="1" column="1" >
<item rowspan="2" row="1" column="3" >
<widget class="QSpinBox" name="sp_Debug_Fast" >
<property name="suffix" >
<string> ms</string>
231,20 → 231,39
</property>
</widget>
</item>
<item row="2" column="0" colspan="2" >
<widget class="QCheckBox" name="checkBox" >
<property name="enabled" >
<bool>false</bool>
</property>
<item row="3" column="0" >
<widget class="QLabel" name="label_10" >
<property name="text" >
<string>Beim Beenden abschalten</string>
<string>Intervall offline :</string>
</property>
</widget>
</item>
<item row="3" column="3" >
<widget class="QSpinBox" name="sp_Debug_Off" >
<property name="suffix" >
<string> ms</string>
</property>
<property name="prefix" >
<string/>
</property>
<property name="minimum" >
<number>10</number>
</property>
<property name="maximum" >
<number>2550</number>
</property>
<property name="singleStep" >
<number>10</number>
</property>
<property name="value" >
<number>1000</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" >
<item row="1" column="0" colspan="2" >
<widget class="QGroupBox" name="groupBox_2" >
<property name="title" >
<string>Plotter</string>
276,7 → 295,7
</layout>
</widget>
</item>
<item row="2" column="0" >
<item row="2" column="0" colspan="2" >
<spacer name="verticalSpacer_4" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
298,6 → 317,9
<layout class="QGridLayout" name="gridLayout_11" >
<item row="0" column="0" >
<widget class="QGroupBox" name="groupBox_9" >
<property name="enabled" >
<bool>false</bool>
</property>
<property name="title" >
<string>Navi-Daten Intervall</string>
</property>
310,7 → 332,7
</widget>
</item>
<item row="0" column="1" >
<widget class="QSpinBox" name="sp_Debug_Slow_2" >
<widget class="QSpinBox" name="sp_Navi_Slow" >
<property name="suffix" >
<string> ms</string>
</property>
336,7 → 358,7
</widget>
</item>
<item row="1" column="1" >
<widget class="QSpinBox" name="sp_Debug_Fast_2" >
<widget class="QSpinBox" name="sp_Navi_Fast" >
<property name="suffix" >
<string> ms</string>
</property>
357,16 → 379,35
</property>
</widget>
</item>
<item row="2" column="0" colspan="2" >
<widget class="QCheckBox" name="checkBox_5" >
<property name="enabled" >
<bool>false</bool>
</property>
<item row="2" column="0" >
<widget class="QLabel" name="label_11" >
<property name="text" >
<string>Beim Beenden abschalten</string>
<string>Intervall offline :</string>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QSpinBox" name="sp_Navi_Off" >
<property name="suffix" >
<string> ms</string>
</property>
<property name="prefix" >
<string/>
</property>
<property name="minimum" >
<number>10</number>
</property>
<property name="maximum" >
<number>2550</number>
</property>
<property name="singleStep" >
<number>10</number>
</property>
<property name="value" >
<number>250</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
470,7 → 511,7
</widget>
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="lineEdit" >
<widget class="QLineEdit" name="le_ServerPort" >
<property name="text" >
<string>10664</string>
</property>
477,7 → 518,7
</widget>
</item>
<item row="1" column="0" colspan="2" >
<widget class="QCheckBox" name="checkBox_3" >
<widget class="QCheckBox" name="cb_StartServer" >
<property name="text" >
<string>Google Earth Server automatisch starten</string>
</property>
493,7 → 534,7
</property>
<layout class="QGridLayout" name="gridLayout_9" >
<item row="0" column="0" >
<widget class="QCheckBox" name="checkBox_4" >
<widget class="QCheckBox" name="cb_ToGround" >
<property name="text" >
<string>Höhe bis zum Boden verlängern</string>
</property>
/QMK-Groundstation/trunk/Forms/mktool.cpp
25,6 → 25,7
#include <QIcon>
#include <QToolButton>
#include <QSpinBox>
#include <QAction>
 
#include "mktool.h"
#include "dlg_Config.h"
42,7 → 43,6
Settings = new cSettings;
 
init_Arrays();
init_Icons();
init_GUI();
 
init_Objects();
57,16 → 57,13
 
// Tab mit Debug-Elementen verbergen
tab_Main->removeTab(5);
// tab_Main->removeTab(2);
 
// Settings-Tab hinzufügen.
f_Settings = new wdg_Settings( this );
 
tab_Main->insertTab ( 2, f_Settings, "Parameter");
tab_Main->insertTab ( 2, f_Settings, "FC-Settings");
tab_Main->widget(2)->setObjectName("Tab_2");
 
// Develop - Nicht gebrauchte sachen abschalten.
ac_StartServer->setVisible(false);
box_Flugdaten->hide();
box_System->hide();
pb_SettingsReset->hide();
77,10 → 74,14
toolBar->addWidget(lb_Port);
toolBar->addWidget(le_Port);
toolBar->addSeparator();
// toolBar->addWidget(cb_Hardware);
 
lb_Status->setText("Hallo bei QMK-Groundstation...!!!");
toolBar->addWidget(rb_SelFC);
toolBar->addWidget(rb_SelNC);
toolBar->addWidget(rb_SelMag);
 
lb_Status->setText(tr("Hallo bei QMK-Groundstation...!!!"));
 
 
#ifdef _EEEPC_
toolBar->hide();
lb_Status->hide();
94,16 → 95,19
showMaximized();
}
 
// Analoglabels anzeigen
for (int a = 0; a < MaxAnalog; a++)
{
lb_Analog[a]->setText(Settings->Analog1.Label[a]);
}
 
// Kopie der Tabs anlegen
for (int b = 0; b < 6; b++)
{
TabWidgets[b] = tab_Main->widget(b);
}
 
// Ausgeblendete Tabs ausblenden
for (int c = 0; c < 6; c++)
{
if (Settings->GUI.TabViews[c] == false)
137,7 → 141,7
void MKTool::init_Objects()
{
// QTimer-Instanzen
Ticker = new QTimer(this);
Ticker = new QTimer(this);
 
// Seriell-Port
serialPort = new ManageSerialPort;
145,17 → 149,31
// QFile-Instanz (Log-Datei)
CSVFile = new QFile("");
 
// Senden erlauben (Warum auch immer)
AllowSend = true;
 
Server = new cServer();
 
if (Settings->Server.StartServer)
{
ac_StartServer->setChecked(true);
Server->start_Server(Settings->Server.Port.toInt(), Settings);
}
}
 
void MKTool::init_Connections()
{
connect(Dec, SIGNAL(clicked()), this, SLOT(slot_Test()));
 
// Seriel-Port Empfang
connect(serialPort, SIGNAL(newDataReceived(const QByteArray &)), this, SLOT(slot_newDataReceived(const QByteArray &)));
 
// Serielle Verbundung öffnen / schließen
connect(ac_ConnectTTY, SIGNAL(triggered()), this, SLOT(slot_OpenPort()));
 
// Buttons Settings lesen / schreiben
connect(f_Settings->pb_Read, SIGNAL(clicked()), this, SLOT(slot_GetParameter()));
connect(f_Settings->pb_Write, SIGNAL(clicked()), this, SLOT(slot_SetParameter()));
connect(f_Settings->pb_Read, SIGNAL(clicked()), this, SLOT(slot_GetFCSettings()));
connect(f_Settings->pb_Write, SIGNAL(clicked()), this, SLOT(slot_SetFCSettings()));
 
// LCD auf / ab
connect(pb_LCDup, SIGNAL(clicked()), this, SLOT(slot_LCD_UP()));
165,13 → 183,16
connect(ac_Config, SIGNAL(triggered()), this, SLOT(slot_ac_Config()));
connect(ac_Preferences, SIGNAL(triggered()), this, SLOT(slot_ac_Preferences()));
connect(ac_Motortest, SIGNAL(triggered()), this, SLOT(slot_ac_Motortest()));
connect(ac_MehrDaten, SIGNAL(triggered()), this, SLOT(slot_ac_MehrDaten()));
connect(ac_KeineDaten, SIGNAL(triggered()), this, SLOT(slot_ac_KeineDaten()));
connect(ac_FastDebug, SIGNAL(triggered()), this, SLOT(slot_ac_FastDebug()));
connect(ac_NoDebug, SIGNAL(triggered()), this, SLOT(slot_ac_NoDebug()));
connect(ac_FastNavi, SIGNAL(triggered()), this, SLOT(slot_ac_FastNavi()));
connect(ac_NoNavi, SIGNAL(triggered()), this, SLOT(slot_ac_NoNavi()));
connect(ac_GetLabels, SIGNAL(triggered()), this, SLOT(slot_ac_GetLabels()));
 
// Plotter starten / scrollen
connect(scroll_plot, SIGNAL(valueChanged(int)), this, SLOT(slot_ScrollPlot(int)));
connect(ac_StartPlotter, SIGNAL(triggered()), this, SLOT(slot_ac_StartPlotter()));
connect(ac_StartServer, SIGNAL(triggered()), this, SLOT(slot_ac_StartServer()));
 
// Tabs ein & ausblenden
connect(ac_View0, SIGNAL(triggered()), this, SLOT(slot_ac_View()));
181,13 → 202,18
connect(ac_View4, SIGNAL(triggered()), this, SLOT(slot_ac_View()));
connect(ac_View5, SIGNAL(triggered()), this, SLOT(slot_ac_View()));
 
connect(ac_SelNC, SIGNAL(triggered()), this, SLOT(slot_ac_Hardware()));
connect(ac_SelFC, SIGNAL(triggered()), this, SLOT(slot_ac_Hardware()));
connect(ac_SelMag, SIGNAL(triggered()), this, SLOT(slot_ac_Hardware()));
 
connect(rb_SelNC, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
connect(rb_SelFC, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
connect(rb_SelMag, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
 
// firmeware Updateen / flashen
connect(pb_Update, SIGNAL(clicked()), this, SLOT(slot_pb_Update()));
connect(pb_Update, SIGNAL(clicked()), this, SLOT(slot_pb_Update()));
connect(pb_HexFile, SIGNAL(clicked()), this, SLOT(slot_pb_HexFile()));
 
// Serielle Verbundung öffnen / schließen
connect(ac_ConnectTTY, SIGNAL(triggered()), this, SLOT(slot_OpenPort()));
 
// CVS-Record starten / stoppen
connect(ac_RecordCSV, SIGNAL(triggered()), this, SLOT(slot_RecordCSV()));
 
195,7 → 221,7
connect(Ticker, SIGNAL(timeout()), SLOT(slot_Ticker()));
 
// Seitenwechsel
connect(tab_Main, SIGNAL(currentChanged(int)), this, SLOT(slot_TabChanged(int)));
connect(tab_Main, SIGNAL(currentChanged(int)), this, SLOT(slot_TabChanged(int)));
connect(f_Settings->tab_Par, SIGNAL(currentChanged(int)), this, SLOT(slot_TabChanged(int)));
 
// About QMK & About-QT Dialog einfügen
266,31 → 292,76
qwtPlot->replot();
}
 
void MKTool::init_Icons()
 
void MKTool::slot_Test()
{
Icons[0].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledred.png")), QIcon::Normal, QIcon::Off);
Icons[1].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledyellow.png")), QIcon::Normal, QIcon::Off);
Icons[3].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledyellow.png")), QIcon::Normal, QIcon::Off);
Icons[4].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledoff.png")), QIcon::Normal, QIcon::Off);
sRxData RX;
 
Icons[5].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/application-exit.png")), QIcon::Normal, QIcon::Off);
Icons[6].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/media-playback-stop.png")), QIcon::Normal, QIcon::Off);
Icons[7].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/media-record.png")), QIcon::Normal, QIcon::Off);
Icons[8].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/network-connect.png")), QIcon::Normal, QIcon::Off);
Icons[9].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/network-disconnect.png")), QIcon::Normal, QIcon::Off);
Icons[10].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/utilities-system-monitor.png")), QIcon::Normal, QIcon::Off);
RX.String = IN->text();
RX.Input = IN->text().toLatin1().data();
 
Icons[20].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-up-double.png")), QIcon::Normal, QIcon::Off);
Icons[21].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-up.png")), QIcon::Normal, QIcon::Off);
Icons[22].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-down-double.png")), QIcon::Normal, QIcon::Off);
Icons[23].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-down.png")), QIcon::Normal, QIcon::Off);
Icons[24].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-left-double.png")), QIcon::Normal, QIcon::Off);
Icons[25].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-left.png")), QIcon::Normal, QIcon::Off);
Icons[26].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-right-double.png")), QIcon::Normal, QIcon::Off);
Icons[27].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-right.png")), QIcon::Normal, QIcon::Off);
new_RXData(RX);
}
 
void MKTool::slot_ac_Hardware()
{
QAction *Action = (QAction*)sender();
 
if (Action->isChecked() == false)
{
Action->setChecked(true);
}
 
slot_rb_Hardware();
// qDebug("Select AC Hardware");
}
 
void MKTool::slot_rb_Hardware()
{
if ((rb_SelNC->isChecked() == false) && (Mode.ID != ADDRESS_NC))
{
lb_Status->setText(tr("Schalte um auf NaviCtrl."));
TX_Data[0] = 0x1B;
TX_Data[1] = 0x1B;
TX_Data[2] = 0x55;
TX_Data[3] = 0xAA;
TX_Data[4] = 0x00;
TX_Data[5] = '\r';
send_Data('#', ADDRESS_NC, TX_Data, 6, false);
usleep(Sleep);
}
 
if (rb_SelFC->isChecked())
{
lb_Status->setText(tr("Schalte um auf FlightCtrl."));
TX_Data[0] = 0;
send_Data('u', ADDRESS_NC, TX_Data, 1, false);
}
else
if (rb_SelMag->isChecked())
{
lb_Status->setText(tr("Schalte um auf MK3MAG."));
TX_Data[0] = 1;
send_Data('u', ADDRESS_NC, TX_Data, 1, false);
}
else
if (rb_SelNC->isChecked())
{
lb_Status->setText(tr("Schalte um auf NaviCtrl."));
TX_Data[0] = 0x1B;
TX_Data[1] = 0x1B;
TX_Data[2] = 0x55;
TX_Data[3] = 0xAA;
TX_Data[4] = 0x00;
TX_Data[5] = '\r';
send_Data('#', ADDRESS_NC, TX_Data, 6, false);
}
usleep(Sleep);
 
// qDebug("Select RB Hardware");
send_Data('v', ADDRESS_ALL, TX_Data, 0, true);
}
 
// Ticker-Event
///////////////
void MKTool::slot_Ticker()
326,7 → 397,7
}
break;
case 3 :
if (ac_MehrDaten->isChecked())
if (ac_FastDebug->isChecked())
{
TX_Data[0] = Settings->Data.Debug_Fast / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
418,11 → 489,13
{
if (ac_StartPlotter->isChecked())
{
lb_Status->setText(tr("Datenplotter gestartet."));
ac_StartPlotter->setText("Stop Plotter");
pb_StartPlotter->setText("Stop Plotter");
}
else
{
lb_Status->setText(tr("Datenplotter gestopt."));
ac_StartPlotter->setText("Start Plotter");
pb_StartPlotter->setText("Start Plotter");
}
468,30 → 541,72
}
}
 
void MKTool::slot_ac_MehrDaten() // DONE 0.71g
void MKTool::slot_ac_FastNavi() // DONE NC 0.12i
{
if (!ac_KeineDaten->isChecked())
if (!ac_NoNavi->isChecked())
{
if (ac_MehrDaten->isChecked())
if (ac_FastNavi->isChecked())
{
lb_Status->setText(tr("Fordere schnelle NaviDaten an."));
TX_Data[0] = Settings->Data.Navi_Fast / 10;
}
else
{
lb_Status->setText(tr("Fordere langsame NaviDaten an."));
TX_Data[0] = Settings->Data.Navi_Slow / 10;
}
send_Data('o', ADDRESS_NC, TX_Data, 1, false);
}
}
 
void MKTool::slot_ac_NoNavi() // DONE NC 0.12i
{
if (ac_NoNavi->isChecked())
{
lb_Status->setText(tr("NaviDaten abstellen."));
TX_Data[0] = 0;
}
else
{
if (ac_FastNavi->isChecked())
{
lb_Status->setText(tr("Fordere schnelle NaviDaten an."));
TX_Data[0] = Settings->Data.Navi_Fast / 10;
}
else
{
lb_Status->setText(tr("Fordere langsame NaviDaten an."));
TX_Data[0] = Settings->Data.Navi_Slow / 10;
}
}
send_Data('o', ADDRESS_NC, TX_Data, 1, false);
}
 
void MKTool::slot_ac_FastDebug() // DONE 0.71g
{
if (!ac_NoDebug->isChecked())
{
if (ac_FastDebug->isChecked())
{
lb_Status->setText(tr("Fordere schnelle DebugDaten an."));
TX_Data[0] = Settings->Data.Debug_Fast / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
}
else
{
lb_Status->setText(tr("Fordere langsame DebugDaten an."));
TX_Data[0] = Settings->Data.Debug_Slow / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
}
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
}
}
 
void MKTool::slot_ac_KeineDaten() // DONE 0.71g
void MKTool::slot_ac_NoDebug() // DONE 0.71g
{
if (ac_KeineDaten->isChecked())
if (ac_NoDebug->isChecked())
{
lb_Status->setText(tr("DebugDaten abstellen."));
TickerEvent[3] = false;
TX_Data[0] = 0;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
}
else
{
499,17 → 614,18
if (Mode.ID == ADDRESS_MK3MAG)
TickerEvent[3] = true;
 
if (ac_MehrDaten->isChecked())
if (ac_FastDebug->isChecked())
{
lb_Status->setText(tr("Fordere schnelle DebugDaten an."));
TX_Data[0] = Settings->Data.Debug_Fast / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
}
else
{
lb_Status->setText(tr("Fordere langsame DebugDaten an."));
TX_Data[0] = Settings->Data.Debug_Slow / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
}
}
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
}
 
void MKTool::slot_ac_About()
519,10 → 635,24
 
void MKTool::slot_ac_GetLabels() // DONE 0.71g
{
lb_Status->setText(tr("Analoglabels auslesen."));
TX_Data[0] = 0;
send_Data('a', ADDRESS_ALL, TX_Data, 1, true);
}
 
void MKTool::slot_ac_StartServer()
{
if (ac_StartServer->isChecked())
{
lb_Status->setText(tr("GoogleEarth-Server gestartet."));
Server->start_Server(Settings->Server.Port.toInt(), Settings);
}
else
{
lb_Status->setText(tr("GoogleEarth-Server gestopt."));
Server->stop_Server();
}
}
 
// Daten-Plotter
/////////////////
724,32 → 854,20
}
 
// Settings aus MK lesen / in MK schreiben
void MKTool::slot_GetParameter() // DONE 0.71g
void MKTool::slot_GetFCSettings() // DONE 0.71g
{
lb_Status->setText(tr("Lese FlightCtrl-Settings aus."));
TX_Data[0] = f_Settings->sb_Set->value();
TX_Data[1] = 0;
send_Data('q', ADDRESS_FC, TX_Data, 1);
}
 
void MKTool::slot_SetParameter() // DONE 0.71g
void MKTool::slot_SetFCSettings() // DONE 0.71g
{
// store_ParameterSet(sb_Set->value());
/*
char *TX_Data2 = f_Settings->GetFCSettings();
 
lb_Status->setText(tr("Schreibe FlightCtrl-Settings."));
 
TX_Data[0] = sb_Set->value();
TX_Data[1] = VERSION_SETTINGS;
 
for (int a = 0; a < MaxParameter; a++)
{
TX_Data[a + 2] = ParameterSet[sb_Set->value()][a];
}
 
// store_ParameterSet(sb_Set->value());
*/
 
char *TX_Data2 = f_Settings->SetParameter();
 
send_Data('s', ADDRESS_FC, TX_Data2, MaxParameter + 2, false);
}
 
797,7 → 915,7
void MKTool::slot_RecordCSV() // DONE 0.71g
{
if (!CSVFile->isOpen())
{
{
QString Filename = Settings->DIR.Logging + Mode.Hardware + " - " + QDate::currentDate().toString(("yyyy-MM-dd")) + " -- " + QTime::currentTime().toString("hh-mm") + ".csv";
 
CSVFile = new QFile(Filename);
824,18 → 942,20
CSVFile->open(QIODevice::Append | QIODevice::Text);
}
 
pb_Record->setIcon(Icons[6]);
pb_Record->setIcon(ToolBox::Icon(6));
pb_Record->setText("CSV Stop");
ac_RecordCSV->setIcon(Icons[6]);
ac_RecordCSV->setIcon(ToolBox::Icon(6));
ac_RecordCSV->setText("CSV Stop");
lb_Status->setText(tr("CVS-Record gestartet."));
}
else
{
CSVFile->close();
pb_Record->setIcon(Icons[7]);
pb_Record->setIcon(ToolBox::Icon(7));
pb_Record->setText("CSV Aufzeichnen");
ac_RecordCSV->setIcon(Icons[7]);
ac_RecordCSV->setIcon(ToolBox::Icon(7));
ac_RecordCSV->setText("CSV Aufzeichnen");
lb_Status->setText(tr("CVS-Record gestopt."));
}
}
 
895,6 → 1015,30
}
 
 
void MKTool::new_NaviData(sRxData RX)
{
Navi.Current.Longitude = ToolBox::Data2Long(RX.Decode, 0, true);
Navi.Current.Latitude = ToolBox::Data2Long(RX.Decode, 4, true);
Navi.Current.Altitude = ToolBox::Data2Long(RX.Decode, 8, true);
Navi.Target.Longitude = ToolBox::Data2Long(RX.Decode, 10, true);
Navi.Target.Latitude = ToolBox::Data2Long(RX.Decode, 14, true);
Navi.Target.Altitude = ToolBox::Data2Long(RX.Decode, 18, true);
 
sNaviString NaviString;
 
NaviString.Longitude = ToolBox::get_Float(Navi.Current.Longitude,10000000);
NaviString.Latitude = ToolBox::get_Float(Navi.Current.Latitude,10000000);
NaviString.Altitude = ToolBox::get_Float(Navi.Current.Altitude,1000);
 
Server->store_NaviString(NaviString);
 
/*
qDebug(NaviString.Longitude.toLatin1().data());
qDebug(NaviString.Latitude.toLatin1().data());
qDebug(NaviString.Altitude.toLatin1().data());
*/
}
 
// Seriel-Port Bereich, Befehle senden und Daten empfangen
//////////////////////////////////////////////////////////
 
938,10 → 1082,12
int Settings_ID = RX.Decode[0];
for (int a = 0; a < MaxParameter; a++)
{
ParameterSet[Settings_ID][a] = RX.Decode[a + 2];
FCSettings[a] = RX.Decode[a + 2];
}
//show_ParameterSet(Settings_ID);
f_Settings->show_ParameterSet(Settings_ID, ParameterSet);
f_Settings->show_FCSettings(Settings_ID, FCSettings);
f_Settings->pb_Read->setEnabled(true);
f_Settings->pb_Write->setEnabled(true);
}
else
{
966,6 → 1112,7
case 'O' : // NOT DONE 0.12h
if (ToolBox::Decode64(RX))
{
new_NaviData(RX);
}
break;
}
1056,18 → 1203,56
"Serielles Protokoll Inkompatibel. \nBitte neue Programmversion installieren,", QMessageBox::Ok);
}
 
if (ac_NoDebug->isChecked())
{
TX_Data[0] = 0;
}
else
if (ac_FastDebug->isChecked())
{
TX_Data[0] = Settings->Data.Debug_Fast / 10;
}
else
{
TX_Data[0] = Settings->Data.Debug_Slow / 10;
}
 
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
 
// Wenn MK3MAG dann andauernd Daten neu anfragen.
if (Mode.ID == ADDRESS_MK3MAG)
{
TickerEvent[3] = true;
rb_SelMag->setChecked(true);
}
 
TX_Data[0] = Settings->Data.Debug_Slow / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
// Wenn NaviCtrl dann hier.
if (Mode.ID == ADDRESS_NC)
{
rb_SelNC->setChecked(true);
 
if (ac_NoNavi->isChecked())
{
TX_Data[0] = 0;
}
else
if (ac_FastNavi->isChecked())
{
TX_Data[0] = Settings->Data.Navi_Fast / 10;
}
else
{
TX_Data[0] = Settings->Data.Navi_Slow / 10;
}
 
send_Data('o', ADDRESS_NC, TX_Data, 1, false);
}
 
 
// Wenn FlightCtrl dann Settings abfragen.
if (Mode.ID == ADDRESS_FC)
{
rb_SelFC->setChecked(true);
{
TX_Data[0] = 0xff;
TX_Data[1] = 0;
1155,18 → 1340,34
{
if (serialPort->isOpen())
{
TX_Data[0] = 0;
TX_Data[1] = 0;
TX_Data[2] = 0;
TX_Data[3] = 0;
send_Data('t', ADDRESS_FC, TX_Data, 4, false);
TX_Data[0] = Settings->Data.Debug_Off / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
usleep(Sleep);
 
if (Mode.ID == ADDRESS_NC)
{
TX_Data[0] = Settings->Data.Navi_Off / 10;
send_Data('o', ADDRESS_NC, TX_Data, 1, false);
usleep(Sleep);
}
 
if (Mode.ID == ADDRESS_NC)
{
TX_Data[0] = 0;
TX_Data[1] = 0;
TX_Data[2] = 0;
TX_Data[3] = 0;
send_Data('t', ADDRESS_FC, TX_Data, 4, false);
usleep(Sleep);
}
serialPort->close();
pb_Open->setText("Verbinden");
ac_ConnectTTY->setText("Verbinden");
pb_Open->setIcon(Icons[9]);
ac_ConnectTTY->setIcon(Icons[9]);
pb_Open->setIcon(ToolBox::Icon(9));
ac_ConnectTTY->setIcon(ToolBox::Icon(9));
 
le_Port->setEnabled(true);
 
Ticker->stop();
}
else
1186,6 → 1387,7
serialPort->open();
if (serialPort->isOpen())
{
le_Port->setEnabled(false);
serialPort->receiveData();
 
send_Data('v', ADDRESS_ALL, TX_Data, 0, true);
1192,8 → 1394,8
 
pb_Open->setText("Trennen");
ac_ConnectTTY->setText("Trennen");
pb_Open->setIcon(Icons[8]);
ac_ConnectTTY->setIcon(Icons[8]);
pb_Open->setIcon(ToolBox::Icon(8));
ac_ConnectTTY->setIcon(ToolBox::Icon(8));
 
Ticker->start(2000);
}
1205,26 → 1407,42
{
if (serialPort->isOpen() && AllowSend)
{
QString TX_Data = ToolBox::Encode64(Data, Length);
QByteArray Temp;
QString TX_Data;
 
TX_Data = QString("#") + (QString('a' + Address)) + QString(CMD) + TX_Data;
if (CMD != '#')
{
// qDebug("Send data..");
TX_Data = ToolBox::Encode64(Data, Length);
 
TX_Data = QString("#") + (QString('a' + Address)) + QString(CMD) + TX_Data;
 
// qDebug(TX_Data.toLatin1().data());
 
TX_Data = ToolBox::add_CRC(TX_Data) + '\r';
TX_Data = ToolBox::add_CRC(TX_Data) + '\r';
 
// qDebug(TX_Data.toLatin1().data());
 
if (Resend)
if (Resend)
{
LastSend = TX_Data;
TickerEvent[0] = true;
}
Temp = QByteArray(TX_Data.toUtf8());
}
else
{
LastSend = TX_Data;
TickerEvent[0] = true;
// qDebug("Send Raw..");
for (unsigned int a = 0; a < Length; a++)
{
Temp[a] = Data[a];
// qDebug(QString("%1").arg(Temp[a]).toLatin1().data());
}
}
 
QByteArray Temp(TX_Data.toUtf8());
serialPort->sendData(Temp);
 
if (cb_ShowSend->isChecked())
if (cb_ShowSend->isChecked() && (CMD != '#'))
{
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
te_RX->insertHtml("<span style='color:#8b0000;'>" + TX_Data + "<br /></span>");
/QMK-Groundstation/trunk/Forms/mktool.h
38,6 → 38,7
 
#include "../SerialPort/ManageSerialPort.h"
#include "../cSettings.h"
#include "../Classes/cServer.h"
 
class QextSerialPort;
 
51,19 → 52,23
 
private:
bool AllowSend;
 
// Object für Serielport
ManageSerialPort *serialPort;
 
// Settings-Object
// Settings-Object (Programmeinstellungen)
cSettings *Settings;
 
// Settings-Widget
// Settings-Widget (FC-Settings)
wdg_Settings *f_Settings;
 
// HTTp-Server-Object für Google Earth
cServer *Server;
 
// Default-Ticker
QTimer *Ticker;
 
// Die Tabs des Hauptfensters
// Kopie der Tabs des Hauptfensters
QWidget *TabWidgets[6];
 
// Analogwert-Beschreibungen
84,19 → 89,16
bool TickerEvent[MaxTickerEvents];
bool TickerDiv;
 
// Aktuelle und Max-Anzahl der LCD-Seiten
int LCD_Page;
int LCD_MAX_Page;
 
// Alle Icons
QIcon Icons[30];
 
// QByteArray allDataReceived;
 
// Object für das Datenfile;
QFile *CSVFile;
 
sMode Mode;
sRxData RxData;
sNaviData Navi;
 
QString RXS;
QString LastSend;
104,9 → 106,11
// Softwareupdate
QProcess *Update;
 
// Sendedatenbuffer
char TX_Data[150];
 
int ParameterSet[11][MaxParameter];
// FC-Settings
int FCSettings[MaxParameter];
 
// Programm Initialisieren
void init_GUI();
113,7 → 117,6
void init_Objects();
void init_Connections();
void init_Arrays();
void init_Icons();
void init_Plot();
 
// Daten-Plotter
120,6 → 123,8
void update_Plot();
void config_Plot();
 
void new_NaviData(sRxData RX);
 
// Daten Senden, Empfangen und verarbeiten
void send_Data(char CMD, int Address, char Data[150],unsigned int Length, bool Resend = true);
void new_RXData(sRxData RX);
132,12 → 137,21
void set_Preferences();
 
private slots:
void slot_ac_Hardware();
void slot_rb_Hardware();
 
void slot_ac_StartServer();
 
void slot_Test();
 
void slot_ac_Config();
void slot_ac_Preferences();
void slot_ac_StartPlotter();
void slot_ac_View();
void slot_ac_MehrDaten();
void slot_ac_KeineDaten();
void slot_ac_FastDebug();
void slot_ac_NoDebug();
void slot_ac_FastNavi();
void slot_ac_NoNavi();
void slot_ac_About();
void slot_ac_GetLabels();
void slot_ac_Motortest();
146,13 → 160,14
// Default-Ticker
void slot_Ticker();
 
// LCD-Seite vor / zurück
void slot_LCD_UP();
void slot_LCD_DOWN();
 
void slot_Motortest(int Motor1, int Motor2, int Motor3, int Motor4);
 
// Firmeware-Update
void slot_pb_Update();
 
void slot_UpdateShell();
 
// Seriell-Port Slots
165,8 → 180,9
 
void slot_ScrollPlot(int Pos);
 
void slot_GetParameter();
void slot_SetParameter();
// FC-Settings lesen / Schreiben
void slot_GetFCSettings();
void slot_SetFCSettings();
};
 
#endif
/QMK-Groundstation/trunk/Forms/mktool.ui
5,8 → 5,8
<rect>
<x>0</x>
<y>0</y>
<width>766</width>
<height>414</height>
<width>785</width>
<height>415</height>
</rect>
</property>
<property name="windowTitle" >
1030,7 → 1030,7
<string>Terminal </string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2" >
<item row="0" column="0" colspan="5" >
<item row="0" column="0" colspan="8" >
<widget class="QTextEdit" name="te_RX" >
<property name="font" >
<font>
1047,17 → 1047,17
</property>
</widget>
</item>
<item row="1" column="0" >
<item row="1" column="1" >
<widget class="QCheckBox" name="cb_ShowData" >
<property name="text" >
<string>Datenpackete anzeigen </string>
<string>Datenpackete </string>
</property>
</widget>
</item>
<item row="1" column="1" >
<item row="1" column="2" >
<widget class="QCheckBox" name="cb_ShowMSG" >
<property name="text" >
<string>Meldungen anzeigen </string>
<string>Meldungen </string>
</property>
<property name="checked" >
<bool>true</bool>
1064,7 → 1064,7
</property>
</widget>
</item>
<item row="1" column="4" >
<item row="1" column="6" >
<spacer name="horizontalSpacer_13" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
1077,7 → 1077,7
</property>
</spacer>
</item>
<item row="1" column="3" >
<item row="1" column="4" >
<widget class="QCheckBox" name="cb_ShowAlways" >
<property name="text" >
<string>auch wenn ausgeblendet </string>
1084,13 → 1084,27
</property>
</widget>
</item>
<item row="1" column="2" >
<item row="1" column="3" >
<widget class="QCheckBox" name="cb_ShowSend" >
<property name="text" >
<string>gesendete Daten anzeigen</string>
<string>gesendete Daten </string>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Anzeigen: </string>
</property>
</widget>
</item>
<item row="1" column="7" >
<widget class="QPushButton" name="pb_Clear" >
<property name="text" >
<string>Löschen</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="Tab_4" >
1146,6 → 1160,9
<property name="alignment" >
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly" >
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3" >
1173,6 → 1190,9
<property name="alignment" >
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3" >
1200,6 → 1220,9
<property name="alignment" >
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3" >
1227,6 → 1250,9
<property name="alignment" >
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly" >
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0" >
1644,34 → 1670,71
<normaloff>:/Actions/Images/22X22/network-disconnect.png</normaloff>:/Actions/Images/22X22/network-disconnect.png</iconset>
</property>
</widget>
<widget class="QComboBox" name="cb_Hardware" >
<property name="enabled" >
<bool>false</bool>
<widget class="QLineEdit" name="IN" >
<property name="geometry" >
<rect>
<x>0</x>
<y>270</y>
<width>751</width>
<height>31</height>
</rect>
</property>
<property name="text" >
<string>#cOD{br>Lozm^zgC]===M=============================================================\======>t=====?q>|=E====D============z^</string>
</property>
</widget>
<widget class="QPushButton" name="Dec" >
<property name="geometry" >
<rect>
<x>10</x>
<y>30</y>
<width>101</width>
<height>27</height>
<x>0</x>
<y>240</y>
<width>100</width>
<height>26</height>
</rect>
</property>
<item>
<property name="text" >
<string>FlightCtrl</string>
</property>
</item>
<item>
<property name="text" >
<string>NaviCtrl</string>
</property>
</item>
<item>
<property name="text" >
<string>MK3Mag</string>
</property>
</item>
<property name="text" >
<string>Decode</string>
</property>
</widget>
<widget class="QRadioButton" name="rb_SelFC" >
<property name="geometry" >
<rect>
<x>250</x>
<y>90</y>
<width>91</width>
<height>25</height>
</rect>
</property>
<property name="text" >
<string>FlightCtrl</string>
</property>
</widget>
<widget class="QRadioButton" name="rb_SelNC" >
<property name="geometry" >
<rect>
<x>360</x>
<y>90</y>
<width>81</width>
<height>25</height>
</rect>
</property>
<property name="text" >
<string>NaviCtrl</string>
</property>
</widget>
<widget class="QRadioButton" name="rb_SelMag" >
<property name="geometry" >
<rect>
<x>460</x>
<y>90</y>
<width>81</width>
<height>25</height>
</rect>
</property>
<property name="text" >
<string>MK3Mag</string>
</property>
</widget>
</widget>
</widget>
</item>
1682,7 → 1745,7
<rect>
<x>0</x>
<y>0</y>
<width>766</width>
<width>785</width>
<height>25</height>
</rect>
</property>
1715,8 → 1778,8
<addaction name="ac_RecordCSV" />
<addaction name="ac_StartPlotter" />
<addaction name="separator" />
<addaction name="ac_MehrDaten" />
<addaction name="ac_KeineDaten" />
<addaction name="ac_FastDebug" />
<addaction name="ac_NoDebug" />
<addaction name="separator" />
<addaction name="ac_GetLabels" />
</widget>
1747,9 → 1810,9
<property name="title" >
<string>Hardware</string>
</property>
<addaction name="actionFlightCtrl" />
<addaction name="actionNaviCtrl" />
<addaction name="actionMK3Mag" />
<addaction name="ac_SelFC" />
<addaction name="ac_SelNC" />
<addaction name="ac_SelMag" />
</widget>
<widget class="QMenu" name="menu_Navi_Daten" >
<property name="title" >
1756,6 → 1819,9
<string>&amp;Navi-Daten</string>
</property>
<addaction name="ac_StartServer" />
<addaction name="separator" />
<addaction name="ac_FastNavi" />
<addaction name="ac_NoNavi" />
</widget>
<addaction name="menuProgramm" />
<addaction name="menuHardware" />
1793,9 → 1859,9
</attribute>
<addaction name="ac_ConnectTTY" />
<addaction name="separator" />
<addaction name="ac_StartPlotter" />
<addaction name="ac_FastDebug" />
<addaction name="ac_RecordCSV" />
<addaction name="ac_StartPlotter" />
<addaction name="ac_MehrDaten" />
<addaction name="separator" />
<addaction name="ac_Motortest" />
<addaction name="separator" />
1870,7 → 1936,7
<string>Datenfelder wählen</string>
</property>
</action>
<action name="ac_MehrDaten" >
<action name="ac_FastDebug" >
<property name="checkable" >
<bool>true</bool>
</property>
1912,7 → 1978,7
<bool>false</bool>
</property>
<property name="text" >
<string>Parameter</string>
<string>FC-Settings</string>
</property>
</action>
<action name="ac_View3" >
1971,40 → 2037,31
<string>Motortest</string>
</property>
</action>
<action name="actionFlightCtrl" >
<action name="ac_SelFC" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="enabled" >
<bool>false</bool>
</property>
<property name="text" >
<string>FlightCtrl</string>
</property>
</action>
<action name="actionNaviCtrl" >
<action name="ac_SelNC" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="enabled" >
<bool>false</bool>
</property>
<property name="text" >
<string>NaviCtrl</string>
</property>
</action>
<action name="actionMK3Mag" >
<action name="ac_SelMag" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="enabled" >
<bool>false</bool>
</property>
<property name="text" >
<string>MK3Mag</string>
</property>
</action>
<action name="ac_KeineDaten" >
<action name="ac_NoDebug" >
<property name="checkable" >
<bool>true</bool>
</property>
2024,6 → 2081,26
<string>Google Earth Server</string>
</property>
</action>
<action name="ac_FastNavi" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="icon" >
<iconset resource="../MKTool.qrc" >
<normaloff>:/Actions/Images/22X22/clock.png</normaloff>:/Actions/Images/22X22/clock.png</iconset>
</property>
<property name="text" >
<string>Schnelle Navi-Daten</string>
</property>
</action>
<action name="ac_NoNavi" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="text" >
<string>Navidaten abschalten</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
2065,8 → 2142,8
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel" >
<x>657</x>
<y>399</y>
<x>756</x>
<y>370</y>
</hint>
<hint type="destinationlabel" >
<x>-1</x>
2081,8 → 2158,8
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel" >
<x>659</x>
<y>385</y>
<x>663</x>
<y>117</y>
</hint>
<hint type="destinationlabel" >
<x>-1</x>
2097,8 → 2174,8
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel" >
<x>249</x>
<y>385</y>
<x>253</x>
<y>117</y>
</hint>
<hint type="destinationlabel" >
<x>-1</x>
2113,8 → 2190,8
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel" >
<x>506</x>
<y>385</y>
<x>510</x>
<y>117</y>
</hint>
<hint type="destinationlabel" >
<x>-1</x>
2122,5 → 2199,117
</hint>
</hints>
</connection>
<connection>
<sender>rb_SelFC</sender>
<signal>toggled(bool)</signal>
<receiver>ac_SelFC</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>299</x>
<y>194</y>
</hint>
<hint type="destinationlabel" >
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
<connection>
<sender>rb_SelMag</sender>
<signal>toggled(bool)</signal>
<receiver>ac_SelMag</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>504</x>
<y>194</y>
</hint>
<hint type="destinationlabel" >
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
<connection>
<sender>rb_SelNC</sender>
<signal>toggled(bool)</signal>
<receiver>ac_SelNC</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>404</x>
<y>194</y>
</hint>
<hint type="destinationlabel" >
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
<connection>
<sender>ac_SelFC</sender>
<signal>triggered(bool)</signal>
<receiver>rb_SelFC</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel" >
<x>299</x>
<y>194</y>
</hint>
</hints>
</connection>
<connection>
<sender>ac_SelMag</sender>
<signal>triggered(bool)</signal>
<receiver>rb_SelMag</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel" >
<x>504</x>
<y>194</y>
</hint>
</hints>
</connection>
<connection>
<sender>ac_SelNC</sender>
<signal>triggered(bool)</signal>
<receiver>rb_SelNC</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel" >
<x>404</x>
<y>194</y>
</hint>
</hints>
</connection>
<connection>
<sender>pb_Clear</sender>
<signal>clicked()</signal>
<receiver>te_RX</receiver>
<slot>clear()</slot>
<hints>
<hint type="sourcelabel" >
<x>736</x>
<y>372</y>
</hint>
<hint type="destinationlabel" >
<x>392</x>
<y>225</y>
</hint>
</hints>
</connection>
</connections>
</ui>
/QMK-Groundstation/trunk/Forms/wdg_Settings.cpp
20,12 → 20,12
#include <QSettings>
 
#include "wdg_Settings.h"
#include "../ToolBox.h"
 
wdg_Settings::wdg_Settings(QWidget *parent) : QWidget(parent)
{
setupUi(this);
 
init_Icons();
connect(pb_Load, SIGNAL(clicked()), this, SLOT(slot_LoadParameter()));
connect(pb_Save, SIGNAL(clicked()), this, SLOT(slot_SaveParameter()));
 
59,50 → 59,26
connect(sb_11_3, SIGNAL(valueChanged(int)), this, SLOT(slot_ValuetoLED17(int)));
}
 
void wdg_Settings::init_Icons()
{
Icons[0].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledred.png")), QIcon::Normal, QIcon::Off);
Icons[1].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledyellow.png")), QIcon::Normal, QIcon::Off);
Icons[3].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledyellow.png")), QIcon::Normal, QIcon::Off);
Icons[4].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledoff.png")), QIcon::Normal, QIcon::Off);
 
Icons[5].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/application-exit.png")), QIcon::Normal, QIcon::Off);
Icons[6].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/media-playback-stop.png")), QIcon::Normal, QIcon::Off);
Icons[7].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/media-record.png")), QIcon::Normal, QIcon::Off);
Icons[8].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/network-connect.png")), QIcon::Normal, QIcon::Off);
Icons[9].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/network-disconnect.png")), QIcon::Normal, QIcon::Off);
Icons[10].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/utilities-system-monitor.png")), QIcon::Normal, QIcon::Off);
 
Icons[20].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-up-double.png")), QIcon::Normal, QIcon::Off);
Icons[21].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-up.png")), QIcon::Normal, QIcon::Off);
Icons[22].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-down-double.png")), QIcon::Normal, QIcon::Off);
Icons[23].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-down.png")), QIcon::Normal, QIcon::Off);
Icons[24].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-left-double.png")), QIcon::Normal, QIcon::Off);
Icons[25].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-left.png")), QIcon::Normal, QIcon::Off);
Icons[26].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-right-double.png")), QIcon::Normal, QIcon::Off);
Icons[27].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-right.png")), QIcon::Normal, QIcon::Off);
}
 
void wdg_Settings::set_LED(QToolButton *ToolButton, bool On)
{
if (ToolButton->text() == QString("0") && On)
{
ToolButton->setIcon(Icons[0]);
ToolButton->setIcon(ToolBox::Icon(0));
ToolButton->setText("1");
}
else if (ToolButton->text() == QString("1") && !On)
{
ToolButton->setIcon(Icons[4]);
ToolButton->setIcon(ToolBox::Icon(4));
ToolButton->setText("0");
}
else if (ToolButton->text() == QString("00") && On)
{
ToolButton->setIcon(Icons[0]);
ToolButton->setIcon(ToolBox::Icon(0));
ToolButton->setText("11");
}
else if (ToolButton->text() == QString("11") && !On)
{
ToolButton->setIcon(Icons[4]);
ToolButton->setIcon(ToolBox::Icon(4));
ToolButton->setText("00");
}
}
256,12 → 232,12
{
if (tb_9_6->text() == QString("0"))
{
tb_9_6->setIcon(Icons[20]);
tb_9_6->setIcon(ToolBox::Icon(20));
tb_9_6->setText("1");
}
else
{
tb_9_6->setIcon(Icons[21]);
tb_9_6->setIcon(ToolBox::Icon(21));
tb_9_6->setText("0");
}
}
270,12 → 246,12
{
if (tb_9_7->text() == QString("0"))
{
tb_9_7->setIcon(Icons[22]);
tb_9_7->setIcon(ToolBox::Icon(22));
tb_9_7->setText("1");
}
else
{
tb_9_7->setIcon(Icons[23]);
tb_9_7->setIcon(ToolBox::Icon(23));
tb_9_7->setText("0");
}
}
284,12 → 260,12
{
if (tb_9_8->text() == QString("0"))
{
tb_9_8->setIcon(Icons[24]);
tb_9_8->setIcon(ToolBox::Icon(24));
tb_9_8->setText("1");
}
else
{
tb_9_8->setIcon(Icons[25]);
tb_9_8->setIcon(ToolBox::Icon(25));
tb_9_8->setText("0");
}
}
298,12 → 274,12
{
if (tb_9_9->text() == QString("0"))
{
tb_9_9->setIcon(Icons[26]);
tb_9_9->setIcon(ToolBox::Icon(26));
tb_9_9->setText("1");
}
else
{
tb_9_9->setIcon(Icons[27]);
tb_9_9->setIcon(ToolBox::Icon(27));
tb_9_9->setText("0");
}
}
423,20 → 399,21
Setting.endGroup();
 
Setting.beginGroup("NaviCtrl");
ParameterSet[Set][P_NAV_GPS_MODE] = Setting.value("GPS_ModeControl", 253).toInt();
ParameterSet[Set][P_NAV_GPS_GAIN] = Setting.value("GPS_Gain", 100).toInt();
ParameterSet[Set][P_NAV_GPS_P] = Setting.value("GPS_P", 90).toInt();
ParameterSet[Set][P_NAV_GPS_I] = Setting.value("GPS_I", 90).toInt();
ParameterSet[Set][P_NAV_GPS_D] = Setting.value("GPS_D", 90).toInt();
ParameterSet[Set][P_NAV_GPS_ACC] = Setting.value("GPS_Acc", 0).toInt();
ParameterSet[Set][P_NAV_GPS_MIN] = Setting.value("GPS_MinSat", 6).toInt();
ParameterSet[Set][P_NAV_STICK_THRE] = Setting.value("GPS_StickThreshold", 8).toInt();
ParameterSet[Set][P_NAV_WIND_CORR] = Setting.value("GPS_WindCorrection", 90).toInt();
ParameterSet[Set][P_NAV_SPEED_COMP] = Setting.value("GPS_SpeedCompensation", 30).toInt();
ParameterSet[Set][P_NAV_RADIUS] = Setting.value("GPS_MaxRadius", 100).toInt();
ParameterSet[Set][P_NAV_GPS_MODE] = Setting.value("GPS_ModeControl", 253).toInt();
ParameterSet[Set][P_NAV_GPS_GAIN] = Setting.value("GPS_Gain", 100).toInt();
ParameterSet[Set][P_NAV_GPS_P] = Setting.value("GPS_P", 90).toInt();
ParameterSet[Set][P_NAV_GPS_I] = Setting.value("GPS_I", 90).toInt();
ParameterSet[Set][P_NAV_GPS_D] = Setting.value("GPS_D", 90).toInt();
ParameterSet[Set][P_NAV_GPS_ACC] = Setting.value("GPS_Acc", 0).toInt();
ParameterSet[Set][P_NAV_GPS_MIN] = Setting.value("GPS_MinSat", 6).toInt();
ParameterSet[Set][P_NAV_STICK_THRE] = Setting.value("GPS_StickThreshold", 8).toInt();
ParameterSet[Set][P_NAV_WIND_CORR] = Setting.value("GPS_WindCorrection", 90).toInt();
ParameterSet[Set][P_NAV_SPEED_COMP] = Setting.value("GPS_SpeedCompensation", 30).toInt();
ParameterSet[Set][P_NAV_RADIUS] = Setting.value("GPS_MaxRadius", 100).toInt();
ParameterSet[Set][P_NAV_ANGLE_LIMIT] = Setting.value("GPS_AngleLimit", 60).toInt();
Setting.endGroup();
 
show_ParameterSet(Set, ParameterSet);
show_FCSettings(Set, ParameterSet[Set]);
}
}
 
716,11 → 693,12
Setting.setValue("GPS_WindCorrection", ParameterSet[Set][P_NAV_WIND_CORR]);
Setting.setValue("GPS_SpeedCompensation", ParameterSet[Set][P_NAV_SPEED_COMP]);
Setting.setValue("GPS_MaxRadius", ParameterSet[Set][P_NAV_RADIUS]);
Setting.setValue("GPS_AngleLimit", ParameterSet[Set][P_NAV_ANGLE_LIMIT]);
Setting.endGroup();
}
}
 
char *wdg_Settings::SetParameter() // DONE 0.71g
char *wdg_Settings::GetFCSettings() // DONE 0.71g
{
store_ParameterSet(sb_Set->value());
 
745,24 → 723,24
{
Set = Set;
 
if (Settings[Wert] <= 250)
if (Wert <= 250)
{
Combo->setItemText(4, QString("%1").arg(Settings[Wert]));
Combo->setItemText(4, QString("%1").arg(Wert));
Combo->setCurrentIndex(4);
}
else
{
Combo->setCurrentIndex(Settings[Wert] - 251);
Combo->setCurrentIndex(Wert - 251);
}
return Combo;
}
 
void wdg_Settings::show_ParameterSet(int Set, int ParamSet[11][MaxParameter]) // DONE 0.71h
void wdg_Settings::show_FCSettings(int Set, int FCSettings[MaxParameter]) // DONE 0.71h
{
memcpy(Settings, ParamSet[Set], sizeof(ParamSet[Set]));
memcpy(ParameterSet, ParamSet, sizeof(ParamSet));
memcpy(Settings, FCSettings, sizeof(FCSettings));
// memcpy(ParameterSet, ParamSet, sizeof(ParamSet));
 
memcpy(ParameterSet[Set], ParamSet[Set], sizeof(ParamSet[Set]));
memcpy(ParameterSet[Set], FCSettings, sizeof(FCSettings));
 
sb_Set->setValue(Set);
 
769,169 → 747,169
char Name[12];
for (int a = 0; a < 12; a++)
{
Name[a] = ParameterSet[Set][P_NAME+a];
Name[a] = FCSettings[P_NAME+a];
}
le_SetName->setText(QString(Name));
 
// Seite 1
{
cb_1_1->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x01);
cb_1_2->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x02);
cb_1_3->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x04);
cb_1_4->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x08);
cb_1_5->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x10);
cb_1_6->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x20);
cb_1_7->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x40);
cb_1_8->setChecked(ParameterSet[Set][P_GLOBAL_CONF] & 0x80);
cb_1_1->setChecked(FCSettings[P_GLOBAL_CONF] & 0x01);
cb_1_2->setChecked(FCSettings[P_GLOBAL_CONF] & 0x02);
cb_1_3->setChecked(FCSettings[P_GLOBAL_CONF] & 0x04);
cb_1_4->setChecked(FCSettings[P_GLOBAL_CONF] & 0x08);
cb_1_5->setChecked(FCSettings[P_GLOBAL_CONF] & 0x10);
cb_1_6->setChecked(FCSettings[P_GLOBAL_CONF] & 0x20);
cb_1_7->setChecked(FCSettings[P_GLOBAL_CONF] & 0x40);
cb_1_8->setChecked(FCSettings[P_GLOBAL_CONF] & 0x80);
}
// Seite 2
{
sb_2_1->setValue(ParameterSet[Set][P_KANAL_NICK]);
sb_2_2->setValue(ParameterSet[Set][P_KANAL_ROLL]);
sb_2_3->setValue(ParameterSet[Set][P_KANAL_GAS]);
sb_2_4->setValue(ParameterSet[Set][P_KANAL_GIER]);
sb_2_5->setValue(ParameterSet[Set][P_KANAL_POTI1]);
sb_2_6->setValue(ParameterSet[Set][P_KANAL_POTI2]);
sb_2_7->setValue(ParameterSet[Set][P_KANAL_POTI3]);
sb_2_8->setValue(ParameterSet[Set][P_KANAL_POTI4]);
sb_2_1->setValue(FCSettings[P_KANAL_NICK]);
sb_2_2->setValue(FCSettings[P_KANAL_ROLL]);
sb_2_3->setValue(FCSettings[P_KANAL_GAS]);
sb_2_4->setValue(FCSettings[P_KANAL_GIER]);
sb_2_5->setValue(FCSettings[P_KANAL_POTI1]);
sb_2_6->setValue(FCSettings[P_KANAL_POTI2]);
sb_2_7->setValue(FCSettings[P_KANAL_POTI3]);
sb_2_8->setValue(FCSettings[P_KANAL_POTI4]);
}
// Seite 3
{
sb_3_1->setValue(ParameterSet[Set][P_STICK_P]);
sb_3_2->setValue(ParameterSet[Set][P_STICK_D]);
cb_3_3 = setCombo(cb_3_3, Set, P_GIER_P);
cb_3_4 = setCombo(cb_3_4, Set, P_EXTERNAL);
sb_3_1->setValue(FCSettings[P_STICK_P]);
sb_3_2->setValue(FCSettings[P_STICK_D]);
cb_3_3 = setCombo(cb_3_3, Set, FCSettings[P_GIER_P]);
cb_3_4 = setCombo(cb_3_4, Set, FCSettings[P_EXTERNAL]);
}
// Seite 4
{
cb_4_1 = setCombo(cb_4_1, Set, P_MAXHOEHE);
sb_4_2->setValue(ParameterSet[Set][P_MIN_GAS]);
cb_4_3 = setCombo(cb_4_3, Set, P_HOEHE_P);
cb_4_4 = setCombo(cb_4_4, Set, P_DRUCK_D);
cb_4_5 = setCombo(cb_4_5, Set, P_HOEHE_ACC);
sb_4_6->setValue(ParameterSet[Set][P_HOEHE_GAIN]);
cb_4_7->setChecked(ParameterSet[Set][P_LOOP_CONFIG] & 0x10);
cb_4_1 = setCombo(cb_4_1, Set, FCSettings[P_MAXHOEHE]);
sb_4_2->setValue(FCSettings[P_MIN_GAS]);
cb_4_3 = setCombo(cb_4_3, Set, FCSettings[P_HOEHE_P]);
cb_4_4 = setCombo(cb_4_4, Set, FCSettings[P_DRUCK_D]);
cb_4_5 = setCombo(cb_4_5, Set, FCSettings[P_HOEHE_ACC]);
sb_4_6->setValue(FCSettings[P_HOEHE_GAIN]);
cb_4_7->setChecked(FCSettings[P_LOOP_CONFIG] & 0x10);
}
// Seite 5
{
cb_5_1 = setCombo(cb_5_1, Set, P_GYRO_P);
cb_5_2 = setCombo(cb_5_2, Set, P_GYRO_I);
cb_5_3 = setCombo(cb_5_3, Set, P_DYNAMIC_STAB);
sb_5_4->setValue(ParameterSet[Set][P_GYRO_ACC_FAKTOR]);
sb_5_5->setValue(ParameterSet[Set][P_GYRO_ACC_ABGL]);
cb_5_6 = setCombo(cb_5_6, Set, P_FAKTOR_I);
sb_5_7->setValue(ParameterSet[Set][P_DRIFT_KOMP]);
cb_5_1 = setCombo(cb_5_1, Set, FCSettings[P_GYRO_P]);
cb_5_2 = setCombo(cb_5_2, Set, FCSettings[P_GYRO_I]);
cb_5_3 = setCombo(cb_5_3, Set, FCSettings[P_DYNAMIC_STAB]);
sb_5_4->setValue(FCSettings[P_GYRO_ACC_FAKTOR]);
sb_5_5->setValue(FCSettings[P_GYRO_ACC_ABGL]);
cb_5_6 = setCombo(cb_5_6, Set, FCSettings[P_FAKTOR_I]);
sb_5_7->setValue(FCSettings[P_DRIFT_KOMP]);
}
// Seite 6
{
cb_6_1 = setCombo(cb_6_1, Set, P_SERVO_NICK_CONT);
sb_6_2->setValue(ParameterSet[Set][P_SERVO_NICK_COMP]);
sb_6_3->setValue(ParameterSet[Set][P_SERVO_NICK_MIN]);
sb_6_4->setValue(ParameterSet[Set][P_SERVO_NICK_MAX]);
sb_6_5->setValue(ParameterSet[Set][P_SERVO_NICK_REFR]);
cb_6_6->setChecked(ParameterSet[Set][P_SERVO_NICK_COMPI]);
cb_6_1 = setCombo(cb_6_1, Set, FCSettings[P_SERVO_NICK_CONT]);
sb_6_2->setValue(FCSettings[P_SERVO_NICK_COMP]);
sb_6_3->setValue(FCSettings[P_SERVO_NICK_MIN]);
sb_6_4->setValue(FCSettings[P_SERVO_NICK_MAX]);
sb_6_5->setValue(FCSettings[P_SERVO_NICK_REFR]);
cb_6_6->setChecked(FCSettings[P_SERVO_NICK_COMPI]);
}
// Seite 7
{
sb_7_1->setValue(ParameterSet[Set][P_GAS_MIN]);
sb_7_2->setValue(ParameterSet[Set][P_GAS_MAX]);
cb_7_3 = setCombo(cb_7_3, Set, P_KOMPASS_WIRKUNG);
sb_7_4->setValue(ParameterSet[Set][P_UNTERSPANNUNG]);
sb_7_5->setValue(ParameterSet[Set][P_NOTGASZEIT]);
sb_7_6->setValue(ParameterSet[Set][P_NOTGAS]);
sb_7_1->setValue(FCSettings[P_GAS_MIN]);
sb_7_2->setValue(FCSettings[P_GAS_MAX]);
cb_7_3 = setCombo(cb_7_3, Set, FCSettings[P_KOMPASS_WIRKUNG]);
sb_7_4->setValue(FCSettings[P_UNTERSPANNUNG]);
sb_7_5->setValue(FCSettings[P_NOTGASZEIT]);
sb_7_6->setValue(FCSettings[P_NOTGAS]);
}
// Seite 8
{
cb_8_1 = setCombo(cb_8_1, Set, P_ACHS_KOPPLUNG);
cb_8_2 = setCombo(cb_8_2, Set, P_ACHS_GKOPPLUNG);
cb_8_1 = setCombo(cb_8_1, Set, FCSettings[P_ACHS_KOPPLUNG]);
cb_8_2 = setCombo(cb_8_2, Set, FCSettings[P_ACHS_GKOPPLUNG]);
}
// Seite 9
{
if (ParameterSet[Set][P_LOOP_CONFIG] & 0x01)
if (FCSettings[P_LOOP_CONFIG] & 0x01)
{
tb_9_6->setIcon(Icons[20]);
tb_9_6->setIcon(ToolBox::Icon(20));
tb_9_6->setText("1");
}
else
{
tb_9_6->setIcon(Icons[21]);
tb_9_6->setIcon(ToolBox::Icon(21));
tb_9_6->setText("0");
}
 
if (ParameterSet[Set][P_LOOP_CONFIG] & 0x02)
if (FCSettings[P_LOOP_CONFIG] & 0x02)
{
tb_9_7->setIcon(Icons[22]);
tb_9_7->setIcon(ToolBox::Icon(22));
tb_9_7->setText("1");
}
else
{
tb_9_7->setIcon(Icons[23]);
tb_9_7->setIcon(ToolBox::Icon(23));
tb_9_7->setText("0");
}
 
if (ParameterSet[Set][P_LOOP_CONFIG] & 0x04)
if (FCSettings[P_LOOP_CONFIG] & 0x04)
{
tb_9_8->setIcon(Icons[24]);
tb_9_8->setIcon(ToolBox::Icon(24));
tb_9_8->setText("1");
}
else
{
tb_9_8->setIcon(Icons[25]);
tb_9_8->setIcon(ToolBox::Icon(25));
tb_9_8->setText("0");
}
 
if (ParameterSet[Set][P_LOOP_CONFIG] & 0x08)
if (FCSettings[P_LOOP_CONFIG] & 0x08)
{
tb_9_9->setIcon(Icons[26]);
tb_9_9->setIcon(ToolBox::Icon(26));
tb_9_9->setText("1");
}
else
{
tb_9_9->setIcon(Icons[27]);
tb_9_9->setIcon(ToolBox::Icon(27));
tb_9_9->setText("0");
}
 
cb_9_1 = setCombo(cb_9_1, Set, P_LOOP_GAS_LIMIT);
sb_9_2->setValue(ParameterSet[Set][P_LOOP_THRESHOLD]);
sb_9_3->setValue(ParameterSet[Set][P_WINKEL_NICK]);
sb_9_4->setValue(ParameterSet[Set][P_LOOP_HYSTERESE]);
sb_9_5->setValue(ParameterSet[Set][P_WINKEL_ROLL]);
cb_9_1 = setCombo(cb_9_1, Set, FCSettings[P_LOOP_GAS_LIMIT]);
sb_9_2->setValue(FCSettings[P_LOOP_THRESHOLD]);
sb_9_3->setValue(FCSettings[P_WINKEL_NICK]);
sb_9_4->setValue(FCSettings[P_LOOP_HYSTERESE]);
sb_9_5->setValue(FCSettings[P_WINKEL_ROLL]);
}
// Seite 10
{
cb_10_1 = setCombo(cb_10_1, Set, P_USER_1);
cb_10_2 = setCombo(cb_10_2, Set, P_USER_2);
cb_10_3 = setCombo(cb_10_3, Set, P_USER_3);
cb_10_4 = setCombo(cb_10_4, Set, P_USER_4);
cb_10_5 = setCombo(cb_10_5, Set, P_USER_5);
cb_10_6 = setCombo(cb_10_6, Set, P_USER_6);
cb_10_7 = setCombo(cb_10_7, Set, P_USER_7);
cb_10_8 = setCombo(cb_10_8, Set, P_USER_8);
cb_10_1 = setCombo(cb_10_1, Set, FCSettings[P_USER_1]);
cb_10_2 = setCombo(cb_10_2, Set, FCSettings[P_USER_2]);
cb_10_3 = setCombo(cb_10_3, Set, FCSettings[P_USER_3]);
cb_10_4 = setCombo(cb_10_4, Set, FCSettings[P_USER_4]);
cb_10_5 = setCombo(cb_10_5, Set, FCSettings[P_USER_5]);
cb_10_6 = setCombo(cb_10_6, Set, FCSettings[P_USER_6]);
cb_10_7 = setCombo(cb_10_7, Set, FCSettings[P_USER_7]);
cb_10_8 = setCombo(cb_10_8, Set, FCSettings[P_USER_8]);
}
// Seite 11
{
sb_11_1->setValue(ParameterSet[Set][P_J16_BITMASK]);
cb_11_2 = setCombo(cb_11_2, Set, P_J16_TIMING);
sb_11_3->setValue(ParameterSet[Set][P_J17_BITMASK]);
cb_11_4 = setCombo(cb_11_4, Set, P_J17_TIMING);
sb_11_1->setValue(FCSettings[P_J16_BITMASK]);
cb_11_2 = setCombo(cb_11_2, Set, FCSettings[P_J16_TIMING]);
sb_11_3->setValue(FCSettings[P_J17_BITMASK]);
cb_11_4 = setCombo(cb_11_4, Set, FCSettings[P_J17_TIMING]);
}
// Seite 12
{
cb_12_1 = setCombo(cb_12_1, Set, P_NAV_GPS_MODE);
cb_12_2 = setCombo(cb_12_2, Set, P_NAV_GPS_GAIN);
sb_12_3->setValue(ParameterSet[Set][P_NAV_STICK_THRE]);
sb_12_4->setValue(ParameterSet[Set][P_NAV_GPS_MIN]);
cb_12_5 = setCombo(cb_12_5, Set, P_NAV_GPS_P);
cb_12_6 = setCombo(cb_12_6, Set, P_NAV_GPS_I);
cb_12_7 = setCombo(cb_12_7, Set, P_NAV_GPS_D);
cb_12_8 = setCombo(cb_12_8, Set, P_NAV_GPS_ACC);
cb_12_1 = setCombo(cb_12_1, Set, FCSettings[P_NAV_GPS_MODE]);
cb_12_2 = setCombo(cb_12_2, Set, FCSettings[P_NAV_GPS_GAIN]);
sb_12_3->setValue(FCSettings[P_NAV_STICK_THRE]);
sb_12_4->setValue(FCSettings[P_NAV_GPS_MIN]);
cb_12_5 = setCombo(cb_12_5, Set, FCSettings[P_NAV_GPS_P]);
cb_12_6 = setCombo(cb_12_6, Set, FCSettings[P_NAV_GPS_I]);
cb_12_7 = setCombo(cb_12_7, Set, FCSettings[P_NAV_GPS_D]);
cb_12_8 = setCombo(cb_12_8, Set, FCSettings[P_NAV_GPS_ACC]);
}
// Seite 13
{
cb_13_1 = setCombo(cb_13_1, Set, P_NAV_WIND_CORR);
cb_13_2 = setCombo(cb_13_2, Set, P_NAV_SPEED_COMP);
cb_13_3 = setCombo(cb_13_3, Set, P_NAV_RADIUS);
cb_13_4 = setCombo(cb_13_4, Set, P_NAV_ANGLE_LIMIT);
cb_13_1 = setCombo(cb_13_1, Set, FCSettings[P_NAV_WIND_CORR]);
cb_13_2 = setCombo(cb_13_2, Set, FCSettings[P_NAV_SPEED_COMP]);
cb_13_3 = setCombo(cb_13_3, Set, FCSettings[P_NAV_RADIUS]);
cb_13_4 = setCombo(cb_13_4, Set, FCSettings[P_NAV_ANGLE_LIMIT]);
}
}
 
/QMK-Groundstation/trunk/Forms/wdg_Settings.h
35,17 → 35,13
explicit wdg_Settings(QWidget *parent = 0);
virtual ~wdg_Settings();
 
void show_ParameterSet(int Set, int Settings[11][MaxParameter]);
char *SetParameter();
void show_FCSettings(int Set, int FCSettings[MaxParameter]);
char *GetFCSettings();
 
private:
// Alle Icons
QIcon Icons[30];
 
int Settings[MaxParameter];
int ParameterSet[11][MaxParameter];
 
void init_Icons();
void set_LED(QToolButton *ToolButton, bool On = false);
 
QComboBox *setCombo(QComboBox *Combo, int Set, int Wert);
/QMK-Groundstation/trunk/Forms/wdg_Settings.ui
1056,9 → 1056,10
&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;">
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600; text-decoration: underline;">Hier kann der Höhenregler parametriert werden.&lt;/span>&lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600; text-decoration: underline;">&lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Setpoint:&lt;/span> Gibt die maximale Höhe an. Normalerweise wird hier ein Poti als Kanal der Funke eingetragen. Kleine Werte ermöglichen nur niedrige Maximalhöhen.&lt;span style=" font-weight:600;"> &lt;/span>&lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Soll-Höhe:&lt;/span> Gibt die maximale Höhe an. Normalerweise wird hier ein Poti als Kanal der Funke eingetragen. Kleine Werte ermöglichen nur niedrige Maximalhöhen.&lt;span style=" font-weight:600;"> &lt;/span>&lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Fluganfänger sollten das Feature nutzen, hier evtl. 0 eintragen und den Höhenregler aktivieren (siehe oben). Dann kann es nicht passieren, dass der MikroKopter zu hoch steigt. Bei Nutzung des Höhenreglers als Schalter ist hier auch das entsprechende Poti einzutragen, um den Kanal der Funke damit festzulegen. &lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Min Gas:&lt;/span> unter diesen Wert wird das Gas nicht gestellt, wenn die Höhe überschritten wurde. &lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">3-Fach-Schalter: &lt;/span>&lt;span style=" text-decoration: underline;">Höhenschalter&lt;/span> kann auf 3-Poligen Schalter gelegt werden --&amp;gt; z.B. mit dem GPS-Schalter kombiniert&lt;br />Bei Mittelstellung ist die Höhenregelung dann aus&lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">P-Anteil:&lt;/span> Abhängigkeit von Rücknahme von Gas bei Höhe über. Je höher dieser Wert, desto kleiner ist der Flugbereich oberhalb der Maximalhöhe. &lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Luftdruck-D:&lt;/span> Dämpft das Schwingverhalten des Höhenreglers. Geringste Luftdruckänderungen haben damit grosse Wirkung auf Gas. &lt;/p>
&lt;p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Z-ACC:&lt;/span> Dämpft das Schwingverhalten mittels des Beschleunigungssensors. &lt;/p>
1393,6 → 1394,12
</item>
<item row="3" column="1" >
<widget class="QCheckBox" name="cb_4_7" >
<property name="font" >
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text" >
<string>3fach Schalter </string>
</property>
4522,7 → 4529,7
</font>
</property>
<property name="text" >
<string>GPS max Radius:</string>
<string>GPS-Maxradius:</string>
</property>
</widget>
</item>
4657,13 → 4664,12
&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;">
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600; text-decoration: underline;">Einstellungen für das Navi-Ctrl (Seite 2).&lt;/span>&lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600; text-decoration: underline;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Speed Compensation:&lt;/span>&lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600; text-decoration: underline;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">only for AID mode.&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600; text-decoration: underline;">&lt;span style=" text-decoration:none;">GPS-Wind-Correction: &lt;/span>&lt;span style=" font-weight:400; text-decoration:none;">soll den MK bei Coming-Home direkter zurückfliegen und die Drift durch Wind kompensieren&lt;/span>&lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">GPS Winkelbegrenzung:&lt;/span>&lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600; text-decoration: underline;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Begrenzung des Maximalen Neigungswinkel.&lt;/p>&lt;/body>&lt;/html></string>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Speed Compensation: &lt;/span>Greift bei AID unterstützend ein, wenn man einen neuen Punkt anfliegt Wenn zuviel Geschwindigkeit aufgebaut wird, bremst das den MK&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;br />&lt;span style=" font-weight:600;">GPS-Maxradius: &lt;/span>Soll eine virtuelle Grenze bilden, die mit GPS nicht überschritten wird.&lt;br />Wenn der MK ausserhalb des Kreises einloggen soll, nimmt er als neue Position einen Punkt auf dem Kreisrand.&lt;br />Man kann den Radius auch auf ein Poti legen. Wegpunkte und Soll-Positionen werden damit auch auf einen Kreis von max. 512m Durchmesser begrenzt.&lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">GPS Winkelbegrenzung: &lt;/span>Damit lässt sich die maximale Neigung der GPS-Regelung begrenzen. &lt;br />Ein Wert von 60 entspricht ca.35°&lt;/p>&lt;/body>&lt;/html></string>
</property>
</widget>
</item>
/QMK-Groundstation/trunk/ToolBox.cpp
23,6 → 23,22
{
}
 
QString ToolBox::get_Float(long Wert, long Count)
{
QString Temp;
 
if (Wert > 0)
Temp = "";
else
Temp = "-";
 
Temp = Temp + QString("%1").arg(Wert / Count) + "." + QString("%1").arg(Wert % Count);
 
return Temp;
}
 
 
// Base64 Decoder
bool ToolBox::Decode64(sRxData &RX, bool Long)
{
unsigned char a,b,c,d;
81,10 → 97,38
RX.Decode[DecLen] = ptrOut[a];
DecLen++;
}
 
RX.DecLen = DecLen;
}
return true;
}
 
// Base64 Encoder
QString ToolBox::Encode64(char Data[150],unsigned int Length)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
char TX_Buff[150];
 
while(Length > 0)
{
if(Length) { a = Data[ptr++]; Length--;} else a = 0;
if(Length) { b = Data[ptr++]; Length--;} else b = 0;
if(Length) { c = Data[ptr++]; Length--;} else c = 0;
 
TX_Buff[pt++] = '=' + (a >> 2);
TX_Buff[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
TX_Buff[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TX_Buff[pt++] = '=' + ( c & 0x3f);
}
TX_Buff[pt] = 0;
 
return QString(TX_Buff);
}
 
// Datensatz nach 16bit Integer
int ToolBox::Data2Int(int *Data , int Start, bool is_signed)
{
int Out = (Data[Start+1]<<8) | (Data[Start+0]);
96,6 → 140,7
 
}
 
// Datensatz nach 32bit Long
long ToolBox::Data2Long(int *Data , int Start, bool is_signed)
{
long Out = (Data[Start+3]<<24) | (Data[Start+2]<<16) | (Data[Start+1]<<8) | (Data[Start+0]);
106,6 → 151,7
return Out;
}
 
// Datensatz nach QString
QString ToolBox::Data2QString(int Data[150], int Start, int End)
{
char String[150];
118,6 → 164,7
return QString(String);
}
 
// Datensatz-CRC prüfen
bool ToolBox::check_CRC(QString RXString)
{
int CRC = 0;
152,6 → 199,7
return true;
}
 
// Datensatz-CRC hinzufügen
QString ToolBox::add_CRC(QString TXString)
{
unsigned int tmpCRC = 0;
177,37 → 225,39
return Return;
}
 
QString ToolBox::Encode64(char Data[150],unsigned int Length)
// Alle Icons
QIcon ToolBox::Icon(int ID)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
QIcon Icons[30] ;
Icons[0].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledred.png")), QIcon::Normal, QIcon::Off);
Icons[1].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledyellow.png")), QIcon::Normal, QIcon::Off);
Icons[3].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledyellow.png")), QIcon::Normal, QIcon::Off);
Icons[4].addPixmap(QPixmap(QString::fromUtf8(":/LED/Images/16X16/ledoff.png")), QIcon::Normal, QIcon::Off);
 
char TX_Buff[150];
Icons[5].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/application-exit.png")), QIcon::Normal, QIcon::Off);
Icons[6].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/media-playback-stop.png")), QIcon::Normal, QIcon::Off);
Icons[7].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/media-record.png")), QIcon::Normal, QIcon::Off);
Icons[8].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/network-connect.png")), QIcon::Normal, QIcon::Off);
Icons[9].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/network-disconnect.png")), QIcon::Normal, QIcon::Off);
Icons[10].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/utilities-system-monitor.png")), QIcon::Normal, QIcon::Off);
 
while(Length > 0)
{
if(Length) { a = Data[ptr++]; Length--;} else a = 0;
if(Length) { b = Data[ptr++]; Length--;} else b = 0;
if(Length) { c = Data[ptr++]; Length--;} else c = 0;
Icons[11].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/applications-system.png")), QIcon::Normal, QIcon::Off);
Icons[12].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/applications-internet.png")), QIcon::Normal, QIcon::Off);
Icons[13].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/preferences-other.png")), QIcon::Normal, QIcon::Off);
Icons[14].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/preferences-system.png")), QIcon::Normal, QIcon::Off);
Icons[15].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/folder.png")), QIcon::Normal, QIcon::Off);
Icons[16].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/folder-print.png")), QIcon::Normal, QIcon::Off);
Icons[17].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/clock.png")), QIcon::Normal, QIcon::Off);
Icons[18].addPixmap(QPixmap(QString::fromUtf8(":/Actions/Images/22X22/configure.png")), QIcon::Normal, QIcon::Off);
 
TX_Buff[pt++] = '=' + (a >> 2);
TX_Buff[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
TX_Buff[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TX_Buff[pt++] = '=' + ( c & 0x3f);
}
TX_Buff[pt] = 0;
Icons[20].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-up-double.png")), QIcon::Normal, QIcon::Off);
Icons[21].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-up.png")), QIcon::Normal, QIcon::Off);
Icons[22].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-down-double.png")), QIcon::Normal, QIcon::Off);
Icons[23].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-down.png")), QIcon::Normal, QIcon::Off);
Icons[24].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-left-double.png")), QIcon::Normal, QIcon::Off);
Icons[25].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-left.png")), QIcon::Normal, QIcon::Off);
Icons[26].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-right-double.png")), QIcon::Normal, QIcon::Off);
Icons[27].addPixmap(QPixmap(QString::fromUtf8(":/Arrows/Images/32X32/arrow-right.png")), QIcon::Normal, QIcon::Off);
 
return QString(TX_Buff);
return Icons[ID];
}
 
QString ToolBox::DataToString(int Data[150])
{
char String[100];
for (int a = 0; a < 100; a++)
{
String[a] = Data[a];
}
 
return QString(String).trimmed();
}
/QMK-Groundstation/trunk/ToolBox.h
20,6 → 20,7
#define TOOLBOX_H
 
#include <QString>
#include <QIcon>
#include "global.h"
 
class ToolBox
27,14 → 28,14
public :
ToolBox();
static bool Decode64(sRxData &RX, bool Long = true);
static QString Encode64(char Data[150],unsigned int Length);
static bool check_CRC(QString RXString);
static QString add_CRC(QString TXString);
static QString Encode64(char Data[150],unsigned int Length);
static QString DataToString(int Data[150]);
static int Data2Int(int *Data , int Start, bool is_signed = true);
static long Data2Long(int *Data , int Start, bool is_signed = true);
static QString Data2QString(int Data[150], int Start = 0, int End = 150);
 
static QIcon Icon(int ID);
static QString get_Float(long Wert, long Count);
};
 
#endif // TOOLBOX_H
/QMK-Groundstation/trunk/cSettings.cpp
158,8 → 158,18
Data.Plotter_Count = Setting.value("Plotter_Count", 100).toInt();
Data.Debug_Fast = Setting.value("Debug_Fast", 100).toInt();
Data.Debug_Slow = Setting.value("Debug_Slow", 500).toInt();
Data.Debug_Off = Setting.value("Debug_Off", 1000).toInt();
Data.Navi_Fast = Setting.value("Navi_Fast", 100).toInt();
Data.Navi_Slow = Setting.value("Navi_Slow", 500).toInt();
Data.Navi_Off = Setting.value("Navi_Off", 1000).toInt();
Setting.endGroup();
 
Setting.beginGroup("GoogleEarth-Server");
Server.Port = Setting.value("Port", 10664).toString();
Server.StartServer = Setting.value("StartServer", false).toBool();
Server.ToGround = Setting.value("ToGround", false).toBool();
Setting.endGroup();
 
}
 
void cSettings::write_Settings()
194,7 → 204,18
Setting.setValue("Plotter_Count", Data.Plotter_Count);
Setting.setValue("Debug_Fast", Data.Debug_Fast);
Setting.setValue("Debug_Slow", Data.Debug_Slow);
Setting.setValue("Debug_Off", Data.Debug_Off);
Setting.setValue("Navi_Fast", Data.Navi_Fast);
Setting.setValue("Navi_Slow", Data.Navi_Slow);
Setting.setValue("Navi_Off", Data.Navi_Off);
Setting.endGroup();
 
Setting.beginGroup("GoogleEarth-Server");
Setting.setValue("Port", Server.Port);
Setting.setValue("StartServer", Server.StartServer);
Setting.setValue("ToGround", Server.ToGround);
Setting.endGroup();
 
}
 
cSettings::~cSettings()
/QMK-Groundstation/trunk/cSettings.h
43,6 → 43,10
int Plotter_Count;
int Debug_Fast;
int Debug_Slow;
int Debug_Off;
int Navi_Fast;
int Navi_Slow;
int Navi_Off;
};
 
struct set_DIR
51,6 → 55,14
QString Parameter;
};
 
struct set_Server
{
QString Port;
bool StartServer;
bool ToGround;
};
 
 
struct set_Analog
{
QString Version;
72,6 → 84,7
set_TTY TTY;
set_Analog Analog1;
set_Data Data;
set_Server Server;
 
void read_Settings();
void write_Settings();
/QMK-Groundstation/trunk/debian.pro
10,8 → 10,13
win32 : DEFINES += _TTY_WIN_ QWT_DLL QT_DLL
unix : DEFINES += _TTY_POSIX_
 
QT *= gui core
unix {
LIBS += -lqwt-qt4
INCLUDEPATH += $(HOME)/include /usr/include/qwt-qt4
}
 
QT *= gui core network
 
SOURCES = SerialPort/qextserialbase.cpp \
SerialPort/qextserialport.cpp \
SerialPort/ManageSerialPort.cpp \
21,6 → 26,7
Forms/dlg_Preferences.cpp \
main.cpp \
cSettings.cpp \
Classes/cServer.cpp \
ToolBox.cpp \
Forms/wdg_Settings.cpp
 
36,9 → 42,10
Forms/dlg_Preferences.h \
global.h \
cSettings.h \
Classes/cServer.h \
Parameter_Positions.h \
ToolBox.h \
Forms/wdg_Settings.h
Forms/wdg_Settings.h
 
win32 : HEADERS += SerialPort/win_qextserialport.h
unix : HEADERS += SerialPort/posix_qextserialport.h
47,13 → 54,8
Forms/dlg_Config.ui \
Forms/dlg_Preferences.ui \
Forms/dlg_Motortest.ui \
Forms/wdg_Settings.ui
Forms/wdg_Settings.ui
 
unix {
LIBS += -lqwt-qt4
INCLUDEPATH += $(HOME)/include /usr/include/qwt-qt4
}
 
TEMPLATE = app
 
CONFIG += warn_on thread qt
61,3 → 63,4
TARGET = QMK-Groundstation
 
RESOURCES += MKTool.qrc
 
/QMK-Groundstation/trunk/eeepc.pro
10,8 → 10,13
win32 : DEFINES += _TTY_WIN_ QWT_DLL QT_DLL
unix : DEFINES += _EEEPC_ _TTY_POSIX_
 
QT *= gui core
unix {
LIBS += -lqwt-qt4
INCLUDEPATH += $(HOME)/include /usr/include/qwt-qt4
}
 
QT *= gui core network
 
SOURCES = SerialPort/qextserialbase.cpp \
SerialPort/qextserialport.cpp \
SerialPort/ManageSerialPort.cpp \
21,8 → 26,9
Forms/dlg_Preferences.cpp \
main.cpp \
cSettings.cpp \
Classes/cServer.cpp \
ToolBox.cpp \
Forms/wdg_Settings.cpp
Forms/wdg_Settings.cpp
 
win32 : SOURCES += SerialPort/win_qextserialport.cpp
unix : SOURCES += SerialPort/posix_qextserialport.cpp
36,9 → 42,10
Forms/dlg_Preferences.h \
global.h \
cSettings.h \
Classes/cServer.h \
Parameter_Positions.h \
ToolBox.h \
Forms/wdg_Settings.h
Forms/wdg_Settings.h
 
win32 : HEADERS += SerialPort/win_qextserialport.h
unix : HEADERS += SerialPort/posix_qextserialport.h
47,13 → 54,8
Forms/dlg_Config.ui \
Forms/dlg_Preferences.ui \
Forms/dlg_Motortest.ui \
Forms/wdg_Settings.ui
Forms/wdg_Settings.ui
 
unix {
LIBS += -lqwt-qt4
INCLUDEPATH += $(HOME)/include /usr/include/qwt-qt4
}
 
TEMPLATE = app
 
CONFIG += warn_on thread qt
61,3 → 63,4
TARGET = QMK-Groundstation
 
RESOURCES += MKTool.qrc
 
/QMK-Groundstation/trunk/gentoo.pro
10,8 → 10,13
win32 : DEFINES += _TTY_WIN_ QWT_DLL QT_DLL
unix : DEFINES += _TTY_POSIX_
 
QT *= gui core
unix {
LIBS += -lqwt
INCLUDEPATH += $(HOME)/include /usr/include/qwt5
}
 
QT *= gui core network
 
SOURCES = SerialPort/qextserialbase.cpp \
SerialPort/qextserialport.cpp \
SerialPort/ManageSerialPort.cpp \
21,8 → 26,9
Forms/dlg_Preferences.cpp \
main.cpp \
cSettings.cpp \
Classes/cServer.cpp \
ToolBox.cpp \
Forms/wdg_Settings.cpp
Forms/wdg_Settings.cpp
 
win32 : SOURCES += SerialPort/win_qextserialport.cpp
unix : SOURCES += SerialPort/posix_qextserialport.cpp
36,9 → 42,10
Forms/dlg_Preferences.h \
global.h \
cSettings.h \
Classes/cServer.h \
Parameter_Positions.h \
ToolBox.h \
Forms/wdg_Settings.h
Forms/wdg_Settings.h
 
win32 : HEADERS += SerialPort/win_qextserialport.h
unix : HEADERS += SerialPort/posix_qextserialport.h
47,13 → 54,8
Forms/dlg_Config.ui \
Forms/dlg_Preferences.ui \
Forms/dlg_Motortest.ui \
Forms/wdg_Settings.ui
Forms/wdg_Settings.ui
 
unix {
LIBS += -lqwt
INCLUDEPATH += $(HOME)/include /usr/include/qwt5
}
 
TEMPLATE = app
 
CONFIG += warn_on thread qt
/QMK-Groundstation/trunk/global.h
39,10 → 39,12
 
static const int SETTINGS_ID = 2;
 
static const int Sleep = 500000;
 
static const QString QA_NAME = "QMK-Groundstation";
static const QString QA_VERSION = "0.5.8c";
static const QString QA_DATE = "14.12.2008";
static const QString QA_YEAR = "2008";
static const QString QA_VERSION = "0.6.3";
static const QString QA_DATE = "03.01.2009";
static const QString QA_YEAR = "2008-2009";
static const QString QA_AUTHOR = "Manuel Schrape";
static const QString QA_EMAIL = "manuel.schrape@gmx.de";
 
72,6 → 74,8
static const int MaxAnalog = 32;
static const int MaxPlot = 50000;
 
static const int MaxNaviPos = 2000;
 
struct sMode
{
int ID;
89,6 → 93,33
char *Input;
QString String;
int Decode[150];
int DecLen;
};
 
struct sGPS_Pos
{
long Longitude;
long Latitude;
long Altitude;
};
 
struct sNaviData
{
sGPS_Pos Current;
sGPS_Pos Target;
sGPS_Pos Home;
 
 
long Longitude;
long Latitude;
long Altitude;
};
 
struct sNaviString
{
QString Longitude;
QString Latitude;
QString Altitude;
};
 
#endif
/QMK-Groundstation/trunk/osx.pro
1,8 → 1,8
unix : OBJECTS_DIR = build/.o/unix
unix : OBJECTS_DIR = build/.o/unix
win32 : OBJECTS_DIR = build/.o/win32
mac : OBJECTS_DIR = build/.o/mac
mac : OBJECTS_DIR = build/.o/mac
 
UI_DIR = build/.ui
UI_DIR = build/.ui
MOC_DIR = build/.moc
RCC_DIR = build/.rcc
DESTDIR = build/bin
10,8 → 10,13
win32 : DEFINES += _TTY_WIN_ QWT_DLL QT_DLL
unix : DEFINES += _TTY_POSIX_
 
QT *= gui core
unix {
LIBS += -L/opt/local/lib -lqwt
INCLUDEPATH += /opt/local/include
}
 
QT *= gui core network
 
SOURCES = SerialPort/qextserialbase.cpp \
SerialPort/qextserialport.cpp \
SerialPort/ManageSerialPort.cpp \
21,8 → 26,9
Forms/dlg_Preferences.cpp \
main.cpp \
cSettings.cpp \
Classes/cServer.cpp \
ToolBox.cpp \
Forms/wdg_Settings.cpp
Forms/wdg_Settings.cpp
 
win32 : SOURCES += SerialPort/win_qextserialport.cpp
unix : SOURCES += SerialPort/posix_qextserialport.cpp
36,9 → 42,10
Forms/dlg_Preferences.h \
global.h \
cSettings.h \
Classes/cServer.h \
Parameter_Positions.h \
ToolBox.h \
Forms/wdg_Settings.h
Forms/wdg_Settings.h
 
win32 : HEADERS += SerialPort/win_qextserialport.h
unix : HEADERS += SerialPort/posix_qextserialport.h
47,13 → 54,8
Forms/dlg_Config.ui \
Forms/dlg_Preferences.ui \
Forms/dlg_Motortest.ui \
Forms/wdg_Settings.ui
Forms/wdg_Settings.ui
 
unix {
LIBS += -L/opt/local/lib -lqwt
INCLUDEPATH += /opt/local/include
}
 
TEMPLATE = app
 
CONFIG += warn_on thread qt
/QMK-Groundstation/trunk/suse.pro
10,8 → 10,13
win32 : DEFINES += _TTY_WIN_ QWT_DLL QT_DLL
unix : DEFINES += _TTY_POSIX_
 
QT *= gui core
unix {
LIBS += -lqwt
INCLUDEPATH += $(HOME)/include /usr/include/qwt
}
 
QT *= gui core network
 
SOURCES = SerialPort/qextserialbase.cpp \
SerialPort/qextserialport.cpp \
SerialPort/ManageSerialPort.cpp \
21,8 → 26,9
Forms/dlg_Preferences.cpp \
main.cpp \
cSettings.cpp \
Classes/cServer.cpp \
ToolBox.cpp \
Forms/wdg_Settings.cpp
Forms/wdg_Settings.cpp
 
win32 : SOURCES += SerialPort/win_qextserialport.cpp
unix : SOURCES += SerialPort/posix_qextserialport.cpp
36,9 → 42,10
Forms/dlg_Preferences.h \
global.h \
cSettings.h \
Classes/cServer.h \
Parameter_Positions.h \
ToolBox.h \
Forms/wdg_Settings.h
Forms/wdg_Settings.h
 
win32 : HEADERS += SerialPort/win_qextserialport.h
unix : HEADERS += SerialPort/posix_qextserialport.h
47,13 → 54,8
Forms/dlg_Config.ui \
Forms/dlg_Preferences.ui \
Forms/dlg_Motortest.ui \
Forms/wdg_Settings.ui
Forms/wdg_Settings.ui
 
unix {
LIBS += -lqwt
INCLUDEPATH += $(HOME)/include /usr/include/qwt
}
 
TEMPLATE = app
 
CONFIG += warn_on thread qt