diff --git a/conf/abi.xml b/conf/abi.xml
index bfbc704f26..2159bab595 100644
--- a/conf/abi.xml
+++ b/conf/abi.xml
@@ -73,13 +73,17 @@
-
+
+
+
+
+
diff --git a/sw/airborne/modules/air_data/air_data.c b/sw/airborne/modules/air_data/air_data.c
index 2716f3b5d0..eacbda6d90 100644
--- a/sw/airborne/modules/air_data/air_data.c
+++ b/sw/airborne/modules/air_data/air_data.c
@@ -59,6 +59,13 @@ static abi_event pressure_diff_ev;
#endif
static abi_event temperature_ev;
+/** ABI binding for airspeed
+ */
+#ifndef AIR_DATA_AIRSPEED_ID
+#define AIR_DATA_AIRSPEED_ID ABI_BROADCAST
+#endif
+static abi_event airspeed_ev;
+
/** Default factor to convert estimated airspeed (EAS) to true airspeed (TAS) */
#ifndef AIR_DATA_TAS_FACTOR
#define AIR_DATA_TAS_FACTOR 1.0
@@ -144,6 +151,17 @@ static void temperature_cb(uint8_t __attribute__((unused)) sender_id, float temp
}
}
+static void airspeed_cb(uint8_t __attribute__((unused)) sender_id, float eas)
+{
+ air_data.airspeed = eas;
+ if (air_data.calc_airspeed) {
+ air_data.tas = tas_from_eas(air_data.airspeed);
+#if USE_AIRSPEED_AIR_DATA
+ stateSetAirspeed_f(air_data.airspeed);
+#endif
+ }
+}
+
#if PERIODIC_TELEMETRY
#include "subsystems/datalink/telemetry.h"
@@ -205,6 +223,7 @@ void air_data_init(void)
AbiBindMsgBARO_ABS(AIR_DATA_BARO_ABS_ID, &pressure_abs_ev, pressure_abs_cb);
AbiBindMsgBARO_DIFF(AIR_DATA_BARO_DIFF_ID, &pressure_diff_ev, pressure_diff_cb);
AbiBindMsgTEMPERATURE(AIR_DATA_TEMPERATURE_ID, &temperature_ev, temperature_cb);
+ AbiBindMsgAIRSPEED(AIR_DATA_AIRSPEED_ID, &airspeed_ev, airspeed_cb);
#if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_BARO_RAW, send_baro_raw);
diff --git a/sw/airborne/modules/sensors/mag_pitot_uart.c b/sw/airborne/modules/sensors/mag_pitot_uart.c
index 333f684dc3..29d502cb78 100644
--- a/sw/airborne/modules/sensors/mag_pitot_uart.c
+++ b/sw/airborne/modules/sensors/mag_pitot_uart.c
@@ -108,7 +108,7 @@ static inline void mag_pitot_parse_msg(void)
case DL_IMCU_REMOTE_AIRSPEED: {
// Should be updated to differential pressure
float pitot_ias = DL_IMCU_REMOTE_AIRSPEED_pitot_IAS(mp_msg_buf);
- stateSetAirspeed_f(pitot_ias);
+ AbiSendMsgAIRSPEED(IMU_MAG_PITOT_ID, pitot_ias);
break;
}