From bb47626b67406af3ac830b2aa723104e4b8bf1a3 Mon Sep 17 00:00:00 2001 From: "maxim.karban@gmail.com" Date: Tue, 17 Apr 2012 17:53:42 +0000 Subject: [PATCH] most of previous data fields in frskyData rolled back and new prepared to pack into holes/spares getValue() function mostly rolled back except return frskyHubData.baroAltitude_bp; changed to return frskyHubData.Altitude_show; new variable need to remove flicks of altitude on telemetry screen, which appears on any data deleays --- src/frsky.cpp | 67 ++++++++++++++++++++++---------------------------- src/frsky.h | 24 ++++++++++-------- src/open9x.cpp | 6 ++--- 3 files changed, 45 insertions(+), 52 deletions(-) diff --git a/src/frsky.cpp b/src/frsky.cpp index fab6030f1..2fb35b17f 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -255,30 +255,31 @@ void parseTelemHubByte(uint8_t byte) } if(++frskyHubData.queuePointer>=5) frskyHubData.queuePointer = 0; + + frskyHubData.baroAltitudeQueue_Acc[frskyHubData.queuePointer] = + frskyHubData.baroAltitude_full - frskyHubData.baroAltitude_full_prev; + + frskyHubData.baroAltitude_full_prev = frskyHubData.baroAltitude_full; - int8_t tmp = frskyHubData.queuePointer + 1; - if(tmp >= 5) - tmp = 0; - - frskyHubData.baroAltitudeQueue_full[frskyHubData.queuePointer] = - frskyHubData.baroAltitude_full; - - frskyHubData.varioSpeed = - frskyHubData.baroAltitudeQueue_full[frskyHubData.queuePointer] - - frskyHubData.baroAltitudeQueue_full[tmp]; + frskyHubData.varioSpeed = 0; + for(uint8_t vi=0; vi<5; vi++){ + frskyHubData.varioSpeed += frskyHubData.baroAltitudeQueue_Acc[vi]; + } // First received barometer altitude => Altitude offset if (!frskyHubData.baroAltitudeOffset) - frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_full; - frskyHubData.baroAltitude_full += frskyHubData.baroAltitudeOffset; + frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_bp; + + frskyHubData.baroAltitude_bp += frskyHubData.baroAltitudeOffset; + if(g_model.frsky.use_baroAltitude_only){ - if (frskyHubData.baroAltitude_full > frskyHubData.maxAltitude_full) - frskyHubData.maxAltitude_full = frskyHubData.baroAltitude_full; - if (frskyHubData.baroAltitude_full < frskyHubData.minAltitude_full) - frskyHubData.minAltitude_full = frskyHubData.baroAltitude_full; + frskyHubData.Altitude_show = frskyHubData.gpsAltitude_bp; + if (frskyHubData.baroAltitude_bp > frskyHubData.maxAltitude) + frskyHubData.maxAltitude = frskyHubData.baroAltitude_bp; + if (frskyHubData.baroAltitude_bp < frskyHubData.minAltitude) + frskyHubData.minAltitude = frskyHubData.baroAltitude_bp; } - } break; @@ -289,13 +290,16 @@ void parseTelemHubByte(uint8_t byte) frskyHubData.gpsAltitude_full = frskyHubData.gpsAltitude_bp; } if (!frskyHubData.gpsAltitudeOffset) - frskyHubData.gpsAltitudeOffset = -frskyHubData.gpsAltitude_full; - frskyHubData.gpsAltitude_full += frskyHubData.gpsAltitudeOffset; + frskyHubData.gpsAltitudeOffset = -frskyHubData.gpsAltitude_bp; + + frskyHubData.gpsAltitude_bp += frskyHubData.gpsAltitudeOffset; + if(!g_model.frsky.use_baroAltitude_only){ - if (frskyHubData.gpsAltitude_full > frskyHubData.maxAltitude_full) - frskyHubData.maxAltitude_full = frskyHubData.gpsAltitude_full; - if (frskyHubData.gpsAltitude_full < frskyHubData.minAltitude_full) - frskyHubData.minAltitude_full = frskyHubData.gpsAltitude_full; + frskyHubData.Altitude_show = frskyHubData.gpsAltitude_bp; + if (frskyHubData.gpsAltitude_bp > frskyHubData.maxAltitude) + frskyHubData.maxAltitude = frskyHubData.gpsAltitude_bp; + if (frskyHubData.gpsAltitude_bp < frskyHubData.minAltitude) + frskyHubData.minAltitude = frskyHubData.gpsAltitude_bp; } if (!frskyHubData.pilotLatitude && !frskyHubData.pilotLongitude) { // First received GPS position => Pilot GPS position @@ -1101,21 +1105,8 @@ void menuProcFrsky(uint8_t event) putsTime(x, 1+FH+2*FH*i, value, att, att); } else { - if(g_model.frsky.use_baroAltitude_ap & - ((field == TELEM_VSPD) | - (field == TELEM_ALT) | - (field == TELEM_MIN_ALT) | - (field == TELEM_MAX_ALT))){ - switch(field){ - case TELEM_VSPD: - putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att|PREC2); - break; - case TELEM_ALT: - case TELEM_MIN_ALT: - case TELEM_MAX_ALT: - putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value/100, att); - break; - } + if(g_model.frsky.use_baroAltitude_ap & (field == TELEM_VSPD)){ + putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att|PREC2); } else { putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att); diff --git a/src/frsky.h b/src/frsky.h index 0a774c8e1..706a522d8 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -105,33 +105,37 @@ PACK(struct FrskyHubData { int16_t accelZ; // 0x26 1/256th gram (-8g ~ +8g) uint8_t gpsDistNeeded:1; // 1bits out of 16bits spare reused int8_t gpsFix:2; // 2bits out of 16bits spare reused: -1=never fixed, 0=not fixed now, 1=fixed - uint8_t spare1:1; // + uint8_t spare1:1; // uint8_t cellsCount:4; // 4bits out of 16bits spare reused uint8_t minCellVolts; // 8bits out of 16bits spare reused uint16_t current; // 0x28 Current - int32_t minAltitude_full; //4 bytes from varioQueue reused - int32_t maxAltitude_full; //4 bytes from varioQueue reused - int8_t spare2[2];//varioQueue[10]; // circular-buffer 2 - uint8_t queuePointer; // circular-buffer pointer 3 - int8_t spare3;// 4 - int16_t spare4;//lastBaroAltitude; 6 + int8_t spare2[10];//varioQueue[10]; // circular-buffer + uint8_t queuePointer; // circular-buffer pointer + int8_t spare3; + int16_t spare4; //lastBaroAltitude_bp; int16_t varioSpeed; /* next fields must keep this order! */ - int32_t gpsAltitude_full;//4 bytes fro minAltitude and maxAltitude reused + int16_t minAltitude; + int16_t maxAltitude; uint16_t maxRpm; int16_t maxTemperature1; int16_t maxTemperature2; uint16_t maxGpsSpeed; uint16_t maxGpsDistance; /* end */ - int32_t baroAltitude_full;// 4 bytes from varioAcc1 and varioAcc2 reused + int16_t Altitude_show; + int16_t spare5; uint16_t volts_bp; // 0x3A uint16_t volts_ap; // 0x3B // end of FrSky Hub data uint16_t gpsDistance; int16_t gpsAltitudeOffset; uint8_t minCellMinVolts; - int32_t baroAltitudeQueue_full[5];//20 + int32_t baroAltitude_full; + int32_t gpsAltitude_full; + int32_t baroAltitude_full_prev; + int16_t baroAltitudeQueue_Acc[5]; + }); #elif defined(WS_HOW_HIGH) diff --git a/src/open9x.cpp b/src/open9x.cpp index 0cd2f3fee..345f826da 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -423,7 +423,7 @@ int16_t getValue(uint8_t i) else if(i