From 64aa5824a72ee1396b8779a6b542571a947db13a Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Tue, 13 Jun 2017 09:13:19 +0200 Subject: [PATCH] Maximum Home Distance in OSD stats --- src/main/fc/settings.c | 1 + src/main/io/osd.c | 26 ++++++++++++++++++++------ src/main/io/osd.h | 1 + 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/fc/settings.c b/src/main/fc/settings.c index a5322d971..64e0d775e 100644 --- a/src/main/fc/settings.c +++ b/src/main/fc/settings.c @@ -660,6 +660,7 @@ const clivalue_t valueTable[] = { { "osd_disarmed_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_DISARMED]) }, { "osd_stat_max_spd", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_MAX_SPEED])}, + { "osd_stat_max_dist", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_MAX_DISTANCE])}, { "osd_stat_min_batt", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_MIN_BATTERY])}, { "osd_stat_min_rssi", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_MIN_RSSI])}, { "osd_stat_max_curr", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_MAX_CURRENT])}, diff --git a/src/main/io/osd.c b/src/main/io/osd.c index ca68d18d1..75a8cc182 100755 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -118,6 +118,7 @@ typedef struct statistic_s { int16_t max_current; // /10 int16_t min_rssi; int16_t max_altitude; + int16_t max_distance; uint16_t armed_time; } statistic_t; @@ -675,6 +676,7 @@ void pgResetFn_osdConfig(osdConfig_t *osdConfig) osdConfig->enabled_stats[OSD_STAT_END_BATTERY] = false; osdConfig->enabled_stats[OSD_STAT_FLYTIME] = false; osdConfig->enabled_stats[OSD_STAT_ARMEDTIME] = true; + osdConfig->enabled_stats[OSD_STAT_MAX_DISTANCE] = false; osdConfig->units = OSD_UNIT_METRIC; @@ -792,13 +794,14 @@ void osdResetAlarms(void) static void osdResetStats(void) { - stats.max_current = 0; - stats.max_speed = 0; - stats.min_voltage = 500; - stats.max_current = 0; - stats.min_rssi = 99; + stats.max_current = 0; + stats.max_speed = 0; + stats.min_voltage = 500; + stats.max_current = 0; + stats.min_rssi = 99; stats.max_altitude = 0; - stats.armed_time = 0; + stats.max_distance = 0; + stats.armed_time = 0; } static void osdUpdateStats(void) @@ -822,6 +825,12 @@ static void osdUpdateStats(void) if (stats.max_altitude < getEstimatedAltitude()) stats.max_altitude = getEstimatedAltitude(); + +#ifdef GPS + if (STATE(GPS_FIX) && STATE(GPS_FIX_HOME) && (stats.max_distance < GPS_distanceToHome)) { + stats.max_distance = GPS_distanceToHome; + } +#endif } #ifdef BLACKBOX @@ -896,6 +905,11 @@ static void osdShowStats(void) osdDisplayStatisticLabel(top++, "MAX SPEED", buff); } + if (osdConfig()->enabled_stats[OSD_STAT_MAX_DISTANCE]) { + tfp_sprintf(buff, "%d%c", osdGetMetersToSelectedUnit(stats.max_distance), osdGetMetersToSelectedUnitSymbol()); + osdDisplayStatisticLabel(top++, "MAX DISTANCE", buff); + } + if (osdConfig()->enabled_stats[OSD_STAT_MIN_BATTERY]) { tfp_sprintf(buff, "%d.%1d%c", stats.min_voltage / 10, stats.min_voltage % 10, SYM_VOLT); osdDisplayStatisticLabel(top++, "MIN BATTERY", buff); diff --git a/src/main/io/osd.h b/src/main/io/osd.h index 6afaae304..1a23d6fb6 100755 --- a/src/main/io/osd.h +++ b/src/main/io/osd.h @@ -74,6 +74,7 @@ typedef enum { OSD_STAT_END_BATTERY, OSD_STAT_FLYTIME, OSD_STAT_ARMEDTIME, + OSD_STAT_MAX_DISTANCE, OSD_STAT_COUNT // MUST BE LAST } osd_stats_e;