From 8868ee26869474d214b25f653ef2708232096f95 Mon Sep 17 00:00:00 2001 From: "maxim.karban@gmail.com" Date: Sat, 28 Apr 2012 15:21:51 +0000 Subject: [PATCH] previous version rolled back as it works with negative altitude values which is possible at sea level and high atmospheric pressure or in Holland for example --- src/frsky.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/frsky.cpp b/src/frsky.cpp index 35e1d1434..2dd178153 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -169,15 +169,15 @@ int16_t applyChannelRatio(uint8_t channel, int16_t val) inline void evalVario(int16_t altitude_bp, uint16_t altitude_ap) { - int32_t varioAltitude_cm = (int32_t)altitude_bp * 100 + altitude_ap; - uint8_t varioAltitudeQueuePointer = frskyHubData.varioAltitudeQueuePointer + 1; - if (varioAltitudeQueuePointer == VARIO_QUEUE_LENGTH) - varioAltitudeQueuePointer = 0; - frskyHubData.varioAltitudeQueuePointer = varioAltitudeQueuePointer; - frskyHubData.varioSpeed -= frskyHubData.varioAltitudeQueue[varioAltitudeQueuePointer] ; - frskyHubData.varioAltitudeQueue[varioAltitudeQueuePointer] = varioAltitude_cm - frskyHubData.varioAltitude_cm; - frskyHubData.varioAltitude_cm = varioAltitude_cm; - frskyHubData.varioSpeed += frskyHubData.varioAltitudeQueue[varioAltitudeQueuePointer] ; + int32_t varioAltitude_cm = (int32_t)altitude_bp * 100 + (altitude_bp > 0 ? altitude_ap : -altitude_ap); + uint8_t varioAltitudeQueuePointer = frskyHubData.varioAltitudeQueuePointer + 1; + if (varioAltitudeQueuePointer == VARIO_QUEUE_LENGTH) + varioAltitudeQueuePointer = 0; + frskyHubData.varioAltitudeQueuePointer = varioAltitudeQueuePointer; + frskyHubData.varioSpeed -= frskyHubData.varioAltitudeQueue[varioAltitudeQueuePointer] ; + frskyHubData.varioAltitudeQueue[varioAltitudeQueuePointer] = varioAltitude_cm - frskyHubData.varioAltitude_cm; + frskyHubData.varioAltitude_cm = varioAltitude_cm; + frskyHubData.varioSpeed += frskyHubData.varioAltitudeQueue[varioAltitudeQueuePointer] ; } void parseTelemHubByte(uint8_t byte) @@ -275,7 +275,7 @@ void parseTelemHubByte(uint8_t byte) case offsetof(FrskyHubData, baroAltitude_ap): if (g_model.varioSource == VARIO_SOURCE_BARO) { - evalVario(frskyHubData.baroAltitude_bp, frskyHubData.baroAltitude_ap); + evalVario(frskyHubData.baroAltitude_bp-frskyHubData.baroAltitudeOffset, frskyHubData.baroAltitude_ap); } break;