From ee04c7de961902b14c7100368ed323ec94225a0f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 23 Jul 2014 12:18:37 +1000 Subject: [PATCH] AP_Terrain: hold home location as a special location this ensures home altitude is always available --- libraries/AP_Terrain/AP_Terrain.cpp | 15 +++++++++++++++ libraries/AP_Terrain/AP_Terrain.h | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/libraries/AP_Terrain/AP_Terrain.cpp b/libraries/AP_Terrain/AP_Terrain.cpp index 551263a499..50d2a7718a 100644 --- a/libraries/AP_Terrain/AP_Terrain.cpp +++ b/libraries/AP_Terrain/AP_Terrain.cpp @@ -201,6 +201,13 @@ bool AP_Terrain::height_amsl(const Location &loc, float &height) return false; } + // quick access for home altitude + if (loc.lat == home_loc.lat && + loc.lng == home_loc.lng) { + height = home_height; + return true; + } + struct grid_info info; calculate_grid_info(loc, info); @@ -237,6 +244,14 @@ bool AP_Terrain::height_amsl(const Location &loc, float &height) float avg = (1.0f-info.frac_y) * avg1 + info.frac_y * avg2; height = avg; + + if (loc.lat == ahrs.get_home().lat && + loc.lng == ahrs.get_home().lng) { + // remember home altitude as a special case + home_height = height; + home_loc = loc; + } + return true; } diff --git a/libraries/AP_Terrain/AP_Terrain.h b/libraries/AP_Terrain/AP_Terrain.h index 0af9c555cd..402822ca7c 100644 --- a/libraries/AP_Terrain/AP_Terrain.h +++ b/libraries/AP_Terrain/AP_Terrain.h @@ -269,6 +269,10 @@ private: // have we created the terrain directory? bool directory_created; + + // cache the home altitude, as it is needed so often + float home_height; + Location home_loc; }; #endif // HAVE_AP_TERRAIN #endif // __AP_TERRAIN_H__