IMAGE_START_CAPTURE asking for more than one image with a zero interval
cannot be honoured. It was reported as FAILED by the interval check in
take_multiple_pictures; report DENIED from the command handler instead,
matching the other parameter rejections and the mission path.
Based on Peter Barker's work in ArduPilot/ardupilot#33900.
Co-authored-by: Peter Barker <pbarker@barker.dropbear.id.au>
Cache bounded stream lists and resume replies independently on each
GCS link after transmit backpressure. Expire remote capture status
after three seconds, retain locally scheduled interval capture, and
back off unanswered status requests.
Preserve native camera identity in cached replies and isolated-link
broadcasts, and suppress synthetic FC-owned status for native cameras.
Restore configured mount associations in cached information only when
a same-system camera advertises none.
Add CAMn_COMPID (0 or 7-255) so camera-v2 discovery can use a
non-default component ID. The first slot owns a colliding ID; duplicate
or invalid IDs warn and disable discovery.
Resolve command selectors as component IDs or legacy slots 1-6 with the
same rules for live commands and missions. NaN in formerly reserved
selector fields means unset. Video commands with a nonzero camera
selector treat param1 as a stream ID and pass the status frequency
through; without one they keep the old camera-slot interpretation.
Fill camera_device_id in camera information, settings, capture status,
field of view and stream messages, and document the routing and
selector design.
The RunCam annotation had text in front of the PARAMETER_CONVERSION
token, so a grep anchored at the start of the comment did not find it.
Both annotations also described the release in prose rather than in the
standard form.
The RunCam date was wrong as well. It read Nov-2024, but the conversion
arrived in 399f9f6f98 "AP_Camera: RunCam camera backend", which was
authored Apr-2024 and merged Dec-2024 - the annotations on this branch
use the date the conversion landed in master, so it is Dec-2024.
Established by content rather than by date: convert_runcam_params() is
absent from Copter-4.6.0 and present in Copter-4.7.0; the CAM_TRIGG_TYPE
to CAM1_TYPE conversion is absent from Copter-4.3.0 and present in
Copter-4.4.0. No functional change.
param2 of MAV_CMD_REQUEST_MESSAGE (512) selects a specific camera
instance when requesting CAMERA_INFORMATION (1-based, matching the
MAVLink convention used for gimbal_device_id). A param2 of 0 retains
the existing behaviour of sending information for all camera instances.
The per-instance send is routed through the normal deferred-message
path so that COMMAND_ACK is transmitted before the CAMERA_INFORMATION
response, matching the order expected by callers that drain non-ACK
messages while waiting for acknowledgement.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>