Vario Speed

This commit is contained in:
bsongis
2012-03-21 20:00:54 +00:00
parent 2e5cf5a4f3
commit cdf61de493
2 changed files with 19 additions and 10 deletions
+9 -5
View File
@@ -254,14 +254,18 @@ void parseTelemHubByte(uint8_t byte)
case offsetof(FrskyHubData, baroAltitude_ap):
{
int16_t actVario = frskyHubData.baroAltitude_bp - frskyHubData.lastBaroAltitude_bp;
actVario *= 100;
actVario += frskyHubData.baroAltitude_ap - frskyHubData.lastBaroAltitude_ap;
frskyHubData.varioSpeed = frskyHubData.varioSpeed - frskyHubData.varioQueue[frskyHubData.queuePointer] + actVario;
frskyHubData.varioAcc2 = frskyHubData.varioAcc2 - frskyHubData.varioQueue[frskyHubData.queuePointer];
frskyHubData.varioQueue[frskyHubData.queuePointer] = actVario;
if (++frskyHubData.queuePointer > 4)
uint8_t tmp = frskyHubData.queuePointer + 5;
if (tmp >= 10)
tmp -= 10;
tmp = (uint8_t)frskyHubData.varioQueue[tmp];
frskyHubData.varioAcc2 = frskyHubData.varioAcc2 + (int8_t)tmp;
frskyHubData.varioAcc1 = frskyHubData.varioAcc1 + actVario - (int8_t)tmp;
frskyHubData.varioSpeed = frskyHubData.varioAcc2 - frskyHubData.varioAcc1;
if (++frskyHubData.queuePointer >= 10)
frskyHubData.queuePointer=0;
frskyHubData.lastBaroAltitude_bp = frskyHubData.baroAltitude_bp;
frskyHubData.lastBaroAltitude_ap = frskyHubData.baroAltitude_ap;
break;
}
+10 -5
View File
@@ -105,15 +105,16 @@ 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 spare: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
int16_t varioQueue[5]; // circular-buffer
int8_t varioQueue[10]; // circular-buffer
uint8_t queuePointer; // circular-buffer pointer
int8_t lastBaroAltitude_ap;
int8_t spare2;
int16_t lastBaroAltitude_bp;
int16_t varioSpeed;
/* next fields must keep this order! */
int16_t minAltitude;
int16_t maxAltitude;
uint16_t maxRpm;
@@ -121,12 +122,16 @@ PACK(struct FrskyHubData {
int16_t maxTemperature2;
uint16_t maxGpsSpeed;
uint16_t maxGpsDistance;
uint16_t gpsDistance;
int16_t gpsAltitudeOffset;
/* end */
int16_t varioAcc1;
int16_t varioAcc2;
uint16_t volts_bp; // 0x3A
uint16_t volts_ap; // 0x3B
// end of FrSky Hub data
uint16_t gpsDistance;
int16_t gpsAltitudeOffset;
uint8_t minCellMinVolts;
});
#elif defined(WS_HOW_HIGH)