From 30b165c30260fcd6ad974ccc6ebe37b926c809f6 Mon Sep 17 00:00:00 2001 From: edouard Date: Sun, 9 Jan 2011 13:11:32 +0000 Subject: [PATCH] Update to Dials widget to check for NaN values in UAVObjects: a NaN can cause the GCS to freeze inside the dial repaint operations. This will ensure that the GCS does not freeze if things go south on the firmware. git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2352 ebee16cc-31ac-478f-84a7-5cbb03baadba --- ground/src/plugins/dial/dialgadgetwidget.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/ground/src/plugins/dial/dialgadgetwidget.cpp b/ground/src/plugins/dial/dialgadgetwidget.cpp index 8ba0792d1..ac5525279 100644 --- a/ground/src/plugins/dial/dialgadgetwidget.cpp +++ b/ground/src/plugins/dial/dialgadgetwidget.cpp @@ -161,8 +161,12 @@ void DialGadgetWidget::updateNeedle1(UAVObject *object1) { if(haveSubField1){ int indexOfSubField = field->getElementNames().indexOf(QRegExp(subfield1, Qt::CaseSensitive, QRegExp::FixedString)); value = field->getDouble(indexOfSubField); - }else + } else value = field->getDouble(); + if (value != value) { + qDebug() << "Dial widget: encountered NaN !!"; + return; + } setNeedle1(value); } else { qDebug() << "Wrong field, maybe an issue with object disconnection ?"; @@ -179,8 +183,12 @@ void DialGadgetWidget::updateNeedle2(UAVObject *object2) { if(haveSubField2){ int indexOfSubField = field->getElementNames().indexOf(QRegExp(subfield2, Qt::CaseSensitive, QRegExp::FixedString)); value = field->getDouble(indexOfSubField); - }else + } else value = field->getDouble(); + if (value != value) { + qDebug() << "Dial widget: encountered NaN !!"; + return; + } setNeedle2(value); } else { qDebug() << "Wrong field, maybe an issue with object disconnection ?"; @@ -197,8 +205,12 @@ void DialGadgetWidget::updateNeedle3(UAVObject *object3) { if(haveSubField3){ int indexOfSubField = field->getElementNames().indexOf(QRegExp(subfield3, Qt::CaseSensitive, QRegExp::FixedString)); value = field->getDouble(indexOfSubField); - }else + } else value = field->getDouble(); + if (value != value) { + qDebug() << "Dial widget: encountered NaN !!"; + return; + } setNeedle3(value); } else { qDebug() << "Wrong field, maybe an issue with object disconnection ?";