Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 749 → Rev 750

/QMK-Groundstation/trunk/Global/Widget_Connection/wgt_Connection.cpp
0,0 → 1,541
/***************************************************************************
* Copyright (C) 2009 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 <QSettings>
#include <QMessageBox>
#include <QCryptographicHash>
 
#include "wgt_Connection.h"
 
wgt_Connection::wgt_Connection(QWidget *parent) : QWidget(parent)
{
setupUi(this);
 
o_Input = new Input();
 
o_AboTimer = new QTimer();
o_AboTimer->setInterval(3500);
 
connect(btn_Connect, SIGNAL(clicked()), this, SLOT(slot_btn_Connect()));
connect(sb_Intervall, SIGNAL(valueChanged(int)), this, SLOT(slot_sb_Intervall(int)));
 
connect(o_AboTimer, SIGNAL(timeout()), this, SLOT(slot_TimeOut_AboTimer()));
}
 
void wgt_Connection::read_Settings()
{
QSettings Setting("QMK", "QMK-Connection");
 
Setting.beginGroup("DATA");
SERVER.Intervall = Setting.value(QString("Intervall_%1").arg(gi_ID), 500).toInt();
Setting.endGroup();
 
Setting.beginGroup("SERVER");
SERVER.Password = Setting.value("Password", QString("")).toString();
SERVER.IP_MAX = Setting.value("IP_MAX", 1).toInt();
SERVER.IP_ID = Setting.value("IP_ID", 0).toInt();
 
for (int z = 0; z < SERVER.IP_MAX; z++)
{
SERVER.IP[z] = Setting.value("IP_" + QString("%1").arg(z), QString("127.0.0.1:64400")).toString();
}
Setting.endGroup();
 
for(int z = 0; z < SERVER.IP_MAX; z++)
{
if (cb_Server->findText(SERVER.IP[z]) == -1)
{
cb_Server->addItem(SERVER.IP[z]);
}
}
 
cb_Server->setCurrentIndex(SERVER.IP_ID);
 
le_Password->setText(SERVER.Password);
 
sb_Intervall->setValue(SERVER.Intervall);
 
}
 
void wgt_Connection::write_Settings()
{
SERVER.Intervall = sb_Intervall->value();
 
SERVER.Password = le_Password->text();
SERVER.IP_MAX = cb_Server->count();
SERVER.IP_ID = cb_Server->currentIndex();
 
for (int z = 0; z < cb_Server->count(); z++)
{
if (z < 10)
{
SERVER.IP[z] = cb_Server->itemText(z);
}
}
 
QSettings Setting("QMK", "QMK-Connection");
 
Setting.beginGroup("DATA");
Setting.setValue(QString("Intervall_%1").arg(gi_ID), SERVER.Intervall);
Setting.endGroup();
 
Setting.beginGroup("SERVER");
Setting.setValue("Password", SERVER.Password);
Setting.setValue("IP_MAX", SERVER.IP_MAX);
Setting.setValue("IP_ID", SERVER.IP_ID);
 
for (int z = 0; z < SERVER.IP_MAX; z++)
{
Setting.setValue("IP_" + QString("%1").arg(z), SERVER.IP[z]);
}
Setting.endGroup();
}
 
void wgt_Connection::set_Client(int li_ID, QString ls_Client, QString ls_Fields)
{
gi_Interval[0] = false;
gi_Interval[1] = false;
 
gs_Client = ls_Client;
gs_Fields = ls_Fields;
gi_ID = li_ID;
 
if (ls_Fields.contains('D'))
gi_Interval[0] = true;
 
if (ls_Fields.contains('O'))
gi_Interval[1] = true;
 
read_Settings();
}
 
void wgt_Connection::set_SelectVisible(bool pi_Visible)
{
wg_Select->setVisible(pi_Visible);
}
 
void wgt_Connection::set_IntervalVisible(bool pi_Visible)
{
wg_Interval->setVisible(pi_Visible);
}
 
void wgt_Connection::set_ButtonVisible(bool pi_Visible)
{
btn_Connect->setVisible(pi_Visible);
}
 
void wgt_Connection::send_Data(QString ps_Data, int pi_ID)
{
o_Input->send_Data(ps_Data, pi_ID);
}
 
// MK-Eingangsdaten verarbeiten
void wgt_Connection::parse_MK_Data(QString t_Data)
{
unsigned char OutData[200];
char *InData = t_Data.toLatin1().data();
 
if (HandlerMK::Decode_64(InData, t_Data.length(), OutData) != 0)
{
 
switch(InData[2])
{
case 'A' : // Analog-Labels
{
o_Input->stop_Resend(DATA_READ_LABEL);
 
s_MK_DebugLabels MK_DebugLabels;
 
MK_DebugLabels.Position = OutData[0];
 
if (MK_DebugLabels.Position < 32)
{
MK_DebugLabels.Text = HandlerMK::Data2QString(OutData,1,17).trimmed();
if (MK_DebugLabels.Text == "")
{
MK_DebugLabels.Text = "Debug-" + QString("%1").arg(MK_DebugLabels.Position);
}
 
if (((MK_DebugLabels.Position + 1) < 32))// && (get_Analoglabels == true))
{
c_Data[0] = MK_DebugLabels.Position + 1;
o_Input->send_Data(HandlerMK::make_Frame('a', ADDRESS_ALL, c_Data, 1).toLatin1().data(), DATA_READ_LABEL);
}
 
emit(sig_MK_DebugLabels(MK_DebugLabels));
}
}
break;
case 'D' : // Debug-Daten
{
s_MK_Debug MK_Debug;
 
memcpy((unsigned char *)&MK_Debug, (unsigned char *)&OutData, sizeof(MK_Debug));
 
emit(sig_MK_Debug(MK_Debug));
emit(sig_RawData(t_Data));
}
break;
case 'N' : // MotorMixer lesen
{
o_Input->stop_Resend(DATA_READ_MIXER);
 
s_MK_Mixer MK_Mixer;
 
memcpy((unsigned char *)&MK_Mixer, (unsigned char *)&OutData, sizeof(MK_Mixer));
 
emit (sig_MK_ReadMotorMixer(MK_Mixer));
}
break;
case 'M' : // MotorMixer geschrieben
{
o_Input->stop_Resend(DATA_WRITE_MIXER);
 
emit (sig_MK_WriteMotorMixer(OutData[0]));
}
break;
 
case 'O' : // Navi-OSD-Data
{
if (InData[1] - 'a' == ADDRESS_NC)
{
s_MK_NaviData MK_NaviData;
 
memcpy((unsigned char *)&MK_NaviData, (unsigned char *)&OutData, sizeof(MK_NaviData));
if (MK_NaviData.Version == MK_VERSION_NAVI)
{
emit(sig_MK_NaviData(MK_NaviData));
emit(sig_RawData(t_Data));
}
}
}
break;
 
case 'P' : // RC-Kanäle
{
s_MK_PPM_Data PPM_in;
 
memcpy((unsigned char *)&PPM_in, (unsigned char *)&OutData, sizeof(PPM_in));
 
// qDebug() << PPM_in[0] << ", " << PPM_in[1] << ", " << PPM_in[2] << ", " << PPM_in[3];
 
emit(sig_MK_PPMData(PPM_in));
}
break;
 
case 'Q' : // Settings lesen
{
o_Input->stop_Resend(DATA_READ_SETTINGS);
 
s_MK_Settings MK_Set;
 
memcpy((unsigned char *)&MK_Set, (unsigned char *)&OutData, sizeof(MK_Set));
 
emit (sig_MK_ReadSettings(MK_Set));
}
break;
case 'S' : // Settings geschrieben
{
o_Input->stop_Resend(DATA_WRITE_SETTINGS);
 
emit (sig_MK_WriteSettings(OutData[0]));
}
break;
 
case 'V' : // Versions-Info
{
o_Input->stop_Resend(DATA_VERSION);
VersionInfo = HandlerMK::parse_Version(OutData, InData[1] - 'a');
 
if (VersionInfo.ID == ADDRESS_FC)
{
rb_FC->setChecked(true);
}
if (VersionInfo.ID == ADDRESS_NC)
{
rb_NC->setChecked(true);
}
if (VersionInfo.ID == ADDRESS_MK3MAG)
{
rb_MK3MAG->setChecked(true);
}
 
slot_sb_Intervall(sb_Intervall->value());
 
emit sig_MK_Version(VersionInfo);
}
break;
case 'W' : // WayPoints
{
o_Input->stop_Resend(DATA_WRITE_WAYPOINT);
 
emit(sig_MK_WayPoint(OutData[0]));
}
break;
}
}
}
 
// IP-Daten verarbeiten..
void wgt_Connection::parse_IP_Data(QString t_Data)
{
QStringList Data;
Data = t_Data.split(":");
 
if (Data.count() > 1)
{
int CMD = Data[2].toInt();
 
switch(CMD)
{
case 101 :
{
o_Input->send_Data(HandlerIP::make_Frame(gi_ID, 101, gs_Client));
}
break;
case 502 :
{
switch (Data[3].toInt())
{
case 105 :
{
QString s_MD5PW;
QByteArray a_MD5PW;
 
a_MD5PW = QCryptographicHash::hash(le_Password->text().toAscii(),QCryptographicHash::Md5);
 
s_MD5PW = QString(a_MD5PW.toHex().data());
 
o_Input->send_Data(HandlerIP::make_Frame(gi_ID, 105, s_MD5PW));
}
break;
case 106 :
{
o_Input->send_Data(HandlerIP::make_Frame(gi_ID, 106, gs_Fields));
}
break;
}
}
break;
case 505 :
{
if (Data[3] == "OK")
{
}
else
{
QMessageBox::warning(this, gs_Client, trUtf8("Authentifizierung fehlgeschlagen. <br />Daten senden zum Mikrokopter nicht möglich."), QMessageBox::Ok);
}
}
break;
}
}
}
 
// Datenintervall geändert.
void wgt_Connection::slot_sb_Intervall(int t_Intervall)
{
if (t_Intervall == 0)
{
c_Data[0] = 0;
}
else
{
c_Data[0] = t_Intervall / 10;
}
 
// if (wg_Interval->isVisible())
{
if (gi_Interval[0])
{
o_Input->send_Data(HandlerMK::make_Frame('d', ADDRESS_ALL, c_Data, 1).toLatin1().data());
}
 
if (gi_Interval[1])
{
o_Input->send_Data(HandlerMK::make_Frame('o', ADDRESS_ALL, c_Data, 1).toLatin1().data());
}
}
}
 
void wgt_Connection::slot_send_Data(QString ps_Data, int pi_ID)
{
send_Data(ps_Data, pi_ID);
}
 
void wgt_Connection::slot_TimeOut_AboTimer()
{
// qDebug("Timer");
slot_sb_Intervall(sb_Intervall->value());
}
 
void wgt_Connection::slot_btn_Connect()
{
if (!o_Input->IsOpen())
{
if (cb_Server->findText(cb_Server->currentText()) == -1)
{
cb_Server->addItem(cb_Server->currentText());
cb_Server->setCurrentIndex(cb_Server->findText(cb_Server->currentText()));
}
 
cb_Server->setEnabled(false);
le_Password->setEnabled(false);
 
if (cb_Server->currentText().startsWith('/'))
{
o_Input = new Input_TTY();
o_Input->Init();
 
set_Input s_Input;
s_Input.Main = cb_Server->currentText();
 
if (o_Input->Open(s_Input) == true)
{
emit sig_Status(true);
btn_Connect->setChecked(true);
o_AboTimer->start();
 
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
}
 
}
else
{
o_Input = new Input_TCP();
o_Input->Init();
 
set_Input s_Input;
 
QStringList Server = cb_Server->currentText().split(":");
 
s_Input.Main = Server[0];
s_Input.Sub = Server[1];
 
if (o_Input->Open(s_Input) == true)
{
connect(o_Input, SIGNAL(sig_Disconnected(int)), this, SLOT(slot_Input_Disconnected(int)));
connect(o_Input, SIGNAL(sig_Connected()), this, SLOT(slot_Input_Connected()));
}
}
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
 
emit sig_Status(false);
btn_Connect->setChecked(false);
o_AboTimer->stop();
 
o_Input->Close();
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
if (o_Input->Mode() == TCP)
{
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
}
}
}
 
// Neue Daten empfangen.
void wgt_Connection::slot_Input_Data(QString t_Data)
{
if ((t_Data[0] == '#'))
{
if ((HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length() - 1)) || ((o_Input->Mode() == TTY) && (HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length()))))
{
parse_MK_Data(t_Data);
}
else
{
// qDebug(QString("CRC-Error - " + t_Data).toLatin1().data());
}
}
else if ((o_Input->Mode() == TCP) && (t_Data[0] == '$'))
{
parse_IP_Data(t_Data);
}
}
 
// Neue Serververbindung.
void wgt_Connection::slot_Input_Connected()
{
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
emit sig_Status(true);
btn_Connect->setChecked(true);
o_AboTimer->start();
}
 
// Serververbindung beendet
void wgt_Connection::slot_Input_Disconnected(int Error)
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
 
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
 
emit sig_Status(false);
btn_Connect->setChecked(false);
o_AboTimer->stop();
 
switch (Error)
{
case REMOTECLOSED :
{
// lb_Status->setText(tr("Verbindung vom Server beendet."));
QMessageBox::warning(this, gs_Client,tr("QMK-Datenserver: Verbindung wurde vom Server beendet."), QMessageBox::Ok);
}
break;
case REFUSED :
{
// lb_Status->setText(tr("Server nicht gefunden."));
QMessageBox::warning(this, gs_Client,tr("QMK-Datenserver: Kann nicht zum Server verbinden."), QMessageBox::Ok);
}
break;
case 3 :
{
// lb_Status->setText(tr("Serververbindung getrennt. Logindaten falsch."));
QMessageBox::warning(this, gs_Client,tr("QMK-Datenserver: Loginname oder Password falsch."), QMessageBox::Ok);
}
break;
default :
{
// lb_Status->setText(tr("Getrennt vom QMK-Datenserver."));
}
break;
}
 
}
 
wgt_Connection::~wgt_Connection()
{
write_Settings();
}
/QMK-Groundstation/trunk/Global/Widget_Connection/wgt_Connection.h
0,0 → 1,114
/***************************************************************************
* Copyright (C) 2009 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 WGT_CONNECTION_H
#define WGT_CONNECTION_H
 
#include <QWidget>
#include <QTimer>
 
#include "ui_wgt_Connection.h"
 
#include "../../Global/Kopter.h"
#include "../../Global/Class_HandlerIP/HandlerIP.h"
#include "../../Global/Class_HandlerMK/HandlerMK.h"
#include "../../Global/Class_Input/Input.h"
#include "../../Global/Class_Input/Input_TCP.h"
#include "../../Global/Class_Input/Input_TTY.h"
 
struct set_SERVER
{
int IP_MAX;
int IP_ID;
int Intervall;
QString IP[10];
QString Password;
};
 
class wgt_Connection : public QWidget, public Ui::wgt_Connection_ui
{
Q_OBJECT
 
public:
wgt_Connection(QWidget *parent = 0);
~wgt_Connection();
 
void send_Data(QString ps_Data, int pi_ID = 0);
 
void set_Client(int li_ID, QString ls_Client, QString ls_Fields);
void set_ButtonVisible(bool pi_Visible);
void set_SelectVisible(bool pi_Visible);
void set_IntervalVisible(bool pi_Visible);
Input *o_Input;
 
private:
 
QTimer *o_AboTimer;
 
// Verbindungs-Objekt
char c_Data[200];
 
bool gi_Interval[2];
 
// Info über die Hardware
s_Hardware VersionInfo;
 
 
QString gs_Client;
QString gs_Fields;
// char gs_Interval;
int gi_ID;
 
set_SERVER SERVER;
 
void read_Settings();
void write_Settings();
 
void parse_IP_Data(QString t_Data);
void parse_MK_Data(QString t_Data);
 
public slots:
void slot_btn_Connect();
void slot_send_Data(QString ps_Data, int pi_ID = 0);
 
private slots:
void slot_sb_Intervall(int t_Intervall);
 
void slot_Input_Data(QString t_Data);
void slot_Input_Connected();
void slot_Input_Disconnected(int Error);
 
void slot_TimeOut_AboTimer();
 
signals:
void sig_Status(int);
void sig_RawData(QString);
void sig_MK_Version(s_Hardware);
void sig_MK_Debug(s_MK_Debug);
void sig_MK_DebugLabels(s_MK_DebugLabels);
void sig_MK_NaviData(s_MK_NaviData);
void sig_MK_WayPoint(int);
void sig_MK_ReadSettings(s_MK_Settings);
void sig_MK_WriteSettings(int);
void sig_MK_ReadMotorMixer(s_MK_Mixer);
void sig_MK_WriteMotorMixer(int);
void sig_MK_PPMData(s_MK_PPM_Data);
 
};
 
#endif // WGT_CONNECTION_H
/QMK-Groundstation/trunk/Global/Widget_Connection/wgt_Connection.ui
0,0 → 1,205
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>wgt_Connection_ui</class>
<widget class="QWidget" name="wgt_Connection_ui">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>693</width>
<height>39</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QToolButton" name="btn_Connect">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../QMK-Maps/QMK-Maps.qrc">
<normaloff>:/Actions/Global/Images/Actions/Connection-NO.png</normaloff>
<normalon>:/Actions/Global/Images/Actions/Connection-OK.png</normalon>:/Actions/Global/Images/Actions/Connection-NO.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="cb_Server">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>127.0.0.1:64400</string>
</property>
</item>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_4">
<property name="text">
<string>PW:</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLineEdit" name="le_Password">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QWidget" name="wg_Select" native="true">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="rb_FC">
<property name="text">
<string>FC</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QRadioButton" name="rb_NC">
<property name="text">
<string>NC</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QRadioButton" name="rb_MK3MAG">
<property name="text">
<string>MK3MAG</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="6">
<widget class="QWidget" name="wg_Interval" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Intervall:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QSpinBox" name="sb_Intervall">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="suffix">
<string> ms</string>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>50</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="7">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>35</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../../QMK-Maps/QMK-Maps.qrc"/>
</resources>
<connections/>
</ui>
/QMK-Groundstation/trunk/Global/Kopter.h
24,9 → 24,9
#include <stdint.h>
 
#ifdef _BETA_
static const QString QA_HWVERSION = "FlightCtrl v0.76e & NaviCtrl v0.17e";
static const QString QA_HWVERSION = "FlightCtrl v0.78f & NaviCtrl v0.18c";
#else
static const QString QA_HWVERSION = "FlightCtrl v0.76e & NaviCtrl v0.17e";
static const QString QA_HWVERSION = "FlightCtrl v0.78f & NaviCtrl v0.18c";
#endif
 
// Datenfeld-ID's
/QMK-Groundstation/trunk/Global/MK_Datatypes.h
22,18 → 22,18
#include <stdint.h>
 
#ifdef _BETA_
static const int MK_VERSION_SETTINGS = 80; // wird angepasst, wenn sich die EEPROM-Daten ge�ndert haben
static const int MK_VERSION_SETTINGS = 82; // wird angepasst, wenn sich die EEPROM-Daten ge�ndert haben
#else
static const int MK_VERSION_SETTINGS = 80; // wird angepasst, wenn sich die EEPROM-Daten ge�ndert haben
static const int MK_VERSION_SETTINGS = 82; // wird angepasst, wenn sich die EEPROM-Daten ge�ndert haben
#endif
 
static const int MK_VERSION_NAVI = 2; // wird angepasst, wenn sich die Mixer-Daten ge�ndert haben
static const int MK_VERSION_NAVI = 3; // wird angepasst, wenn sich die Navi-Daten ge�ndert haben
 
static const int MK_VERSION_MIXER = 1; // wird angepasst, wenn sich die Mixer-Daten ge�ndert haben
static const int MK_MAX_MOTOR = 16; // Maximale Anzahl der Motoren im Mixer
 
// Version des Seriellen Protokoll
static const int VERSION_SERIAL_MAJOR = 10;
static const int VERSION_SERIAL_MAJOR = 11;
static const int VERSION_SERIAL_MINOR = 0;
 
// Basis-Addressen der verschiedenen Hardware
71,6 → 71,26
#define CFG2_VARIO_BEEP 0x02
#define CFG_SENSITIVE_RC 0x04
 
struct s_MK_Debug
{
unsigned char Digital[2];
int16_t Analog[32]; // Debugwerte
};
 
struct s_MK_DebugLabels
{
int Position;
QString Text;
};
 
//typedef int16_t s_MK_PPM_Data[26];
 
struct s_MK_PPM_Data
{
int16_t Data[26];
};
 
 
struct s_MK_Settings
{
// Die ersten beiden Bytes nicht an den MK senden.
77,7 → 97,7
unsigned char Index;
unsigned char Version;
 
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=H�henregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
98,12 → 118,12
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char Gyro_D; // Wert : 0-250
unsigned char Gyro_Gier_P; // Wert : 10-250
unsigned char Gyro_Gier_I; // Wert : 0-250
unsigned char Gyro_Gier_P; // Wert : 10-250
unsigned char Gyro_Gier_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Emp�ngsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
119,7 → 139,10
unsigned char ServoRollMin; // Wert : 0-250
unsigned char ServoRollMax; // Wert : 0-250
//---
unsigned char ServoNickRefresh; //
unsigned char ServoNickRefresh; // Speed of the Servo
unsigned char Servo3; // Value or mapping of the Servo Output
unsigned char Servo4; // Value or mapping of the Servo Output
unsigned char Servo5; // Value or mapping of the Servo Output
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas w�hrend Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle f�r Stickausschlag
unsigned char LoopHysterese; // Wert: 0-250 Hysterese f�r Stickausschlag
167,6 → 190,7
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll 0 oder 1 // WICHTIG!!! am Ende lassen
unsigned char ExtraConfig; // bitcodiert
char Name[12];
 
};
 
struct s_MK_Mixer
237,6 → 261,9
uint8_t RC_RSSI; // Receiver signal strength (since version 2 added)
int16_t SetpointAltitude; // setpoint for altitude
uint8_t Gas; // for future use
uint16_t Current; // actual current in 0.1A steps
uint16_t UsedCapacity; // used capacity in mAh
 
} __attribute__((packed)) s_MK_NaviData;
 
typedef struct
/QMK-Groundstation/trunk/Global/Widget_Connection.pri
0,0 → 1,23
DEPENDPATH += ../Global/Widget_Connection/
INCLUDEPATH += ../Global/Widget_Connection/
 
DEFINES += _TTY_POSIX_
include(../Global/Class_SerialPort.pri)
 
SOURCES += wgt_Connection.cpp \
../Global/Class_HandlerMK/HandlerMK.cpp \
../Global/Class_HandlerIP/HandlerIP.cpp \
../Global/Class_Input/Input.cpp \
../Global/Class_Input/Input_TCP.cpp \
../Global/Class_Input/Input_TTY.cpp
 
HEADERS += wgt_Connection.h \
../Global/Kopter.h \
../Global/MK_Datatypes.h \
../Global/Class_HandlerMK/HandlerMK.h \
../Global/Class_HandlerIP/HandlerIP.h \
../Global/Class_Input/Input.h \
../Global/Class_Input/Input_TCP.h \
../Global/Class_Input/Input_TTY.h
 
FORMS += wgt_Connection.ui
/QMK-Groundstation/trunk/QMK-Communicator/Classes/cSettings.cpp
42,6 → 42,13
SERVER.Password = Setting.value("Password", QString("")).toString();
Setting.endGroup();
 
Setting.beginGroup("LIVEDATA");
LIVEDATA.Server = Setting.value("Server", QString("")).toString();
LIVEDATA.Port = Setting.value("Port", QString("64410")).toString();
LIVEDATA.User = Setting.value("User", QString("")).toString();
LIVEDATA.Password = Setting.value("Password", QString("")).toString();
Setting.endGroup();
 
Setting.beginGroup("CLIENT");
CLIENT.TTY_MAX = Setting.value("TTY_MAX", 1).toInt();
CLIENT.TTY_ID = Setting.value("TTY_ID", 0).toInt();
65,6 → 72,16
GUI.Size = Setting.value("Size", QSize(500, 350)).toSize();
GUI.Point = Setting.value("Point",QPoint(1,1)).toPoint();
Setting.endGroup();
 
Setting.beginGroup("TERMINAL");
TERMINAL.isMax = Setting.value("IsMax",false).toBool();
TERMINAL.Size = Setting.value("Size", QSize(500, 350)).toSize();
TERMINAL.Point = Setting.value("Point",QPoint(1,1)).toPoint();
DATA.Data = Setting.value("Data",false).toBool();
DATA.Info = Setting.value("Info",false).toBool();
DATA.Send = Setting.value("Send",false).toBool();
DATA.TCP = Setting.value("TCP",false).toBool();
Setting.endGroup();
}
 
void cSettings::write_Settings()
81,9 → 98,16
Setting.setValue("Password", SERVER.Password);
Setting.endGroup();
 
Setting.beginGroup("LIVEDATA");
Setting.setValue("Server", LIVEDATA.Server);
Setting.setValue("Port", LIVEDATA.Port);
Setting.setValue("User", LIVEDATA.User);
Setting.setValue("Password", LIVEDATA.Password);
Setting.endGroup();
 
Setting.beginGroup("CLIENT");
Setting.setValue("TTY_MAX", CLIENT.TTY_MAX);
Setting.setValue("TTY_ID", CLIENT.TTY_ID);
Setting.setValue("TTY_MAX", CLIENT.TTY_MAX);
Setting.setValue("TTY_ID", CLIENT.TTY_ID);
Setting.setValue("Password", CLIENT.TCP_Password);
 
for (int z = 0; z < CLIENT.TTY_MAX; z++)
102,8 → 126,17
 
Setting.beginGroup("GUI");
Setting.setValue("IsMax", GUI.isMax);
Setting.setValue("Size", GUI.Size);
Setting.setValue("Size", GUI.Size);
Setting.setValue("Point", GUI.Point);
Setting.endGroup();
 
Setting.beginGroup("TERMINAL");
Setting.setValue("IsMax", TERMINAL.isMax);
Setting.setValue("Size", TERMINAL.Size);
Setting.setValue("Point", TERMINAL.Point);
Setting.setValue("Data", DATA.Data);
Setting.setValue("Send", DATA.Send);
Setting.setValue("Info", DATA.Info);
Setting.setValue("TCP", DATA.TCP);
Setting.endGroup();
}
/QMK-Groundstation/trunk/QMK-Communicator/Classes/cSettings.h
32,6 → 32,14
QString Password;
};
 
struct set_LIVEDATA
{
QString Server;
QString Port;
QString User;
QString Password;
};
 
struct set_CLIENT
{
QString TTY_DEVICES[10];
51,6 → 59,14
QPoint Point;
};
 
struct set_DATA
{
bool Send;
bool Data;
bool Info;
bool TCP;
};
 
class cSettings
{
public:
60,9 → 76,12
 
int Settings_ID;
 
set_DATA DATA;
set_GUI GUI;
set_GUI TERMINAL;
set_SERVER SERVER;
set_CLIENT CLIENT;
set_LIVEDATA LIVEDATA;
};
 
#endif // CSETTINGS_H
/QMK-Groundstation/trunk/QMK-Communicator/Dialogs/dlg_Main.cpp
57,6 → 57,14
resize(o_Settings->GUI.Size);
move(o_Settings->GUI.Point);
 
f_Terminal->resize(o_Settings->TERMINAL.Size);
f_Terminal->move(o_Settings->TERMINAL.Point);
 
f_Terminal->cb_Data->setChecked(o_Settings->DATA.Data);
f_Terminal->cb_Info->setChecked(o_Settings->DATA.Info);
f_Terminal->cb_Send->setChecked(o_Settings->DATA.Send);
f_Terminal->cb_TCP->setChecked(o_Settings->DATA.TCP);
 
if (o_Settings->GUI.isMax)
{
showMaximized();
96,6 → 104,8
// Password für IP-Verbindung.
le_Password->setText(o_Settings->CLIENT.TCP_Password);
 
btn_Debug->setVisible(false);
btn_ConnectServer->setVisible(false);
}
 
// Signale mit Slots verbinden
114,6 → 124,12
connect(btn_Terminal, SIGNAL(clicked()), this, SLOT(slot_btn_Terminal()));
connect(btn_ConnectServer, SIGNAL(clicked()), this, SLOT(slot_btn_ConnectServer()));
 
connect(btn_Debug, SIGNAL(clicked()), this, SLOT(slot_btn_Debug()));
 
connect(rb_NC, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
connect(rb_FC, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
connect(rb_MK3MAG, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
 
// About QMK-Kernel & About-QT Dialog einfügen
connect(ac_About, SIGNAL(triggered()), this, SLOT(slot_ac_About()));
connect(ac_Server, SIGNAL(triggered()), this, SLOT(slot_ac_Server()));
151,7 → 167,7
////////////////////////////
void dlg_Main::parse_Input_Data(QString t_Data)
{
unsigned char OutData[150];
unsigned char OutData[180];
char *InData = t_Data.toLatin1().data();
 
if (HandlerMK::Decode_64(InData, t_Data.length(), OutData) != 0)
338,7 → 354,7
}
}
 
// IP-Input-Daten verarbeiten.
// IP-Output-Daten verarbeiten. (Live-Data)
void dlg_Main::parse_TCP_Output_Data(QString t_Data)
{
QStringList Data;
372,11 → 388,11
QString s_MD5PW;
QByteArray a_MD5PW;
 
a_MD5PW = QCryptographicHash::hash(QString("madlen").toAscii(),QCryptographicHash::Md5);
a_MD5PW = QCryptographicHash::hash(QString(QByteArray::fromBase64(Base64Hash.toLatin1()) + o_Settings->LIVEDATA.Password).toAscii(),QCryptographicHash::Md5);
 
s_MD5PW = QString(a_MD5PW.toHex().data());
 
o_Output->send_Data(HandlerIP::make_Frame(ID_COMMUNICATOR, 104, "keyoz@c64-power.net;" + s_MD5PW));
o_Output->send_Data(HandlerIP::make_Frame(ID_COMMUNICATOR, 104, o_Settings->LIVEDATA.User + ";" + s_MD5PW));
}
break;
}
505,8 → 521,8
{
Con_Output = Con_Server[0];
 
s_Output.Main = "127.0.0.1";//Server[0];
s_Output.Sub = "64410";//Server[1];
s_Output.Main = o_Settings->LIVEDATA.Server;//Server[0];
s_Output.Sub = o_Settings->LIVEDATA.Port;//Server[1];
 
o_Output = new Input_TCP();
o_Output->Init();
533,11 → 549,41
}
}
 
void dlg_Main::slot_btn_Debug()
{
if (o_Output->IsOpen())
{
o_Output->send_Data("#cO=M======wWMrSCuD==A===============================================A=GM======[M=====@==@|p==O=CM=========kN");
}
}
 
void dlg_Main::slot_rb_Hardware()
{
// if ((rb_NC->isChecked() == false) && (VersionInfo.ID != ADDRESS_NC))
// {
// o_Input->send_Data(HandlerMK::get_SelectNC());
// }
 
if (rb_FC->isChecked())
{
o_Input->send_Data(HandlerMK::get_SelectFC());
}
else
if (rb_MK3MAG->isChecked())
{
o_Input->send_Data(HandlerMK::get_SelectMK3MAG());
}
else
if (rb_NC->isChecked())
{
o_Input->send_Data(HandlerMK::get_SelectNC());
}
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
}
 
void dlg_Main::slot_Output_Disconnected(int Error)
{
// cb_Server->setEnabled(true);
// le_Password->setEnabled(true);
 
disconnect(o_Output, SIGNAL(sig_NewData(QString)), 0, 0);
if (o_Output->Mode() == TCP)
{
580,10 → 626,6
void dlg_Main::slot_Output_Connected()
{
connect(o_Output, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Output_Data(QString)));
 
// o_Output->send_Data(HandlerIP::make_Frame(ID_COMMUNICATOR, 101, QA_NAME + " " + QA_VERSION));
// o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
// btn_Connect->setText(tr("Trennen"));
}
 
void dlg_Main::slot_Output_Data(QString t_Data)
593,7 → 635,7
}
else if (o_Output->Mode() == TCP)
{
show_Terminal(6, t_Data);
show_Terminal(6, "IP:" + t_Data);
parse_TCP_Output_Data(t_Data);
}
}
854,9 → 896,11
ID = ID;
 
// QString t_Data = QString(TCP_Socket->readLine(TCP_Socket->bytesAvailable())).remove(QChar('\n'));
QString t_Data = s_Buffer + QString(Socket->readAll());
QString t_Data = s_Buffer + QString(Socket->readAll()).remove(QChar('\n'));
s_Buffer = "";
 
t_Data = t_Data.replace('\r', "\r\n");
 
QStringList l_Data = t_Data.split('\n');
 
for (int z = 0; z < l_Data.count(); z++)
879,9 → 923,11
}
}
else
{
qDebug("Ohne Ende");
s_Buffer = s_Buffer + l_Data[z];
{ if (l_Data[z].length() > 1)
{
qDebug(QString("Ohne Ende: " + l_Data[z]).toLatin1().data());
s_Buffer = s_Buffer + l_Data[z];
}
}
 
}
941,6 → 987,10
o_Settings->GUI.Size = size();
o_Settings->GUI.Point = pos();
 
// o_Settings->GUI.isMax = isMaximized();
o_Settings->TERMINAL.Size = f_Terminal->size();
o_Settings->TERMINAL.Point = f_Terminal->pos();
 
o_Settings->CLIENT.TTY_MAX = cb_Device->count();
o_Settings->CLIENT.TTY_ID = cb_Device->currentIndex();
 
963,6 → 1013,11
}
}
 
o_Settings->DATA.Data = f_Terminal->cb_Data->isChecked();
o_Settings->DATA.Info = f_Terminal->cb_Info->isChecked();
o_Settings->DATA.Send = f_Terminal->cb_Send->isChecked();
o_Settings->DATA.TCP = f_Terminal->cb_TCP->isChecked();
 
o_Settings->write_Settings();
 
// qDebug("Ende.");
/QMK-Groundstation/trunk/QMK-Communicator/Dialogs/dlg_Main.h
130,7 → 130,10
 
void slot_btn_Terminal();
void slot_btn_ConnectServer();
void slot_btn_Debug();
 
void slot_rb_Hardware();
 
// Einkommende Datenpackete.
void slot_Input_Data(QString t_Data);
void slot_Input_Disconnected(int Error);
/QMK-Groundstation/trunk/QMK-Communicator/Dialogs/dlg_Main.ui
6,7 → 6,7
<rect>
<x>0</x>
<y>0</y>
<width>447</width>
<width>519</width>
<height>372</height>
</rect>
</property>
139,9 → 139,6
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QRadioButton" name="rb_FC">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>FlightCtrl</string>
</property>
149,9 → 146,6
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="rb_NC">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>NaviCtrl</string>
</property>
159,9 → 153,6
</item>
<item row="0" column="2">
<widget class="QRadioButton" name="rb_MK3MAG">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>MK3MAG</string>
</property>
281,6 → 272,18
</item>
<item row="0" column="1" rowspan="2">
<widget class="QGroupBox" name="groupBox_3">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Clients</string>
</property>
420,6 → 423,13
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QPushButton" name="btn_Debug">
<property name="text">
<string>Debug-Button</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
430,7 → 440,7
<rect>
<x>0</x>
<y>0</y>
<width>447</width>
<width>519</width>
<height>21</height>
</rect>
</property>
438,14 → 448,10
<property name="title">
<string>Programm</string>
</property>
<addaction name="ac_Server"/>
<addaction name="separator"/>
<addaction name="ac_Quit"/>
</widget>
<widget class="QMenu" name="menu_Preferences">
<property name="title">
<string>Einstellungen</string>
</property>
<addaction name="ac_Server"/>
</widget>
<widget class="QMenu" name="menu_Help">
<property name="title">
<string>Hilfe</string>
453,7 → 459,6
<addaction name="ac_About"/>
</widget>
<addaction name="menu_Program"/>
<addaction name="menu_Preferences"/>
<addaction name="menu_Help"/>
</widget>
<action name="ac_Quit">
480,7 → 485,7
<normaloff>:/Icon/Global/Images/Icons/QMK-Communicator.png</normaloff>:/Icon/Global/Images/Icons/QMK-Communicator.png</iconset>
</property>
<property name="text">
<string>Server</string>
<string>Einstellungen</string>
</property>
</action>
</widget>
/QMK-Groundstation/trunk/QMK-Communicator/Dialogs/dlg_Preferences.cpp
30,6 → 30,11
le_TCP_Port->setText(QString("%1").arg(o_Settings->SERVER.TCP_PORT));
le_UDP_Port->setText(QString("%1").arg(o_Settings->SERVER.UDP_PORT));
le_Password->setText(o_Settings->SERVER.Password);
 
le_LiveServer->setText(o_Settings->LIVEDATA.Server);
le_LivePort->setText(o_Settings->LIVEDATA.Port);
le_LiveUser->setText(o_Settings->LIVEDATA.User);
le_LivePassword->setText(o_Settings->LIVEDATA.Password);
}
 
cSettings *dlg_Preferences::get_Settings()
38,5 → 43,10
o_Settings->SERVER.TCP_PORT = le_TCP_Port->text().toInt();
o_Settings->SERVER.UDP_PORT = le_UDP_Port->text().toInt();
 
o_Settings->LIVEDATA.Server = le_LiveServer->text();
o_Settings->LIVEDATA.Port = le_LivePort->text();
o_Settings->LIVEDATA.User = le_LiveUser->text();
o_Settings->LIVEDATA.Password = le_LivePassword->text();
 
return o_Settings;
}
/QMK-Groundstation/trunk/QMK-Communicator/Dialogs/dlg_Preferences.ui
6,98 → 6,202
<rect>
<x>0</x>
<y>0</y>
<width>251</width>
<height>160</height>
<width>400</width>
<height>192</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>400</width>
<height>0</height>
</size>
</property>
<property name="windowTitle">
<string>Server-Einstellungen</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string/>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Communicator</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>TCP</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label">
<property name="text">
<string>Port:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="le_TCP_Port"/>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_2">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>UDP</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_2">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Port:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="le_UDP_Port">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLineEdit" name="le_Password">
<property name="text">
<string>qwertz</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="4" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Live-Daten senden</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="le_LiveServer">
<property name="text">
<string>127.0.0.1</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Login:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="le_LiveUser">
<property name="text">
<string>KeyOz</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="le_LivePassword">
<property name="text">
<string>qwertz</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Port:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_LivePort">
<property name="text">
<string>64410</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>TCP</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label">
<property name="text">
<string>Port:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="le_TCP_Port"/>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_2">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>UDP</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_2">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Port:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="le_UDP_Port">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLineEdit" name="le_Password">
<property name="text">
<string>qwertz</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
</layout>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<item row="1" column="1">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
109,6 → 213,17
</item>
</layout>
</widget>
<tabstops>
<tabstop>checkBox</tabstop>
<tabstop>le_TCP_Port</tabstop>
<tabstop>le_Password</tabstop>
<tabstop>le_LiveServer</tabstop>
<tabstop>le_LiveUser</tabstop>
<tabstop>le_LivePassword</tabstop>
<tabstop>buttonBox</tabstop>
<tabstop>checkBox_2</tabstop>
<tabstop>le_UDP_Port</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
/QMK-Groundstation/trunk/QMK-Communicator/Defines.h
24,7 → 24,7
#include "../Global/Kopter.h"
 
static const QString QA_NAME = "QMK-Communicator";
static const QString QA_VERSION_NR = "1.1.5";
static const QString QA_VERSION_NR = "1.2.0";
 
#ifdef _BETA_
static const QString QA_VERSION = QA_VERSION_NR + " (BETA)";
32,8 → 32,8
static const QString QA_VERSION = QA_VERSION_NR;
#endif
 
static const QString QA_DATE = "02.12.2009";
static const QString QA_YEAR = "2008-2009";
static const QString QA_DATE = "28.03.2010";
static const QString QA_YEAR = "2008-2010";
 
static const QString QA_ABOUT =
"<HTML>"
52,4 → 52,6
static const int DEV_IP_PORT = 64400;
static const int DEV_IP_MAX = 21;
 
static const QString Base64Hash = "IypzZUNyRXQhQC0qJQ==";
 
#endif // DEFINES_H
/QMK-Groundstation/trunk/QMK-Maps/Classes/cSettings.cpp
43,21 → 43,6
GUI.Toolbar = Setting.value("Toolbar",true).toBool();
Setting.endGroup();
 
Setting.beginGroup("Data");
DATA.Intervall = Setting.value("Intervall", 500).toInt();
Setting.endGroup();
 
Setting.beginGroup("SERVER");
SERVER.Password = Setting.value("Password", QString("")).toString();
SERVER.IP_MAX = Setting.value("IP_MAX", 1).toInt();
SERVER.IP_ID = Setting.value("IP_ID", 0).toInt();
 
for (int z = 0; z < SERVER.IP_MAX; z++)
{
SERVER.IP[z] = Setting.value("IP_" + QString("%1").arg(z), QString("127.0.0.1:64400")).toString();
}
Setting.endGroup();
 
Setting.beginGroup("CONFIG");
CONFIG.cb_CenterPos = Setting.value("cb_CenterPos",true).toBool();
CONFIG.cb_ShowRoute = Setting.value("cb_ShowRoute",true).toBool();
87,21 → 72,6
Setting.setValue("Toolbar", GUI.Toolbar);
Setting.endGroup();
 
Setting.beginGroup("DATA");
Setting.setValue("Intervall", DATA.Intervall);
Setting.endGroup();
 
Setting.beginGroup("SERVER");
Setting.setValue("Password", SERVER.Password);
Setting.setValue("IP_MAX", SERVER.IP_MAX);
Setting.setValue("IP_ID", SERVER.IP_ID);
 
for (int z = 0; z < SERVER.IP_MAX; z++)
{
Setting.setValue("IP_" + QString("%1").arg(z), SERVER.IP[z]);
}
Setting.endGroup();
 
Setting.beginGroup("CONFIG");
Setting.setValue("cb_CenterPos", CONFIG.cb_CenterPos);
Setting.setValue("cb_ShowRoute", CONFIG.cb_ShowRoute);
/QMK-Groundstation/trunk/QMK-Maps/Classes/cSettings.h
33,19 → 33,6
bool Toolbar;
};
 
struct set_DATA
{
int Intervall;
};
 
struct set_SERVER
{
int IP_MAX;
int IP_ID;
QString IP[10];
QString Password;
};
 
struct set_CONFIG
{
bool cb_Goto;
71,8 → 58,6
int Settings_ID;
 
set_GUI GUI;
set_DATA DATA;
set_SERVER SERVER;
set_CONFIG CONFIG;
set_NAVI NAVI;
};
/QMK-Groundstation/trunk/QMK-Maps/Dialogs/dlg_Main.cpp
32,7 → 32,7
 
o_Settings = new cSettings();
 
o_Input = new Input();
wg_Connection->set_Client(ID_MAPS, QA_NAME + " " + QA_VERSION, DataFields);
 
o_Map = new MapControl(QSize(25,25));
l_RouteWP = new LineString();
54,26 → 54,14
showMaximized();
}
 
for(int z = 0; z < o_Settings->SERVER.IP_MAX; z++)
{
if (cb_Server->findText(o_Settings->SERVER.IP[z]) == -1)
{
cb_Server->addItem(o_Settings->SERVER.IP[z]);
}
}
wg_Connection->set_SelectVisible(false);
 
cb_Server->setCurrentIndex(o_Settings->SERVER.IP_ID);
 
le_Password->setText(o_Settings->SERVER.Password);
 
sb_Intervall->setValue(o_Settings->DATA.Intervall);
 
cb_CenterPos->setChecked(o_Settings->CONFIG.cb_CenterPos);
cb_ShowRoute->setChecked(o_Settings->CONFIG.cb_ShowRoute);
cb_ShowWPs->setChecked(o_Settings->CONFIG.cb_ShowWPs);
cb_Goto->setChecked(o_Settings->CONFIG.cb_Goto);
 
// tb_More->addWidget(cb_Maps);
tb_More->addWidget(cb_Maps);
cb_Maps->setVisible(false);
 
ac_Toolbar->setChecked(o_Settings->GUI.Toolbar);
80,7 → 68,7
 
if (ac_Toolbar->isChecked())
{
btn_Connect->setVisible(false);
wg_Connection->set_ButtonVisible(false);
}
else
{
92,11 → 80,9
// Signale mit Slots verbinden
void dlg_Main::init_Connections()
{
connect(ac_Connect, SIGNAL(triggered()), this, SLOT(slot_ac_Connect()));
connect(ac_Connect, SIGNAL(triggered()), wg_Connection, SLOT(slot_btn_Connect()));
connect(ac_Toolbar, SIGNAL(triggered()), this, SLOT(slot_ac_Toolbar()));
 
connect(sb_Intervall, SIGNAL(valueChanged(int)), this, SLOT(slot_sb_Intervall(int)));
 
connect(sl_Zoom, SIGNAL(valueChanged(int)), this, SLOT(slot_Zoom(int)));
connect(cb_Maps, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_ChangeMap(int)));
 
116,6 → 102,11
// About QMK-Kernel & About-QT Dialog einfügen
connect(ac_About, SIGNAL(triggered()), this, SLOT(slot_ac_About()));
menu_Help->addAction(trUtf8("Über &Qt"), qApp, SLOT(aboutQt()));
 
connect(wg_Connection, SIGNAL(sig_Status(int)), this, SLOT(slot_ConnectionStatus(int)));
connect(wg_Connection, SIGNAL(sig_MK_Version(s_Hardware)), this, SLOT(slot_MK_Version(s_Hardware)));
connect(wg_Connection, SIGNAL(sig_MK_NaviData(s_MK_NaviData)), this, SLOT(slot_MK_NaviData(s_MK_NaviData)));
connect(wg_Connection, SIGNAL(sig_MK_WayPoint(int)), this, SLOT(slot_MK_WayPoint(int)));
}
 
void dlg_Main::init_Directorys()
153,117 → 144,6
}
}
 
void dlg_Main::parse_IP_Data(QString t_Data)
{
QStringList Data;
Data = t_Data.split(":");
 
if (Data.count() > 1)
{
int CMD = Data[2].toInt();
 
switch(CMD)
{
case 101 :
{
o_Input->send_Data(HandlerIP::make_Frame(ID_MAPS, 101, QA_NAME + " " + QA_VERSION));
}
break;
case 502 :
{
switch (Data[3].toInt())
{
case 105 :
{
QString s_MD5PW;
QByteArray a_MD5PW;
 
a_MD5PW = QCryptographicHash::hash(le_Password->text().toAscii(),QCryptographicHash::Md5);
 
s_MD5PW = QString(a_MD5PW.toHex().data());
 
o_Input->send_Data(HandlerIP::make_Frame(ID_MAPS, 105, s_MD5PW));
}
break;
case 106 :
{
o_Input->send_Data(HandlerIP::make_Frame(ID_MAPS, 106, DataFields));
}
break;
}
}
break;
case 505 :
{
if (Data[3] == "OK")
{
}
else
{
QMessageBox::warning(this, QA_NAME, trUtf8("Authentifizierung fehlgeschlagen. <br />Daten senden zum Mikrokopter nicht möglich."), QMessageBox::Ok);
}
}
break;
}
}
}
 
// Eingangsdaten verarbeiten
void dlg_Main::parse_MK_Data(QString t_Data)
{
unsigned char OutData[150];
char *InData = t_Data.toLatin1().data();
 
if (HandlerMK::Decode_64(InData, t_Data.length(), OutData) != 0)
{
 
switch(InData[2])
{
case 'V' : // Versions-Info
{
o_Input->stop_Resend(DATA_VERSION);
VersionInfo = HandlerMK::parse_Version(OutData, InData[1] - 'a');
setWindowTitle(QA_NAME + " " + QA_VERSION + " - " + VersionInfo.Hardware + " " + VersionInfo.Version);
 
if (VersionInfo.ID == ADDRESS_NC)
{
c_Data[0] = sb_Intervall->value() / 10;
o_Input->send_Data(HandlerMK::make_Frame('o', ADDRESS_ALL, c_Data, 1).toLatin1().data());
}
else // TODO: Befehl wenden zum Wechseln auf Navi.
{
}
}
break;
case 'O' : // Navi-OSD-Data
{
if (InData[1] - 'a' == ADDRESS_NC)
{
s_MK_NaviData MK_NaviData;
 
memcpy((unsigned char *)&MK_NaviData, (unsigned char *)&OutData, sizeof(MK_NaviData));
if (MK_NaviData.Version == MK_VERSION_NAVI)
{
show_Data(MK_NaviData);
add_Position(MK_NaviData);
}
}
}
break;
case 'W' : // WayPoints
{
o_Input->stop_Resend(DATA_WRITE_WAYPOINT);
 
if (OutData[0] < l_WayPoints.count())
{
send_WayPoints(l_WayPoints, OutData[0] + 1);
}
}
break;
}
}
}
 
///////////////////////////////////////////////////////////////////
// QMK-Maps //
///////////////////////////////////////////////////////////////////
482,25 → 362,6
f_MKW->close();
}
 
void dlg_Main::show_Data(s_MK_NaviData t_NaviData)
{
QString Mode = "NC-Flags : ";
if (t_NaviData.NCFlags & 0x08) {le_Mode->setText(tr("Range Limit")); Mode += "R";}
if (t_NaviData.NCFlags & 0x10) {le_Mode->setText(tr("Serial Error")); Mode += "S";}
if (t_NaviData.NCFlags & 0x20) {le_Mode->setText(tr("Target reached")); Mode += "T";}
if (t_NaviData.NCFlags & 0x40) {le_Mode->setText(tr("Manual Control")); Mode += "M";}
if (t_NaviData.NCFlags & 0x01) {le_Mode->setText(tr("Free")); Mode += "F";}
if (t_NaviData.NCFlags & 0x02) {le_Mode->setText(tr("Position Hold")); Mode += "P";}
if (t_NaviData.NCFlags & 0x04) {le_Mode->setText(tr("Coming Home")); Mode += "C";}
 
//qDebug(Mode.toLatin1().data());
 
le_WP->setText(QString("%1/").arg(t_NaviData.WaypointIndex) + QString("%1").arg(t_NaviData.WaypointNumber));
le_WPTime->setText(QString("%1:").arg(t_NaviData.TargetHoldTime / 60) + (QString("%1").arg(t_NaviData.TargetHoldTime % 60)).rightJustified(2, '0'));
le_WPDist->setText(QString("%1m").arg(t_NaviData.TargetPositionDeviation.Distance / 10));
le_HomeDist->setText(QString("%1m").arg(t_NaviData.HomePositionDeviation.Distance / 10));
}
 
// Aktuelle MK-Position hinzufügen
void dlg_Main::add_Position(s_MK_NaviData t_NaviData)
{
577,7 → 438,7
s_WayPoint.reserve[3] = 0;
 
memcpy((unsigned char *)&c_Data, (unsigned char *)&s_WayPoint, sizeof(s_WayPoint));
o_Input->send_Data(HandlerMK::make_Frame('s', ADDRESS_NC, c_Data, sizeof(s_WayPoint)).toLatin1().data());
wg_Connection->send_Data(HandlerMK::make_Frame('s', ADDRESS_NC, c_Data, sizeof(s_WayPoint)).toLatin1().data());
}
else
{
596,7 → 457,7
s_WayPoint.Position.Status = INVALID;
 
memcpy((unsigned char *)&c_Data, (unsigned char *)&s_WayPoint, sizeof(s_WayPoint));
o_Input->send_Data(HandlerMK::make_Frame('w', ADDRESS_NC, c_Data, sizeof(s_WayPoint)).toLatin1().data(), DATA_WRITE_WAYPOINT);
wg_Connection->send_Data(HandlerMK::make_Frame('w', ADDRESS_NC, c_Data, sizeof(s_WayPoint)).toLatin1().data(), DATA_WRITE_WAYPOINT);
}
else
{
625,7 → 486,7
s_WayPoint.reserve[3] = 0; // reserve
 
memcpy((unsigned char *)&c_Data, (unsigned char *)&s_WayPoint, sizeof(s_WayPoint));
o_Input->send_Data(HandlerMK::make_Frame('w', ADDRESS_NC, c_Data, sizeof(s_WayPoint)).toLatin1().data(), DATA_WRITE_WAYPOINT);
wg_Connection->send_Data(HandlerMK::make_Frame('w', ADDRESS_NC, c_Data, sizeof(s_WayPoint)).toLatin1().data(), DATA_WRITE_WAYPOINT);
}
}
 
643,176 → 504,64
{
if (ac_Toolbar->isChecked())
{
btn_Connect->setVisible(false);
wg_Connection->set_ButtonVisible(false);
ToolBar->setVisible(true);
tb_More->setVisible(true);
}
else
{
btn_Connect->setVisible(true);
wg_Connection->set_ButtonVisible(true);
ToolBar->setVisible(false);
tb_More->setVisible(false);
}
}
 
 
// Datenintervall geändert.
void dlg_Main::slot_sb_Intervall(int t_Intervall)
void dlg_Main::slot_ConnectionStatus(int li_Status)
{
if (t_Intervall == 0)
if (li_Status)
{
c_Data[0] = 0;
ac_Connect->setChecked(true);
ac_Connect->setText(tr("Trennen"));
}
else
{
c_Data[0] = t_Intervall / 10;
}
o_Input->send_Data(HandlerMK::make_Frame('o', ADDRESS_ALL, c_Data, 1).toLatin1().data());
}
 
// Verbindung zum Server auf f_Settings = new wdg_Settings( this );bauen
void dlg_Main::slot_ac_Connect()
{
if (!o_Input->IsOpen())
{
if (cb_Server->findText(cb_Server->currentText()) == -1)
{
cb_Server->addItem(cb_Server->currentText());
cb_Server->setCurrentIndex(cb_Server->findText(cb_Server->currentText()));
}
 
cb_Server->setEnabled(false);
le_Password->setEnabled(false);
 
if (cb_Server->currentText().startsWith('/'))
{
o_Input = new Input_TTY();
o_Input->Init();
 
set_Input s_Input;
s_Input.Main = cb_Server->currentText();
 
if (o_Input->Open(s_Input) == true)
{
ac_Connect->setText(tr("Trennen"));
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
}
 
}
else // Connect über TCPIP
{
o_Input = new Input_TCP();
o_Input->Init();
 
set_Input s_Input;
 
QStringList Server = cb_Server->currentText().split(":");
 
s_Input.Main = Server[0];
s_Input.Sub = Server[1];
 
if (o_Input->Open(s_Input) == true)
{
connect(o_Input, SIGNAL(sig_Disconnected(int)), this, SLOT(slot_Input_Disconnected(int)));
connect(o_Input, SIGNAL(sig_Connected()), this, SLOT(slot_Input_Connected()));
}
}
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
 
ac_Connect->setChecked(false);
ac_Connect->setText(tr("Verbinden"));
o_Input->Close();
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
if (o_Input->Mode() == TCP)
{
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
}
}
}
 
// Neue Daten empfangen.
void dlg_Main::slot_Input_Data(QString t_Data)
void dlg_Main::slot_MK_Version(s_Hardware ls_Version)
{
if ((t_Data[0] == '#'))
{
if ((HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length() - 1)) || ((o_Input->Mode() == TTY) && (HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length()))))
{
parse_MK_Data(t_Data);
}
else
{
// qDebug(QString("CRC-Error - " + t_Data).toLatin1().data());
}
}
else if ((o_Input->Mode() == TCP) && (t_Data[0] == '$'))
{
parse_IP_Data(t_Data);
}
gs_Version = ls_Version;
setWindowTitle(QA_NAME + " " + QA_VERSION + " - " + ls_Version.Hardware + " " + ls_Version.Version);
}
 
// Serververbindung beendet
void dlg_Main::slot_Input_Disconnected(int Error)
void dlg_Main::slot_MK_NaviData(s_MK_NaviData ps_MK_NaviData)
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
QString Mode = "NC-Flags : ";
if (ps_MK_NaviData.NCFlags & 0x08) {le_Mode->setText(tr("Range Limit")); Mode += "R";}
if (ps_MK_NaviData.NCFlags & 0x10) {le_Mode->setText(tr("Serial Error")); Mode += "S";}
if (ps_MK_NaviData.NCFlags & 0x20) {le_Mode->setText(tr("Target reached")); Mode += "T";}
if (ps_MK_NaviData.NCFlags & 0x40) {le_Mode->setText(tr("Manual Control")); Mode += "M";}
if (ps_MK_NaviData.NCFlags & 0x01) {le_Mode->setText(tr("Free")); Mode += "F";}
if (ps_MK_NaviData.NCFlags & 0x02) {le_Mode->setText(tr("Position Hold")); Mode += "P";}
if (ps_MK_NaviData.NCFlags & 0x04) {le_Mode->setText(tr("Coming Home")); Mode += "C";}
 
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
le_WP->setText(QString("%1/").arg(ps_MK_NaviData.WaypointIndex) + QString("%1").arg(ps_MK_NaviData.WaypointNumber));
le_WPTime->setText(QString("%1:").arg(ps_MK_NaviData.TargetHoldTime / 60) + (QString("%1").arg(ps_MK_NaviData.TargetHoldTime % 60)).rightJustified(2, '0'));
le_WPDist->setText(QString("%1m").arg(ps_MK_NaviData.TargetPositionDeviation.Distance / 10));
le_HomeDist->setText(QString("%1m").arg(ps_MK_NaviData.HomePositionDeviation.Distance / 10));
 
ac_Connect->setChecked(false);
ac_Connect->setText(tr("Verbinden"));
btn_Connect->setChecked(false);
add_Position(ps_MK_NaviData);
}
 
switch (Error)
void dlg_Main::slot_MK_WayPoint(int pi_WayPointID)
{
if (pi_WayPointID < l_WayPoints.count())
{
case REMOTECLOSED :
{
// lb_Status->setText(tr("Verbindung vom Server beendet."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Verbindung wurde vom Server beendet."), QMessageBox::Ok);
}
break;
case REFUSED :
{
// lb_Status->setText(tr("Server nicht gefunden."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Kann nicht zum Server verbinden."), QMessageBox::Ok);
}
break;
case 3 :
{
// lb_Status->setText(tr("Serververbindung getrennt. Logindaten falsch."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Loginname oder Password falsch."), QMessageBox::Ok);
}
break;
default :
{
// lb_Status->setText(tr("Getrennt vom QMK-Datenserver."));
}
break;
send_WayPoints(l_WayPoints, pi_WayPointID + 1);
}
 
}
 
// Serververbindung hergestellt
void dlg_Main::slot_Input_Connected()
{
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
ac_Connect->setText(tr("Trennen"));
}
 
///////////////////////////////////////////////////////////////////
// QMK-Maps //
///////////////////////////////////////////////////////////////////
1143,20 → 892,6
o_Settings->GUI.Point = pos();
o_Settings->GUI.Toolbar = ac_Toolbar->isChecked();
 
o_Settings->DATA.Intervall = sb_Intervall->value();
 
o_Settings->SERVER.Password = le_Password->text();
o_Settings->SERVER.IP_MAX = cb_Server->count();
o_Settings->SERVER.IP_ID = cb_Server->currentIndex();
 
for (int z = 0; z < cb_Server->count(); z++)
{
if (z < 10)
{
o_Settings->SERVER.IP[z] = cb_Server->itemText(z);
}
}
 
o_Settings->CONFIG.cb_CenterPos = cb_CenterPos->isChecked();
o_Settings->CONFIG.cb_ShowRoute = cb_ShowRoute->isChecked();
o_Settings->CONFIG.cb_ShowWPs = cb_ShowWPs->isChecked();
/QMK-Groundstation/trunk/QMK-Maps/Dialogs/dlg_Main.h
20,8 → 20,6
#define DLG_MAIN_H
 
#include <QtGui/QMainWindow>
//#include <QTcpServer>
//#include <QTcpSocket>
#include <QFile>
 
#include "ui_dlg_Main.h"
31,16 → 29,8
 
#include "../Classes/cSettings.h"
 
#include "../../Global/Kopter.h"
#include "../../Global/MK_Datatypes.h"
 
#include "../../Global/Class_QMapControl.h"
 
#include "../../Global/Class_Input/Input.h"
#include "../../Global/Class_Input/Input_TCP.h"
#include "../../Global/Class_Input/Input_TTY.h"
#include "../../Global/Class_HandlerIP/HandlerIP.h"
#include "../../Global/Class_HandlerMK/HandlerMK.h"
#include "../../Global/Class_HandlerKML/HandlerKML.h"
 
using namespace qmapcontrol;
55,11 → 45,9
void create_Map();
 
private:
// Input Device.
Input *o_Input;
 
// Info über die Hardware
s_Hardware VersionInfo;
s_Hardware gs_Version;
 
// Settings-Object
cSettings *o_Settings;
73,10 → 61,6
void init_Directorys();
s_Directorys s_Dir;
 
// Einkommende Datenpackete zerlegen.
void parse_MK_Data(QString t_Data);
void parse_IP_Data(QString t_Data);
 
// QMK-Maps
QFile *o_Record;
 
118,7 → 102,7
void save_WayPointsMKW(QString s_File);
 
void add_Position(s_MK_NaviData t_NaviData);
void show_Data(s_MK_NaviData t_NaviData);
// void show_Data(s_MK_NaviData t_NaviData);
void send_Target(Point *t_Target);
void send_WayPoints(QList<sWayPoint> l_WayPoints, int t_Pos = 0);
 
126,14 → 110,11
void slot_ac_About();
void slot_ac_Toolbar();
 
void slot_ac_Connect();
void slot_sb_Intervall(int t_Intervall);
void slot_ConnectionStatus(int li_Status);
void slot_MK_Version(s_Hardware ls_Version);
void slot_MK_NaviData(s_MK_NaviData ps_MK_NaviData);
void slot_MK_WayPoint(int pi_WayPointID);
 
// Einkommende Datenpackete.
void slot_Input_Data(QString t_Data);
void slot_Input_Disconnected(int Error);
void slot_Input_Connected();
 
// QMK-Maps
void slot_Zoom(int t_Zoom);
void slot_ChangeMap(int);
149,9 → 130,6
void slot_ac_LoadMapPic();
void slot_ac_Record();
 
// void slot_GotoTarget();
// void slot_Close();
 
void slot_ac_LoadWayPoints();
void slot_ac_SaveRoute();
 
/QMK-Groundstation/trunk/QMK-Maps/Dialogs/dlg_Main.ui
7,7 → 7,7
<x>0</x>
<y>0</y>
<width>711</width>
<height>404</height>
<height>336</height>
</rect>
</property>
<property name="windowTitle">
18,140 → 18,9
<normaloff>:/Icon/Global/Images/Icons/QMK-Maps.png</normaloff>:/Icon/Global/Images/Icons/QMK-Maps.png</iconset>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QGridLayout" name="gridLayout_6">
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="1" colspan="2">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,0,0,0,0,0,0,0">
<property name="spacing">
<number>2</number>
</property>
<property name="margin">
<number>2</number>
</property>
<item>
<widget class="QToolButton" name="btn_Connect">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../QMK-Maps.qrc">
<normaloff>:/Actions/Global/Images/Actions/Connection-NO.png</normaloff>
<normalon>:/Actions/Global/Images/Actions/Connection-OK.png</normalon>:/Actions/Global/Images/Actions/Connection-NO.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_Server">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>PW:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_Password">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Intervall:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="sb_Intervall">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="suffix">
<string> ms</string>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>50</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>35</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="wgt_Connection" name="wg_Connection" native="true"/>
</item>
<item row="1" column="1">
<widget class="QFrame" name="frame_3">
484,7 → 353,7
</layout>
</widget>
</item>
<item row="3" column="0" colspan="2">
<item row="3" column="0" rowspan="2" colspan="2">
<spacer name="AAA2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
630,6 → 499,12
<addaction name="menu_Help"/>
</widget>
<widget class="QToolBar" name="ToolBar">
<property name="minimumSize">
<size>
<width>0</width>
<height>80</height>
</size>
</property>
<property name="windowTitle">
<string>toolBar</string>
</property>
776,6 → 651,14
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>wgt_Connection</class>
<extends>QWidget</extends>
<header>wgt_Connection.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../QMK-Maps.qrc"/>
</resources>
796,37 → 679,5
</hint>
</hints>
</connection>
<connection>
<sender>ac_Connect</sender>
<signal>triggered(bool)</signal>
<receiver>btn_Connect</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>133</x>
<y>51</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_Connect</sender>
<signal>clicked()</signal>
<receiver>ac_Connect</receiver>
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel">
<x>133</x>
<y>51</y>
</hint>
<hint type="destinationlabel">
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
</connections>
</ui>
/QMK-Groundstation/trunk/QMK-Maps/Defines.h
24,7 → 24,7
#include "../Global/Kopter.h"
 
static const QString QA_NAME = "QMK-Maps";
static const QString QA_VERSION_NR = "1.1.4";
static const QString QA_VERSION_NR = "1.2.0";
 
#ifdef _BETA_
static const QString QA_VERSION = QA_VERSION_NR + " (BETA)";
32,8 → 32,8
static const QString QA_VERSION = QA_VERSION_NR;
#endif
 
static const QString QA_DATE = "30.11.2009";
static const QString QA_YEAR = "2008-2009";
static const QString QA_DATE = "28.03.2010";
static const QString QA_YEAR = "2008-2010";
 
static const QString QA_ABOUT =
"<HTML>"
/QMK-Groundstation/trunk/QMK-Maps/QMK-Maps.pro
2,9 → 2,8
# Project created by QtCreator 2009-07-20T20:04:00
# -------------------------------------------------
 
DEFINES += _TTY_POSIX_
include(../Global/Class_QMapControl.pri)
include(../Global/Class_SerialPort.pri)
include(../Global/Widget_Connection.pri)
 
QT += network \
xml
18,25 → 17,13
RCC_DIR = ../Binary/.build/QMK-Maps
RESOURCES += QMK-Maps.qrc
SOURCES += main.cpp \
../Global/Class_Input/Input.cpp \
../Global/Class_Input/Input_TCP.cpp \
../Global/Class_Input/Input_TTY.cpp \
../Global/Class_HandlerMK/HandlerMK.cpp \
../Global/Class_HandlerIP/HandlerIP.cpp \
Dialogs/dlg_Main.cpp \
Dialogs/dlg_MapPos.cpp \
Classes/cSettings.cpp \
../Global/Class_HandlerKML/HandlerKML.cpp
HEADERS += Defines.h \
../Global/Kopter.h \
../Global/MK_Datatypes.h \
../Global/Global.h \
../Global/Class_QMapControl.h \
../Global/Class_Input/Input.h \
../Global/Class_Input/Input_TCP.h \
../Global/Class_Input/Input_TTY.h \
../Global/Class_HandlerMK/HandlerMK.h \
../Global/Class_HandlerIP/HandlerIP.h \
Dialogs/dlg_Main.h \
Dialogs/dlg_MapPos.h \
Classes/cSettings.h \
/QMK-Groundstation/trunk/QMK-Scope/Classes/cSettings.cpp
76,7 → 76,7
Setting.endGroup();
 
Setting.beginGroup("DATA");
DATA.Debug_Intervall = Setting.value("Debug-Intervall", 500).toInt();
// DATA.Debug_Intervall = Setting.value("Debug-Intervall", 500).toInt();
DATA.Plotter_Count = Setting.value("Plotter-Count", 100).toInt();
Setting.endGroup();
 
85,7 → 85,7
GUI.Size = Setting.value("Size", QSize(700, 300)).toSize();
GUI.Point = Setting.value("Point",QPoint(1,1)).toPoint();
Setting.endGroup();
 
/*
Setting.beginGroup("SERVER");
SERVER.Password = Setting.value("Password", QString("")).toString();
SERVER.IP_MAX = Setting.value("IP_MAX", 1).toInt();
96,6 → 96,7
SERVER.IP[z] = Setting.value("IP_" + QString("%1").arg(z), QString("127.0.0.1:64400")).toString();
}
Setting.endGroup();
*/
}
 
void cSettings::write_Settings()
108,7 → 109,7
 
Setting.beginGroup("DATA");
Setting.setValue("Plotter-Count", DATA.Plotter_Count);
Setting.setValue("Debug-Intervall", DATA.Debug_Intervall);
// Setting.setValue("Debug-Intervall", DATA.Debug_Intervall);
Setting.endGroup();
 
Setting.beginGroup("GUI");
116,7 → 117,7
Setting.setValue("Size", GUI.Size);
Setting.setValue("Point", GUI.Point);
Setting.endGroup();
 
/*
Setting.beginGroup("SERVER");
Setting.setValue("Password", SERVER.Password);
Setting.setValue("IP_MAX", SERVER.IP_MAX);
127,6 → 128,7
Setting.setValue("IP_" + QString("%1").arg(z), SERVER.IP[z]);
}
Setting.endGroup();
*/
}
 
 
/QMK-Groundstation/trunk/QMK-Scope/Classes/cSettings.h
44,9 → 44,9
struct set_DATA
{
int Plotter_Count;
int Debug_Intervall;
// int Debug_Intervall;
};
 
/*
struct set_SERVER
{
int IP_MAX;
54,7 → 54,7
QString IP[10];
QString Password;
};
 
*/
class cSettings
{
public:
65,7 → 65,7
set_GUI GUI;
set_DebugData DebugData;
set_DATA DATA;
set_SERVER SERVER;
// set_SERVER SERVER;
 
void read_DebugLabels(int ID);
void write_DebugLabels(int ID);
/QMK-Groundstation/trunk/QMK-Scope/Dialogs/dlg_Main.cpp
27,11 → 27,12
{
setupUi(this);
 
 
o_Settings = new cSettings();
 
o_Settings->read_DebugLabels(0);
 
o_Input = new Input();
wg_Connection->set_Client(ID_SCOPE, QA_NAME + " " + QA_VERSION, DataFields);
 
init_GUI();
init_Connections();
51,20 → 52,9
showMaximized();
}
 
for(int z = 0; z < o_Settings->SERVER.IP_MAX; z++)
{
if (cb_Server->findText(o_Settings->SERVER.IP[z]) == -1)
{
cb_Server->addItem(o_Settings->SERVER.IP[z]);
}
}
wg_Connection->set_SelectVisible(false);
wg_Connection->set_ButtonVisible(false);
 
cb_Server->setCurrentIndex(o_Settings->SERVER.IP_ID);
 
le_Password->setText(o_Settings->SERVER.Password);
 
sb_Intervall->setValue(o_Settings->DATA.Debug_Intervall);
 
btn_Start->setCheckable(true);
 
ac_Plotter->setChecked(true);
98,9 → 88,8
// Signale mit Slots verbinden
void dlg_Main::init_Connections()
{
connect(sb_Intervall, SIGNAL(valueChanged(int)), this, SLOT(slot_sb_Intervall(int)));
connect(ac_Connect, SIGNAL(triggered()), wg_Connection, SLOT(slot_btn_Connect()));
 
connect(ac_Connect, SIGNAL(triggered()), this, SLOT(slot_ac_Connect()));
connect(ac_Plotter, SIGNAL(triggered()), this, SLOT(slot_ac_Plotter()));
connect(ac_Debug, SIGNAL(triggered()), this, SLOT(slot_ac_Debug()));
connect(ac_Chose, SIGNAL(triggered()), this, SLOT(slot_ac_Chose()));
107,10 → 96,6
 
connect(ac_ReadLabels, SIGNAL(triggered()), this, SLOT(slot_ac_ReadLabels()));
 
connect(rb_NC, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
connect(rb_FC, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
connect(rb_MK3MAG, SIGNAL(clicked()), this, SLOT(slot_rb_Hardware()));
 
connect(Plotter_Scroll, SIGNAL(valueChanged(int)), this, SLOT(slot_Plotter_Scroll(int)));
 
connect(btn_Start, SIGNAL(clicked()), this, SLOT(slot_Plotter_Start()));
119,6 → 104,11
// About QMK-Kernel & About-QT Dialog einfügen
connect(ac_About, SIGNAL(triggered()), this, SLOT(slot_ac_About()));
menu_Help->addAction(trUtf8("Über &Qt"), qApp, SLOT(aboutQt()));
 
connect(wg_Connection, SIGNAL(sig_Status(int)), this, SLOT(slot_ConnectionStatus(int)));
connect(wg_Connection, SIGNAL(sig_MK_Version(s_Hardware)), this, SLOT(slot_MK_Version(s_Hardware)));
connect(wg_Connection, SIGNAL(sig_MK_Debug(s_MK_Debug)), this, SLOT(slot_MK_Debug(s_MK_Debug)));
connect(wg_Connection, SIGNAL(sig_MK_DebugLabels(s_MK_DebugLabels)), this, SLOT(slot_MK_DebugLabels(s_MK_DebugLabels)));
}
 
void dlg_Main::init_Plotter()
198,171 → 188,95
qwt_Plotter->replot();
}
 
// IP-Input-Daten verarbeiten.
void dlg_Main::parse_IP_Data(QString t_Data)
///////////
// Slots //
///////////
 
// About-Dialog
void dlg_Main::slot_ac_About()
{
QStringList Data;
Data = t_Data.split(":");
QMessageBox::about(this, trUtf8(("Über ")) + QA_NAME, QA_ABOUT);
}
 
if (Data.count() > 1)
void dlg_Main::slot_ConnectionStatus(int li_Status)
{
if (li_Status)
{
int CMD = Data[2].toInt();
ac_Connect->setChecked(true);
ac_Connect->setText(tr("Trennen"));
}
else
{
ac_Connect->setChecked(false);
ac_Connect->setText(tr("Verbinden"));
}
}
 
switch(CMD)
{
case 101 :
{
o_Input->send_Data(HandlerIP::make_Frame(ID_SCOPE, 101, QA_NAME + " " + QA_VERSION));
}
case 502 :
{
switch (Data[3].toInt())
{
case 105 :
{
QString s_MD5PW;
QByteArray a_MD5PW;
void dlg_Main::slot_MK_Version(s_Hardware ls_Version)
{
gs_Version = ls_Version;
setWindowTitle(QA_NAME + " " + QA_VERSION + " - " + ls_Version.Hardware + " " + ls_Version.Version);
 
a_MD5PW = QCryptographicHash::hash(le_Password->text().toAscii(),QCryptographicHash::Md5);
o_Settings->read_DebugLabels(gs_Version.ID);
 
s_MD5PW = QString(a_MD5PW.toHex().data());
if (o_Settings->DebugData.Version != gs_Version.Version)
{
qDebug(QString("Debug-Labels unterschiedlich. Neue anforden. " + o_Settings->DebugData.Version + " <> " + gs_Version.Version).toLatin1().data());
usleep(50000);
 
o_Input->send_Data(HandlerIP::make_Frame(ID_SCOPE, 105, s_MD5PW));
}
break;
case 106 :
{
o_Input->send_Data(HandlerIP::make_Frame(ID_SCOPE, 106, DataFields));
}
break;
}
}
break;
case 505 :
{
if (Data[3] == "OK")
{
}
else
{
QMessageBox::warning(this, QA_NAME, trUtf8("Authentifizierung fehlgeschlagen. <br />Daten senden zum Mikrokopter nicht möglich."), QMessageBox::Ok);
}
}
break;
slot_ac_ReadLabels();
}
else
{
for(int z = 0; z < MAX_DebugData; z++)
{
lb_Debug[z]->setText(o_Settings->DebugData.Label[z]);
cb_Debug[z]->setText(o_Settings->DebugData.Label[z]);
cb_Debug[z]->setChecked(o_Settings->DebugData.Show_Plotter[z]);
}
config_Plotter();
}
}
 
// MK-Eingangsdaten verarbeiten
void dlg_Main::parse_MK_Data(QString t_Data)
void dlg_Main::slot_MK_Debug(s_MK_Debug ls_Debug)
{
unsigned char OutData[150];
char *InData = t_Data.toLatin1().data();
gs_Debug = ls_Debug;
 
if (HandlerMK::Decode_64(InData, t_Data.length(), OutData) != 0)
for (int z = 0; z < MAX_DebugData; z++)
{
switch(InData[2])
Debug_Data[z] = ls_Debug.Analog[z];
if (ac_Debug->isChecked())
{
case 'A' : // 0.76e - Debug-Labels
{
o_Input->stop_Resend(DATA_READ_LABEL);
int Position = OutData[0];
if (Position < 32)
{
o_Settings->DebugData.Label[Position] = HandlerMK::Data2QString(OutData,1,17).trimmed();
if (o_Settings->DebugData.Label[Position] == "")
{
o_Settings->DebugData.Label[Position] = "Debug-" + QString("%1").arg(Position);
}
lb_Debug[Position]->setText("" + o_Settings->DebugData.Label[Position]);
cb_Debug[Position]->setText("" + o_Settings->DebugData.Label[Position]);
le_Debug[z]->setText(QString("%1").arg(Debug_Data[z]));
}
}
if (btn_Start->isChecked())
{
update_Plotter();
}
}
 
Position ++;
void dlg_Main::slot_MK_DebugLabels(s_MK_DebugLabels MK_DebugLabels)
{
if (MK_DebugLabels.Position < 32)
{
o_Settings->DebugData.Label[MK_DebugLabels.Position] = MK_DebugLabels.Text;
if (o_Settings->DebugData.Label[MK_DebugLabels.Position] == "")
{
o_Settings->DebugData.Label[MK_DebugLabels.Position] = "Debug-" + QString("%1").arg(MK_DebugLabels.Position);
}
lb_Debug[MK_DebugLabels.Position]->setText("" + o_Settings->DebugData.Label[MK_DebugLabels.Position]);
cb_Debug[MK_DebugLabels.Position]->setText("" + o_Settings->DebugData.Label[MK_DebugLabels.Position]);
 
if ((Position < 32) && (get_Analoglabels == true))
{
c_Data[0] = Position;
o_Input->send_Data(HandlerMK::make_Frame('a', ADDRESS_ALL, c_Data, 1).toLatin1().data(), DATA_READ_LABEL);
}
}
if (Position == 32)
{
o_Settings->DebugData.Version = VersionInfo.Version;
o_Settings->write_DebugLabels(VersionInfo.ID);
config_Plotter();
get_Analoglabels = false;
}
}
break;
 
case 'D' : // 0.75a - Debug-Daten
{
for (int z = 0; z < MAX_DebugData; z++)
{
Debug_Data[z] = HandlerMK::Data2Int(OutData, (z * 2) + 2);
if (ac_Debug->isChecked())
{
le_Debug[z]->setText(QString("%1").arg(Debug_Data[z]));
}
}
if (btn_Start->isChecked())
{
update_Plotter();
}
}
break;
 
case 'V' : // 0.75a - Versions-Info
{
o_Input->stop_Resend(DATA_VERSION);
VersionInfo = HandlerMK::parse_Version(OutData, InData[1] - 'a');
setWindowTitle(QA_NAME + " " + QA_VERSION + " - " + VersionInfo.Hardware + " " + VersionInfo.Version);
 
if (VersionInfo.ID == ADDRESS_FC)
{
rb_FC->setChecked(true);
}
if (VersionInfo.ID == ADDRESS_NC)
{
rb_NC->setChecked(true);
}
if (VersionInfo.ID == ADDRESS_MK3MAG)
{
rb_MK3MAG->setChecked(true);
}
 
o_Settings->read_DebugLabels(VersionInfo.ID);
 
if (o_Settings->DebugData.Version != VersionInfo.Version)
{
// qDebug(QString("Debug-Labels unterschiedlich. Neue anforden. " + o_Settings->DebugData.Version + " <> " + VersionInfo.Version).toLatin1().data());
 
usleep(50000);
 
slot_ac_ReadLabels();
// o_Input->send_Data(HandlerMK::make_Frame('a', ADDRESS_ALL, c_Data, 1).toLatin1().data());
}
else
{
for(int z = 0; z < MAX_DebugData; z++)
{
lb_Debug[z]->setText(o_Settings->DebugData.Label[z]);
cb_Debug[z]->setText(o_Settings->DebugData.Label[z]);
cb_Debug[z]->setChecked(o_Settings->DebugData.Show_Plotter[z]);
}
config_Plotter();
}
c_Data[0] = sb_Intervall->value() / 10;
o_Input->send_Data(HandlerMK::make_Frame('d', ADDRESS_ALL, c_Data, 1).toLatin1().data());
}
break;
}
}
if (MK_DebugLabels.Position == 31)
{
o_Settings->DebugData.Version = gs_Version.Version;
o_Settings->write_DebugLabels(gs_Version.ID);
config_Plotter();
}
}
 
///////////
// Slots //
///////////
void dlg_Main::slot_Plotter_Start()
{
if (btn_Start->isChecked())
382,12 → 296,11
o_Settings->DebugData.Show_Plotter[z] = cb_Debug[z]->isChecked();
}
config_Plotter();
o_Settings->write_DebugLabels(VersionInfo.ID);
o_Settings->write_DebugLabels(gs_Version.ID);
}
 
void dlg_Main::slot_ac_Chose()
{
 
for(int z = 0; z < MAX_DebugData; z++)
{
cb_Debug[z]->setChecked(o_Settings->DebugData.Show_Plotter[z]);
417,199 → 330,10
 
void dlg_Main::slot_ac_ReadLabels()
{
get_Analoglabels = true;
c_Data[0] = 0;
o_Input->send_Data(HandlerMK::make_Frame('a', ADDRESS_ALL, c_Data, 1).toLatin1().data(), DATA_READ_LABEL);
wg_Connection->send_Data(HandlerMK::make_Frame('a', ADDRESS_ALL, c_Data, 1).toLatin1().data(), DATA_READ_LABEL);
}
 
// About-Dialog
void dlg_Main::slot_ac_About()
{
QMessageBox::about(this, trUtf8(("Über ")) + QA_NAME, QA_ABOUT);
}
 
// Datenintervall geändert.
void dlg_Main::slot_sb_Intervall(int t_Intervall)
{
if (t_Intervall == 0)
{
c_Data[0] = 0;
}
else
{
c_Data[0] = t_Intervall / 10;
}
o_Input->send_Data(HandlerMK::make_Frame('d', ADDRESS_ALL, c_Data, 1).toLatin1().data());
}
 
// Hardware auswählen.
void dlg_Main::slot_rb_Hardware()
{
if ((rb_NC->isChecked() == false) && (VersionInfo.ID != ADDRESS_NC))
{
o_Input->send_Data(HandlerMK::get_SelectNC());
}
 
if (rb_FC->isChecked())
{
o_Input->send_Data(HandlerMK::get_SelectFC());
}
else
if (rb_MK3MAG->isChecked())
{
o_Input->send_Data(HandlerMK::get_SelectMK3MAG());
}
else
if (rb_NC->isChecked())
{
o_Input->send_Data(HandlerMK::get_SelectNC());
}
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
}
 
// Verbindung zum Server aufbauen
void dlg_Main::slot_ac_Connect()
{
if (!o_Input->IsOpen())
{
if (cb_Server->findText(cb_Server->currentText()) == -1)
{
cb_Server->addItem(cb_Server->currentText());
cb_Server->setCurrentIndex(cb_Server->findText(cb_Server->currentText()));
}
 
cb_Server->setEnabled(false);
le_Password->setEnabled(false);
 
// Connect über Device
if (cb_Server->currentText().startsWith('/'))
{
o_Input = new Input_TTY();
o_Input->Init();
 
set_Input s_Input;
s_Input.Main = cb_Server->currentText();
 
if (o_Input->Open(s_Input) == true)
{
ac_Connect->setText(tr("Trennen"));
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
}
 
}
else // Connect über TCPIP
{
o_Input = new Input_TCP();
o_Input->Init();
 
set_Input s_Input;
 
QStringList Server = cb_Server->currentText().split(":");
 
s_Input.Main = Server[0];
s_Input.Sub = Server[1];
 
if (o_Input->Open(s_Input) == true)
{
connect(o_Input, SIGNAL(sig_Disconnected(int)), this, SLOT(slot_Input_Disconnected(int)));
connect(o_Input, SIGNAL(sig_Connected()), this, SLOT(slot_Input_Connected()));
}
}
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
 
ac_Connect->setText(tr("Verbinden"));
o_Input->Close();
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
if (o_Input->Mode() == TCP)
{
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
}
}
}
 
// Neue Daten empfangen.
void dlg_Main::slot_Input_Data(QString t_Data)
{
if ((t_Data[0] == '#'))
{
if ((HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length() - 1)) || ((o_Input->Mode() == TTY) && (HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length()))))
{
parse_MK_Data(t_Data);
}
else
{
qDebug(QString("CRC-Error - " + t_Data).toLatin1().data());
}
}
else if ((o_Input->Mode() == TCP) && (t_Data[0] == '$'))
{
parse_IP_Data(t_Data);
}
}
 
void dlg_Main::slot_Input_Disconnected(int Error)
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
 
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
 
ac_Connect->setChecked(false);
ac_Connect->setText(tr("Verbinden"));
 
switch (Error)
{
case REMOTECLOSED :
{
// lb_Status->setText(tr("Verbindung vom Server beendet."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Verbindung wurde vom Server beendet."), QMessageBox::Ok);
}
break;
case REFUSED :
{
// lb_Status->setText(tr("Server nicht gefunden."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Kann nicht zum Server verbinden."), QMessageBox::Ok);
}
break;
case 3 :
{
// lb_Status->setText(tr("Serververbindung getrennt. Logindaten falsch."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Loginname oder Password falsch."), QMessageBox::Ok);
}
break;
default :
{
// lb_Status->setText(tr("Getrennt vom QMK-Datenserver."));
}
break;
}
 
}
 
void dlg_Main::slot_Input_Connected()
{
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
 
// o_Input->send_Data(HandlerIP::make_Frame(ID_SCOPE, 101, QA_NAME + " " + QA_VERSION));
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
ac_Connect->setText(tr("Trennen"));
}
 
// Programm Ende
dlg_Main::~dlg_Main()
{
617,21 → 341,5
o_Settings->GUI.Size = size();
o_Settings->GUI.Point = pos();
 
o_Settings->DATA.Debug_Intervall = sb_Intervall->value();
 
o_Settings->SERVER.Password = le_Password->text();
o_Settings->SERVER.IP_MAX = cb_Server->count();
o_Settings->SERVER.IP_ID = cb_Server->currentIndex();
 
for (int z = 0; z < cb_Server->count(); z++)
{
if (z < 10)
{
o_Settings->SERVER.IP[z] = cb_Server->itemText(z);
}
}
 
o_Settings->write_Settings();
 
// qDebug("Ende.");
}
/QMK-Groundstation/trunk/QMK-Scope/Dialogs/dlg_Main.h
28,7 → 28,6
#include <QTcpServer>
#include <QTcpSocket>
 
 
#include <qwt_plot_curve.h>
#include <qwt_plot_grid.h>
#include <qwt_legend.h>
41,13 → 40,6
 
#include "../Classes/cSettings.h"
 
#include "../../Global/Kopter.h"
#include "../../Global/Class_Input/Input.h"
#include "../../Global/Class_Input/Input_TCP.h"
#include "../../Global/Class_Input/Input_TTY.h"
#include "../../Global/Class_HandlerIP/HandlerIP.h"
#include "../../Global/Class_HandlerMK/HandlerMK.h"
 
class dlg_Main : public QMainWindow, public Ui::dlg_Main_UI
{
Q_OBJECT
57,9 → 49,6
~dlg_Main();
 
private:
// Input Device.
Input *o_Input;
 
// Settings-Object
cSettings *o_Settings;
 
69,12 → 58,12
QFont Font_1;
 
// Info über die Hardware
s_Hardware VersionInfo;
s_Hardware gs_Version;
 
// Datenspeicher zum Senden.
char c_Data[150];
 
bool get_Analoglabels;
s_MK_Debug gs_Debug;
 
int Debug_Data[MAX_DebugData];
 
94,14 → 83,13
void update_Plotter();
void config_Plotter();
 
// Einkommende Datenpackete zerlegen.
void parse_MK_Data(QString t_Data);
void parse_IP_Data(QString t_Data);
 
private slots:
void slot_ac_About();
 
void slot_ac_Connect();
void slot_ConnectionStatus(int li_Status);
void slot_MK_Version(s_Hardware ls_Version);
void slot_MK_Debug(s_MK_Debug ls_Debug);
void slot_MK_DebugLabels(s_MK_DebugLabels MK_DebugLabels);
 
void slot_ac_Plotter();
void slot_ac_Debug();
111,18 → 99,8
 
void slot_btn_ChoseOK();
 
void slot_rb_Hardware();
 
void slot_Plotter_Start();
void slot_Plotter_Scroll(int Position);
 
void slot_sb_Intervall(int t_Intervall);
 
// Einkommende Datenpackete.
void slot_Input_Data(QString t_Data);
 
void slot_Input_Disconnected(int Error);
void slot_Input_Connected();
};
 
#endif // DLG_MAIN_H
/QMK-Groundstation/trunk/QMK-Scope/Dialogs/dlg_Main.ui
6,8 → 6,8
<rect>
<x>0</x>
<y>0</y>
<width>726</width>
<height>343</height>
<width>719</width>
<height>314</height>
</rect>
</property>
<property name="windowTitle">
25,150 → 25,6
<property name="spacing">
<number>2</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>4</number>
</property>
<property name="margin">
<number>4</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_Server">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>PW:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_Password">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rb_FC">
<property name="text">
<string>FC</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rb_NC">
<property name="text">
<string>NC</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rb_MK3MAG">
<property name="text">
<string>MK3MAG</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Intervall:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="sb_Intervall">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="suffix">
<string> ms</string>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>50</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>35</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QStackedWidget" name="wg_Pages">
<property name="currentIndex">
317,6 → 173,9
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="wgt_Connection" name="wg_Connection" native="true"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
324,7 → 183,7
<rect>
<x>0</x>
<y>0</y>
<width>726</width>
<width>719</width>
<height>21</height>
</rect>
</property>
352,6 → 211,12
<addaction name="menu_Help"/>
</widget>
<widget class="QToolBar" name="ToolBar">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="windowTitle">
<string>toolBar</string>
</property>
466,6 → 331,12
<extends>QFrame</extends>
<header>qwt_plot.h</header>
</customwidget>
<customwidget>
<class>wgt_Connection</class>
<extends>QWidget</extends>
<header>wgt_Connection.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../QMK-Scope.qrc"/>
/QMK-Groundstation/trunk/QMK-Scope/Defines.h
24,7 → 24,7
#include "../Global/Kopter.h"
 
static const QString QA_NAME = "QMK-Scope";
static const QString QA_VERSION_NR = "1.1.4";
static const QString QA_VERSION_NR = "1.2.0";
 
#ifdef _BETA_
static const QString QA_VERSION = QA_VERSION_NR + " (BETA)";
32,8 → 32,8
static const QString QA_VERSION = QA_VERSION_NR;
#endif
 
static const QString QA_DATE = "30.11.2009";
static const QString QA_YEAR = "2008-2009";
static const QString QA_DATE = "28.03.2010";
static const QString QA_YEAR = "2008-2010";
 
static const QString QA_ABOUT =
"<HTML>"
/QMK-Groundstation/trunk/QMK-Scope/QMK-Scope.pro
2,8 → 2,7
# Project created by QtCreator 2009-07-20T20:04:00
# -------------------------------------------------
 
DEFINES += _TTY_POSIX_
include(../Global/Class_SerialPort.pri)
include(../Global/Widget_Connection.pri)
 
QT += network
TARGET = QMK-Scope
42,21 → 41,10
RESOURCES += QMK-Scope.qrc
 
SOURCES += main.cpp \
../Global/Class_Input/Input.cpp \
../Global/Class_Input/Input_TCP.cpp \
../Global/Class_Input/Input_TTY.cpp \
../Global/Class_HandlerMK/HandlerMK.cpp \
../Global/Class_HandlerIP/HandlerIP.cpp \
Dialogs/dlg_Main.cpp \
Classes/cSettings.cpp
HEADERS += Defines.h \
../Global/Kopter.h \
../Global/Global.h \
../Global/Class_Input/Input.h \
../Global/Class_Input/Input_TCP.h \
../Global/Class_Input/Input_TTY.h \
../Global/Class_HandlerMK/HandlerMK.h \
../Global/Class_HandlerIP/HandlerIP.h \
Dialogs/dlg_Main.h \
Classes/cSettings.h \
TypeDefs.h
/QMK-Groundstation/trunk/QMK-Settings/Classes/cSettings.cpp
40,18 → 40,8
GUI.isMax = Setting.value("IsMax",false).toBool();
GUI.Size = Setting.value("Size", QSize(500, 350)).toSize();
GUI.Point = Setting.value("Point",QPoint(1,1)).toPoint();
GUI.Toolbar = Setting.value("Toolbar",true).toBool();
Setting.endGroup();
 
Setting.beginGroup("SERVER");
SERVER.Password = Setting.value("Password", QString("")).toString();
SERVER.IP_MAX = Setting.value("IP_MAX", 1).toInt();
SERVER.IP_ID = Setting.value("IP_ID", 0).toInt();
 
for (int z = 0; z < SERVER.IP_MAX; z++)
{
SERVER.IP[z] = Setting.value("IP_" + QString("%1").arg(z), QString("127.0.0.1:64400")).toString();
}
Setting.endGroup();
}
 
void cSettings::write_Settings()
66,16 → 56,6
Setting.setValue("IsMax", GUI.isMax);
Setting.setValue("Size", GUI.Size);
Setting.setValue("Point", GUI.Point);
Setting.setValue("Toolbar", GUI.Toolbar);
Setting.endGroup();
 
Setting.beginGroup("SERVER");
Setting.setValue("Password", SERVER.Password);
Setting.setValue("IP_MAX", SERVER.IP_MAX);
Setting.setValue("IP_ID", SERVER.IP_ID);
 
for (int z = 0; z < SERVER.IP_MAX; z++)
{
Setting.setValue("IP_" + QString("%1").arg(z), SERVER.IP[z]);
}
Setting.endGroup();
}
/QMK-Groundstation/trunk/QMK-Settings/Classes/cSettings.h
30,16 → 30,9
bool isMax;
QSize Size;
QPoint Point;
bool Toolbar;
};
 
struct set_SERVER
{
int IP_MAX;
int IP_ID;
QString IP[10];
QString Password;
};
 
class cSettings
{
public:
50,7 → 43,6
int Settings_ID;
 
set_GUI GUI;
set_SERVER SERVER;
};
 
#endif // CSETTINGS_H
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_Main.cpp
31,12 → 31,13
 
o_Settings = new cSettings();
 
o_Input = new Input();
wg_Connection->set_Client(ID_SETTINGS, QA_NAME + " " + QA_VERSION, DataFields);
 
o_Timer = new QTimer();
o_Timer->setInterval(500);
 
f_MotorMixer = new dlg_MotorMixer(this);
f_MotorTest = new dlg_MotorTest(this);
 
init_Directorys();
init_GUI();
56,17 → 57,19
showMaximized();
}
 
for(int z = 0; z < o_Settings->SERVER.IP_MAX; z++)
wg_Connection->set_SelectVisible(false);
wg_Connection->set_IntervalVisible(false);
 
ac_Toolbar->setChecked(o_Settings->GUI.Toolbar);
 
if (ac_Toolbar->isChecked())
{
if (cb_Server->findText(o_Settings->SERVER.IP[z]) == -1)
{
cb_Server->addItem(o_Settings->SERVER.IP[z]);
}
wg_Connection->set_ButtonVisible(false);
}
 
cb_Server->setCurrentIndex(o_Settings->SERVER.IP_ID);
 
le_Password->setText(o_Settings->SERVER.Password);
else
{
ToolBar->setVisible(false);
}
}
 
// Signale mit Slots verbinden
74,7 → 77,8
{
connect(o_Timer, SIGNAL(timeout()), this, SLOT(slot_Timer()));
 
connect(ac_Connect, SIGNAL(triggered()), this, SLOT(slot_ac_Connect()));
connect(ac_Connect, SIGNAL(triggered()), wg_Connection, SLOT(slot_btn_Connect()));
connect(ac_Toolbar, SIGNAL(triggered()), this, SLOT(slot_ac_Toolbar()));
 
connect(ac_Write, SIGNAL(triggered()), this, SLOT(slot_ac_Write()));
connect(ac_Read, SIGNAL(triggered()), this, SLOT(slot_ac_Read()));
82,11 → 86,23
connect(ac_Load, SIGNAL(triggered()), this, SLOT(slot_ac_Load()));
 
connect(ac_MotorMixer, SIGNAL(triggered()), this, SLOT(slot_ac_MotorMixer()));
connect(ac_MotorTest, SIGNAL(triggered()), this, SLOT(slot_ac_MotorTest()));
 
connect(f_MotorMixer, SIGNAL(sig_SendData(QString,int)), wg_Connection, SLOT(slot_send_Data(QString,int)));
connect(f_MotorTest, SIGNAL(sig_SendData(QString,int)), wg_Connection, SLOT(slot_send_Data(QString,int)));
 
// About QMK-Settings & About-QT Dialog einfügen
connect(ac_About, SIGNAL(triggered()), this, SLOT(slot_ac_About()));
menu_Help->addAction(trUtf8("Über &Qt"), qApp, SLOT(aboutQt()));
 
connect(wg_Connection, SIGNAL(sig_Status(int)), this, SLOT(slot_ConnectionStatus(int)));
connect(wg_Connection, SIGNAL(sig_MK_Version(s_Hardware)), this, SLOT(slot_MK_Version(s_Hardware)));
connect(wg_Connection, SIGNAL(sig_MK_ReadSettings(s_MK_Settings)), this, SLOT(slot_MK_ReadSettings(s_MK_Settings)));
connect(wg_Connection, SIGNAL(sig_MK_WriteSettings(int)), this, SLOT(slot_MK_WriteSettings(int)));
connect(wg_Connection, SIGNAL(sig_MK_ReadMotorMixer(s_MK_Mixer)), this, SLOT(slot_MK_ReadMotorMixer(s_MK_Mixer)));
connect(wg_Connection, SIGNAL(sig_MK_WriteMotorMixer(int)), this, SLOT(slot_MK_WriteMotorMixer(int)));
connect(wg_Connection, SIGNAL(sig_MK_PPMData(s_MK_PPM_Data)), this, SLOT(slot_MK_PPMData(s_MK_PPM_Data)));
 
connect(listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(slot_PageChange(int)));
 
// Settings - LED's J16
157,305 → 173,134
}
}
 
void dlg_Main::parse_IP_Data(QString t_Data)
///////////
// Slots //
///////////
 
// About-Dialog
void dlg_Main::slot_ac_About()
{
QStringList Data;
Data = t_Data.split(":");
QMessageBox::about(this, trUtf8(("Über ")) + QA_NAME, QA_ABOUT);
}
 
if (Data.count() > 1)
void dlg_Main::slot_ac_Toolbar()
{
if (ac_Toolbar->isChecked())
{
int CMD = Data[2].toInt();
 
switch(CMD)
{
case 101 :
{
o_Input->send_Data(HandlerIP::make_Frame(ID_SETTINGS, 101, QA_NAME + " " + QA_VERSION));
}
break;
case 502 :
{
switch (Data[3].toInt())
{
case 105 :
{
QString s_MD5PW;
QByteArray a_MD5PW;
 
a_MD5PW = QCryptographicHash::hash(le_Password->text().toAscii(),QCryptographicHash::Md5);
 
s_MD5PW = QString(a_MD5PW.toHex().data());
 
o_Input->send_Data(HandlerIP::make_Frame(ID_SETTINGS, 105, s_MD5PW));
}
break;
case 106 :
{
o_Input->send_Data(HandlerIP::make_Frame(ID_SETTINGS, 106, DataFields));
}
break;
}
}
break;
case 505 :
{
if (Data[3] == "OK")
{
}
else
{
QMessageBox::warning(this, QA_NAME, trUtf8("Authentifizierung fehlgeschlagen. <br />Daten senden zum Mikrokopter nicht möglich."), QMessageBox::Ok);
}
}
break;
}
wg_Connection->set_ButtonVisible(false);
ToolBar->setVisible(true);
}
else
{
wg_Connection->set_ButtonVisible(true);
ToolBar->setVisible(false);
}
}
 
// Eingangsdaten verarbeiten
void dlg_Main::parse_MK_Data(QString t_Data)
void dlg_Main::slot_ConnectionStatus(int li_Status)
{
unsigned char OutData[150];
char *InData = t_Data.toLatin1().data();
 
if (HandlerMK::Decode_64(InData, t_Data.length(), OutData) != 0)
if (li_Status)
{
switch(InData[2])
{
case 'V' : // Versions-Info
{
o_Input->stop_Resend(DATA_VERSION);
VersionInfo = HandlerMK::parse_Version(OutData, InData[1] - 'a');
setWindowTitle(QA_NAME + " " + QA_VERSION + " - " + VersionInfo.Hardware + " " + VersionInfo.Version);
 
if (VersionInfo.ID == ADDRESS_FC)
{
// qDebug("get FC-Settings");
c_Data[0] = 0xff;
o_Input->send_Data(HandlerMK::make_Frame('q', ADDRESS_FC, c_Data, 1).toLatin1().data(), DATA_READ_SETTINGS);
}
}
break;
case 'Q' : // Settings lesen
{
o_Input->stop_Resend(DATA_READ_SETTINGS);
if (OutData[1] == MK_VERSION_SETTINGS)
{
s_MK_Settings MK_Set;
 
memcpy((unsigned char *)&MK_Set, (unsigned char *)&OutData, sizeof(MK_Set));
// qDebug(MK_Set.Name);
show_MK_Settings(MK_Set);
}
else
{
QMessageBox::warning(this, QA_NAME, tr("Versionen inkompatibel. \nParameterbearbeitung nicht moeglich."), QMessageBox::Ok);
ac_Read->setEnabled(false);
ac_Write->setEnabled(false);
}
}
break;
case 'S' : // Settings geschrieben
{
o_Input->stop_Resend(DATA_WRITE_SETTINGS);
if (OutData[0] == 0)
{
QMessageBox::warning(this, QA_NAME, tr("Fehler beim Settings-Schreiben."), QMessageBox::Ok);
}
}
break;
case 'P' : // RC-Kanäle
{
int PPM_in[11];
 
memcpy((unsigned char *)&PPM_in, (unsigned char *)&OutData, sizeof(PPM_in));
pb_K1->setValue(PPM_in[0]);
pb_K2->setValue(PPM_in[1]);
pb_K3->setValue(PPM_in[2]);
pb_K4->setValue(PPM_in[3]);
pb_K5->setValue(PPM_in[4]);
pb_K6->setValue(PPM_in[5]);
pb_K7->setValue(PPM_in[6]);
pb_K8->setValue(PPM_in[7]);
}
break;
case 'N' : // MotorMixer lesen
{
o_Input->stop_Resend(DATA_READ_MIXER);
 
s_MK_Mixer MK_Mixer;
 
memcpy((unsigned char *)&MK_Mixer, (unsigned char *)&OutData, sizeof(MK_Mixer));
 
if (MK_Mixer.Revision == MK_VERSION_MIXER)
{
f_MotorMixer->set_MotorConfig(MK_Mixer);
}
}
break;
case 'M' : // MotorMixer geschrieben
{
o_Input->stop_Resend(DATA_WRITE_MIXER);
 
if (OutData[0] == 0)
{
QMessageBox::warning(this, QA_NAME, tr("Fehler beim MotorMixer-Schreiben."), QMessageBox::Ok);
}
}
break;
 
}
ac_Connect->setChecked(true);
ac_Connect->setText(tr("Trennen"));
}
else
{
ac_Connect->setChecked(false);
ac_Connect->setText(tr("Verbinden"));
}
}
 
///////////
// Slots //
///////////
void dlg_Main::slot_MK_Version(s_Hardware ls_Version)
{
gs_Version = ls_Version;
setWindowTitle(QA_NAME + " " + QA_VERSION + " - " + ls_Version.Hardware + " " + ls_Version.Version);
 
// About-Dialog
void dlg_Main::slot_ac_About()
{
QMessageBox::about(this, trUtf8(("Über ")) + QA_NAME, QA_ABOUT);
if (gs_Version.ID == ADDRESS_FC)
{
c_Data[0] = 0xff;
wg_Connection->send_Data(HandlerMK::make_Frame('q', ADDRESS_FC, c_Data, 1).toLatin1().data(), DATA_READ_SETTINGS);
}
}
 
// Verbindung zum Server aufbauen
void dlg_Main::slot_ac_Connect()
void dlg_Main::slot_MK_ReadSettings(s_MK_Settings ps_MK_Settings)
{
if (!o_Input->IsOpen())
if (ps_MK_Settings.Version == MK_VERSION_SETTINGS)
{
if (cb_Server->findText(cb_Server->currentText()) == -1)
{
cb_Server->addItem(cb_Server->currentText());
cb_Server->setCurrentIndex(cb_Server->findText(cb_Server->currentText()));
}
 
cb_Server->setEnabled(false);
le_Password->setEnabled(false);
 
if (cb_Server->currentText().startsWith('/'))
{
o_Input = new Input_TTY();
o_Input->Init();
 
set_Input s_Input;
s_Input.Main = cb_Server->currentText();
 
if (o_Input->Open(s_Input) == true)
{
ac_Connect->setText(tr("Trennen"));
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
 
o_Input->send_Data(HandlerMK::make_Frame('v', 0, c_Data, 0).toLatin1().data(), DATA_VERSION);
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
}
 
}
else
{
o_Input = new Input_TCP();
o_Input->Init();
 
set_Input s_Input;
 
QStringList Server = cb_Server->currentText().split(":");
 
s_Input.Main = Server[0];
s_Input.Sub = Server[1];
 
if (o_Input->Open(s_Input) == true)
{
connect(o_Input, SIGNAL(sig_Disconnected(int)), this, SLOT(slot_Input_Disconnected(int)));
connect(o_Input, SIGNAL(sig_Connected()), this, SLOT(slot_Input_Connected()));
}
}
show_MK_Settings(ps_MK_Settings);
}
else
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
 
ac_Connect->setText(tr("Verbinden"));
o_Input->Close();
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
if (o_Input->Mode() == TCP)
{
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
}
QMessageBox::warning(this, QA_NAME, tr("Versionen inkompatibel. \nParameterbearbeitung nicht moeglich."), QMessageBox::Ok);
ac_Read->setEnabled(false);
ac_Write->setEnabled(false);
}
}
 
// Neue Daten empfangen.
void dlg_Main::slot_Input_Data(QString t_Data)
void dlg_Main::slot_MK_WriteSettings(int pi_ID)
{
if ((t_Data[0] == '#'))
if (pi_ID == 0)
{
if ((HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length() - 1)) || ((o_Input->Mode() == TTY) && (HandlerMK::Check_CRC(t_Data.toLatin1().data(), t_Data.length()))))
{
parse_MK_Data(t_Data);
}
else
{
// qDebug(QString("CRC-Error - " + t_Data).toLatin1().data());
}
QMessageBox::warning(this, QA_NAME, tr("Fehler beim Settings-Schreiben."), QMessageBox::Ok);
}
else if (o_Input->Mode() == TCP)
else
{
parse_IP_Data(t_Data);
QMessageBox::information(this, QA_NAME, tr("Setting geschrieben."), QMessageBox::Ok);
}
 
}
 
void dlg_Main::slot_Input_Disconnected(int Error)
void dlg_Main::slot_MK_ReadMotorMixer(s_MK_Mixer ps_MK_MotorMixer)
{
cb_Server->setEnabled(true);
le_Password->setEnabled(true);
if (ps_MK_MotorMixer.Revision == MK_VERSION_MIXER)
{
f_MotorMixer->set_MotorConfig(ps_MK_MotorMixer);
}
}
 
disconnect(o_Input, SIGNAL(sig_NewData(QString)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Disconnected(int)), 0, 0);
disconnect(o_Input, SIGNAL(sig_Connected()), 0, 0);
 
ac_Connect->setChecked(false);
ac_Connect->setText(tr("Verbinden"));
 
switch (Error)
void dlg_Main::slot_MK_WriteMotorMixer(int pi_ID)
{
if (pi_ID == 0)
{
case REMOTECLOSED :
{
// lb_Status->setText(tr("Verbindung vom Server beendet."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Verbindung wurde vom Server beendet."), QMessageBox::Ok);
}
break;
case REFUSED :
{
// lb_Status->setText(tr("Server nicht gefunden."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Kann nicht zum Server verbinden."), QMessageBox::Ok);
}
break;
case 3 :
{
// lb_Status->setText(tr("Serververbindung getrennt. Logindaten falsch."));
QMessageBox::warning(this, QA_NAME,tr("QMK-Datenserver: Loginname oder Password falsch."), QMessageBox::Ok);
}
break;
default :
{
// lb_Status->setText(tr("Getrennt vom QMK-Datenserver."));
}
break;
QMessageBox::warning(this, QA_NAME, tr("Fehler beim MotorMixer-Schreiben."), QMessageBox::Ok);
}
else
{
QMessageBox::information(this, QA_NAME, tr("MotorMixer geschrieben."), QMessageBox::Ok);
}
 
}
 
void dlg_Main::slot_Input_Connected()
void dlg_Main::slot_MK_PPMData(s_MK_PPM_Data ps_PPMData)
{
connect(o_Input, SIGNAL(sig_NewData(QString)), this, SLOT(slot_Input_Data(QString)));
qDebug("PPM-Data");
 
o_Input->send_Data(HandlerMK::make_Frame('v', ADDRESS_ALL, c_Data, 0).toLatin1().data(), DATA_VERSION);
ac_Connect->setText(tr("Trennen"));
// qDebug() << ps_PPMData.Data[1] << ", " << ps_PPMData.Data[2] << ", " << ps_PPMData.Data[3] << ", " << ps_PPMData.Data[4];
 
pb_K1->setValue(ps_PPMData.Data[1]);
pb_K2->setValue(ps_PPMData.Data[2]);
pb_K3->setValue(ps_PPMData.Data[3]);
pb_K4->setValue(ps_PPMData.Data[4]);
pb_K5->setValue(ps_PPMData.Data[5]);
pb_K6->setValue(ps_PPMData.Data[6]);
pb_K7->setValue(ps_PPMData.Data[7]);
pb_K8->setValue(ps_PPMData.Data[8]);
pb_K9->setValue(ps_PPMData.Data[9]);
pb_K10->setValue(ps_PPMData.Data[10]);
pb_K11->setValue(ps_PPMData.Data[11]);
pb_K12->setValue(ps_PPMData.Data[12]);
pb_K1_2->setValue(ps_PPMData.Data[13]);
pb_K2_2->setValue(ps_PPMData.Data[14]);
pb_K3_2->setValue(ps_PPMData.Data[15]);
pb_K4_2->setValue(ps_PPMData.Data[16]);
pb_K5_2->setValue(ps_PPMData.Data[17]);
pb_K6_2->setValue(ps_PPMData.Data[18]);
pb_K7_2->setValue(ps_PPMData.Data[19]);
pb_K8_2->setValue(ps_PPMData.Data[20]);
pb_K9_2->setValue(ps_PPMData.Data[21]);
pb_K10_2->setValue(ps_PPMData.Data[22]);
pb_K11_2->setValue(ps_PPMData.Data[23]);
pb_K12_2->setValue(ps_PPMData.Data[24]);
}
 
///////////////////////////////////////////////////////////////////
462,6 → 307,7
// QMK-Settings //
///////////////////////////////////////////////////////////////////
 
 
void dlg_Main::slot_PageChange(int Page)
{
if (Page == 1)
472,12 → 318,12
 
void dlg_Main::slot_Timer()
{
o_Input->send_Data(HandlerMK::make_Frame('p', ADDRESS_FC, c_Data, 0).toLatin1().data(), 0);
wg_Connection->send_Data(HandlerMK::make_Frame('p', ADDRESS_FC, c_Data, 0).toLatin1().data(), 0);
}
 
void dlg_Main::slot_ac_MotorMixer()
{
f_MotorMixer->set_Objects(o_Input, o_Settings, s_Dir);
f_MotorMixer->set_Objects(o_Settings, s_Dir);
f_MotorMixer->read_Mixer();
 
if (f_MotorMixer->exec()==QDialog::Accepted)
485,6 → 331,18
}
}
 
void dlg_Main::slot_ac_MotorTest()
{
// f_MotorMixer->set_Objects(wg_Connection->o_Input, o_Settings, s_Dir);
// f_MotorMixer->read_Mixer();
 
if (f_MotorTest->exec()==QDialog::Accepted)
{
}
 
f_MotorTest->Stop();
}
 
// Settings-Funktionen
void dlg_Main::slot_ac_Write()
{
494,18 → 352,18
 
memcpy((unsigned char *)&c_Data, (unsigned char *)&t_Set, sizeof(t_Set));
 
o_Input->send_Data(HandlerMK::make_Frame('s', ADDRESS_FC, c_Data, sizeof(t_Set)).toLatin1().data(), DATA_WRITE_SETTINGS);
wg_Connection->send_Data(HandlerMK::make_Frame('s', ADDRESS_FC, c_Data, sizeof(t_Set)).toLatin1().data(), DATA_WRITE_SETTINGS);
}
 
void dlg_Main::slot_ac_Read()
{
c_Data[0] = sb_Set->value();
o_Input->send_Data(HandlerMK::make_Frame('q', ADDRESS_FC, c_Data, 1).toLatin1().data(), DATA_READ_SETTINGS);
wg_Connection->send_Data(HandlerMK::make_Frame('q', ADDRESS_FC, c_Data, 1).toLatin1().data(), DATA_READ_SETTINGS);
}
 
void dlg_Main::slot_ac_Save()
{
QString Filename = QFileDialog::getSaveFileName(this, "Mikrokopter Parameter speichern", s_Dir.Settings + "/" + VersionInfo.VersionShort + "_" + le_SetName->text() + ".mkp", "Mikrokopter Parameter(*.mkp);;Alle Dateien (*)");
QString Filename = QFileDialog::getSaveFileName(this, "Mikrokopter Parameter speichern", s_Dir.Settings + "/" + gs_Version.VersionShort + "_" + le_SetName->text() + ".mkp", "Mikrokopter Parameter(*.mkp);;Alle Dateien (*)");
 
if (!Filename.isEmpty())
{
534,6 → 392,11
Setting.setValue("Poti_2", t_Set.Kanalbelegung[5]);
Setting.setValue("Poti_3", t_Set.Kanalbelegung[6]);
Setting.setValue("Poti_4", t_Set.Kanalbelegung[7]);
Setting.setValue("Poti_5", t_Set.Kanalbelegung[8]);
Setting.setValue("Poti_6", t_Set.Kanalbelegung[9]);
Setting.setValue("Poti_7", t_Set.Kanalbelegung[10]);
Setting.setValue("Poti_8", t_Set.Kanalbelegung[11]);
Setting.setValue("Receiver", t_Set.Receiver);
Setting.endGroup();
 
Setting.beginGroup("Stick");
581,6 → 444,10
 
Setting.setValue("ServoInvert", t_Set.ServoCompInvert);
Setting.setValue("ServoNickRefreshRate", t_Set.ServoNickRefresh);
 
Setting.setValue("Servo3", t_Set.Servo3);
Setting.setValue("Servo4", t_Set.Servo4);
Setting.setValue("Servo5", t_Set.Servo5);
Setting.endGroup();
 
Setting.beginGroup("Others");
678,6 → 545,11
t_Set.Kanalbelegung[5] = Setting.value("Poti_2", 6).toInt();
t_Set.Kanalbelegung[6] = Setting.value("Poti_3", 7).toInt();
t_Set.Kanalbelegung[7] = Setting.value("Poti_4", 8).toInt();
t_Set.Kanalbelegung[8] = Setting.value("Poti_5", 9).toInt();
t_Set.Kanalbelegung[9] = Setting.value("Poti_6", 10).toInt();
t_Set.Kanalbelegung[10] = Setting.value("Poti_7", 11).toInt();
t_Set.Kanalbelegung[11] = Setting.value("Poti_8", 12).toInt();
t_Set.Receiver = Setting.value("Receiver", 0).toInt();
Setting.endGroup();
 
Setting.beginGroup("Stick");
725,6 → 597,10
 
t_Set.ServoCompInvert = Setting.value("ServoInvert", 0).toInt();
t_Set.ServoNickRefresh = Setting.value("ServoNickRefreshRate", 3).toInt();
 
t_Set.Servo3 = Setting.value("Servo3", 0).toInt();
t_Set.Servo4 = Setting.value("Servo4", 0).toInt();
t_Set.Servo5 = Setting.value("Servo5", 0).toInt();
Setting.endGroup();
 
Setting.beginGroup("Others");
812,14 → 688,19
}
// Seite 2
{
sb_2_1->setValue(t_Set.Kanalbelegung[2]);
sb_2_2->setValue(t_Set.Kanalbelegung[3]);
sb_2_3->setValue(t_Set.Kanalbelegung[0]);
sb_2_4->setValue(t_Set.Kanalbelegung[1]);
sb_2_5->setValue(t_Set.Kanalbelegung[4]);
sb_2_6->setValue(t_Set.Kanalbelegung[5]);
sb_2_7->setValue(t_Set.Kanalbelegung[6]);
sb_2_8->setValue(t_Set.Kanalbelegung[7]);
cb_2_1->setCurrentIndex(t_Set.Kanalbelegung[2] - 1);
cb_2_2->setCurrentIndex(t_Set.Kanalbelegung[3] - 1);
cb_2_3->setCurrentIndex(t_Set.Kanalbelegung[0] - 1);
cb_2_4->setCurrentIndex(t_Set.Kanalbelegung[1] - 1);
cb_2_5->setCurrentIndex(t_Set.Kanalbelegung[4] - 1);
cb_2_6->setCurrentIndex(t_Set.Kanalbelegung[5] - 1);
cb_2_7->setCurrentIndex(t_Set.Kanalbelegung[6] - 1);
cb_2_8->setCurrentIndex(t_Set.Kanalbelegung[7] - 1);
cb_2_9->setCurrentIndex(t_Set.Kanalbelegung[8] - 1);
cb_2_10->setCurrentIndex(t_Set.Kanalbelegung[9] - 1);
cb_2_11->setCurrentIndex(t_Set.Kanalbelegung[10] - 1);
cb_2_12->setCurrentIndex(t_Set.Kanalbelegung[11] - 1);
s_2_13_cb->setCurrentIndex(t_Set.Receiver);
}
// Seite 3
{
830,11 → 711,17
}
// Seite 4
{
if (t_Set.ExtraConfig & CFG2_HEIGHT_LIMIT) {
s_4_2_rb->setChecked(true);
} else {
s_4_3_rb->setChecked(true);
// s_4_2_rb->setChecked(t_Set.ExtraConfig & CFG2_HEIGHT_LIMIT);
if (t_Set.ExtraConfig & CFG2_HEIGHT_LIMIT)
{
s_4_2_rb->setChecked(true);
}
else
{
s_4_3_rb->setChecked(true);
}
s_4_5_cb->setChecked(t_Set.ExtraConfig & CFG2_VARIO_BEEP);
s_4_4_cb->setChecked(t_Set.GlobalConfig & CFG_HOEHEN_SCHALTER);
 
877,6 → 764,11
cb_6_9->setChecked(t_Set.ServoCompInvert & 0x02);
 
sb_6_5->setValue(t_Set.ServoNickRefresh);
 
cb_6_12 = setCombo(cb_6_12, t_Set.Servo3);
cb_6_13 = setCombo(cb_6_13, t_Set.Servo4);
cb_6_14 = setCombo(cb_6_14, t_Set.Servo5);
 
}
// Seite 7
{
966,8 → 858,16
sb_11_5->setValue(t_Set.WARN_J16_Bitmask);
sb_11_6->setValue(t_Set.WARN_J17_Bitmask);
cb_11_7->setChecked(t_Set.BitConfig & CFG_MOTOR_BLINK);
J16_8->setChecked(t_Set.BitConfig & CFG_MOTOR_OFF_LED1);
J17_8->setChecked(t_Set.BitConfig & CFG_MOTOR_OFF_LED2);
 
if (t_Set.WARN_J16_Bitmask != 0)
s_11_7_cb->setChecked(true);
else
s_11_7_cb->setChecked(false);
 
if (t_Set.WARN_J17_Bitmask != 0)
s_11_8_cb->setChecked(true);
else
s_11_8_cb->setChecked(false);
}
// Seite 12
{
1025,14 → 925,19
}
// Seite 2
{
t_Set.Kanalbelegung[2] = sb_2_1->value();
t_Set.Kanalbelegung[3] = sb_2_2->value();
t_Set.Kanalbelegung[0] = sb_2_3->value();
t_Set.Kanalbelegung[1] = sb_2_4->value();
t_Set.Kanalbelegung[4] = sb_2_5->value();
t_Set.Kanalbelegung[5] = sb_2_6->value();
t_Set.Kanalbelegung[6] = sb_2_7->value();
t_Set.Kanalbelegung[7] = sb_2_8->value();
t_Set.Kanalbelegung[2] = cb_2_1->currentIndex() + 1;
t_Set.Kanalbelegung[3] = cb_2_2->currentIndex() + 1;
t_Set.Kanalbelegung[0] = cb_2_3->currentIndex() + 1;
t_Set.Kanalbelegung[1] = cb_2_4->currentIndex() + 1;
t_Set.Kanalbelegung[4] = cb_2_5->currentIndex() + 1;
t_Set.Kanalbelegung[5] = cb_2_6->currentIndex() + 1;
t_Set.Kanalbelegung[6] = cb_2_7->currentIndex() + 1;
t_Set.Kanalbelegung[7] = cb_2_8->currentIndex() + 1;
t_Set.Kanalbelegung[8] = cb_2_9->currentIndex() + 1;
t_Set.Kanalbelegung[9] = cb_2_10->currentIndex() + 1;
t_Set.Kanalbelegung[10] = cb_2_11->currentIndex() + 1;
t_Set.Kanalbelegung[11] = cb_2_12->currentIndex() + 1;
t_Set.Receiver = s_2_13_cb->currentIndex();
}
// Seite 3
{
1087,6 → 992,10
 
t_Set.ServoNickRefresh = sb_6_5->value();
 
t_Set.Servo3 = get_Value(cb_6_12);
t_Set.Servo4 = get_Value(cb_6_13);
t_Set.Servo5 = get_Value(cb_6_14);
 
if (cb_6_6->isChecked())
t_Set.ServoCompInvert = t_Set.ServoCompInvert | 0x01;
if (cb_6_9->isChecked())
1148,10 → 1057,12
 
if (cb_11_7->isChecked())
t_Set.BitConfig = t_Set.BitConfig | CFG_MOTOR_BLINK;
if (J16_8->isChecked())
t_Set.BitConfig = t_Set.BitConfig | CFG_MOTOR_OFF_LED1;
if (J17_8->isChecked())
t_Set.BitConfig = t_Set.BitConfig | CFG_MOTOR_OFF_LED2;
 
if (!s_11_7_cb->isChecked())
t_Set.WARN_J16_Bitmask = 0;
if (!s_11_8_cb->isChecked())
t_Set.WARN_J17_Bitmask = 0;
 
}
// Seite 12
{
1182,26 → 1093,34
int dlg_Main::get_Value(QComboBox *Combo)
{
if (Combo->currentText() == QString("Poti 1"))
return 251;
return 255;
if (Combo->currentText() == QString("Poti 2"))
return 252;
return 254;
if (Combo->currentText() == QString("Poti 3"))
return 253;
if (Combo->currentText() == QString("Poti 4"))
return 254;
return 252;
if (Combo->currentText() == QString("Poti 5"))
return 251;
if (Combo->currentText() == QString("Poti 6"))
return 250;
if (Combo->currentText() == QString("Poti 7"))
return 249;
if (Combo->currentText() == QString("Poti 8"))
return 248;
return Combo->currentText().toInt();
}
 
QComboBox *dlg_Main::setCombo(QComboBox *Combo, int Wert)
{
if (Wert <= 250)
if (Wert <= 245)
{
Combo->setItemText(4, QString("%1").arg(Wert));
Combo->setCurrentIndex(4);
Combo->setItemText(8, QString("%1").arg(Wert));
Combo->setCurrentIndex(8);
}
else
{
Combo->setCurrentIndex(Wert - 251);
Combo->setCurrentIndex(255 - Wert);
}
return Combo;
}
1407,19 → 1326,8
o_Settings->GUI.isMax = isMaximized();
o_Settings->GUI.Size = size();
o_Settings->GUI.Point = pos();
o_Settings->GUI.Toolbar = ac_Toolbar->isChecked();
 
o_Settings->SERVER.Password = le_Password->text();
o_Settings->SERVER.IP_MAX = cb_Server->count();
o_Settings->SERVER.IP_ID = cb_Server->currentIndex();
 
for (int z = 0; z < cb_Server->count(); z++)
{
if (z < 10)
{
o_Settings->SERVER.IP[z] = cb_Server->itemText(z);
}
}
 
o_Settings->write_Settings();
// qDebug("Ende.");
}
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_Main.h
29,6 → 29,7
#include "ui_dlg_Main.h"
 
#include "dlg_MotorMixer.h"
#include "dlg_MotorTest.h"
 
#include "../Defines.h"
#include "../TypeDefs.h"
35,14 → 36,6
 
#include "../Classes/cSettings.h"
 
#include "../../Global/Kopter.h"
#include "../../Global/MK_Datatypes.h"
#include "../../Global/Class_Input/Input.h"
#include "../../Global/Class_Input/Input_TCP.h"
#include "../../Global/Class_Input/Input_TTY.h"
#include "../../Global/Class_HandlerIP/HandlerIP.h"
#include "../../Global/Class_HandlerMK/HandlerMK.h"
 
class dlg_Main : public QMainWindow, public Ui::dlg_Main_UI
{
Q_OBJECT
54,11 → 47,8
private:
QTimer *o_Timer;
 
// Input Device.
Input *o_Input;
 
// Info über die Hardware
s_Hardware VersionInfo;
s_Hardware gs_Version;
 
// Settings-Object
cSettings *o_Settings;
66,6 → 56,9
// MotorMixer GUI
dlg_MotorMixer *f_MotorMixer;
 
// MotorTest GUI
dlg_MotorTest *f_MotorTest;
 
char c_Data[150];
 
// Programm-Initialisirungen
75,10 → 68,6
void init_Directorys();
s_Directorys s_Dir;
 
// Einkommende Datenpackete zerlegen.
void parse_MK_Data(QString t_Data);
void parse_IP_Data(QString t_Data);
 
void set_LED(QToolButton *ToolButton, bool On = false);
int get_Value(QComboBox *Combo);
QComboBox *setCombo(QComboBox *Combo, int Wert);
90,8 → 79,15
void slot_Timer();
 
void slot_ac_About();
void slot_ac_Toolbar();
 
void slot_ac_Connect();
void slot_ConnectionStatus(int li_Status);
void slot_MK_Version(s_Hardware ls_Version);
void slot_MK_ReadSettings(s_MK_Settings ps_MK_Settings);
void slot_MK_WriteSettings(int pi_ID);
void slot_MK_ReadMotorMixer(s_MK_Mixer ps_MK_MotorMixer);
void slot_MK_WriteMotorMixer(int pi_ID);
void slot_MK_PPMData(s_MK_PPM_Data ps_PPMData);
 
void slot_ac_Write();
void slot_ac_Read();
99,14 → 95,10
void slot_ac_Load();
 
void slot_ac_MotorMixer();
void slot_ac_MotorTest();
 
void slot_PageChange(int Page);
 
// Einkommende Datenpackete.
void slot_Input_Data(QString t_Data);
void slot_Input_Disconnected(int Error);
void slot_Input_Connected();
 
void slot_LEDtoValue();
void slot_ValuetoLED16(int Wert);
void slot_ValuetoLED17(int Wert);
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_Main.ui
6,8 → 6,8
<rect>
<x>0</x>
<y>0</y>
<width>764</width>
<height>363</height>
<width>778</width>
<height>366</height>
</rect>
</property>
<property name="windowTitle">
18,127 → 18,7
<normaloff>:/Icon/Global/Images/Icons/QMK-Settings.png</normaloff>:/Icon/Global/Images/Icons/QMK-Settings.png</iconset>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0" colspan="2">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>4</number>
</property>
<property name="margin">
<number>4</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_Server">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_108">
<property name="text">
<string>PW:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_Password">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_146">
<property name="text">
<string>Parametersatz</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="sb_Set">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>5</number>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_SetName">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>35</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<layout class="QGridLayout" name="gridLayout_25">
<item row="1" column="0">
<widget class="QListWidget" name="listWidget">
<property name="minimumSize">
357,7 → 237,7
</item>
</widget>
</item>
<item row="1" column="1">
<item row="1" column="1" colspan="2">
<widget class="QStackedWidget" name="stackedWidget">
<property name="frameShape">
<enum>QFrame::Box</enum>
388,15 → 268,15
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Diese Seite dient der Konfiguration der Hardware bzw. der verschiedenen Funktionen des Mikrokopters.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Höhenregler&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: Häkchen setzen, wenn der Luftdrucksensor bestückt ist und die Höhenregelung benutzt werden soll. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Höhenfunktion per Schalter&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: wenn die Fernsteuerung mit einem Kippschalter auf einem freien Kanal erweitert wurde, kann die Funktion „Halten der aktuell geflogenen Höhe“ zugeschaltet werden. Wenn dies nicht angewählt wird, gilt der Setpoint (siehe unten), also z.B. ein Poti. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Heading Hold&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: In diesem Modus richtet sich der MikroKopter nicht waagerecht aus wenn der Stick in Neutralstellung ist. Diese Funktion ist eher etwas für erfahrenen Piloten, oder Piloten, die an X-3D-Steuerung gewöhnt sind. Mit dieser Einstellung sind alle Arten der Loopings möglich. &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;-qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; font-size:11pt;&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;--&amp;gt; Achtung: Wer HH fliegen möchte, muss den I-Anteil des Hauptreglers erhöhen (auf 30 z.B.)! &lt;/li&gt;&lt;/ul&gt;
&lt;ul style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; font-size:11pt;&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;--&amp;gt; Achtung: Wer HH fliegen möchte, muss den I-Anteil des Hauptreglers erhöhen (auf 30 z.B.)! &lt;/li&gt;&lt;/ul&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Kompass&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: Häkchen setzen, wenn das Kompassmodul angeschlossen ist und genutzt werden soll. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Kompass Ausrichtung fest&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: Der MikroKopter richtet sich dann immer wieder in die Richtung aus, in die er beim Start gestanden hat. Ist das Feld nicht markiert, lässt sich die Richtung mit dem Gier-Stick ändern. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;GPS&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: alternative Software-Versionen unterstützen ein ublox-GPS-Modul. Damit sind dann GPS-Funktionen wie Position halten, Position anfliegen, coming home und das Abfliegen von Waypoints möglich. Stichwort &quot;Autonomes Fliegen&quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;GPS&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: alternative Software-Versionen unterstützen ein ublox-GPS-Modul. Damit sind dann GPS-Funktionen wie Position halten, Position anfliegen, coming home und das Abfliegen von Waypoints möglich. Stichwort &amp;quot;Autonomes Fliegen&amp;quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Achsenkopplung&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;:Hier lässt sich die Achsenkopplung global aktivieren oder deaktivieren. Die Achsenkopplung verhindert, dass der MikroKopter nach einer Kurve schief steht, weil die Winkel intern beim Gieren korrigiert werden. Sollte immer aktiviert sein. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Drehratenbegrenzung&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: Zusätzliche Begrenzung der Drehrate. Mit dieser Option wird die Kennlinie des Gyros an den Enden angehoben. Dies verhindert schnelle Manöver, da ab einer bestimmten Drehrate stärker gegengeregelt wird. Betrifft nur Nick und Roll. (Nur für Anfänger interessant) &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
426,7 → 306,7
</font>
</property>
<property name="text">
<string>Altitude control</string>
<string>Höhenregelung</string>
</property>
</widget>
</item>
439,7 → 319,7
</font>
</property>
<property name="text">
<string>GPS</string>
<string>GPS aktiv</string>
</property>
</widget>
</item>
452,7 → 332,7
</font>
</property>
<property name="text">
<string>Compass</string>
<string>Kompass</string>
</property>
</widget>
</item>
484,7 → 364,7
</font>
</property>
<property name="text">
<string>Sensitive receiver signal validation</string>
<string>Erweiterte Empfangssignalprüfung</string>
</property>
</widget>
</item>
497,7 → 377,7
</font>
</property>
<property name="text">
<string>Axis-(de-)-Coupling</string>
<string>Achs-(ent-)kopplung</string>
</property>
</widget>
</item>
510,7 → 390,7
</font>
</property>
<property name="text">
<string>Rotationrate limiter</string>
<string>Drehratenbegrenzung</string>
</property>
</widget>
</item>
549,7 → 429,7
</font>
</property>
<property name="text">
<string>Orientation fixed</string>
<string>Feste Ausrichtung</string>
</property>
</widget>
</item>
559,7 → 439,7
</layout>
</widget>
<widget class="QWidget" name="Seite_2">
<layout class="QGridLayout" name="gridLayout_18">
<layout class="QGridLayout" name="gridLayout_21">
<item row="0" column="0">
<widget class="QFrame" name="frame_2">
<property name="frameShape">
582,18 → 462,72
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="sb_2_1">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="0" column="2">
<widget class="QComboBox" name="cb_2_1">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<item row="0" column="3">
<widget class="QLabel" name="label_11">
<property name="font">
<font>
<weight>75</weight>
601,22 → 535,136
</font>
</property>
<property name="text">
<string>Gier:</string>
<string>Poti 3:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="sb_2_2">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="0" column="4">
<widget class="QComboBox" name="cb_2_7">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="font">
<font>
<weight>75</weight>
624,22 → 672,76
</font>
</property>
<property name="text">
<string>Nick:</string>
<string>Gier:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="sb_2_3">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="1" column="2">
<widget class="QComboBox" name="cb_2_2">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_8">
<item row="1" column="3">
<widget class="QLabel" name="label_12">
<property name="font">
<font>
<weight>75</weight>
647,22 → 749,136
</font>
</property>
<property name="text">
<string>Roll:</string>
<string>Poti 4:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="sb_2_4">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="1" column="4">
<widget class="QComboBox" name="cb_2_8">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_9">
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<property name="font">
<font>
<weight>75</weight>
670,22 → 886,76
</font>
</property>
<property name="text">
<string>Poti 1:</string>
<string>Nick:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="sb_2_5">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="2" column="2">
<widget class="QComboBox" name="cb_2_3">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_10">
<item row="2" column="3">
<widget class="QLabel" name="label_32">
<property name="font">
<font>
<weight>75</weight>
693,22 → 963,136
</font>
</property>
<property name="text">
<string>Poti 2:</string>
<string>Poti 5:</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="sb_2_6">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="2" column="4">
<widget class="QComboBox" name="cb_2_9">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_11">
<item row="3" column="0">
<widget class="QLabel" name="label_8">
<property name="font">
<font>
<weight>75</weight>
716,22 → 1100,76
</font>
</property>
<property name="text">
<string>Poti 3:</string>
<string>Roll:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="sb_2_7">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="3" column="2">
<widget class="QComboBox" name="cb_2_4">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_12">
<item row="3" column="3">
<widget class="QLabel" name="label_34">
<property name="font">
<font>
<weight>75</weight>
739,274 → 1177,547
</font>
</property>
<property name="text">
<string>Poti 4:</string>
<string>Poti 6:</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QSpinBox" name="sb_2_8">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>8</number>
</property>
<item row="3" column="4">
<widget class="QComboBox" name="cb_2_10">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="8" column="1">
<spacer name="verticalSpacer_21">
<property name="orientation">
<enum>Qt::Vertical</enum>
<item row="4" column="0">
<widget class="QLabel" name="label_9">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
<string>1</string>
<string>Poti 1:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>2</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<item row="4" column="2">
<widget class="QComboBox" name="cb_2_5">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_13">
<property name="text">
<string>3</string>
<item row="4" column="3">
<widget class="QLabel" name="label_33">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLabel" name="label_14">
<property name="text">
<string>4</string>
<string>Poti 7:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QLabel" name="label_15">
<property name="text">
<string>5</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<item row="4" column="4">
<widget class="QComboBox" name="cb_2_11">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="1" column="6">
<widget class="QLabel" name="label_16">
<property name="text">
<string>6</string>
<item row="5" column="0">
<widget class="QLabel" name="label_10">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="7">
<widget class="QLabel" name="label_17">
<property name="text">
<string>7</string>
<string>Poti 2:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QProgressBar" name="pb_K1">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
<item row="5" column="2">
<widget class="QComboBox" name="cb_2_6">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="2" column="2">
<widget class="QProgressBar" name="pb_K2">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QProgressBar" name="pb_K3">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QProgressBar" name="pb_K4">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QProgressBar" name="pb_K5">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QProgressBar" name="pb_K6">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="7">
<widget class="QProgressBar" name="pb_K7">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="8">
<widget class="QLabel" name="label_128">
<item row="5" column="3">
<widget class="QLabel" name="label_35">
<property name="font">
<font>
<weight>75</weight>
1014,74 → 1725,1219
</font>
</property>
<property name="text">
<string>Kanäle der Fernsteuerung</string>
<string>Poti 8:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="8">
<widget class="QLabel" name="label_18">
<property name="text">
<string>8</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<item row="5" column="4">
<widget class="QComboBox" name="cb_2_12">
<item>
<property name="text">
<string>RC 1</string>
</property>
</item>
<item>
<property name="text">
<string>RC 2</string>
</property>
</item>
<item>
<property name="text">
<string>RC 3</string>
</property>
</item>
<item>
<property name="text">
<string>RC 4</string>
</property>
</item>
<item>
<property name="text">
<string>RC 5</string>
</property>
</item>
<item>
<property name="text">
<string>RC 6</string>
</property>
</item>
<item>
<property name="text">
<string>RC 7</string>
</property>
</item>
<item>
<property name="text">
<string>RC 8</string>
</property>
</item>
<item>
<property name="text">
<string>RC 9</string>
</property>
</item>
<item>
<property name="text">
<string>RC 10</string>
</property>
</item>
<item>
<property name="text">
<string>RC 11</string>
</property>
</item>
<item>
<property name="text">
<string>RC 12</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 1</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 2</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 3</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 4</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 5</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 6</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 7</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 8</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 9</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 10</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 11</string>
</property>
</item>
<item>
<property name="text">
<string>Ser 12</string>
</property>
</item>
</widget>
</item>
<item row="2" column="8">
<widget class="QProgressBar" name="pb_K8">
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<item row="6" column="2">
<spacer name="verticalSpacer_21">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="9">
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<spacer name="horizontalSpacer_13">
<item row="8" column="0" colspan="5">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_155">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Empfänger wählen:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="s_2_13_cb">
<item>
<property name="text">
<string>Multisignal (PPM)</string>
</property>
</item>
<item>
<property name="text">
<string>Spectrum Satellit</string>
</property>
</item>
<item>
<property name="text">
<string>Spectrum Satellit (HiRes)</string>
</property>
</item>
<item>
<property name="text">
<string>Spectrum Satellit (LowRes)</string>
</property>
</item>
<item>
<property name="text">
<string>Jeti Satellit</string>
</property>
</item>
<item>
<property name="text">
<string>ACT DSL</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="7" column="0" colspan="5">
<widget class="Line" name="line_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Fernsteuerung</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="8" column="2">
<widget class="QProgressBar" name="pb_K7">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLabel" name="label_17">
<property name="text">
<string>7</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QProgressBar" name="pb_K2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QLabel" name="label_4">
<property name="text">
<string>2</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QProgressBar" name="pb_K1">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="8" column="4">
<widget class="QProgressBar" name="pb_K8">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QLabel" name="label_18">
<property name="text">
<string>8</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="8" column="6">
<widget class="QProgressBar" name="pb_K10">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="6" column="6">
<widget class="QLabel" name="label_36">
<property name="text">
<string>10</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="8" column="7">
<widget class="QProgressBar" name="pb_K11">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="8" column="8">
<widget class="QProgressBar" name="pb_K12">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="6" column="8">
<widget class="QLabel" name="label_47">
<property name="text">
<string>12</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QProgressBar" name="pb_K3">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QLabel" name="label_13">
<property name="text">
<string>3</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QLabel" name="label_14">
<property name="text">
<string>4</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="6">
<widget class="QProgressBar" name="pb_K4">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="3" column="8">
<widget class="QProgressBar" name="pb_K6">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="3" column="7">
<widget class="QProgressBar" name="pb_K5">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="7">
<widget class="QLabel" name="label_15">
<property name="text">
<string>5</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="8">
<widget class="QLabel" name="label_16">
<property name="text">
<string>6</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="8" column="5">
<widget class="QProgressBar" name="pb_K9">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="6" column="5">
<widget class="QLabel" name="label_49">
<property name="text">
<string>9</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="6" column="7">
<widget class="QLabel" name="label_46">
<property name="text">
<string>11</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>Seriell</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_18">
<item row="0" column="0">
<widget class="QLabel" name="label_132">
<property name="text">
<string>1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_78">
<property name="text">
<string>2</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_76">
<property name="text">
<string>3</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_136">
<property name="text">
<string>4</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label_133">
<property name="text">
<string>5</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLabel" name="label_154">
<property name="text">
<string>6</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QProgressBar" name="pb_K1_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QProgressBar" name="pb_K2_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QProgressBar" name="pb_K3_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QProgressBar" name="pb_K4_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QProgressBar" name="pb_K5_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QProgressBar" name="pb_K6_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_117">
<property name="text">
<string>7</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_50">
<property name="text">
<string>8</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_111">
<property name="text">
<string>9</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QLabel" name="label_128">
<property name="text">
<string>10</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QLabel" name="label_121">
<property name="text">
<string>11</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QLabel" name="label_118">
<property name="text">
<string>12</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QProgressBar" name="pb_K7_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QProgressBar" name="pb_K8_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QProgressBar" name="pb_K9_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QProgressBar" name="pb_K10_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QProgressBar" name="pb_K11_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QProgressBar" name="pb_K12_2">
<property name="maximumSize">
<size>
<width>15</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="textDirection">
<enum>QProgressBar::TopToBottom</enum>
</property>
<property name="format">
<string> %v</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="2" rowspan="2">
<widget class="QTextEdit" name="te_Help_2">
<property name="minimumSize">
1103,10 → 2959,10
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Hier können die vom Sender übertragenen Kanäle den Funktionen des MikroKopters zugeordnet werden. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Port 1-4 sind per Sender frei einstellbare Werte.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Port 1-8 sind per Sender frei einstellbare Werte.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Die Balken zeigen den Ausschlag des jeweiligen Kanals an.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
1121,7 → 2977,7
</font>
</property>
<property name="text">
<string>Sensitive receiver signal validation</string>
<string>Erweiterte Empfangssignalprüfung</string>
</property>
</widget>
</item>
1246,6 → 3102,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
1274,7 → 3150,7
</font>
</property>
<property name="text">
<string>External Control:</string>
<string>Externe Kontrolle:</string>
</property>
</widget>
</item>
1305,6 → 3181,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
1368,7 → 3264,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Diese Parameter dienen zur Einstellung der Stickwirkung.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;P-Anteil:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; Stick-Verstärkung. Je grösser, desto stärker reagiert der MK auf die Stickbewegungen. &lt;/span&gt;&lt;/p&gt;
1404,7 → 3300,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Hier kann der Höhenregler parametriert werden.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Soll-Höhe:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 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&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
1441,7 → 3337,7
</font>
</property>
<property name="text">
<string>Enable Altitude control</string>
<string>Höhenregelung aktiv</string>
</property>
</widget>
</item>
1485,7 → 3381,7
</font>
</property>
<property name="text">
<string>Height limitation control</string>
<string>Höhenbegrenzung</string>
</property>
<property name="checked">
<bool>true</bool>
1501,7 → 3397,7
</font>
</property>
<property name="text">
<string>use switch for setpoint</string>
<string>Schalter für Höhe</string>
</property>
</widget>
</item>
1514,7 → 3410,7
</font>
</property>
<property name="text">
<string>Vario altitude control</string>
<string>Vario-Höhe</string>
</property>
</widget>
</item>
1530,7 → 3426,7
</font>
</property>
<property name="text">
<string>enable acoustic vario</string>
<string>akustisches Variometer</string>
</property>
</widget>
</item>
1543,7 → 3439,7
</font>
</property>
<property name="text">
<string>SollHöhe:</string>
<string>Sollwert:</string>
</property>
</widget>
</item>
1574,6 → 3470,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
1639,6 → 3555,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
1684,6 → 3620,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
1716,6 → 3672,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
1762,7 → 3738,7
</font>
</property>
<property name="text">
<string>Verstärkung:</string>
<string>Verstärkung/Rate:</string>
</property>
</widget>
</item>
1785,7 → 3761,7
</font>
</property>
<property name="text">
<string>Hover variation:</string>
<string>Schwebe-Gas +/-:</string>
</property>
</widget>
</item>
1836,6 → 3812,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
1853,7 → 3849,7
</font>
</property>
<property name="text">
<string>Stick neutral:</string>
<string>Stick Neutral-Punkt:</string>
</property>
</widget>
</item>
1873,8 → 3869,8
<bool>false</bool>
</property>
<property name="text">
<string> 0 = automatic
120 = middle position</string>
<string> 0 = automatisch
120 = Mittelposition</string>
</property>
</widget>
</item>
1922,7 → 3918,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Hier werden die Parameter für die Gyroskope eingestellt.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Gyro-P: &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Einfluss des Gyros auf die Nick- und Rollgeschwindigkeit. Je höher wer Wert, desto träger bewegt sich der MikroKopter. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Gyro&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;-I: Lagestabilisierung. Je höher der Wert, desto stärker der Zusammenhang von Stickwinkel und Lagewinkel. Führt bei zu grossen Werten (gegenüber Gyro-P) zum Schwingen. &lt;/span&gt;&lt;/p&gt;
1990,6 → 3986,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
2035,6 → 4051,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
2100,6 → 4136,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
2145,6 → 4201,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
2197,6 → 4273,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
2242,6 → 4338,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
2256,7 → 4372,7
</font>
</property>
<property name="text">
<string>Dynamic Stability:</string>
<string>Dynamische Stabilität:</string>
</property>
</widget>
</item>
2308,7 → 4424,7
</font>
</property>
<property name="text">
<string>ACC/Gyro-Comp.:</string>
<string>ACC/Gyro-Komp.:</string>
</property>
</widget>
</item>
2370,6 → 4486,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
2395,7 → 4531,7
</widget>
<widget class="QWidget" name="Seite_6">
<layout class="QGridLayout" name="gridLayout_39">
<item row="0" column="2">
<item row="0" column="5">
<widget class="QTextEdit" name="te_Help_6">
<property name="minimumSize">
<size>
2416,7 → 4552,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Einstellungen für das Kamera-Servo an J7 der FlightCtrl.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Servo-Control: &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Servowert zum Schwenken der Kamera. Entweder fixen Wert, oder Poti eintragen. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Nick-Kompensation: &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Einfluss des Nickwinkels auf den Servo. &lt;/span&gt;&lt;/p&gt;
2427,7 → 4563,7
</property>
</widget>
</item>
<item row="0" column="1">
<item row="0" column="4">
<widget class="QFrame" name="frame_8">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
2441,152 → 4577,277
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_10">
<item row="0" column="1">
<widget class="QLabel" name="label_137">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Nick</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_138">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Roll</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cb_6_1">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Poti 1</string>
</property>
<layout class="QGridLayout" name="gridLayout_24">
<item row="0" column="0" rowspan="2">
<layout class="QGridLayout" name="gridLayout_22">
<item row="0" column="1">
<widget class="QLabel" name="label_137">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Nick</string>
</property>
</widget>
</item>
<item>
<property name="text">
<string>Poti 2</string>
</property>
<item row="0" column="3">
<widget class="QLabel" name="label_138">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Roll</string>
</property>
</widget>
</item>
<item>
<property name="text">
<string>Poti 3</string>
</property>
<item row="1" column="0">
<widget class="QLabel" name="label_55">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo Ansteuerung:</string>
</property>
</widget>
</item>
<item>
<property name="text">
<string>Poti 4</string>
</property>
<item row="1" column="1">
<widget class="QComboBox" name="cb_6_1">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Poti 1</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 2</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 3</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 4</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
</widget>
</item>
<item>
<property name="text">
<string>0</string>
</property>
<item row="1" column="3">
<widget class="QComboBox" name="cb_6_7">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Poti 1</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 2</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 3</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 4</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
</widget>
</item>
</widget>
</item>
<item row="1" column="3">
<widget class="QComboBox" name="cb_6_7">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Poti 1</string>
</property>
<item row="2" column="0">
<widget class="QLabel" name="label_56">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Kompensation:</string>
</property>
</widget>
</item>
<item>
<property name="text">
<string>Poti 2</string>
</property>
<item row="2" column="1">
<widget class="QSpinBox" name="sb_6_2">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item>
<property name="text">
<string>Poti 3</string>
</property>
<item row="2" column="3">
<widget class="QSpinBox" name="sb_6_8">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item>
<property name="text">
<string>Poti 4</string>
</property>
<item row="3" column="0">
<widget class="QLabel" name="label_130">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Richtung umkehren</string>
</property>
</widget>
</item>
<item>
<property name="text">
<string>0</string>
</property>
<item row="3" column="1">
<widget class="QCheckBox" name="cb_6_6">
<property name="text">
<string/>
</property>
</widget>
</item>
</widget>
<item row="3" column="3">
<widget class="QCheckBox" name="cb_6_9">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_57">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo min:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="sb_6_3">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QSpinBox" name="sb_6_10">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_58">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo max:</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="sb_6_4">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QSpinBox" name="sb_6_11">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="0" column="2" rowspan="6">
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_130">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<item row="0" column="1">
<widget class="QLabel" name="label_54">
<property name="text">
<string>Richtung invertieren</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QCheckBox" name="cb_6_6">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QCheckBox" name="cb_6_9">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_57">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo min:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="sb_6_3">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="6" column="3">
<widget class="QSpinBox" name="sb_6_10">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="6" column="4">
<item row="1" column="1">
<widget class="QLabel" name="label_61">
<property name="text">
<string/>
2593,34 → 4854,57
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_58">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo max:</string>
</property>
</widget>
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_59">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Ansteuergeschwindigkeit</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="sb_6_5">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="7" column="1">
<widget class="QSpinBox" name="sb_6_4">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="7" column="3">
<widget class="QSpinBox" name="sb_6_11">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="7" column="4">
<item row="2" column="1">
<widget class="QLabel" name="label_62">
<property name="text">
<string/>
2627,94 → 4911,243
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_59">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
<item row="4" column="0" colspan="2">
<widget class="Line" name="line_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="text">
<string>Servo refresh rate:</string>
</property>
</widget>
</item>
<item row="10" column="4">
<widget class="QLabel" name="label_63">
<property name="text">
<string/>
</property>
</widget>
<item row="5" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_10">
<item row="0" column="0">
<widget class="QLabel" name="label_156">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo 3:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cb_6_12">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Poti 1</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 2</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 3</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 4</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_157">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo 4:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QComboBox" name="cb_6_13">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Poti 1</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 2</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 3</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 4</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_158">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo 5:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cb_6_14">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Poti 1</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 2</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 3</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 4</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="2" column="3">
<widget class="QSpinBox" name="sb_6_8">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="sb_6_2">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_55">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Servo Control:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_56">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Kompensation:</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QLabel" name="label_54">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="10" column="1" colspan="3">
<widget class="QSpinBox" name="sb_6_5">
<property name="maximum">
<number>250</number>
</property>
</widget>
</item>
<item row="11" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="1">
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
2722,18 → 5155,11
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2" rowspan="8">
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
2850,6 → 5276,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3030,7 → 5476,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Bei Empfangsverlust: Geht der Funkempfang verloren (außer Reichweite oder Sender aus), tritt die Not-Gas-Regelung in Kraft um dem Piloten Zeit für Gegenmaßnahmen zu geben. Die gesamte Not-Gas-Regelung wird allerdings erst aktiv, wenn ein Gas-Wert von 40 für mindestens 4 Sekunden überschritten war (d.h. der Kopter wahrscheinlich fliegt)! &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:1px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Min.Gas &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Minimaler Gaswert, der an die Motoren geht &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:1px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Max.Gas &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Maximaler Gaswert, der an die Motoren geht. &lt;/span&gt;&lt;/p&gt;
3069,7 → 5515,7
</font>
</property>
<property name="text">
<string>Axis-(de-)-Coupling</string>
<string>Achs-(ent-)kopplung</string>
</property>
</widget>
</item>
3094,7 → 5540,7
</font>
</property>
<property name="text">
<string>Gier-Feedback:</string>
<string>Gier pos. Rückkopplung:</string>
</property>
</widget>
</item>
3125,6 → 5571,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3139,7 → 5605,7
</font>
</property>
<property name="text">
<string>Nick/Roll-Feedback:</string>
<string>Nick/Roll Rückkopplung:</string>
</property>
</widget>
</item>
3170,6 → 5636,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3184,7 → 5670,7
</font>
</property>
<property name="text">
<string>Gier-Korrektion:</string>
<string>Gier-Korrektur:</string>
</property>
</widget>
</item>
3215,6 → 5701,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3260,7 → 5766,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Achskopplung&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Eine Gierbewegung verkoppelt jetzt Nick und Roll. Das bedeutet, dass der MK jetzt eine Kurve fliegt, wenn man z.B. nickt und gleichzeitig giert. Es verhindert, dass dem MK nach Kurven schwindelig wird &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:1px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Gier-Feedback &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: Der Grad der Achsenkopplung. Ist der Wert zu klein, hängt der MK bei (und nach) einer Linkskurve nach rechts &lt;/span&gt;&lt;/p&gt;
3580,6 → 6086,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3702,7 → 6228,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Pfeile:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; Der Looping wird in diese entsprechende Richtung zugelassen. Dabei zeigt der Pfeil den entsprechenden Stickanschlag an &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Gas Limit:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; Auf diesen Wert wird das Gas während des Loopings begrenzt &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Ansprechschwelle:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; Ab diesen Stickwert wird aus der Lageregelung eine Drehratenregelung, um den Looping durchzuführen &lt;/span&gt;&lt;/p&gt;
3709,7 → 6235,7
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Hysteresis:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; Stick-Hysterese für die Ansprechschwelle. In der Regel immer niedriger, als die Ansprechschwelle &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;TurnOver Nick: &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;100 bedeutet 100% einer 360° Drehung. Wenn nach dem Looping der MK zu weit dreht, muss der Wert verringert werden. Dreht er nicht weit genug, muss der Wert vergrößert werden. Also entspricht 1 einem Winkel von 3,6° &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;TurnOver Roll:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; analog &lt;/span&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;TurnOver Nick&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Wichtig:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; Ansprechschwelle - Hysteresis sollte etwa bei 20-40 liegen, da sonst der Kopter beim verlassen der Loopingfunktion versucht, sehr schnell die Schräglage, die man mit dem Stick vorgibt, einzunehmen. Dies kann gerade bei sehr flotten Settings dazu führen, das der Kopter bei der Drehung &quot;springt&quot; und einige Gerade der Winkelbewegung nicht mitbekommt, was dazu führt, das sich der Kopter sehr schräg steht. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Wichtig:&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; Ansprechschwelle - Hysteresis sollte etwa bei 20-40 liegen, da sonst der Kopter beim verlassen der Loopingfunktion versucht, sehr schnell die Schräglage, die man mit dem Stick vorgibt, einzunehmen. Dies kann gerade bei sehr flotten Settings dazu führen, das der Kopter bei der Drehung &amp;quot;springt&amp;quot; und einige Gerade der Winkelbewegung nicht mitbekommt, was dazu führt, das sich der Kopter sehr schräg steht. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
3772,6 → 6298,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3824,6 → 6370,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3876,6 → 6442,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3928,6 → 6514,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
3980,6 → 6586,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
4032,6 → 6658,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
4084,6 → 6730,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
4136,6 → 6802,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
4185,7 → 6871,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Frei definierbare Parameter für eigene Erweiterungen im Quellcode. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Die Werte sind für Softwareentwickler zur freien Verfügung &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
4216,7 → 6902,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Einstellungen für die Ausgänge J16 und J17.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Blinkmuster&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Man kann ein Blinkmuster (von links nach rechts) und das Timing dafür im Koptertool einstellen. Automatisches Schalten von 10ms bis 20sek ist damit möglich&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Schaltfunktion&lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Wenn man als Timing einen Schalter auf der Funke belegt, kann man auch den Ausgang damit schalten. Dann nimmt der Ausgang den Pegel des obersten Bits (in der Darstellung links) an. Wenn damit etwas geschaltet werden soll (z.B. Kameraauslöser usw.), ist es besser, kein Blinkmuster einzugeben, sondern dann alle Bits entweder ein- oder auszuschalten. Ansonsten könnte das Blinkmuster während des Umschaltens einmal kurz durchlaufen.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
4497,30 → 7183,6
</item>
</layout>
</item>
<item row="0" column="3">
<widget class="QToolButton" name="J16_8">
<property name="maximumSize">
<size>
<width>15</width>
<height>15</height>
</size>
</property>
<property name="text">
<string>00</string>
</property>
<property name="icon">
<iconset resource="../QMK-Settings.qrc">
<normaloff>:/Flags/Global/Images/Actions/LED_Off.png</normaloff>
<normalon>:/Flags/Global/Images/Actions/LED_Green.png</normalon>:/Flags/Global/Images/Actions/LED_Off.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_107">
<property name="font">
4561,6 → 7223,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
4832,36 → 7514,6
</item>
</layout>
</item>
<item row="2" column="3">
<widget class="QToolButton" name="J17_8">
<property name="maximumSize">
<size>
<width>15</width>
<height>15</height>
</size>
</property>
<property name="toolTip">
<string>1</string>
</property>
<property name="text">
<string>00</string>
</property>
<property name="icon">
<iconset resource="../QMK-Settings.qrc">
<normaloff>:/Flags/Global/Images/Actions/LED_Off.png</normaloff>
<normalon>:/Flags/Global/Images/Actions/LED_Green.png</normalon>:/Flags/Global/Images/Actions/LED_Off.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_112">
<property name="font">
4902,6 → 7554,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
4914,7 → 7586,7
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<item row="4" column="0" colspan="4">
<widget class="QCheckBox" name="cb_11_7">
<property name="font">
<font>
5468,7 → 8140,7
</item>
</layout>
</item>
<item row="9" column="1">
<item row="10" column="1">
<spacer name="verticalSpacer_16">
<property name="orientation">
<enum>Qt::Vertical</enum>
5481,21 → 8153,44
</property>
</spacer>
</item>
<item row="9" column="1" colspan="2">
<widget class="QLabel" name="label_63">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>festes Timing 0.1s</string>
</property>
</widget>
</item>
<item row="7" column="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<widget class="QCheckBox" name="s_11_7_cb">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
<property name="text">
<string>aktiv</string>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>30</width>
<height>20</height>
</size>
</widget>
</item>
<item row="8" column="3">
<widget class="QCheckBox" name="s_11_8_cb">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</spacer>
<property name="text">
<string>aktiv</string>
</property>
</widget>
</item>
</layout>
</widget>
5528,7 → 8223,7
</font>
</property>
<property name="text">
<string>Enable GPS</string>
<string>GPS aktiv</string>
</property>
</widget>
</item>
5553,7 → 8248,7
</font>
</property>
<property name="text">
<string>GPS Mode Control:</string>
<string>GPS Modus Steuerung:</string>
</property>
</widget>
</item>
5584,6 → 8279,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5598,7 → 8313,7
</font>
</property>
<property name="text">
<string>GPS Gain:</string>
<string>GPS Verstärkung</string>
</property>
</widget>
</item>
5629,6 → 8344,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5650,7 → 8385,7
</font>
</property>
<property name="text">
<string>GPS Stick Threshold:</string>
<string>GPS Stick Schwelle:</string>
</property>
</widget>
</item>
5721,6 → 8456,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5766,6 → 8521,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5811,6 → 8586,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5856,6 → 8651,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5901,6 → 8716,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5946,6 → 8781,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
5991,6 → 8846,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
6007,7 → 8882,7
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
<height>1</height>
</size>
</property>
</spacer>
6036,7 → 8911,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Einstellungen für das Navi-Ctrl.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;GPS Mode Control:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;0 = Free, 100 = Position Hold, 200 = Coming Home&lt;/span&gt;&lt;/p&gt;
6073,7 → 8948,7
</font>
</property>
<property name="text">
<string>Enable GPS</string>
<string>GPS aktiv</string>
</property>
</widget>
</item>
6098,7 → 8973,7
</font>
</property>
<property name="text">
<string>GPS Wind Correction:</string>
<string>GPS Windkorrektur:</string>
</property>
</widget>
</item>
6129,6 → 9004,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
6150,7 → 9045,7
</font>
</property>
<property name="text">
<string>Speed Compensation:</string>
<string>Bremswirkung:</string>
</property>
</widget>
</item>
6181,6 → 9076,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
6233,6 → 9148,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
6285,6 → 9220,26
</item>
<item>
<property name="text">
<string>Poti 5</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 6</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 7</string>
</property>
</item>
<item>
<property name="text">
<string>Poti 8</string>
</property>
</item>
<item>
<property name="text">
<string>0</string>
</property>
</item>
6306,7 → 9261,7
</font>
</property>
<property name="text">
<string>Position Hold Login Time:</string>
<string>Position Hold Login-Zeit:</string>
</property>
</widget>
</item>
6364,7 → 9319,7
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;Einstellungen für das Navi-Ctrl (Seite 2).&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; font-weight:600; text-decoration: underline;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;GPS-Wind-Correction: &lt;/span&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;soll den MK bei Coming-Home direkter zurückfliegen und die Drift durch Wind kompensieren&lt;/span&gt;&lt;/p&gt;
6380,11 → 9335,72
</item>
</layout>
</widget>
<widget class="QWidget" name="Seite">
<layout class="QGridLayout" name="gridLayout_29"/>
</widget>
<widget class="QWidget" name="Seite"/>
</widget>
</item>
<item row="0" column="2">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_27">
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QWidget" name="wg_Set" native="true">
<layout class="QGridLayout" name="gridLayout_8">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_146">
<property name="text">
<string>Parametersatz</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="sb_Set">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>5</number>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="le_SetName">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="wgt_Connection" name="wg_Connection" native="true"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
6392,8 → 9408,8
<rect>
<x>0</x>
<y>0</y>
<width>764</width>
<height>21</height>
<width>778</width>
<height>19</height>
</rect>
</property>
<widget class="QMenu" name="menu_Program">
6409,13 → 9425,33
</property>
<addaction name="ac_About"/>
</widget>
<widget class="QMenu" name="menuKonfiguration">
<property name="title">
<string>Konfiguration</string>
</property>
<addaction name="ac_Read"/>
<addaction name="ac_Write"/>
<addaction name="separator"/>
<addaction name="ac_Load"/>
<addaction name="ac_Save"/>
</widget>
<widget class="QMenu" name="menuA_nsicht">
<property name="title">
<string>Ansicht</string>
</property>
<addaction name="ac_Toolbar"/>
<addaction name="ac_SmallIcons"/>
</widget>
<widget class="QMenu" name="menuExtras">
<property name="title">
<string>Extras</string>
</property>
<addaction name="ac_MotorMixer"/>
<addaction name="ac_MotorTest"/>
</widget>
<addaction name="menu_Program"/>
<addaction name="menuA_nsicht"/>
<addaction name="menuKonfiguration"/>
<addaction name="menuExtras"/>
<addaction name="menu_Help"/>
</widget>
6536,10 → 9572,43
<string>Motor-Mixer</string>
</property>
</action>
<action name="ac_Toolbar">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Toolbar anzeigen</string>
</property>
</action>
<action name="ac_SmallIcons">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>nur kleine Icons</string>
</property>
</action>
<action name="ac_MotorTest">
<property name="text">
<string>Motor-Test</string>
</property>
</action>
</widget>
<layoutdefault spacing="4" margin="11"/>
<customwidgets>
<customwidget>
<class>wgt_Connection</class>
<extends>QWidget</extends>
<header>wgt_Connection.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../QMK-Settings.qrc"/>
<include location="../../QMK-Maps/QMK-Maps.qrc"/>
</resources>
<connections>
<connection>
6581,12 → 9650,12
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>214</x>
<y>112</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>393</x>
<y>111</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6597,12 → 9666,12
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>214</x>
<y>139</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>393</x>
<y>138</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6745,8 → 9814,8
<y>80</y>
</hint>
<hint type="destinationlabel">
<x>221</x>
<y>107</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6805,8 → 9874,8
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>377</x>
<y>342</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>367</x>
6825,8 → 9894,8
<y>199</y>
</hint>
<hint type="destinationlabel">
<x>377</x>
<y>342</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6837,12 → 9906,12
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>337</x>
<y>114</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>451</x>
<y>191</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6853,12 → 9922,12
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>295</x>
<y>122</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>515</x>
<y>193</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6869,12 → 9938,12
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>290</x>
<y>120</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>424</x>
<y>274</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6885,12 → 9954,12
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>259</x>
<y>121</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>509</x>
<y>271</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6901,12 → 9970,12
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>280</x>
<y>120</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>446</x>
<y>311</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6917,12 → 9986,12
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>331</x>
<y>90</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>335</x>
<y>111</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
6933,8 → 10002,8
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>377</x>
<y>91</y>
<x>279</x>
<y>97</y>
</hint>
<hint type="destinationlabel">
<x>367</x>
6953,42 → 10022,10
<y>226</y>
</hint>
<hint type="destinationlabel">
<x>377</x>
<y>91</y>
<x>279</x>
<y>97</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_11_7</sender>
<signal>toggled(bool)</signal>
<receiver>J17_8</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>383</x>
<y>205</y>
</hint>
<hint type="destinationlabel">
<x>555</x>
<y>152</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_11_7</sender>
<signal>toggled(bool)</signal>
<receiver>J16_8</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>402</x>
<y>201</y>
</hint>
<hint type="destinationlabel">
<x>553</x>
<y>93</y>
</hint>
</hints>
</connection>
</connections>
</ui>
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_MotorMixer.cpp
68,9 → 68,8
}
 
// Connection-Object übergeben.
void dlg_MotorMixer::set_Objects(Input *t_Input, cSettings *t_Settings, s_Directorys t_Dir)
void dlg_MotorMixer::set_Objects(cSettings *t_Settings, s_Directorys t_Dir)
{
o_Input = t_Input;
o_Settings = t_Settings;
s_Dir = t_Dir;
}
245,7 → 244,8
void dlg_MotorMixer::read_Mixer()
{
c_Data[0] = 0;
o_Input->send_Data(HandlerMK::make_Frame('n', ADDRESS_FC, c_Data, 0).toLatin1().data(), DATA_READ_MIXER);
// o_Input->send_Data(HandlerMK::make_Frame('n', ADDRESS_FC, c_Data, 0).toLatin1().data(), DATA_READ_MIXER);
emit sig_SendData(HandlerMK::make_Frame('n', ADDRESS_FC, c_Data, 0).toLatin1().data(), DATA_READ_MIXER);
}
 
// Button-Slots
260,7 → 260,8
 
memcpy((unsigned char *)&c_Data, (unsigned char *)&MK_Mixer, sizeof(MK_Mixer));
 
o_Input->send_Data(HandlerMK::make_Frame('m', ADDRESS_FC, c_Data, sizeof(MK_Mixer)).toLatin1().data(), DATA_WRITE_MIXER);
// o_Input->send_Data(HandlerMK::make_Frame('m', ADDRESS_FC, c_Data, sizeof(MK_Mixer)).toLatin1().data(), DATA_WRITE_MIXER);
emit sig_SendData(HandlerMK::make_Frame('m', ADDRESS_FC, c_Data, sizeof(MK_Mixer)).toLatin1().data(), DATA_WRITE_MIXER);
}
 
void dlg_MotorMixer::slot_pb_LOAD()
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_MotorMixer.h
30,8 → 30,6
#include "../../Global/Kopter.h"
#include "../../Global/Global.h"
#include "../../Global/MK_Datatypes.h"
#include "../../Global/Class_Input/Input.h"
#include "../../Global/Class_Input/Input_TCP.h"
#include "../../Global/Class_HandlerMK/HandlerMK.h"
 
class dlg_MotorMixer : public QDialog, public Ui::dlg_MotorMixer_UI
40,13 → 38,10
 
public:
dlg_MotorMixer(QWidget *parent = 0);
void set_Objects(Input *t_Input, cSettings *t_Settings, s_Directorys t_Dir);
void set_Objects(cSettings *t_Settings, s_Directorys t_Dir);
void set_MotorConfig(s_MK_Mixer t_Mixer);
void read_Mixer();
private:
// Object für Kopter-Verbindung
Input *o_Input;
 
cSettings *o_Settings;
 
s_MK_Mixer MK_Mixer;
64,6 → 59,10
void slot_pb_LOAD();
void slot_pb_SAVE();
void slot_CheckValue(int Wert);
 
signals:
void sig_SendData(QString ,int);
 
};
 
#endif // DLG_MOTORMIXER_H
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_MotorTest.cpp
0,0 → 1,86
/***************************************************************************
* 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 "dlg_MotorTest.h"
 
dlg_MotorTest::dlg_MotorTest(QWidget *parent) : QDialog(parent)
{
setupUi(this);
 
Timer = new QTimer();
Timer->setInterval(250);
 
connect(sl_Speed, SIGNAL(valueChanged(int)), this, SLOT(slot_MotorTest(int)));
connect(Timer, SIGNAL(timeout()), this, SLOT(slot_Timer()));
}
 
void dlg_MotorTest::slot_MotorTest(int Wert)
{
if ((Wert > 0) && !(Timer->isActive()))
{
Timer->start();
}
 
for (int z = 0; z < 16; z++)
{
Motor[z] = 0;
}
 
if (cb_1->isChecked())
Motor[0] = Wert;
if (cb_2->isChecked())
Motor[1] = Wert;
if (cb_3->isChecked())
Motor[2] = Wert;
if (cb_4->isChecked())
Motor[3] = Wert;
if (cb_5->isChecked())
Motor[4] = Wert;
if (cb_6->isChecked())
Motor[5] = Wert;
if (cb_7->isChecked())
Motor[6] = Wert;
if (cb_8->isChecked())
Motor[7] = Wert;
if (cb_9->isChecked())
Motor[8] = Wert;
if (cb_10->isChecked())
Motor[9] = Wert;
if (cb_11->isChecked())
Motor[10] = Wert;
if (cb_12->isChecked())
Motor[11] = Wert;
}
 
void dlg_MotorTest::slot_Timer()
{
memcpy((unsigned char *)&c_Data, (unsigned char *)&Motor, sizeof(Motor));
 
emit sig_SendData(HandlerMK::make_Frame('t', ADDRESS_FC, c_Data, sizeof(Motor)).toLatin1().data(), 0);
}
 
void dlg_MotorTest::Stop()
{
Timer->stop();
}
 
dlg_MotorTest::~dlg_MotorTest()
{
}
 
 
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_MotorTest.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 DLG_MOTORTEST_H
#define DLG_MOTORTEST_H
 
#include <QObject>
#include <QTimer>
 
#include "ui_dlg_MotorTest.h"
 
#include "../../Global/Kopter.h"
#include "../../Global/Global.h"
#include "../../Global/MK_Datatypes.h"
#include "../../Global/Class_HandlerMK/HandlerMK.h"
 
 
class dlg_MotorTest : public QDialog, public Ui::dlg_MotorTest_UI
{
Q_OBJECT
 
public:
dlg_MotorTest(QWidget *parent = 0);
 
void Stop();
 
~dlg_MotorTest();
 
private:
QTimer *Timer;
unsigned char Motor[16];
char c_Data[150];
 
private slots:
void slot_MotorTest(int Wert);
void slot_Timer();
 
signals:
void sig_SendData(QString ,int);
};
 
#endif
/QMK-Groundstation/trunk/QMK-Settings/Dialogs/dlg_MotorTest.ui
0,0 → 1,350
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>dlg_MotorTest_UI</class>
<widget class="QDialog" name="dlg_MotorTest_UI">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>194</width>
<height>208</height>
</rect>
</property>
<property name="windowTitle">
<string>Motor-Test</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Motoren</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="cb_1">
<property name="text">
<string>1</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="cb_2">
<property name="text">
<string>2</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="cb_3">
<property name="text">
<string>3</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QCheckBox" name="cb_4">
<property name="text">
<string>4</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="cb_5">
<property name="text">
<string>5</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="cb_6">
<property name="text">
<string>6</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QCheckBox" name="cb_7">
<property name="text">
<string>7</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QCheckBox" name="cb_8">
<property name="text">
<string>8</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="cb_9">
<property name="text">
<string>9</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="cb_10">
<property name="text">
<string>10</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QCheckBox" name="cb_11">
<property name="text">
<string>11</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QCheckBox" name="cb_12">
<property name="text">
<string>12</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="4">
<widget class="QCheckBox" name="cb_ALL">
<property name="text">
<string>Alle auswählen</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QSlider" name="sl_Speed">
<property name="maximum">
<number>255</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pb_OK">
<property name="text">
<string>OK</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>pb_OK</sender>
<signal>clicked()</signal>
<receiver>dlg_MotorTest_UI</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>63</x>
<y>174</y>
</hint>
<hint type="destinationlabel">
<x>29</x>
<y>177</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_1</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>29</x>
<y>47</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_2</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>71</x>
<y>47</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_3</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>115</x>
<y>47</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_4</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>160</x>
<y>47</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_5</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>29</x>
<y>74</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_6</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>71</x>
<y>74</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_7</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>115</x>
<y>74</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_8</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>160</x>
<y>74</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_9</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>29</x>
<y>101</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_10</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>71</x>
<y>101</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_11</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>115</x>
<y>101</y>
</hint>
</hints>
</connection>
<connection>
<sender>cb_ALL</sender>
<signal>toggled(bool)</signal>
<receiver>cb_12</receiver>
<slot>setChecked(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>96</x>
<y>128</y>
</hint>
<hint type="destinationlabel">
<x>160</x>
<y>101</y>
</hint>
</hints>
</connection>
</connections>
</ui>
/QMK-Groundstation/trunk/QMK-Settings/Defines.h
24,7 → 24,7
#include "../Global/Kopter.h"
 
static const QString QA_NAME = "QMK-Settings";
static const QString QA_VERSION_NR = "1.1.4";
static const QString QA_VERSION_NR = "1.2.3";
 
#ifdef _BETA_
static const QString QA_VERSION = QA_VERSION_NR + " (BETA)";
32,8 → 32,8
static const QString QA_VERSION = QA_VERSION_NR;
#endif
 
static const QString QA_DATE = "30.11.2009";
static const QString QA_YEAR = "2008-2009";
static const QString QA_DATE = "28.03.2010";
static const QString QA_YEAR = "2008-2010";
 
static const QString QA_ABOUT =
"<HTML>"
/QMK-Groundstation/trunk/QMK-Settings/QMK-Settings.pro
2,8 → 2,7
# Project created by QtCreator 2009-07-20T20:04:00
# -------------------------------------------------
 
DEFINES += _TTY_POSIX_
include(../Global/Class_SerialPort.pri)
include(../Global/Widget_Connection.pri)
 
QT += network
TARGET = QMK-Settings
20,26 → 19,17
RCC_DIR = ../Binary/.build/QMK-Settings
RESOURCES += QMK-Settings.qrc
SOURCES += main.cpp \
../Global/Class_Input/Input.cpp \
../Global/Class_Input/Input_TCP.cpp \
../Global/Class_Input/Input_TTY.cpp \
../Global/Class_HandlerMK/HandlerMK.cpp \
../Global/Class_HandlerIP/HandlerIP.cpp \
Dialogs/dlg_Main.cpp \
Dialogs/dlg_MotorMixer.cpp \
Dialogs/dlg_MotorTest.cpp \
Classes/cSettings.cpp
HEADERS += Defines.h \
../Global/Kopter.h \
../Global/MK_Datatypes.h \
../Global/Global.h \
../Global/Class_Input/Input.h \
../Global/Class_Input/Input_TCP.h \
../Global/Class_Input/Input_TTY.h \
../Global/Class_HandlerMK/HandlerMK.h \
../Global/Class_HandlerIP/HandlerIP.h \
Dialogs/dlg_Main.h \
Dialogs/dlg_MotorMixer.h \
Dialogs/dlg_MotorTest.h \
Classes/cSettings.h \
TypeDefs.h
FORMS += Dialogs/dlg_Main.ui \
Dialogs/dlg_MotorMixer.ui
Dialogs/dlg_MotorMixer.ui \
Dialogs/dlg_MotorTest.ui
/QMK-Groundstation/trunk/build-debian.sh
18,10 → 18,6
${QMAKE} QMK-Communicator.pro ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=Debian ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Settings
${QMAKE} QMK-Settings.pro ${CONFIG}
make ${MAKEOPT}
38,3 → 34,11
#qmake QMK-Logger.pro ${CONFIG}
#make ${MAKEOPT}
#cd ..
#cd ./QMK-Control
#${QMAKE} QMK-Control.pro CONFIG+=Debian ${CONFIG}
#make ${MAKEOPT}
#cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=Debian ${CONFIG}
make ${MAKEOPT}
cd ..
/QMK-Groundstation/trunk/build-gentoo.sh
18,10 → 18,6
${QMAKE} QMK-Communicator.pro ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=Gentoo ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Settings
${QMAKE} QMK-Settings.pro ${CONFIG}
make ${MAKEOPT}
38,3 → 34,11
#qmake QMK-Logger.pro ${CONFIG}
#make ${MAKEOPT}
#cd ..
#cd ./QMK-Control
#${QMAKE} QMK-Control.pro CONFIG+=Gentoo ${CONFIG}
#make ${MAKEOPT}
#cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=Gentoo ${CONFIG}
make ${MAKEOPT}
cd ..
/QMK-Groundstation/trunk/build-opensuse.sh
19,10 → 19,6
${QMAKE} QMK-Communicator.pro ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=Suse ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Settings
${QMAKE} QMK-Settings.pro ${CONFIG}
make ${MAKEOPT}
39,3 → 35,11
#${QMAKE} QMK-Logger.pro ${CONFIG}
#make ${MAKEOPT}
#cd ..
#cd ./QMK-Control
#${QMAKE} QMK-Control.pro CONFIG+=Suse ${CONFIG}
#make ${MAKEOPT}
#cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=Suse ${CONFIG}
make ${MAKEOPT}
cd ..
/QMK-Groundstation/trunk/build-osx.sh
18,10 → 18,6
${QMAKE} QMK-Communicator.pro ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=OSX ${CONFIG}
make ${MAKEOPT}
cd ..
cd ./QMK-Settings
${QMAKE} QMK-Settings.pro ${CONFIG}
make ${MAKEOPT}
38,3 → 34,11
#${QMAKE} QMK-Logger.pro ${CONFIG}
#make ${MAKEOPT}
#cd ..
#cd ./QMK-Control
#${QMAKE} QMK-Control.pro CONFIG+=OSX ${CONFIG}
#make ${MAKEOPT}
#cd ..
cd ./QMK-Scope
${QMAKE} QMK-Scope.pro CONFIG+=OSX ${CONFIG}
make ${MAKEOPT}
cd ..