diff --git a/src/frsky.cpp b/src/frsky.cpp index 804edbc13..d49f108a5 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -171,8 +171,8 @@ inline void evalVario(int16_t altitude_bp, uint8_t altitude_ap) { int16_t varioAltitude_cm = altitude_bp * 100 + (altitude_bp > 0 ? altitude_ap : -altitude_ap); - frskyHubData.queuePointer = (frskyHubData.queuePointer + 1) % VARIO_QUEUE_LENGTH; - frskyHubData.varioAltitudeQueue[frskyHubData.queuePointer] = varioAltitude_cm - frskyHubData.varioAltitude_cm; + frskyHubData.varioAltitudeQueuePointer = (frskyHubData.varioAltitudeQueuePointer + 1) % VARIO_QUEUE_LENGTH; + frskyHubData.varioAltitudeQueue[frskyHubData.varioAltitudeQueuePointer] = varioAltitude_cm - frskyHubData.varioAltitude_cm; frskyHubData.varioAltitude_cm = varioAltitude_cm; int16_t speed = 0; @@ -262,24 +262,23 @@ void parseTelemHubByte(uint8_t byte) frskyHubData.maxTemperature2 = frskyHubData.temperature2; break; - case offsetof(FrskyHubData, baroAltitude_ap): + case offsetof(FrskyHubData, baroAltitude_bp): // First received barometer altitude => Altitude offset if (!frskyHubData.baroAltitudeOffset) frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_bp; - if (g_model.varioSource == VARIO_SOURCE_BARO) { - evalVario(frskyHubData.baroAltitude_bp, frskyHubData.baroAltitude_ap); - } - frskyHubData.baroAltitude_bp += frskyHubData.baroAltitudeOffset; - - frskyHubData.lastBaroAltitude_bp = frskyHubData.baroAltitude_bp; - + if (frskyHubData.baroAltitude_bp > frskyHubData.maxAltitude) frskyHubData.maxAltitude = frskyHubData.baroAltitude_bp; if (frskyHubData.baroAltitude_bp < frskyHubData.minAltitude) frskyHubData.minAltitude = frskyHubData.baroAltitude_bp; + break; + case offsetof(FrskyHubData, baroAltitude_ap): + if (g_model.varioSource == VARIO_SOURCE_BARO) { + evalVario(frskyHubData.baroAltitude_bp, frskyHubData.baroAltitude_ap); + } break; case offsetof(FrskyHubData, gpsAltitude_ap): diff --git a/src/frsky.h b/src/frsky.h index 421447aff..030eb0802 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -114,9 +114,7 @@ PACK(struct FrskyHubData { uint8_t minCellVolts; // 8bits out of 16bits spare reused uint16_t current; // 0x28 Current int16_t varioAltitudeQueue[VARIO_QUEUE_LENGTH]; //circular buffer - uint8_t queuePointer; // circular-buffer pointer - int8_t spare2; - int16_t lastBaroAltitude_bp; + int32_t varioAltitude_cm; int16_t varioSpeed; /* next fields must keep this order! */ int16_t minAltitude; @@ -135,7 +133,7 @@ PACK(struct FrskyHubData { uint16_t gpsDistance; int16_t gpsAltitudeOffset; uint8_t minCellMinVolts; - int32_t varioAltitude_cm; + uint8_t varioAltitudeQueuePointer; // circular-buffer pointer }); #elif defined(WS_HOW_HIGH) diff --git a/src/open9x.cpp b/src/open9x.cpp index 70020871d..2c35a648b 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -430,7 +430,7 @@ int16_t getValue(uint8_t i) else if(i