From aca64fffdb411e2133e732f9631f1a774062e29e Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 7 Jul 2017 20:17:30 -0700 Subject: [PATCH] Use trigger immediately for TRIGG_DIST --- src/MissionManager/CameraSection.cc | 32 +++++++++++++++++++++---- src/MissionManager/CameraSection.h | 3 ++- src/MissionManager/CameraSectionTest.cc | 21 ++++++++++------ 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/MissionManager/CameraSection.cc b/src/MissionManager/CameraSection.cc index ec559b5c0..4ff082d5e 100644 --- a/src/MissionManager/CameraSection.cc +++ b/src/MissionManager/CameraSection.cc @@ -166,7 +166,9 @@ void CameraSection::appendSectionItems(QList& items, QObject* miss MAV_CMD_DO_SET_CAM_TRIGG_DIST, MAV_FRAME_MISSION, _cameraPhotoIntervalDistanceFact.rawValue().toDouble(), // Trigger distance - 0, 0, 0, 0, 0, 0, // param 2-7 not used + 0, // No shutter integartion + 1, // Trigger immediately + 0, 0, 0, 0, // param 4-7 not used true, // autoContinue false, // isCurrentItem missionItemParent); @@ -314,13 +316,31 @@ bool CameraSection::_scanStopTakingPhotos(QmlObjectListModel* visualItems, int s return false; } -bool CameraSection::_scanTriggerDistance(QmlObjectListModel* visualItems, int scanIndex) +bool CameraSection::_scanTriggerStartDistance(QmlObjectListModel* visualItems, int scanIndex) { SimpleMissionItem* item = visualItems->value(scanIndex); if (item) { MissionItem& missionItem = item->missionItem(); if ((MAV_CMD)item->command() == MAV_CMD_DO_SET_CAM_TRIGG_DIST) { - if (missionItem.param1() >= 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0 && missionItem.param5() == 0 && missionItem.param6() == 0 && missionItem.param7() == 0) { + if (missionItem.param1() > 0 && missionItem.param2() == 0 && missionItem.param3() == 1 && missionItem.param4() == 0 && missionItem.param5() == 0 && missionItem.param6() == 0 && missionItem.param7() == 0) { + cameraAction()->setRawValue(TakePhotoIntervalDistance); + cameraPhotoIntervalDistance()->setRawValue(missionItem.param1()); + visualItems->removeAt(scanIndex)->deleteLater(); + return true; + } + } + } + + return false; +} + +bool CameraSection::_scanTriggerStopDistance(QmlObjectListModel* visualItems, int scanIndex) +{ + SimpleMissionItem* item = visualItems->value(scanIndex); + if (item) { + MissionItem& missionItem = item->missionItem(); + if ((MAV_CMD)item->command() == MAV_CMD_DO_SET_CAM_TRIGG_DIST) { + if (missionItem.param1() == 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0 && missionItem.param5() == 0 && missionItem.param6() == 0 && missionItem.param7() == 0) { cameraAction()->setRawValue(TakePhotoIntervalDistance); cameraPhotoIntervalDistance()->setRawValue(missionItem.param1()); visualItems->removeAt(scanIndex)->deleteLater(); @@ -416,7 +436,11 @@ bool CameraSection::scanForSection(QmlObjectListModel* visualItems, int scanInde foundCameraAction = true; continue; } - if (!foundCameraAction && _scanTriggerDistance(visualItems, scanIndex)) { + if (!foundCameraAction && _scanTriggerStartDistance(visualItems, scanIndex)) { + foundCameraAction = true; + continue; + } + if (!foundCameraAction && _scanTriggerStopDistance(visualItems, scanIndex)) { foundCameraAction = true; continue; } diff --git a/src/MissionManager/CameraSection.h b/src/MissionManager/CameraSection.h index 5094ae826..e0538473a 100644 --- a/src/MissionManager/CameraSection.h +++ b/src/MissionManager/CameraSection.h @@ -94,7 +94,8 @@ private: bool _scanTakePhoto(QmlObjectListModel* visualItems, int scanIndex); bool _scanTakePhotosIntervalTime(QmlObjectListModel* visualItems, int scanIndex); bool _scanStopTakingPhotos(QmlObjectListModel* visualItems, int scanIndex); - bool _scanTriggerDistance(QmlObjectListModel* visualItems, int scanIndex); + bool _scanTriggerStartDistance(QmlObjectListModel* visualItems, int scanIndex); + bool _scanTriggerStopDistance(QmlObjectListModel* visualItems, int scanIndex); bool _scanTakeVideo(QmlObjectListModel* visualItems, int scanIndex); bool _scanStopTakingVideo(QmlObjectListModel* visualItems, int scanIndex); bool _scanSetCameraMode(QmlObjectListModel* visualItems, int scanIndex); diff --git a/src/MissionManager/CameraSectionTest.cc b/src/MissionManager/CameraSectionTest.cc index db6f521f8..a9c943cfe 100644 --- a/src/MissionManager/CameraSectionTest.cc +++ b/src/MissionManager/CameraSectionTest.cc @@ -50,7 +50,14 @@ void CameraSectionTest::init(void) MissionItem(0, MAV_CMD_IMAGE_START_CAPTURE, MAV_FRAME_MISSION, 0, 48, 0, NAN, NAN, NAN, NAN, true, false), this); _validDistanceItem = new SimpleMissionItem(_offlineVehicle, - MissionItem(0, MAV_CMD_DO_SET_CAM_TRIGG_DIST, MAV_FRAME_MISSION, 72, 0, 0, 0, 0, 0, 0, true, false), + MissionItem(0, + MAV_CMD_DO_SET_CAM_TRIGG_DIST, + MAV_FRAME_MISSION, + 72, // trigger distance + 0, // not shutter integration + 1, // trigger immediately + 0, 0, 0, 0, + true, false), this); _validStartVideoItem = new SimpleMissionItem(_offlineVehicle, MissionItem(0, // sequence number @@ -732,15 +739,15 @@ void CameraSectionTest::_testScanForPhotoIntervalDistanceSection(void) _commonScanTest(_cameraSection); /* - MAV_CMD_DO_SET_CAM_TRIGG_DIST Mission command to set CAM_TRIGG_DIST for this flight - Mission Param #1 Camera trigger distance (meters) - Mission Param #2 Empty - Mission Param #3 Empty + MAV_CMD_DO_SET_CAM_TRIGG_DIST Mission command to set camera trigger distance for this flight. The camera is trigerred each time this distance is exceeded. This command can also be used to set the shutter integration time for the camera. + Mission Param #1 Camera trigger distance (meters). 0 to stop triggering. + Mission Param #2 Camera shutter integration time (milliseconds). -1 or 0 to ignore + Mission Param #3 Trigger camera once immediately. (0 = no trigger, 1 = trigger) Mission Param #4 Empty Mission Param #5 Empty Mission Param #6 Empty Mission Param #7 Empty -*/ + */ SimpleMissionItem* newValidDistanceItem = new SimpleMissionItem(_offlineVehicle, this); newValidDistanceItem->missionItem() = _validDistanceItem->missionItem(); @@ -772,7 +779,7 @@ void CameraSectionTest::_testScanForPhotoIntervalDistanceSection(void) visualItems.clear(); invalidSimpleItem.missionItem() = _validDistanceItem->missionItem(); - invalidSimpleItem.missionItem().setParam3(1); // must be 0 + invalidSimpleItem.missionItem().setParam3(0); // must be 1 visualItems.append(&invalidSimpleItem); QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); QCOMPARE(visualItems.count(), 1); -- 2.22.0