diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 92d1cfaa9..fb13d2ddf 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -99,6 +99,23 @@ TelemetryProtocol getTelemetryProtocol() void FrskyValueWithMin::set(uint8_t value) { +#if defined(CPUARM) + if (this->value == 0) { + memset(values, value, TELEMETRY_AVERAGE_COUNT); + this->value = value; + } + else { + unsigned int sum = 0; + for (int i=0; ivalue = sum/TELEMETRY_AVERAGE_COUNT; + } +#else if (this->value == 0) { this->value = value; } @@ -109,6 +126,7 @@ void FrskyValueWithMin::set(uint8_t value) sum = 0; } } +#endif if (!min || value < min) { min = value; diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index af7a022f2..3342949b1 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -69,6 +69,16 @@ enum TelemetryStates { extern uint8_t telemetryState; #endif +#if defined(CPUARM) +#define TELEMETRY_AVERAGE_COUNT 4 +class FrskyValueWithMin { + public: + uint8_t value; + uint8_t min; + uint8_t values[TELEMETRY_AVERAGE_COUNT]; + void set(uint8_t value); +}; +#else class FrskyValueWithMin { public: uint8_t value; @@ -76,6 +86,7 @@ class FrskyValueWithMin { uint16_t sum; void set(uint8_t value); }; +#endif class FrskyValueWithMinMax: public FrskyValueWithMin { public: