From 26185f7c07e772553df29a275f2811cba9c0571d Mon Sep 17 00:00:00 2001 From: Daniel Agar <daniel@agar.ca> Date: Tue, 5 Feb 2019 11:06:28 -0500 Subject: [PATCH] navigator orb subscribe/unsubscribe in constructor/destructor --- src/modules/navigator/navigator.h | 3 +- src/modules/navigator/navigator_main.cpp | 53 +++++++++++++----------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/modules/navigator/navigator.h b/src/modules/navigator/navigator.h index 8dc30815d7..2c16d97f23 100644 --- a/src/modules/navigator/navigator.h +++ b/src/modules/navigator/navigator.h @@ -84,7 +84,8 @@ class Navigator : public ModuleBase<Navigator>, public ModuleParams { public: Navigator(); - virtual ~Navigator() = default; + ~Navigator() override; + Navigator(const Navigator &) = delete; Navigator operator=(const Navigator &) = delete; diff --git a/src/modules/navigator/navigator_main.cpp b/src/modules/navigator/navigator_main.cpp index 8356ec5b11..21d4cd6d66 100644 --- a/src/modules/navigator/navigator_main.cpp +++ b/src/modules/navigator/navigator_main.cpp @@ -113,6 +113,35 @@ Navigator::Navigator() : _handle_back_trans_dec_mss = param_find("VT_B_DEC_MSS"); _handle_reverse_delay = param_find("VT_B_REV_DEL"); + + // subscriptions + _global_pos_sub = orb_subscribe(ORB_ID(vehicle_global_position)); + _local_pos_sub = orb_subscribe(ORB_ID(vehicle_local_position)); + _gps_pos_sub = orb_subscribe(ORB_ID(vehicle_gps_position)); + _pos_ctrl_landing_status_sub = orb_subscribe(ORB_ID(position_controller_landing_status)); + _vstatus_sub = orb_subscribe(ORB_ID(vehicle_status)); + _land_detected_sub = orb_subscribe(ORB_ID(vehicle_land_detected)); + _home_pos_sub = orb_subscribe(ORB_ID(home_position)); + _offboard_mission_sub = orb_subscribe(ORB_ID(mission)); + _param_update_sub = orb_subscribe(ORB_ID(parameter_update)); + _vehicle_command_sub = orb_subscribe(ORB_ID(vehicle_command)); + _traffic_sub = orb_subscribe(ORB_ID(transponder_report)); + + reset_triplets(); +} + +Navigator::~Navigator() +{ + orb_unsubscribe(_global_pos_sub); + orb_unsubscribe(_local_pos_sub); + orb_unsubscribe(_gps_pos_sub); + orb_unsubscribe(_pos_ctrl_landing_status_sub); + orb_unsubscribe(_vstatus_sub); + orb_unsubscribe(_land_detected_sub); + orb_unsubscribe(_home_pos_sub); + orb_unsubscribe(_offboard_mission_sub); + orb_unsubscribe(_param_update_sub); + orb_unsubscribe(_vehicle_command_sub); } void @@ -189,19 +218,6 @@ Navigator::run() _geofence.loadFromFile(GEOFENCE_FILENAME); } - /* do subscriptions */ - _global_pos_sub = orb_subscribe(ORB_ID(vehicle_global_position)); - _local_pos_sub = orb_subscribe(ORB_ID(vehicle_local_position)); - _gps_pos_sub = orb_subscribe(ORB_ID(vehicle_gps_position)); - _pos_ctrl_landing_status_sub = orb_subscribe(ORB_ID(position_controller_landing_status)); - _vstatus_sub = orb_subscribe(ORB_ID(vehicle_status)); - _land_detected_sub = orb_subscribe(ORB_ID(vehicle_land_detected)); - _home_pos_sub = orb_subscribe(ORB_ID(home_position)); - _offboard_mission_sub = orb_subscribe(ORB_ID(mission)); - _param_update_sub = orb_subscribe(ORB_ID(parameter_update)); - _vehicle_command_sub = orb_subscribe(ORB_ID(vehicle_command)); - _traffic_sub = orb_subscribe(ORB_ID(transponder_report)); - /* copy all topics first time */ vehicle_status_update(); vehicle_land_detected_update(); @@ -777,17 +793,6 @@ Navigator::run() perf_end(_loop_perf); } - - orb_unsubscribe(_global_pos_sub); - orb_unsubscribe(_local_pos_sub); - orb_unsubscribe(_gps_pos_sub); - orb_unsubscribe(_pos_ctrl_landing_status_sub); - orb_unsubscribe(_vstatus_sub); - orb_unsubscribe(_land_detected_sub); - orb_unsubscribe(_home_pos_sub); - orb_unsubscribe(_offboard_mission_sub); - orb_unsubscribe(_param_update_sub); - orb_unsubscribe(_vehicle_command_sub); } int Navigator::task_spawn(int argc, char *argv[]) -- GitLab