From 4f41aa19bfed43623176b340fc32caec30f014f1 Mon Sep 17 00:00:00 2001 From: Tom Pittenger Date: Tue, 19 Feb 2019 22:24:59 -0800 Subject: [PATCH] AP_ICEngine: add singleton and remove unnecessary variable init --- libraries/AP_ICEngine/AP_ICEngine.cpp | 16 ++++++++++++++-- libraries/AP_ICEngine/AP_ICEngine.h | 8 ++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libraries/AP_ICEngine/AP_ICEngine.cpp b/libraries/AP_ICEngine/AP_ICEngine.cpp index 897bfb5579..8d0010c302 100644 --- a/libraries/AP_ICEngine/AP_ICEngine.cpp +++ b/libraries/AP_ICEngine/AP_ICEngine.cpp @@ -108,10 +108,14 @@ const AP_Param::GroupInfo AP_ICEngine::var_info[] = { // constructor AP_ICEngine::AP_ICEngine(const AP_RPM &_rpm) : - rpm(_rpm), - state(ICE_OFF) + rpm(_rpm) { AP_Param::setup_object_defaults(this, var_info); + + if (_singleton != nullptr) { + AP_HAL::panic("AP_ICEngine must be singleton"); + } + _singleton = this; } /* @@ -289,3 +293,11 @@ bool AP_ICEngine::engine_control(float start_control, float cold_start, float he state = ICE_STARTING; return true; } + +// singleton instance. Should only ever be set in the constructor. +AP_ICEngine *AP_ICEngine::_singleton; +namespace AP { +AP_ICEngine *ice() { + return AP_ICEngine::get_singleton(); + } +} diff --git a/libraries/AP_ICEngine/AP_ICEngine.h b/libraries/AP_ICEngine/AP_ICEngine.h index c74ec4e214..b0a58261bc 100644 --- a/libraries/AP_ICEngine/AP_ICEngine.h +++ b/libraries/AP_ICEngine/AP_ICEngine.h @@ -47,7 +47,11 @@ public: // handle DO_ENGINE_CONTROL messages via MAVLink or mission bool engine_control(float start_control, float cold_start, float height_delay); + static AP_ICEngine *get_singleton() { return _singleton; } + private: + static AP_ICEngine *_singleton; + const AP_RPM &rpm; enum ICE_State state; @@ -95,3 +99,7 @@ private: bool height_pending:1; }; + +namespace AP { + AP_ICEngine *ice(); +};