From c2fe813e0f6809ebc36a43d3a5282b2d7dd0c6b3 Mon Sep 17 00:00:00 2001 From: pixhawk Date: Wed, 2 Nov 2011 12:40:54 +0100 Subject: [PATCH 1/8] Fixed v10 compile errors;\ --- src/comm/MAVLinkSimulationLink.cc | 6 +++--- src/comm/MAVLinkSimulationWaypointPlanner.cc | 6 +++--- src/ui/MAVLinkDecoder.cc | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/comm/MAVLinkSimulationLink.cc b/src/comm/MAVLinkSimulationLink.cc index 91804cd..484404a 100644 --- a/src/comm/MAVLinkSimulationLink.cc +++ b/src/comm/MAVLinkSimulationLink.cc @@ -705,9 +705,9 @@ void MAVLinkSimulationLink::writeBytes(const char* data, qint64 size) } break; // EXECUTE OPERATOR ACTIONS - case MAVLINK_MSG_ID_COMMAND_SHORT: { - mavlink_command_short_t action; - mavlink_msg_command_short_decode(&msg, &action); + case MAVLINK_MSG_ID_COMMAND_LONG: { + mavlink_command_long_t action; + mavlink_msg_command_long_decode(&msg, &action); qDebug() << "SIM" << "received action" << action.command << "for system" << action.target_system; diff --git a/src/comm/MAVLinkSimulationWaypointPlanner.cc b/src/comm/MAVLinkSimulationWaypointPlanner.cc index e1b794a..a53f17c 100644 --- a/src/comm/MAVLinkSimulationWaypointPlanner.cc +++ b/src/comm/MAVLinkSimulationWaypointPlanner.cc @@ -815,10 +815,10 @@ void MAVLinkSimulationWaypointPlanner::mavlink_handler (const mavlink_message_t* break; } - case MAVLINK_MSG_ID_COMMAND_SHORT: + case MAVLINK_MSG_ID_COMMAND_LONG: { // special action from ground station - mavlink_command_short_t action; - mavlink_msg_command_short_decode(msg, &action); + mavlink_command_long_t action; + mavlink_msg_command_long_decode(msg, &action); if(action.target_system == systemid) { if (verbose) qDebug("Waypoint: received message with action %d\n", action.command); // switch (action.action) { diff --git a/src/ui/MAVLinkDecoder.cc b/src/ui/MAVLinkDecoder.cc index 538c3e2..703e09f 100644 --- a/src/ui/MAVLinkDecoder.cc +++ b/src/ui/MAVLinkDecoder.cc @@ -12,7 +12,6 @@ MAVLinkDecoder::MAVLinkDecoder(MAVLinkProtocol* protocol, QObject *parent) : messageFilter.insert(MAVLINK_MSG_ID_HEARTBEAT, false); messageFilter.insert(MAVLINK_MSG_ID_SYS_STATUS, false); messageFilter.insert(MAVLINK_MSG_ID_STATUSTEXT, false); - messageFilter.insert(MAVLINK_MSG_ID_COMMAND_SHORT, false); messageFilter.insert(MAVLINK_MSG_ID_COMMAND_LONG, false); messageFilter.insert(MAVLINK_MSG_ID_COMMAND_ACK, false); messageFilter.insert(MAVLINK_MSG_ID_PARAM_SET, false); From f40d2066f7b6a4f410c2a715033940a292b0eed3 Mon Sep 17 00:00:00 2001 From: pixhawk Date: Fri, 4 Nov 2011 20:11:02 +0100 Subject: [PATCH 2/8] Flight fixes --- src/uas/UAS.cc | 36 ++++++++++++++++-------------------- src/ui/QGCParamWidget.cc | 6 +++--- src/ui/uas/UASControlWidget.cc | 14 +++++++------- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 50a2bd0..7143951 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -1459,6 +1459,7 @@ void UAS::writeParametersToStorage() { mavlink_message_t msg; mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, 0, MAV_CMD_PREFLIGHT_STORAGE, 1, 1, -1, -1, -1, 0, 0, 0); + qDebug() << "SENT COMMAND" << MAV_CMD_PREFLIGHT_STORAGE; sendMessage(msg); } @@ -1492,7 +1493,6 @@ void UAS::enableAllDataTransmission(int rate) mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); // Send message twice to increase chance of reception sendMessage(msg); - sendMessage(msg); } void UAS::enableRawSensorDataTransmission(int rate) @@ -1514,7 +1514,6 @@ void UAS::enableRawSensorDataTransmission(int rate) mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); // Send message twice to increase chance of reception sendMessage(msg); - sendMessage(msg); } void UAS::enableExtendedSystemStatusTransmission(int rate) @@ -1536,7 +1535,6 @@ void UAS::enableExtendedSystemStatusTransmission(int rate) mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); // Send message twice to increase chance of reception sendMessage(msg); - sendMessage(msg); } void UAS::enableRCChannelDataTransmission(int rate) @@ -1562,7 +1560,6 @@ void UAS::enableRCChannelDataTransmission(int rate) mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); // Send message twice to increase chance of reception sendMessage(msg); - sendMessage(msg); #endif } @@ -1585,7 +1582,6 @@ void UAS::enableRawControllerDataTransmission(int rate) mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); // Send message twice to increase chance of reception sendMessage(msg); - sendMessage(msg); } //void UAS::enableRawSensorFusionTransmission(int rate) @@ -1629,7 +1625,6 @@ void UAS::enablePositionTransmission(int rate) mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); // Send message twice to increase chance of reception sendMessage(msg); - sendMessage(msg); } void UAS::enableExtra1Transmission(int rate) @@ -2122,7 +2117,7 @@ void UAS::shutdown() { // If the active UAS is set, execute command mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN, 0, 2, 0, 0, 0, 0, 0, 0); + mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN, 1, 0, 2, 0, 0, 0, 0, 0); sendMessage(msg); result = true; } @@ -2165,33 +2160,34 @@ QString UAS::getShortModeTextFor(int id) qDebug() << "MODE:" << modeid; // BASE MODE DECODING - if (modeid & MAV_MODE_FLAG_DECODE_POSITION_AUTO) + if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_AUTO) { - mode = "AUTO"; + mode += "AUTO"; } - else if (modeid & MAV_MODE_FLAG_DECODE_POSITION_GUIDED) + if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_GUIDED) { - mode = "GUIDED"; + mode += "GUIDED"; } - else if (modeid & MAV_MODE_FLAG_DECODE_POSITION_STABILIZE) + if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_STABILIZE) { - mode = "STABILIZED"; + mode += "STABILIZED"; } - else if (modeid & MAV_MODE_FLAG_DECODE_POSITION_TEST) + if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_TEST) { - mode = "TEST"; + mode += "TEST"; } - else if (modeid & MAV_MODE_FLAG_DECODE_POSITION_MANUAL) + if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_MANUAL) { - mode = "MANUAL"; + mode += "MANUAL"; } - else + + if (modeid == 0) { mode = "PREFLIGHT"; } // ARMED STATE DECODING - if (modeid & MAV_MODE_FLAG_DECODE_POSITION_SAFETY) + if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_SAFETY) { mode.prepend("A|"); } @@ -2201,7 +2197,7 @@ QString UAS::getShortModeTextFor(int id) } // HARDWARE IN THE LOOP DECODING - if (modeid & MAV_MODE_FLAG_DECODE_POSITION_HIL) + if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_HIL) { mode.prepend("HIL:"); } diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc index f79ba30..31fe803 100644 --- a/src/ui/QGCParamWidget.cc +++ b/src/ui/QGCParamWidget.cc @@ -707,15 +707,15 @@ void QGCParamWidget::saveParameters() { case QVariant::Int: paramValue = paramValue.arg(j.value().toInt()); - paramType.arg(MAVLINK_TYPE_INT32_T); + paramType = paramType.arg(MAVLINK_TYPE_INT32_T); break; case QVariant::UInt: paramValue = paramValue.arg(j.value().toUInt()); - paramType.arg(MAVLINK_TYPE_UINT32_T); + paramType = paramType.arg(MAVLINK_TYPE_UINT32_T); break; case QMetaType::Float: paramValue = paramValue.arg(j.value().toDouble(), 25, 'g', 12); - paramType.arg(MAVLINK_TYPE_FLOAT); + paramType = paramType.arg(MAVLINK_TYPE_FLOAT); break; default: qCritical() << "ABORTED PARAM WRITE TO FILE, NO VALID QVARIANT TYPE" << j.value(); diff --git a/src/ui/uas/UASControlWidget.cc b/src/ui/uas/UASControlWidget.cc index 7640aa8..5040497 100644 --- a/src/ui/uas/UASControlWidget.cc +++ b/src/ui/uas/UASControlWidget.cc @@ -50,12 +50,12 @@ UASControlWidget::UASControlWidget(QWidget *parent) : QWidget(parent), connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setUAS(UASInterface*))); ui.modeComboBox->clear(); - ui.modeComboBox->insertItem(MAV_MODE_PREFLIGHT, UAS::getShortModeTextFor(MAV_MODE_PREFLIGHT)); - ui.modeComboBox->insertItem(MAV_MODE_STABILIZE_ARMED, UAS::getShortModeTextFor(MAV_MODE_STABILIZE_ARMED)); - ui.modeComboBox->insertItem(MAV_MODE_MANUAL_ARMED, UAS::getShortModeTextFor(MAV_MODE_MANUAL_ARMED)); - ui.modeComboBox->insertItem(MAV_MODE_GUIDED_DISARMED, UAS::getShortModeTextFor(MAV_MODE_GUIDED_ARMED)); - ui.modeComboBox->insertItem(MAV_MODE_AUTO_ARMED, UAS::getShortModeTextFor(MAV_MODE_AUTO_ARMED)); - ui.modeComboBox->insertItem(MAV_MODE_TEST_ARMED, UAS::getShortModeTextFor(MAV_MODE_TEST_ARMED)); + ui.modeComboBox->insertItem(0, UAS::getShortModeTextFor(MAV_MODE_PREFLIGHT), MAV_MODE_PREFLIGHT); + ui.modeComboBox->insertItem(1, UAS::getShortModeTextFor((MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_MANUAL_INPUT_ENABLED)), (MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_MANUAL_INPUT_ENABLED)); + ui.modeComboBox->insertItem(2, UAS::getShortModeTextFor(MAV_MODE_FLAG_MANUAL_INPUT_ENABLED), MAV_MODE_FLAG_MANUAL_INPUT_ENABLED); + ui.modeComboBox->insertItem(3, UAS::getShortModeTextFor((MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_MANUAL_INPUT_ENABLED | MAV_MODE_FLAG_GUIDED_ENABLED)), (MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_MANUAL_INPUT_ENABLED | MAV_MODE_FLAG_GUIDED_ENABLED)); + ui.modeComboBox->insertItem(4, UAS::getShortModeTextFor((MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_MANUAL_INPUT_ENABLED | MAV_MODE_FLAG_GUIDED_ENABLED | MAV_MODE_FLAG_AUTO_ENABLED)), (MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_MANUAL_INPUT_ENABLED | MAV_MODE_FLAG_GUIDED_ENABLED | MAV_MODE_FLAG_AUTO_ENABLED)); + ui.modeComboBox->insertItem(5, UAS::getShortModeTextFor((MAV_MODE_FLAG_MANUAL_INPUT_ENABLED | MAV_MODE_FLAG_TEST_ENABLED)), (MAV_MODE_FLAG_MANUAL_INPUT_ENABLED | MAV_MODE_FLAG_TEST_ENABLED)); connect(ui.modeComboBox, SIGNAL(activated(int)), this, SLOT(setMode(int))); connect(ui.setModeButton, SIGNAL(clicked()), this, SLOT(transmitMode())); @@ -157,7 +157,7 @@ void UASControlWidget::updateState(int state) void UASControlWidget::setMode(int mode) { // Adapt context button mode - uasMode = mode; + uasMode = ui.modeComboBox->itemData(mode).toInt(); ui.modeComboBox->blockSignals(true); ui.modeComboBox->setCurrentIndex(mode); ui.modeComboBox->blockSignals(false); From 94f9e534efcc3faed89b3636c2023236cdf224c1 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sun, 6 Nov 2011 12:09:23 +0100 Subject: [PATCH 3/8] Switched to 64 bit for Mac as default, fixed various compile warnings, now down to < 10 warnings --- qgroundcontrol.pri | 37 ++++------------------ src/comm/MAVLinkSimulationMAV.cc | 6 ++-- .../opmapcontrol/src/mapwidget/opmapwidget.cpp | 14 +++++++- .../opmapcontrol/src/mapwidget/waypointitem.cpp | 6 ++-- src/libs/utils/xmlconfig.cpp | 2 +- src/uas/UASWaypointManager.cc | 14 ++++++-- src/ui/HSIDisplay.cc | 5 +-- src/ui/MainWindow.cc | 2 +- src/ui/MainWindow.h | 2 +- 9 files changed, 42 insertions(+), 46 deletions(-) diff --git a/qgroundcontrol.pri b/qgroundcontrol.pri index 59cc051..4799549 100644 --- a/qgroundcontrol.pri +++ b/qgroundcontrol.pri @@ -42,8 +42,8 @@ macx { # COMPILER_VERSION = $$system(gcc -v) #message(Using compiler $$COMPILER_VERSION) - CONFIG += x86 cocoa phonon - CONFIG -= x86_64 + CONFIG += x86_64 cocoa phonon + CONFIG -= x86 #HARDWARE_PLATFORM = $$system(uname -a) #contains( $$HARDWARE_PLATFORM, "9.6.0" ) || contains( $$HARDWARE_PLATFORM, "9.7.0" ) || contains( $$HARDWARE_PLATFORM, "9.8.0" ) || contains( $$HARDWARE_PLATFORM, "9.9.0" ) { @@ -65,11 +65,10 @@ macx { # debug { #QMAKE_CXXFLAGS += -finstrument-functions #LIBS += -lSaturn - CONFIG += console # } #} - QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.5 + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 #DESTDIR = $$BASEDIR/bin/mac INCLUDEPATH += -framework SDL @@ -103,7 +102,7 @@ macx { DEFINES += QGC_OSG_ENABLED # Include OpenSceneGraph libraries INCLUDEPATH += -framework GLUT \ - -framework Carbon \ + -framework Cocoa \ -framework OpenThreads \ -framework osg \ -framework osgViewer \ @@ -113,7 +112,7 @@ macx { -framework osgWidget LIBS += -framework GLUT \ - -framework Carbon \ + -framework Cocoa \ -framework OpenThreads \ -framework osg \ -framework osgViewer \ @@ -123,37 +122,13 @@ macx { -framework osgWidget } - exists(/usr/include/osgEarth) { - message("Building support for osgEarth") - DEPENDENCIES_PRESENT += osgearth - # Include osgEarth libraries - INCLUDEPATH += -framework GDAL \ - $$IN_PWD/lib/mac32-gcc/include \ - -framework GEOS \ - -framework SQLite3 \ - -framework osgFX \ - -framework osgTerrain - - LIBS += -framework GDAL \ - -framework GEOS \ - -framework SQLite3 \ - -framework osgFX \ - -framework osgTerrain - DEFINES += QGC_OSGEARTH_ENABLED - } - - - exists(/opt/local/include/libfreenect) { + exists(/opt/local/include/libfreenect)|exists(/usr/local/include/libfreenect) { message("Building support for libfreenect") DEPENDENCIES_PRESENT += libfreenect # Include libfreenect libraries LIBS += -lfreenect DEFINES += QGC_LIBFREENECT_ENABLED } - - # osg/osgEarth dynamic casts might fail without this compiler option. - # see http://osgearth.org/wiki/FAQ for details. - #QMAKE_CXXFLAGS += -Wl,-E } # GNU/Linux diff --git a/src/comm/MAVLinkSimulationMAV.cc b/src/comm/MAVLinkSimulationMAV.cc index 27a9d13..08af211 100644 --- a/src/comm/MAVLinkSimulationMAV.cc +++ b/src/comm/MAVLinkSimulationMAV.cc @@ -303,12 +303,12 @@ void MAVLinkSimulationMAV::mainloop() timer25Hz--; } -static unsigned chan_counts[MAVLINK_COMM_NUM_BUFFERS]; +//static unsigned chan_counts[MAVLINK_COMM_NUM_BUFFERS]; static const unsigned message_lengths[] = MAVLINK_MESSAGE_LENGTHS; -static unsigned error_count; +//static unsigned error_count; -static const mavlink_message_info_t message_info[256] = MAVLINK_MESSAGE_INFO; +mavlink_message_info_t message_info[256] = MAVLINK_MESSAGE_INFO; static void print_one_field(const mavlink_message_t *msg, const mavlink_field_info_t *f, int idx) { diff --git a/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp b/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp index 5ae3e14..066bef4 100644 --- a/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp +++ b/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp @@ -33,7 +33,18 @@ namespace mapcontrol { - OPMapWidget::OPMapWidget(QWidget *parent, Configuration *config):QGraphicsView(parent),configuration(config),UAV(0),GPS(0),Home(0),followmouse(true),compass(0),showuav(false),showhome(false),showDiag(false),diagGraphItem(0),diagTimer(0) + OPMapWidget::OPMapWidget(QWidget *parent, Configuration *config) : QGraphicsView(parent), + configuration(config), + UAV(0), + GPS(0), + Home(0), + followmouse(true), + compass(0), + showuav(false), + showhome(false), + diagTimer(0), + showDiag(false), + diagGraphItem(0) { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); core=new internals::Core; @@ -277,6 +288,7 @@ namespace mapcontrol } void OPMapWidget::WPCreate(int id, WayPointItem* item) { + Q_UNUSED(id); static internals::PointLatLng lastPos; ConnectWP(item); diff --git a/src/libs/opmapcontrol/src/mapwidget/waypointitem.cpp b/src/libs/opmapcontrol/src/mapwidget/waypointitem.cpp index 5b35131..0118c27 100644 --- a/src/libs/opmapcontrol/src/mapwidget/waypointitem.cpp +++ b/src/libs/opmapcontrol/src/mapwidget/waypointitem.cpp @@ -29,14 +29,14 @@ namespace mapcontrol { WayPointItem::WayPointItem(const internals::PointLatLng &coord,double const& altitude, MapGraphicItem *map) : map(map), + autoreachedEnabled(true), coord(coord), reached(false), description(""), shownumber(true), isDragging(false), altitude(altitude), - heading(0), - autoreachedEnabled(true) + heading(0) { text=0; numberI=0; @@ -53,13 +53,13 @@ namespace mapcontrol RefreshPos(); } WayPointItem::WayPointItem(const internals::PointLatLng &coord,double const& altitude, const QString &description, MapGraphicItem *map) : + map(map), coord(coord), reached(false), description(description), shownumber(true), isDragging(false), altitude(altitude), - map(map), heading(0) { text=0; diff --git a/src/libs/utils/xmlconfig.cpp b/src/libs/utils/xmlconfig.cpp index 7b4cc9d..72c5c92 100644 --- a/src/libs/utils/xmlconfig.cpp +++ b/src/libs/utils/xmlconfig.cpp @@ -63,7 +63,7 @@ bool XmlConfig::readXmlFile(QIODevice &device, QSettings::SettingsMap &map) .arg(errorLine) .arg(errorColumn) .arg(errorStr); - qFatal(err.toLatin1().data()); + qFatal("%s", err.toLatin1().data()); return false; } root = domDoc.documentElement(); diff --git a/src/uas/UASWaypointManager.cc b/src/uas/UASWaypointManager.cc index 930bead..ab870dc 100644 --- a/src/uas/UASWaypointManager.cc +++ b/src/uas/UASWaypointManager.cc @@ -45,8 +45,8 @@ UASWaypointManager::UASWaypointManager(UAS* _uas) current_state(WP_IDLE), current_partner_systemid(0), current_partner_compid(0), - protocol_timer(this), - currentWaypointEditable(NULL) + currentWaypointEditable(NULL), + protocol_timer(this) { if (uas) { @@ -112,7 +112,14 @@ void UASWaypointManager::handleLocalPositionChanged(UASInterface* mav, double x, void UASWaypointManager::handleGlobalPositionChanged(UASInterface* mav, double lat, double lon, double alt, quint64 time) { - + Q_UNUSED(mav); + Q_UNUSED(time); + if (waypointsEditable.count() > 0 && currentWaypointEditable && (currentWaypointEditable->getFrame() == MAV_FRAME_GLOBAL || currentWaypointEditable->getFrame() == MAV_FRAME_GLOBAL_RELATIVE_ALT)) + { + // TODO FIXME Calculate distance + double dist = 0; + emit waypointDistanceChanged(dist); + } } void UASWaypointManager::handleWaypointCount(quint8 systemId, quint8 compId, quint16 count) @@ -240,6 +247,7 @@ void UASWaypointManager::handleWaypointReached(quint8 systemId, quint8 compId, m void UASWaypointManager::handleWaypointCurrent(quint8 systemId, quint8 compId, mavlink_mission_current_t *wpc) { + Q_UNUSED(compId); if (!uas) return; if (systemId == uasid) { // FIXME Petri diff --git a/src/ui/HSIDisplay.cc b/src/ui/HSIDisplay.cc index f34ae62..9a4f6ec 100644 --- a/src/ui/HSIDisplay.cc +++ b/src/ui/HSIDisplay.cc @@ -100,11 +100,12 @@ HSIDisplay::HSIDisplay(QWidget *parent) : mavInitialized(false), bottomMargin(10.0f), topMargin(12.0f), - userSetPointSet(false), dragStarted(false), leftDragStarted(false), mouseHasMoved(false), - actionPending(false) + actionPending(false), + userSetPointSet(false), + userXYSetPointSet(false) { refreshTimer->setInterval(updateInterval); diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index 409f161..8aacd4e 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -88,11 +88,11 @@ MainWindow* MainWindow::instance(QSplashScreen* screen) MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), currentView(VIEW_UNCONNECTED), + currentStyle(QGC_MAINWINDOW_STYLE_INDOOR), aboutToCloseFlag(false), changingViewsFlag(false), styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), autoReconnect(false), - currentStyle(QGC_MAINWINDOW_STYLE_INDOOR), centerStackActionGroup(this), lowPowerMode(false) { diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index f401fb4..ae3d649 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -279,6 +279,7 @@ protected: /** @brief Keeps track of the current view */ VIEW_SECTIONS currentView; + QGC_MAINWINDOW_STYLE currentStyle; bool aboutToCloseFlag; bool changingViewsFlag; @@ -371,7 +372,6 @@ protected: QTimer* videoTimer; QString styleFileName; bool autoReconnect; - QGC_MAINWINDOW_STYLE currentStyle; Qt::WindowStates windowStateVal; bool lowPowerMode; ///< If enabled, QGC reduces the update rates of all widgets QGCFlightGearLink* fgLink; From fed4ee0429b3908271af0e225aef80afef613a64 Mon Sep 17 00:00:00 2001 From: LM Date: Fri, 11 Nov 2011 11:03:19 +0100 Subject: [PATCH 4/8] Fixed errorneous win-only qt tools defines, merged serial port fixes from Konrad Rudin and libxbee --- qgroundcontrol.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 436dc53..16f860b 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -42,12 +42,14 @@ RCC_DIR = $${BUILDDIR}/rcc MAVLINK_CONF = "" DEFINES += MAVLINK_NO_DATA +win32 { QMAKE_INCDIR_QT = $$(QTDIR)/include QMAKE_LIBDIR_QT = $$(QTDIR)/lib QMAKE_UIC = "$$(QTDIR)/bin/uic.exe" QMAKE_MOC = "$$(QTDIR)/bin/moc.exe" QMAKE_RCC = "$$(QTDIR)/bin/rcc.exe" QMAKE_QMAKE = "$$(QTDIR)/bin/qmake.exe" +} From 74e4704f381e6bc9e241082847c7c025a17e9b08 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 12 Nov 2011 11:58:22 +0100 Subject: [PATCH 5/8] Fixed compile warnings, fixed a windows-specific compile error --- src/GAudioOutput.cc | 18 +++++++++--------- src/comm/MAVLinkSimulationLink.h | 1 + src/comm/SerialLink.cc | 5 +++-- src/ui/HSIDisplay.cc | 2 +- src/ui/MainWindow.cc | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/GAudioOutput.cc b/src/GAudioOutput.cc index 18b36be..9cadcc6 100644 --- a/src/GAudioOutput.cc +++ b/src/GAudioOutput.cc @@ -119,9 +119,9 @@ GAudioOutput::GAudioOutput(QObject* parent) : QObject(parent), } #endif // Initialize audio output - m_media = new Phonon::MediaObject(this); - Phonon::AudioOutput *audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); - createPath(m_media, audioOutput); + //m_media = new Phonon::MediaObject(this); + //Phonon::AudioOutput *audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); + //createPath(m_media, audioOutput); // Prepare regular emergency signal, will be fired off on calling startEmergency() emergencyTimer = new QTimer(); @@ -228,8 +228,8 @@ void GAudioOutput::notifyPositive() if (!muted) { // Use QFile to transform path for all OS QFile f(QCoreApplication::applicationDirPath()+QString("/audio/double_notify.wav")); - m_media->setCurrentSource(Phonon::MediaSource(f.fileName().toStdString().c_str())); - m_media->play(); + //m_media->setCurrentSource(Phonon::MediaSource(f.fileName().toStdString().c_str())); + //m_media->play(); } } @@ -238,8 +238,8 @@ void GAudioOutput::notifyNegative() if (!muted) { // Use QFile to transform path for all OS QFile f(QCoreApplication::applicationDirPath()+QString("/audio/flat_notify.wav")); - m_media->setCurrentSource(Phonon::MediaSource(f.fileName().toStdString().c_str())); - m_media->play(); + //m_media->setCurrentSource(Phonon::MediaSource(f.fileName().toStdString().c_str())); + //m_media->play(); } } @@ -283,8 +283,8 @@ void GAudioOutput::beep() // Use QFile to transform path for all OS QFile f(QCoreApplication::applicationDirPath()+QString("/audio/alert.wav")); qDebug() << "FILE:" << f.fileName(); - m_media->setCurrentSource(Phonon::MediaSource(f.fileName().toStdString().c_str())); - m_media->play(); + //m_media->setCurrentSource(Phonon::MediaSource(f.fileName().toStdString().c_str())); + //m_media->play(); } } diff --git a/src/comm/MAVLinkSimulationLink.h b/src/comm/MAVLinkSimulationLink.h index 5ac86fa..64520a5 100644 --- a/src/comm/MAVLinkSimulationLink.h +++ b/src/comm/MAVLinkSimulationLink.h @@ -38,6 +38,7 @@ This file is part of the QGROUNDCONTROL project #include #include #include +#include #include #include "QGCMAVLink.h" diff --git a/src/comm/SerialLink.cc b/src/comm/SerialLink.cc index 262141b..6a296e4 100644 --- a/src/comm/SerialLink.cc +++ b/src/comm/SerialLink.cc @@ -211,8 +211,9 @@ using namespace TNX; SerialLink::SerialLink(QString portname, int baudRate, bool hardwareFlowControl, bool parity, int dataBits, int stopBits) : - port(NULL), m_stopp(false), - ports(new QVector()) + port(NULL), + ports(new QVector()), + m_stopp(false) { // Setup settings this->porthandle = portname.trimmed(); diff --git a/src/ui/HSIDisplay.cc b/src/ui/HSIDisplay.cc index 9a4f6ec..ec0a309 100644 --- a/src/ui/HSIDisplay.cc +++ b/src/ui/HSIDisplay.cc @@ -99,8 +99,8 @@ HSIDisplay::HSIDisplay(QWidget *parent) : laserFix(0), mavInitialized(false), bottomMargin(10.0f), - topMargin(12.0f), dragStarted(false), + topMargin(12.0f), leftDragStarted(false), mouseHasMoved(false), actionPending(false), diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index 1b45015..b60ed04 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -92,8 +92,8 @@ MainWindow::MainWindow(QWidget *parent): aboutToCloseFlag(false), changingViewsFlag(false), styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), - autoReconnect(false), centerStackActionGroup(this), + autoReconnect(false), lowPowerMode(false) { hide(); From 2711ddf521a6e18692847dc84d25b8bf0c169f1b Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 12 Nov 2011 13:25:36 +0100 Subject: [PATCH 6/8] Temporarily deactivated libxbee due to missing files --- qgroundcontrol.pro | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 16f860b..177e6cb 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -542,19 +542,19 @@ TRANSLATIONS += es-MX.ts \ # xbee support # libxbee only supported by linux and windows systems -win32-msvc2008|win32-msvc2010|linux{ - HEADERS += src/comm/XbeeLinkInterface.h \ - src/comm/XbeeLink.h \ - src/comm/HexSpinBox.h \ - src/ui/XbeeConfigurationWindow.h \ - src/comm/CallConv.h - SOURCES += src/comm/XbeeLink.cpp \ - src/comm/HexSpinBox.cpp \ - src/ui/XbeeConfigurationWindow.cpp - DEFINES += XBEELINK - INCLUDEPATH += thirdParty/libxbee +#win32-msvc2008|win32-msvc2010|linux{ +# HEADERS += src/comm/XbeeLinkInterface.h \ +# src/comm/XbeeLink.h \ +# src/comm/HexSpinBox.h \ +# src/ui/XbeeConfigurationWindow.h \ +# src/comm/CallConv.h +# SOURCES += src/comm/XbeeLink.cpp \ +# src/comm/HexSpinBox.cpp \ +# src/ui/XbeeConfigurationWindow.cpp +# DEFINES += XBEELINK +# INCLUDEPATH += thirdParty/libxbee # TO DO: build library when it does not exists already - LIBS += -LthirdParty/libxbee/lib \ - -llibxbee - -} +# LIBS += -LthirdParty/libxbee/lib \ +# -llibxbee +# +#} From 1b9ab2a4a2d7b7d16066a91036ea6c6a4924a65c Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 12 Nov 2011 14:26:08 +0100 Subject: [PATCH 7/8] Re-enabled automatic gauges, now again user-configurable --- src/ui/HDDisplay.cc | 69 ++++++++++++++++++++++++++++++++++++++++++++++------ src/ui/HDDisplay.h | 8 ++++++ src/ui/MainWindow.cc | 10 +++++--- 3 files changed, 76 insertions(+), 11 deletions(-) diff --git a/src/ui/HDDisplay.cc b/src/ui/HDDisplay.cc index c786af6..1104075 100644 --- a/src/ui/HDDisplay.cc +++ b/src/ui/HDDisplay.cc @@ -271,16 +271,23 @@ void HDDisplay::addGauge() QStringList items; for (int i = 0; i < values.count(); ++i) { QString key = values.keys().at(i); + QString label = key; + QStringList keySplit = key.split("."); + if (keySplit.size() > 1) + { + keySplit.removeFirst(); + label = keySplit.join("."); + } QString unit = units.value(key); if (unit.contains("deg") || unit.contains("rad")) { - items.append(QString("%1,%2,%3,%4,s").arg("-180").arg(key).arg(unit).arg("+180")); + items.append(QString("%1,%2,%3,%4,%5,s").arg("-180").arg(key).arg(unit).arg("+180").arg(label)); } else { - items.append(QString("%1,%2,%3,%4").arg("0").arg(key).arg(unit).arg("+100")); + items.append(QString("%1,%2,%3,%4,%5").arg("0").arg(key).arg(unit).arg("+100").arg(label)); } } bool ok; QString item = QInputDialog::getItem(this, tr("Add Gauge Instrument"), - tr("Format: min, curve name, unit, max[,s]"), items, 0, true, &ok); + tr("Format: min, data name, unit, max, label [,s]"), items, 0, true, &ok); if (ok && !item.isEmpty()) { addGauge(item); } @@ -307,9 +314,19 @@ void HDDisplay::addGauge(const QString& gauge) val = parts.at(3).toDouble(&ok); success &= ok; if (ok) maxValues.insert(key, val); + // Convert name + if (parts.length() >= 5) + { + if (parts.at(4).length() > 0) + { + customNames.insert(key, parts.at(4)); + } + } // Convert symmetric flag - if (parts.length() >= 5) { - if (parts.at(4).contains("s")) { + if (parts.length() >= 6) + { + if (parts.at(5).contains("s")) + { symmetric.insert(key, true); } } @@ -425,12 +442,15 @@ void HDDisplay::renderOverlay() float topSpacing = leftSpacing; float yCoord = topSpacing + gaugeWidth/2.0f; - for (int i = 0; i < acceptList->size(); ++i) { + for (int i = 0; i < acceptList->size(); ++i) + { QString value = acceptList->at(i); - drawGauge(xCoord, yCoord, gaugeWidth/2.0f, minValues.value(value, -1.0f), maxValues.value(value, 1.0f), value, values.value(value, minValues.value(value, 0.0f)), gaugeColor, &painter, symmetric.value(value, false), goodRanges.value(value, qMakePair(0.0f, 0.5f)), critRanges.value(value, qMakePair(0.7f, 1.0f)), true); + QString label = customNames.value(value); + drawGauge(xCoord, yCoord, gaugeWidth/2.0f, minValues.value(value, -1.0f), maxValues.value(value, 1.0f), label, values.value(value, minValues.value(value, 0.0f)), gaugeColor, &painter, symmetric.value(value, false), goodRanges.value(value, qMakePair(0.0f, 0.5f)), critRanges.value(value, qMakePair(0.7f, 1.0f)), true); xCoord += gaugeWidth + leftSpacing; // Move one row down if necessary - if (xCoord + gaugeWidth*0.9f > vwidth) { + if (xCoord + gaugeWidth*0.9f > vwidth) + { yCoord += topSpacing + gaugeWidth; xCoord = leftSpacing + gaugeWidth/2.0f; } @@ -807,12 +827,45 @@ float HDDisplay::refLineWidthToPen(float line) return line * 2.50f; } +void HDDisplay::addSource(QObject* obj) +{ + //genericSources.append(obj); + // FIXME XXX HACK +// if (plots.size() > 0) +// { + // Connect generic source + connect(obj, SIGNAL(valueChanged(int,QString,QString,int,quint64)), this, SLOT(updateValue(int,QString,QString,int,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,unsigned int,quint64)), this, SLOT(updateValue(int,QString,QString,unsigned int,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,quint64,quint64)), this, SLOT(updateValue(int,QString,QString,quint64,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,qint64,quint64)), this, SLOT(updateValue(int,QString,QString,qint64,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,double,quint64)), this, SLOT(updateValue(int,QString,QString,double,quint64))); +// } +} + void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const int value, const quint64 msec) { if (!intValues.contains(name)) intValues.insert(name, true); updateValue(uasId, name, unit, (double)value, msec); } +void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const unsigned int value, const quint64 msec) +{ + if (!intValues.contains(name)) intValues.insert(name, true); + updateValue(uasId, name, unit, (double)value, msec); +} + +void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec) +{ + if (!intValues.contains(name)) intValues.insert(name, true); + updateValue(uasId, name, unit, (double)value, msec); +} + +void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec) +{ + if (!intValues.contains(name)) intValues.insert(name, true); + updateValue(uasId, name, unit, (double)value, msec); +} + void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec) { Q_UNUSED(uasId); diff --git a/src/ui/HDDisplay.h b/src/ui/HDDisplay.h index 15a2240..cdec1cc 100644 --- a/src/ui/HDDisplay.h +++ b/src/ui/HDDisplay.h @@ -68,7 +68,14 @@ public slots: void updateValue(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec); /** @brief Update a HDD integer value */ void updateValue(const int uasId, const QString& name, const QString& unit, const int value, const quint64 msec); + /** @brief Update a HDD integer value */ + void updateValue(const int uasId, const QString& name, const QString& unit, const unsigned int value, const quint64 msec); + /** @brief Update a HDD integer value */ + void updateValue(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec); + /** @brief Update a HDD integer value */ + void updateValue(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec); virtual void setActiveUAS(UASInterface* uas); + void addSource(QObject* obj); /** @brief Removes a plot item by the action data */ void removeItemByAction(); @@ -149,6 +156,7 @@ protected: QMap maxValues; ///< The maximum value this variable is assumed to have QMap symmetric; ///< Draw the gauge / dial symmetric bool = yes QMap intValues; ///< Is the gauge value an integer? + QMap customNames; ///< Custom names for the data names QMap > goodRanges; ///< The range of good values QMap > critRanges; ///< The range of critical values double scalingFactor; ///< Factor used to scale all absolute values to screen coordinates diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index b60ed04..5185829 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -91,8 +91,8 @@ MainWindow::MainWindow(QWidget *parent): currentStyle(QGC_MAINWINDOW_STYLE_INDOOR), aboutToCloseFlag(false), changingViewsFlag(false), - styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), centerStackActionGroup(this), + styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), autoReconnect(false), lowPowerMode(false) { @@ -427,14 +427,18 @@ void MainWindow::buildCommonWidgets() if (!headDown1DockWidget) { headDown1DockWidget = new QDockWidget(tr("Flight Display"), this); - headDown1DockWidget->setWidget( new HDDisplay(acceptList, "Flight Display", this) ); + HDDisplay* hdDisplay = new HDDisplay(acceptList, "Flight Display", this); + hdDisplay->addSource(mavlinkDecoder); + headDown1DockWidget->setWidget(hdDisplay); headDown1DockWidget->setObjectName("HEAD_DOWN_DISPLAY_1_DOCK_WIDGET"); addTool(headDown1DockWidget, tr("Flight Display"), Qt::RightDockWidgetArea); } if (!headDown2DockWidget) { headDown2DockWidget = new QDockWidget(tr("Actuator Status"), this); - headDown2DockWidget->setWidget( new HDDisplay(acceptList2, "Actuator Status", this) ); + HDDisplay* hdDisplay = new HDDisplay(acceptList2, "Actuator Status", this); + hdDisplay->addSource(mavlinkDecoder); + headDown2DockWidget->setWidget(hdDisplay); headDown2DockWidget->setObjectName("HEAD_DOWN_DISPLAY_2_DOCK_WIDGET"); addTool(headDown2DockWidget, tr("Actuator Status"), Qt::RightDockWidgetArea); } From 56e11079c25dec7fb0fc31aa86de0241851cb085 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 12 Nov 2011 14:31:16 +0100 Subject: [PATCH 8/8] Enabled persistence on custom gauges --- src/ui/HDDisplay.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/HDDisplay.cc b/src/ui/HDDisplay.cc index 1104075..020eae9 100644 --- a/src/ui/HDDisplay.cc +++ b/src/ui/HDDisplay.cc @@ -216,7 +216,7 @@ void HDDisplay::saveState() // Restore instrument settings for (int i = 0; i < acceptList->count(); i++) { QString key = acceptList->at(i); - instruments += "|" + QString::number(minValues.value(key, -1.0))+","+key+","+acceptUnitList->at(i)+","+QString::number(maxValues.value(key, +1.0))+","+((symmetric.value(key, false)) ? "s" : ""); + instruments += "|" + QString::number(minValues.value(key, -1.0))+","+key+","+acceptUnitList->at(i)+","+QString::number(maxValues.value(key, +1.0))+","+customNames.value(key, "")+","+((symmetric.value(key, false)) ? "s" : ""); } // qDebug() << "Saving" << instruments;