Skip to content

Commit

Permalink
[airspeed] reduce number of airspeed raw messages: ETS, MS45xx, SDP3x…
Browse files Browse the repository at this point in the history
…, UAVCAN -> RAW
  • Loading branch information
dewagter committed Sep 21, 2023
1 parent b11dcf7 commit ec77fdf
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 11 deletions.
6 changes: 5 additions & 1 deletion sw/airborne/modules/sensors/airspeed_ets.c
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,11 @@ void airspeed_ets_read_event(void)
stateSetAirspeed_f(airspeed_ets);
#endif
#if AIRSPEED_ETS_SYNC_SEND
DOWNLINK_SEND_AIRSPEED_ETS(DefaultChannel, DefaultDevice, &airspeed_ets_raw, &airspeed_ets_offset, &airspeed_ets);
uint8_t dev_id = AIRSPEED_ETS_ID;
float press = 0;
float temp = 0;
float airspeed = 0;
DOWNLINK_SEND_AIRSPEED_RAW(DefaultChannel, DefaultDevice, &dev_id, &airspeed_ets_raw, &airspeed_ets_offset, &airspeed_ets, &press, &temp, &airspeed);
#endif
} else {
airspeed_ets = 0.0;
Expand Down
13 changes: 10 additions & 3 deletions sw/airborne/modules/sensors/airspeed_ms45xx_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,14 @@ static Butterworth2LowPass ms45xx_filter;

static void ms45xx_downlink(struct transport_tx *trans, struct link_device *dev)
{
pprz_msg_send_AIRSPEED_MS45XX(trans,dev,AC_ID,
uint8_t dev_id = MS45XX_SENDER_ID;
float temp = ((float)ms45xx.temperature) * 0.1f;
pprz_msg_send_AIRSPEED_RAW(trans,dev,AC_ID,
&dev_id,
&ms45xx.raw_p,
&ms45xx.pressure_offset,
&ms45xx.pressure,
&ms45xx.temperature,
&temp,
&ms45xx.airspeed);
}

Expand All @@ -186,6 +191,7 @@ void ms45xx_i2c_init(void)
ms45xx.pressure = 0.;
ms45xx.temperature = 0;
ms45xx.airspeed = 0.;
ms45xx.raw_p = 0;
ms45xx.pressure_type = MS45XX_PRESSURE_TYPE;
ms45xx.pressure_scale = MS45XX_PRESSURE_SCALE;
ms45xx.pressure_offset = MS45XX_PRESSURE_OFFSET;
Expand All @@ -200,7 +206,7 @@ void ms45xx_i2c_init(void)
#endif

#if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_MS45XX, ms45xx_downlink);
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_RAW, ms45xx_downlink);
#endif
}

Expand Down Expand Up @@ -228,6 +234,7 @@ void ms45xx_i2c_event(void)
if (status == 0) {
/* 14bit raw pressure */
uint16_t p_raw = 0x3FFF & (((uint16_t)(ms45xx_trans.buf[0]) << 8) | (uint16_t)(ms45xx_trans.buf[1]));
ms45xx_trans.raw_p = p_raw;

/* 11bit raw temperature, 5 LSB bits not used */
uint16_t temp_raw = 0xFFE0 & (((uint16_t)(ms45xx_trans.buf[2]) << 8) |
Expand Down
1 change: 1 addition & 0 deletions sw/airborne/modules/sensors/airspeed_ms45xx_i2c.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
struct AirspeedMs45xx {
float pressure; ///< (differential) pressure in Pascal
int16_t temperature; ///< Temperature in 0.1 deg Celcius
uint16_t raw_p; ///< Raw temperature
float airspeed; ///< Airspeed in m/s estimated from (differential) pressure.
bool pressure_type; ///< Pressure type Differential of Gauge
float airspeed_scale; ///< Quadratic scale factor to convert (differential) pressure to airspeed
Expand Down
12 changes: 8 additions & 4 deletions sw/airborne/modules/sensors/airspeed_sdp3x.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,13 @@ static bool sdp3x_crc(const uint8_t data[], unsigned size, uint8_t checksum)

static void sdp3x_downlink(struct transport_tx *trans, struct link_device *dev)
{
int16_t temp = (int16_t)(sdp3x.temperature * 10.f);
pprz_msg_send_AIRSPEED_MS45XX(trans,dev,AC_ID,
uint8_t dev_id = SDP3X_SENDER_ID;
pprz_msg_send_AIRSPEED_RAW(trans,dev,AC_ID,
&dev_id,
&sdp3x.raw_p,
&sdp3x.pressure_offset,
&sdp3x.pressure,
&temp,
&sdp3x.temperature,
&sdp3x.airspeed);
}

Expand All @@ -170,7 +173,7 @@ void sdp3x_init(void)
#endif

#if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_MS45XX, sdp3x_downlink); // FIXME
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_RAW, sdp3x_downlink); // FIXME
#endif
}

Expand Down Expand Up @@ -216,6 +219,7 @@ void sdp3x_event(void)
}

int16_t p_raw = ((int16_t)(buf[0]) << 8) | (int16_t)(buf[1]);
sdp3x.raw_p = (uint16_t) p_raw;

float p_out = ((float)p_raw / sdp3x.pressure_scale) - sdp3x.pressure_offset;

Expand Down
1 change: 1 addition & 0 deletions sw/airborne/modules/sensors/airspeed_sdp3x.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ struct AirspeedSdp3x {
bool autoset_offset; ///< Set offset value from current filtered value
bool sync_send; ///< Flag to enable sending every new measurement via telemetry for debugging purpose
bool initialized; ///< init flag
int16_t raw_p; ///< raw value from chip
};

extern struct AirspeedSdp3x sdp3x;
Expand Down
12 changes: 10 additions & 2 deletions sw/airborne/modules/sensors/airspeed_uavcan.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,17 @@ struct airspeed_uavcan_s airspeed_uavcan;

static void airspeed_uavcan_downlink(struct transport_tx *trans, struct link_device *dev)
{
pprz_msg_send_AIRSPEED_UAVCAN(trans,dev,AC_ID,
uint8_t dev_id = UAVCAN_SENDER_ID;
uint16_t raw = 0;
float offset = 0;
float airspeed = 0;
pprz_msg_send_AIRSPEED_RAW(trans,dev,AC_ID,
&dev_id,
&raw,
&offset,
&airspeed_uavcan.diff_p,
&airspeed_uavcan.temperature);
&airspeed_uavcan.temperature,
&airspeed);
}

static void airspeed_uavcan_cb(struct uavcan_iface_t *iface __attribute__((unused)), CanardRxTransfer *transfer) {
Expand Down
2 changes: 1 addition & 1 deletion sw/ext/pprzlink

0 comments on commit ec77fdf

Please sign in to comment.