diff --git a/src/frsky.cpp b/src/frsky.cpp index 7184a9697..103f482a3 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -643,22 +643,22 @@ void check_frsky() static uint16_t s_varioTmr = 0; if (isFunctionActive(FUNC_VARIO)) { #if defined(AUDIO) - int16_t verticalSpeed = 0; - // TODO: get negative values in Up Speed to shift zero, i.e. get positive sound on small negative speeds - // positive values in g_model.varioSpeedUpMin must works same as now - // negative must make an offset in sounds - // also changes need in model_menus.cpp - verticalSpeed = limit((int16_t)(-VARIO_SPEED_LIMIT*100), (int16_t)frskyHubData.varioSpeed, (int16_t)(+VARIO_SPEED_LIMIT*100)); + int16_t varioSpeedUpMin = (g_model.varioSpeedUpMin - VARIO_SPEED_LIMIT_UP_CENTER)*VARIO_SPEED_LIMIT_MUL; + int16_t varioSpeedDownMin = (VARIO_SPEED_LIMIT_DOWN_OFF - g_model.varioSpeedDownMin)*(-VARIO_SPEED_LIMIT_MUL); + int16_t verticalSpeed = limit((int16_t)(-VARIO_SPEED_LIMIT*100), (int16_t)frskyHubData.varioSpeed, (int16_t)(+VARIO_SPEED_LIMIT*100)); uint8_t SoundAltBeepNextFreq = 0; uint8_t SoundAltBeepNextTime = 0; static uint8_t SoundAltBeepFreq = 0; static uint8_t SoundAltBeepTime = 0; - if ((verticalSpeed < g_model.varioSpeedUpMin*VARIO_SPEED_LIMIT_MUL) && (verticalSpeed > (VARIO_SPEED_LIMIT_DOWN_OFF - g_model.varioSpeedDownMin)*(-VARIO_SPEED_LIMIT_MUL))) { //check thresholds here in cm/s + if ((verticalSpeed < varioSpeedUpMin) && (verticalSpeed > varioSpeedDownMin)) { //check thresholds here in cm/s SoundAltBeepNextFreq = (0); SoundAltBeepNextTime = (0); } else { + if((varioSpeedUpMin < 0) & (verticalSpeed >= varioSpeedUpMin)){ + verticalSpeed = verticalSpeed - varioSpeedUpMin; + } SoundAltBeepNextFreq = (verticalSpeed * 10 + 16000) >> 8; SoundAltBeepNextTime = (1600 - verticalSpeed) / 100; if (verticalSpeed > 0) { diff --git a/src/frsky.h b/src/frsky.h index f24b57375..d353f1076 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -73,7 +73,7 @@ class FrskyData: public FrskyRSSI { #define VARIO_SPEED_LIMIT_MUL 10 //to get 0.2m steps #define VARIO_SPEED_LIMIT_DOWN_OFF (100+1) //100 steps + OFF #define VARIO_SPEED_LIMIT_UP_CENTER 15 -#define VARIO_SPEED_LIMIT_UP_MAX 31 +#define VARIO_SPEED_LIMIT_UP_MAX 30 #if defined(FRSKY_HUB) PACK(struct FrskyHubData { diff --git a/src/model_menus.cpp b/src/model_menus.cpp index dd0150e23..7e51eb0ea 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -2344,7 +2344,7 @@ void menuProcTelemetry(uint8_t event) lcd_putsAtt(TELEM_COL2, y, STR_OFF, ((attr && m_posHorz==0) ? blink : 0)); else lcd_outdezAtt(TELEM_COL2, y, -VARIO_SPEED_LIMIT_MUL*(VARIO_SPEED_LIMIT_DOWN_OFF - g_model.varioSpeedDownMin), ((attr && m_posHorz==0) ? blink : 0)|PREC2|LEFT); - lcd_outdezAtt(TELEM_COL2+6*FW, y, VARIO_SPEED_LIMIT_MUL*g_model.varioSpeedUpMin, ((attr && m_posHorz==1) ? blink : 0)|PREC2|LEFT); + lcd_outdezAtt(TELEM_COL2+6*FW, y, VARIO_SPEED_LIMIT_MUL*(g_model.varioSpeedUpMin - VARIO_SPEED_LIMIT_UP_CENTER), ((attr && m_posHorz==1) ? blink : 0)|PREC2|LEFT); if (attr && (s_editMode>0 || p1valdiff)) { switch (m_posHorz) {