diff --git a/flight/modules/CameraControl/cameracontrol.c b/flight/modules/CameraControl/cameracontrol.c index 0e1d24b0b..7fb487303 100644 --- a/flight/modules/CameraControl/cameracontrol.c +++ b/flight/modules/CameraControl/cameracontrol.c @@ -62,7 +62,8 @@ static struct CameraControl_data { CameraStatus lastOutputStatus; CameraStatus manualInput; CameraStatus lastManualInput; - bool autoTriggerEnabled; + bool autoTriggerEnabled; + uint16_t ImageId; float HomeECEF[3]; float HomeRne[3][3]; } *ccd; @@ -138,12 +139,13 @@ static void CameraControlTask() bool trigger = false; PositionStateData pos; uint32_t timeSinceLastShot = PIOS_DELAY_DiffuS(ccd->lastTriggerTimeRaw); + CameraStatus newStatus; if (checkActivation()) { if (ccd->manualInput != ccd->lastManualInput && ccd->manualInput != CAMERASTATUS_Idle) { // Manual override - trigger = true; - ccd->outputStatus = ccd->manualInput; + trigger = true; + newStatus = ccd->manualInput; ccd->activity.Reason = CAMERACONTROLACTIVITY_REASON_MANUAL; } else { // MinimumTimeInterval sets a hard limit on time between two consecutive shots, i.e. the minimum time between shots the camera can achieve @@ -152,7 +154,8 @@ static void CameraControlTask() // check trigger conditions if (ccd->settings.TimeInterval > 0) { if (timeSinceLastShot > ccd->settings.TimeInterval * (1000 * 1000)) { - trigger = true; + trigger = true; + newStatus = CAMERASTATUS_Shot; ccd->activity.Reason = CAMERACONTROLACTIVITY_REASON_AUTOTIME; } } @@ -164,7 +167,8 @@ static void CameraControlTask() float distance = sqrtf((dn * dn) + (de * de)); ccd->activity.TriggerMillisecond = (int16_t)distance * 10.0f; if (distance > ccd->settings.SpaceInterval) { - trigger = true; + trigger = true; + newStatus = CAMERASTATUS_Shot; ccd->activity.Reason = CAMERACONTROLACTIVITY_REASON_AUTODISTANCE; } } @@ -172,7 +176,8 @@ static void CameraControlTask() } } if (trigger) { - ccd->outputStatus = CAMERASTATUS_Shot; + ccd->outputStatus = newStatus; + ccd->ImageId++; ccd->lastTriggerTimeRaw = PIOS_DELAY_GetRaw(); ccd->lastTriggerNEDPosition[0] = pos.North; ccd->lastTriggerNEDPosition[1] = pos.East; @@ -331,6 +336,7 @@ static void FillActivityInfo() activity->TriggerMillisecond = time.Millisecond; } + activity->ImageId = ccd->ImageId; activity->SystemTS = xTaskGetTickCount() * portTICK_RATE_MS; { AttitudeStateData attitude; diff --git a/shared/uavobjectdefinition/cameracontrolactivity.xml b/shared/uavobjectdefinition/cameracontrolactivity.xml index f4fdc35d8..bba625e39 100644 --- a/shared/uavobjectdefinition/cameracontrolactivity.xml +++ b/shared/uavobjectdefinition/cameracontrolactivity.xml @@ -7,6 +7,7 @@ +