diff --git a/src/main/fc/settings.c b/src/main/fc/settings.c index f2fd05c935..28992fbf25 100644 --- a/src/main/fc/settings.c +++ b/src/main/fc/settings.c @@ -660,6 +660,9 @@ const clivalue_t valueTable[] = { { "osd_stat_used_mah", VAR_UINT8 | MASTER_VALUE, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_USED_MAH])}, { "osd_stat_max_alt", VAR_UINT8 | MASTER_VALUE, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_MAX_ALTITUDE])}, { "osd_stat_bbox", VAR_UINT8 | MASTER_VALUE, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_BLACKBOX])}, + { "osd_stat_endbatt", VAR_UINT8 | MASTER_VALUE, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_END_BATTERY])}, + { "osd_stat_flytime", VAR_UINT8 | MASTER_VALUE, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_FLYTIME])}, + { "osd_stat_armtime", VAR_UINT8 | MASTER_VALUE, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats[OSD_STAT_ARMEDTIME])}, #endif // PG_SYSTEM_CONFIG diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 370b0723e5..b5f975d7c6 100755 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -120,6 +120,7 @@ typedef struct statistic_s { int16_t max_current; // /10 int16_t min_rssi; int16_t max_altitude; + uint16_t armed_time; } statistic_t; static statistic_t stats; @@ -274,6 +275,13 @@ static void osdDrawSingleElement(uint8_t item) break; } + case OSD_ARMED_TIME: + { + buff[0] = SYM_FLY_M; + tfp_sprintf(buff + 1, "%02d:%02d", stats.armed_time / 60, stats.armed_time % 60); + break; + } + case OSD_FLYMODE: { char *p = "ACRO"; @@ -564,6 +572,7 @@ void osdDrawElements(void) osdDrawSingleElement(OSD_PITCH_ANGLE); osdDrawSingleElement(OSD_ROLL_ANGLE); osdDrawSingleElement(OSD_MAIN_BATT_USAGE); + osdDrawSingleElement(OSD_ARMED_TIME); #ifdef GPS #ifdef CMS @@ -619,6 +628,9 @@ void pgResetFn_osdConfig(osdConfig_t *osdProfile) osdProfile->enabled_stats[OSD_STAT_USED_MAH] = true; osdProfile->enabled_stats[OSD_STAT_MAX_ALTITUDE] = false; osdProfile->enabled_stats[OSD_STAT_BLACKBOX] = true; + osdProfile->enabled_stats[OSD_STAT_END_BATTERY] = false; + osdProfile->enabled_stats[OSD_STAT_FLYTIME] = false; + osdProfile->enabled_stats[OSD_STAT_ARMEDTIME] = true; osdProfile->units = OSD_UNIT_METRIC; @@ -743,6 +755,7 @@ static void osdResetStats(void) stats.max_current = 0; stats.min_rssi = 99; stats.max_altitude = 0; + stats.armed_time = 0; } static void osdUpdateStats(void) @@ -819,6 +832,18 @@ static void osdShowStats(void) displayClearScreen(osdDisplayPort); displayWrite(osdDisplayPort, 2, top++, " --- STATS ---"); + if (osdConfig()->enabled_stats[OSD_STAT_ARMEDTIME]) { + displayWrite(osdDisplayPort, 2, top, "ARMED TIME :"); + tfp_sprintf(buff, "%02d:%02d", stats.armed_time / 60, stats.armed_time % 60); + displayWrite(osdDisplayPort, 22, top++, buff); + } + + if (osdConfig()->enabled_stats[OSD_STAT_FLYTIME]) { + displayWrite(osdDisplayPort, 2, top, "FLY TIME :"); + tfp_sprintf(buff, "%02d:%02d", flyTime / 60, flyTime % 60); + displayWrite(osdDisplayPort, 22, top++, buff); + } + if (osdConfig()->enabled_stats[OSD_STAT_MAX_SPEED] && STATE(GPS_FIX)) { displayWrite(osdDisplayPort, 2, top, "MAX SPEED :"); itoa(stats.max_speed, buff, 10); @@ -831,6 +856,12 @@ static void osdShowStats(void) displayWrite(osdDisplayPort, 22, top++, buff); } + if (osdConfig()->enabled_stats[OSD_STAT_END_BATTERY]) { + displayWrite(osdDisplayPort, 2, top, "END BATTERY :"); + tfp_sprintf(buff, "%d.%1dV", getBatteryVoltage() / 10, getBatteryVoltage() % 10); + displayWrite(osdDisplayPort, 22, top++, buff); + } + if (osdConfig()->enabled_stats[OSD_STAT_MIN_RSSI]) { displayWrite(osdDisplayPort, 2, top, "MIN RSSI :"); itoa(stats.min_rssi, buff, 10); @@ -901,6 +932,7 @@ static void osdRefresh(timeUs_t currentTimeUs) if (ARMING_FLAG(ARMED) && sec != lastSec) { flyTime++; + stats.armed_time++; lastSec = sec; } diff --git a/src/main/io/osd.h b/src/main/io/osd.h index 1b96e5db63..0392c924de 100755 --- a/src/main/io/osd.h +++ b/src/main/io/osd.h @@ -56,6 +56,7 @@ typedef enum { OSD_PITCH_ANGLE, OSD_ROLL_ANGLE, OSD_MAIN_BATT_USAGE, + OSD_ARMED_TIME, OSD_ITEM_COUNT // MUST BE LAST } osd_items_e; @@ -67,6 +68,9 @@ typedef enum { OSD_STAT_USED_MAH, OSD_STAT_MAX_ALTITUDE, OSD_STAT_BLACKBOX, + OSD_STAT_END_BATTERY, + OSD_STAT_FLYTIME, + OSD_STAT_ARMEDTIME, OSD_STAT_COUNT // MUST BE LAST } osd_states_e;