From 17aad9f5748c2e3ac3c36944c0ad9cd5f108d491 Mon Sep 17 00:00:00 2001 From: lm Date: Tue, 18 May 2010 11:13:07 +0200 Subject: [PATCH] Cleaned up old parameter interface, added initial support for other autopilots --- qgroundcontrol.pro | 4 - src/comm/MAVLinkProtocol.cc | 4 + src/uas/ArduPilotMAV.h | 1 + src/uas/PxQuadMAV.h | 1 + src/uas/SlugsMAV.cc | 10 +- src/uas/SlugsMAV.h | 1 + src/uas/UAS.cc | 4 +- src/ui/DebugConsole.cc | 2 +- src/ui/HDDisplay.cc | 3 +- src/ui/ObjectDetectionView.cc | 8 ++ src/ui/WaypointList.cc | 3 +- src/ui/param/ParamTreeItem.cc | 126 ----------------- src/ui/param/ParamTreeItem.h | 69 ---------- src/ui/param/ParamTreeModel.cc | 239 --------------------------------- src/ui/param/ParamTreeModel.h | 78 ----------- 15 files changed, 29 insertions(+), 524 deletions(-) delete mode 100644 src/ui/param/ParamTreeItem.cc delete mode 100644 src/ui/param/ParamTreeItem.h delete mode 100644 src/ui/param/ParamTreeModel.cc delete mode 100644 src/ui/param/ParamTreeModel.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 6f570c883..3b0ed5563 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -111,8 +111,6 @@ HEADERS += src/MG.h \ src/ui/AudioOutputWidget.h \ src/GAudioOutput.h \ src/LogCompressor.h \ - src/ui/param/ParamTreeItem.h \ - src/ui/param/ParamTreeModel.h \ src/ui/QGCParamWidget.h \ src/ui/QGCSensorSettingsWidget.h \ src/ui/linechart/Linecharts.h \ @@ -163,8 +161,6 @@ SOURCES += src/main.cc \ src/ui/AudioOutputWidget.cc \ src/GAudioOutput.cc \ src/LogCompressor.cc \ - src/ui/param/ParamTreeItem.cc \ - src/ui/param/ParamTreeModel.cc \ src/ui/QGCParamWidget.cc \ src/ui/QGCSensorSettingsWidget.cc \ src/ui/linechart/Linecharts.cc \ diff --git a/src/comm/MAVLinkProtocol.cc b/src/comm/MAVLinkProtocol.cc index daff4a870..bc056168e 100644 --- a/src/comm/MAVLinkProtocol.cc +++ b/src/comm/MAVLinkProtocol.cc @@ -42,6 +42,7 @@ This file is part of the PIXHAWK project #include "UASManager.h" #include "UASInterface.h" #include "UAS.h" +#include "SlugsMAV.h" /* FIXME REMOVE */ #include "configuration.h" #include "LinkManager.h" #include @@ -131,6 +132,9 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link) // First create new UAS object uas = new UAS(this, message.sysid); + //uas = new SlugsMAV(this, message.sysid); + + // Make UAS aware that this link can be used to communicate with the actual robot uas->addLink(link); // Connect this robot to the UAS object diff --git a/src/uas/ArduPilotMAV.h b/src/uas/ArduPilotMAV.h index 5fda9e089..75d17cb7e 100644 --- a/src/uas/ArduPilotMAV.h +++ b/src/uas/ArduPilotMAV.h @@ -5,6 +5,7 @@ class ArduPilotMAV : public UAS { + Q_OBJECT public: ArduPilotMAV(MAVLinkProtocol* mavlink, int id = 0); }; diff --git a/src/uas/PxQuadMAV.h b/src/uas/PxQuadMAV.h index ec9492886..5426e1bde 100644 --- a/src/uas/PxQuadMAV.h +++ b/src/uas/PxQuadMAV.h @@ -5,6 +5,7 @@ class PxQuadMAV : public UAS { + Q_OBJECT public: PxQuadMAV(MAVLinkProtocol* mavlink, int id); }; diff --git a/src/uas/SlugsMAV.cc b/src/uas/SlugsMAV.cc index 4c10f5016..9f557af19 100644 --- a/src/uas/SlugsMAV.cc +++ b/src/uas/SlugsMAV.cc @@ -1,5 +1,7 @@ #include "SlugsMAV.h" +#include + SlugsMAV::SlugsMAV(MAVLinkProtocol* mavlink, int id) : UAS(mavlink, id)//, // Place other initializers here @@ -9,15 +11,19 @@ SlugsMAV::SlugsMAV(MAVLinkProtocol* mavlink, int id) : void SlugsMAV::receiveMessage(LinkInterface* link, mavlink_message_t message) { + // Let UAS handle the default message set + UAS::receiveMessage(link, message); + + // Handle your special messages switch (message.msgid) { case MAVLINK_MSG_ID_HEARTBEAT: { - printf("RECEIVED HEARTBEAT"); + qDebug() << "RECEIVED HEARTBEAT"; break; } default: - printf("\nSLUGS RECEIVED MESSAGE WITH ID %d", message.msgid); + qDebug() << "\nSLUGS RECEIVED MESSAGE WITH ID" << message.msgid; break; } } diff --git a/src/uas/SlugsMAV.h b/src/uas/SlugsMAV.h index e4d871463..2e952066d 100644 --- a/src/uas/SlugsMAV.h +++ b/src/uas/SlugsMAV.h @@ -5,6 +5,7 @@ class SlugsMAV : public UAS { + Q_OBJECT public: SlugsMAV(MAVLinkProtocol* mavlink, int id = 0); diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 8c43b3ef1..8da437737 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -398,8 +398,8 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message) if (!unknownPackets.contains(message.msgid)) { unknownPackets.append(message.msgid); - GAudioOutput::instance()->say("UNABLE TO DECODE MESSAGE WITH ID " + QString::number(message.msgid) + " FROM SYSTEM " + QString::number(message.sysid)); - std::cerr << "Unable to decode message from system " << std::dec << static_cast(message.sysid) << " with message id:" << static_cast(message.msgid) << std::endl; + //GAudioOutput::instance()->say("UNABLE TO DECODE MESSAGE WITH ID " + QString::number(message.msgid) + " FROM SYSTEM " + QString::number(message.sysid)); + std::cout << "Unable to decode message from system " << std::dec << static_cast(message.sysid) << " with message id:" << static_cast(message.msgid) << std::endl; //qDebug() << std::cerr << "Unable to decode message from system " << std::dec << static_cast(message.acid) << " with message id:" << static_cast(message.msgid) << std::endl; } } diff --git a/src/ui/DebugConsole.cc b/src/ui/DebugConsole.cc index 3ecbc3397..85b5b3228 100644 --- a/src/ui/DebugConsole.cc +++ b/src/ui/DebugConsole.cc @@ -196,7 +196,7 @@ void DebugConsole::updateTrafficMeasurements() void DebugConsole::paintEvent(QPaintEvent *event) { - + Q_UNUSED(event); // Update bandwidth if (holdOn) { diff --git a/src/ui/HDDisplay.cc b/src/ui/HDDisplay.cc index 9b0f20366..ad197acb3 100644 --- a/src/ui/HDDisplay.cc +++ b/src/ui/HDDisplay.cc @@ -110,6 +110,7 @@ void HDDisplay::triggerUpdate() void HDDisplay::paintEvent(QPaintEvent * event) { + Q_UNUSED(event); //paintGL(); static quint64 interval = 0; qDebug() << "INTERVAL:" << MG::TIME::getGroundTimeNow() - interval << __FILE__ << __LINE__; @@ -123,7 +124,7 @@ void HDDisplay::paintGL() void HDDisplay::paintDisplay() { - int refreshInterval = 100; + quint64 refreshInterval = 100; quint64 currTime = MG::TIME::getGroundTimeNow(); if (currTime - lastPaintTime < refreshInterval) { diff --git a/src/ui/ObjectDetectionView.cc b/src/ui/ObjectDetectionView.cc index d7f59488d..e9c3c7eb9 100644 --- a/src/ui/ObjectDetectionView.cc +++ b/src/ui/ObjectDetectionView.cc @@ -78,6 +78,14 @@ void ObjectDetectionView::setUAS(UASInterface* uas) void ObjectDetectionView::newDetection(int uasId, QString patternPath, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, double confidence, bool detected) { + Q_UNUSED(x1); + Q_UNUSED(y1); + Q_UNUSED(x2); + Q_UNUSED(y2); + Q_UNUSED(x3); + Q_UNUSED(y3); + Q_UNUSED(x4); + Q_UNUSED(y4); if (detected) { if (patternList.contains(patternPath)) diff --git a/src/ui/WaypointList.cc b/src/ui/WaypointList.cc index 10d02de10..360db850d 100644 --- a/src/ui/WaypointList.cc +++ b/src/ui/WaypointList.cc @@ -115,8 +115,7 @@ void WaypointList::setWaypoint(int uasId, int id, double x, double y, double z, void WaypointList::waypointReached(UASInterface* uas, int waypointId) { - qDebug() << "ENTERING WAYPOINT REACHED"; - + Q_UNUSED(uas); if (waypoints.size() > waypointId) { if (waypoints[waypointId]->autocontinue == true) diff --git a/src/ui/param/ParamTreeItem.cc b/src/ui/param/ParamTreeItem.cc deleted file mode 100644 index 40972e374..000000000 --- a/src/ui/param/ParamTreeItem.cc +++ /dev/null @@ -1,126 +0,0 @@ -/*===================================================================== - -PIXHAWK Micro Air Vehicle Flying Robotics Toolkit - -(c) 2009, 2010 PIXHAWK PROJECT - -This file is part of the PIXHAWK project - - PIXHAWK is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - PIXHAWK is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with PIXHAWK. If not, see . - -======================================================================*/ - -/** - * @file - * @brief Implementation of class MainWindow - * @author Lorenz Meier - * - */ - -#include - -#include "ParamTreeItem.h" - -ParamTreeItem::ParamTreeItem(QString name, float value, ParamTreeItem* parent) -{ - parentItem = parent; - paramName = name; - paramValue = value; - // Initialize empty itemData - itemData = QList(); -} - -ParamTreeItem::ParamTreeItem(const QList &data, ParamTreeItem *parent) -{ - parentItem = parent; - itemData = data; -} - -ParamTreeItem::~ParamTreeItem() -{ - qDeleteAll(childItems); -} - -void ParamTreeItem::appendChild(ParamTreeItem *item) -{ - childItems.append(item); -} - -ParamTreeItem *ParamTreeItem::child(int row) -{ - return childItems.value(row); -} - -int ParamTreeItem::childCount() const -{ - return childItems.count(); -} - -int ParamTreeItem::columnCount() const -{ - return 2;// itemData.count(); -} - -QString ParamTreeItem::getParamName() -{ - return paramName; -} - -float ParamTreeItem::getParamValue() -{ - return paramValue; -} - -QVariant ParamTreeItem::data(int column) const -{ - if (itemData.empty()) - { - QVariant ret; - switch (column) - { - case 0: - ret.setValue(paramName); - break; - case 1: - ret.setValue(paramValue); - break; - default: - ret.setValue(QString("")); - break; - } - return ret; - } - else - { - return itemData.value(column, QVariant(QString(""))); - } -} - -ParamTreeItem *ParamTreeItem::parent() const -{ - return parentItem; -} - -const QList* ParamTreeItem::children() const -{ - return &childItems; -} - -int ParamTreeItem::row() const -{ - if (parentItem) - return parentItem->childItems.indexOf(const_cast(this)); - - return 0; -} diff --git a/src/ui/param/ParamTreeItem.h b/src/ui/param/ParamTreeItem.h deleted file mode 100644 index 3ba8b3e03..000000000 --- a/src/ui/param/ParamTreeItem.h +++ /dev/null @@ -1,69 +0,0 @@ -/*===================================================================== - -PIXHAWK Micro Air Vehicle Flying Robotics Toolkit - -(c) 2009, 2010 PIXHAWK PROJECT - -This file is part of the PIXHAWK project - - PIXHAWK is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - PIXHAWK is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with PIXHAWK. If not, see . - -======================================================================*/ - -/** - * @file - * @brief Definition of class ParamTreeItem - * @author Lorenz Meier - * - */ - -#ifndef PARAMTREEITEM_H -#define PARAMTREEITEM_H - -#include -#include - -/** - * @brief One item in the onboard parameter tree - */ -class ParamTreeItem -{ -public: - ParamTreeItem(QString name, float value, ParamTreeItem* parent = 0); - ParamTreeItem(const QList &data, ParamTreeItem *parent = 0); - ~ParamTreeItem(); - - void appendChild(ParamTreeItem *child); - QString getParamName(); - float getParamValue(); - - ParamTreeItem *child(int row); - int childCount() const; - int columnCount() const; - QVariant data(int column) const; - int row() const; - ParamTreeItem *parent() const; - const QList* children() const; - - protected: - QString paramName; - float paramValue; - -private: - QList childItems; - QList itemData; - ParamTreeItem *parentItem; -}; - -#endif // PARAMTREEITEM_H diff --git a/src/ui/param/ParamTreeModel.cc b/src/ui/param/ParamTreeModel.cc deleted file mode 100644 index fa991ee57..000000000 --- a/src/ui/param/ParamTreeModel.cc +++ /dev/null @@ -1,239 +0,0 @@ -/*===================================================================== - -PIXHAWK Micro Air Vehicle Flying Robotics Toolkit - -(c) 2009, 2010 PIXHAWK PROJECT - -This file is part of the PIXHAWK project - - PIXHAWK is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - PIXHAWK is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with PIXHAWK. If not, see . - -======================================================================*/ - -/** - * @file - * @brief Implementation of class ParamTreeModel - * @author Lorenz Meier - * - */ - -#include - -#include "ParamTreeItem.h" -#include "ParamTreeModel.h" - -ParamTreeModel::ParamTreeModel(QObject *parent) - : QAbstractItemModel(parent), - components() -{ - QList rootData; - rootData << tr("Parameter") << tr("Value"); - rootItem = new ParamTreeItem(rootData); - - //String data = "IMU\n ROLL_K_I\t1.255\n PITCH_K_P\t0.621\n PITCH_K_I\t2.5545\n"; - //setupModelData(data.split(QString("\n")), rootItem); -} - -ParamTreeModel::ParamTreeModel(const QString &data, QObject *parent) - : QAbstractItemModel(parent), - components() -{ - QList rootData; - rootData << tr("Parameter") << tr("Value"); - rootItem = new ParamTreeItem(rootData); - setupModelData(data.split(QString("\n")), rootItem); -} - -ParamTreeModel::~ParamTreeModel() -{ - delete rootItem; -} - -int ParamTreeModel::columnCount(const QModelIndex &parent) const -{ - if (parent.isValid()) - return static_cast(parent.internalPointer())->columnCount(); - else - return rootItem->columnCount(); -} - -QVariant ParamTreeModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - - if (role != Qt::DisplayRole) - return QVariant(); - - ParamTreeItem *item = static_cast(index.internalPointer()); - - return item->data(index.column()); -} - -bool ParamTreeModel::setData (const QModelIndex & index, const QVariant & value, int role) -{ - -} - -Qt::ItemFlags ParamTreeModel::flags(const QModelIndex &index) const -{ - if (!index.isValid()) - return 0; - - return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; -} - -QVariant ParamTreeModel::headerData(int section, Qt::Orientation orientation, - int role) const -{ - if (orientation == Qt::Horizontal && role == Qt::DisplayRole) - return rootItem->data(section); - - return QVariant(); -} - -QModelIndex ParamTreeModel::index(int row, int column, const QModelIndex &parent) - const -{ - if (!hasIndex(row, column, parent)) - return QModelIndex(); - - ParamTreeItem *parentItem; - - if (!parent.isValid()) - parentItem = rootItem; - else - parentItem = static_cast(parent.internalPointer()); - - ParamTreeItem *childItem = parentItem->child(row); - if (childItem) - return createIndex(row, column, childItem); - else - return QModelIndex(); -} - -QModelIndex ParamTreeModel::parent(const QModelIndex &index) const -{ - if (!index.isValid()) - return QModelIndex(); - - ParamTreeItem *childItem = static_cast(index.internalPointer()); - ParamTreeItem *parentItem = childItem->parent(); - - if (parentItem == rootItem) - return QModelIndex(); - - return createIndex(parentItem->row(), 0, parentItem); -} - -int ParamTreeModel::rowCount(const QModelIndex &parent) const -{ - ParamTreeItem *parentItem; - if (parent.column() > 0) - return 0; - - if (!parent.isValid()) - parentItem = rootItem; - else - parentItem = static_cast(parent.internalPointer()); - - return parentItem->childCount(); -} - -ParamTreeItem* ParamTreeModel::getNodeForComponentId(int id) -{ - return components.value(id); -} - -void ParamTreeModel::appendComponent(int componentId, QString name) -{ - if (!components.contains(componentId)) - { - ParamTreeItem* item = new ParamTreeItem(name + QString("(#") + QString::number(componentId) + QString(")"), 0, rootItem); - components.insert(componentId, item); - } -} - -void ParamTreeModel::appendComponent(int componentId) -{ - if (!components.contains(componentId)) - { - ParamTreeItem* item = new ParamTreeItem(QString("Component #") + QString::number(componentId) + QString(""), 0, rootItem); - components.insert(componentId, item); - } - //emit dataChanged(); -} - -void ParamTreeModel::appendParam(int componentId, QString name, float value) -{ - // If component does not exist yet - if (!components.contains(componentId)) - { - appendComponent(componentId); - } - ParamTreeItem* comp = components.value(componentId); - // FIXME Children may be double here - comp->appendChild(new ParamTreeItem(name, value, comp)); - qDebug() << __FILE__ << __LINE__ << "Added param" << name << value << "for component" << comp->getParamName(); - emit dataChanged(createIndex(0, 0, rootItem), createIndex(0, 0, rootItem)); -} - -void ParamTreeModel::setupModelData(const QStringList &lines, ParamTreeItem *parent) -{ - QList parents; - QList indentations; - parents << parent; - indentations << 0; - - int number = 0; - - while (number < lines.count()) { - int position = 0; - while (position < lines[number].length()) { - if (lines[number].mid(position, 1) != " ") - break; - position++; - } - - QString lineData = lines[number].mid(position).trimmed(); - - if (!lineData.isEmpty()) { - // Read the column data from the rest of the line. - QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts); - QList columnData; - for (int column = 0; column < columnStrings.count(); ++column) - columnData << columnStrings[column]; - - if (position > indentations.last()) { - // The last child of the current parent is now the new parent - // unless the current parent has no children. - - if (parents.last()->childCount() > 0) { - parents << parents.last()->child(parents.last()->childCount()-1); - indentations << position; - } - } else { - while (position < indentations.last() && parents.count() > 0) { - parents.pop_back(); - indentations.pop_back(); - } - } - - // Append a new item to the current parent's list of children. - parents.last()->appendChild(new ParamTreeItem(columnData, parents.last())); - } - - number++; - } -} diff --git a/src/ui/param/ParamTreeModel.h b/src/ui/param/ParamTreeModel.h deleted file mode 100644 index 1852c16ef..000000000 --- a/src/ui/param/ParamTreeModel.h +++ /dev/null @@ -1,78 +0,0 @@ -/*===================================================================== - -PIXHAWK Micro Air Vehicle Flying Robotics Toolkit - -(c) 2009, 2010 PIXHAWK PROJECT - -This file is part of the PIXHAWK project - - PIXHAWK is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - PIXHAWK is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with PIXHAWK. If not, see . - -======================================================================*/ - -/** - * @file - * @brief Definition of class ParamParamTreeModel - * @author Lorenz Meier - * - */ - -#ifndef PARAMTREEMODEL_H -#define PARAMTREEMODEL_H - -#include -#include -#include - -class ParamTreeItem; - -class ParamTreeModel : public QAbstractItemModel -{ - Q_OBJECT - -public: - ParamTreeModel(QObject *parent = 0); - ParamTreeModel(const QString &data, QObject *parent = 0); - ~ParamTreeModel(); - - QVariant data(const QModelIndex &index, int role) const; - bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ); - Qt::ItemFlags flags(const QModelIndex &index) const; - QVariant headerData(int section, Qt::Orientation orientation, - int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column, - const QModelIndex &parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - -public slots: - /** @brief Add a new parameter */ - void appendParam(int componentId, QString name, float value); - /** @brief Add a new component for this system */ - void appendComponent(int componentId, QString name); - /** @brief Add a new component for this system */ - void appendComponent(int componentId); - -protected: - ParamTreeItem* getNodeForComponentId(int id); - - QMap components; - -private: - void setupModelData(const QStringList &lines, ParamTreeItem *parent); - - ParamTreeItem *rootItem; -}; -#endif // PARAMParamTreeModel_H -- 2.22.0