From 8026273cb08053e7a26a985e85b7acafa5665d81 Mon Sep 17 00:00:00 2001 From: tumbili Date: Thu, 23 Jun 2016 15:54:24 +0200 Subject: [PATCH] land_detector: do not publish if landing or freefall state has not changed Signed-off-by: tumbili and bkueng --- src/modules/land_detector/LandDetector.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/modules/land_detector/LandDetector.cpp b/src/modules/land_detector/LandDetector.cpp index 484ebd6d19..a80b1dad48 100644 --- a/src/modules/land_detector/LandDetector.cpp +++ b/src/modules/land_detector/LandDetector.cpp @@ -103,17 +103,15 @@ void LandDetector::cycle() } LandDetectionResult current_state = update(); + bool landDetected = (current_state == LANDDETECTION_RES_LANDED); + bool freefallDetected = (current_state == LANDDETECTION_RES_FREEFALL); - _landDetected.timestamp = hrt_absolute_time(); - _landDetected.landed = (current_state == LANDDETECTION_RES_LANDED); - _landDetected.freefall = (current_state == LANDDETECTION_RES_FREEFALL); - - // publish the land detected broadcast - if (_landDetectedPub == nullptr) { - _landDetectedPub = orb_advertise(ORB_ID(vehicle_land_detected), &_landDetected); - - } else { - orb_publish(ORB_ID(vehicle_land_detected), (orb_advert_t)_landDetectedPub, &_landDetected); + if (_landDetectedPub == nullptr || _landDetected.landed != landDetected || _landDetected.freefall != freefallDetected) { + _landDetected.timestamp = hrt_absolute_time(); + _landDetected.landed = (current_state == LANDDETECTION_RES_LANDED); + _landDetected.freefall = (current_state == LANDDETECTION_RES_FREEFALL); + int instance; + orb_publish_auto(ORB_ID(vehicle_land_detected), &_landDetectedPub, &_landDetected, &instance, ORB_PRIO_DEFAULT); } if (!_taskShouldExit) {