Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 226 → Rev 227

/QMK-Groundstation/trunk/Forms/mktool.cpp
26,6 → 26,7
#include <QToolButton>
#include <QSpinBox>
#include <QAction>
#include <QPalette>
 
#include "mktool.h"
#include "dlg_Config.h"
32,7 → 33,7
#include "dlg_Motortest.h"
#include "dlg_Preferences.h"
#include "../global.h"
#include "../ToolBox.h"
#include "../Classes/ToolBox.h"
 
#include <stdlib.h>
 
56,34 → 57,82
setWindowTitle(QA_NAME + " v" + QA_VERSION);
 
// Tab mit Debug-Elementen verbergen
tab_Main->removeTab(5);
tab_Main->removeTab(6);
 
// Tab mit Wegpunkte-Elementen verbergen
tab_Main->removeTab(5);
 
// Settings-Tab hinzufügen.
f_Settings = new wdg_Settings( this );
tab_Main->insertTab ( 2, f_Settings, "FC-Settings");
f_Settings->set_Config(Settings);
tab_Main->insertTab ( 2, f_Settings, ac_View2->icon(), "FC-Settings");
tab_Main->widget(2)->setObjectName("Tab_2");
 
// Develop - Nicht gebrauchte sachen abschalten.
box_Flugdaten->hide();
box_System->hide();
pb_SettingsReset->hide();
pb_Flash->hide();
rb_NC->hide();
 
// Zusätzliche Widgets in die Toolbar.
toolBar->addWidget(lb_Port);
toolBar->addWidget(le_Port);
toolBar->addSeparator();
tb_TTY->addWidget(lb_Port);
tb_TTY->addWidget(le_Port);
 
toolBar->addWidget(rb_SelFC);
toolBar->addWidget(rb_SelNC);
toolBar->addWidget(rb_SelMag);
tb_Hardware->addWidget(rb_SelFC);
tb_Hardware->addWidget(rb_SelNC);
tb_Hardware->addWidget(rb_SelMag);
 
tb_Allgemein->setVisible(Settings->GUI.ToolViews[0]);
tb_Werkzeuge->setVisible(Settings->GUI.ToolViews[1]);
tb_Debug->setVisible(Settings->GUI.ToolViews[2]);
tb_TTY->setVisible(Settings->GUI.ToolViews[3]);
tb_Hardware->setVisible(Settings->GUI.ToolViews[4]);
 
lb_Status->setText(tr("Hallo bei QMK-Groundstation...!!!"));
 
QPalette newPalette;
 
newPalette.setColor(QPalette::Base, Qt::darkBlue);
newPalette.setColor(QPalette::Foreground, QColor(Qt::darkBlue).dark(120));
newPalette.setColor(QPalette::Text, Qt::white);
 
Compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel);
Compass->setScaleTicks(0, 0, 3);
Compass->setScale(36, 5, 0);
 
// Compass->setNeedle(new QwtCompassMagnetNeedle(QwtCompassMagnetNeedle::ThinStyle));
Compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, true, Qt::red, QColor(Qt::gray).light(130)));
Compass->setPalette(newPalette);
Compass->setMaximumSize(QSize(MeterSize, MeterSize));
Compass->setMinimumSize(QSize(MeterSize, MeterSize));
 
QPalette newPalette1;
 
newPalette1.setColor(QPalette::Base, Qt::darkBlue);
newPalette1.setColor(QPalette::Foreground, QColor(255,128,0).dark(120));
newPalette1.setColor(QPalette::Text, Qt::white);
 
Attitude = new AttitudeIndicator(this);
Attitude->setMaximumSize(QSize(MeterSize, MeterSize));
Attitude->setMinimumSize(QSize(MeterSize, MeterSize));
Attitude->setPalette(newPalette1);
 
verticalLayout->addWidget(Attitude);
 
qwt_Rate->setRange(-10.0, 10.0, 0.1, 0);
 
newPalette1.setColor(QPalette::Foreground, QColor(Qt::darkBlue).dark(120));
 
SpeedMeter = new cSpeedMeter(this);
SpeedMeter->setMaximumSize(QSize(MeterSize, MeterSize));
SpeedMeter->setMinimumSize(QSize(MeterSize, MeterSize));
SpeedMeter->setPalette(newPalette1);
SpeedMeter->setRange(0.0, 5.0);
SpeedMeter->setScale(1, 2, 0.5);
SpeedMeter->setProperty("END", 5);
 
LayOut_Speed->addWidget(SpeedMeter);
 
#ifdef _EEEPC_
toolBar->hide();
lb_Status->hide();
#endif
 
102,6 → 151,7
}
 
// Kopie der Tabs anlegen
// for (int b = 0; b < 7; b++)
for (int b = 0; b < 6; b++)
{
TabWidgets[b] = tab_Main->widget(b);
108,6 → 158,7
}
 
// Ausgeblendete Tabs ausblenden
// for (int c = 0; c < 7; c++)
for (int c = 0; c < 6; c++)
{
if (Settings->GUI.TabViews[c] == false)
130,6 → 181,7
ac_View3->setChecked(Settings->GUI.TabViews[3]);
ac_View4->setChecked(Settings->GUI.TabViews[4]);
ac_View5->setChecked(Settings->GUI.TabViews[5]);
// ac_View6->setChecked(Settings->GUI.TabViews[6]);
 
le_Port->setText(Settings->TTY.Port);
 
149,11 → 201,18
// QFile-Instanz (Log-Datei)
CSVFile = new QFile("");
 
// LCD-Dialog
f_LCD = new dlg_LCD(this);
 
// Senden erlauben (Warum auch immer)
AllowSend = true;
 
Server = new cServer();
 
MyServer = new cQMK_Server();
MyServer->setProperty("Connect", false);
 
 
if (Settings->Server.StartServer)
{
ac_StartServer->setChecked(true);
171,18 → 230,18
// Serielle Verbundung öffnen / schließen
connect(ac_ConnectTTY, SIGNAL(triggered()), this, SLOT(slot_OpenPort()));
 
// TCP-Connection verbinden / trennen
connect(ac_QMKServer, SIGNAL(triggered()), this, SLOT(slot_QMKS_Connect()));
 
// Buttons Settings lesen / schreiben
connect(f_Settings->pb_Read, SIGNAL(clicked()), this, SLOT(slot_GetFCSettings()));
connect(f_Settings->pb_Write, SIGNAL(clicked()), this, SLOT(slot_SetFCSettings()));
 
// LCD auf / ab
connect(pb_LCDup, SIGNAL(clicked()), this, SLOT(slot_LCD_UP()));
connect(pb_LCDdown, SIGNAL(clicked()), this, SLOT(slot_LCD_DOWN()));
 
// Actions
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_LCD, SIGNAL(triggered()), this, SLOT(slot_ac_LCD()));
connect(ac_FastDebug, SIGNAL(triggered()), this, SLOT(slot_ac_FastDebug()));
connect(ac_NoDebug, SIGNAL(triggered()), this, SLOT(slot_ac_NoDebug()));
connect(ac_FastNavi, SIGNAL(triggered()), this, SLOT(slot_ac_FastNavi()));
201,6 → 260,7
connect(ac_View3, SIGNAL(triggered()), this, SLOT(slot_ac_View()));
connect(ac_View4, SIGNAL(triggered()), this, SLOT(slot_ac_View()));
connect(ac_View5, SIGNAL(triggered()), this, SLOT(slot_ac_View()));
connect(ac_View6, SIGNAL(triggered()), this, SLOT(slot_ac_View()));
 
connect(ac_SelNC, SIGNAL(triggered()), this, SLOT(slot_ac_Hardware()));
connect(ac_SelFC, SIGNAL(triggered()), this, SLOT(slot_ac_Hardware()));
295,6 → 355,7
 
void MKTool::slot_Test()
{
/*
sRxData RX;
 
RX.String = IN->text();
301,6 → 362,7
RX.Input = IN->text().toLatin1().data();
 
new_RXData(RX);
*/
}
 
void MKTool::slot_ac_Hardware()
313,7 → 375,6
}
 
slot_rb_Hardware();
// qDebug("Select AC Hardware");
}
 
void MKTool::slot_rb_Hardware()
328,7 → 389,7
TX_Data[4] = 0x00;
TX_Data[5] = '\r';
send_Data('#', ADDRESS_NC, TX_Data, 6, false);
usleep(Sleep);
ToolBox::Wait(SLEEP);
}
 
if (rb_SelFC->isChecked())
356,7 → 417,7
TX_Data[5] = '\r';
send_Data('#', ADDRESS_NC, TX_Data, 6, false);
}
usleep(Sleep);
ToolBox::Wait(SLEEP);
 
// qDebug("Select RB Hardware");
send_Data('v', ADDRESS_ALL, TX_Data, 0, true);
389,8 → 450,13
send_Data('p', ADDRESS_FC, TX_Data, 0, false);
break;
case 2 :
if (cb_LCD->isChecked())
if (f_LCD->cb_LCD->isChecked())
{
if (!f_LCD->isVisible())
{
Ticker->setInterval(2000);
TickerEvent[2] = false;
}
TX_Data[0] = LCD_Page;
TX_Data[1] = 0;
send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
413,7 → 479,74
}
}
 
void MKTool::slot_QMKS_Connect()
{
if (ac_QMKServer->isChecked())
{
lb_Status->setText(tr("Verbinde zum QMK-Datenserver."));
 
MyServer->Connect("nimari.de", 16441, Settings->Server.QMKS_Login, Settings->Server.QMKS_Password);
connect(MyServer, SIGNAL(sig_Connected()), this, SLOT(slot_QMKS_Connected()));
connect(MyServer, SIGNAL(sig_Disconnected(int)), this, SLOT(slot_QMKS_Disconnected(int)));
 
}
else
{
if ((MyServer->property("Connect")) == true)
{
disconnect(MyServer, SIGNAL(sig_Disconnected(int)), 0, 0);
lb_Status->setText(tr("Trenne vom QMK-Datenserver."));
 
MyServer->Disconnect();
MyServer->setProperty("Connect", false);
ac_QMKServer->setText("QMK-Server Verbinden");
}
}
}
 
void MKTool::slot_QMKS_Connected()
{
MyServer->setProperty("Connect", true);
ac_QMKServer->setText("QMK-Server Trennnen");
lb_Status->setText(tr("Verbunden mit QMK-Datenserver."));
}
 
void MKTool::slot_QMKS_Disconnected(int Error)
{
MyServer->setProperty("Connect", false);
ac_QMKServer->setText("QMK-Server Verbinden");
ac_QMKServer->setChecked(false);
 
disconnect(MyServer, SIGNAL(sig_Disconnected(int)), 0, 0);
 
switch (Error)
{
case 1 :
{
lb_Status->setText(tr("Verbindung vom Server beendet."));
QMessageBox::warning(this, QA_NAME,"QMK-Datenserver: Verbindung wurde vom Server beendet.", QMessageBox::Ok);
}
break;
case 2 :
{
lb_Status->setText(tr("Server nicht gefunden."));
QMessageBox::warning(this, QA_NAME,"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,"QMK-Datenserver: Loginname oder Password falsch.", QMessageBox::Ok);
}
break;
default :
{
lb_Status->setText(tr("Getrennt vom QMK-Datenserver."));
}
break;
}
}
 
// Slots der Actions (Menüpunkte, Buttons)
//////////////////////////////////////////
void MKTool::slot_ac_Motortest()
430,6 → 563,26
slot_Motortest(0,0,0,0);
}
 
void MKTool::slot_ac_LCD()
{
if (!f_LCD->isVisible())
{
f_LCD = new dlg_LCD(this);
 
// LCD auf / ab
connect(f_LCD->pb_LCDup, SIGNAL(clicked()), this, SLOT(slot_LCD_UP()));
connect(f_LCD->pb_LCDdown, SIGNAL(clicked()), this, SLOT(slot_LCD_DOWN()));
 
f_LCD->show();
TX_Data[0] = 0;
TX_Data[1] = 0;
send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
 
Ticker->setInterval(500);
TickerEvent[2] = true;
}
}
 
void MKTool::slot_Motortest(int Motor1, int Motor2, int Motor3, int Motor4)
{
TX_Data[0] = Motor1;
503,7 → 656,7
 
void MKTool::slot_ac_View()
{
int Aktive;
int Aktive = -1;
 
QAction *Action = (QAction*)sender();
 
519,6 → 672,8
Aktive = 4;
if (Action->objectName() == QString("ac_View5"))
Aktive = 5;
// if (Action->objectName() == QString("ac_View6"))
// Aktive = 6;
 
QString TabName = QString("Tab_%1").arg(Aktive);
 
531,13 → 686,10
tab_Main->removeTab(a);
}
}
 
// Action->setChecked(false);
}
else
{
// Action->setChecked(true);
tab_Main->insertTab(Aktive, TabWidgets[Aktive], Action->text());
tab_Main->insertTab(Aktive, TabWidgets[Aktive], Action->icon(), Action->text());
}
}
 
654,6 → 806,7
}
}
 
 
// Daten-Plotter
/////////////////
void MKTool::update_Plot()
812,7 → 965,7
Ticker->setInterval(2000);
TickerEvent[1] = false;
}
 
/*
if ((tab_Main->currentWidget()->objectName() == QString("Tab_4")))
{
TX_Data[0] = 0;
827,6 → 980,7
Ticker->setInterval(2000);
TickerEvent[2] = false;
}
*/
}
}
 
840,6 → 994,7
 
TX_Data[1] = 0;
send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
 
}
 
void MKTool::slot_LCD_DOWN() // DONE 0.71g
851,6 → 1006,9
 
TX_Data[1] = 0;
send_Data('l', ADDRESS_ALL, TX_Data, 1, true);
 
aa--;
 
}
 
// Settings aus MK lesen / in MK schreiben
882,7 → 1040,14
Settings->GUI.TabViews.setBit(3, ac_View3->isChecked());
Settings->GUI.TabViews.setBit(4, ac_View4->isChecked());
Settings->GUI.TabViews.setBit(5, ac_View5->isChecked());
Settings->GUI.TabViews.setBit(6, ac_View6->isChecked());
 
Settings->GUI.ToolViews.setBit(0, tb_Allgemein->isVisibleTo(this));
Settings->GUI.ToolViews.setBit(1, tb_Werkzeuge->isVisibleTo(this));
Settings->GUI.ToolViews.setBit(2, tb_Debug->isVisibleTo(this));
Settings->GUI.ToolViews.setBit(3, tb_TTY->isVisibleTo(this));
Settings->GUI.ToolViews.setBit(4, tb_Hardware->isVisibleTo(this));
 
Settings->GUI.Term_Info = cb_ShowMSG->isChecked();
Settings->GUI.Term_Data = cb_ShowData->isChecked();
Settings->GUI.Term_Always = cb_ShowAlways->isChecked();
942,9 → 1107,9
CSVFile->open(QIODevice::Append | QIODevice::Text);
}
 
pb_Record->setIcon(ToolBox::Icon(6));
pb_Record->setText("CSV Stop");
ac_RecordCSV->setIcon(ToolBox::Icon(6));
// pb_Record->setIcon(ToolBox::Icon(6));
// pb_Record->setText("CSV Stop");
// ac_RecordCSV->setIcon(ToolBox::Icon(6));
ac_RecordCSV->setText("CSV Stop");
lb_Status->setText(tr("CVS-Record gestartet."));
}
951,9 → 1116,9
else
{
CSVFile->close();
pb_Record->setIcon(ToolBox::Icon(7));
pb_Record->setText("CSV Aufzeichnen");
ac_RecordCSV->setIcon(ToolBox::Icon(7));
// pb_Record->setIcon(ToolBox::Icon(7));
// pb_Record->setText("CSV Aufzeichnen");
// ac_RecordCSV->setIcon(ToolBox::Icon(7));
ac_RecordCSV->setText("CSV Aufzeichnen");
lb_Status->setText(tr("CVS-Record gestopt."));
}
1012,6 → 1177,26
le_A_29->setText(QString("%1").arg(AnalogData[29]));
le_A_30->setText(QString("%1").arg(AnalogData[30]));
le_A_31->setText(QString("%1").arg(AnalogData[31]));
 
if ((Mode.ID == ADDRESS_FC) && (FCSettings[P_GYRO_ACC_FAKTOR] > 0))
{
bar_UBAT->setValue(AnalogData[9]);
bar_RX->setValue(AnalogData[10]);
 
Compass->setValue(AnalogData[8]);
 
int Roll = (AnalogData[1] * FCSettings[P_GYRO_ACC_FAKTOR]) / 1024;
int Nick = (AnalogData[0] * FCSettings[P_GYRO_ACC_FAKTOR]) / 1024;
 
if (Roll > 128)
Roll = Roll - 255;
 
if (Nick > 128)
Nick = Nick - 255;
 
Attitude->setAngle(Roll);
Attitude->setGradient(double(double(Nick) / 100.0));
}
}
 
 
1020,10 → 1205,55
Navi.Current.Longitude = ToolBox::Data2Long(RX.Decode, 0, true);
Navi.Current.Latitude = ToolBox::Data2Long(RX.Decode, 4, true);
Navi.Current.Altitude = ToolBox::Data2Long(RX.Decode, 8, true);
Navi.Target.Longitude = ToolBox::Data2Long(RX.Decode, 10, true);
Navi.Target.Latitude = ToolBox::Data2Long(RX.Decode, 14, true);
Navi.Target.Altitude = ToolBox::Data2Long(RX.Decode, 18, true);
Navi.Target.Longitude = ToolBox::Data2Long(RX.Decode, 16, true);
Navi.Target.Latitude = ToolBox::Data2Long(RX.Decode, 20, true);
Navi.Target.Altitude = ToolBox::Data2Long(RX.Decode, 24, true);
 
le_CDistance->setText(QString("%1 cm").arg(ToolBox::Data2Int(RX.Decode, 52)));
le_CWPA->setText(QString("%1").arg(RX.Decode[56]));
le_CWPT->setText(QString("%1").arg(RX.Decode[57]));
le_CSats->setText(QString("%1").arg(RX.Decode[58]));
 
qwt_Rate->setValue(double(ToolBox::Data2Int(RX.Decode, 61, true)));
 
le_CTime->setText(QString("%1 sec.").arg(ToolBox::Data2Int(RX.Decode, 63)));
 
bar_UBAT->setValue(RX.Decode[65]);
 
double Speed = double((ToolBox::Data2Int(RX.Decode, 66)) / 10.0);
 
if ((Speed > 4.5) && SpeedMeter->property("END") == 5)
{
SpeedMeter->setRange(0.0, 10.0);
SpeedMeter->setScale(1, 2, 1);
SpeedMeter->setProperty("END", 10);
}
 
if ((Speed > 9) && SpeedMeter->property("END") == 10)
{
SpeedMeter->setRange(0.0, 20.0);
SpeedMeter->setScale(1, 2, 2);
SpeedMeter->setProperty("END", 20);
}
 
SpeedMeter->setValue(Speed);
 
Compass->setValue(ToolBox::Data2Int(RX.Decode, 70)); //(68)
 
bar_RX->setValue(RX.Decode[74]);
 
int Nick = RX.Decode[72];
int Roll = RX.Decode[73];
 
if (Roll > 128)
Roll = Roll - 255;
 
if (Nick > 128)
Nick = Nick - 255;
 
Attitude->setAngle(Roll);
Attitude->setGradient(double(double(Nick) / 100.0));
 
sNaviString NaviString;
 
NaviString.Longitude = ToolBox::get_Float(Navi.Current.Longitude,10000000);
1032,6 → 1262,11
 
Server->store_NaviString(NaviString);
 
if ((MyServer->property("Connect")) == true)
{
MyServer->NewPosition(NaviString);
}
 
/*
qDebug(NaviString.Longitude.toLatin1().data());
qDebug(NaviString.Latitude.toLatin1().data());
1128,14 → 1363,11
int LCD[150];
memcpy(LCD,RX.Decode, sizeof(RX.Decode));
 
f_LCD->show_Data(LCD);
 
LCD_Page = RX.Decode[0];
LCD_MAX_Page = RX.Decode[1];
 
le_LCD0->setText(ToolBox::Data2QString(LCD,2,22));
le_LCD1->setText(ToolBox::Data2QString(LCD,22,42));
le_LCD2->setText(ToolBox::Data2QString(LCD,42,62));
le_LCD3->setText(ToolBox::Data2QString(LCD,62,82));
 
TickerEvent[0] = false;
}
break;
1339,16 → 1571,16
void MKTool::slot_OpenPort()
{
if (serialPort->isOpen())
{
{
TX_Data[0] = Settings->Data.Debug_Off / 10;
send_Data('d', ADDRESS_ALL, TX_Data, 1, false);
usleep(Sleep);
ToolBox::Wait(SLEEP);
 
if (Mode.ID == ADDRESS_NC)
{
TX_Data[0] = Settings->Data.Navi_Off / 10;
send_Data('o', ADDRESS_NC, TX_Data, 1, false);
usleep(Sleep);
ToolBox::Wait(SLEEP);
}
 
if (Mode.ID == ADDRESS_NC)
1358,13 → 1590,13
TX_Data[2] = 0;
TX_Data[3] = 0;
send_Data('t', ADDRESS_FC, TX_Data, 4, false);
usleep(Sleep);
ToolBox::Wait(SLEEP);
}
serialPort->close();
pb_Open->setText("Verbinden");
ac_ConnectTTY->setText("Verbinden");
pb_Open->setIcon(ToolBox::Icon(9));
ac_ConnectTTY->setIcon(ToolBox::Icon(9));
// pb_Open->setText("Seriell Verbinden");
ac_ConnectTTY->setText("Seriell Verbinden");
// pb_Open->setIcon(ToolBox::Icon(9));
// ac_ConnectTTY->setIcon(ToolBox::Icon(9));
 
le_Port->setEnabled(true);
 
1392,10 → 1624,10
 
send_Data('v', ADDRESS_ALL, TX_Data, 0, true);
 
pb_Open->setText("Trennen");
ac_ConnectTTY->setText("Trennen");
pb_Open->setIcon(ToolBox::Icon(8));
ac_ConnectTTY->setIcon(ToolBox::Icon(8));
// pb_Open->setText("Seriell Trennen");
ac_ConnectTTY->setText("Seriell Trennen");
// pb_Open->setIcon(ToolBox::Icon(8));
// ac_ConnectTTY->setIcon(ToolBox::Icon(8));
 
Ticker->start(2000);
}