Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 306 → Rev 307

/QMK-Groundstation/trunk/Classes/ToolBox.cpp
137,6 → 137,29
return QString(TX_Buff);
}
 
// Datensatz nach 8bit Integer
int ToolBox::Data2Char(int *Data , int Start, bool is_signed)
{
int Out = (Data[Start]);
 
if ((Out > 128) && (is_signed))
Out = Out - 256;
 
return Out;
 
}
 
// Datensatz nach 8bit Integer
int ToolBox::Char2Data(int Data)
{
if (Data < 0)
{
return Data + 256;
}
return Data;
}
 
 
// Datensatz nach 16bit Integer
int ToolBox::Data2Int(int *Data , int Start, bool is_signed)
{
/QMK-Groundstation/trunk/Classes/ToolBox.h
31,8 → 31,12
static QString Encode64(char Data[150],unsigned int Length);
static bool check_CRC(QString RXString);
static QString add_CRC(QString TXString);
static int Data2Char(int *Data , int Start, bool is_signed = true);
static int Data2Int(int *Data , int Start, bool is_signed = true);
static long Data2Long(int *Data , int Start, bool is_signed = true);
 
static int Char2Data(int Data);
 
static QString Data2QString(int Data[150], int Start = 0, int End = 150);
static QIcon Icon(int ID);
static QString get_Float(long Wert, long Count);
/QMK-Groundstation/trunk/Classes/cConnection.cpp
39,6 → 39,8
 
void cConnection::new_Data(QString Data)
{
Data = Data;
 
while ((RxData.String.length() > 1) && (RxData.String.at(1) == '#'))
{
RxData.String.remove(0,1);
/QMK-Groundstation/trunk/Forms/dlg_MotorMixer.cpp
0,0 → 1,406
/***************************************************************************
* 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 "dlg_MotorMixer.h"
 
dlg_MotorMixer::dlg_MotorMixer(QWidget *parent) : QDialog(parent)
{
setupUi(this);
connect(pb_READ, SIGNAL(clicked()), this, SLOT(slot_pb_READ()));
connect(pb_LOAD, SIGNAL(clicked()), this, SLOT(slot_pb_LOAD()));
connect(pb_SAVE, SIGNAL(clicked()), this, SLOT(slot_pb_SAVE()));
connect(pb_WRITE, SIGNAL(clicked()), this, SLOT(slot_pb_WRITE()));
 
connect(sb_NICK_1, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_2, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_3, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_4, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_5, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_6, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_7, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_8, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_9, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_10, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_11, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_NICK_12, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
 
connect(sb_ROLL_1, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_2, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_3, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_4, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_5, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_6, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_7, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_8, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_9, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_10, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_11, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_ROLL_12, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
 
connect(sb_GIER_1, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_2, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_3, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_4, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_5, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_6, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_7, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_8, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_9, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_10, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_11, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
connect(sb_GIER_12, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
 
}
 
// Connection-Object übergeben.
void dlg_MotorMixer::set_Objects(cConnection *t_Connection, cSettings *t_Settings)
{
o_Connection = t_Connection;
o_Settings = t_Settings;
}
 
// Motordaten übernehmen.
void dlg_MotorMixer::set_MotorConfig(sRxData RX)
{
int Pos = 0;
 
MixerName = ToolBox::Data2QString(RX.Decode, 1, 12);
 
Pos = 13;
 
for (int z = 0; z < 16; z++)
{
for (int y = 0; y < 4; y++)
{
Motor[z][y] = ToolBox::Data2Char(RX.Decode,Pos);
Pos++;
}
}
 
set_MotorData();
}
 
// Motordaten aus GUI übernehmen
void dlg_MotorMixer::get_MotorData()
{
MixerName = le_NAME->text();
 
Motor[0][0] = sb_GAS_1->value();
Motor[1][0] = sb_GAS_2->value();
Motor[2][0] = sb_GAS_3->value();
Motor[3][0] = sb_GAS_4->value();
Motor[4][0] = sb_GAS_5->value();
Motor[5][0] = sb_GAS_6->value();
Motor[6][0] = sb_GAS_7->value();
Motor[7][0] = sb_GAS_8->value();
Motor[8][0] = sb_GAS_9->value();
Motor[9][0] = sb_GAS_10->value();
Motor[10][0] = sb_GAS_11->value();
Motor[11][0] = sb_GAS_12->value();
 
Motor[0][1] = sb_NICK_1->value();
Motor[1][1] = sb_NICK_2->value();
Motor[2][1] = sb_NICK_3->value();
Motor[3][1] = sb_NICK_4->value();
Motor[4][1] = sb_NICK_5->value();
Motor[5][1] = sb_NICK_6->value();
Motor[6][1] = sb_NICK_7->value();
Motor[7][1] = sb_NICK_8->value();
Motor[8][1] = sb_NICK_9->value();
Motor[9][1] = sb_NICK_10->value();
Motor[10][1] = sb_NICK_11->value();
Motor[11][1] = sb_NICK_12->value();
 
Motor[0][2] = sb_ROLL_1->value();
Motor[1][2] = sb_ROLL_2->value();
Motor[2][2] = sb_ROLL_3->value();
Motor[3][2] = sb_ROLL_4->value();
Motor[4][2] = sb_ROLL_5->value();
Motor[5][2] = sb_ROLL_6->value();
Motor[6][2] = sb_ROLL_7->value();
Motor[7][2] = sb_ROLL_8->value();
Motor[8][2] = sb_ROLL_9->value();
Motor[9][2] = sb_ROLL_10->value();
Motor[10][2] = sb_ROLL_11->value();
Motor[11][2] = sb_ROLL_12->value();
 
Motor[0][3] = sb_GIER_1->value();
Motor[1][3] = sb_GIER_2->value();
Motor[2][3] = sb_GIER_3->value();
Motor[3][3] = sb_GIER_4->value();
Motor[4][3] = sb_GIER_5->value();
Motor[5][3] = sb_GIER_6->value();
Motor[6][3] = sb_GIER_7->value();
Motor[7][3] = sb_GIER_8->value();
Motor[8][3] = sb_GIER_9->value();
Motor[9][3] = sb_GIER_10->value();
Motor[10][3] = sb_GIER_11->value();
Motor[11][3] = sb_GIER_12->value();
}
 
// Motordaten anzeigen
void dlg_MotorMixer::set_MotorData()
{
le_NAME->setText(MixerName);
 
sb_GAS_1->setValue(Motor[0][0]);
sb_GAS_2->setValue(Motor[1][0]);
sb_GAS_3->setValue(Motor[2][0]);
sb_GAS_4->setValue(Motor[3][0]);
sb_GAS_5->setValue(Motor[4][0]);
sb_GAS_6->setValue(Motor[5][0]);
sb_GAS_7->setValue(Motor[6][0]);
sb_GAS_8->setValue(Motor[7][0]);
sb_GAS_9->setValue(Motor[8][0]);
sb_GAS_10->setValue(Motor[9][0]);
sb_GAS_11->setValue(Motor[10][0]);
sb_GAS_12->setValue(Motor[11][0]);
 
sb_NICK_1->setValue(Motor[0][1]);
sb_NICK_2->setValue(Motor[1][1]);
sb_NICK_3->setValue(Motor[2][1]);
sb_NICK_4->setValue(Motor[3][1]);
sb_NICK_5->setValue(Motor[4][1]);
sb_NICK_6->setValue(Motor[5][1]);
sb_NICK_7->setValue(Motor[6][1]);
sb_NICK_8->setValue(Motor[7][1]);
sb_NICK_9->setValue(Motor[8][1]);
sb_NICK_10->setValue(Motor[9][1]);
sb_NICK_11->setValue(Motor[10][1]);
sb_NICK_12->setValue(Motor[11][1]);
 
sb_ROLL_1->setValue(Motor[0][2]);
sb_ROLL_2->setValue(Motor[1][2]);
sb_ROLL_3->setValue(Motor[2][2]);
sb_ROLL_4->setValue(Motor[3][2]);
sb_ROLL_5->setValue(Motor[4][2]);
sb_ROLL_6->setValue(Motor[5][2]);
sb_ROLL_7->setValue(Motor[6][2]);
sb_ROLL_8->setValue(Motor[7][2]);
sb_ROLL_9->setValue(Motor[8][2]);
sb_ROLL_10->setValue(Motor[9][2]);
sb_ROLL_11->setValue(Motor[10][2]);
sb_ROLL_12->setValue(Motor[11][2]);
 
sb_GIER_1->setValue(Motor[0][3]);
sb_GIER_2->setValue(Motor[1][3]);
sb_GIER_3->setValue(Motor[2][3]);
sb_GIER_4->setValue(Motor[3][3]);
sb_GIER_5->setValue(Motor[4][3]);
sb_GIER_6->setValue(Motor[5][3]);
sb_GIER_7->setValue(Motor[6][3]);
sb_GIER_8->setValue(Motor[7][3]);
sb_GIER_9->setValue(Motor[8][3]);
sb_GIER_10->setValue(Motor[9][3]);
sb_GIER_11->setValue(Motor[10][3]);
sb_GIER_12->setValue(Motor[11][3]);
}
 
// Prüfen auf vollstaändigkeit
void dlg_MotorMixer::slot_CheckValue(int Wert)
{
Wert = Wert;
 
int NICK = sb_NICK_1->value() + sb_NICK_2->value() + sb_NICK_3->value() + sb_NICK_4->value() + sb_NICK_5->value() + sb_NICK_6->value() +
sb_NICK_7->value() + sb_NICK_8->value() + sb_NICK_9->value() + sb_NICK_10->value() + sb_NICK_11->value() + sb_NICK_12->value();
 
int ROLL = sb_ROLL_1->value() + sb_ROLL_2->value() + sb_ROLL_3->value() + sb_ROLL_4->value() + sb_ROLL_5->value() + sb_ROLL_6->value() +
sb_ROLL_7->value() + sb_ROLL_8->value() + sb_ROLL_9->value() + sb_ROLL_10->value() + sb_ROLL_11->value() + sb_ROLL_12->value();
 
int GIER = sb_GIER_1->value() + sb_GIER_2->value() + sb_GIER_3->value() + sb_GIER_4->value() + sb_GIER_5->value() + sb_GIER_6->value() +
sb_GIER_7->value() + sb_GIER_8->value() + sb_GIER_9->value() + sb_GIER_10->value() + sb_GIER_11->value() + sb_GIER_12->value();
 
if (NICK == 0)
{
lb_NICK->setEnabled(true);
}
else
{
lb_NICK->setEnabled(false);
}
 
if (ROLL == 0)
{
lb_ROLL->setEnabled(true);
}
else
{
lb_ROLL->setEnabled(false);
}
 
if (GIER == 0)
{
lb_GIER->setEnabled(true);
}
else
{
lb_GIER->setEnabled(false);
}
}
 
int dlg_MotorMixer::get_MotorConfig()
{
get_MotorData();
 
TX_Data[0] = VERSION_MIXER;
 
char *Name = MixerName.toLatin1().data();
 
int a;
 
for (a = 0; a < MixerName.length(); a++)
{
TX_Data[1+a] = Name[a];
}
 
while(a < 12)
{
TX_Data[1+a] = 0;
a++;
}
 
int Pos = 13;
 
for (int z = 0; z < 16; z++)
{
for (int y = 0; y < 4; y++)
{
TX_Data[Pos] = ToolBox::Char2Data(Motor[z][y]);
Pos++;
}
}
 
return Pos - 1;
}
 
void dlg_MotorMixer::read_Mixer()
{
TX_Data[0] = 0;
o_Connection->send_Cmd('n', ADDRESS_FC, TX_Data, 1, false);
}
 
// Motordaten auslesen
void dlg_MotorMixer::slot_pb_READ()
{
TX_Data[0] = 0;
o_Connection->send_Cmd('n', ADDRESS_FC, TX_Data, 1, false);
}
 
void dlg_MotorMixer::slot_pb_WRITE()
{
int Length = get_MotorConfig();
o_Connection->send_Cmd('m', ADDRESS_FC, TX_Data, Length, false);
}
 
void dlg_MotorMixer::slot_pb_LOAD()
{
QString Filename = QFileDialog::getOpenFileName(this, "Mikrokopter MotorMixer laden", o_Settings->DIR.Parameter + "", "MK MotorMixer(*.mkm);;Alle Dateien (*)");
 
if (!Filename.isEmpty())
{
QSettings Setting(Filename, QSettings::IniFormat);
 
Setting.beginGroup("Info");
MixerName = Setting.value("Name", QString("--noname--")).toString();
MixerVersion = Setting.value("Version", 0).toInt();
Setting.endGroup();
 
Setting.beginGroup("Gas");
for (int z = 0; z < MAXMOTOR; z++)
{
Motor[z][0] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
}
Setting.endGroup();
 
Setting.beginGroup("Nick");
for (int z = 0; z < MAXMOTOR; z++)
{
Motor[z][1] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
}
Setting.endGroup();
 
Setting.beginGroup("Roll");
for (int z = 0; z < MAXMOTOR; z++)
{
Motor[z][2] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
}
Setting.endGroup();
 
Setting.beginGroup("Yaw");
for (int z = 0; z < MAXMOTOR; z++)
{
Motor[z][3] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
}
Setting.endGroup();
 
if (MixerVersion == VERSION_MIXER)
{
set_MotorData();
}
}
}
 
void dlg_MotorMixer::slot_pb_SAVE()
{
QString Filename = QFileDialog::getSaveFileName(this, "Mikrokopter MotorMixer speichern", o_Settings->DIR.Parameter + "/" + le_NAME->text(), "MK MotorMixer(*.mkm);;Alle Dateien (*)");
 
if (!Filename.isEmpty())
{
if (!(Filename.endsWith(".mkm", Qt::CaseInsensitive)))
{
Filename = Filename + QString(".mkm");
}
 
get_MotorData();
 
QSettings Setting(Filename, QSettings::IniFormat);
 
Setting.beginGroup("Info");
Setting.setValue("Name", MixerName);
Setting.setValue("Version", VERSION_MIXER);
Setting.endGroup();
 
Setting.beginGroup("Gas");
for (int z = 0; z < MAXMOTOR; z++)
{
Setting.setValue(QString("Motor%1").arg(z+1), Motor[z][0]);
}
Setting.endGroup();
 
Setting.beginGroup("Nick");
for (int z = 0; z < MAXMOTOR; z++)
{
Setting.setValue(QString("Motor%1").arg(z+1), Motor[z][1]);
}
Setting.endGroup();
 
Setting.beginGroup("Roll");
for (int z = 0; z < MAXMOTOR; z++)
{
Setting.setValue(QString("Motor%1").arg(z+1), Motor[z][2]);
}
Setting.endGroup();
 
Setting.beginGroup("Yaw");
for (int z = 0; z < MAXMOTOR; z++)
{
Setting.setValue(QString("Motor%1").arg(z+1), Motor[z][3]);
}
Setting.endGroup();
}
}
/QMK-Groundstation/trunk/Forms/dlg_MotorMixer.h
0,0 → 1,67
/***************************************************************************
* 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 DLG_MOTORMIXER_H
#define DLG_MOTORMIXER_H
 
#include <QObject>
#include <QFileDialog>
#include <QSettings>
 
#include "ui_dlg_MotorMixer.h"
#include "../Classes/cSettings.h"
#include "../Classes/cConnection.h"
#include "../typedefs.h"
#include "../Classes/ToolBox.h"
#include "../global.h"
 
class dlg_MotorMixer : public QDialog, public Ui::dlg_MotorMixer_UI
{
Q_OBJECT
 
public:
dlg_MotorMixer(QWidget *parent = 0);
void set_Objects(cConnection *t_Connection, cSettings *t_Settings);
void set_MotorConfig(sRxData RX);
void read_Mixer();
 
private:
// Object für Kopter-Verbindung
cConnection *o_Connection;
 
cSettings *o_Settings;
 
char TX_Data[150];
 
int Motor[16][4];
QString MixerName;
int MixerVersion;
 
void set_MotorData();
void get_MotorData();
int get_MotorConfig();
 
private slots:
void slot_pb_READ();
void slot_pb_WRITE();
void slot_pb_LOAD();
void slot_pb_SAVE();
void slot_CheckValue(int Wert);
};
 
#endif // DLG_MOTORMIXER_H
/QMK-Groundstation/trunk/Forms/dlg_MotorMixer.ui
0,0 → 1,1709
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>dlg_MotorMixer_UI</class>
<widget class="QDialog" name="dlg_MotorMixer_UI">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>470</width>
<height>414</height>
</rect>
</property>
<property name="windowTitle">
<string>MotorMixer-Einstellungen</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true">
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>2</number>
</property>
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 1:</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_1">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="2" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_1">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QSpinBox" name="sb_ROLL_1">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QSpinBox" name="sb_GIER_1">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 2:</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_2">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="3" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_2">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QSpinBox" name="sb_ROLL_2">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="3" column="6">
<widget class="QSpinBox" name="sb_GIER_2">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 3:</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_3">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="4" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_3">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="4" column="5">
<widget class="QSpinBox" name="sb_ROLL_3">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="4" column="6">
<widget class="QSpinBox" name="sb_GIER_3">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_4">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 4:</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_4">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="5" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_4">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="5" column="5">
<widget class="QSpinBox" name="sb_ROLL_4">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="5" column="6">
<widget class="QSpinBox" name="sb_GIER_4">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_5">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 5:</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_5">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="6" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_5">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="6" column="5">
<widget class="QSpinBox" name="sb_ROLL_5">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="6" column="6">
<widget class="QSpinBox" name="sb_GIER_5">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_6">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 6:</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_6">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="7" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_6">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="7" column="5">
<widget class="QSpinBox" name="sb_ROLL_6">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="7" column="6">
<widget class="QSpinBox" name="sb_GIER_6">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_7">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 7:</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_7">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="8" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_7">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="8" column="5">
<widget class="QSpinBox" name="sb_ROLL_7">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="8" column="6">
<widget class="QSpinBox" name="sb_GIER_7">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_8">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 8:</string>
</property>
</widget>
</item>
<item row="9" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_8">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="9" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_8">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="9" column="5">
<widget class="QSpinBox" name="sb_ROLL_8">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="9" column="6">
<widget class="QSpinBox" name="sb_GIER_8">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_9">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 9:</string>
</property>
</widget>
</item>
<item row="10" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_9">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="10" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_9">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="10" column="5">
<widget class="QSpinBox" name="sb_ROLL_9">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="10" column="6">
<widget class="QSpinBox" name="sb_GIER_9">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_10">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 10:</string>
</property>
</widget>
</item>
<item row="11" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_10">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="11" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_10">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="11" column="5">
<widget class="QSpinBox" name="sb_ROLL_10">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="11" column="6">
<widget class="QSpinBox" name="sb_GIER_10">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_11">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 11:</string>
</property>
</widget>
</item>
<item row="12" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_11">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="12" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_11">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="12" column="5">
<widget class="QSpinBox" name="sb_ROLL_11">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="12" column="6">
<widget class="QSpinBox" name="sb_GIER_11">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_12">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motor 12:</string>
</property>
</widget>
</item>
<item row="13" column="1" colspan="2">
<widget class="QSpinBox" name="sb_GAS_12">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="13" column="3" colspan="2">
<widget class="QSpinBox" name="sb_NICK_12">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="13" column="5">
<widget class="QSpinBox" name="sb_ROLL_12">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="13" column="6">
<widget class="QSpinBox" name="sb_GIER_12">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="minimum">
<number>-128</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QLabel" name="lb_ROLL">
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>62</red>
<green>207</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>62</red>
<green>207</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>ROLL</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QLabel" name="label_13">
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>GAS</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QLabel" name="lb_GIER">
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>62</red>
<green>207</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>62</red>
<green>207</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>GIER</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="3" colspan="2">
<widget class="QLabel" name="lb_NICK">
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>62</red>
<green>207</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>62</red>
<green>207</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>20</red>
<green>19</green>
<blue>18</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>179</red>
<green>14</green>
<blue>17</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<family>Courier 10 Pitch</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>NICK</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<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_2">
<item row="2" column="0">
<widget class="QLineEdit" name="le_NAME"/>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="pb_READ">
<property name="text">
<string>Lesen</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QPushButton" name="pb_WRITE">
<property name="text">
<string>Schreiben</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QPushButton" name="pb_LOAD">
<property name="text">
<string>Laden</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QPushButton" name="pb_SAVE">
<property name="text">
<string>Speichern</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="7" column="0">
<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>
</layout>
</widget>
<resources>
<include location="../MKTool.qrc"/>
</resources>
<connections/>
</ui>
/QMK-Groundstation/trunk/Forms/mktool.cpp
60,7 → 60,7
setWindowTitle(QA_NAME + " v" + QA_VERSION);
 
// Tab mit Debug-Elementen verbergen
tab_Main->removeTab(6);
//tab_Main->removeTab(6);
// Develop - Nicht gebrauchte sachen abschalten.
pb_SettingsReset->hide();
pb_Flash->hide();
69,6 → 69,8
// Beta-Sachen einschalten.
#ifdef _BETA_
ac_QMKServer->setEnabled(true);
#else
ac_MotorMixer->setVisible(false);
#endif
// Settings-Tab hinzufügen.
f_Settings = new wdg_Settings( this );
209,6 → 211,9
f_LCD = new dlg_LCD(this);
 
// LCD-Dialog
f_MotorMixer = new dlg_MotorMixer(this);
 
// LCD-Dialog
f_Map = new dlg_Map(this);
f_Map->create_Map(Settings);
 
249,6 → 254,7
connect(ac_Config, SIGNAL(triggered()), this, SLOT(slot_ac_Config()));
connect(ac_Preferences, SIGNAL(triggered()), this, SLOT(slot_ac_Preferences()));
connect(ac_Motortest, SIGNAL(triggered()), this, SLOT(slot_ac_Motortest()));
connect(ac_MotorMixer, SIGNAL(triggered()), this, SLOT(slot_ac_MotorMixer()));
connect(ac_LCD, SIGNAL(triggered()), this, SLOT(slot_ac_LCD()));
connect(ac_Map, SIGNAL(triggered()), this, SLOT(slot_ac_Map()));
connect(ac_FastDebug, SIGNAL(triggered()), this, SLOT(slot_ac_FastDebug()));
683,6 → 689,16
slot_Motortest(0,0,0,0);
}
 
void MKTool::slot_ac_MotorMixer()
{
f_MotorMixer->set_Objects(o_Connection, Settings);
f_MotorMixer->read_Mixer();
 
if (f_MotorMixer->exec()==QDialog::Accepted)
{
}
}
 
void MKTool::slot_ac_LCD()
{
if (!f_LCD->isVisible())
1381,6 → 1397,27
case ADDRESS_FC :
switch(RX.Input[2])
{
// Motor-Mixer
case 'N' :
if (ToolBox::Decode64(RX))
{
if (RX.Decode[0] == VERSION_MIXER)
{
f_MotorMixer->set_MotorConfig(RX);
}
}
break;
// Motor-Mixer Schreib-Bestätigung
case 'M' :
if (ToolBox::Decode64(RX))
{
if (RX.Decode[0] == 1)
{
lb_Status->setText(tr("MotorMixer-Daten in FC geschrieben."));
}
}
break;
 
// Stick-Belegung der Fernsteuerung
case 'P' : // DONE 0.71g
if (ToolBox::Decode64(RX))
1636,8 → 1673,11
{
if ((cb_ShowMSG->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked())))
{
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
te_RX->insertHtml("<span style=\"color:#008b00;\">" + Text + "</span>");
if (Text.length() > 0)
{
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
te_RX->insertHtml("<span style=\"color:#008b00;\">" + Text + "</span><br />");
}
}
}
break;
/QMK-Groundstation/trunk/Forms/mktool.h
41,6 → 41,7
#include "wdg_Settings.h"
#include "dlg_LCD.h"
#include "dlg_Map.h"
#include "dlg_MotorMixer.h"
 
#include "../Classes/cConnection.h"
#include "../Classes/cSettings.h"
80,6 → 81,9
// LCD-Dialog
dlg_LCD *f_LCD;
 
// MotorMixer-Dialog
dlg_MotorMixer *f_MotorMixer;
 
// Map-Dialog
dlg_Map *f_Map;
 
189,6 → 193,7
void slot_ac_Motortest();
void slot_ac_LCD();
void slot_ac_Map();
void slot_ac_MotorMixer();
 
void slot_pb_HexFile();
void slot_pb_SendWaypoint();
/QMK-Groundstation/trunk/Forms/mktool.ui
2051,9 → 2051,10
<property name="title">
<string>&amp;Einstellungen</string>
</property>
<addaction name="ac_Config"/>
<addaction name="ac_MotorMixer"/>
<addaction name="separator"/>
<addaction name="ac_Preferences"/>
<addaction name="ac_Config"/>
</widget>
<widget class="QMenu" name="menu_Help">
<property name="title">
2106,6 → 2107,7
<addaction name="ac_SelFC"/>
<addaction name="ac_SelNC"/>
<addaction name="ac_SelMag"/>
<addaction name="separator"/>
</widget>
<widget class="QMenu" name="menu_Navi_Daten">
<property name="title">
2525,6 → 2527,15
<string>Flug-Karte</string>
</property>
</action>
<action name="ac_MotorMixer">
<property name="icon">
<iconset resource="../MKTool.qrc">
<normaloff>:/Actions/Images/Actions/MotorMixer.png</normaloff>:/Actions/Images/Actions/MotorMixer.png</iconset>
</property>
<property name="text">
<string>Motor-Mixer</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
/QMK-Groundstation/trunk/Images/Actions/MotorMixer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:executable
+*
\ No newline at end of property
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/QMK-Groundstation/trunk/MKTool.qrc
15,6 → 15,7
<file>Images/Arrows/Up-2.png</file>
</qresource>
<qresource prefix="Actions" >
<file>Images/Actions/MotorMixer.png</file>
<file>Images/Actions/Folder-Open.png</file>
<file>Images/Actions/Preferences-Data.png</file>
<file>Images/Actions/Preferences.png</file>
/QMK-Groundstation/trunk/Parameter_Positions.h
61,8 → 61,17
 
// Positionen der Setting-Parameter
///////////////////////////////////
 
#ifdef _BETA_
static const int VERSION_SETTINGS = 75;
static const int VERSION_MIXER = 1;
#else
static const int VERSION_SETTINGS = 74;
static const int VERSION_MIXER = 1;
#endif
 
static const int MAXMOTOR = 12;
 
static const int MaxParameter = 93;
 
static const int P_KANAL_GAS = 0;
/QMK-Groundstation/trunk/global.h
56,11 → 56,11
static const int SLEEP = 500000;
 
static const QString QA_NAME = "QMK-Groundstation";
static const QString QA_VERSION_NR = "0.7.9";
static const QString QA_VERSION_NR = "0.7.10";
 
#ifdef _BETA_
static const QString QA_VERSION = QA_VERSION_NR + " (BETA)";
static const QString QA_HWVERSION = "FlightCtrl v0.72p & NaviCtrl v0.14b";
static const QString QA_HWVERSION = "FlightCtrl v0.73c & NaviCtrl v0.14e";
#else
static const QString QA_VERSION = QA_VERSION_NR;
static const QString QA_HWVERSION = "FlightCtrl v0.72p & NaviCtrl v0.14b";
81,7 → 81,7
#endif
 
 
static const QString QA_DATE = "15.03.2009";
static const QString QA_DATE = "19.03.2009";
static const QString QA_YEAR = "2008-2009";
static const QString QA_AUTHOR = "Manuel Schrape";
static const QString QA_EMAIL = "manuel.schrape@gmx.de";
/QMK-Groundstation/trunk/global.pri
34,7 → 34,8
Logger/CSVLogger.cpp \
Forms/dlg_LCD.cpp \
Classes/cConnection.cpp \
Forms/dlg_Map.cpp
Forms/dlg_Map.cpp \
Forms/dlg_MotorMixer.cpp
win32:SOURCES += SerialPort/win_qextserialport.cpp
unix:SOURCES += SerialPort/posix_qextserialport.cpp
 
61,7 → 62,8
Forms/dlg_LCD.h \
Classes/cConnection.h \
typedefs.h \
Forms/dlg_Map.h
Forms/dlg_Map.h \
Forms/dlg_MotorMixer.h
 
win32:HEADERS += SerialPort/win_qextserialport.h
unix:HEADERS += SerialPort/posix_qextserialport.h
73,4 → 75,5
Forms/dlg_Motortest.ui \
Forms/wdg_Settings.ui \
Forms/dlg_LCD.ui \
Forms/dlg_Map.ui
Forms/dlg_Map.ui \
Forms/dlg_MotorMixer.ui
/QMK-Groundstation/trunk/typedefs.h
1,38 → 1,19
#ifndef TYPEDEFS_H
#define TYPEDEFS_H
 
#ifdef _BETA_
#define INVALID 0x00
#define NEWDATA 0x01
#define PROCESSED 0x02
 
#define INVALID 0x00
#define NEWDATA 0x01
#define PROCESSED 0x02
typedef struct
{
int32_t Longitude; // in 1E-7 deg
int32_t Latitude; // in 1E-7 deg
int32_t Altitude; // in mm
uint8_t Status; // validity of data
} __attribute__((packed)) GPS_Pos_t;
 
typedef struct
{
int32_t Longitude; // in 1E-7 deg
int32_t Latitude; // in 1E-7 deg
int32_t Altitude; // in mm
uint8_t Status; // validity of data
} __attribute__((packed)) GPS_Pos_t;
 
#else
 
typedef enum
{
INVALID = 0,
NEWDATA = 1,
PROCESSED = 2
} Status_t;
 
typedef struct
{
int32_t Longitude; // in 1E-7 deg
int32_t Latitude; // in 1E-7 deg
int32_t Altitude; // in mm
Status_t Status; // validity of data
} __attribute__((packed)) GPS_Pos_t;
#endif
 
typedef struct
{
GPS_Pos_t Position; // the gps position of the waypoint, see ubx.h for details
43,4 → 24,11
uint8_t reserve[12]; // reserve
} __attribute__((packed)) Waypoint_t;
 
typedef struct
{
char Revision;
char Name[12];
signed char Motor[16][4];
} Mixer_t;
 
#endif // TYPEDEFS_H