From 11c8219f79d6cebebf0e0a990569769db503dea8 Mon Sep 17 00:00:00 2001 From: bsongis Date: Thu, 9 Feb 2012 11:24:45 +0000 Subject: [PATCH] Multiplier added to FrSky telemetry A1/A2 ratio Now it covers range 0V => 204.0V --- src/lcd.cpp | 2 +- src/model_menus.cpp | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/lcd.cpp b/src/lcd.cpp index 7a8177dbd..90a0d1bc0 100644 --- a/src/lcd.cpp +++ b/src/lcd.cpp @@ -522,7 +522,7 @@ void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, int16_t val, ui // A1 and A2 { // TODO optimize this, avoid int32_t - int16_t converted_value = ((int32_t)val+g_model.frsky.channels[channel].offset) * g_model.frsky.channels[channel].ratio * 2 / 51; + int16_t converted_value = ((int32_t)val+g_model.frsky.channels[channel].offset) * (g_model.frsky.channels[channel].ratio << g_model.frsky.channels[channel].multiplier) * 2 / 51; if (g_model.frsky.channels[channel].type >= UNIT_RAW) { converted_value /= 10; } diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 62164ed38..07b6b0639 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -1866,10 +1866,23 @@ void menuProcTelemetry(uint8_t event) putsTelemetryChannel(TELEM_COL2, y, i, 255-g_model.frsky.channels[i].offset, (sub==subN && m_posHorz==0 ? blink:0)|NO_UNIT|LEFT); lcd_putsnAtt(lcd_lastPos+1, y, STR_VTELEMUNIT+LEN_VTELEMUNIT*g_model.frsky.channels[i].type, LEN_VTELEMUNIT, (sub==subN && m_posHorz==1 ? blink:0)); if (sub==subN && (s_editMode>0 || p1valdiff)) { - if (m_posHorz == 0) - g_model.frsky.channels[i].ratio = checkIncDec(event, g_model.frsky.channels[i].ratio, 0, 255, EE_MODEL); - else + if (m_posHorz == 0) { + uint16_t ratio = checkIncDec(event, g_model.frsky.channels[i].ratio, 0, 256, EE_MODEL); + if (checkIncDec_Ret) { + if (ratio == 127 && g_model.frsky.channels[i].multiplier > 0) { + g_model.frsky.channels[i].multiplier--; g_model.frsky.channels[i].ratio = 255; + } + else if (ratio == 256) { + if (g_model.frsky.channels[i].multiplier < 3) { g_model.frsky.channels[i].multiplier++; g_model.frsky.channels[i].ratio = 128; } + } + else { + g_model.frsky.channels[i].ratio = ratio; + } + } + } + else { CHECK_INCDEC_MODELVAR(event, g_model.frsky.channels[i].type, 0, UNIT_MAX-1); + } } } subN++;