Commit 548a0097 authored by tstellanova's avatar tstellanova

wip decoupling the UI (view) from the param data model

parent bb7d4c2d
......@@ -468,7 +468,8 @@ HEADERS += src/MG.h \
src/ui/configuration/SerialSettingsDialog.h \
src/ui/configuration/terminalconsole.h \
src/ui/configuration/ApmHighlighter.h \
src/ui/configuration/ApmFirmwareConfig.h
src/ui/configuration/ApmFirmwareConfig.h \
src/uas/UASParameterDataModel.h
# Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h
......@@ -683,7 +684,8 @@ SOURCES += src/main.cc \
src/ui/configuration/console.cpp \
src/ui/configuration/SerialSettingsDialog.cc \
src/ui/configuration/ApmHighlighter.cc \
src/ui/configuration/ApmFirmwareConfig.cc
src/ui/configuration/ApmFirmwareConfig.cc \
src/uas/UASParameterDataModel.cc
# Enable Google Earth only on Mac OS and Windows with Visual Studio compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc
......
......@@ -12,6 +12,7 @@ QGCUASParamManager::QGCUASParamManager(UASInterface* uas, QWidget *parent) :
retransmissionBurstRequestSize(5)
{
uas->setParamManager(this);
paramDataModel = uas->getParamDataModel();
}
......
......@@ -7,6 +7,7 @@
#include <QVariant>
class UASInterface;
class UASParameterDataModel;
class QGCUASParamManager : public QWidget
{
......@@ -62,9 +63,14 @@ public slots:
virtual void requestParameterList() = 0;
protected:
//Parameter data model
UASInterface* mav; ///< The MAV this widget is controlling
QMap<int, QMap<QString, QVariant>* > changedValues; ///< Changed values
// QMap<int, QMap<QString, QVariant>* > changedValues; ///< Changed values
QMap<int, QMap<QString, QVariant>* > parameters; ///< All parameters
UASParameterDataModel* paramDataModel;///< Shared data model of parameters
// Communications management
QVector<bool> received; ///< Successfully received parameters
QMap<int, QList<int>* > transmissionMissingPackets; ///< Missing packets
QMap<int, QMap<QString, QVariant>* > transmissionMissingWriteAckPackets; ///< Missing write ACK packets
......
......@@ -131,6 +131,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
paramsOnceRequested(false),
paramManager(NULL),
paramDataModel(NULL),
simulation(0),
......@@ -151,6 +152,8 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
componentMulti[i] = false;
}
paramDataModel->setUASID(this->getUASID());
// Store a list of available actions for this UAS.
// Basically everything exposted as a SLOT with no return value or arguments.
......
......@@ -492,6 +492,7 @@ protected: //COMMENTS FOR TEST UNIT
QMap<int, QMap<QString, QVariant>* > parameters; ///< All parameters
bool paramsOnceRequested; ///< If the parameter list has been read at least once
QGCUASParamManager* paramManager; ///< Parameter manager class
UASParameterDataModel* paramDataModel; ///< The parameter data model for this UAS
/// SIMULATION
QGCHilLink* simulation; ///< Hardware in the loop simulation link
......@@ -519,10 +520,20 @@ public:
QGCUASParamManager* getParamManager() const {
return paramManager;
}
/** @brief Get reference to the parameter data model (same one shared with the parameter manager) **/
UASParameterDataModel* getParamDataModel() {
return paramDataModel;
}
/** @brief Get the HIL simulation */
QGCHilLink* getHILSimulation() const {
return simulation;
}
// TODO Will be removed
/** @brief Set reference to the param manager **/
void setParamManager(QGCUASParamManager* manager) {
......@@ -949,6 +960,7 @@ protected:
quint64 lastSendTimeSensors;
QList<QAction*> actions; ///< A list of actions that this UAS can perform.
protected slots:
/** @brief Write settings to disk */
void writeSettings();
......
......@@ -40,6 +40,7 @@ This file is part of the QGROUNDCONTROL project
#include "LinkInterface.h"
#include "ProtocolInterface.h"
#include "UASParameterDataModel.h"
#include "UASWaypointManager.h"
#include "QGCUASParamManager.h"
#include "RadioCalibration/RadioCalibrationData.h"
......@@ -152,8 +153,13 @@ public:
/** @brief Get reference to the waypoint manager **/
virtual UASWaypointManager* getWaypointManager(void) = 0;
/** @brief Access the parameter data model for this UAS (sans widget). This is the same parameter data model used by the parameter manager. **/
virtual UASParameterDataModel* getParamDataModel() = 0;
/** @brief Get reference to the param manager **/
virtual QGCUASParamManager* getParamManager() const = 0;
// TODO Will be removed
/** @brief Set reference to the param manager **/
virtual void setParamManager(QGCUASParamManager* manager) = 0;
......
#include "UASParameterDataModel.h"
#include <QVariant>
UASParameterDataModel::UASParameterDataModel(QObject *parent) :
QObject(parent)
{
}
void UASParameterDataModel::setPendingParameter(int componentId, QString& key, QVariant &value)
{
QMap<QString, QVariant> *compPendingParams = pendingParameters.value(componentId);
//TODO insert blank map if necessary
if (NULL == compPendingParams) {
pendingParameters.insert(componentId,new QMap<QString, QVariant>());
compPendingParams = pendingParameters.value(componentId);
}
compPendingParams->insert(key,value);
}
#ifndef UASPARAMETERDATAMODEL_H
#define UASPARAMETERDATAMODEL_H
#include <QMap>
#include <QObject>
#include <QVariant>
class UASParameterDataModel : public QObject
{
Q_OBJECT
public:
explicit UASParameterDataModel(QObject *parent = 0);
/** @brief Write a new pending parameter value that may be eventually sent to the UAS */
virtual void setPendingParameter(int componentId, QString& paramKey, QVariant& paramValue) = 0;
QMap<int, QMap<QString, QVariant>* > getPendingParameters() {
return pendingParameters;
}
QMap<int, QMap<QString, QVariant>* > getOnboardParameters() {
return onboardParameters;
}
void setUASID(int anId) { this->uasId = anId; }
signals:
public slots:
protected:
int uasId; ///< The UAS / MAV to which this data model pertains
QMap<int, QMap<QString, QVariant>* > pendingParameters; ///< Changed values that have not yet been transmitted to the UAS, by component ID
QMap<int, QMap<QString, QVariant>* > onboardParameters; ///< All parameters confirmed to be stored onboard the UAS, by component ID
};
#endif // UASPARAMETERDATAMODEL_H
This diff is collapsed.
......@@ -71,9 +71,9 @@ public slots:
/** @brief Add a component to the list */
void addComponent(int uas, int component, QString componentName);
/** @brief Add a parameter to the list with retransmission / safety checks */
void addParameter(int uas, int component, int paramCount, int paramId, QString parameterName, QVariant value);
void receivedParameterUpdate(int uas, int component, int paramCount, int paramId, QString parameterName, QVariant value);
/** @brief Add a parameter to the list */
void addParameter(int uas, int component, QString parameterName, QVariant value);
void receivedParameterUpdate(int uas, int component, QString parameterName, QVariant value);
/** @brief Request list of parameters from MAV */
void requestParameterList();
/** @brief Request one single parameter */
......@@ -92,9 +92,11 @@ public slots:
void parameterItemChanged(QTreeWidgetItem* prev, int column);
/** @brief Store parameters to a file */
void saveParameters();
void saveParametersToFile();
/** @brief Load parameters from a file */
void loadParameters();
void loadParametersFromFile();
void loadedParameterForComponent(int componentId, QStringList& wpParams );
/** @brief Check for missing parameters */
void retransmissionGuardTick();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment