mavlink: store last heartbeat time in telemetry_status topic

This commit is contained in:
Anton Babushkin
2014-06-16 17:32:58 +02:00
parent 9772aa5814
commit 91f0b9eee4
2 changed files with 19 additions and 0 deletions
+18
View File
@@ -106,6 +106,7 @@ MavlinkReceiver::MavlinkReceiver(Mavlink *parent) :
_telemetry_status_pub(-1), _telemetry_status_pub(-1),
_rc_pub(-1), _rc_pub(-1),
_manual_pub(-1), _manual_pub(-1),
_telemetry_heartbeat_time(0),
_hil_frames(0), _hil_frames(0),
_old_timestamp(0), _old_timestamp(0),
_hil_local_proj_inited(0), _hil_local_proj_inited(0),
@@ -150,6 +151,10 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg)
handle_message_manual_control(msg); handle_message_manual_control(msg);
break; break;
case MAVLINK_MSG_ID_HEARTBEAT:
handle_message_heartbeat(msg);
break;
default: default:
break; break;
} }
@@ -411,6 +416,7 @@ MavlinkReceiver::handle_message_radio_status(mavlink_message_t *msg)
memset(&tstatus, 0, sizeof(tstatus)); memset(&tstatus, 0, sizeof(tstatus));
tstatus.timestamp = hrt_absolute_time(); tstatus.timestamp = hrt_absolute_time();
tstatus.heartbeat_time = _telemetry_heartbeat_time;
tstatus.type = TELEMETRY_STATUS_RADIO_TYPE_3DR_RADIO; tstatus.type = TELEMETRY_STATUS_RADIO_TYPE_3DR_RADIO;
tstatus.rssi = rstatus.rssi; tstatus.rssi = rstatus.rssi;
tstatus.remote_rssi = rstatus.remrssi; tstatus.remote_rssi = rstatus.remrssi;
@@ -451,6 +457,18 @@ MavlinkReceiver::handle_message_manual_control(mavlink_message_t *msg)
} }
} }
void
MavlinkReceiver::handle_message_heartbeat(mavlink_message_t *msg)
{
mavlink_heartbeat_t hb;
mavlink_msg_heartbeat_decode(msg, &hb);
/* ignore own heartbeats, accept only heartbeats from GCS */
if (msg->sysid != mavlink_system.sysid && hb.type == MAV_TYPE_GCS) {
_telemetry_heartbeat_time = hrt_absolute_time();
}
}
void void
MavlinkReceiver::handle_message_hil_sensor(mavlink_message_t *msg) MavlinkReceiver::handle_message_hil_sensor(mavlink_message_t *msg)
{ {
@@ -57,6 +57,7 @@ enum TELEMETRY_STATUS_RADIO_TYPE {
struct telemetry_status_s { struct telemetry_status_s {
uint64_t timestamp; uint64_t timestamp;
uint64_t heartbeat_time; /**< Time of last received heartbeat from remote system */
enum TELEMETRY_STATUS_RADIO_TYPE type; /**< type of the radio hardware */ enum TELEMETRY_STATUS_RADIO_TYPE type; /**< type of the radio hardware */
uint8_t rssi; /**< local signal strength */ uint8_t rssi; /**< local signal strength */
uint8_t remote_rssi; /**< remote signal strength */ uint8_t remote_rssi; /**< remote signal strength */