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
This commit is contained in:
maxim.karban@gmail.com
2012-04-17 17:53:42 +00:00
parent a9e4e885a1
commit bb47626b67
3 changed files with 45 additions and 52 deletions
+29 -38
View File
@@ -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);
+14 -10
View File
@@ -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)
+2 -4
View File
@@ -423,7 +423,7 @@ int16_t getValue(uint8_t i)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RSSI_TX) return frskyRSSI[1].value;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RSSI_RX) return frskyRSSI[0].value;
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_ALT) return frskyHubData.baroAltitude_full;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_ALT) return frskyHubData.Altitude_show;
#endif
#if defined(FRSKY_HUB)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RPM) return frskyHubData.rpm;
@@ -440,9 +440,7 @@ int16_t getValue(uint8_t i)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_VSPD) return frskyHubData.varioSpeed;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_A1) return frskyTelemetry[0].min;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_A2) return frskyTelemetry[1].min;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_ALT) return frskyHubData.minAltitude_full;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MAX_ALT) return frskyHubData.maxAltitude_full;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MAX_DIST) return *(((int16_t*)(&frskyHubData.minAltitude_full))+i-(CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_ALT-1));
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MAX_DIST) return *(((int16_t*)(&frskyHubData.minAltitude))+i-(CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_ALT-1));
#endif
#endif
else return 0;