From e41680bf87f95c636611a0db075e74c8fe5d788b Mon Sep 17 00:00:00 2001 From: philmoz Date: Sun, 19 Jan 2025 12:23:12 +1100 Subject: [PATCH] feat(bw128): display PPM value in channel monitor (#5781) --- radio/src/gui/128x64/view_channels.cpp | 75 ++++++++++++++------------ 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/radio/src/gui/128x64/view_channels.cpp b/radio/src/gui/128x64/view_channels.cpp index 39bd926f2..fc03d2a29 100644 --- a/radio/src/gui/128x64/view_channels.cpp +++ b/radio/src/gui/128x64/view_channels.cpp @@ -21,11 +21,9 @@ #include "edgetx.h" -constexpr coord_t CHANNEL_NAME_OFFSET = 1; -constexpr coord_t CHANNEL_VALUE_OFFSET = CHANNEL_NAME_OFFSET + 42; -constexpr coord_t CHANNEL_GAUGE_OFFSET = CHANNEL_VALUE_OFFSET; +constexpr coord_t CHANNEL_NAME_OFFSET = 0; +constexpr coord_t CHANNEL_VALUE_OFFSET = CHANNEL_NAME_OFFSET + 41; constexpr coord_t CHANNEL_BAR_WIDTH = 70; -constexpr coord_t CHANNEL_PROPERTIES_OFFSET = CHANNEL_GAUGE_OFFSET + CHANNEL_BAR_WIDTH + 2; #if defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP) @@ -54,78 +52,87 @@ constexpr coord_t CHANNEL_PROPERTIES_OFFSET = CHANNEL_GAUGE_OFFSET + CHANNEL_BAR #define EVT_KEY_PREVIOUS_PAGE EVT_KEY_BREAK(KEY_LEFT) #endif -struct ViewChannelsState { - bool longNames; - bool mixersView; -}; - -static ViewChannelsState viewChannels = { false, false }; +static bool mixersView = false; void menuChannelsViewCommon(event_t event) { - bool newLongNames = false; - uint8_t ch; switch (event) { case EVT_KEY_BREAK(KEY_ENTER): - viewChannels.mixersView = !viewChannels.mixersView; + mixersView = !mixersView; break; } ch = 8 * (g_eeGeneral.view / ALTERNATE_VIEW); - // Screen title - lcdDrawText(LCD_W / 2, 0, viewChannels.mixersView ? STR_MIXERS_MONITOR : STR_CHANNELS_MONITOR, CENTERED); - lcdInvertLine(0); + coord_t vx = CHANNEL_VALUE_OFFSET; + coord_t bw = CHANNEL_BAR_WIDTH; + if (g_eeGeneral.ppmunit == PPM_PERCENT_PREC1) { + vx += 8; + bw -= 8; + } - int16_t limits = 512 * 2; + // Screen title + lcdDrawText(LCD_W / 2, 0, mixersView ? STR_MIXERS_MONITOR : STR_CHANNELS_MONITOR, CENTERED); + lcdInvertLine(0); // Channels for (uint8_t line = 0; line < 8; line++) { LimitData * ld = limitAddress(ch); const uint8_t y = 9 + line * 7; - const int32_t val = viewChannels.mixersView ? ex_chans[ch] : channelOutputs[ch]; + const int32_t val = mixersView ? ex_chans[ch] : channelOutputs[ch]; const uint8_t lenLabel = ZLEN(g_model.limitData[ch].name); // Channel name if present, number if not if (lenLabel > 0) { - if (lenLabel > 4) - viewChannels.longNames = true; lcdDrawSizedText(CHANNEL_NAME_OFFSET, y, g_model.limitData[ch].name, sizeof(g_model.limitData[ch].name), SMLSIZE); - } - else { + } else { putsChn(CHANNEL_NAME_OFFSET, y, ch + 1, SMLSIZE); } // Value if (g_eeGeneral.ppmunit == PPM_US) { - lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, PPM_CH_CENTER(ch) + val / 2, TINSIZE | RIGHT); + lcdDrawNumber(vx, y + 1, PPM_CH_CENTER(ch) + val / 2, TINSIZE | RIGHT); } else if (g_eeGeneral.ppmunit == PPM_PERCENT_PREC1) { - lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, calcRESXto1000(val), PREC1 | TINSIZE | RIGHT); + lcdDrawNumber(vx, y + 1, calcRESXto1000(val), PREC1 | TINSIZE | RIGHT); } else { - lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, calcRESXto1000(val) / 10, TINSIZE | RIGHT); + lcdDrawNumber(vx, y + 1, calcRESXto1000(val) / 10, TINSIZE | RIGHT); } // Gauge - drawGauge(CHANNEL_GAUGE_OFFSET, y, CHANNEL_BAR_WIDTH, 6, val, limits); + drawGauge(vx, y, bw, 6, val, RESX); + + if (!mixersView) { + int phase = (g_blinkTmr10ms >> 6) & 3; + if (phase == 3) phase = 0; - if (!viewChannels.mixersView) { // Properties #if defined(OVERRIDE_CHANNEL_FUNCTION) - if (safetyCh[ch] != OVERRIDE_CHANNEL_UNDEFINED) - lcdDrawText(CHANNEL_PROPERTIES_OFFSET, y, "OVR", TINSIZE); - else + if (phase == 1) { + if (safetyCh[ch] != OVERRIDE_CHANNEL_UNDEFINED) + lcdDrawText(LCD_W + 1, y + 1, "OVR", TINSIZE | RIGHT); + else + phase = 0; + } #endif - if (ld && ld->revert) { - lcdDrawText(CHANNEL_PROPERTIES_OFFSET, y, "INV", TINSIZE); + if (phase == 2) { + if (ld && ld->revert) + lcdDrawText(LCD_W + 1, y + 1, "INV", TINSIZE | RIGHT); + else + phase = 0; + } + + if (phase == 0) { + if (g_eeGeneral.ppmunit == PPM_US) + lcdDrawNumber(LCD_W + 1, y + 1, calcRESXto1000(val) / 10, TINSIZE | RIGHT); + else + lcdDrawNumber(LCD_W + 1, y + 1, PPM_CH_CENTER(ch) + val / 2, TINSIZE | RIGHT); } } ++ch; } - - viewChannels.longNames = newLongNames; } void menuChannelsView(event_t event)