mavlink ulog: add target sys & component ids (update to changed mavlink message)

This commit is contained in:
Beat Küng
2016-10-17 11:26:55 +02:00
committed by Lorenz Meier
parent 326800e5a8
commit 8f5656f033
6 changed files with 28 additions and 13 deletions
+2 -2
View File
@@ -438,9 +438,9 @@ public:
/** get ulog streaming if active, nullptr otherwise */
MavlinkULog *get_ulog_streaming() { return _mavlink_ulog; }
void try_start_ulog_streaming() {
void try_start_ulog_streaming(uint8_t target_system, uint8_t target_component) {
if (_mavlink_ulog) { return; }
_mavlink_ulog = MavlinkULog::try_start();
_mavlink_ulog = MavlinkULog::try_start(target_system, target_component);
}
void request_stop_ulog_streaming() {
if (_mavlink_ulog) { _mavlink_ulog_stop_requested = true; }
+1 -1
View File
@@ -389,7 +389,7 @@ MavlinkReceiver::handle_message_command_long(mavlink_message_t *msg)
// mavlink channel streaming was requested. But in fact it's possible that the logger is
// not even running. The main mavlink thread takes care of this by waiting for an ack
// from the logger.
_mavlink->try_start_ulog_streaming();
_mavlink->try_start_ulog_streaming(msg->sysid, msg->compid);
} else if (cmd_mavlink.command == MAV_CMD_LOGGING_STOP) {
_mavlink->request_stop_ulog_streaming();
}
+10 -3
View File
@@ -47,7 +47,8 @@ MavlinkULog *MavlinkULog::_instance = nullptr;
sem_t MavlinkULog::_lock;
MavlinkULog::MavlinkULog()
MavlinkULog::MavlinkULog(uint8_t target_system, uint8_t target_component)
: _target_system(target_system), _target_component(target_component)
{
_ulog_stream_sub = orb_subscribe(ORB_ID(ulog_stream));
@@ -107,6 +108,8 @@ int MavlinkULog::handle_update(mavlink_channel_t channel)
msg.sequence = _ulog_data.sequence;
msg.length = _ulog_data.length;
msg.first_message_offset = _ulog_data.first_message_offset;
msg.target_system = _target_system;
msg.target_component = _target_component;
memcpy(msg.data, _ulog_data.data, sizeof(msg.data));
mavlink_msg_logging_data_acked_send_struct(channel, &msg);
}
@@ -134,6 +137,8 @@ int MavlinkULog::handle_update(mavlink_channel_t channel)
msg.sequence = _ulog_data.sequence;
msg.length = _ulog_data.length;
msg.first_message_offset = _ulog_data.first_message_offset;
msg.target_system = _target_system;
msg.target_component = _target_component;
memcpy(msg.data, _ulog_data.data, sizeof(msg.data));
mavlink_msg_logging_data_acked_send_struct(channel, &msg);
@@ -142,6 +147,8 @@ int MavlinkULog::handle_update(mavlink_channel_t channel)
msg.sequence = _ulog_data.sequence;
msg.length = _ulog_data.length;
msg.first_message_offset = _ulog_data.first_message_offset;
msg.target_system = _target_system;
msg.target_component = _target_component;
memcpy(msg.data, _ulog_data.data, sizeof(msg.data));
mavlink_msg_logging_data_send_struct(channel, &msg);
}
@@ -160,13 +167,13 @@ void MavlinkULog::initialize()
_init = true;
}
MavlinkULog* MavlinkULog::try_start()
MavlinkULog* MavlinkULog::try_start(uint8_t target_system, uint8_t target_component)
{
MavlinkULog *ret = nullptr;
bool failed = false;
lock();
if (!_instance) {
ret = _instance = new MavlinkULog();
ret = _instance = new MavlinkULog(target_system, target_component);
if (!_instance) {
failed = true;
}
+5 -2
View File
@@ -68,7 +68,7 @@ public:
* thread-safe
* @return instance, or nullptr
*/
static MavlinkULog *try_start();
static MavlinkULog *try_start(uint8_t target_system, uint8_t target_component);
/**
* stop the stream. It also deletes the singleton object, so make sure cleanup
@@ -91,7 +91,7 @@ public:
private:
MavlinkULog();
MavlinkULog(uint8_t target_system, uint8_t target_component);
~MavlinkULog();
@@ -119,6 +119,9 @@ private:
hrt_abstime _last_sent_time = 0; ///< last time we sent a message that requires an ack
ulog_stream_s _ulog_data;
bool _waiting_for_initial_ack = false;
const uint8_t _target_system;
const uint8_t _target_component;
/* do not allow copying this class */
MavlinkULog(const MavlinkULog &) = delete;