From 15470bd81bf47944d9f1aba567cbbe6859a13a34 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 4 Sep 2014 14:43:29 +1000 Subject: [PATCH] AP_GPS: added GPS_MIN_ELEV parameter allows setting of satellite elevation mask in degrees --- libraries/AP_GPS/AP_GPS.cpp | 8 ++++++++ libraries/AP_GPS/AP_GPS.h | 1 + libraries/AP_GPS/AP_GPS_UBLOX.cpp | 16 ++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/libraries/AP_GPS/AP_GPS.cpp b/libraries/AP_GPS/AP_GPS.cpp index 30f751741c..f9bc25b56d 100644 --- a/libraries/AP_GPS/AP_GPS.cpp +++ b/libraries/AP_GPS/AP_GPS.cpp @@ -71,6 +71,14 @@ const AP_Param::GroupInfo AP_GPS::var_info[] PROGMEM = { // @User: Advanced AP_GROUPINFO("SBAS_MODE", 5, AP_GPS, _sbas_mode, 2), + // @Param: MIN_ELEV + // @DisplayName: Minimum elevation + // @Description: This sets the minimum elevation of satellites above the horizon for them to be used for navigation. Setting this to -100 leaves the minimum elevation set to the GPS modules default. + // @Range: -100 90 + // @Units: Degrees + // @User: Advanced + AP_GROUPINFO("MIN_ELEV", 6, AP_GPS, _min_elevation, -100), + AP_GROUPEND }; diff --git a/libraries/AP_GPS/AP_GPS.h b/libraries/AP_GPS/AP_GPS.h index 25d45e2cda..e83c451260 100644 --- a/libraries/AP_GPS/AP_GPS.h +++ b/libraries/AP_GPS/AP_GPS.h @@ -294,6 +294,7 @@ public: AP_Int8 _min_dgps; #endif AP_Int8 _sbas_mode; + AP_Int8 _min_elevation; // handle sending of initialisation strings to the GPS void send_blob_start(uint8_t instance, const prog_char *_blob, uint16_t size); diff --git a/libraries/AP_GPS/AP_GPS_UBLOX.cpp b/libraries/AP_GPS/AP_GPS_UBLOX.cpp index c3f6e39ce4..201720c8a4 100644 --- a/libraries/AP_GPS/AP_GPS_UBLOX.cpp +++ b/libraries/AP_GPS/AP_GPS_UBLOX.cpp @@ -309,7 +309,11 @@ AP_GPS_UBLOX::_parse_gps(void) } if (_class == CLASS_CFG && _msg_id == MSG_CFG_NAV_SETTINGS) { - Debug("Got engine settings %u\n", (unsigned)_buffer.nav_settings.dynModel); + Debug("Got settings %u min_elev %d drLimit %u\n", + (unsigned)_buffer.nav_settings.dynModel, + (int)_buffer.nav_settings.minElev, + (unsigned)_buffer.nav_settings.drLimit); + _buffer.nav_settings.mask = 0; if (gps._navfilter != AP_GPS::GPS_ENGINE_NONE && _buffer.nav_settings.dynModel != gps._navfilter) { // we've received the current nav settings, change the engine @@ -317,7 +321,15 @@ AP_GPS_UBLOX::_parse_gps(void) Debug("Changing engine setting from %u to %u\n", (unsigned)_buffer.nav_settings.dynModel, (unsigned)gps._navfilter); _buffer.nav_settings.dynModel = gps._navfilter; - _buffer.nav_settings.mask = 1; // only change dynamic model + _buffer.nav_settings.mask |= 1; + } + if (gps._min_elevation != -100 && + _buffer.nav_settings.minElev != gps._min_elevation) { + Debug("Changing min elevation to %d\n", (int)gps._min_elevation); + _buffer.nav_settings.minElev = gps._min_elevation; + _buffer.nav_settings.mask |= 2; + } + if (_buffer.nav_settings.mask != 0) { _send_message(CLASS_CFG, MSG_CFG_NAV_SETTINGS, &_buffer.nav_settings, sizeof(_buffer.nav_settings));