From a9b71592a9e13e01dafdd474be561e234c99d8e2 Mon Sep 17 00:00:00 2001 From: David Jablonski Date: Sun, 1 Mar 2020 14:45:21 +0100 Subject: [PATCH 1/2] Mavlink: implemented SCALED_PRESSURE streams --- src/modules/mavlink/mavlink_messages.cpp | 159 +++++++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/src/modules/mavlink/mavlink_messages.cpp b/src/modules/mavlink/mavlink_messages.cpp index 0cfd568d6f11..9f4928c27310 100644 --- a/src/modules/mavlink/mavlink_messages.cpp +++ b/src/modules/mavlink/mavlink_messages.cpp @@ -85,6 +85,7 @@ #include #include #include +#include #include #include #include @@ -903,6 +904,161 @@ class MavlinkStreamHighresIMU : public MavlinkStream } }; +template +class MavlinkStreamScaledPressureBase : public MavlinkStream +{ +public: + const char *get_name() const override + { + return Derived::get_name_static(); + } + + uint16_t get_id() override + { + return Derived::get_id_static(); + } + + static MavlinkStream *new_instance(Mavlink *mavlink) + { + return new Derived(mavlink); + } + +private: + MavlinkOrbSubscription *_differential_pressure_sub; + MavlinkOrbSubscription *_sensor_baro_sub; + + uint64_t _baro_timestamp; + uint64_t _dpres_timestamp; + + /* do not allow top copying this class */ + MavlinkStreamScaledPressureBase(MavlinkStreamScaledPressureBase &) = delete; + MavlinkStreamScaledPressureBase &operator = (const MavlinkStreamScaledPressureBase &) = delete; + +protected: + explicit MavlinkStreamScaledPressureBase(Mavlink *mavlink) : MavlinkStream(mavlink), + _differential_pressure_sub(_mavlink->add_orb_subscription(ORB_ID(differential_pressure))), + _sensor_baro_sub(_mavlink->add_orb_subscription(ORB_ID(sensor_baro), N)), + _baro_timestamp(0), + _dpres_timestamp(0) + {} + + bool send(const hrt_abstime t) override + { + sensor_baro_s sensor_baro{}; + differential_pressure_s differential_pressure{}; + + bool updated = false; + updated |= _sensor_baro_sub->update(&_baro_timestamp, &sensor_baro); + updated |= _differential_pressure_sub->update(&_dpres_timestamp, &differential_pressure); + + if (updated) { + typename Derived::mav_msg_type msg{}; + msg.time_boot_ms = sensor_baro.timestamp / 1000; + msg.press_abs = sensor_baro.pressure; + msg.press_diff = differential_pressure.differential_pressure_raw_pa; + msg.temperature = sensor_baro.temperature; + + + Derived::send(_mavlink->get_channel(), &msg); + + return true; + } + + return false; + } +}; + +template class MavlinkStreamScaledPressure {}; + +template <> +class MavlinkStreamScaledPressure<0> : public MavlinkStreamScaledPressureBase<0, MavlinkStreamScaledPressure<0> > +{ +public: + typedef MavlinkStreamScaledPressureBase<0, MavlinkStreamScaledPressure<0> > Base; + typedef mavlink_scaled_pressure_t mav_msg_type; + + explicit MavlinkStreamScaledPressure(Mavlink *mavlink) : Base(mavlink) {} + + static void send(mavlink_channel_t channel, const MavlinkStreamScaledPressure<0>::mav_msg_type *msg) + { + mavlink_msg_scaled_pressure_send_struct(channel, msg); + } + + static const char *get_name_static() + { + return "SCALED_PRESSURE"; + } + + static uint16_t get_id_static() + { + return MAVLINK_MSG_ID_SCALED_PRESSURE; + } + + unsigned get_size() override + { + return MAVLINK_MSG_ID_SCALED_PRESSURE_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES; + } +}; + +template <> +class MavlinkStreamScaledPressure<1> : public MavlinkStreamScaledPressureBase<1, MavlinkStreamScaledPressure<1> > +{ +public: + typedef MavlinkStreamScaledPressureBase<1, MavlinkStreamScaledPressure<1> > Base; + typedef mavlink_scaled_pressure2_t mav_msg_type; + + explicit MavlinkStreamScaledPressure(Mavlink *mavlink) : Base(mavlink) {} + + static void send(mavlink_channel_t channel, const MavlinkStreamScaledPressure<1>::mav_msg_type *msg) + { + mavlink_msg_scaled_pressure2_send_struct(channel, msg); + } + + static const char *get_name_static() + { + return "SCALED_PRESSURE2"; + } + + static uint16_t get_id_static() + { + return MAVLINK_MSG_ID_SCALED_PRESSURE2; + } + + unsigned get_size() override + { + return MAVLINK_MSG_ID_SCALED_PRESSURE2_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES; + } +}; + +template <> +class MavlinkStreamScaledPressure<2> : public MavlinkStreamScaledPressureBase<2, MavlinkStreamScaledPressure<2> > +{ +public: + typedef MavlinkStreamScaledPressureBase<2, MavlinkStreamScaledPressure<2> > Base; + typedef mavlink_scaled_pressure3_t mav_msg_type; + + explicit MavlinkStreamScaledPressure(Mavlink *mavlink) : Base(mavlink) {} + + static void send(mavlink_channel_t channel, const MavlinkStreamScaledPressure<2>::mav_msg_type *msg) + { + mavlink_msg_scaled_pressure3_send_struct(channel, msg); + } + + static const char *get_name_static() + { + return "SCALED_PRESSURE3"; + } + + static uint16_t get_id_static() + { + return MAVLINK_MSG_ID_SCALED_PRESSURE3; + } + + unsigned get_size() override + { + return MAVLINK_MSG_ID_SCALED_PRESSURE3_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES; + } +}; class MavlinkStreamScaledIMU : public MavlinkStream { @@ -5126,6 +5282,9 @@ static const StreamListItem streams_list[] = { StreamListItem(&MavlinkStreamScaledIMU::new_instance, &MavlinkStreamScaledIMU::get_name_static, &MavlinkStreamScaledIMU::get_id_static), StreamListItem(&MavlinkStreamScaledIMU2::new_instance, &MavlinkStreamScaledIMU2::get_name_static, &MavlinkStreamScaledIMU2::get_id_static), StreamListItem(&MavlinkStreamScaledIMU3::new_instance, &MavlinkStreamScaledIMU3::get_name_static, &MavlinkStreamScaledIMU3::get_id_static), + StreamListItem(&MavlinkStreamScaledPressure<0>::new_instance, &MavlinkStreamScaledPressure<0>::get_name_static, &MavlinkStreamScaledPressure<0>::get_id_static), + StreamListItem(&MavlinkStreamScaledPressure<1>::new_instance, &MavlinkStreamScaledPressure<1>::get_name_static, &MavlinkStreamScaledPressure<1>::get_id_static), + StreamListItem(&MavlinkStreamScaledPressure<2>::new_instance, &MavlinkStreamScaledPressure<2>::get_name_static, &MavlinkStreamScaledPressure<2>::get_id_static), StreamListItem(&MavlinkStreamAttitude::new_instance, &MavlinkStreamAttitude::get_name_static, &MavlinkStreamAttitude::get_id_static), StreamListItem(&MavlinkStreamAttitudeQuaternion::new_instance, &MavlinkStreamAttitudeQuaternion::get_name_static, &MavlinkStreamAttitudeQuaternion::get_id_static), StreamListItem(&MavlinkStreamVFRHUD::new_instance, &MavlinkStreamVFRHUD::get_name_static, &MavlinkStreamVFRHUD::get_id_static), From b7da78e97ab48353c234812c63a7f438bf00fa62 Mon Sep 17 00:00:00 2001 From: David Jablonski Date: Mon, 2 Mar 2020 22:40:10 +0100 Subject: [PATCH 2/2] templated creation of stream list items and constexpr for get_id_static and get_name_static in mavlink streams --- src/modules/mavlink/mavlink_messages.cpp | 322 +++++++++++------------ src/modules/mavlink/mavlink_messages.h | 18 +- 2 files changed, 172 insertions(+), 168 deletions(-) diff --git a/src/modules/mavlink/mavlink_messages.cpp b/src/modules/mavlink/mavlink_messages.cpp index 9f4928c27310..e9e017fd4a7f 100644 --- a/src/modules/mavlink/mavlink_messages.cpp +++ b/src/modules/mavlink/mavlink_messages.cpp @@ -313,12 +313,12 @@ class MavlinkStreamHeartbeat : public MavlinkStream return MavlinkStreamHeartbeat::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "HEARTBEAT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_HEARTBEAT; } @@ -385,12 +385,12 @@ class MavlinkStreamStatustext : public MavlinkStream return MavlinkStreamStatustext::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "STATUSTEXT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_STATUSTEXT; } @@ -450,12 +450,12 @@ class MavlinkStreamCommandLong : public MavlinkStream return MavlinkStreamCommandLong::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "COMMAND_LONG"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_COMMAND_LONG; } @@ -519,12 +519,12 @@ class MavlinkStreamSysStatus : public MavlinkStream return MavlinkStreamSysStatus::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "SYS_STATUS"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_SYS_STATUS; } @@ -637,12 +637,12 @@ class MavlinkStreamBatteryStatus : public MavlinkStream return MavlinkStreamBatteryStatus::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "BATTERY_STATUS"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_BATTERY_STATUS; } @@ -769,12 +769,12 @@ class MavlinkStreamHighresIMU : public MavlinkStream return MavlinkStreamHighresIMU::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "HIGHRES_IMU"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_HIGHRES_IMU; } @@ -1168,12 +1168,12 @@ class MavlinkStreamScaledIMU2 : public MavlinkStream return MavlinkStreamScaledIMU2::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "SCALED_IMU2"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_SCALED_IMU2; } @@ -1266,13 +1266,12 @@ class MavlinkStreamScaledIMU3 : public MavlinkStream { return MavlinkStreamScaledIMU3::get_name_static(); } - - static const char *get_name_static() + static constexpr const char *get_name_static() { return "SCALED_IMU3"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_SCALED_IMU3; } @@ -1367,12 +1366,12 @@ class MavlinkStreamAttitude : public MavlinkStream return MavlinkStreamAttitude::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ATTITUDE"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ATTITUDE; } @@ -1446,12 +1445,12 @@ class MavlinkStreamAttitudeQuaternion : public MavlinkStream return MavlinkStreamAttitudeQuaternion::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ATTITUDE_QUATERNION"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ATTITUDE_QUATERNION; } @@ -1545,12 +1544,12 @@ class MavlinkStreamVFRHUD : public MavlinkStream return MavlinkStreamVFRHUD::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "VFR_HUD"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_VFR_HUD; } @@ -1674,12 +1673,12 @@ class MavlinkStreamGPSRawInt : public MavlinkStream return MavlinkStreamGPSRawInt::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "GPS_RAW_INT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_GPS_RAW_INT; } @@ -1753,12 +1752,12 @@ class MavlinkStreamGPS2Raw : public MavlinkStream return MavlinkStreamGPS2Raw::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "GPS2_RAW"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_GPS2_RAW; } @@ -1829,12 +1828,12 @@ class MavlinkStreamSystemTime : public MavlinkStream return MavlinkStreamSystemTime::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "SYSTEM_TIME"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_SYSTEM_TIME; } @@ -1892,12 +1891,12 @@ class MavlinkStreamTimesync : public MavlinkStream return MavlinkStreamTimesync::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "TIMESYNC"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_TIMESYNC; } @@ -1947,12 +1946,12 @@ class MavlinkStreamADSBVehicle : public MavlinkStream return MavlinkStreamADSBVehicle::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ADSB_VEHICLE"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ADSB_VEHICLE; } @@ -2044,12 +2043,12 @@ class MavlinkStreamUTMGlobalPosition : public MavlinkStream return MavlinkStreamUTMGlobalPosition::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "UTM_GLOBAL_POSITION"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_UTM_GLOBAL_POSITION; } @@ -2233,12 +2232,12 @@ class MavlinkStreamCollision : public MavlinkStream return MavlinkStreamCollision::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "COLLISION"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_COLLISION; } @@ -2304,12 +2303,12 @@ class MavlinkStreamCameraTrigger : public MavlinkStream return MavlinkStreamCameraTrigger::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "CAMERA_TRIGGER"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_CAMERA_TRIGGER; } @@ -2412,12 +2411,12 @@ class MavlinkStreamCameraImageCaptured : public MavlinkStream return MavlinkStreamCameraImageCaptured::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "CAMERA_IMAGE_CAPTURED"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED; } @@ -2496,12 +2495,12 @@ class MavlinkStreamGlobalPositionInt : public MavlinkStream return MavlinkStreamGlobalPositionInt::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "GLOBAL_POSITION_INT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_GLOBAL_POSITION_INT; } @@ -2613,12 +2612,12 @@ class MavlinkStreamOdometry : public MavlinkStream return MavlinkStreamOdometry::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ODOMETRY"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ODOMETRY; } @@ -2748,12 +2747,12 @@ class MavlinkStreamLocalPositionNED : public MavlinkStream return MavlinkStreamLocalPositionNED::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "LOCAL_POSITION_NED"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_LOCAL_POSITION_NED; } @@ -2819,12 +2818,12 @@ class MavlinkStreamEstimatorStatus : public MavlinkStream return MavlinkStreamEstimatorStatus::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ESTIMATOR_STATUS"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_VIBRATION; } @@ -2926,12 +2925,12 @@ class MavlinkStreamAttPosMocap : public MavlinkStream return MavlinkStreamAttPosMocap::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ATT_POS_MOCAP"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ATT_POS_MOCAP; } @@ -2999,12 +2998,12 @@ class MavlinkStreamHomePosition : public MavlinkStream return MavlinkStreamHomePosition::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "HOME_POSITION"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_HOME_POSITION; } @@ -3088,7 +3087,7 @@ class MavlinkStreamServoOutputRaw : public MavlinkStream return MavlinkStreamServoOutputRaw::get_name_static(); } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_SERVO_OUTPUT_RAW; } @@ -3098,7 +3097,7 @@ class MavlinkStreamServoOutputRaw : public MavlinkStream return get_id_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { switch (N) { case 0: @@ -3179,7 +3178,7 @@ class MavlinkStreamActuatorControlTarget : public MavlinkStream return MavlinkStreamActuatorControlTarget::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { switch (N) { case 0: @@ -3196,7 +3195,7 @@ class MavlinkStreamActuatorControlTarget : public MavlinkStream } } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET; } @@ -3280,12 +3279,12 @@ class MavlinkStreamHILActuatorControls : public MavlinkStream return MavlinkStreamHILActuatorControls::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "HIL_ACTUATOR_CONTROLS"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS; } @@ -3441,12 +3440,12 @@ class MavlinkStreamPositionTargetGlobalInt : public MavlinkStream return MavlinkStreamPositionTargetGlobalInt::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "POSITION_TARGET_GLOBAL_INT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT; } @@ -3540,12 +3539,12 @@ class MavlinkStreamLocalPositionSetpoint : public MavlinkStream return MavlinkStreamLocalPositionSetpoint::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "POSITION_TARGET_LOCAL_NED"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED; } @@ -3618,12 +3617,12 @@ class MavlinkStreamAttitudeTarget : public MavlinkStream return MavlinkStreamAttitudeTarget::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ATTITUDE_TARGET"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ATTITUDE_TARGET; } @@ -3698,12 +3697,12 @@ class MavlinkStreamRCChannels : public MavlinkStream return MavlinkStreamRCChannels::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "RC_CHANNELS"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_RC_CHANNELS; } @@ -3786,12 +3785,12 @@ class MavlinkStreamManualControl : public MavlinkStream return MavlinkStreamManualControl::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "MANUAL_CONTROL"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_MANUAL_CONTROL; } @@ -3863,12 +3862,12 @@ class MavlinkStreamTrajectoryRepresentationWaypoints: public MavlinkStream return MavlinkStreamTrajectoryRepresentationWaypoints::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "TRAJECTORY_REPRESENTATION_WAYPOINTS"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_TRAJECTORY_REPRESENTATION_WAYPOINTS; } @@ -3972,12 +3971,12 @@ class MavlinkStreamOpticalFlowRad : public MavlinkStream return MavlinkStreamOpticalFlowRad::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "OPTICAL_FLOW_RAD"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_OPTICAL_FLOW_RAD; } @@ -4049,12 +4048,12 @@ class MavlinkStreamNamedValueFloat : public MavlinkStream return MavlinkStreamNamedValueFloat::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "NAMED_VALUE_FLOAT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_NAMED_VALUE_FLOAT; } @@ -4118,12 +4117,12 @@ class MavlinkStreamDebug : public MavlinkStream return MavlinkStreamDebug::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "DEBUG"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_DEBUG; } @@ -4185,12 +4184,12 @@ class MavlinkStreamDebugVect : public MavlinkStream return MavlinkStreamDebugVect::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "DEBUG_VECT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_DEBUG_VECT; } @@ -4256,12 +4255,12 @@ class MavlinkStreamDebugFloatArray : public MavlinkStream return MavlinkStreamDebugFloatArray::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "DEBUG_FLOAT_ARRAY"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY; } @@ -4329,12 +4328,12 @@ class MavlinkStreamNavControllerOutput : public MavlinkStream return MavlinkStreamNavControllerOutput::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "NAV_CONTROLLER_OUTPUT"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT; } @@ -4410,12 +4409,12 @@ class MavlinkStreamCameraCapture : public MavlinkStream return MavlinkStreamCameraCapture::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "CAMERA_CAPTURE"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return 0; } @@ -4482,12 +4481,12 @@ class MavlinkStreamDistanceSensor : public MavlinkStream return MavlinkStreamDistanceSensor::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "DISTANCE_SENSOR"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_DISTANCE_SENSOR; } @@ -4573,12 +4572,12 @@ class MavlinkStreamExtendedSysState : public MavlinkStream return MavlinkStreamExtendedSysState::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "EXTENDED_SYS_STATE"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_EXTENDED_SYS_STATE; } @@ -4689,12 +4688,12 @@ class MavlinkStreamAltitude : public MavlinkStream return MavlinkStreamAltitude::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ALTITUDE"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ALTITUDE; } @@ -4812,12 +4811,12 @@ class MavlinkStreamWind : public MavlinkStream return MavlinkStreamWind::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "WIND_COV"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_WIND_COV; } @@ -4894,12 +4893,12 @@ class MavlinkStreamMountOrientation : public MavlinkStream return MavlinkStreamMountOrientation::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "MOUNT_ORIENTATION"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_MOUNT_ORIENTATION; } @@ -4966,12 +4965,12 @@ class MavlinkStreamGroundTruth : public MavlinkStream return MavlinkStreamGroundTruth::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "GROUND_TRUTH"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_HIL_STATE_QUATERNION; } @@ -5072,12 +5071,12 @@ class MavlinkStreamPing : public MavlinkStream return MavlinkStreamPing::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "PING"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_PING; } @@ -5137,12 +5136,12 @@ class MavlinkStreamOrbitStatus : public MavlinkStream return MavlinkStreamOrbitStatus::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "ORBIT_EXECUTION_STATUS"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ORBIT_EXECUTION_STATUS; } @@ -5206,12 +5205,12 @@ class MavlinkStreamObstacleDistance : public MavlinkStream return MavlinkStreamObstacleDistance::get_name_static(); } - static const char *get_name_static() + static constexpr const char *get_name_static() { return "OBSTACLE_DISTANCE"; } - static uint16_t get_id_static() + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_OBSTACLE_DISTANCE; } @@ -5273,66 +5272,63 @@ class MavlinkStreamObstacleDistance : public MavlinkStream }; static const StreamListItem streams_list[] = { - StreamListItem(&MavlinkStreamHeartbeat::new_instance, &MavlinkStreamHeartbeat::get_name_static, &MavlinkStreamHeartbeat::get_id_static), - StreamListItem(&MavlinkStreamStatustext::new_instance, &MavlinkStreamStatustext::get_name_static, &MavlinkStreamStatustext::get_id_static), - StreamListItem(&MavlinkStreamCommandLong::new_instance, &MavlinkStreamCommandLong::get_name_static, &MavlinkStreamCommandLong::get_id_static), - StreamListItem(&MavlinkStreamSysStatus::new_instance, &MavlinkStreamSysStatus::get_name_static, &MavlinkStreamSysStatus::get_id_static), - StreamListItem(&MavlinkStreamBatteryStatus::new_instance, &MavlinkStreamBatteryStatus::get_name_static, &MavlinkStreamBatteryStatus::get_id_static), - StreamListItem(&MavlinkStreamHighresIMU::new_instance, &MavlinkStreamHighresIMU::get_name_static, &MavlinkStreamHighresIMU::get_id_static), - StreamListItem(&MavlinkStreamScaledIMU::new_instance, &MavlinkStreamScaledIMU::get_name_static, &MavlinkStreamScaledIMU::get_id_static), - StreamListItem(&MavlinkStreamScaledIMU2::new_instance, &MavlinkStreamScaledIMU2::get_name_static, &MavlinkStreamScaledIMU2::get_id_static), - StreamListItem(&MavlinkStreamScaledIMU3::new_instance, &MavlinkStreamScaledIMU3::get_name_static, &MavlinkStreamScaledIMU3::get_id_static), - StreamListItem(&MavlinkStreamScaledPressure<0>::new_instance, &MavlinkStreamScaledPressure<0>::get_name_static, &MavlinkStreamScaledPressure<0>::get_id_static), - StreamListItem(&MavlinkStreamScaledPressure<1>::new_instance, &MavlinkStreamScaledPressure<1>::get_name_static, &MavlinkStreamScaledPressure<1>::get_id_static), - StreamListItem(&MavlinkStreamScaledPressure<2>::new_instance, &MavlinkStreamScaledPressure<2>::get_name_static, &MavlinkStreamScaledPressure<2>::get_id_static), - StreamListItem(&MavlinkStreamAttitude::new_instance, &MavlinkStreamAttitude::get_name_static, &MavlinkStreamAttitude::get_id_static), - StreamListItem(&MavlinkStreamAttitudeQuaternion::new_instance, &MavlinkStreamAttitudeQuaternion::get_name_static, &MavlinkStreamAttitudeQuaternion::get_id_static), - StreamListItem(&MavlinkStreamVFRHUD::new_instance, &MavlinkStreamVFRHUD::get_name_static, &MavlinkStreamVFRHUD::get_id_static), - StreamListItem(&MavlinkStreamGPSRawInt::new_instance, &MavlinkStreamGPSRawInt::get_name_static, &MavlinkStreamGPSRawInt::get_id_static), - StreamListItem(&MavlinkStreamGPS2Raw::new_instance, &MavlinkStreamGPS2Raw::get_name_static, &MavlinkStreamGPS2Raw::get_id_static), - StreamListItem(&MavlinkStreamSystemTime::new_instance, &MavlinkStreamSystemTime::get_name_static, &MavlinkStreamSystemTime::get_id_static), - StreamListItem(&MavlinkStreamTimesync::new_instance, &MavlinkStreamTimesync::get_name_static, &MavlinkStreamTimesync::get_id_static), - StreamListItem(&MavlinkStreamGlobalPositionInt::new_instance, &MavlinkStreamGlobalPositionInt::get_name_static, &MavlinkStreamGlobalPositionInt::get_id_static), - StreamListItem(&MavlinkStreamLocalPositionNED::new_instance, &MavlinkStreamLocalPositionNED::get_name_static, &MavlinkStreamLocalPositionNED::get_id_static), - StreamListItem(&MavlinkStreamOdometry::new_instance, &MavlinkStreamOdometry::get_name_static, &MavlinkStreamOdometry::get_id_static), - StreamListItem(&MavlinkStreamEstimatorStatus::new_instance, &MavlinkStreamEstimatorStatus::get_name_static, &MavlinkStreamEstimatorStatus::get_id_static), - StreamListItem(&MavlinkStreamAttPosMocap::new_instance, &MavlinkStreamAttPosMocap::get_name_static, &MavlinkStreamAttPosMocap::get_id_static), - StreamListItem(&MavlinkStreamHomePosition::new_instance, &MavlinkStreamHomePosition::get_name_static, &MavlinkStreamHomePosition::get_id_static), - StreamListItem(&MavlinkStreamServoOutputRaw<0>::new_instance, &MavlinkStreamServoOutputRaw<0>::get_name_static, &MavlinkStreamServoOutputRaw<0>::get_id_static), - StreamListItem(&MavlinkStreamServoOutputRaw<1>::new_instance, &MavlinkStreamServoOutputRaw<1>::get_name_static, &MavlinkStreamServoOutputRaw<1>::get_id_static), - StreamListItem(&MavlinkStreamHILActuatorControls::new_instance, &MavlinkStreamHILActuatorControls::get_name_static, &MavlinkStreamHILActuatorControls::get_id_static), - StreamListItem(&MavlinkStreamPositionTargetGlobalInt::new_instance, &MavlinkStreamPositionTargetGlobalInt::get_name_static, &MavlinkStreamPositionTargetGlobalInt::get_id_static), - StreamListItem(&MavlinkStreamLocalPositionSetpoint::new_instance, &MavlinkStreamLocalPositionSetpoint::get_name_static, &MavlinkStreamLocalPositionSetpoint::get_id_static), - StreamListItem(&MavlinkStreamAttitudeTarget::new_instance, &MavlinkStreamAttitudeTarget::get_name_static, &MavlinkStreamAttitudeTarget::get_id_static), - StreamListItem(&MavlinkStreamRCChannels::new_instance, &MavlinkStreamRCChannels::get_name_static, &MavlinkStreamRCChannels::get_id_static), - StreamListItem(&MavlinkStreamManualControl::new_instance, &MavlinkStreamManualControl::get_name_static, &MavlinkStreamManualControl::get_id_static), - StreamListItem(&MavlinkStreamTrajectoryRepresentationWaypoints::new_instance, &MavlinkStreamTrajectoryRepresentationWaypoints::get_name_static, &MavlinkStreamTrajectoryRepresentationWaypoints::get_id_static), - StreamListItem(&MavlinkStreamOpticalFlowRad::new_instance, &MavlinkStreamOpticalFlowRad::get_name_static, &MavlinkStreamOpticalFlowRad::get_id_static), - StreamListItem(&MavlinkStreamActuatorControlTarget<0>::new_instance, &MavlinkStreamActuatorControlTarget<0>::get_name_static, &MavlinkStreamActuatorControlTarget<0>::get_id_static), - //StreamListItem(&MavlinkStreamActuatorControlTarget<1>::new_instance, &MavlinkStreamActuatorControlTarget<1>::get_name_static, &MavlinkStreamActuatorControlTarget<1>::get_id_static), - //StreamListItem(&MavlinkStreamActuatorControlTarget<2>::new_instance, &MavlinkStreamActuatorControlTarget<2>::get_name_static, &MavlinkStreamActuatorControlTarget<2>::get_id_static), - //StreamListItem(&MavlinkStreamActuatorControlTarget<3>::new_instance, &MavlinkStreamActuatorControlTarget<3>::get_name_static, &MavlinkStreamActuatorControlTarget<3>::get_id_static), - StreamListItem(&MavlinkStreamNamedValueFloat::new_instance, &MavlinkStreamNamedValueFloat::get_name_static, &MavlinkStreamNamedValueFloat::get_id_static), - StreamListItem(&MavlinkStreamDebug::new_instance, &MavlinkStreamDebug::get_name_static, &MavlinkStreamDebug::get_id_static), - StreamListItem(&MavlinkStreamDebugVect::new_instance, &MavlinkStreamDebugVect::get_name_static, &MavlinkStreamDebugVect::get_id_static), - StreamListItem(&MavlinkStreamDebugFloatArray::new_instance, &MavlinkStreamDebugFloatArray::get_name_static, &MavlinkStreamDebugFloatArray::get_id_static), - StreamListItem(&MavlinkStreamNavControllerOutput::new_instance, &MavlinkStreamNavControllerOutput::get_name_static, &MavlinkStreamNavControllerOutput::get_id_static), - StreamListItem(&MavlinkStreamCameraCapture::new_instance, &MavlinkStreamCameraCapture::get_name_static, &MavlinkStreamCameraCapture::get_id_static), - StreamListItem(&MavlinkStreamCameraTrigger::new_instance, &MavlinkStreamCameraTrigger::get_name_static, &MavlinkStreamCameraTrigger::get_id_static), - StreamListItem(&MavlinkStreamCameraImageCaptured::new_instance, &MavlinkStreamCameraImageCaptured::get_name_static, &MavlinkStreamCameraImageCaptured::get_id_static), - StreamListItem(&MavlinkStreamDistanceSensor::new_instance, &MavlinkStreamDistanceSensor::get_name_static, &MavlinkStreamDistanceSensor::get_id_static), - StreamListItem(&MavlinkStreamExtendedSysState::new_instance, &MavlinkStreamExtendedSysState::get_name_static, &MavlinkStreamExtendedSysState::get_id_static), - StreamListItem(&MavlinkStreamAltitude::new_instance, &MavlinkStreamAltitude::get_name_static, &MavlinkStreamAltitude::get_id_static), - StreamListItem(&MavlinkStreamADSBVehicle::new_instance, &MavlinkStreamADSBVehicle::get_name_static, &MavlinkStreamADSBVehicle::get_id_static), - StreamListItem(&MavlinkStreamUTMGlobalPosition::new_instance, &MavlinkStreamUTMGlobalPosition::get_name_static, &MavlinkStreamUTMGlobalPosition::get_id_static), - StreamListItem(&MavlinkStreamCollision::new_instance, &MavlinkStreamCollision::get_name_static, &MavlinkStreamCollision::get_id_static), - StreamListItem(&MavlinkStreamWind::new_instance, &MavlinkStreamWind::get_name_static, &MavlinkStreamWind::get_id_static), - StreamListItem(&MavlinkStreamMountOrientation::new_instance, &MavlinkStreamMountOrientation::get_name_static, &MavlinkStreamMountOrientation::get_id_static), - StreamListItem(&MavlinkStreamHighLatency2::new_instance, &MavlinkStreamHighLatency2::get_name_static, &MavlinkStreamHighLatency2::get_id_static), - StreamListItem(&MavlinkStreamGroundTruth::new_instance, &MavlinkStreamGroundTruth::get_name_static, &MavlinkStreamGroundTruth::get_id_static), - StreamListItem(&MavlinkStreamPing::new_instance, &MavlinkStreamPing::get_name_static, &MavlinkStreamPing::get_id_static), - StreamListItem(&MavlinkStreamOrbitStatus::new_instance, &MavlinkStreamOrbitStatus::get_name_static, &MavlinkStreamOrbitStatus::get_id_static), - StreamListItem(&MavlinkStreamObstacleDistance::new_instance, &MavlinkStreamObstacleDistance::get_name_static, &MavlinkStreamObstacleDistance::get_id_static) + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item >(), + // create_stream_list_item >(), + // create_stream_list_item >(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item >(), + create_stream_list_item >(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item >(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item(), + create_stream_list_item() }; const char *get_stream_name(const uint16_t msg_id) diff --git a/src/modules/mavlink/mavlink_messages.h b/src/modules/mavlink/mavlink_messages.h index 5179f3cd5375..2c775329cafb 100644 --- a/src/modules/mavlink/mavlink_messages.h +++ b/src/modules/mavlink/mavlink_messages.h @@ -48,16 +48,24 @@ class StreamListItem public: MavlinkStream *(*new_instance)(Mavlink *mavlink); - const char *(*get_name)(); - uint16_t (*get_id)(); + const char *name; + uint16_t id; - StreamListItem(MavlinkStream * (*inst)(Mavlink *mavlink), const char *(*name)(), uint16_t (*id)()) : + StreamListItem(MavlinkStream * (*inst)(Mavlink *mavlink), const char *_name, uint16_t _id) : new_instance(inst), - get_name(name), - get_id(id) {} + name(_name), + id(_id) {} + const char *get_name() const { return name; } + uint16_t get_id() const { return id; } }; +template +static StreamListItem create_stream_list_item() +{ + return StreamListItem(&T::new_instance, T::get_name_static(), T::get_id_static()); +} + const char *get_stream_name(const uint16_t msg_id); MavlinkStream *create_mavlink_stream(const char *stream_name, Mavlink *mavlink);