diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor.png b/radio/sdcard/horus/THEMES/Default/mask_monitor.png new file mode 100644 index 000000000..68ddd4516 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_gvars.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_gvars.png new file mode 100644 index 000000000..55b488d1e Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_gvars.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_inver.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_inver.png new file mode 100644 index 000000000..64f251238 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_inver.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_lockch.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_lockch.png new file mode 100644 index 000000000..360923a09 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_lockch.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_logsw.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_logsw.png new file mode 100644 index 000000000..dc6355143 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_logsw.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_mixes1.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_mixes1.png new file mode 100644 index 000000000..7b0c71f60 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_mixes1.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_mixes2.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_mixes2.png new file mode 100644 index 000000000..f8c04780e Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_mixes2.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_outL.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_outL.png new file mode 100644 index 000000000..78b54ffe9 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_outL.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_outR.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_outR.png new file mode 100644 index 000000000..ec8a743c5 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_outR.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_outputs1.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_outputs1.png new file mode 100644 index 000000000..b886fc1bc Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_outputs1.png differ diff --git a/radio/sdcard/horus/THEMES/Default/mask_monitor_outputs2.png b/radio/sdcard/horus/THEMES/Default/mask_monitor_outputs2.png new file mode 100644 index 000000000..4d0354e25 Binary files /dev/null and b/radio/sdcard/horus/THEMES/Default/mask_monitor_outputs2.png differ diff --git a/radio/src/gui/horus/menu_general.cpp b/radio/src/gui/horus/menu_general.cpp index dd2196596..23c4012dc 100644 --- a/radio/src/gui/horus/menu_general.cpp +++ b/radio/src/gui/horus/menu_general.cpp @@ -20,6 +20,15 @@ #include "opentx.h" +const MenuHandlerFunc menuTabGeneral[] = { + menuGeneralSetup, + menuGeneralSdManager, + menuGeneralCustomFunctions, + menuGeneralTrainer, + menuGeneralHardware, + menuGeneralVersion, +}; + bool menuGeneralCustomFunctions(evt_t event) { MENU(STR_MENUGLOBALFUNCS, RADIO_ICONS, menuTabGeneral, e_GeneralCustomFunctions, NUM_CFN, { NAVIGATION_LINE_BY_LINE|4/*repeated*/ }); diff --git a/radio/src/gui/horus/menu_model.cpp b/radio/src/gui/horus/menu_model.cpp index 3f6ed94dc..34ef4a0a8 100644 --- a/radio/src/gui/horus/menu_model.cpp +++ b/radio/src/gui/horus/menu_model.cpp @@ -20,6 +20,27 @@ #include "opentx.h" +const MenuHandlerFunc menuTabModel[] = { + menuModelSetup, + CASE_HELI(menuModelHeli) + CASE_FLIGHT_MODES(menuModelFlightModesAll) + menuModelExposAll, + menuModelMixAll, + menuModelLimits, + CASE_CURVES(menuModelCurvesAll) +#if defined(GVARS) && defined(FLIGHT_MODES) + CASE_GVARS(menuModelGVars) +#endif + menuModelLogicalSwitches, + menuModelCustomFunctions, +#if defined(LUA_MODEL_SCRIPTS) + menuModelCustomScripts, +#endif + CASE_FRSKY(menuModelTelemetry) + CASE_MAVLINK(menuTelemetryMavlinkSetup) + CASE_TEMPLATES(menuModelTemplates) +}; + extern uint8_t s_curveChan; void editCurveRef(coord_t x, coord_t y, CurveRef & curve, evt_t event, uint8_t attr); diff --git a/radio/src/gui/horus/menus.h b/radio/src/gui/horus/menus.h index 01a9dd0a8..e097284dc 100644 --- a/radio/src/gui/horus/menus.h +++ b/radio/src/gui/horus/menus.h @@ -95,6 +95,9 @@ enum MenuIcons { ICON_STATS_TIMERS, ICON_STATS_ANALOGS, ICON_STATS_DEBUG, + ICON_MONITOR, + ICON_MONITOR_OUTPUTS1, + ICON_MONITOR_OUTPUTS2, MENUS_ICONS_COUNT }; @@ -113,6 +116,7 @@ enum EnumTabModel { e_CustomScripts, #endif CASE_FRSKY(e_Telemetry) + e_TabModelPagesCount }; const uint8_t RADIO_ICONS[] = { @@ -153,6 +157,12 @@ const uint8_t STATS_ICONS[] = { #endif }; +const uint8_t MONITOR_ICONS[] = { + ICON_MONITOR, + ICON_MONITOR_OUTPUTS1, + ICON_MONITOR_OUTPUTS2 +}; + bool menuModelSetup(evt_t event); bool menuModelHeli(evt_t event); bool menuModelFlightModesAll(evt_t event); @@ -168,27 +178,7 @@ bool menuModelCustomScripts(evt_t event); bool menuModelTelemetry(evt_t event); bool menuModelExpoOne(evt_t event); -const MenuHandlerFunc menuTabModel[] = { -// menuModelSelect, - menuModelSetup, - CASE_HELI(menuModelHeli) - CASE_FLIGHT_MODES(menuModelFlightModesAll) - menuModelExposAll, - menuModelMixAll, - menuModelLimits, - CASE_CURVES(menuModelCurvesAll) -#if defined(GVARS) && defined(FLIGHT_MODES) - CASE_GVARS(menuModelGVars) -#endif - menuModelLogicalSwitches, - menuModelCustomFunctions, -#if defined(LUA_MODEL_SCRIPTS) - menuModelCustomScripts, -#endif - CASE_FRSKY(menuModelTelemetry) - CASE_MAVLINK(menuTelemetryMavlinkSetup) - CASE_TEMPLATES(menuModelTemplates) -}; +extern const MenuHandlerFunc menuTabModel[e_TabModelPagesCount]; enum EnumTabRadio { e_Setup, @@ -197,6 +187,7 @@ enum EnumTabRadio { e_Trainer, e_Hardware, e_Vers, + e_TabRadioPagesCount }; bool menuGeneralSetup(evt_t event); @@ -207,14 +198,7 @@ bool menuGeneralVersion(evt_t event); bool menuGeneralHardware(evt_t event); bool menuGeneralCalib(evt_t event); -static const MenuHandlerFunc menuTabGeneral[] PROGMEM = { - menuGeneralSetup, - menuGeneralSdManager, - menuGeneralCustomFunctions, - menuGeneralTrainer, - menuGeneralHardware, - menuGeneralVersion, -}; +extern const MenuHandlerFunc menuTabGeneral[e_TabRadioPagesCount]; enum EnumTabDiag { @@ -240,6 +224,16 @@ static const MenuHandlerFunc menuTabStats[] PROGMEM = { #endif }; +enum EnumTabChannels +{ + e_Channels1, + e_Channels2, + e_TabChannelsPagesCount +}; + +extern const MenuHandlerFunc menuTabChannels[e_TabChannelsPagesCount]; +extern uint8_t lastChannelsPage; + extern const MenuHandlerFunc menuTabScreensSetup[1+MAX_CUSTOM_SCREENS] PROGMEM; bool menuFirstCalib(evt_t event); @@ -248,8 +242,6 @@ bool menuCustomFunctions(evt_t event, CustomFunctionData * functions, CustomFunc bool menuModelSelect(evt_t event); bool menuAboutView(evt_t event); bool menuMainViewChannelsMonitor(evt_t event); -bool menuChannelsView(evt_t event); -bool menuChannelsView(evt_t event); bool menuTextView(evt_t event); bool menuScreensTheme(evt_t event); diff --git a/radio/src/gui/horus/navigation.cpp b/radio/src/gui/horus/navigation.cpp index 24dfbacac..b20b5fb86 100644 --- a/radio/src/gui/horus/navigation.cpp +++ b/radio/src/gui/horus/navigation.cpp @@ -375,6 +375,12 @@ bool check(check_event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, u { uint8_t maxcol = MAXCOL(menuVerticalPosition); + if (menuTab == menuTabModel && event == EVT_KEY_FIRST(KEY_MODEL)) { + killEvents(event); + pushMenu(menuTabChannels[lastChannelsPage]); + return false; + } + if (menuTab && !calibrationState) { int cc = curr; switch (event) { @@ -383,7 +389,6 @@ bool check(check_event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, u cc = 0; break; - case EVT_KEY_FIRST(KEY_PGUP): if (cc-- == 0) cc = menuTabSize-1; diff --git a/radio/src/gui/horus/themes/darkblue.cpp b/radio/src/gui/horus/themes/darkblue.cpp index 3fd056861..064cba75a 100644 --- a/radio/src/gui/horus/themes/darkblue.cpp +++ b/radio/src/gui/horus/themes/darkblue.cpp @@ -106,6 +106,9 @@ class DarkblueTheme: public Theme loadMenuIcon(ICON_THEME_VIEW4, "mask_theme_view4.png"); loadMenuIcon(ICON_THEME_VIEW5, "mask_theme_view5.png"); loadMenuIcon(ICON_THEME_ADD_VIEW, "mask_theme_add_view.png"); + loadMenuIcon(ICON_MONITOR, "mask_monitor.png"); + loadMenuIcon(ICON_MONITOR_OUTPUTS1, "mask_monitor_outputs1.png"); + loadMenuIcon(ICON_MONITOR_OUTPUTS2, "mask_monitor_outputs2.png"); } virtual void load() const diff --git a/radio/src/gui/horus/themes/default.cpp b/radio/src/gui/horus/themes/default.cpp index fb88423b3..49d2e457f 100644 --- a/radio/src/gui/horus/themes/default.cpp +++ b/radio/src/gui/horus/themes/default.cpp @@ -122,7 +122,10 @@ class DefaultTheme: public Theme loadMenuIcon(ICON_THEME_VIEW5, "mask_theme_view5.png"); loadMenuIcon(ICON_THEME_ADD_VIEW, "mask_theme_add_view.png"); loadMenuIcon(ICON_LIBRARY, "mask_library.png"); - + loadMenuIcon(ICON_MONITOR, "mask_monitor.png"); + loadMenuIcon(ICON_MONITOR_OUTPUTS1, "mask_monitor_outputs1.png"); + loadMenuIcon(ICON_MONITOR_OUTPUTS2, "mask_monitor_outputs2.png"); + BitmapBuffer * background = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_bg.png")); BitmapBuffer * shadow = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_shadow.png")); BitmapBuffer * dot = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_dot.png")); diff --git a/radio/src/gui/horus/view_channels.cpp b/radio/src/gui/horus/view_channels.cpp index 563caedb5..2d7fbb620 100644 --- a/radio/src/gui/horus/view_channels.cpp +++ b/radio/src/gui/horus/view_channels.cpp @@ -1,108 +1,139 @@ -/* - * Copyright (C) OpenTX - * - * Based on code named - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "../../opentx.h" +/* + * Copyright (C) OpenTX + * + * Based on code named + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ -bool isChannelUsed(int channel); -int getChannelsUsed(); +#include "opentx.h" -bool menuChannelsView(evt_t event) +#define RECT_OFFSET 80 +#define ROW_HEIGHT 21 +#define BAR_HEIGHT 10 +#define COLLUMN_SIZE 180 +#define X_OFFSET 30 +#define Y_OFFSET 75 + +bool menuChannels1(evt_t event); +bool menuChannels2(evt_t event); +const BitmapBuffer *locked_bmp = NULL; +const BitmapBuffer *inver_bmp = NULL; +const BitmapBuffer *outL_bmp = NULL; +const BitmapBuffer *outR_bmp = NULL; + +const MenuHandlerFunc menuTabChannels[] PROGMEM = { + menuChannels1, + menuChannels2, +}; + +uint8_t lastChannelsPage = 0; + +uint16_t posOnBar(int16_t value_to100){ + return divRoundClosest((value_to100 + (g_model.extendedLimits ? 150 : 100)) * COLLUMN_SIZE, (g_model.extendedLimits ? 150 : 100)*2); +} + +void drawSingleOutputBar(uint16_t x, uint16_t y, uint8_t Chan) { - const int CHANNEL_MARGIN = 16; - const int CHANNEL_HEIGHT = 25; - const int CHANNEL_WIDTH = (LCD_W - 3*CHANNEL_MARGIN) / 2; - const int CHANNEL_PADDING_HORZ = 4; - const int CHANNEL_PADDING_VERT = 2; - const int BAR_WIDTH = CHANNEL_WIDTH-2*CHANNEL_PADDING_HORZ; - - static int view = 0; - int x=CHANNEL_MARGIN, y=CHANNEL_MARGIN; - - int viewMax = (getChannelsUsed() - 1) / 8; - if (viewMax <= 0 || view > viewMax) { - view = 0; - } - else { - switch (event) { - case EVT_KEY_FIRST(KEY_RIGHT): - if (++view > viewMax) - view = 0; - break; - case EVT_KEY_FIRST(KEY_LEFT): - if (--view < 0) - view = viewMax; - break; - } - } - - int skipCount = view*8; - for (int ch=0, index=0; index skipCount) { - // The black background - lcdDrawSolidFilledRect(x, y, CHANNEL_WIDTH, CHANNEL_HEIGHT, TEXT_BGCOLOR); - - // The label - unsigned int lenLabel = ZLEN(g_model.limitData[ch].name); - if (lenLabel > 0) - lcdDrawSizedText(x+CHANNEL_PADDING_HORZ, y+CHANNEL_PADDING_VERT, g_model.limitData[ch].name, sizeof(g_model.limitData[ch].name), ZCHAR); - else - putsChn(x+CHANNEL_PADDING_HORZ, y+CHANNEL_PADDING_VERT, ch+1, 0); - - int32_t val = channelOutputs[ch]; - - // The bar - lcdDrawSolidFilledRect(x+CHANNEL_PADDING_HORZ, y+15, BAR_WIDTH, 6, TEXT_INVERTED_BGCOLOR); - unsigned int lim = g_model.extendedLimits ? 640*2 : 512*2; - unsigned int len = limit(1, (abs(val) * BAR_WIDTH/2 + lim/2) / lim, BAR_WIDTH/2); - unsigned int x0 = (val>0) ? x+CHANNEL_PADDING_HORZ-1+BAR_WIDTH/2 : x+CHANNEL_PADDING_HORZ+BAR_WIDTH/2+1-len; - lcdDrawSolidFilledRect(x0, y+16, len, 4, TEXT_BGCOLOR); - - y += CHANNEL_HEIGHT + CHANNEL_MARGIN; - if (y >= 4*(CHANNEL_HEIGHT + CHANNEL_MARGIN)) { - x += CHANNEL_WIDTH + CHANNEL_MARGIN; - y = CHANNEL_MARGIN; - } - } - } - } - -#if 0 + char chanString[] = "CH 32"; + uint16_t limits = (g_model.extendedLimits ? 300 : 200); + int16_t chanVal = calcRESXto100(channelOutputs[Chan]); + LimitData *ld = limitAddress(Chan); -#if defined(CHANNELS_MONITOR_INV_HIDE) - //if channel output is inverted, show it with oposite sign - if (g_model.limitData[ch].revert) val = -val; -#endif + if (!locked_bmp) locked_bmp = BitmapBuffer::load(getThemePath("mask_monitor_lockch.png")); + if (!inver_bmp) inver_bmp = BitmapBuffer::load(getThemePath("mask_monitor_inver.png")); + if (!outL_bmp) outL_bmp = BitmapBuffer::load(getThemePath("mask_monitor_outL.png")); + if (!outR_bmp) outR_bmp = BitmapBuffer::load(getThemePath("mask_monitor_outR.png")); + + strAppend(chanString, "Ch "); + strAppendSigned(&chanString[3], Chan + 1, 2); + lcdDrawText(x + X_OFFSET, y + 1, chanString, TINSIZE | TEXT_COLOR | LEFT); + + lcdDrawSizedText(x + X_OFFSET + 50, y + 1, g_model.limitData[Chan].name, sizeof(g_model.limitData[Chan].name), TINSIZE | TEXT_COLOR | LEFT | ZCHAR); - // Value -#if defined(PPM_UNIT_US) - uint8_t wbar = (longNames ? 54 : 64); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, PPM_CH_CENTER(ch)+val/2, TINSIZE); -#elif defined(PPM_UNIT_PERCENT_PREC1) - uint8_t wbar = (longNames ? 48 : 58); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val), PREC1|TINSIZE); -#else - uint8_t wbar = (longNames ? 54 : 64); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val)/10, TINSIZE); // G: Don't like the decimal part* -#endif -#endif + lcdColorTable[CUSTOM_COLOR_INDEX]= RGB(222, 222, 222); + lcdDrawSolidFilledRect(x + X_OFFSET, y + 11, COLLUMN_SIZE, BAR_HEIGHT, CUSTOM_COLOR); + + lcdColorTable[CUSTOM_COLOR_INDEX]= RGB(180, 180, 180); + lcdDrawText(x + X_OFFSET + posOnBar(-100 + ld->min/10)+2, y + 10, "]",TINSIZE| TEXT_COLOR | RIGHT); + lcdDrawText(x + X_OFFSET + posOnBar(100 + ld->max/10), y + 10, "[",TINSIZE| TEXT_COLOR); + lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(calcRESXto100(ld->offset)), y + 11, BAR_HEIGHT , MAINVIEW_GRAPHICS_COLOR); + lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(chanVal), y + 11, BAR_HEIGHT , HEADER_BGCOLOR); + + strAppendSigned(chanString, chanVal); + if (chanVal < -limits / 2) { + lcd->drawBitmap(x + X_OFFSET + COLLUMN_SIZE / 2 - 55, y + 8, outL_bmp); + chanVal = - limits / 2; + lcdDrawText(x + X_OFFSET + COLLUMN_SIZE - 2, y + 1, chanString, TINSIZE | TEXT_COLOR | RIGHT | INVERS); + } else if (chanVal > limits / 2){ + lcd->drawBitmap(x + X_OFFSET + COLLUMN_SIZE / 2 + 55, y + 8, outR_bmp); + chanVal = limits / 2; + lcdDrawText(x + X_OFFSET + COLLUMN_SIZE - 2, y + 1, chanString, TINSIZE | TEXT_COLOR | RIGHT | INVERS); + } else { + lcdDrawText(x + X_OFFSET + COLLUMN_SIZE - 2, y + 1, chanString, TINSIZE | TEXT_COLOR | RIGHT); + } + + if(posOnBar(chanVal) > posOnBar(calcRESXto100(ld->offset))){ + lcdDrawSolidFilledRect(x + X_OFFSET + posOnBar(calcRESXto100(ld->offset)), y + 11, posOnBar(chanVal) - posOnBar(calcRESXto100(ld->offset)), BAR_HEIGHT, MAINVIEW_GRAPHICS_COLOR); + } + else if (posOnBar(chanVal) < posOnBar(calcRESXto100(ld->offset))) { + uint16_t endpoint = x + X_OFFSET + posOnBar(calcRESXto100(ld->offset)); + uint16_t size = posOnBar(calcRESXto100(ld->offset)) - posOnBar(chanVal); + lcdDrawSolidFilledRect(endpoint - size, y + 11, size, BAR_HEIGHT, MAINVIEW_GRAPHICS_COLOR); + } + + if (safetyCh[Chan] != OVERRIDE_CHANNEL_UNDEFINED) lcd->drawBitmap(x + 3, y + 5, locked_bmp); + if (ld->revert) lcd->drawBitmap(x + 16, y + 5, inver_bmp); + lcd->drawSolidVerticalLine(x + X_OFFSET + COLLUMN_SIZE / 2, y + 11, BAR_HEIGHT , TEXT_COLOR); +} + +bool menuChannelsMonitor(evt_t event, uint8_t page) +{ return true; } + +bool menuChannels1(evt_t event) +{ + MENU("Channels monitor 1-16", MONITOR_ICONS, menuTabChannels, e_Channels1, 0, { 0 }); + lastChannelsPage = e_Channels1; + + int8_t Chan; + uint16_t x=0,y=0; + for(Chan=0, x=1, y=Y_OFFSET;Chan < 8; Chan++, y+=ROW_HEIGHT){ + drawSingleOutputBar(x, y, Chan); + } + for(Chan=8, x=1 + LCD_W/2, y=Y_OFFSET; Chan < 16;Chan++, y+=ROW_HEIGHT){ + drawSingleOutputBar(x, y, Chan); + } + return menuChannelsMonitor(event, 0); +} + +bool menuChannels2(evt_t event) +{ + MENU("Channels monitor 17-32", MONITOR_ICONS, menuTabChannels, e_Channels2, 0, { 0 }); + lastChannelsPage = e_Channels2; + + int8_t Chan; + uint16_t x,y; + for(Chan=16, x=1, y=Y_OFFSET; Chan < 24; Chan++, y+=ROW_HEIGHT){ + drawSingleOutputBar(x, y, Chan); + } + for(Chan=24, x=1 + LCD_W/2, y=Y_OFFSET; Chan < 32; Chan++, y+=ROW_HEIGHT){ + drawSingleOutputBar(x, y, Chan); + } + + return menuChannelsMonitor(event, 1); +} diff --git a/radio/src/gui/horus/view_statistics.cpp b/radio/src/gui/horus/view_statistics.cpp index 330b56b01..8fa12a2a0 100644 --- a/radio/src/gui/horus/view_statistics.cpp +++ b/radio/src/gui/horus/view_statistics.cpp @@ -25,7 +25,6 @@ #define MENU_STATS_COLUMN2 (LCD_W/2) #define MENU_STATS_COLUMN3 (LCD_W/2 + 120) - bool menuStatsGraph(evt_t event) { switch(event) {