From ab3511c420a461fd3717b5720e2e1677a5c9753d Mon Sep 17 00:00:00 2001 From: mikeller Date: Sun, 12 Jul 2020 14:47:12 +1200 Subject: [PATCH] Added configurable minimum arming time for a flight to be counted in flight statistics. --- src/main/cli/settings.c | 2 +- src/main/fc/stats.c | 14 +++++++------- src/main/pg/stats.c | 5 ++--- src/main/pg/stats.h | 8 +++++--- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index fb80fdde56..a2655ee874 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -1626,7 +1626,7 @@ const clivalue_t valueTable[] = { #endif #ifdef USE_PERSISTENT_STATS - { "stats", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_enabled) }, + { "stats_min_armed_time_s", VAR_INT8 | MASTER_VALUE, .config.minmax = { STATS_OFF, INT8_MAX }, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_min_armed_time_s) }, { "stats_total_flights", VAR_UINT32 | MASTER_VALUE, .config.u32Max = UINT32_MAX, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_total_flights) }, { "stats_total_time_s", VAR_UINT32 | MASTER_VALUE, .config.u32Max = UINT32_MAX, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_total_time_s) }, diff --git a/src/main/fc/stats.c b/src/main/fc/stats.c index d0619a0ae5..8ba13a8b38 100644 --- a/src/main/fc/stats.c +++ b/src/main/fc/stats.c @@ -35,7 +35,6 @@ #include "pg/stats.h" -#define MIN_FLIGHT_TIME_TO_RECORD_STATS_S 10 // Prevent recording stats for that short "flights" [s] #define STATS_SAVE_DELAY_US 500000 // Let disarming complete and save stats after this time static timeMs_t arm_millis; @@ -85,12 +84,13 @@ void statsOnArm(void) void statsOnDisarm(void) { - if (statsConfig()->stats_enabled) { - uint32_t dt = (millis() - arm_millis) / 1000; - if (dt >= MIN_FLIGHT_TIME_TO_RECORD_STATS_S) { - statsConfigMutable()->stats_total_flights += 1; //arm/flight counter - statsConfigMutable()->stats_total_time_s += dt; //[s] - statsConfigMutable()->stats_total_dist_m += (DISTANCE_FLOWN_CM - arm_distance_cm) / 100; //[m] + int8_t minArmedTimeS = statsConfig()->stats_min_armed_time_s; + if (minArmedTimeS >= 0) { + uint32_t dtS = (millis() - arm_millis) / 1000; + if (dtS >= (uint8_t)minArmedTimeS) { + statsConfigMutable()->stats_total_flights += 1; // arm / flight counter + statsConfigMutable()->stats_total_time_s += dtS; + statsConfigMutable()->stats_total_dist_m += (DISTANCE_FLOWN_CM - arm_distance_cm) / 100; saveRequired = true; } diff --git a/src/main/pg/stats.c b/src/main/pg/stats.c index 6b9acc1b51..198c8bf282 100644 --- a/src/main/pg/stats.c +++ b/src/main/pg/stats.c @@ -27,13 +27,12 @@ #include "stats.h" -PG_REGISTER_WITH_RESET_TEMPLATE(statsConfig_t, statsConfig, PG_STATS_CONFIG, 1); +PG_REGISTER_WITH_RESET_TEMPLATE(statsConfig_t, statsConfig, PG_STATS_CONFIG, 2); PG_RESET_TEMPLATE(statsConfig_t, statsConfig, - .stats_enabled = 0, + .stats_min_armed_time_s = STATS_OFF, .stats_total_flights = 0, .stats_total_time_s = 0, .stats_total_dist_m = 0, ); - #endif diff --git a/src/main/pg/stats.h b/src/main/pg/stats.h index 5e02c211db..0663c2eeab 100644 --- a/src/main/pg/stats.h +++ b/src/main/pg/stats.h @@ -23,11 +23,13 @@ #include "pg/pg.h" #include "drivers/io_types.h" +#define STATS_OFF (-1) + typedef struct statsConfig_s { uint32_t stats_total_flights; - uint32_t stats_total_time_s; // [s] - uint32_t stats_total_dist_m; // [m] - uint8_t stats_enabled; + uint32_t stats_total_time_s; + uint32_t stats_total_dist_m; + int8_t stats_min_armed_time_s; } statsConfig_t; PG_DECLARE(statsConfig_t, statsConfig);