17,6 → 17,8 |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
***************************************************************************/ |
|
// TODO: Wiederholungssenden wieder einbauen |
|
#include <QtGui> |
|
#include <QLineEdit> |
60,7 → 62,7 |
tab_Main->removeTab(6); |
|
// Tab mit Wegpunkte-Elementen verbergen |
tab_Main->removeTab(5); |
// tab_Main->removeTab(5); |
|
// Settings-Tab hinzufügen. |
f_Settings = new wdg_Settings( this ); |
99,7 → 101,6 |
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)); |
196,8 → 197,10 |
Ticker = new QTimer(this); |
|
// Seriell-Port |
serialPort = new ManageSerialPort; |
// serialPort = new ManageSerialPort; |
|
Conn = new cConnection(); |
|
// neuer Logger |
logger = new Logger(Settings, &Mode); |
|
205,7 → 208,7 |
f_LCD = new dlg_LCD(this); |
|
// Senden erlauben (Warum auch immer) |
AllowSend = true; |
// AllowSend = true; |
|
Server = new cServer(); |
|
222,10 → 225,11 |
|
void MKTool::init_Connections() |
{ |
connect(Dec, SIGNAL(clicked()), this, SLOT(slot_Test())); |
connect(Dec, SIGNAL(clicked()), this, SLOT(slot_Test())); |
|
// Seriel-Port Empfang |
connect(serialPort, SIGNAL(newDataReceived(const QByteArray &)), this, SLOT(slot_newDataReceived(const QByteArray &))); |
// Daten Senden / Empfangen |
connect(Conn, SIGNAL(newData(sRxData)), this, SLOT(slot_newData(sRxData))); |
connect(Conn, SIGNAL(showTerminal(int, QString)), this, SLOT(slot_showTerminal(int, QString))); |
|
// Serielle Verbundung öffnen / schließen |
connect(ac_ConnectTTY, SIGNAL(triggered()), this, SLOT(slot_OpenPort())); |
274,6 → 278,9 |
connect(pb_Update, SIGNAL(clicked()), this, SLOT(slot_pb_Update())); |
connect(pb_HexFile, SIGNAL(clicked()), this, SLOT(slot_pb_HexFile())); |
|
// Wegpunkt-Befehl |
connect(pb_FlyTo, SIGNAL(clicked()), this, SLOT(slot_pb_SendWaypoint())); |
|
// CVS-Record starten / stoppen |
connect(ac_RecordCSV, SIGNAL(triggered()), this, SLOT(slot_RecordLog())); |
|
344,7 → 351,7 |
{ |
Plot[a] = new QwtPlotCurve(Settings->Analog1.Label[a]); |
Plot[a]->setPen(QPen(QColor(Def_Colors[a]))); |
Plot[a]->setRenderHint(QwtPlotItem::RenderAntialiased); |
// Plot[a]->setRenderHint(QwtPlotItem::RenderAntialiased); |
|
if (Settings->Analog1.PlotView[a]) |
Plot[a]->attach(qwtPlot); |
352,19 → 359,91 |
qwtPlot->replot(); |
} |
|
|
void MKTool::slot_Test() |
{ |
/* |
sRxData RX; |
} |
|
RX.String = IN->text(); |
RX.Input = IN->text().toLatin1().data(); |
void MKTool::parse_TargetKML() |
{ |
QString Tmp = te_KML->toPlainText().simplified(); |
QStringList List; |
|
new_RXData(RX); |
*/ |
if ((Tmp.contains("<kml xmlns=\"http://earth.google.com/kml/2.2\">")) && (Tmp.contains("<coordinates>"))) |
{ |
List = Tmp.split("<coordinates>"); |
List = List[1].split(","); |
|
le_TarLong->setText(ToolBox::get_Float((List[0].toDouble() * 10000000), 10000000)); |
le_TarLat->setText(ToolBox::get_Float((List[1].toDouble() * 10000000), 10000000)); |
} |
} |
|
void MKTool::slot_pb_SendWaypoint() |
{ |
if ((Navi.Current.Longitude == 0) && (Navi.Current.Latitude == 0)) |
{ |
QMessageBox msgB; |
QString msg; |
msgB.setText("Fehler: Es konnten keine GPS-Daten vom Mikrokopter empfangen werden"); |
msgB.exec(); |
return; |
} |
//erstelle einen Wegpunkt, den die NaviCtrl auswerten kann |
|
Waypoint_t desired_pos; |
bool ok_lat, ok_lon; |
|
//eingegebene Daten holen |
double desired_long, desired_lat; |
|
desired_long = le_TarLong->text().toDouble(&ok_lon); |
desired_lat = le_TarLat->text().toDouble(&ok_lat); |
|
if (ok_lon && desired_long < 100) |
desired_long *= 10000000+0.5; |
|
if (ok_lat && desired_lat < 100) |
desired_lat *= 10000000+0.5; |
|
//fülle Wegpunkt-Daten |
desired_pos.Position.Altitude = 0; |
desired_pos.Position.Longitude = int32_t(desired_long); |
desired_pos.Position.Latitude = int32_t(desired_lat); |
desired_pos.Position.Status = NEWDATA; |
desired_pos.Heading = -1; |
desired_pos.ToleranceRadius = 1; |
desired_pos.HoldTime = 60; |
desired_pos.Event_Flag = 0; |
desired_pos.reserve[0] = 0; // reserve |
desired_pos.reserve[1] = 0; // reserve |
desired_pos.reserve[2] = 0; // reserve |
desired_pos.reserve[3] = 0; // reserve |
|
//...und sende ihn an die NaviCtrl |
int max_radius = 10000; |
if (ok_lat && ok_lon && |
abs(Navi.Current.Longitude - desired_pos.Position.Longitude) < max_radius && |
abs(Navi.Current.Latitude - desired_pos.Position.Latitude) < max_radius) |
{ |
Conn->send_Cmd('s', ADDRESS_NC, (char *)&desired_pos, sizeof(desired_pos), false); |
} |
else |
{ |
QMessageBox msgB; |
QString msg; |
msg += "Bitte die Eingabe ueberpruefen!\n"; |
msg += "Die Werte muessen sich in der Naehe der aktuellen Koordinaten befinden\n"; |
msg += "(Lon: "; |
msg += ToolBox::get_Float(Navi.Current.Longitude,10000000); |
msg += ", "; |
msg += "Lat: "; |
msg += ToolBox::get_Float(Navi.Current.Latitude,10000000); |
msg += ")"; |
msgB.setText(msg); |
msgB.exec(); |
} |
} |
|
void MKTool::slot_ac_Hardware() |
{ |
QAction *Action = (QAction*)sender(); |
388,7 → 467,7 |
TX_Data[3] = 0xAA; |
TX_Data[4] = 0x00; |
TX_Data[5] = '\r'; |
send_Data('#', ADDRESS_NC, TX_Data, 6, false); |
Conn->send_Cmd('#', ADDRESS_NC, TX_Data, 6, false); |
ToolBox::Wait(SLEEP); |
} |
|
396,7 → 475,7 |
{ |
lb_Status->setText(tr("Schalte um auf FlightCtrl.")); |
TX_Data[0] = 0; |
send_Data('u', ADDRESS_NC, TX_Data, 1, false); |
Conn->send_Cmd('u', ADDRESS_NC, TX_Data, 1, false); |
} |
else |
if (rb_SelMag->isChecked()) |
403,7 → 482,7 |
{ |
lb_Status->setText(tr("Schalte um auf MK3MAG.")); |
TX_Data[0] = 1; |
send_Data('u', ADDRESS_NC, TX_Data, 1, false); |
Conn->send_Cmd('u', ADDRESS_NC, TX_Data, 1, false); |
} |
else |
if (rb_SelNC->isChecked()) |
415,12 → 494,12 |
TX_Data[3] = 0xAA; |
TX_Data[4] = 0x00; |
TX_Data[5] = '\r'; |
send_Data('#', ADDRESS_NC, TX_Data, 6, false); |
Conn->send_Cmd('#', ADDRESS_NC, TX_Data, 6, false); |
} |
ToolBox::Wait(SLEEP); |
|
// qDebug("Select RB Hardware"); |
send_Data('v', ADDRESS_ALL, TX_Data, 0, true); |
Conn->send_Cmd('v', ADDRESS_ALL, TX_Data, 0, true); |
} |
|
// Ticker-Event |
432,6 → 511,17 |
else |
TickerDiv = true; |
|
if (cb_ClipBoard->isChecked()) |
{ |
QString s_OLD = te_KML->toPlainText(); |
te_KML->clear(); |
te_KML->paste(); |
if (s_OLD != te_KML->toPlainText()) |
{ |
parse_TargetKML(); |
} |
} |
|
for (int a = 0; a < MaxTickerEvents; a++) |
{ |
if (TickerEvent[a] == true) |
442,12 → 532,12 |
if (TickerDiv) |
{ |
QByteArray Temp(LastSend.toUtf8()); |
serialPort->sendData(Temp); |
// serialPort->sendData(Temp); |
} |
break; |
case 1 : |
TX_Data[0] = 0; |
send_Data('p', ADDRESS_FC, TX_Data, 0, false); |
Conn->send_Cmd('p', ADDRESS_FC, TX_Data, 0, false); |
break; |
case 2 : |
if (f_LCD->cb_LCD->isChecked()) |
459,7 → 549,7 |
} |
TX_Data[0] = LCD_Page; |
TX_Data[1] = 0; |
send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
} |
break; |
case 3 : |
466,12 → 556,12 |
if (ac_FastDebug->isChecked()) |
{ |
TX_Data[0] = Settings->Data.Debug_Fast / 10; |
send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
} |
else |
{ |
TX_Data[0] = Settings->Data.Debug_Slow / 10; |
send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
} |
break; |
} |
576,7 → 666,7 |
f_LCD->show(); |
TX_Data[0] = 0; |
TX_Data[1] = 0; |
send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
|
Ticker->setInterval(500); |
TickerEvent[2] = true; |
589,7 → 679,7 |
TX_Data[1] = Motor2; |
TX_Data[2] = Motor3; |
TX_Data[3] = Motor4; |
send_Data('t', ADDRESS_FC, TX_Data, 4, false); |
Conn->send_Cmd('t', ADDRESS_FC, TX_Data, 4, false); |
} |
|
void MKTool::slot_ac_Config() |
737,7 → 827,7 |
lb_Status->setText(tr("Fordere langsame NaviDaten an.")); |
TX_Data[0] = Settings->Data.Navi_Slow / 10; |
} |
send_Data('o', ADDRESS_NC, TX_Data, 1, false); |
Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
} |
} |
|
761,7 → 851,7 |
TX_Data[0] = Settings->Data.Navi_Slow / 10; |
} |
} |
send_Data('o', ADDRESS_NC, TX_Data, 1, false); |
Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
} |
|
void MKTool::slot_ac_FastDebug() // DONE 0.71g |
778,7 → 868,7 |
lb_Status->setText(tr("Fordere langsame DebugDaten an.")); |
TX_Data[0] = Settings->Data.Debug_Slow / 10; |
} |
send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
} |
} |
|
807,7 → 897,7 |
TX_Data[0] = Settings->Data.Debug_Slow / 10; |
} |
} |
send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
} |
|
void MKTool::slot_ac_About() |
819,7 → 909,7 |
{ |
lb_Status->setText(tr("Analoglabels auslesen.")); |
TX_Data[0] = 0; |
send_Data('a', ADDRESS_ALL, TX_Data, 1, true); |
Conn->send_Cmd('a', ADDRESS_ALL, TX_Data, 1, true); |
} |
|
void MKTool::slot_ac_StartServer() |
925,7 → 1015,7 |
|
Update = new QProcess(); |
|
if (serialPort->isOpen()) |
if (Conn->isOpen()) |
{ |
slot_OpenPort(); |
} |
985,7 → 1075,7 |
if ((tab_Main->currentWidget()->objectName() == QString("Tab_2")) && (f_Settings->tab_Par->currentIndex() == 1)) |
{ |
TX_Data[0] = 0; |
send_Data('p', ADDRESS_FC, TX_Data, 0, true); |
Conn->send_Cmd('p', ADDRESS_FC, TX_Data, 0, true); |
|
Ticker->setInterval(500); |
TickerEvent[1] = true; |
1023,8 → 1113,7 |
TX_Data[0] = LCD_Page + 1; |
|
TX_Data[1] = 0; |
send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
|
Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
} |
|
void MKTool::slot_LCD_DOWN() // DONE 0.71g |
1035,10 → 1124,7 |
TX_Data[0] = LCD_Page - 1; |
|
TX_Data[1] = 0; |
send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
|
aa--; |
|
Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
} |
|
// Settings aus MK lesen / in MK schreiben |
1047,7 → 1133,7 |
lb_Status->setText(tr("Lese FlightCtrl-Settings aus.")); |
TX_Data[0] = f_Settings->sb_Set->value(); |
TX_Data[1] = 0; |
send_Data('q', ADDRESS_FC, TX_Data, 1); |
Conn->send_Cmd('q', ADDRESS_FC, TX_Data, 1); |
} |
|
void MKTool::slot_SetFCSettings() // DONE 0.71g |
1056,7 → 1142,7 |
|
lb_Status->setText(tr("Schreibe FlightCtrl-Settings.")); |
|
send_Data('s', ADDRESS_FC, TX_Data2, MaxParameter + 2, false); |
Conn->send_Cmd('s', ADDRESS_FC, TX_Data2, MaxParameter + 2, false); |
} |
|
|
1230,12 → 1316,6 |
{ |
MyServer->NewPosition(NaviString); |
} |
|
/* |
qDebug(NaviString.Longitude.toLatin1().data()); |
qDebug(NaviString.Latitude.toLatin1().data()); |
qDebug(NaviString.Altitude.toLatin1().data()); |
*/ |
} |
|
// Seriel-Port Bereich, Befehle senden und Daten empfangen |
1242,8 → 1322,9 |
////////////////////////////////////////////////////////// |
|
// Neues Datenpacket empfangen -> Verarbeiten |
void MKTool::new_RXData(sRxData RX) // DONE 0.71g |
void MKTool::slot_newData(sRxData RX) // DONE 0.71g |
{ |
slot_showTerminal(1, RX.String); |
|
if (LastSend.length() > 2) |
{ |
1349,7 → 1430,7 |
} |
Position ++; |
TX_Data[0] = Position; |
send_Data('a', ADDRESS_ALL, TX_Data, 1, true); |
Conn->send_Cmd('a', ADDRESS_ALL, TX_Data, 1, true); |
} |
if (Position == 31) |
{ |
1413,7 → 1494,7 |
TX_Data[0] = Settings->Data.Debug_Slow / 10; |
} |
|
send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
|
// Wenn MK3MAG dann andauernd Daten neu anfragen. |
if (Mode.ID == ADDRESS_MK3MAG) |
1441,7 → 1522,7 |
TX_Data[0] = Settings->Data.Navi_Slow / 10; |
} |
|
send_Data('o', ADDRESS_NC, TX_Data, 1, false); |
Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
} |
|
|
1452,7 → 1533,11 |
{ |
TX_Data[0] = 0xff; |
TX_Data[1] = 0; |
send_Data('q', ADDRESS_FC, TX_Data, 1); |
|
// DEP: Raus wenn Resend implementiert. |
ToolBox::Wait(SLEEP); |
Conn->send_Cmd('q', ADDRESS_FC, TX_Data, 1, true); |
qDebug("FC - Get Settings"); |
} |
} |
// Wenn nicht Lesen und Schreiben der Settings deaktivieren. |
1482,52 → 1567,37 |
} |
} |
|
// Neue Daten an der Schnittstelle |
void MKTool::slot_newDataReceived(const QByteArray &dataReceived) // DONE 0.71g |
void MKTool::slot_showTerminal(int Typ, QString Text) |
{ |
const char *RXt; |
RXt = dataReceived.data(); |
int a = 0; |
|
while (RXt[a] != '\0') |
switch(Typ) |
{ |
if (RXt[a] == '\r') |
case 1 : |
{ |
while ((RxData.String.length() > 1) && (RxData.String.at(1) == '#')) |
if ((cb_ShowData->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
{ |
RxData.String.remove(0,1); |
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
te_RX->insertHtml("<span style=\"color:#00008b;\">" + Text + "<br /></span>"); |
} |
|
if (ToolBox::check_CRC(RxData.String)) |
} |
break; |
case 2 : |
{ |
if ((cb_ShowMSG->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
{ |
RxData.Input = RxData.String.toLatin1().data(); |
new_RXData(RxData); |
|
if ((cb_ShowData->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
{ |
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
// te_RX->insertPlainText(" > " + RxData.String + '\r'); |
te_RX->insertHtml("<span style=\"color:#00008b;\">" + RxData.String + "<br /></span>"); |
} |
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
te_RX->insertHtml("<span style=\"color:#008b00;\">" + Text + "</span>"); |
} |
else |
{ |
if ((cb_ShowMSG->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
{ |
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
// te_RX->insertPlainText(" > " + RxData.String + '\r'); |
te_RX->insertHtml("<span style=\"color:#008b00;\">" + RxData.String + "<br /></span>"); |
} |
} |
RxData.String = QString(""); |
} |
else |
break; |
case 3 : |
{ |
if (cb_ShowSend->isChecked()) |
{ |
RxData.String = RxData.String + QString(RXt[a]); |
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
te_RX->insertHtml("<span style='color:#8b0000;'>" + Text + "<br /></span>"); |
} |
} |
a++; |
break; |
} |
} |
|
1534,16 → 1604,16 |
// Seriellen Port öffnen |
void MKTool::slot_OpenPort() |
{ |
if (serialPort->isOpen()) |
{ |
if (Conn->isOpen()) |
{ |
TX_Data[0] = Settings->Data.Debug_Off / 10; |
send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
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); |
Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
ToolBox::Wait(SLEEP); |
} |
|
1553,15 → 1623,13 |
TX_Data[1] = 0; |
TX_Data[2] = 0; |
TX_Data[3] = 0; |
send_Data('t', ADDRESS_FC, TX_Data, 4, false); |
Conn->send_Cmd('t', ADDRESS_FC, TX_Data, 4, false); |
ToolBox::Wait(SLEEP); |
} |
serialPort->close(); |
// pb_Open->setText("Seriell Verbinden"); |
|
Conn->Close(); |
|
ac_ConnectTTY->setText("Seriell Verbinden"); |
// pb_Open->setIcon(ToolBox::Icon(9)); |
// ac_ConnectTTY->setIcon(ToolBox::Icon(9)); |
|
le_Port->setEnabled(true); |
|
Ticker->stop(); |
1568,94 → 1636,26 |
} |
else |
{ |
serialPort->setPort(le_Port->text()); //Port |
|
serialPort->setBaudRate(BAUD57600); //BaudRate |
serialPort->setDataBits(DATA_8); //DataBits |
serialPort->setParity(PAR_NONE); //Parity |
serialPort->setStopBits(STOP_1); //StopBits |
serialPort->setFlowControl(FLOW_OFF); //FlowControl |
|
serialPort->setTimeout(0, 10); |
serialPort->enableSending(); |
serialPort->enableReceiving(); |
|
serialPort->open(); |
if (serialPort->isOpen()) |
if (Conn->Open(le_Port->text())) |
{ |
ac_ConnectTTY->setText("Seriell Trennen"); |
le_Port->setEnabled(false); |
serialPort->receiveData(); |
|
send_Data('v', ADDRESS_ALL, TX_Data, 0, true); |
Conn->send_Cmd('v', ADDRESS_ALL, TX_Data, 0, true); |
|
// 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); |
} |
} |
} |
|
// Daten senden |
void MKTool::send_Data(char CMD, int Address, char Data[150],unsigned int Length, bool Resend) // DONE 0.71g |
{ |
if (serialPort->isOpen() && AllowSend) |
{ |
QByteArray Temp; |
QString TX_Data; |
|
if (CMD != '#') |
{ |
// qDebug("Send data.."); |
TX_Data = ToolBox::Encode64(Data, Length); |
|
TX_Data = QString("#") + (QString('a' + Address)) + QString(CMD) + TX_Data; |
|
// qDebug(TX_Data.toLatin1().data()); |
|
TX_Data = ToolBox::add_CRC(TX_Data) + '\r'; |
|
// qDebug(TX_Data.toLatin1().data()); |
|
if (Resend) |
{ |
LastSend = TX_Data; |
TickerEvent[0] = true; |
} |
Temp = QByteArray(TX_Data.toUtf8()); |
} |
else |
{ |
// qDebug("Send Raw.."); |
for (unsigned int a = 0; a < Length; a++) |
{ |
Temp[a] = Data[a]; |
// qDebug(QString("%1").arg(Temp[a]).toLatin1().data()); |
} |
} |
|
serialPort->sendData(Temp); |
|
if (cb_ShowSend->isChecked() && (CMD != '#')) |
{ |
te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
te_RX->insertHtml("<span style='color:#8b0000;'>" + TX_Data + "<br /></span>"); |
} |
} |
} |
|
|
// Programm beenden |
/////////////////// |
|
MKTool::~MKTool() |
{ |
// qDebug(" Programm Ende ..!! "); |
if (serialPort->isOpen()) |
if (Conn->isOpen()) |
{ |
serialPort->close(); |
Conn->Close(); |
} |
|
set_Preferences(); |