diff --git a/libraries/AP_Compass/AP_Compass_HMC5843.cpp b/libraries/AP_Compass/AP_Compass_HMC5843.cpp index 080eaad0ab..adcf941a73 100644 --- a/libraries/AP_Compass/AP_Compass_HMC5843.cpp +++ b/libraries/AP_Compass/AP_Compass_HMC5843.cpp @@ -247,12 +247,20 @@ AP_Compass_HMC5843::init() return false; } + _initialised = true; + return success; } // Read Sensor data bool AP_Compass_HMC5843::read() { + if (!_initialised) { + // someone has tried to enable a compass for the first time + // mid-flight .... we can't do that yet (especially as we won't + // have the right orientation!) + return false; + } if (!healthy) { if (millis() < _retry_time) { return false; diff --git a/libraries/AP_Compass/AP_Compass_HMC5843.h b/libraries/AP_Compass/AP_Compass_HMC5843.h index d5ef7e967d..d419686f08 100644 --- a/libraries/AP_Compass/AP_Compass_HMC5843.h +++ b/libraries/AP_Compass/AP_Compass_HMC5843.h @@ -48,6 +48,7 @@ class AP_Compass_HMC5843 : public Compass { private: float calibration[3]; + bool _initialised; virtual bool read_raw(void); uint8_t _base_config; virtual bool re_initialise(void);