From 16b49399db427d953f416c495c68cf68bf3ac32d Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Fri, 17 Aug 2018 12:43:46 +1000 Subject: [PATCH] AP_Mission: add singleton --- libraries/AP_Mission/AP_Mission.cpp | 12 ++++++++++++ libraries/AP_Mission/AP_Mission.h | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/libraries/AP_Mission/AP_Mission.cpp b/libraries/AP_Mission/AP_Mission.cpp index a8a0abe016..2dfcedd63d 100644 --- a/libraries/AP_Mission/AP_Mission.cpp +++ b/libraries/AP_Mission/AP_Mission.cpp @@ -1768,3 +1768,15 @@ const char *AP_Mission::Mission_Command::type() const { return "?"; } } + +// singleton instance +AP_Mission *AP_Mission::_singleton; + +namespace AP { + +AP_Mission *mission() +{ + return AP_Mission::get_singleton(); +} + +} diff --git a/libraries/AP_Mission/AP_Mission.h b/libraries/AP_Mission/AP_Mission.h index 6f6f8b57a8..eb6fca5a64 100644 --- a/libraries/AP_Mission/AP_Mission.h +++ b/libraries/AP_Mission/AP_Mission.h @@ -291,6 +291,13 @@ public: _prev_nav_cmd_wp_index(AP_MISSION_CMD_INDEX_NONE), _last_change_time_ms(0) { +#if CONFIG_HAL_BOARD == HAL_BOARD_SITL + if (_singleton != nullptr) { + AP_HAL::panic("Mission must be singleton"); + } +#endif + _singleton = this; + // load parameter defaults AP_Param::setup_object_defaults(this, var_info); @@ -304,6 +311,11 @@ public: _flags.do_cmd_loaded = false; } + // get singleton instance + static AP_Mission *get_singleton() { + return _singleton; + } + /* Do not allow copies */ AP_Mission(const AP_Mission &other) = delete; AP_Mission &operator=(const AP_Mission&) = delete; @@ -470,6 +482,8 @@ public: static const struct AP_Param::GroupInfo var_info[]; private: + static AP_Mission *_singleton; + static StorageAccess _storage; struct Mission_Flags { @@ -563,3 +577,7 @@ private: // const functions static HAL_Semaphore_Recursive _rsem; }; + +namespace AP { + AP_Mission *mission(); +};