18 #include <condition_variable>
21 #include <mavros_msgs/CommandAck.h>
22 #include <mavros_msgs/CommandLong.h>
23 #include <mavros_msgs/CommandInt.h>
24 #include <mavros_msgs/CommandBool.h>
25 #include <mavros_msgs/CommandHome.h>
26 #include <mavros_msgs/CommandTOL.h>
27 #include <mavros_msgs/CommandTriggerControl.h>
28 #include <mavros_msgs/CommandTriggerInterval.h>
29 #include <mavros_msgs/CommandVtolTransition.h>
32 namespace std_plugins {
41 std::condition_variable
ack;
67 PluginBase::initialize(uas_);
69 double command_ack_timeout;
119 void handle_command_ack(
const mavlink::mavlink_message_t *msg, mavlink::common::msg::COMMAND_ACK &ack)
126 if (tr.expected_command == ack.command) {
127 tr.result = ack.result;
134 ack.command, ack.result);
155 uint16_t command, uint8_t confirmation,
156 float param1,
float param2,
157 float param3,
float param4,
158 float param5,
float param6,
160 unsigned char &success, uint8_t &result)
162 using mavlink::common::MAV_RESULT;
166 L_CommandTransaction::iterator ack_it;
170 if (tr.expected_command ==
command) {
191 if (is_ack_required) {
196 success = is_not_timeout && ack_it->result ==
enum_value(MAV_RESULT::ACCEPTED);
197 result = ack_it->result;
213 uint8_t frame, uint16_t command,
214 uint8_t current, uint8_t autocontinue,
215 float param1,
float param2,
216 float param3,
float param4,
217 int32_t x, int32_t y,
219 unsigned char &success)
225 frame,
command, current, autocontinue,
234 bool send_command_ack( uint16_t command, uint8_t req_result, uint8_t progress, int32_t result_param2,
235 unsigned char &success, uint8_t &res_result)
237 using mavlink::common::MAV_RESULT;
240 req_result, progress,
245 res_result =
enum_value(MAV_RESULT::ACCEPTED);
253 template<
typename MsgT>
256 using mavlink::minimal::MAV_COMPONENT;
259 const uint8_t tgt_comp_id = (broadcast) ? 0 :
263 cmd.target_system = tgt_sys_id;
264 cmd.target_component = tgt_comp_id;
268 uint16_t command, uint8_t confirmation,
269 float param1,
float param2,
270 float param3,
float param4,
271 float param5,
float param6,
274 const uint8_t confirmation_fixed = (broadcast) ? 0 : confirmation;
276 mavlink::common::msg::COMMAND_LONG
cmd {};
280 cmd.confirmation = confirmation_fixed;
293 uint8_t frame, uint16_t command,
294 uint8_t current, uint8_t autocontinue,
295 float param1,
float param2,
296 float param3,
float param4,
297 int32_t x, int32_t y,
300 mavlink::common::msg::COMMAND_INT
cmd {};
305 cmd.current = current;
306 cmd.autocontinue = autocontinue;
319 uint8_t progress, int32_t result_param2)
321 mavlink::common::msg::COMMAND_ACK
cmd {};
326 cmd.progress = progress;
327 cmd.result_param2 = result_param2;
336 mavros_msgs::CommandLong::Response &res)
339 req.command, req.confirmation,
340 req.param1, req.param2,
341 req.param3, req.param4,
342 req.param5, req.param6,
344 res.success, res.result);
348 mavros_msgs::CommandInt::Response &res)
351 req.frame, req.command,
352 req.current, req.autocontinue,
353 req.param1, req.param2,
354 req.param3, req.param4,
360 mavros_msgs::CommandAck::Response &res)
363 req.progress, req.result_param2,
364 res.success, res.result);
369 mavros_msgs::CommandBool::Response &res)
371 using mavlink::common::MAV_CMD;
374 (req.value) ? 1.0 : 0.0,
376 res.success, res.result);
380 mavros_msgs::CommandHome::Response &res)
382 using mavlink::common::MAV_CMD;
385 (req.current_gps) ? 1.0 : 0.0,
386 0, 0, req.yaw, req.latitude, req.longitude, req.altitude,
387 res.success, res.result);
391 mavros_msgs::CommandTOL::Response &res)
393 using mavlink::common::MAV_CMD;
399 req.latitude, req.longitude, req.altitude,
400 res.success, res.result);
403 bool land_cb(mavros_msgs::CommandTOL::Request &req,
404 mavros_msgs::CommandTOL::Response &res)
406 using mavlink::common::MAV_CMD;
411 req.latitude, req.longitude, req.altitude,
412 res.success, res.result);
416 mavros_msgs::CommandTriggerControl::Response &res)
418 using mavlink::common::MAV_CMD;
421 (req.trigger_enable) ? 1.0 : 0.0,
422 (req.sequence_reset) ? 1.0 : 0.0,
423 (req.trigger_pause) ? 1.0 : 0.0,
425 res.success, res.result);
429 mavros_msgs::CommandTriggerInterval::Response &res)
431 using mavlink::common::MAV_CMD;
435 enum_value(MAV_CMD::DO_SET_CAM_TRIGG_INTERVAL), 1,
437 req.integration_time,
439 res.success, res.result);
443 mavros_msgs::CommandVtolTransition::Response &res)
445 using mavlink::common::MAV_CMD;
447 enum_value(MAV_CMD::DO_VTOL_TRANSITION),
false,
450 res.success, res.result);