mavlink: move ALTITUDE to streams header

This commit is contained in:
Daniel Agar
2020-11-13 10:05:22 -05:00
parent a8f0987028
commit 860a7fd1db
2 changed files with 138 additions and 118 deletions
+3 -118
View File
@@ -108,6 +108,7 @@
using matrix::Vector3f;
using matrix::wrap_2pi;
#include "streams/ALTITUDE.hpp"
#include "streams/AUTOPILOT_VERSION.hpp"
#include "streams/ESC_INFO.hpp"
#include "streams/ESC_STATUS.hpp"
@@ -4464,124 +4465,6 @@ protected:
}
};
class MavlinkStreamAltitude : public MavlinkStream
{
public:
const char *get_name() const override
{
return MavlinkStreamAltitude::get_name_static();
}
static constexpr const char *get_name_static()
{
return "ALTITUDE";
}
static constexpr uint16_t get_id_static()
{
return MAVLINK_MSG_ID_ALTITUDE;
}
uint16_t get_id() override
{
return get_id_static();
}
static MavlinkStream *new_instance(Mavlink *mavlink)
{
return new MavlinkStreamAltitude(mavlink);
}
unsigned get_size() override
{
return _local_pos_sub.advertised() ? MAVLINK_MSG_ID_ALTITUDE_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES : 0;
}
private:
uORB::Subscription _local_pos_sub{ORB_ID(vehicle_local_position)};
uORB::Subscription _home_sub{ORB_ID(home_position)};
uORB::Subscription _air_data_sub{ORB_ID(vehicle_air_data)};
/* do not allow top copying this class */
MavlinkStreamAltitude(MavlinkStreamAltitude &) = delete;
MavlinkStreamAltitude &operator = (const MavlinkStreamAltitude &) = delete;
protected:
explicit MavlinkStreamAltitude(Mavlink *mavlink) : MavlinkStream(mavlink)
{}
bool send() override
{
mavlink_altitude_t msg{};
msg.altitude_monotonic = NAN;
msg.altitude_amsl = NAN;
msg.altitude_local = NAN;
msg.altitude_relative = NAN;
msg.altitude_terrain = NAN;
msg.bottom_clearance = NAN;
// always update monotonic altitude
bool air_data_updated = false;
vehicle_air_data_s air_data{};
_air_data_sub.copy(&air_data);
if (air_data.timestamp > 0) {
msg.altitude_monotonic = air_data.baro_alt_meter;
air_data_updated = true;
}
bool lpos_updated = false;
vehicle_local_position_s local_pos;
if (_local_pos_sub.copy(&local_pos)) {
if (local_pos.z_valid) {
if (local_pos.z_global) {
msg.altitude_amsl = -local_pos.z + local_pos.ref_alt;
} else {
msg.altitude_amsl = msg.altitude_monotonic;
}
msg.altitude_local = -local_pos.z;
home_position_s home{};
_home_sub.copy(&home);
if (home.valid_alt) {
msg.altitude_relative = -(local_pos.z - home.z);
} else {
msg.altitude_relative = -local_pos.z;
}
if (local_pos.dist_bottom_valid) {
msg.altitude_terrain = -local_pos.z - local_pos.dist_bottom;
msg.bottom_clearance = local_pos.dist_bottom;
}
}
lpos_updated = true;
}
// local position timeout after 10 ms
// avoid publishing only baro altitude_monotonic if possible
bool lpos_timeout = (hrt_elapsed_time(&local_pos.timestamp) > 10_ms);
if (lpos_updated || (air_data_updated && lpos_timeout)) {
msg.time_usec = hrt_absolute_time();
mavlink_msg_altitude_send_struct(_mavlink->get_channel(), &msg);
return true;
}
return false;
}
};
static const StreamListItem streams_list[] = {
create_stream_list_item<MavlinkStreamHeartbeat>(),
create_stream_list_item<MavlinkStreamStatustext>(),
@@ -4642,7 +4525,9 @@ static const StreamListItem streams_list[] = {
#if defined(EXTENDED_SYS_STATE_HPP)
create_stream_list_item<MavlinkStreamExtendedSysState>(),
#endif // EXTENDED_SYS_STATE_HPP
#if defined(ALTITUDE_HPP)
create_stream_list_item<MavlinkStreamAltitude>(),
#endif // ALTITUDE_HPP
create_stream_list_item<MavlinkStreamADSBVehicle>(),
create_stream_list_item<MavlinkStreamUTMGlobalPosition>(),
create_stream_list_item<MavlinkStreamCollision>(),