Commit ea212bd0 authored by Don Gagne's avatar Don Gagne

Update to unit test

parent 63998bda
...@@ -27,6 +27,7 @@ MissionManager::MissionManager(Vehicle* vehicle) ...@@ -27,6 +27,7 @@ MissionManager::MissionManager(Vehicle* vehicle)
, _readTransactionInProgress(false) , _readTransactionInProgress(false)
, _writeTransactionInProgress(false) , _writeTransactionInProgress(false)
, _resumeMission(false) , _resumeMission(false)
, _lastMissionRequest(-1)
, _currentMissionIndex(-1) , _currentMissionIndex(-1)
, _lastCurrentIndex(-1) , _lastCurrentIndex(-1)
{ {
...@@ -46,6 +47,8 @@ MissionManager::~MissionManager() ...@@ -46,6 +47,8 @@ MissionManager::~MissionManager()
void MissionManager::_writeMissionItemsWorker(void) void MissionManager::_writeMissionItemsWorker(void)
{ {
_lastMissionRequest = -1;
emit newMissionItemsAvailable(_missionItems.count() == 0); emit newMissionItemsAvailable(_missionItems.count() == 0);
qCDebug(MissionManagerLog) << "writeMissionItems count:" << _missionItems.count(); qCDebug(MissionManagerLog) << "writeMissionItems count:" << _missionItems.count();
...@@ -511,7 +514,8 @@ void MissionManager::_handleMissionRequest(const mavlink_message_t& message, boo ...@@ -511,7 +514,8 @@ void MissionManager::_handleMissionRequest(const mavlink_message_t& message, boo
} }
mavlink_msg_mission_request_decode(&message, &missionRequest); mavlink_msg_mission_request_decode(&message, &missionRequest);
_lastMissionRequest = missionRequest.seq;
if (!_itemIndicesToWrite.contains(missionRequest.seq)) { if (!_itemIndicesToWrite.contains(missionRequest.seq)) {
if (missionRequest.seq > _missionItems.count()) { if (missionRequest.seq > _missionItems.count()) {
_sendError(RequestRangeError, QString("Vehicle requested item outside range, count:request %1:%2. Send to Vehicle failed.").arg(_missionItems.count()).arg(missionRequest.seq)); _sendError(RequestRangeError, QString("Vehicle requested item outside range, count:request %1:%2. Send to Vehicle failed.").arg(_missionItems.count()).arg(missionRequest.seq));
...@@ -637,7 +641,7 @@ void MissionManager::_handleMissionAck(const mavlink_message_t& message) ...@@ -637,7 +641,7 @@ void MissionManager::_handleMissionAck(const mavlink_message_t& message)
qCDebug(MissionManagerLog) << "_handleMissionAck guided mode item accepted"; qCDebug(MissionManagerLog) << "_handleMissionAck guided mode item accepted";
_finishTransaction(true); _finishTransaction(true);
} else { } else {
_sendError(VehicleError, QString("Vehicle returned error: %1. Vehicle did not accept guided item.").arg(_missionResultToString((MAV_MISSION_RESULT)missionAck.type))); _sendError(VehicleError, QString("Vehicle returned error: %1. %2Vehicle did not accept guided item.").arg(_missionResultToString((MAV_MISSION_RESULT)missionAck.type)));
_finishTransaction(false); _finishTransaction(false);
} }
break; break;
...@@ -708,58 +712,97 @@ QString MissionManager::_ackTypeToString(AckType_t ackType) ...@@ -708,58 +712,97 @@ QString MissionManager::_ackTypeToString(AckType_t ackType)
} }
} }
QString MissionManager::_lastMissionReqestString(MAV_MISSION_RESULT result)
{
if (_lastMissionRequest != -1 && _lastMissionRequest >= 0 && _lastMissionRequest < _missionItems.count()) {
MissionItem* item = _missionItems[_lastMissionRequest];
switch (result) {
case MAV_MISSION_UNSUPPORTED_FRAME:
return QString(". Frame: %1").arg(item->frame());
case MAV_MISSION_UNSUPPORTED:
return QString(". Command: %1").arg(item->command());
case MAV_MISSION_INVALID_PARAM1:
return QString(". Param1: %1").arg(item->param1());
case MAV_MISSION_INVALID_PARAM2:
return QString(". Param2: %1").arg(item->param2());
case MAV_MISSION_INVALID_PARAM3:
return QString(". Param3: %1").arg(item->param3());
case MAV_MISSION_INVALID_PARAM4:
return QString(". Param4: %1").arg(item->param4());
case MAV_MISSION_INVALID_PARAM5_X:
return QString(". Param5: %1").arg(item->param5());
case MAV_MISSION_INVALID_PARAM6_Y:
return QString(". Param6: %1").arg(item->param6());
case MAV_MISSION_INVALID_PARAM7:
return QString(". Param7: %1").arg(item->param7());
case MAV_MISSION_INVALID_SEQUENCE:
return QString(". Sequence: %1").arg(item->sequenceNumber());
default:
break;
}
}
return QString();
}
QString MissionManager::_missionResultToString(MAV_MISSION_RESULT result) QString MissionManager::_missionResultToString(MAV_MISSION_RESULT result)
{ {
QString resultString;
QString lastRequestString = _lastMissionReqestString(result);
switch (result) { switch (result) {
case MAV_MISSION_ACCEPTED: case MAV_MISSION_ACCEPTED:
return QString("Mission accepted (MAV_MISSION_ACCEPTED)"); resultString = QString("Mission accepted (MAV_MISSION_ACCEPTED)");
break; break;
case MAV_MISSION_ERROR: case MAV_MISSION_ERROR:
return QString("Unspecified error (MAV_MISSION_ERROR)"); resultString = QString("Unspecified error (MAV_MISSION_ERROR)");
break; break;
case MAV_MISSION_UNSUPPORTED_FRAME: case MAV_MISSION_UNSUPPORTED_FRAME:
return QString("Coordinate frame is not supported (MAV_MISSION_UNSUPPORTED_FRAME)"); resultString = QString("Coordinate frame is not supported (MAV_MISSION_UNSUPPORTED_FRAME)");
break; break;
case MAV_MISSION_UNSUPPORTED: case MAV_MISSION_UNSUPPORTED:
return QString("Command is not supported (MAV_MISSION_UNSUPPORTED)"); resultString = QString("Command is not supported (MAV_MISSION_UNSUPPORTED)");
break; break;
case MAV_MISSION_NO_SPACE: case MAV_MISSION_NO_SPACE:
return QString("Mission item exceeds storage space (MAV_MISSION_NO_SPACE)"); resultString = QString("Mission item exceeds storage space (MAV_MISSION_NO_SPACE)");
break; break;
case MAV_MISSION_INVALID: case MAV_MISSION_INVALID:
return QString("One of the parameters has an invalid value (MAV_MISSION_INVALID)"); resultString = QString("One of the parameters has an invalid value (MAV_MISSION_INVALID)");
break; break;
case MAV_MISSION_INVALID_PARAM1: case MAV_MISSION_INVALID_PARAM1:
return QString("Param1 has an invalid value (MAV_MISSION_INVALID_PARAM1)"); resultString = QString("Param1 has an invalid value (MAV_MISSION_INVALID_PARAM1)");
break; break;
case MAV_MISSION_INVALID_PARAM2: case MAV_MISSION_INVALID_PARAM2:
return QString("Param2 has an invalid value (MAV_MISSION_INVALID_PARAM2)"); resultString = QString("Param2 has an invalid value (MAV_MISSION_INVALID_PARAM2)");
break; break;
case MAV_MISSION_INVALID_PARAM3: case MAV_MISSION_INVALID_PARAM3:
return QString("param3 has an invalid value (MAV_MISSION_INVALID_PARAM3)"); resultString = QString("Param3 has an invalid value (MAV_MISSION_INVALID_PARAM3)");
break; break;
case MAV_MISSION_INVALID_PARAM4: case MAV_MISSION_INVALID_PARAM4:
return QString("Param4 has an invalid value (MAV_MISSION_INVALID_PARAM4)"); resultString = QString("Param4 has an invalid value (MAV_MISSION_INVALID_PARAM4)");
break; break;
case MAV_MISSION_INVALID_PARAM5_X: case MAV_MISSION_INVALID_PARAM5_X:
return QString("X/Param5 has an invalid value (MAV_MISSION_INVALID_PARAM5_X)"); resultString = QString("X/Param5 has an invalid value (MAV_MISSION_INVALID_PARAM5_X)");
break; break;
case MAV_MISSION_INVALID_PARAM6_Y: case MAV_MISSION_INVALID_PARAM6_Y:
return QString("Y/Param6 has an invalid value (MAV_MISSION_INVALID_PARAM6_Y)"); resultString = QString("Y/Param6 has an invalid value (MAV_MISSION_INVALID_PARAM6_Y)");
break; break;
case MAV_MISSION_INVALID_PARAM7: case MAV_MISSION_INVALID_PARAM7:
return QString("Param7 has an invalid value (MAV_MISSION_INVALID_PARAM7)"); resultString = QString("Param7 has an invalid value (MAV_MISSION_INVALID_PARAM7)");
break; break;
case MAV_MISSION_INVALID_SEQUENCE: case MAV_MISSION_INVALID_SEQUENCE:
return QString("Received mission item out of sequence (MAV_MISSION_INVALID_SEQUENCE)"); resultString = QString("Received mission item out of sequence (MAV_MISSION_INVALID_SEQUENCE)");
break; break;
case MAV_MISSION_DENIED: case MAV_MISSION_DENIED:
return QString("Not accepting any mission commands (MAV_MISSION_DENIED)"); resultString = QString("Not accepting any mission commands (MAV_MISSION_DENIED)");
break; break;
default: default:
qWarning(MissionManagerLog) << "Fell off end of switch statement"; qWarning(MissionManagerLog) << "Fell off end of switch statement";
return QString("QGC Internal Error"); resultString = QString("QGC Internal Error");
} }
return resultString + lastRequestString;
} }
void MissionManager::_finishTransaction(bool success) void MissionManager::_finishTransaction(bool success)
......
...@@ -116,6 +116,7 @@ private: ...@@ -116,6 +116,7 @@ private:
void _writeMissionCount(void); void _writeMissionCount(void);
void _writeMissionItemsWorker(void); void _writeMissionItemsWorker(void);
void _clearAndDeleteMissionItems(void); void _clearAndDeleteMissionItems(void);
QString _lastMissionReqestString(MAV_MISSION_RESULT result);
private: private:
Vehicle* _vehicle; Vehicle* _vehicle;
...@@ -130,6 +131,7 @@ private: ...@@ -130,6 +131,7 @@ private:
bool _resumeMission; bool _resumeMission;
QList<int> _itemIndicesToWrite; ///< List of mission items which still need to be written to vehicle QList<int> _itemIndicesToWrite; ///< List of mission items which still need to be written to vehicle
QList<int> _itemIndicesToRead; ///< List of mission items which still need to be requested from vehicle QList<int> _itemIndicesToRead; ///< List of mission items which still need to be requested from vehicle
int _lastMissionRequest; ///< Index of item last requested by MISSION_REQUEST
QMutex _dataMutex; QMutex _dataMutex;
......
...@@ -118,7 +118,9 @@ SurveyMissionItem::SurveyMissionItem(Vehicle* vehicle, QObject* parent) ...@@ -118,7 +118,9 @@ SurveyMissionItem::SurveyMissionItem(Vehicle* vehicle, QObject* parent)
connect(&_hoverAndCaptureFact, &Fact::valueChanged, this, &SurveyMissionItem::_generateGrid); connect(&_hoverAndCaptureFact, &Fact::valueChanged, this, &SurveyMissionItem::_generateGrid);
connect(this, &SurveyMissionItem::refly90DegreesChanged, this, &SurveyMissionItem::_generateGrid); connect(this, &SurveyMissionItem::refly90DegreesChanged, this, &SurveyMissionItem::_generateGrid);
connect(&_gridAltitudeFact, &Fact::valueChanged, this, &SurveyMissionItem::_updateCoordinateAltitude); connect(&_gridAltitudeFact, &Fact::valueChanged, this, &SurveyMissionItem::_updateCoordinateAltitude);
connect(&_gridAltitudeRelativeFact, &Fact::valueChanged, this, &SurveyMissionItem::_setDirty);
// Signal to Qml when camera value changes so it can recalc // Signal to Qml when camera value changes so it can recalc
connect(&_groundResolutionFact, &Fact::valueChanged, this, &SurveyMissionItem::_cameraValueChanged); connect(&_groundResolutionFact, &Fact::valueChanged, this, &SurveyMissionItem::_cameraValueChanged);
...@@ -562,6 +564,7 @@ void SurveyMissionItem::_updateCoordinateAltitude(void) ...@@ -562,6 +564,7 @@ void SurveyMissionItem::_updateCoordinateAltitude(void)
_exitCoordinate.setAltitude(_gridAltitudeFact.rawValue().toDouble()); _exitCoordinate.setAltitude(_gridAltitudeFact.rawValue().toDouble());
emit coordinateChanged(_coordinate); emit coordinateChanged(_coordinate);
emit exitCoordinateChanged(_exitCoordinate); emit exitCoordinateChanged(_exitCoordinate);
setDirty(true);
} }
QPointF SurveyMissionItem::_rotatePoint(const QPointF& point, const QPointF& origin, double angle) QPointF SurveyMissionItem::_rotatePoint(const QPointF& point, const QPointF& origin, double angle)
......
...@@ -58,13 +58,6 @@ public: ...@@ -58,13 +58,6 @@ public:
Q_PROPERTY(QGCMapPolygon* mapPolygon READ mapPolygon CONSTANT) Q_PROPERTY(QGCMapPolygon* mapPolygon READ mapPolygon CONSTANT)
#if 0
// The polygon vertices are also exposed as a list mode since MapItemView will only work with a QAbstractItemModel as
// opposed to polygonPath which is a QVariantList.
Q_PROPERTY(QmlObjectListModel* polygonModel READ polygonModel CONSTANT)
Q_PROPERTY(QVariantList polygonPath READ polygonPath NOTIFY polygonPathChanged)
#endif
QVariantList gridPoints (void) { return _simpleGridPoints; } QVariantList gridPoints (void) { return _simpleGridPoints; }
Fact* manualGrid (void) { return &_manualGridFact; } Fact* manualGrid (void) { return &_manualGridFact; }
...@@ -160,7 +153,6 @@ public: ...@@ -160,7 +153,6 @@ public:
static const char* cameraName; static const char* cameraName;
signals: signals:
void polygonPathChanged (void);
void gridPointsChanged (void); void gridPointsChanged (void);
void cameraShotsChanged (int cameraShots); void cameraShotsChanged (int cameraShots);
void coveredAreaChanged (double coveredArea); void coveredAreaChanged (double coveredArea);
......
This diff is collapsed.
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <QGeoCoordinate> #include <QGeoCoordinate>
/// Unit test for SimpleMissionItem /// Unit test for SurveyMissionItem
class SurveyMissionItemTest : public UnitTest class SurveyMissionItemTest : public UnitTest
{ {
Q_OBJECT Q_OBJECT
...@@ -32,68 +32,43 @@ protected: ...@@ -32,68 +32,43 @@ protected:
private slots: private slots:
void _testDirty(void); void _testDirty(void);
void _testCameraValueChanged(void);
#if 0
void _testAddPolygonCoordinate(void); void _testAddPolygonCoordinate(void);
void _testClearPolygon(void); void _testClearPolygon(void);
void _testCameraTrigger(void); void _testCameraTrigger(void);
#endif
private: private:
enum { enum {
polygonPathChangedIndex = 0, gridPointsChangedIndex = 0,
lastSequenceNumberChangedIndex, cameraShotsChangedIndex,
altitudeChangedIndex, coveredAreaChangedIndex,
gridAngleChangedIndex, cameraValueChangedIndex,
gridPointsChangedIndex, gridTypeChangedIndex,
cameraTriggerChangedIndex, timeBetweenShotsChangedIndex,
altDifferenceChangedIndex, cameraOrientationFixedChangedIndex,
altPercentChangedIndex, refly90DegreesChangedIndex,
azimuthChangedIndex,
commandDescriptionChangedIndex,
commandNameChangedIndex,
abbreviationChangedIndex,
coordinateChangedIndex,
exitCoordinateChangedIndex,
dirtyChangedIndex, dirtyChangedIndex,
distanceChangedIndex,
isCurrentItemChangedIndex,
sequenceNumberChangedIndex,
isSimpleItemChangedIndex,
specifiesCoordinateChangedIndex,
isStandaloneCoordinateChangedIndex,
coordinateHasRelativeAltitudeChangedIndex,
exitCoordinateHasRelativeAltitudeChangedIndex,
exitCoordinateSameAsEntryChangedIndex,
maxSignalIndex maxSignalIndex
}; };
enum { enum {
polygonPathChangedMask = 1 << polygonPathChangedIndex, gridPointsChangedMask = 1 << gridPointsChangedIndex,
lastSequenceNumberChangedMask = 1 << lastSequenceNumberChangedIndex, cameraShotsChangedMask = 1 << cameraShotsChangedIndex,
altitudeChangedMask = 1 << altitudeChangedIndex, coveredAreaChangedMask = 1 << coveredAreaChangedIndex,
gridAngleChangedMask = 1 << gridAngleChangedIndex, cameraValueChangedMask = 1 << cameraValueChangedIndex,
gridPointsChangedMask = 1 << gridPointsChangedIndex, gridTypeChangedMask = 1 << gridTypeChangedIndex,
cameraTriggerChangedMask = 1 << cameraTriggerChangedIndex, timeBetweenShotsChangedMask = 1 << timeBetweenShotsChangedIndex,
altDifferenceChangedMask = 1 << altDifferenceChangedIndex, cameraOrientationFixedChangedMask = 1 << cameraOrientationFixedChangedIndex,
altPercentChangedMask = 1 << altPercentChangedIndex, refly90DegreesChangedMask = 1 << refly90DegreesChangedIndex,
azimuthChangedMask = 1 << azimuthChangedIndex, dirtyChangedMask = 1 << dirtyChangedIndex
commandDescriptionChangedMask = 1 << commandDescriptionChangedIndex,
commandNameChangedMask = 1 << commandNameChangedIndex,
coordinateChangedMask = 1 << coordinateChangedIndex,
exitCoordinateChangedMask = 1 << exitCoordinateChangedIndex,
dirtyChangedMask = 1 << dirtyChangedIndex,
distanceChangedMask = 1 << distanceChangedIndex,
isCurrentItemChangedMask = 1 << isCurrentItemChangedIndex,
sequenceNumberChangedMask = 1 << sequenceNumberChangedIndex,
isSimpleItemChangedMask = 1 << isSimpleItemChangedIndex,
specifiesCoordinateChangedMask = 1 << specifiesCoordinateChangedIndex,
isStandaloneCoordinateChangedMask = 1 << isStandaloneCoordinateChangedIndex,
coordinateHasRelativeAltitudeChangedMask = 1 << coordinateHasRelativeAltitudeChangedIndex,
exitCoordinateHasRelativeAltitudeChangedMask = 1 << exitCoordinateHasRelativeAltitudeChangedIndex,
exitCoordinateSameAsEntryChangedMask = 1 << exitCoordinateSameAsEntryChangedIndex,
}; };
static const size_t _cComplexMissionItemSignals = maxSignalIndex; static const size_t _cSurveySignals = maxSignalIndex;
const char* _rgComplexMissionItemSignals[_cComplexMissionItemSignals]; const char* _rgSurveySignals[_cSurveySignals];
Vehicle* _offlineVehicle;
MultiSignalSpy* _multiSpy; MultiSignalSpy* _multiSpy;
SurveyMissionItem* _surveyItem; SurveyMissionItem* _surveyItem;
QGCMapPolygon* _mapPolygon; QGCMapPolygon* _mapPolygon;
......
...@@ -50,6 +50,7 @@ UT_REGISTER_TEST(ParameterManagerTest) ...@@ -50,6 +50,7 @@ UT_REGISTER_TEST(ParameterManagerTest)
UT_REGISTER_TEST(MissionCommandTreeTest) UT_REGISTER_TEST(MissionCommandTreeTest)
UT_REGISTER_TEST(LogDownloadTest) UT_REGISTER_TEST(LogDownloadTest)
UT_REGISTER_TEST(SendMavCommandTest) UT_REGISTER_TEST(SendMavCommandTest)
UT_REGISTER_TEST(SurveyMissionItemTest)
// List of unit test which are currently disabled. // List of unit test which are currently disabled.
// If disabling a new test, include reason in comment. // If disabling a new test, include reason in comment.
...@@ -61,5 +62,4 @@ UT_REGISTER_TEST(SendMavCommandTest) ...@@ -61,5 +62,4 @@ UT_REGISTER_TEST(SendMavCommandTest)
//UT_REGISTER_TEST(FileManagerTest) //UT_REGISTER_TEST(FileManagerTest)
// Needs to be update for latest changes // Needs to be update for latest changes
//UT_REGISTER_TEST(SurveyMissionItemTest)
//UT_REGISTER_TEST(MavlinkLogTest) //UT_REGISTER_TEST(MavlinkLogTest)
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