diff --git a/src/drivers/camera_trigger/camera_trigger.cpp b/src/drivers/camera_trigger/camera_trigger.cpp index cb0d993554..bedf9bf303 100644 --- a/src/drivers/camera_trigger/camera_trigger.cpp +++ b/src/drivers/camera_trigger/camera_trigger.cpp @@ -76,7 +76,8 @@ extern "C" __EXPORT int camera_trigger_main(int argc, char *argv[]); typedef enum : int32_t { CAMERA_INTERFACE_MODE_NONE = 0, CAMERA_INTERFACE_MODE_RELAY, - CAMERA_INTERFACE_MODE_SEAGULL_MAP2_PWM + CAMERA_INTERFACE_MODE_SEAGULL_MAP2_PWM, + CAMERA_INTERFACE_MODE_MAVLINK } camera_interface_mode_t; class CameraTrigger @@ -265,6 +266,11 @@ CameraTrigger::CameraTrigger() : #endif + case CAMERA_INTERFACE_MODE_MAVLINK: + /* start an interface that does nothing. Instead mavlink will listen to the camera_trigger uORB message */ + _camera_interface = new CameraInterface(); + break; + default: PX4_ERR("unknown camera interface mode: %i", (int)_camera_interface_mode); break; diff --git a/src/drivers/camera_trigger/camera_trigger_params.c b/src/drivers/camera_trigger/camera_trigger_params.c index c65fc83e0f..b95cb61e82 100644 --- a/src/drivers/camera_trigger/camera_trigger_params.c +++ b/src/drivers/camera_trigger/camera_trigger_params.c @@ -46,6 +46,7 @@ * * @value 1 GPIO * @value 2 Seagull MAP2 (PWM) +* @value 3 MAVLink (forward via MAV_CMD_IMAGE_START_CAPTURE) * * @reboot_required true * diff --git a/src/modules/mavlink/mavlink_messages.cpp b/src/modules/mavlink/mavlink_messages.cpp index f749162131..6efa300213 100644 --- a/src/modules/mavlink/mavlink_messages.cpp +++ b/src/modules/mavlink/mavlink_messages.cpp @@ -1420,6 +1420,23 @@ protected: /* ensure that only active trigger events are sent */ if (trigger.timestamp > 0) { mavlink_msg_camera_trigger_send_struct(_mavlink->get_channel(), &msg); + + /* send MAV_CMD_IMAGE_START_CAPTURE */ + mavlink_command_long_t msg_cmd; + + msg_cmd.target_system = mavlink_system.sysid; + msg_cmd.target_component = MAV_COMP_ID_CAMERA; + msg_cmd.command = MAV_CMD_IMAGE_START_CAPTURE; + msg_cmd.confirmation = 0; + msg_cmd.param1 = 0; + msg_cmd.param2 = 1; + msg_cmd.param3 = 0; + msg_cmd.param4 = NAN; + msg_cmd.param5 = NAN; + msg_cmd.param6 = NAN; + msg_cmd.param7 = NAN; + + mavlink_msg_command_long_send_struct(_mavlink->get_channel(), &msg_cmd); } } }