AP_RSSI: add singleton

This commit is contained in:
Peter Barker 2018-05-02 20:16:35 +10:00 committed by Francisco Ferreira
parent a47bda0b41
commit ac2fe5f042
2 changed files with 32 additions and 0 deletions

View File

@ -97,6 +97,10 @@ const AP_Param::GroupInfo AP_RSSI::var_info[] = {
AP_RSSI::AP_RSSI()
{
AP_Param::setup_object_defaults(this, var_info);
if (_s_instance) {
AP_HAL::panic("Too many RSSI sensors");
}
_s_instance = this;
}
// destructor
@ -104,6 +108,14 @@ AP_RSSI::~AP_RSSI(void)
{
}
/*
* Get the AP_RSSI singleton
*/
AP_RSSI *AP_RSSI::get_instance()
{
return _s_instance;
}
// Initialize the rssi object and prepare it for use
void AP_RSSI::init()
{
@ -200,3 +212,14 @@ float AP_RSSI::scale_and_constrain_float_rssi(float current_rssi_value, float lo
// value retrieved falls outside the user-supplied range.
return constrain_float(rssi_value_scaled, 0.0f, 1.0f);
}
AP_RSSI *AP_RSSI::_s_instance = nullptr;
namespace AP {
AP_RSSI *rssi()
{
return AP_RSSI::get_instance();
}
};

View File

@ -37,6 +37,8 @@ public:
// destructor
~AP_RSSI(void);
static AP_RSSI *get_instance();
// Initialize the rssi object and prepare it for use
void init();
@ -55,6 +57,9 @@ public:
static const struct AP_Param::GroupInfo var_info[];
private:
static AP_RSSI *_s_instance;
// RSSI parameters
AP_Int8 rssi_type; // Type of RSSI being used
AP_Int8 rssi_analog_pin; // Analog pin RSSI value found on
@ -77,3 +82,7 @@ private:
// Scale and constrain a float rssi value to 0.0 to 1.0 range
float scale_and_constrain_float_rssi(float current_rssi_value, float low_rssi_range, float high_rssi_range);
};
namespace AP {
AP_RSSI *rssi();
};