55
66#include "fc/settings.h"
77#include "fc/stats.h"
8+ #include "fc/runtime_config.h"
89
910#include "sensors/battery.h"
11+ #include "sensors/sensors.h"
1012
1113#include "drivers/time.h"
1214#include "navigation/navigation.h"
1618#include "config/parameter_group_ids.h"
1719
1820#define MIN_FLIGHT_TIME_TO_RECORD_STATS_S 10 //prevent recording stats for that short "flights" [s]
21+ #define MIN_FLIGHT_DISTANCE_M 30 // minimum distance flown for a flight to be registered [m]
1922
2023
21- PG_REGISTER_WITH_RESET_TEMPLATE (statsConfig_t , statsConfig , PG_STATS_CONFIG , 1 );
24+ PG_REGISTER_WITH_RESET_TEMPLATE (statsConfig_t , statsConfig , PG_STATS_CONFIG , 2 );
2225
2326PG_RESET_TEMPLATE (statsConfig_t , statsConfig ,
2427 .stats_enabled = SETTING_STATS_DEFAULT ,
2528 .stats_total_time = SETTING_STATS_TOTAL_TIME_DEFAULT ,
2629 .stats_total_dist = SETTING_STATS_TOTAL_DIST_DEFAULT ,
30+ .stats_flight_count = SETTING_STATS_FLIGHT_COUNT_DEFAULT ,
2731#ifdef USE_ADC
2832 .stats_total_energy = SETTING_STATS_TOTAL_ENERGY_DEFAULT
2933#endif
3034);
3135
3236static uint32_t arm_millis ;
3337static uint32_t arm_distance_cm ;
38+ static uint16_t prev_flight_count ;
3439
3540#ifdef USE_ADC
3641static uint32_t arm_mWhDrawn ;
@@ -41,6 +46,11 @@ uint32_t getFlyingEnergy(void) {
4146}
4247#endif
4348
49+ void statsInit (void )
50+ {
51+ prev_flight_count = statsConfig ()-> stats_flight_count ;
52+ }
53+
4454void statsOnArm (void )
4555{
4656 arm_millis = millis ();
@@ -57,6 +67,18 @@ void statsOnDisarm(void)
5767 if (dt >= MIN_FLIGHT_TIME_TO_RECORD_STATS_S ) {
5868 statsConfigMutable ()-> stats_total_time += dt ; //[s]
5969 statsConfigMutable ()-> stats_total_dist += (getTotalTravelDistance () - arm_distance_cm ) / 100 ; //[m]
70+ #ifdef USE_GPS
71+ // flight counter is incremented at most once per power on
72+ if (sensors (SENSOR_GPS )) {
73+ if ((getTotalTravelDistance () - arm_distance_cm ) / 100 >= MIN_FLIGHT_DISTANCE_M ) {
74+ statsConfigMutable ()-> stats_flight_count = prev_flight_count + 1 ;
75+ }
76+ } else {
77+ statsConfigMutable ()-> stats_flight_count = prev_flight_count + 1 ;
78+ }
79+ #else
80+ statsConfigMutable ()-> stats_flight_count = prev_flight_count + 1 ;
81+ #endif // USE_GPS
6082#ifdef USE_ADC
6183 if (feature (FEATURE_VBAT ) && isAmperageConfigured ()) {
6284 const uint32_t energy = getMWhDrawn () - arm_mWhDrawn ;
0 commit comments