diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index 6f2309e1b..2954cc5d8 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -5582,18 +5582,14 @@ void menuModelTelemetry(uint8_t event) lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE5; } -#if 0 - putsStrIdx(0, y, PSTR(INDENT"Line"), lineIndex+1, m_posHorz<0 ? attr : 0); -#endif - #if defined(GAUGES) if (IS_BARS_SCREEN(screenIndex)) { FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex]; uint8_t barSource = bar.source; lcd_putsiAtt(TELEM_COL1, y, STR_VTELEMCHNS, barSource, m_posHorz==0 ? attr : 0); if (barSource) { - putsTelemetryChannel(TELEM_BARS_COLMIN, y, barSource-1, convertTelemValue(barSource, bar.barMin), (m_posHorz==1 ? attr : 0) | LEFT); - putsTelemetryChannel(TELEM_BARS_COLMAX, y, barSource-1, convertTelemValue(barSource, 255-bar.barMax), (m_posHorz==2 ? attr : 0) | LEFT); + putsTelemetryChannel(TELEM_BARS_COLMIN, y, barSource-1, convertBarTelemValue(barSource, bar.barMin), (m_posHorz==1 ? attr : 0) | LEFT); + putsTelemetryChannel(TELEM_BARS_COLMAX, y, barSource-1, convertBarTelemValue(barSource, 255-bar.barMax), (m_posHorz==2 ? attr : 0) | LEFT); } else if (attr) { MOVE_CURSOR_FROM_HERE(); @@ -5604,14 +5600,14 @@ void menuModelTelemetry(uint8_t event) bar.source = checkIncDecModel(event, barSource, 0, TELEM_DISPLAY_MAX); if (checkIncDec_Ret) { bar.barMin = 0; - bar.barMax = 255-maxTelemValue(bar.source); + bar.barMax = 255 - maxBarTelemValue(bar.source); } break; case 1: bar.barMin = checkIncDec(event, bar.barMin, 0, 254-bar.barMax, EE_MODEL|NO_INCDEC_MARKS); break; case 2: - bar.barMax = 255 - checkIncDec(event, 255-bar.barMax, bar.barMin+1, maxTelemValue(barSource), EE_MODEL|NO_INCDEC_MARKS); + bar.barMax = 255 - checkIncDec(event, 255-bar.barMax, bar.barMin+1, maxBarTelemValue(barSource), EE_MODEL|NO_INCDEC_MARKS); break; } } diff --git a/radio/src/gui/view_telemetry.cpp b/radio/src/gui/view_telemetry.cpp index 3c62c1b02..9e9c100c6 100644 --- a/radio/src/gui/view_telemetry.cpp +++ b/radio/src/gui/view_telemetry.cpp @@ -214,8 +214,8 @@ void menuTelemetryFrsky(uint8_t event) for (int8_t i=3; i>=0; i--) { FrSkyBarData & bar = screen.bars[i]; uint8_t source = bar.source; - getvalue_t barMin = convertTelemValue(source, bar.barMin); - getvalue_t barMax = convertTelemValue(source, 255-bar.barMax); + getvalue_t barMin = convertBarTelemValue(source, bar.barMin); + getvalue_t barMax = convertBarTelemValue(source, 255-bar.barMax); if (source && barMax > barMin) { uint8_t y = barHeight+6+i*(barHeight+6); lcd_putsiAtt(0, y+barHeight-5, STR_VTELEMCHNS, source, 0); @@ -234,7 +234,7 @@ void menuTelemetryFrsky(uint8_t event) threshold = g_model.frsky.channels[source-TELEM_A1].alarms_value[0]; #if defined(FRSKY_HUB) else - threshold = convertTelemValue(source, barsThresholds[source-TELEM_ALT]); + threshold = convertBarTelemValue(source, barsThresholds[source-TELEM_ALT]); #endif if (threshold) { diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index cdefd2577..80df58ebd 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1854,7 +1854,7 @@ csw_telemetry_value_t maxTelemValue(uint8_t channel) #endif #if defined(CPUARM) -getvalue_t convertTelemValue(uint8_t channel, csw_telemetry_value_t value) +getvalue_t convert16bitsTelemValue(uint8_t channel, csw_telemetry_value_t value) { getvalue_t result; switch (channel) { @@ -1867,8 +1867,14 @@ getvalue_t convertTelemValue(uint8_t channel, csw_telemetry_value_t value) } return result; } -#else -getvalue_t convertTelemValue(uint8_t channel, csw_telemetry_value_t value) + +csw_telemetry_value_t max8bitsTelemValue(uint8_t channel) +{ + return min(255, maxTelemValue(channel)); +} +#endif + +getvalue_t convert8bitsTelemValue(uint8_t channel, csw_telemetry_value_t value) { getvalue_t result; switch (channel) { @@ -1878,6 +1884,10 @@ getvalue_t convertTelemValue(uint8_t channel, csw_telemetry_value_t value) break; #if defined(FRSKY) case TELEM_ALT: +#if defined(CPUARM) + result = 100 * (value * 8 - 500); + break; +#endif case TELEM_GPSALT: case TELEM_MAX_ALT: case TELEM_MIN_ALT: @@ -1915,18 +1925,17 @@ getvalue_t convertTelemValue(uint8_t channel, csw_telemetry_value_t value) } return result; } -#endif getvalue_t convertCswTelemValue(CustomSwData * cs) { getvalue_t val; #if defined(CPUARM) - val = convertTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, cs->v2); + val = convert16bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, cs->v2); #else if (cswFamily(cs->func)==CS_VOFS) - val = convertTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2); + val = convert8bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2); else - val = convertTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2) - convertTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128); + val = convert8bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2) - convert8bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128); #endif return val; } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 1ce0294b7..9c9ea12c3 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1632,9 +1632,24 @@ extern uint8_t barsThresholds[THLD_MAX]; #define maxTelemValue(channel) 255 #endif -getvalue_t convertTelemValue(uint8_t channel, csw_telemetry_value_t value); +#if defined(CPUARM) +getvalue_t convert16bitsTelemValue(uint8_t channel, csw_telemetry_value_t value); +csw_telemetry_value_t max8bitsTelemValue(uint8_t channel); +#endif + +getvalue_t convert8bitsTelemValue(uint8_t channel, csw_telemetry_value_t value); getvalue_t convertCswTelemValue(CustomSwData * cs); +#if defined(CPUARM) + #define convertTelemValue(channel, value) convert16bitsTelemValue(channel, value) + #define convertBarTelemValue(channel, value) convert8bitsTelemValue(channel, value) + #define maxBarTelemValue(channel) max8bitsTelemValue(channel) +#else + #define convertTelemValue(channel, value) convert8bitsTelemValue(channel, value) + #define convertBarTelemValue(channel, value) convert8bitsTelemValue(channel, value) + #define maxBarTelemValue(channel) maxTelemValue(channel) +#endif + #if defined(FRSKY) || defined(CPUARM) lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val); #endif