log_transfer.cpp
Go to the documentation of this file.
1 #include <mavros/mavros_plugin.h>
2 #include <mavros_msgs/LogData.h>
3 #include <mavros_msgs/LogEntry.h>
4 #include <mavros_msgs/LogRequestData.h>
5 #include <mavros_msgs/LogRequestEnd.h>
6 #include <mavros_msgs/LogRequestList.h>
7 #include <std_srvs/Trigger.h>
8 
9 namespace mavros {
10 namespace extra_plugins {
12 public:
14  nh("~log_transfer") {}
15 
16  void initialize(UAS& uas) override
17  {
19 
20  log_entry_pub = nh.advertise<mavros_msgs::LogEntry>("raw/log_entry", 1000);
21  log_data_pub = nh.advertise<mavros_msgs::LogData>("raw/log_data", 1000);
22 
23  log_request_list_srv = nh.advertiseService("raw/log_request_list",
25  log_request_data_srv = nh.advertiseService("raw/log_request_data",
27  log_request_end_srv = nh.advertiseService("raw/log_request_end",
29  log_request_erase_srv = nh.advertiseService("raw/log_request_erase",
31  }
32 
34  {
35  return {
38  };
39  }
40 
41 private:
45 
46  void handle_log_entry(const mavlink::mavlink_message_t*, mavlink::common::msg::LOG_ENTRY& le)
47  {
48  auto msg = boost::make_shared<mavros_msgs::LogEntry>();
49  msg->header.stamp = ros::Time::now();
50  msg->id = le.id;
51  msg->num_logs = le.num_logs;
52  msg->last_log_num = le.last_log_num;
53  msg->time_utc = ros::Time(le.time_utc);
54  msg->size = le.size;
55  log_entry_pub.publish(msg);
56  }
57 
58  void handle_log_data(const mavlink::mavlink_message_t*, mavlink::common::msg::LOG_DATA& ld)
59  {
60  auto msg = boost::make_shared<mavros_msgs::LogData>();
61  msg->header.stamp = ros::Time::now();
62  msg->id = ld.id;
63  msg->offset = ld.ofs;
64 
65  auto count = ld.count;
66  if (count > ld.data.max_size()) {
67  count = ld.data.max_size();
68  }
69  msg->data.insert(msg->data.cbegin(), ld.data.cbegin(), ld.data.cbegin() + count);
70  log_data_pub.publish(msg);
71  }
72 
73  bool log_request_list_cb(mavros_msgs::LogRequestList::Request &req,
74  mavros_msgs::LogRequestList::Response &res)
75  {
76  mavlink::common::msg::LOG_REQUEST_LIST msg = {};
77  m_uas->msg_set_target(msg);
78  msg.start = req.start;
79  msg.end = req.end;
80 
81  res.success = true;
82  try {
83  UAS_FCU(m_uas)->send_message(msg);
84  } catch (std::length_error&) {
85  res.success = false;
86  }
87  return true;
88  }
89 
90  bool log_request_data_cb(mavros_msgs::LogRequestData::Request &req,
91  mavros_msgs::LogRequestData::Response &res)
92  {
93  mavlink::common::msg::LOG_REQUEST_DATA msg = {};
94  m_uas->msg_set_target(msg);
95  msg.id = req.id;
96  msg.ofs = req.offset;
97  msg.count = req.count;
98 
99  res.success = true;
100  try {
101  UAS_FCU(m_uas)->send_message(msg);
102  } catch (std::length_error&) {
103  res.success = false;
104  }
105  return true;
106  }
107 
108  bool log_request_end_cb(mavros_msgs::LogRequestEnd::Request &,
109  mavros_msgs::LogRequestEnd::Response &res)
110  {
111  mavlink::common::msg::LOG_REQUEST_END msg = {};
112  m_uas->msg_set_target(msg);
113  res.success = true;
114  try {
115  UAS_FCU(m_uas)->send_message(msg);
116  } catch (std::length_error&) {
117  res.success = false;
118  }
119  return true;
120  }
121 
122  bool log_request_erase_cb(std_srvs::Trigger::Request &,
123  std_srvs::Trigger::Response &res)
124  {
125  mavlink::common::msg::LOG_ERASE msg;
126  m_uas->msg_set_target(msg);
127  try {
128  UAS_FCU(m_uas)->send_message(msg);
129  } catch (std::length_error&) {
130  res.success = false;
131  }
132  res.success = true;
133  return true;
134  }
135 };
136 } // namespace extra_plugins
137 } // namespace mavros
138 
msg
bool log_request_data_cb(mavros_msgs::LogRequestData::Request &req, mavros_msgs::LogRequestData::Response &res)
void handle_log_entry(const mavlink::mavlink_message_t *, mavlink::common::msg::LOG_ENTRY &le)
bool log_request_erase_cb(std_srvs::Trigger::Request &, std_srvs::Trigger::Response &res)
HandlerInfo make_handler(const mavlink::msgid_t id, void(_C::*fn)(const mavlink::mavlink_message_t *msg, const mavconn::Framing framing))
void msg_set_target(_T &msg)
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
void publish(const boost::shared_ptr< M > &message) const
bool log_request_list_cb(mavros_msgs::LogRequestList::Request &req, mavros_msgs::LogRequestList::Response &res)
#define UAS_FCU(uasobjptr)
void handle_log_data(const mavlink::mavlink_message_t *, mavlink::common::msg::LOG_DATA &ld)
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
bool log_request_end_cb(mavros_msgs::LogRequestEnd::Request &, mavros_msgs::LogRequestEnd::Response &res)
Subscriptions get_subscriptions() override
std::vector< HandlerInfo > Subscriptions
static Time now()
void initialize(UAS &uas_) override
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)


mavros_extras
Author(s): Vladimir Ermakov , Amilcar Lucas
autogenerated on Tue Jun 13 2023 02:17:59