Rev 246 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 246 | Rev 250 | ||
---|---|---|---|
Line 15... | Line 15... | ||
15 | * along with this program; if not, write to the * |
15 | * along with this program; if not, write to the * |
16 | * Free Software Foundation, Inc., * |
16 | * Free Software Foundation, Inc., * |
17 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
17 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
18 | ***************************************************************************/ |
18 | ***************************************************************************/ |
Line -... | Line 19... | ||
- | 19 | ||
- | 20 | // TODO: Wiederholungssenden wieder einbauen |
|
19 | 21 | ||
Line 20... | Line 22... | ||
20 | #include <QtGui> |
22 | #include <QtGui> |
21 | 23 | ||
22 | #include <QLineEdit> |
24 | #include <QLineEdit> |
Line 58... | Line 60... | ||
58 | 60 | ||
59 | // Tab mit Debug-Elementen verbergen |
61 | // Tab mit Debug-Elementen verbergen |
Line 60... | Line 62... | ||
60 | tab_Main->removeTab(6); |
62 | tab_Main->removeTab(6); |
61 | 63 | ||
Line 62... | Line 64... | ||
62 | // Tab mit Wegpunkte-Elementen verbergen |
64 | // Tab mit Wegpunkte-Elementen verbergen |
63 | tab_Main->removeTab(5); |
65 | // tab_Main->removeTab(5); |
64 | 66 | ||
65 | // Settings-Tab hinzufügen. |
67 | // Settings-Tab hinzufügen. |
Line 97... | Line 99... | ||
97 | 99 | ||
98 | Compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel); |
100 | Compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel); |
99 | Compass->setScaleTicks(0, 0, 3); |
101 | Compass->setScaleTicks(0, 0, 3); |
Line 100... | Line -... | ||
100 | Compass->setScale(36, 5, 0); |
- | |
101 | 102 | Compass->setScale(36, 5, 0); |
|
102 | // Compass->setNeedle(new QwtCompassMagnetNeedle(QwtCompassMagnetNeedle::ThinStyle)); |
103 | |
103 | Compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, true, Qt::red, QColor(Qt::gray).light(130))); |
104 | Compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, true, Qt::red, QColor(Qt::gray).light(130))); |
104 | Compass->setPalette(newPalette); |
105 | Compass->setPalette(newPalette); |
Line 194... | Line 195... | ||
194 | { |
195 | { |
195 | // QTimer-Instanzen |
196 | // QTimer-Instanzen |
196 | Ticker = new QTimer(this); |
197 | Ticker = new QTimer(this); |
Line 197... | Line 198... | ||
197 | 198 | ||
198 | // Seriell-Port |
199 | // Seriell-Port |
- | 200 | // serialPort = new ManageSerialPort; |
|
- | 201 | ||
Line 199... | Line 202... | ||
199 | serialPort = new ManageSerialPort; |
202 | Conn = new cConnection(); |
200 | 203 | ||
Line 201... | Line 204... | ||
201 | // neuer Logger |
204 | // neuer Logger |
202 | logger = new Logger(Settings, &Mode); |
205 | logger = new Logger(Settings, &Mode); |
Line 203... | Line 206... | ||
203 | 206 | ||
204 | // LCD-Dialog |
207 | // LCD-Dialog |
Line 205... | Line 208... | ||
205 | f_LCD = new dlg_LCD(this); |
208 | f_LCD = new dlg_LCD(this); |
Line 206... | Line 209... | ||
206 | 209 | ||
207 | // Senden erlauben (Warum auch immer) |
210 | // Senden erlauben (Warum auch immer) |
Line 220... | Line 223... | ||
220 | } |
223 | } |
221 | } |
224 | } |
Line 222... | Line 225... | ||
222 | 225 | ||
223 | void MKTool::init_Connections() |
226 | void MKTool::init_Connections() |
224 | { |
227 | { |
Line 225... | Line 228... | ||
225 | connect(Dec, SIGNAL(clicked()), this, SLOT(slot_Test())); |
228 | connect(Dec, SIGNAL(clicked()), this, SLOT(slot_Test())); |
226 | 229 | ||
- | 230 | // Daten Senden / Empfangen |
|
Line 227... | Line 231... | ||
227 | // Seriel-Port Empfang |
231 | connect(Conn, SIGNAL(newData(sRxData)), this, SLOT(slot_newData(sRxData))); |
228 | connect(serialPort, SIGNAL(newDataReceived(const QByteArray &)), this, SLOT(slot_newDataReceived(const QByteArray &))); |
232 | connect(Conn, SIGNAL(showTerminal(int, QString)), this, SLOT(slot_showTerminal(int, QString))); |
Line 229... | Line 233... | ||
229 | 233 | ||
Line 272... | Line 276... | ||
272 | 276 | ||
273 | // firmeware Updateen / flashen |
277 | // firmeware Updateen / flashen |
274 | connect(pb_Update, SIGNAL(clicked()), this, SLOT(slot_pb_Update())); |
278 | connect(pb_Update, SIGNAL(clicked()), this, SLOT(slot_pb_Update())); |
Line -... | Line 279... | ||
- | 279 | connect(pb_HexFile, SIGNAL(clicked()), this, SLOT(slot_pb_HexFile())); |
|
- | 280 | ||
- | 281 | // Wegpunkt-Befehl |
|
275 | connect(pb_HexFile, SIGNAL(clicked()), this, SLOT(slot_pb_HexFile())); |
282 | connect(pb_FlyTo, SIGNAL(clicked()), this, SLOT(slot_pb_SendWaypoint())); |
276 | 283 | ||
Line 277... | Line 284... | ||
277 | // CVS-Record starten / stoppen |
284 | // CVS-Record starten / stoppen |
278 | connect(ac_RecordCSV, SIGNAL(triggered()), this, SLOT(slot_RecordLog())); |
285 | connect(ac_RecordCSV, SIGNAL(triggered()), this, SLOT(slot_RecordLog())); |
Line 342... | Line 349... | ||
342 | 349 | ||
343 | for (int a = 0; a < MaxAnalog; a++) |
350 | for (int a = 0; a < MaxAnalog; a++) |
344 | { |
351 | { |
345 | Plot[a] = new QwtPlotCurve(Settings->Analog1.Label[a]); |
352 | Plot[a] = new QwtPlotCurve(Settings->Analog1.Label[a]); |
346 | Plot[a]->setPen(QPen(QColor(Def_Colors[a]))); |
353 | Plot[a]->setPen(QPen(QColor(Def_Colors[a]))); |
Line 347... | Line 354... | ||
347 | Plot[a]->setRenderHint(QwtPlotItem::RenderAntialiased); |
354 | // Plot[a]->setRenderHint(QwtPlotItem::RenderAntialiased); |
348 | 355 | ||
349 | if (Settings->Analog1.PlotView[a]) |
356 | if (Settings->Analog1.PlotView[a]) |
350 | Plot[a]->attach(qwtPlot); |
357 | Plot[a]->attach(qwtPlot); |
351 | } |
358 | } |
Line 352... | Line -... | ||
352 | qwtPlot->replot(); |
- | |
353 | } |
359 | qwtPlot->replot(); |
354 | 360 | } |
|
355 | 361 | ||
356 | void MKTool::slot_Test() |
- | |
Line 357... | Line 362... | ||
357 | { |
362 | void MKTool::slot_Test() |
- | 363 | { |
|
358 | /* |
364 | } |
- | 365 | ||
Line -... | Line 366... | ||
- | 366 | void MKTool::parse_TargetKML() |
|
- | 367 | { |
|
- | 368 | QString Tmp = te_KML->toPlainText().simplified(); |
|
- | 369 | QStringList List; |
|
- | 370 | ||
- | 371 | if ((Tmp.contains("<kml xmlns=\"http://earth.google.com/kml/2.2\">")) && (Tmp.contains("<coordinates>"))) |
|
- | 372 | { |
|
- | 373 | List = Tmp.split("<coordinates>"); |
|
- | 374 | List = List[1].split(","); |
|
- | 375 | ||
- | 376 | le_TarLong->setText(ToolBox::get_Float((List[0].toDouble() * 10000000), 10000000)); |
|
- | 377 | le_TarLat->setText(ToolBox::get_Float((List[1].toDouble() * 10000000), 10000000)); |
|
- | 378 | } |
|
- | 379 | } |
|
- | 380 | ||
- | 381 | void MKTool::slot_pb_SendWaypoint() |
|
- | 382 | { |
|
359 | sRxData RX; |
383 | if ((Navi.Current.Longitude == 0) && (Navi.Current.Latitude == 0)) |
- | 384 | { |
|
- | 385 | QMessageBox msgB; |
|
- | 386 | QString msg; |
|
- | 387 | msgB.setText("Fehler: Es konnten keine GPS-Daten vom Mikrokopter empfangen werden"); |
|
- | 388 | msgB.exec(); |
|
- | 389 | return; |
|
- | 390 | } |
|
- | 391 | //erstelle einen Wegpunkt, den die NaviCtrl auswerten kann |
|
- | 392 | ||
- | 393 | Waypoint_t desired_pos; |
|
- | 394 | bool ok_lat, ok_lon; |
|
- | 395 | ||
- | 396 | //eingegebene Daten holen |
|
- | 397 | double desired_long, desired_lat; |
|
- | 398 | ||
- | 399 | desired_long = le_TarLong->text().toDouble(&ok_lon); |
|
- | 400 | desired_lat = le_TarLat->text().toDouble(&ok_lat); |
|
- | 401 | ||
- | 402 | if (ok_lon && desired_long < 100) |
|
- | 403 | desired_long *= 10000000+0.5; |
|
- | 404 | ||
- | 405 | if (ok_lat && desired_lat < 100) |
|
- | 406 | desired_lat *= 10000000+0.5; |
|
- | 407 | ||
- | 408 | //fülle Wegpunkt-Daten |
|
- | 409 | desired_pos.Position.Altitude = 0; |
|
- | 410 | desired_pos.Position.Longitude = int32_t(desired_long); |
|
- | 411 | desired_pos.Position.Latitude = int32_t(desired_lat); |
|
- | 412 | desired_pos.Position.Status = NEWDATA; |
|
- | 413 | desired_pos.Heading = -1; |
|
- | 414 | desired_pos.ToleranceRadius = 1; |
|
- | 415 | desired_pos.HoldTime = 60; |
|
360 | 416 | desired_pos.Event_Flag = 0; |
|
- | 417 | desired_pos.reserve[0] = 0; // reserve |
|
- | 418 | desired_pos.reserve[1] = 0; // reserve |
|
- | 419 | desired_pos.reserve[2] = 0; // reserve |
|
- | 420 | desired_pos.reserve[3] = 0; // reserve |
|
- | 421 | ||
- | 422 | //...und sende ihn an die NaviCtrl |
|
- | 423 | int max_radius = 10000; |
|
- | 424 | if (ok_lat && ok_lon && |
|
- | 425 | abs(Navi.Current.Longitude - desired_pos.Position.Longitude) < max_radius && |
|
- | 426 | abs(Navi.Current.Latitude - desired_pos.Position.Latitude) < max_radius) |
|
- | 427 | { |
|
- | 428 | Conn->send_Cmd('s', ADDRESS_NC, (char *)&desired_pos, sizeof(desired_pos), false); |
|
- | 429 | } |
|
- | 430 | else |
|
- | 431 | { |
|
- | 432 | QMessageBox msgB; |
|
- | 433 | QString msg; |
|
- | 434 | msg += "Bitte die Eingabe ueberpruefen!\n"; |
|
- | 435 | msg += "Die Werte muessen sich in der Naehe der aktuellen Koordinaten befinden\n"; |
|
- | 436 | msg += "(Lon: "; |
|
- | 437 | msg += ToolBox::get_Float(Navi.Current.Longitude,10000000); |
|
- | 438 | msg += ", "; |
|
- | 439 | msg += "Lat: "; |
|
361 | RX.String = IN->text(); |
440 | msg += ToolBox::get_Float(Navi.Current.Latitude,10000000); |
Line 362... | Line 441... | ||
362 | RX.Input = IN->text().toLatin1().data(); |
441 | msg += ")"; |
363 | 442 | msgB.setText(msg); |
|
364 | new_RXData(RX); |
443 | msgB.exec(); |
Line 386... | Line 465... | ||
386 | TX_Data[1] = 0x1B; |
465 | TX_Data[1] = 0x1B; |
387 | TX_Data[2] = 0x55; |
466 | TX_Data[2] = 0x55; |
388 | TX_Data[3] = 0xAA; |
467 | TX_Data[3] = 0xAA; |
389 | TX_Data[4] = 0x00; |
468 | TX_Data[4] = 0x00; |
390 | TX_Data[5] = '\r'; |
469 | TX_Data[5] = '\r'; |
391 | send_Data('#', ADDRESS_NC, TX_Data, 6, false); |
470 | Conn->send_Cmd('#', ADDRESS_NC, TX_Data, 6, false); |
392 | ToolBox::Wait(SLEEP); |
471 | ToolBox::Wait(SLEEP); |
393 | } |
472 | } |
Line 394... | Line 473... | ||
394 | 473 | ||
395 | if (rb_SelFC->isChecked()) |
474 | if (rb_SelFC->isChecked()) |
396 | { |
475 | { |
397 | lb_Status->setText(tr("Schalte um auf FlightCtrl.")); |
476 | lb_Status->setText(tr("Schalte um auf FlightCtrl.")); |
398 | TX_Data[0] = 0; |
477 | TX_Data[0] = 0; |
399 | send_Data('u', ADDRESS_NC, TX_Data, 1, false); |
478 | Conn->send_Cmd('u', ADDRESS_NC, TX_Data, 1, false); |
400 | } |
479 | } |
401 | else |
480 | else |
402 | if (rb_SelMag->isChecked()) |
481 | if (rb_SelMag->isChecked()) |
403 | { |
482 | { |
404 | lb_Status->setText(tr("Schalte um auf MK3MAG.")); |
483 | lb_Status->setText(tr("Schalte um auf MK3MAG.")); |
405 | TX_Data[0] = 1; |
484 | TX_Data[0] = 1; |
406 | send_Data('u', ADDRESS_NC, TX_Data, 1, false); |
485 | Conn->send_Cmd('u', ADDRESS_NC, TX_Data, 1, false); |
407 | } |
486 | } |
408 | else |
487 | else |
409 | if (rb_SelNC->isChecked()) |
488 | if (rb_SelNC->isChecked()) |
410 | { |
489 | { |
Line 413... | Line 492... | ||
413 | TX_Data[1] = 0x1B; |
492 | TX_Data[1] = 0x1B; |
414 | TX_Data[2] = 0x55; |
493 | TX_Data[2] = 0x55; |
415 | TX_Data[3] = 0xAA; |
494 | TX_Data[3] = 0xAA; |
416 | TX_Data[4] = 0x00; |
495 | TX_Data[4] = 0x00; |
417 | TX_Data[5] = '\r'; |
496 | TX_Data[5] = '\r'; |
418 | send_Data('#', ADDRESS_NC, TX_Data, 6, false); |
497 | Conn->send_Cmd('#', ADDRESS_NC, TX_Data, 6, false); |
419 | } |
498 | } |
420 | ToolBox::Wait(SLEEP); |
499 | ToolBox::Wait(SLEEP); |
Line 421... | Line 500... | ||
421 | 500 | ||
422 | // qDebug("Select RB Hardware"); |
501 | // qDebug("Select RB Hardware"); |
423 | send_Data('v', ADDRESS_ALL, TX_Data, 0, true); |
502 | Conn->send_Cmd('v', ADDRESS_ALL, TX_Data, 0, true); |
Line 424... | Line 503... | ||
424 | } |
503 | } |
425 | 504 | ||
426 | // Ticker-Event |
505 | // Ticker-Event |
Line 430... | Line 509... | ||
430 | if (TickerDiv) |
509 | if (TickerDiv) |
431 | TickerDiv = false; |
510 | TickerDiv = false; |
432 | else |
511 | else |
433 | TickerDiv = true; |
512 | TickerDiv = true; |
Line -... | Line 513... | ||
- | 513 | ||
- | 514 | if (cb_ClipBoard->isChecked()) |
|
- | 515 | { |
|
- | 516 | QString s_OLD = te_KML->toPlainText(); |
|
- | 517 | te_KML->clear(); |
|
- | 518 | te_KML->paste(); |
|
- | 519 | if (s_OLD != te_KML->toPlainText()) |
|
- | 520 | { |
|
- | 521 | parse_TargetKML(); |
|
- | 522 | } |
|
- | 523 | } |
|
434 | 524 | ||
435 | for (int a = 0; a < MaxTickerEvents; a++) |
525 | for (int a = 0; a < MaxTickerEvents; a++) |
436 | { |
526 | { |
437 | if (TickerEvent[a] == true) |
527 | if (TickerEvent[a] == true) |
438 | { |
528 | { |
439 | switch(a) |
529 | switch(a) |
440 | { |
530 | { |
441 | case 0 : |
531 | case 0 : |
442 | if (TickerDiv) |
532 | if (TickerDiv) |
443 | { |
533 | { |
444 | QByteArray Temp(LastSend.toUtf8()); |
534 | QByteArray Temp(LastSend.toUtf8()); |
445 | serialPort->sendData(Temp); |
535 | // serialPort->sendData(Temp); |
446 | } |
536 | } |
447 | break; |
537 | break; |
448 | case 1 : |
538 | case 1 : |
449 | TX_Data[0] = 0; |
539 | TX_Data[0] = 0; |
450 | send_Data('p', ADDRESS_FC, TX_Data, 0, false); |
540 | Conn->send_Cmd('p', ADDRESS_FC, TX_Data, 0, false); |
451 | break; |
541 | break; |
452 | case 2 : |
542 | case 2 : |
453 | if (f_LCD->cb_LCD->isChecked()) |
543 | if (f_LCD->cb_LCD->isChecked()) |
454 | { |
544 | { |
Line 457... | Line 547... | ||
457 | Ticker->setInterval(2000); |
547 | Ticker->setInterval(2000); |
458 | TickerEvent[2] = false; |
548 | TickerEvent[2] = false; |
459 | } |
549 | } |
460 | TX_Data[0] = LCD_Page; |
550 | TX_Data[0] = LCD_Page; |
461 | TX_Data[1] = 0; |
551 | TX_Data[1] = 0; |
462 | send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
552 | Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
463 | } |
553 | } |
464 | break; |
554 | break; |
465 | case 3 : |
555 | case 3 : |
466 | if (ac_FastDebug->isChecked()) |
556 | if (ac_FastDebug->isChecked()) |
467 | { |
557 | { |
468 | TX_Data[0] = Settings->Data.Debug_Fast / 10; |
558 | TX_Data[0] = Settings->Data.Debug_Fast / 10; |
469 | send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
559 | Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
470 | } |
560 | } |
471 | else |
561 | else |
472 | { |
562 | { |
473 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
563 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
474 | send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
564 | Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
475 | } |
565 | } |
476 | break; |
566 | break; |
477 | } |
567 | } |
478 | } |
568 | } |
479 | } |
569 | } |
Line 574... | Line 664... | ||
574 | connect(f_LCD->pb_LCDdown, SIGNAL(clicked()), this, SLOT(slot_LCD_DOWN())); |
664 | connect(f_LCD->pb_LCDdown, SIGNAL(clicked()), this, SLOT(slot_LCD_DOWN())); |
Line 575... | Line 665... | ||
575 | 665 | ||
576 | f_LCD->show(); |
666 | f_LCD->show(); |
577 | TX_Data[0] = 0; |
667 | TX_Data[0] = 0; |
578 | TX_Data[1] = 0; |
668 | TX_Data[1] = 0; |
Line 579... | Line 669... | ||
579 | send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
669 | Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
580 | 670 | ||
581 | Ticker->setInterval(500); |
671 | Ticker->setInterval(500); |
582 | TickerEvent[2] = true; |
672 | TickerEvent[2] = true; |
Line 587... | Line 677... | ||
587 | { |
677 | { |
588 | TX_Data[0] = Motor1; |
678 | TX_Data[0] = Motor1; |
589 | TX_Data[1] = Motor2; |
679 | TX_Data[1] = Motor2; |
590 | TX_Data[2] = Motor3; |
680 | TX_Data[2] = Motor3; |
591 | TX_Data[3] = Motor4; |
681 | TX_Data[3] = Motor4; |
592 | send_Data('t', ADDRESS_FC, TX_Data, 4, false); |
682 | Conn->send_Cmd('t', ADDRESS_FC, TX_Data, 4, false); |
593 | } |
683 | } |
Line 594... | Line 684... | ||
594 | 684 | ||
595 | void MKTool::slot_ac_Config() |
685 | void MKTool::slot_ac_Config() |
596 | { |
686 | { |
Line 735... | Line 825... | ||
735 | else |
825 | else |
736 | { |
826 | { |
737 | lb_Status->setText(tr("Fordere langsame NaviDaten an.")); |
827 | lb_Status->setText(tr("Fordere langsame NaviDaten an.")); |
738 | TX_Data[0] = Settings->Data.Navi_Slow / 10; |
828 | TX_Data[0] = Settings->Data.Navi_Slow / 10; |
739 | } |
829 | } |
740 | send_Data('o', ADDRESS_NC, TX_Data, 1, false); |
830 | Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
741 | } |
831 | } |
742 | } |
832 | } |
Line 743... | Line 833... | ||
743 | 833 | ||
744 | void MKTool::slot_ac_NoNavi() // DONE NC 0.12i |
834 | void MKTool::slot_ac_NoNavi() // DONE NC 0.12i |
Line 759... | Line 849... | ||
759 | { |
849 | { |
760 | lb_Status->setText(tr("Fordere langsame NaviDaten an.")); |
850 | lb_Status->setText(tr("Fordere langsame NaviDaten an.")); |
761 | TX_Data[0] = Settings->Data.Navi_Slow / 10; |
851 | TX_Data[0] = Settings->Data.Navi_Slow / 10; |
762 | } |
852 | } |
763 | } |
853 | } |
764 | send_Data('o', ADDRESS_NC, TX_Data, 1, false); |
854 | Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
765 | } |
855 | } |
Line 766... | Line 856... | ||
766 | 856 | ||
767 | void MKTool::slot_ac_FastDebug() // DONE 0.71g |
857 | void MKTool::slot_ac_FastDebug() // DONE 0.71g |
768 | { |
858 | { |
Line 776... | Line 866... | ||
776 | else |
866 | else |
777 | { |
867 | { |
778 | lb_Status->setText(tr("Fordere langsame DebugDaten an.")); |
868 | lb_Status->setText(tr("Fordere langsame DebugDaten an.")); |
779 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
869 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
780 | } |
870 | } |
781 | send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
871 | Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
782 | } |
872 | } |
783 | } |
873 | } |
Line 784... | Line 874... | ||
784 | 874 | ||
785 | void MKTool::slot_ac_NoDebug() // DONE 0.71g |
875 | void MKTool::slot_ac_NoDebug() // DONE 0.71g |
Line 805... | Line 895... | ||
805 | { |
895 | { |
806 | lb_Status->setText(tr("Fordere langsame DebugDaten an.")); |
896 | lb_Status->setText(tr("Fordere langsame DebugDaten an.")); |
807 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
897 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
808 | } |
898 | } |
809 | } |
899 | } |
810 | send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
900 | Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
811 | } |
901 | } |
Line 812... | Line 902... | ||
812 | 902 | ||
813 | void MKTool::slot_ac_About() |
903 | void MKTool::slot_ac_About() |
814 | { |
904 | { |
Line 817... | Line 907... | ||
817 | 907 | ||
818 | void MKTool::slot_ac_GetLabels() // DONE 0.71g |
908 | void MKTool::slot_ac_GetLabels() // DONE 0.71g |
819 | { |
909 | { |
820 | lb_Status->setText(tr("Analoglabels auslesen.")); |
910 | lb_Status->setText(tr("Analoglabels auslesen.")); |
821 | TX_Data[0] = 0; |
911 | TX_Data[0] = 0; |
822 | send_Data('a', ADDRESS_ALL, TX_Data, 1, true); |
912 | Conn->send_Cmd('a', ADDRESS_ALL, TX_Data, 1, true); |
Line 823... | Line 913... | ||
823 | } |
913 | } |
824 | 914 | ||
825 | void MKTool::slot_ac_StartServer() |
915 | void MKTool::slot_ac_StartServer() |
Line 923... | Line 1013... | ||
923 | 1013 | ||
Line 924... | Line 1014... | ||
924 | QStringList Argumente; |
1014 | QStringList Argumente; |
Line 925... | Line 1015... | ||
925 | 1015 | ||
926 | Update = new QProcess(); |
1016 | Update = new QProcess(); |
927 | 1017 | ||
928 | if (serialPort->isOpen()) |
1018 | if (Conn->isOpen()) |
Line 929... | Line 1019... | ||
929 | { |
1019 | { |
Line 983... | Line 1073... | ||
983 | if (tab_Main->count() != 0) |
1073 | if (tab_Main->count() != 0) |
984 | { |
1074 | { |
985 | if ((tab_Main->currentWidget()->objectName() == QString("Tab_2")) && (f_Settings->tab_Par->currentIndex() == 1)) |
1075 | if ((tab_Main->currentWidget()->objectName() == QString("Tab_2")) && (f_Settings->tab_Par->currentIndex() == 1)) |
986 | { |
1076 | { |
987 | TX_Data[0] = 0; |
1077 | TX_Data[0] = 0; |
988 | send_Data('p', ADDRESS_FC, TX_Data, 0, true); |
1078 | Conn->send_Cmd('p', ADDRESS_FC, TX_Data, 0, true); |
Line 989... | Line 1079... | ||
989 | 1079 | ||
990 | Ticker->setInterval(500); |
1080 | Ticker->setInterval(500); |
991 | TickerEvent[1] = true; |
1081 | TickerEvent[1] = true; |
992 | } |
1082 | } |
Line 1021... | Line 1111... | ||
1021 | TX_Data[0] = 0; |
1111 | TX_Data[0] = 0; |
1022 | else |
1112 | else |
1023 | TX_Data[0] = LCD_Page + 1; |
1113 | TX_Data[0] = LCD_Page + 1; |
Line 1024... | Line 1114... | ||
1024 | 1114 | ||
1025 | TX_Data[1] = 0; |
1115 | TX_Data[1] = 0; |
1026 | send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
- | |
1027 | 1116 | Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
|
Line 1028... | Line 1117... | ||
1028 | } |
1117 | } |
1029 | 1118 | ||
1030 | void MKTool::slot_LCD_DOWN() // DONE 0.71g |
1119 | void MKTool::slot_LCD_DOWN() // DONE 0.71g |
1031 | { |
1120 | { |
1032 | if (LCD_Page == 0) |
1121 | if (LCD_Page == 0) |
1033 | TX_Data[0] = LCD_MAX_Page; |
1122 | TX_Data[0] = LCD_MAX_Page; |
Line 1034... | Line 1123... | ||
1034 | else |
1123 | else |
1035 | TX_Data[0] = LCD_Page - 1; |
1124 | TX_Data[0] = LCD_Page - 1; |
1036 | - | ||
1037 | TX_Data[1] = 0; |
- | |
1038 | send_Data('l', ADDRESS_ALL, TX_Data, 1, true); |
- | |
1039 | 1125 | ||
Line 1040... | Line 1126... | ||
1040 | aa--; |
1126 | TX_Data[1] = 0; |
1041 | 1127 | Conn->send_Cmd('l', ADDRESS_ALL, TX_Data, 1, true); |
|
1042 | } |
1128 | } |
1043 | 1129 | ||
1044 | // Settings aus MK lesen / in MK schreiben |
1130 | // Settings aus MK lesen / in MK schreiben |
1045 | void MKTool::slot_GetFCSettings() // DONE 0.71g |
1131 | void MKTool::slot_GetFCSettings() // DONE 0.71g |
1046 | { |
1132 | { |
1047 | lb_Status->setText(tr("Lese FlightCtrl-Settings aus.")); |
1133 | lb_Status->setText(tr("Lese FlightCtrl-Settings aus.")); |
Line 1048... | Line 1134... | ||
1048 | TX_Data[0] = f_Settings->sb_Set->value(); |
1134 | TX_Data[0] = f_Settings->sb_Set->value(); |
1049 | TX_Data[1] = 0; |
1135 | TX_Data[1] = 0; |
1050 | send_Data('q', ADDRESS_FC, TX_Data, 1); |
1136 | Conn->send_Cmd('q', ADDRESS_FC, TX_Data, 1); |
Line 1051... | Line 1137... | ||
1051 | } |
1137 | } |
Line 1052... | Line 1138... | ||
1052 | 1138 | ||
1053 | void MKTool::slot_SetFCSettings() // DONE 0.71g |
1139 | void MKTool::slot_SetFCSettings() // DONE 0.71g |
Line 1054... | Line 1140... | ||
1054 | { |
1140 | { |
1055 | char *TX_Data2 = f_Settings->GetFCSettings(); |
1141 | char *TX_Data2 = f_Settings->GetFCSettings(); |
Line 1228... | Line 1314... | ||
1228 | 1314 | ||
1229 | if ((MyServer->property("Connect")) == true) |
1315 | if ((MyServer->property("Connect")) == true) |
1230 | { |
1316 | { |
1231 | MyServer->NewPosition(NaviString); |
1317 | MyServer->NewPosition(NaviString); |
1232 | } |
- | |
1233 | - | ||
1234 | /* |
- | |
1235 | qDebug(NaviString.Longitude.toLatin1().data()); |
- | |
1236 | qDebug(NaviString.Latitude.toLatin1().data()); |
- | |
1237 | qDebug(NaviString.Altitude.toLatin1().data()); |
- | |
1238 | */ |
1318 | } |
Line 1239... | Line 1319... | ||
1239 | } |
1319 | } |
1240 | 1320 | ||
Line 1241... | Line 1321... | ||
1241 | // Seriel-Port Bereich, Befehle senden und Daten empfangen |
1321 | // Seriel-Port Bereich, Befehle senden und Daten empfangen |
1242 | ////////////////////////////////////////////////////////// |
1322 | ////////////////////////////////////////////////////////// |
1243 | 1323 | ||
- | 1324 | // Neues Datenpacket empfangen -> Verarbeiten |
|
Line 1244... | Line 1325... | ||
1244 | // Neues Datenpacket empfangen -> Verarbeiten |
1325 | void MKTool::slot_newData(sRxData RX) // DONE 0.71g |
1245 | void MKTool::new_RXData(sRxData RX) // DONE 0.71g |
1326 | { |
1246 | { |
1327 | slot_showTerminal(1, RX.String); |
Line 1347... | Line 1428... | ||
1347 | { |
1428 | { |
1348 | Settings->Analog1.Label[Position] = "A-" + QString("%1").arg(Position); |
1429 | Settings->Analog1.Label[Position] = "A-" + QString("%1").arg(Position); |
1349 | } |
1430 | } |
1350 | Position ++; |
1431 | Position ++; |
1351 | TX_Data[0] = Position; |
1432 | TX_Data[0] = Position; |
1352 | send_Data('a', ADDRESS_ALL, TX_Data, 1, true); |
1433 | Conn->send_Cmd('a', ADDRESS_ALL, TX_Data, 1, true); |
1353 | } |
1434 | } |
1354 | if (Position == 31) |
1435 | if (Position == 31) |
1355 | { |
1436 | { |
1356 | for (int a = 0; a < MaxAnalog; a++) |
1437 | for (int a = 0; a < MaxAnalog; a++) |
1357 | { |
1438 | { |
Line 1411... | Line 1492... | ||
1411 | else |
1492 | else |
1412 | { |
1493 | { |
1413 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
1494 | TX_Data[0] = Settings->Data.Debug_Slow / 10; |
1414 | } |
1495 | } |
Line 1415... | Line 1496... | ||
1415 | 1496 | ||
Line 1416... | Line 1497... | ||
1416 | send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
1497 | Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
1417 | 1498 | ||
1418 | // Wenn MK3MAG dann andauernd Daten neu anfragen. |
1499 | // Wenn MK3MAG dann andauernd Daten neu anfragen. |
1419 | if (Mode.ID == ADDRESS_MK3MAG) |
1500 | if (Mode.ID == ADDRESS_MK3MAG) |
Line 1439... | Line 1520... | ||
1439 | else |
1520 | else |
1440 | { |
1521 | { |
1441 | TX_Data[0] = Settings->Data.Navi_Slow / 10; |
1522 | TX_Data[0] = Settings->Data.Navi_Slow / 10; |
1442 | } |
1523 | } |
Line 1443... | Line 1524... | ||
1443 | 1524 | ||
1444 | send_Data('o', ADDRESS_NC, TX_Data, 1, false); |
1525 | Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
Line 1445... | Line 1526... | ||
1445 | } |
1526 | } |
1446 | 1527 | ||
1447 | 1528 | ||
1448 | // Wenn FlightCtrl dann Settings abfragen. |
1529 | // Wenn FlightCtrl dann Settings abfragen. |
1449 | if (Mode.ID == ADDRESS_FC) |
1530 | if (Mode.ID == ADDRESS_FC) |
1450 | { |
1531 | { |
1451 | rb_SelFC->setChecked(true); |
1532 | rb_SelFC->setChecked(true); |
- | 1533 | { |
|
- | 1534 | TX_Data[0] = 0xff; |
|
- | 1535 | TX_Data[1] = 0; |
|
1452 | { |
1536 | |
- | 1537 | // DEP: Raus wenn Resend implementiert. |
|
1453 | TX_Data[0] = 0xff; |
1538 | ToolBox::Wait(SLEEP); |
1454 | TX_Data[1] = 0; |
1539 | Conn->send_Cmd('q', ADDRESS_FC, TX_Data, 1, true); |
1455 | send_Data('q', ADDRESS_FC, TX_Data, 1); |
1540 | qDebug("FC - Get Settings"); |
1456 | } |
1541 | } |
1457 | } |
1542 | } |
Line 1480... | Line 1565... | ||
1480 | break; |
1565 | break; |
1481 | } |
1566 | } |
1482 | } |
1567 | } |
1483 | } |
1568 | } |
Line 1484... | Line -... | ||
1484 | - | ||
1485 | // Neue Daten an der Schnittstelle |
1569 | |
1486 | void MKTool::slot_newDataReceived(const QByteArray &dataReceived) // DONE 0.71g |
1570 | void MKTool::slot_showTerminal(int Typ, QString Text) |
1487 | { |
- | |
1488 | const char *RXt; |
- | |
1489 | RXt = dataReceived.data(); |
1571 | { |
1490 | int a = 0; |
- | |
1491 | - | ||
1492 | while (RXt[a] != '\0') |
1572 | switch(Typ) |
1493 | { |
1573 | { |
1494 | if (RXt[a] == '\r') |
1574 | case 1 : |
1495 | { |
1575 | { |
1496 | while ((RxData.String.length() > 1) && (RxData.String.at(1) == '#')) |
1576 | if ((cb_ShowData->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
1497 | { |
- | |
1498 | RxData.String.remove(0,1); |
- | |
1499 | } |
- | |
1500 | - | ||
1501 | if (ToolBox::check_CRC(RxData.String)) |
- | |
1502 | { |
- | |
1503 | RxData.Input = RxData.String.toLatin1().data(); |
- | |
1504 | new_RXData(RxData); |
- | |
1505 | - | ||
1506 | if ((cb_ShowData->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
- | |
1507 | { |
1577 | { |
1508 | te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
- | |
1509 | // te_RX->insertPlainText(" > " + RxData.String + '\r'); |
1578 | te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
1510 | te_RX->insertHtml("<span style=\"color:#00008b;\">" + RxData.String + "<br /></span>"); |
- | |
1511 | } |
1579 | te_RX->insertHtml("<span style=\"color:#00008b;\">" + Text + "<br /></span>"); |
- | 1580 | } |
|
1512 | } |
1581 | } |
- | 1582 | break; |
|
- | 1583 | case 2 : |
|
- | 1584 | { |
|
1513 | else |
1585 | if ((cb_ShowMSG->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
1514 | { |
- | |
1515 | if ((cb_ShowMSG->isChecked()) && ((tab_Main->currentWidget()->objectName() == QString("Tab_3")) || (cb_ShowAlways->isChecked()))) |
- | |
1516 | { |
1586 | { |
1517 | te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
- | |
1518 | // te_RX->insertPlainText(" > " + RxData.String + '\r'); |
1587 | te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
1519 | te_RX->insertHtml("<span style=\"color:#008b00;\">" + RxData.String + "<br /></span>"); |
- | |
1520 | } |
1588 | te_RX->insertHtml("<span style=\"color:#008b00;\">" + Text + "</span>"); |
1521 | } |
- | |
1522 | RxData.String = QString(""); |
1589 | } |
1523 | } |
1590 | } |
- | 1591 | break; |
|
1524 | else |
1592 | case 3 : |
- | 1593 | { |
|
1525 | { |
1594 | if (cb_ShowSend->isChecked()) |
1526 | { |
1595 | { |
- | 1596 | te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
|
1527 | RxData.String = RxData.String + QString(RXt[a]); |
1597 | te_RX->insertHtml("<span style='color:#8b0000;'>" + Text + "<br /></span>"); |
1528 | } |
1598 | } |
1529 | } |
1599 | } |
1530 | a++; |
1600 | break; |
1531 | } |
1601 | } |
Line 1532... | Line 1602... | ||
1532 | } |
1602 | } |
1533 | 1603 | ||
1534 | // Seriellen Port öffnen |
1604 | // Seriellen Port öffnen |
1535 | void MKTool::slot_OpenPort() |
1605 | void MKTool::slot_OpenPort() |
1536 | { |
1606 | { |
1537 | if (serialPort->isOpen()) |
1607 | if (Conn->isOpen()) |
1538 | { |
1608 | { |
1539 | TX_Data[0] = Settings->Data.Debug_Off / 10; |
1609 | TX_Data[0] = Settings->Data.Debug_Off / 10; |
Line 1540... | Line 1610... | ||
1540 | send_Data('d', ADDRESS_ALL, TX_Data, 1, false); |
1610 | Conn->send_Cmd('d', ADDRESS_ALL, TX_Data, 1, false); |
1541 | ToolBox::Wait(SLEEP); |
1611 | ToolBox::Wait(SLEEP); |
1542 | 1612 | ||
1543 | if (Mode.ID == ADDRESS_NC) |
1613 | if (Mode.ID == ADDRESS_NC) |
1544 | { |
1614 | { |
1545 | TX_Data[0] = Settings->Data.Navi_Off / 10; |
1615 | TX_Data[0] = Settings->Data.Navi_Off / 10; |
Line 1546... | Line 1616... | ||
1546 | send_Data('o', ADDRESS_NC, TX_Data, 1, false); |
1616 | Conn->send_Cmd('o', ADDRESS_NC, TX_Data, 1, false); |
1547 | ToolBox::Wait(SLEEP); |
1617 | ToolBox::Wait(SLEEP); |
1548 | } |
1618 | } |
1549 | 1619 | ||
1550 | if (Mode.ID == ADDRESS_NC) |
1620 | if (Mode.ID == ADDRESS_NC) |
1551 | { |
1621 | { |
1552 | TX_Data[0] = 0; |
1622 | TX_Data[0] = 0; |
1553 | TX_Data[1] = 0; |
1623 | TX_Data[1] = 0; |
1554 | TX_Data[2] = 0; |
1624 | TX_Data[2] = 0; |
1555 | TX_Data[3] = 0; |
- | |
1556 | send_Data('t', ADDRESS_FC, TX_Data, 4, false); |
- | |
1557 | ToolBox::Wait(SLEEP); |
- | |
1558 | } |
- | |
1559 | serialPort->close(); |
- | |
Line -... | Line 1625... | ||
- | 1625 | TX_Data[3] = 0; |
|
- | 1626 | Conn->send_Cmd('t', ADDRESS_FC, TX_Data, 4, false); |
|
- | 1627 | ToolBox::Wait(SLEEP); |
|
1560 | // pb_Open->setText("Seriell Verbinden"); |
1628 | } |
Line 1561... | Line 1629... | ||
1561 | ac_ConnectTTY->setText("Seriell Verbinden"); |
1629 | |
1562 | // pb_Open->setIcon(ToolBox::Icon(9)); |
1630 | Conn->Close(); |
1563 | // ac_ConnectTTY->setIcon(ToolBox::Icon(9)); |
1631 | |
1564 | 1632 | ac_ConnectTTY->setText("Seriell Verbinden"); |
|
1565 | le_Port->setEnabled(true); |
1633 | le_Port->setEnabled(true); |
1566 | - | ||
1567 | Ticker->stop(); |
- | |
1568 | } |
- | |
1569 | else |
- | |
1570 | { |
- | |
1571 | serialPort->setPort(le_Port->text()); //Port |
- | |
1572 | - | ||
1573 | serialPort->setBaudRate(BAUD57600); //BaudRate |
- | |
1574 | serialPort->setDataBits(DATA_8); //DataBits |
- | |
1575 | serialPort->setParity(PAR_NONE); //Parity |
- | |
1576 | serialPort->setStopBits(STOP_1); //StopBits |
- | |
1577 | serialPort->setFlowControl(FLOW_OFF); //FlowControl |
- | |
1578 | - | ||
1579 | serialPort->setTimeout(0, 10); |
1634 | |
- | 1635 | Ticker->stop(); |
|
1580 | serialPort->enableSending(); |
1636 | } |
1581 | serialPort->enableReceiving(); |
- | |
Line 1582... | Line 1637... | ||
1582 | 1637 | else |
|
1583 | serialPort->open(); |
- | |
1584 | if (serialPort->isOpen()) |
- | |
1585 | { |
- | |
1586 | le_Port->setEnabled(false); |
- | |
1587 | serialPort->receiveData(); |
- | |
Line 1588... | Line 1638... | ||
1588 | 1638 | { |
|
1589 | send_Data('v', ADDRESS_ALL, TX_Data, 0, true); |
1639 | if (Conn->Open(le_Port->text())) |
1590 | 1640 | { |
|
1591 | // pb_Open->setText("Seriell Trennen"); |
1641 | ac_ConnectTTY->setText("Seriell Trennen"); |
Line 1592... | Line -... | ||
1592 | ac_ConnectTTY->setText("Seriell Trennen"); |
- | |
1593 | // pb_Open->setIcon(ToolBox::Icon(8)); |
- | |
1594 | // ac_ConnectTTY->setIcon(ToolBox::Icon(8)); |
- | |
1595 | - | ||
1596 | Ticker->start(2000); |
- | |
1597 | } |
- | |
1598 | } |
- | |
1599 | } |
- | |
1600 | - | ||
1601 | // Daten senden |
- | |
1602 | void MKTool::send_Data(char CMD, int Address, char Data[150],unsigned int Length, bool Resend) // DONE 0.71g |
- | |
1603 | { |
- | |
1604 | if (serialPort->isOpen() && AllowSend) |
- | |
1605 | { |
- | |
1606 | QByteArray Temp; |
- | |
1607 | QString TX_Data; |
- | |
1608 | - | ||
1609 | if (CMD != '#') |
- | |
1610 | { |
- | |
1611 | // qDebug("Send data.."); |
- | |
1612 | TX_Data = ToolBox::Encode64(Data, Length); |
- | |
1613 | - | ||
1614 | TX_Data = QString("#") + (QString('a' + Address)) + QString(CMD) + TX_Data; |
- | |
1615 | - | ||
1616 | // qDebug(TX_Data.toLatin1().data()); |
- | |
1617 | - | ||
1618 | TX_Data = ToolBox::add_CRC(TX_Data) + '\r'; |
- | |
1619 | - | ||
1620 | // qDebug(TX_Data.toLatin1().data()); |
- | |
1621 | - | ||
1622 | if (Resend) |
- | |
1623 | { |
- | |
1624 | LastSend = TX_Data; |
- | |
1625 | TickerEvent[0] = true; |
- | |
1626 | } |
- | |
1627 | Temp = QByteArray(TX_Data.toUtf8()); |
- | |
1628 | } |
- | |
1629 | else |
- | |
1630 | { |
- | |
1631 | // qDebug("Send Raw.."); |
- | |
1632 | for (unsigned int a = 0; a < Length; a++) |
- | |
1633 | { |
- | |
1634 | Temp[a] = Data[a]; |
- | |
1635 | // qDebug(QString("%1").arg(Temp[a]).toLatin1().data()); |
- | |
1636 | } |
- | |
1637 | } |
- | |
1638 | - | ||
1639 | serialPort->sendData(Temp); |
- | |
1640 | - | ||
1641 | if (cb_ShowSend->isChecked() && (CMD != '#')) |
1642 | le_Port->setEnabled(false); |
1642 | { |
1643 | |
Line 1643... | Line 1644... | ||
1643 | te_RX->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); |
1644 | Conn->send_Cmd('v', ADDRESS_ALL, TX_Data, 0, true); |
1644 | te_RX->insertHtml("<span style='color:#8b0000;'>" + TX_Data + "<br /></span>"); |
1645 | |
1645 | } |
- | |
1646 | } |
1646 | Ticker->start(2000); |
1647 | } |
1647 | } |
1648 | 1648 | } |
|
1649 | 1649 | } |
|
Line 1650... | Line 1650... | ||
1650 | // Programm beenden |
1650 | |
1651 | /////////////////// |
1651 | // Programm beenden |