From b3113fbcbc8b5c85cb561687ec98f23db7b2d0fb Mon Sep 17 00:00:00 2001 From: "maxim.karban@gmail.com" Date: Tue, 17 Apr 2012 20:02:31 +0000 Subject: [PATCH] now it compiles as rev 556 new option in code VARIO_EXTENDED --- src/audio.cpp | 2 ++ src/audio.h | 2 ++ src/frsky.cpp | 58 ++++++++++++++++++++++++++++++++++++++++--- src/frsky.h | 20 ++++++++++++--- src/model_menus.cpp | 7 +++++- src/myeeprom.h | 6 +++++ src/o9xstrings.cpp | 2 ++ src/open9x.cpp | 8 ++++-- src/translations/en.h | 2 ++ src/translations/fr.h | 2 ++ src/translations/se.h | 2 ++ 11 files changed, 101 insertions(+), 10 deletions(-) diff --git a/src/audio.cpp b/src/audio.cpp index 7a4292234..ba0be6d11 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -155,6 +155,7 @@ void audioQueue::playASAP(uint8_t tFreq, uint8_t tLen, uint8_t tPause, } } +#if defined(VARIO_EXTENDED) void audioQueue::playVario(uint8_t tFreq, uint8_t tLen) { uint8_t next_queueWidx = (t_queueWidx + 1) % AUDIO_QUEUE_LENGTH; @@ -167,6 +168,7 @@ void audioQueue::playVario(uint8_t tFreq, uint8_t tLen) t_queueWidx = next_queueWidx; } } +#endif void audioQueue::event(uint8_t e, uint8_t f) { diff --git a/src/audio.h b/src/audio.h index d932d54d1..e6743074e 100644 --- a/src/audio.h +++ b/src/audio.h @@ -101,7 +101,9 @@ class audioQueue void playASAP(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tRepeat=0, int8_t tFreqIncr=0); +#if defined(VARIO_EXTENDED) void playVario(uint8_t tFreq, uint8_t tLen); +#endif inline bool busy() { return (toneTimeLeft > 0); } diff --git a/src/frsky.cpp b/src/frsky.cpp index 0284ad53d..c67537b8f 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -241,7 +241,7 @@ void parseTelemHubByte(uint8_t byte) if (frskyHubData.temperature2 > frskyHubData.maxTemperature2) frskyHubData.maxTemperature2 = frskyHubData.temperature2; break; - +#if defined(VARIO_EXTENDED) case offsetof(FrskyHubData, baroAltitude_bp): case offsetof(FrskyHubData, baroAltitude_ap): if((!g_model.frsky.use_baroAltitude_ap & (offsetof(FrskyHubData, baroAltitude_bp) == (uint8_t)structPos)) | @@ -282,7 +282,35 @@ void parseTelemHubByte(uint8_t byte) } break; +#else + case offsetof(FrskyHubData, baroAltitude_bp): + // First received barometer altitude => Altitude offset + if (!frskyHubData.baroAltitudeOffset) + frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_bp; + frskyHubData.baroAltitude_bp += frskyHubData.baroAltitudeOffset; + if (frskyHubData.baroAltitude_bp > frskyHubData.maxAltitude) + frskyHubData.maxAltitude = frskyHubData.baroAltitude_bp; + if (frskyHubData.baroAltitude_bp < frskyHubData.minAltitude) + frskyHubData.minAltitude = frskyHubData.baroAltitude_bp; + { + int16_t actVario = frskyHubData.baroAltitude_bp - frskyHubData.lastBaroAltitude_bp; + frskyHubData.varioAcc2 = frskyHubData.varioAcc2 - frskyHubData.varioQueue[frskyHubData.queuePointer]; + frskyHubData.varioQueue[frskyHubData.queuePointer] = actVario; + 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.varioAcc1 - frskyHubData.varioAcc2; + if (++frskyHubData.queuePointer >= 10) + frskyHubData.queuePointer = 0; + frskyHubData.lastBaroAltitude_bp = frskyHubData.baroAltitude_bp; + } + break; +#endif +#if defined(VARIO_EXTENDED) case offsetof(FrskyHubData, gpsAltitude_ap): if(g_model.frsky.use_baroAltitude_ap){ frskyHubData.gpsAltitude_full = frskyHubData.gpsAltitude_bp*100; @@ -309,7 +337,25 @@ void parseTelemHubByte(uint8_t byte) getGpsDistance(); } break; +#else + case offsetof(FrskyHubData, gpsAltitude_ap): + if (!frskyHubData.gpsAltitudeOffset) + frskyHubData.gpsAltitudeOffset = -frskyHubData.gpsAltitude_bp; + frskyHubData.gpsAltitude_bp += frskyHubData.gpsAltitudeOffset; + 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 + getGpsPilotPosition(); + } + else if (frskyHubData.gpsDistNeeded || g_menuStack[0] == menuProcFrsky) { + getGpsDistance(); + } + break; +#endif case offsetof(FrskyHubData, gpsSpeed_bp): // Speed => Max speed if (frskyHubData.gpsSpeed_bp < frskyHubData.maxGpsSpeed) @@ -648,7 +694,7 @@ void check_frsky() if (isFunctionActive(FUNC_VARIO)) { #if defined(AUDIO) - +/* #define VARIO_SPEED_LIMIT 10 //m/s int16_t verticalSpeed = 0; //vertical speed in 0.01m/s now @@ -656,7 +702,7 @@ void check_frsky() verticalSpeed = limit((int16_t)(-VARIO_SPEED_LIMIT*100), (int16_t)frskyHubData.varioSpeed, (int16_t)(+VARIO_SPEED_LIMIT*100)); else verticalSpeed = limit((int16_t)-VARIO_SPEED_LIMIT, (int16_t)(frskyHubData.varioSpeed), (int16_t)+VARIO_SPEED_LIMIT)*100; - + uint8_t SoundAltBeepNextFreq = (0); uint8_t SoundAltBeepNextTime = (0); if(verticalSpeed < g_model.varioSpeedUpMin*VARIO_LIM_MUL && verticalSpeed > g_model.varioSpeedDownMin*(-VARIO_LIM_MUL)) //check thresholds here in cm/s @@ -675,6 +721,7 @@ void check_frsky() audio.playVario(SoundAltBeepNextFreq, 1); } } + */ #endif //AUDIO #endif //FRSKY_HUB || WS_HOW_HIGH } @@ -1105,10 +1152,13 @@ void menuProcFrsky(uint8_t event) putsTime(x, 1+FH+2*FH*i, value, att, att); } else { +#if defined(PCBV4) 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 { + else +#endif + { putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att); } lcd_putsiAtt(j*65, 1+FH+2*FH*i, STR_VTELEMCHNS, field, 0); diff --git a/src/frsky.h b/src/frsky.h index 706a522d8..82899ab03 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -109,10 +109,18 @@ PACK(struct FrskyHubData { uint8_t cellsCount:4; // 4bits out of 16bits spare reused uint8_t minCellVolts; // 8bits out of 16bits spare reused uint16_t current; // 0x28 Current - int8_t spare2[10];//varioQueue[10]; // circular-buffer +#if defined(VARIO_EXTENDED) + int8_t spare2[10]; +#else + int8_t varioQueue[10]; // circular-buffer +#endif uint8_t queuePointer; // circular-buffer pointer int8_t spare3; - int16_t spare4; //lastBaroAltitude_bp; +#if defined(VARIO_EXTENDED) + int16_t spare4; +#else + int16_t lastBaroAltitude_bp; +#endif int16_t varioSpeed; /* next fields must keep this order! */ int16_t minAltitude; @@ -123,19 +131,25 @@ PACK(struct FrskyHubData { uint16_t maxGpsSpeed; uint16_t maxGpsDistance; /* end */ +#if defined(VARIO_EXTENDED) int16_t Altitude_show; int16_t spare5; +#else + int16_t varioAcc1; + int16_t varioAcc2; +#endif uint16_t volts_bp; // 0x3A uint16_t volts_ap; // 0x3B // end of FrSky Hub data uint16_t gpsDistance; int16_t gpsAltitudeOffset; uint8_t minCellMinVolts; +#if defined(VARIO_EXTENDED) int32_t baroAltitude_full; int32_t gpsAltitude_full; int32_t baroAltitude_full_prev; int16_t baroAltitudeQueue_Acc[5]; - +#endif }); #elif defined(WS_HOW_HIGH) diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 0ff33c6a7..90b9ccf10 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -2004,7 +2004,11 @@ void menuProcFunctionSwitches(uint8_t event) void menuProcTelemetry(uint8_t event) { #if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)// v v v v 4 new menu items for baro alt/vario +#if defined(VARIO_EXTENDED) MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 32, {0, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 1, (uint8_t)-1, 0, 0, (uint8_t)-1, 0, 0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, (uint8_t)-1, 2, 2, 2, 2}); +#else + MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 27, {0, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 1, (uint8_t)-1, 0, 0, (uint8_t)-1, 1, 1, 1, 1, (uint8_t)-1, 2, 2, 2, 2}); +#endif #else MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 24, {0, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 1, (uint8_t)-1, 1, 1, 1, 1, (uint8_t)-1, 2, 2, 2, 2}); #endif @@ -2152,7 +2156,7 @@ void menuProcTelemetry(uint8_t event) CHECK_INCDEC_MODELVAR(event, g_model.frsky.blades, 0, 2); } subN++; - +#if defined(VARIO_EXTENDED) if(s_pgOfs