|
|
@ -27,16 +27,17 @@ This file is part of the QGROUNDCONTROL project |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
#include <cmath> |
|
|
|
#include <cmath> |
|
|
|
#include <float.h> |
|
|
|
#include <float.h> |
|
|
|
#include <QGridLayout> |
|
|
|
#include <QApplication> |
|
|
|
#include <QPushButton> |
|
|
|
#include <QDebug> |
|
|
|
#include <QFileDialog> |
|
|
|
|
|
|
|
#include <QFile> |
|
|
|
#include <QFile> |
|
|
|
|
|
|
|
#include <QFileDialog> |
|
|
|
|
|
|
|
#include <QGridLayout> |
|
|
|
|
|
|
|
|
|
|
|
#include <QList> |
|
|
|
#include <QList> |
|
|
|
#include <QTime> |
|
|
|
|
|
|
|
#include <QSettings> |
|
|
|
|
|
|
|
#include <QMessageBox> |
|
|
|
#include <QMessageBox> |
|
|
|
#include <QApplication> |
|
|
|
#include <QPushButton> |
|
|
|
#include <QDebug> |
|
|
|
#include <QSettings> |
|
|
|
|
|
|
|
#include <QTime> |
|
|
|
|
|
|
|
|
|
|
|
#include "MainWindow.h" |
|
|
|
#include "MainWindow.h" |
|
|
|
#include "QGC.h" |
|
|
|
#include "QGC.h" |
|
|
@ -338,7 +339,7 @@ void QGCParamWidget::handleParameterUpdate(int componentId, int paramCount, int |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void QGCParamWidget::handleParameterListUpToDate(int component) |
|
|
|
void QGCParamWidget::handleParameterListUpToDate() |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Expand visual tree
|
|
|
|
// Expand visual tree
|
|
|
|
tree->expandItem(tree->topLevelItem(0)); |
|
|
|
tree->expandItem(tree->topLevelItem(0)); |
|
|
@ -593,94 +594,95 @@ void QGCParamWidget::writeParameters() |
|
|
|
* @param parameterName name of the parameter, as delivered by the system |
|
|
|
* @param parameterName name of the parameter, as delivered by the system |
|
|
|
* @param value value of the parameter |
|
|
|
* @param value value of the parameter |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
void QGCParamWidget::setParameter(int component, QString parameterName, QVariant value) |
|
|
|
//void QGCParamWidget::setParameter(int component, QString parameterName, QVariant value)
|
|
|
|
{ |
|
|
|
//{
|
|
|
|
if (parameterName.isEmpty()) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double dblValue = value.toDouble(); |
|
|
|
// if (parameterName.isEmpty()) {
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
if (paramDataModel->isValueLessThanParamMin(parameterName,dblValue)) { |
|
|
|
// double dblValue = value.toDouble();
|
|
|
|
statusLabel->setText(tr("REJ. %1, %2 < min").arg(parameterName).arg(dblValue)); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (paramDataModel->isValueGreaterThanParamMax(parameterName,dblValue)) { |
|
|
|
|
|
|
|
statusLabel->setText(tr("REJ. %1, %2 > max").arg(parameterName).arg(dblValue)); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
QVariant onboardVal; |
|
|
|
|
|
|
|
paramDataModel->getOnboardParameterValue(component,parameterName,onboardVal); |
|
|
|
|
|
|
|
if (onboardVal == value) { |
|
|
|
|
|
|
|
statusLabel->setText(tr("REJ. %1 already %2").arg(parameterName).arg(dblValue)); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//int paramType = (int)onboardParameters.value(component)->value(parameterName).type();
|
|
|
|
// if (paramDataModel->isValueLessThanParamMin(parameterName,dblValue)) {
|
|
|
|
int paramType = (int)value.type(); |
|
|
|
// statusLabel->setText(tr("REJ. %1, %2 < min").arg(parameterName).arg(dblValue));
|
|
|
|
switch (paramType) |
|
|
|
// return;
|
|
|
|
{ |
|
|
|
// }
|
|
|
|
case QVariant::Char: |
|
|
|
// if (paramDataModel->isValueGreaterThanParamMax(parameterName,dblValue)) {
|
|
|
|
{ |
|
|
|
// statusLabel->setText(tr("REJ. %1, %2 > max").arg(parameterName).arg(dblValue));
|
|
|
|
QVariant fixedValue(QChar((unsigned char)value.toInt())); |
|
|
|
// return;
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
// }
|
|
|
|
//qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
// QVariant onboardVal;
|
|
|
|
} |
|
|
|
// paramDataModel->getOnboardParameterValue(component,parameterName,onboardVal);
|
|
|
|
break; |
|
|
|
// if (onboardVal == value) {
|
|
|
|
case QVariant::Int: |
|
|
|
// statusLabel->setText(tr("REJ. %1 already %2").arg(parameterName).arg(dblValue));
|
|
|
|
{ |
|
|
|
// return;
|
|
|
|
QVariant fixedValue(value.toInt()); |
|
|
|
// }
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
|
|
|
|
//qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QVariant::UInt: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toUInt()); |
|
|
|
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
|
|
|
|
//qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QMetaType::Float: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toFloat()); |
|
|
|
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
|
|
|
|
//qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Wait for parameter to be written back
|
|
|
|
// //int paramType = (int)onboardParameters.value(component)->value(parameterName).type();
|
|
|
|
// mark it therefore as missing
|
|
|
|
// int paramType = (int)value.type();
|
|
|
|
if (!transmissionMissingWriteAckPackets.contains(component)) |
|
|
|
// switch (paramType)
|
|
|
|
{ |
|
|
|
// {
|
|
|
|
transmissionMissingWriteAckPackets.insert(component, new QMap<QString, QVariant>()); |
|
|
|
// case QVariant::Char:
|
|
|
|
} |
|
|
|
// {
|
|
|
|
|
|
|
|
// QVariant fixedValue(QChar((unsigned char)value.toInt()));
|
|
|
|
|
|
|
|
// emit parameterChanged(component, parameterName, fixedValue);
|
|
|
|
|
|
|
|
// //qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
// case QVariant::Int:
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// QVariant fixedValue(value.toInt());
|
|
|
|
|
|
|
|
// emit parameterChanged(component, parameterName, fixedValue);
|
|
|
|
|
|
|
|
// //qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
// case QVariant::UInt:
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// QVariant fixedValue(value.toUInt());
|
|
|
|
|
|
|
|
// emit parameterChanged(component, parameterName, fixedValue);
|
|
|
|
|
|
|
|
// //qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
// case QMetaType::Float:
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// QVariant fixedValue(value.toFloat());
|
|
|
|
|
|
|
|
// emit parameterChanged(component, parameterName, fixedValue);
|
|
|
|
|
|
|
|
// //qDebug() << "PARAM WIDGET SENT:" << fixedValue;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
// default:
|
|
|
|
|
|
|
|
// qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// Insert it in missing write ACK list
|
|
|
|
// // Wait for parameter to be written back
|
|
|
|
transmissionMissingWriteAckPackets.value(component)->insert(parameterName, value); |
|
|
|
// // mark it therefore as missing
|
|
|
|
|
|
|
|
// if (!transmissionMissingWriteAckPackets.contains(component))
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// transmissionMissingWriteAckPackets.insert(component, new QMap<QString, QVariant>());
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// Set timeouts
|
|
|
|
// // Insert it in missing write ACK list
|
|
|
|
if (transmissionActive) |
|
|
|
// transmissionMissingWriteAckPackets.value(component)->insert(parameterName, value);
|
|
|
|
{ |
|
|
|
|
|
|
|
transmissionTimeout += rewriteTimeout; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
quint64 newTransmissionTimeout = QGC::groundTimeMilliseconds() + rewriteTimeout; |
|
|
|
|
|
|
|
if (newTransmissionTimeout > transmissionTimeout) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
transmissionTimeout = newTransmissionTimeout; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
transmissionActive = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Enable guard / reset timeouts
|
|
|
|
// // Set timeouts
|
|
|
|
paramCommsMgr->setRetransmissionGuardEnabled(true); //TODO
|
|
|
|
// if (transmissionActive)
|
|
|
|
} |
|
|
|
// {
|
|
|
|
|
|
|
|
// transmissionTimeout += rewriteTimeout;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// else
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// quint64 newTransmissionTimeout = QGC::groundTimeMilliseconds() + rewriteTimeout;
|
|
|
|
|
|
|
|
// if (newTransmissionTimeout > transmissionTimeout)
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// transmissionTimeout = newTransmissionTimeout;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// transmissionActive = true;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Enable guard / reset timeouts
|
|
|
|
|
|
|
|
// paramCommsMgr->setRetransmissionGuardEnabled(true); //TODO
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
void QGCParamWidget::readParameters() |
|
|
|
void QGCParamWidget::readParameters() |
|
|
|
{ |
|
|
|
{ |
|
|
@ -696,3 +698,20 @@ void QGCParamWidget::clear() |
|
|
|
tree->clear(); |
|
|
|
tree->clear(); |
|
|
|
componentItems->clear(); |
|
|
|
componentItems->clear(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void QGCParamWidget::handleParamStatusMsgUpdate(QString msg, int level) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QColor bgColor = QGC::colorGreen; |
|
|
|
|
|
|
|
if ((int)UASParameterCommsMgr::ParamCommsStatusLevel_Warning == level) { |
|
|
|
|
|
|
|
bgColor = QGC::colorOrange; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if ((int)UASParameterCommsMgr::ParamCommsStatusLevel_Error == level) { |
|
|
|
|
|
|
|
bgColor = QGC::colorRed; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QPalette pal = statusLabel->palette(); |
|
|
|
|
|
|
|
pal.setColor(backgroundRole(), bgColor); |
|
|
|
|
|
|
|
statusLabel->setPalette(pal); |
|
|
|
|
|
|
|
statusLabel->setText(msg); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|