diff --git a/src/modules/land_detector/LandDetector.cpp b/src/modules/land_detector/LandDetector.cpp index 274e5f90c049..d6a750f89a3f 100644 --- a/src/modules/land_detector/LandDetector.cpp +++ b/src/modules/land_detector/LandDetector.cpp @@ -57,6 +57,14 @@ LandDetector::LandDetector() : ScheduledWorkItem(px4::wq_configurations::hp_default), _cycle_perf(perf_alloc(PC_ELAPSED, "land_detector_cycle")) { + _landDetected.timestamp = hrt_absolute_time(); + _landDetected.freefall = false; + _landDetected.landed = true; + _landDetected.ground_contact = false; + _landDetected.maybe_landed = false; + + _p_total_flight_time_high = param_find("LND_FLIGHT_T_HI"); + _p_total_flight_time_low = param_find("LND_FLIGHT_T_LO"); } LandDetector::~LandDetector() @@ -64,33 +72,15 @@ LandDetector::~LandDetector() perf_free(_cycle_perf); } -int LandDetector::start() +void LandDetector::start() { - ScheduleOnInterval(LAND_DETECTOR_UPDATE_INTERVAL, 10000); - - return PX4_OK; + ScheduleOnInterval(LAND_DETECTOR_UPDATE_INTERVAL); } void LandDetector::Run() { perf_begin(_cycle_perf); - if (_object.load() == nullptr) { // not initialized yet - // Advertise the first land detected uORB. - _landDetected.timestamp = hrt_absolute_time(); - _landDetected.freefall = false; - _landDetected.landed = true; - _landDetected.ground_contact = false; - _landDetected.maybe_landed = false; - - _p_total_flight_time_high = param_find("LND_FLIGHT_T_HI"); - _p_total_flight_time_low = param_find("LND_FLIGHT_T_LO"); - - _check_params(true); - - _object.store(this); - } - _check_params(false); _armingSub.update(&_arming); _update_topics(); diff --git a/src/modules/land_detector/LandDetector.h b/src/modules/land_detector/LandDetector.h index 0db422fbb24a..dd0a30516a40 100644 --- a/src/modules/land_detector/LandDetector.h +++ b/src/modules/land_detector/LandDetector.h @@ -96,7 +96,7 @@ class LandDetector : public ModuleBase, px4::ScheduledWorkItem /** * Get the work queue going. */ - int start(); + void start(); protected: diff --git a/src/modules/land_detector/land_detector_main.cpp b/src/modules/land_detector/land_detector_main.cpp index f9550004431d..5d2498e0f5d7 100644 --- a/src/modules/land_detector/land_detector_main.cpp +++ b/src/modules/land_detector/land_detector_main.cpp @@ -62,10 +62,10 @@ int LandDetector::task_spawn(int argc, char *argv[]) { if (argc < 2) { print_usage(); - return -1; + return PX4_ERROR; } - LandDetector *obj; + LandDetector *obj = nullptr; if (strcmp(argv[1], "fixedwing") == 0) { obj = new FixedwingLandDetector(); @@ -81,28 +81,24 @@ int LandDetector::task_spawn(int argc, char *argv[]) } else { print_usage("unknown mode"); - return -1; + return PX4_ERROR; } if (obj == nullptr) { PX4_ERR("alloc failed"); - return -1; - } - - int ret = obj->start(); - - if (ret < 0) { - delete obj; - return ret; + return PX4_ERROR; } // Remember current active mode strncpy(_currentMode, argv[1], sizeof(_currentMode) - 1); _currentMode[sizeof(_currentMode) - 1] = '\0'; - wait_until_running(); // this will wait until _object is set from the cycle method + _object.store(obj); _task_id = task_id_is_work_queue; - return 0; + + obj->start(); + + return PX4_OK; } int LandDetector::print_status()