aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/airspeed
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-01-14 15:40:46 +0100
committerLorenz Meier <lm@inf.ethz.ch>2014-01-14 15:40:46 +0100
commitd19971065140bdfbbe5972f2a394597504abef9e (patch)
tree47f4c08d75a3088806736e091b6338e4d1d48861 /src/drivers/airspeed
parent1f5eda37abffc10b51e4bcd94efa18c1dc76d21f (diff)
downloadpx4-firmware-d19971065140bdfbbe5972f2a394597504abef9e.tar.gz
px4-firmware-d19971065140bdfbbe5972f2a394597504abef9e.tar.bz2
px4-firmware-d19971065140bdfbbe5972f2a394597504abef9e.zip
Fixed up init sequence of all sensors - we can publish in interrupt context, but not advertise! All advertisements now contain valid data
Diffstat (limited to 'src/drivers/airspeed')
-rw-r--r--src/drivers/airspeed/airspeed.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/drivers/airspeed/airspeed.cpp b/src/drivers/airspeed/airspeed.cpp
index 215d3792e..71c0b70f0 100644
--- a/src/drivers/airspeed/airspeed.cpp
+++ b/src/drivers/airspeed/airspeed.cpp
@@ -133,8 +133,20 @@ Airspeed::init()
/* register alternate interfaces if we have to */
_class_instance = register_class_devname(AIRSPEED_DEVICE_PATH);
- if (_airspeed_pub < 0)
- warnx("failed to create airspeed sensor object. Did you start uOrb?");
+ /* publication init */
+ if (_class_instance == CLASS_DEVICE_PRIMARY) {
+
+ /* advertise sensor topic, measure manually to initialize valid report */
+ struct differential_pressure_s arp;
+ measure();
+ _reports->get(&arp);
+
+ /* measurement will have generated a report, publish */
+ _airspeed_pub = orb_advertise(ORB_ID(differential_pressure), &arp);
+
+ if (_airspeed_pub < 0)
+ warnx("failed to create airspeed sensor object. uORB started?");
+ }
ret = OK;
/* sensor is ok, but we don't really know if it is within range */