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; }