diff --git a/src/frsky.cpp b/src/frsky.cpp index 7ef2ea4d7..de1974508 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -644,20 +644,17 @@ void check_frsky() if (isFunctionActive(FUNC_VARIO)) { #if defined(AUDIO) int16_t verticalSpeed = 0; - //vertical speed in 0.01m/s now - //not baro vario only has additional resolution - //A1/A2 need conversion there - //GPS source need precision to be set, my gps gives 0.1m resolution - /*if (g_model.varioSource == BARO_SOURCE_BARO)*/ - 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;*/ + //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)); 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 > (255 - g_model.varioSpeedDownMin)*(-VARIO_SPEED_LIMIT_MUL))) { //check thresholds here in cm/s + 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 SoundAltBeepNextFreq = (0); SoundAltBeepNextTime = (0); } diff --git a/src/frsky.h b/src/frsky.h index 030eb0802..f24b57375 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -68,9 +68,12 @@ class FrskyData: public FrskyRSSI { #define EARTH_RADIUSKM ((uint32_t)6371) #define EARTH_RADIUS ((uint32_t)111194) -#define VARIO_QUEUE_LENGTH 5 -#define VARIO_SPEED_LIMIT 10 //m/s -#define VARIO_SPEED_LIMIT_MUL 20 //to get 0.2m steps +#define VARIO_QUEUE_LENGTH 5 +#define VARIO_SPEED_LIMIT 10 //m/s +#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 #if defined(FRSKY_HUB) PACK(struct FrskyHubData { diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 2d48a1357..f2167b42b 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -2331,16 +2331,17 @@ void menuProcTelemetry(uint8_t event) case ITEM_TELEMETRY_VARIO_SPEED: lcd_puts(4, y, STR_LIMIT); - lcd_outdezAtt(TELEM_COL2, y, -VARIO_SPEED_LIMIT_MUL*(255 - g_model.varioSpeedDownMin), ((attr && m_posHorz==0) ? blink : 0)|PREC2|LEFT); + if(!g_model.varioSpeedDownMin) 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); if (attr && (s_editMode>0 || p1valdiff)) { switch (m_posHorz) { case 0: - g_model.varioSpeedDownMin = checkIncDec(event, g_model.varioSpeedDownMin, 0, 255, EE_MODEL); + g_model.varioSpeedDownMin = checkIncDec(event, g_model.varioSpeedDownMin, 0, VARIO_SPEED_LIMIT_DOWN_OFF, EE_MODEL); break; case 1: - CHECK_INCDEC_MODELVAR(event, g_model.varioSpeedUpMin, 0, 15); + CHECK_INCDEC_MODELVAR(event, g_model.varioSpeedUpMin, 0, VARIO_SPEED_LIMIT_UP_MAX); break; } } diff --git a/src/myeeprom.h b/src/myeeprom.h index 3adce1ee3..7da4b918d 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -569,8 +569,8 @@ PACK(typedef struct t_ModelData { // TODO:temporary place, need to move to frskydata uint8_t varioSource:4; - uint8_t varioSpeedUpMin:4; // if increment in 0.2m/s = 3.0m/s max - uint8_t varioSpeedDownMin; + uint8_t varioSpeedUpMin:5; // if increment in 0.2m/s = 3.0m/s max + uint8_t varioSpeedDownMin:7; }) ModelData; extern EEGeneral g_eeGeneral;