diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2014-01-14 15:40:46 +0100 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2014-01-14 15:40:46 +0100 |
commit | d19971065140bdfbbe5972f2a394597504abef9e (patch) | |
tree | 47f4c08d75a3088806736e091b6338e4d1d48861 /src/drivers/airspeed/airspeed.cpp | |
parent | 1f5eda37abffc10b51e4bcd94efa18c1dc76d21f (diff) | |
download | px4-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/airspeed.cpp')
-rw-r--r-- | src/drivers/airspeed/airspeed.cpp | 16 |
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 */ |