QGCUASParamManager.cc 4.27 KB
Newer Older
1 2
#include "QGCUASParamManager.h"

tstellanova's avatar
tstellanova committed
3 4
#include <QApplication>>
#include <QDir>
5
#include <QMessageBox>
tstellanova's avatar
tstellanova committed
6 7

#include "UASInterface.h"
tstellanova's avatar
tstellanova committed
8 9
#include "UASParameterCommsMgr.h"

10 11
QGCUASParamManager::QGCUASParamManager(QObject *parent, UASInterface* uas) :
    QObject(parent),
tstellanova's avatar
tstellanova committed
12
    mav(uas),
13
    paramDataModel(this),
tstellanova's avatar
tstellanova committed
14
    paramCommsMgr(NULL)
15
{
16
    paramCommsMgr = new UASParameterCommsMgr(this,mav);
tstellanova's avatar
tstellanova committed
17 18 19

    // Load default values and tooltips
    loadParamMetaInfoCSV();
20 21 22

    connectToCommsMgr();

23 24
}

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
void QGCUASParamManager::connectToCommsMgr()
{

    // Pass along comms mgr status msgs
    connect(paramCommsMgr, SIGNAL(parameterStatusMsgUpdated(QString,int)),
            this, SIGNAL(parameterStatusMsgUpdated(QString,int)));

    connect(paramCommsMgr, SIGNAL(parameterListUpToDate()),
            this, SIGNAL(parameterListUpToDate()));


}




41

42 43
bool QGCUASParamManager::getParameterValue(int component, const QString& parameter, QVariant& value) const
{
44
    return paramDataModel.getOnboardParamValue(component,parameter,value);
tstellanova's avatar
tstellanova committed
45
}
46

tstellanova's avatar
tstellanova committed
47

48 49 50
void QGCUASParamManager::requestParameterUpdate(int component, const QString& parameter)
{
    if (mav) {
tstellanova's avatar
tstellanova committed
51
        paramCommsMgr->requestParameterUpdate(component,parameter);
52 53 54
    }
}

tstellanova's avatar
tstellanova committed
55 56


tstellanova's avatar
tstellanova committed
57 58 59 60 61 62
/**
 * Send a request to deliver the list of onboard parameters
 * to the MAV.
 */
void QGCUASParamManager::requestParameterList()
{
63 64 65
    if (mav) {
        emit parameterStatusMsgUpdated(tr("Requested param list.. waiting"), UASParameterCommsMgr::ParamCommsStatusLevel_OK);
        paramCommsMgr->requestParameterList();
tstellanova's avatar
tstellanova committed
66 67
    }
}
68

69
void QGCUASParamManager::requestParameterListIfEmpty()
70
{
71 72 73 74 75 76
    if (mav) {
        int totalOnboard = paramDataModel.countOnboardParams();
        if (totalOnboard < 2) { //TODO arbitrary constant, maybe 0 is OK?
            requestParameterList();
        }
    }
77 78
}

79

80
void QGCUASParamManager::setParamDescriptions(const QMap<QString,QString>& paramInfo) {
81
    paramDataModel.setParamDescriptions(paramInfo);
82 83 84
}


85
void QGCUASParamManager::setParameter(int compId, QString paramName, QVariant value)
tstellanova's avatar
tstellanova committed
86
{
87
    paramDataModel.updatePendingParamWithValue(compId,paramName,value);
tstellanova's avatar
tstellanova committed
88
}
tstellanova's avatar
tstellanova committed
89

tstellanova's avatar
tstellanova committed
90 91 92 93 94
void QGCUASParamManager::sendPendingParameters()
{
    paramCommsMgr->sendPendingParameters();
}

95 96
void QGCUASParamManager::setPendingParam(int compId,  QString& paramName,  const QVariant& value)
{
97
    paramDataModel.updatePendingParamWithValue(compId,paramName,value);
98 99
}

tstellanova's avatar
tstellanova committed
100

tstellanova's avatar
tstellanova committed
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

void QGCUASParamManager::loadParamMetaInfoCSV()
{
    // Load default values and tooltips
    QString autopilot(mav->getAutopilotTypeName());

    QDir appDir = QApplication::applicationDirPath();
    appDir.cd("files");
    QString fileName = QString("%1/%2/parameter_tooltips/tooltips.txt").arg(appDir.canonicalPath()).arg(autopilot.toLower());
    QFile paramMetaFile(fileName);

    qDebug() << "loadParamMetaInfoCSV for autopilot: " << autopilot << " from file: " << fileName;

    if (!paramMetaFile.open(QIODevice::ReadOnly | QIODevice::Text))  {
        qWarning() << "loadParamMetaInfoCSV couldn't open:" << fileName;
        return;
    }

    QTextStream in(&paramMetaFile);
120
    paramDataModel.loadParamMetaInfoFromStream(in);
tstellanova's avatar
tstellanova committed
121 122 123 124
    paramMetaFile.close();

}

125

tstellanova's avatar
tstellanova committed
126 127 128 129
UASInterface* QGCUASParamManager::getUAS()
{
    return mav;
}
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175

UASParameterDataModel* QGCUASParamManager::dataModel()
{
    return &paramDataModel;
}



void QGCUASParamManager::writeOnboardParamsToStream(QTextStream &stream, const QString& uasName)
{
    paramDataModel.writeOnboardParamsToStream(stream,uasName);
}

void QGCUASParamManager::readPendingParamsFromStream(QTextStream &stream)
{
    paramDataModel.readUpdateParamsFromStream(stream);
}



void QGCUASParamManager::copyVolatileParamsToPersistent()
{
    int changedParamCount = paramDataModel.countPendingParams();

    if (changedParamCount > 0) {
        QMessageBox msgBox;
        msgBox.setText(tr("There are locally changed parameters. Please transmit them first (<TRANSMIT>) or update them with the onboard values (<REFRESH>) before storing onboard from RAM to ROM."));
        msgBox.exec();
    }
    else {
        paramCommsMgr->writeParamsToPersistentStorage();
    }
}


void QGCUASParamManager::copyPersistentParamsToVolatile()
{
    if (mav) {
        mav->readParametersFromStorage(); //TODO use comms mgr instead?
    }
}


void QGCUASParamManager::requestRcCalibrationParamsUpdate() {
    paramCommsMgr->requestRcCalibrationParamsUpdate();
}