From 787420931e4401a92de8c3940da4bda7d8d9f9c1 Mon Sep 17 00:00:00 2001 From: rde-mato Date: Fri, 3 Nov 2017 15:43:44 +1100 Subject: [PATCH] AP_Baro: make AP_Baro a singleton for AP_Airspeed --- libraries/AP_Baro/AP_Baro.cpp | 5 +++++ libraries/AP_Baro/AP_Baro.h | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/libraries/AP_Baro/AP_Baro.cpp b/libraries/AP_Baro/AP_Baro.cpp index d01a88331a..324e9412f0 100644 --- a/libraries/AP_Baro/AP_Baro.cpp +++ b/libraries/AP_Baro/AP_Baro.cpp @@ -141,11 +141,16 @@ const AP_Param::GroupInfo AP_Baro::var_info[] = { AP_GROUPEND }; +// singleton instance +AP_Baro *AP_Baro::_instance; + /* AP_Baro constructor */ AP_Baro::AP_Baro() { + _instance = this; + AP_Param::setup_object_defaults(this, var_info); } diff --git a/libraries/AP_Baro/AP_Baro.h b/libraries/AP_Baro/AP_Baro.h index e28a5af862..71e92e79d2 100644 --- a/libraries/AP_Baro/AP_Baro.h +++ b/libraries/AP_Baro/AP_Baro.h @@ -30,6 +30,11 @@ public: AP_Baro(const AP_Baro &other) = delete; AP_Baro &operator=(const AP_Baro&) = delete; + // get singleton + static AP_Baro *get_instance(void) { + return _instance; + } + // barometer types typedef enum { BARO_TYPE_AIR, @@ -164,6 +169,9 @@ public: void set_pressure_correction(uint8_t instance, float p_correction); private: + // singleton + static AP_Baro *_instance; + // how many drivers do we have? uint8_t _num_drivers; AP_Baro_Backend *drivers[BARO_MAX_DRIVERS];