diff --git a/companion/src/firmwares/opentx/simulator/opentxsimulator.cpp b/companion/src/firmwares/opentx/simulator/opentxsimulator.cpp index 4b571b716..ed68b2cd9 100644 --- a/companion/src/firmwares/opentx/simulator/opentxsimulator.cpp +++ b/companion/src/firmwares/opentx/simulator/opentxsimulator.cpp @@ -164,10 +164,10 @@ namespace NAMESPACE { #include "radio/src/gui/horus/menu_general_version.cpp" #include "radio/src/gui/horus/menu_general_hardware.cpp" #include "radio/src/gui/horus/menu_general_calib.cpp" +#include "radio/src/gui/horus/screens_setup.cpp" #include "radio/src/gui/horus/view_main.cpp" #include "radio/src/gui/horus/view_statistics.cpp" #include "radio/src/gui/horus/view_channels.cpp" -#include "radio/src/gui/horus/view_telemetry.cpp" #include "radio/src/gui/horus/view_text.cpp" #include "radio/src/gui/horus/view_about.cpp" #include "radio/src/gui/horus/lcd.cpp" @@ -369,6 +369,7 @@ namespace NAMESPACE { #include "radio/src/targets/simu/simpgmspace.cpp" #include "radio/src/translations.cpp" #include "radio/src/telemetry/frsky.cpp" + #if defined(CPUARM) #include "radio/src/telemetry/frsky_d_arm.cpp" #else @@ -430,6 +431,11 @@ namespace NAMESPACE { int16_t g_anas[NUM_STICKS+NUM_POTS]; +uint16_t getAnalogValue(uint8_t index) +{ + return g_anas[index] << 1; +} + uint16_t anaIn(uint8_t chan) { return g_anas[chan]; diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 04bc06421..5fe4712a6 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -75,7 +75,7 @@ if(PCB STREQUAL HORUS) view_channels.cpp view_about.cpp view_text.cpp - view_telemetry.cpp # TODO remove it + screens_setup.cpp ) set(SRC ${SRC} bmp.cpp targets/taranis/rtc_driver.cpp) set(TARGET_SRC ${TARGET_SRC} board_horus.cpp) diff --git a/radio/src/gui/9x/menu_model_telemetry.cpp b/radio/src/gui/9x/menu_model_telemetry.cpp index 517356126..53aa9d29d 100644 --- a/radio/src/gui/9x/menu_model_telemetry.cpp +++ b/radio/src/gui/9x/menu_model_telemetry.cpp @@ -209,49 +209,6 @@ enum SensorFields { SENSOR_FIELD_MAX }; -bool isSensorUnit(int sensor, uint8_t unit) -{ - if (sensor == 0) - return true; - - sensor -= 1; - - return g_model.telemetrySensors[sensor].unit == unit; -} - -bool isCellsSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_CELLS); -} - -bool isGPSSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_GPS); -} - -bool isAltSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_DIST); -} - -bool isVoltsSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_VOLTS); -} - -bool isCurrentSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_AMPS); -} - -bool isSensorAvailable(int sensor) -{ - if (sensor == 0) - return true; - else - return isTelemetryFieldAvailable(abs(sensor) - 1); -} - #define SENSOR_2ND_COLUMN (12*FW) #define SENSOR_3RD_COLUMN (18*FW) diff --git a/radio/src/gui/9x/view_telemetry.cpp b/radio/src/gui/9x/view_telemetry.cpp index b2ed9cac2..805813d72 100644 --- a/radio/src/gui/9x/view_telemetry.cpp +++ b/radio/src/gui/9x/view_telemetry.cpp @@ -102,11 +102,6 @@ void displayGpsCoord(uint8_t y, char direction, int16_t bp, int16_t ap) #define displayGpsCoord(...) #endif -NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) -{ - return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value); -} - #if !defined(CPUARM) void displayVoltageScreenLine(uint8_t y, uint8_t index) { diff --git a/radio/src/gui/gui_helpers.cpp b/radio/src/gui/gui_helpers.cpp index c8b939e87..45461f8b4 100644 --- a/radio/src/gui/gui_helpers.cpp +++ b/radio/src/gui/gui_helpers.cpp @@ -50,6 +50,65 @@ bool isInputAvailable(int input) } #endif +bool isSensorAvailable(int sensor) +{ + if (sensor == 0) + return true; + else + return isTelemetryFieldAvailable(abs(sensor) - 1); +} + +bool isSensorUnit(int sensor, uint8_t unit) +{ + if (sensor <= 0 || sensor > MAX_SENSORS ) { + return true; + } + else { + return g_model.telemetrySensors[--sensor].unit == unit; + } +} + +bool isCellsSensor(int sensor) +{ + return isSensorUnit(sensor, UNIT_CELLS); +} + +bool isGPSSensor(int sensor) +{ + return isSensorUnit(sensor, UNIT_GPS); +} + +bool isAltSensor(int sensor) +{ + return isSensorUnit(sensor, UNIT_DIST) || isSensorUnit(sensor, UNIT_FEET); +} + +bool isVoltsSensor(int sensor) +{ + return isSensorUnit(sensor, UNIT_VOLTS) || isSensorUnit(sensor, UNIT_CELLS); +} + +bool isCurrentSensor(int sensor) +{ + return isSensorUnit(sensor, UNIT_AMPS); +} + +bool isTelemetryFieldAvailable(int index) +{ + TelemetrySensor & sensor = g_model.telemetrySensors[index]; + return sensor.isAvailable(); +} + +bool isTelemetryFieldComparisonAvailable(int index) +{ + TelemetrySensor & sensor = g_model.telemetrySensors[index]; + if (sensor.type == TELEM_TYPE_CALCULATED) + return true; + if (sensor.unit >= UNIT_DATETIME) + return false; + return (sensor.id != 0); +} + bool isChannelUsed(int channel) { for (int i=0; i> 1; diff --git a/radio/src/gui/horus/menu_model_telemetry.cpp b/radio/src/gui/horus/menu_model_telemetry.cpp index 7b9f361f7..02d808f12 100644 --- a/radio/src/gui/horus/menu_model_telemetry.cpp +++ b/radio/src/gui/horus/menu_model_telemetry.cpp @@ -68,29 +68,6 @@ enum menuModelTelemetryItems { ITEM_TELEMETRY_VARIO_RANGE, ITEM_TELEMETRY_VARIO_CENTER, #endif - ITEM_TELEMETRY_TOP_BAR_LABEL, - ITEM_TELEMETRY_TOP_BAR_VOLTAGE, - ITEM_TELEMETRY_TOP_BAR_ALTITUDE, - ITEM_TELEMETRY_SCREEN_LABEL1, - ITEM_TELEMETRY_SCREEN_LINE1, - ITEM_TELEMETRY_SCREEN_LINE2, - ITEM_TELEMETRY_SCREEN_LINE3, - ITEM_TELEMETRY_SCREEN_LINE4, - ITEM_TELEMETRY_SCREEN_LABEL2, - ITEM_TELEMETRY_SCREEN_LINE5, - ITEM_TELEMETRY_SCREEN_LINE6, - ITEM_TELEMETRY_SCREEN_LINE7, - ITEM_TELEMETRY_SCREEN_LINE8, - ITEM_TELEMETRY_SCREEN_LABEL3, - ITEM_TELEMETRY_SCREEN_LINE9, - ITEM_TELEMETRY_SCREEN_LINE10, - ITEM_TELEMETRY_SCREEN_LINE11, - ITEM_TELEMETRY_SCREEN_LINE12, - ITEM_TELEMETRY_SCREEN_LABEL4, - ITEM_TELEMETRY_SCREEN_LINE13, - ITEM_TELEMETRY_SCREEN_LINE14, - ITEM_TELEMETRY_SCREEN_LINE15, - ITEM_TELEMETRY_SCREEN_LINE16, ITEM_TELEMETRY_MAX }; @@ -110,22 +87,9 @@ enum menuModelTelemetryItems { #define VARIO_ROWS #endif #define RSSI_ROWS LABEL(RSSI), 0, 0, -#if defined(LUA) - #define SCREEN_TYPE_ROWS 1 -#else - #define SCREEN_TYPE_ROWS 0 -#endif #define VARIO_RANGE_ROWS 3 #define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW, -#if defined(LUA) - #define TELEMETRY_SCREEN_LINE(x) ((TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE || TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_SCRIPT) ? HIDDEN_ROW : (uint8_t)2) -#else - #define TELEMETRY_SCREEN_LINE(x) (TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE ? HIDDEN_ROW : (uint8_t)2) -#endif -#define TELEMETRY_SCREEN_ROWS(x) SCREEN_TYPE_ROWS, TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x) -#define TELEMETRY_CURRENT_SCREEN(k) (k < ITEM_TELEMETRY_SCREEN_LABEL2 ? 0 : (k < ITEM_TELEMETRY_SCREEN_LABEL3 ? 1 : (k < ITEM_TELEMETRY_SCREEN_LABEL4 ? 2 : 3))) - enum SensorFields { SENSOR_FIELD_NAME, SENSOR_FIELD_TYPE, @@ -145,45 +109,6 @@ enum SensorFields { SENSOR_FIELD_MAX }; -bool isSensorUnit(int sensor, uint8_t unit) -{ - if (sensor <= 0 || sensor > MAX_SENSORS ) return true; - return g_model.telemetrySensors[--sensor].unit == unit; -} - -bool isCellsSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_CELLS); -} - -bool isGPSSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_GPS); -} - -bool isAltSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_DIST) || isSensorUnit(sensor, UNIT_FEET); -} - -bool isVoltsSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_VOLTS) || isSensorUnit(sensor, UNIT_CELLS); -} - -bool isCurrentSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_AMPS); -} - -bool isSensorAvailable(int sensor) -{ - if (sensor == 0) - return true; - else - return isTelemetryFieldAvailable(abs(sensor) - 1); -} - #define SENSOR_2ND_COLUMN 140 #define SENSOR_3RD_COLUMN 280 @@ -202,7 +127,7 @@ bool menuModelSensor(evt_t event) { TelemetrySensor * sensor = &g_model.telemetrySensors[s_currIdx]; - SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, DEFAULT_SCROLLBAR_X, { 0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, 0 }); + SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, DEFAULT_SCROLLBAR_X, { 0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, 0, 0, 0, 0, 0 }); // lcdDrawNumber(MENUS_MARGIN_LEFT+getTextWidth(TR_MENUSENSOR)+5, MENU_FOOTER_TOP, s_currIdx+1, HEADER_COLOR|LEFT); // putsTelemetryChannelValue(SENSOR_2ND_COLUMN, MENU_FOOTER_TOP, s_currIdx, getValue(MIXSRC_FIRST_TELEM+3*s_currIdx), HEADER_COLOR|LEFT); @@ -475,25 +400,6 @@ void onSensorMenu(const char *result) } } -#if defined(LUA) -void onTelemetryScriptFileSelectionMenu(const char *result) -{ - int screenIndex = TELEMETRY_CURRENT_SCREEN(menuVerticalPosition); - - if (result == STR_UPDATE_LIST) { - if (!sdListFiles(SCRIPTS_TELEM_PATH, SCRIPTS_EXT, sizeof(g_model.frsky.screens[screenIndex].script.file), NULL)) { - POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); - } - } - else { - // The user choosed a file in the list - memcpy(g_model.frsky.screens[screenIndex].script.file, result, sizeof(g_model.frsky.screens[screenIndex].script.file)); - storageDirty(EE_MODEL); - LUA_LOAD_MODEL_SCRIPTS(); - } -} -#endif - bool menuModelTelemetry(evt_t event) { if (warningResult) { @@ -503,7 +409,7 @@ bool menuModelTelemetry(evt_t event) } } - MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX, DEFAULT_SCROLLBAR_X, { TELEMETRY_TYPE_ROWS RSSI_ROWS SENSORS_ROWS VARIO_ROWS LABEL(TopBar), 0, 0, TELEMETRY_SCREEN_ROWS(0), TELEMETRY_SCREEN_ROWS(1), TELEMETRY_SCREEN_ROWS(2), TELEMETRY_SCREEN_ROWS(3) }); + MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX, DEFAULT_SCROLLBAR_X, { TELEMETRY_TYPE_ROWS RSSI_ROWS SENSORS_ROWS VARIO_ROWS }); for (int i=0; i= ITEM_TELEMETRY_SCREEN_LABEL4) { - screenIndex = 3; - lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE13; - } - else if (k >= ITEM_TELEMETRY_SCREEN_LABEL3) { - screenIndex = 2; - lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE9; - } - else { - screenIndex = 1; - lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE5; - } - -#if defined(GAUGES) - if (IS_BARS_SCREEN(screenIndex)) { - FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex]; - source_t barSource = bar.source; - putsMixerSource(MENUS_MARGIN_LEFT+INDENT_WIDTH, y, barSource, (menuHorizontalPosition==0 ? attr : 0)); - int barMax = getMaximumValue(barSource); - int barMin = -barMax; - if (barSource) { - if (barSource <= MIXSRC_LAST_CH) { - putsChannelValue(TELEM_COL2, y, barSource, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | LEFT); - putsChannelValue(TELEM_COL4, y, barSource, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | LEFT); - } - else { - putsChannelValue(TELEM_COL2, y, barSource, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | LEFT); - putsChannelValue(TELEM_COL4, y, barSource, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | LEFT); - } - } - else if (attr) { - MOVE_CURSOR_FROM_HERE(); - } - if (attr && s_editMode>0) { - switch (menuHorizontalPosition) { - case 0: - bar.source = checkIncDec(event, barSource, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); - if (checkIncDec_Ret) { - if (barSource <= MIXSRC_LAST_CH) { - bar.barMin = -100; - bar.barMax = 100; - } - else { - bar.barMin = 0; - bar.barMax = 0; - } - } - break; - case 1: - bar.barMin = checkIncDec(event, bar.barMin, barMin, bar.barMax, EE_MODEL|NO_INCDEC_MARKS); - break; - case 2: - bar.barMax = checkIncDec(event, bar.barMax, bar.barMin, barMax, EE_MODEL|NO_INCDEC_MARKS); - break; - } - } - } - else -#endif - { - for (int c=0; c0) { - value = checkIncDec(event, value, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); - } - } - if (attr && menuHorizontalPosition == NUM_LINE_ITEMS) { - REPEAT_LAST_CURSOR_MOVE(0); - } - } - break; - } } } diff --git a/radio/src/gui/horus/menus.h b/radio/src/gui/horus/menus.h index f92597e69..ac32dc626 100644 --- a/radio/src/gui/horus/menus.h +++ b/radio/src/gui/horus/menus.h @@ -158,6 +158,7 @@ bool menuMainViewChannelsMonitor(evt_t event); bool menuChannelsView(evt_t event); bool menuChannelsView(evt_t event); bool menuTextView(evt_t event); +bool menuSetupScreensView(evt_t event); #if defined(DEBUG_TRACE_BUFFER) void menuTraceBuffer(evt_t event); @@ -265,6 +266,12 @@ bool check_submenu_simple(check_event_t event, uint8_t maxrow); #define MENU_TAB(...) const uint8_t mstate_tab[] = __VA_ARGS__ +#define MENU_ONE_PAGE(title, lines_count, scrollbar_X, ...) \ + MENU_TAB(__VA_ARGS__); \ + if (event == EVT_ENTRY || event == EVT_ENTRY_UP) TRACE("Menu %s displayed ...", title); \ + if (!check(event, 0, NULL, 0, mstate_tab, DIM(mstate_tab)-1, lines_count)) return false; \ + drawMenuTemplate(title, scrollbar_X); \ + #define MENU(title, tab, menu, lines_count, scrollbar_X, ...) \ MENU_TAB(__VA_ARGS__); \ if (event == EVT_ENTRY || event == EVT_ENTRY_UP) TRACE("Menu %s displayed ...", title); \ diff --git a/radio/src/gui/horus/screens_setup.cpp b/radio/src/gui/horus/screens_setup.cpp new file mode 100644 index 000000000..1a51e377b --- /dev/null +++ b/radio/src/gui/horus/screens_setup.cpp @@ -0,0 +1,266 @@ +/* + * 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" + +#define SETUP_SCREEN_COLUMN2 200 +#define SETUP_SCREEN_COLUMN3 275 +#define SETUP_SCREEN_COLUMN4 350 + +enum menuSetupScreensViewItems +{ + ITEM_SETUP_TOP_BAR_LABEL, + ITEM_SETUP_TOP_BAR_VOLTAGE, + ITEM_SETUP_TOP_BAR_ALTITUDE, + ITEM_SETUP_SCREEN_LABEL1, + ITEM_SETUP_SCREEN_LINE1, + ITEM_SETUP_SCREEN_LINE2, + ITEM_SETUP_SCREEN_LINE3, + ITEM_SETUP_SCREEN_LINE4, + ITEM_SETUP_SCREEN_LABEL2, + ITEM_SETUP_SCREEN_LINE5, + ITEM_SETUP_SCREEN_LINE6, + ITEM_SETUP_SCREEN_LINE7, + ITEM_SETUP_SCREEN_LINE8, + ITEM_SETUP_SCREEN_LABEL3, + ITEM_SETUP_SCREEN_LINE9, + ITEM_SETUP_SCREEN_LINE10, + ITEM_SETUP_SCREEN_LINE11, + ITEM_SETUP_SCREEN_LINE12, + ITEM_SETUP_SCREEN_LABEL4, + ITEM_SETUP_SCREEN_LINE13, + ITEM_SETUP_SCREEN_LINE14, + ITEM_SETUP_SCREEN_LINE15, + ITEM_SETUP_SCREEN_LINE16, + ITEM_SETUP_SCREEN_MAX +}; + +#if defined(LUA) + #define SCREEN_TYPE_ROWS 1 + #define SETUP_SCREEN_LINE(x) ((TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE || TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_SCRIPT) ? HIDDEN_ROW : (uint8_t)2) +#else + #define SCREEN_TYPE_ROWS 0 + #define SETUP_SCREEN_LINE(x) (TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE ? HIDDEN_ROW : (uint8_t)2) +#endif + +#define SETUP_SCREEN_ROWS(x) SCREEN_TYPE_ROWS, SETUP_SCREEN_LINE(x), SETUP_SCREEN_LINE(x), SETUP_SCREEN_LINE(x), SETUP_SCREEN_LINE(x) +#define TELEMETRY_CURRENT_SCREEN(k) (k < ITEM_SETUP_SCREEN_LABEL2 ? 0 : (k < ITEM_SETUP_SCREEN_LABEL3 ? 1 : (k < ITEM_SETUP_SCREEN_LABEL4 ? 2 : 3))) + +#if defined(LUA) +void onSetupScriptFileSelectionMenu(const char * result) +{ + int screenIndex = TELEMETRY_CURRENT_SCREEN(menuVerticalPosition); + + if (result == STR_UPDATE_LIST) { + if (!sdListFiles(SCRIPTS_TELEM_PATH, SCRIPTS_EXT, sizeof(g_model.frsky.screens[screenIndex].script.file), NULL)) { + POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); + } + } + else { + // The user choosed a file in the list + memcpy(g_model.frsky.screens[screenIndex].script.file, result, sizeof(g_model.frsky.screens[screenIndex].script.file)); + storageDirty(EE_MODEL); + LUA_LOAD_MODEL_SCRIPTS(); + } +} +#endif + +bool menuSetupScreensView(evt_t event) +{ + MENU_ONE_PAGE("Setup screens", ITEM_SETUP_SCREEN_MAX, DEFAULT_SCROLLBAR_X, { LABEL(TopBar), 0, 0, SETUP_SCREEN_ROWS(0), SETUP_SCREEN_ROWS(1), SETUP_SCREEN_ROWS(2), SETUP_SCREEN_ROWS(3) }); + + for (int i=0; i= (int) DIM(mstate_tab)) { + return true; + } + } + } + + LcdFlags blink = ((s_editMode > 0) ? BLINK | INVERS : INVERS); + LcdFlags attr = (menuVerticalPosition == k ? blink : 0); + + switch (k) { + case ITEM_SETUP_TOP_BAR_LABEL: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_TOP_BAR); + break; + + case ITEM_SETUP_TOP_BAR_VOLTAGE: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_VOLTAGE); + putsMixerSource(SETUP_SCREEN_COLUMN2, y, g_model.frsky.voltsSource ? MIXSRC_FIRST_TELEM+3*(g_model.frsky.voltsSource-1) : 0, attr); + if (attr) { + g_model.frsky.voltsSource = checkIncDec(event, g_model.frsky.voltsSource, 0, MAX_SENSORS, EE_MODEL|NO_INCDEC_MARKS, isVoltsSensor); + } + break; + + case ITEM_SETUP_TOP_BAR_ALTITUDE: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_ALTITUDE); + putsMixerSource(SETUP_SCREEN_COLUMN2, y, g_model.frsky.altitudeSource ? MIXSRC_FIRST_TELEM+3*(g_model.frsky.altitudeSource-1) : 0, attr); + if (attr) { + g_model.frsky.altitudeSource = checkIncDec(event, g_model.frsky.altitudeSource, 0, MAX_SENSORS, EE_MODEL|NO_INCDEC_MARKS, isAltSensor); + } + break; + + case ITEM_SETUP_SCREEN_LABEL1: + case ITEM_SETUP_SCREEN_LABEL2: + case ITEM_SETUP_SCREEN_LABEL3: + case ITEM_SETUP_SCREEN_LABEL4: + { + uint8_t screenIndex = TELEMETRY_CURRENT_SCREEN(k); + drawStringWithIndex(MENUS_MARGIN_LEFT, y, STR_SCREEN, screenIndex+1); + TelemetryScreenType oldScreenType = TELEMETRY_SCREEN_TYPE(screenIndex); + TelemetryScreenType newScreenType = (TelemetryScreenType)selectMenuItem(SETUP_SCREEN_COLUMN2, y, STR_VTELEMSCREENTYPE, oldScreenType, 0, TELEMETRY_SCREEN_TYPE_MAX, (menuHorizontalPosition==0 ? attr : 0), event); + if (newScreenType != oldScreenType) { + g_model.frsky.screensType = (g_model.frsky.screensType & (~(0x03 << (2*screenIndex)))) | (newScreenType << (2*screenIndex)); + memset(&g_model.frsky.screens[screenIndex], 0, sizeof(g_model.frsky.screens[screenIndex])); + } +#if defined(LUA) + if (newScreenType == TELEMETRY_SCREEN_TYPE_SCRIPT) { + TelemetryScriptData & scriptData = g_model.frsky.screens[screenIndex].script; + + // TODO better function name for --- + // TODO function for these lines + if (ZEXIST(scriptData.file)) + lcdDrawSizedText(SETUP_SCREEN_COLUMN3, y, scriptData.file, sizeof(scriptData.file), (menuHorizontalPosition==1 ? attr : 0)); + else + lcdDrawTextAtIndex(SETUP_SCREEN_COLUMN3, y, STR_VCSWFUNC, 0, (menuHorizontalPosition==1 ? attr : 0)); + + if (menuHorizontalPosition==1 && attr && event==EVT_KEY_BREAK(KEY_ENTER) && READ_ONLY_UNLOCKED()) { + s_editMode = 0; + if (sdListFiles(SCRIPTS_TELEM_PATH, SCRIPTS_EXT, sizeof(g_model.frsky.screens[screenIndex].script.file), g_model.frsky.screens[screenIndex].script.file)) { + popupMenuHandler = onSetupScriptFileSelectionMenu; + } + else { + POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); + } + } + } + else if (attr) { + MOVE_CURSOR_FROM_HERE(); + } +#endif + break; + } + + case ITEM_SETUP_SCREEN_LINE1: + case ITEM_SETUP_SCREEN_LINE2: + case ITEM_SETUP_SCREEN_LINE3: + case ITEM_SETUP_SCREEN_LINE4: + case ITEM_SETUP_SCREEN_LINE5: + case ITEM_SETUP_SCREEN_LINE6: + case ITEM_SETUP_SCREEN_LINE7: + case ITEM_SETUP_SCREEN_LINE8: + case ITEM_SETUP_SCREEN_LINE9: + case ITEM_SETUP_SCREEN_LINE10: + case ITEM_SETUP_SCREEN_LINE11: + case ITEM_SETUP_SCREEN_LINE12: + case ITEM_SETUP_SCREEN_LINE13: + case ITEM_SETUP_SCREEN_LINE14: + case ITEM_SETUP_SCREEN_LINE15: + case ITEM_SETUP_SCREEN_LINE16: { + uint8_t screenIndex, lineIndex; + if (k < ITEM_SETUP_SCREEN_LABEL2) { + screenIndex = 0; + lineIndex = k - ITEM_SETUP_SCREEN_LINE1; + } + else if (k >= ITEM_SETUP_SCREEN_LABEL4) { + screenIndex = 3; + lineIndex = k - ITEM_SETUP_SCREEN_LINE13; + } + else if (k >= ITEM_SETUP_SCREEN_LABEL3) { + screenIndex = 2; + lineIndex = k - ITEM_SETUP_SCREEN_LINE9; + } + else { + screenIndex = 1; + lineIndex = k - ITEM_SETUP_SCREEN_LINE5; + } + +#if defined(GAUGES) + if (IS_BARS_SCREEN(screenIndex)) { + FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex]; + source_t barSource = bar.source; + putsMixerSource(MENUS_MARGIN_LEFT+INDENT_WIDTH, y, barSource, (menuHorizontalPosition==0 ? attr : 0)); + int barMax = getMaximumValue(barSource); + int barMin = -barMax; + if (barSource) { + if (barSource <= MIXSRC_LAST_CH) { + putsChannelValue(SETUP_SCREEN_COLUMN2, y, barSource, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | LEFT); + putsChannelValue(SETUP_SCREEN_COLUMN4, y, barSource, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | LEFT); + } + else { + putsChannelValue(SETUP_SCREEN_COLUMN2, y, barSource, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | LEFT); + putsChannelValue(SETUP_SCREEN_COLUMN4, y, barSource, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | LEFT); + } + } + else if (attr) { + MOVE_CURSOR_FROM_HERE(); + } + if (attr && s_editMode>0) { + switch (menuHorizontalPosition) { + case 0: + bar.source = checkIncDec(event, barSource, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); + if (checkIncDec_Ret) { + if (barSource <= MIXSRC_LAST_CH) { + bar.barMin = -100; + bar.barMax = 100; + } + else { + bar.barMin = 0; + bar.barMax = 0; + } + } + break; + case 1: + bar.barMin = checkIncDec(event, bar.barMin, barMin, bar.barMax, EE_MODEL|NO_INCDEC_MARKS); + break; + case 2: + bar.barMax = checkIncDec(event, bar.barMax, bar.barMin, barMax, EE_MODEL|NO_INCDEC_MARKS); + break; + } + } + } + else +#endif + { + for (int c = 0; c < NUM_LINE_ITEMS; c++) { + LcdFlags cellAttr = (menuHorizontalPosition == c ? attr : 0); + source_t &value = g_model.frsky.screens[screenIndex].lines[lineIndex].sources[c]; + const coord_t pos[] = {MENUS_MARGIN_LEFT + INDENT_WIDTH, SETUP_SCREEN_COLUMN2, SETUP_SCREEN_COLUMN4}; + putsMixerSource(pos[c], y, value, cellAttr); + if (cellAttr && s_editMode > 0) { + value = checkIncDec(event, value, 0, MIXSRC_LAST_TELEM, EE_MODEL | INCDEC_SOURCE | NO_INCDEC_MARKS, + isSourceAvailable); + } + } + if (attr && menuHorizontalPosition == NUM_LINE_ITEMS) { + REPEAT_LAST_CURSOR_MOVE(0); + } + } + break; + } + } + } + return true; +} diff --git a/radio/src/gui/horus/view_about.cpp b/radio/src/gui/horus/view_about.cpp index ae3ec7338..f2f5d0567 100644 --- a/radio/src/gui/horus/view_about.cpp +++ b/radio/src/gui/horus/view_about.cpp @@ -1,23 +1,23 @@ -/* - * 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. - */ - +/* + * 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" enum AboutScreens { @@ -62,7 +62,7 @@ bool menuAboutView(evt_t event) break; } - drawScreenTemplate("About"); + drawMenuTemplate("About"); uint8_t screenDuration = 150; diff --git a/radio/src/gui/horus/view_main.cpp b/radio/src/gui/horus/view_main.cpp index a2b3af942..a649f9880 100644 --- a/radio/src/gui/horus/view_main.cpp +++ b/radio/src/gui/horus/view_main.cpp @@ -219,6 +219,9 @@ void onMainViewMenu(const char *result) else if (result == STR_STATISTICS) { chainMenu(menuStatisticsView); } + else if (result == STR_SETUP_SCREENS) { + pushMenu(menuSetupScreensView); + } else if (result == STR_ABOUT_US) { chainMenu(menuAboutView); } @@ -245,6 +248,7 @@ bool menuMainView(evt_t event) } POPUP_MENU_ADD_ITEM(STR_RESET_SUBMENU); POPUP_MENU_ADD_ITEM(STR_STATISTICS); + POPUP_MENU_ADD_ITEM(STR_SETUP_SCREENS); POPUP_MENU_ADD_ITEM(STR_ABOUT_US); popupMenuHandler = onMainViewMenu; break; diff --git a/radio/src/gui/horus/view_statistics.cpp b/radio/src/gui/horus/view_statistics.cpp index 65cb0079f..0f6298153 100644 --- a/radio/src/gui/horus/view_statistics.cpp +++ b/radio/src/gui/horus/view_statistics.cpp @@ -1,23 +1,23 @@ -/* - * 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. - */ - +/* + * 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" bool menuStatisticsView(evt_t event) @@ -38,7 +38,7 @@ bool menuStatisticsView(evt_t event) return false; } - drawScreenTemplate("Statistics"); + drawMenuTemplate("Statistics"); lcdDrawText( 10, MENU_CONTENT_TOP + FH*0, "\037\145TOT:\037\317BATT:", HEADER_COLOR); lcdDrawText( 10, MENU_CONTENT_TOP + FH*1, "TM1:\037\145TM2:", HEADER_COLOR); @@ -116,7 +116,7 @@ bool menuStatisticsDebug(evt_t event) return false; } - drawScreenTemplate(STR_MENUDEBUG); + drawMenuTemplate(STR_MENUDEBUG); lcdDrawText(MENUS_MARGIN_LEFT, MENU_DEBUG_Y_FREE_RAM, "Free Mem"); lcdDrawNumber(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_FREE_RAM, availableMemory(), LEFT, 0, NULL, "b"); diff --git a/radio/src/gui/horus/view_telemetry.cpp b/radio/src/gui/horus/view_telemetry.cpp index a5384e058..d39fb1c57 100644 --- a/radio/src/gui/horus/view_telemetry.cpp +++ b/radio/src/gui/horus/view_telemetry.cpp @@ -27,11 +27,6 @@ bar_threshold_t barsThresholds[THLD_MAX]; #endif -NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) -{ - return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value); -} - int barCoord(int value, int min, int max, int width) { if (value <= min) @@ -184,3 +179,8 @@ void displayTelemetryScreen(int index, unsigned int evt) return displayCustomTelemetryScreen(index); } } + +NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) +{ + return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value); +} \ No newline at end of file diff --git a/radio/src/gui/horus/widgets.cpp b/radio/src/gui/horus/widgets.cpp index 4fb74a524..24cc020f7 100644 --- a/radio/src/gui/horus/widgets.cpp +++ b/radio/src/gui/horus/widgets.cpp @@ -133,27 +133,57 @@ void drawShadow(coord_t x, coord_t y, coord_t w, coord_t h) lcdDrawSolidHorizontalLine(x+2, y+h+1, w, LINE_COLOR); } -void drawScreenTemplate(const char * title, uint32_t options) +void drawMenuTemplate(const char * title, uint16_t scrollbar_X, uint32_t options) { // Header lcdDrawSolidFilledRect(0, 0, LCD_W, MENU_HEADER_HEIGHT, HEADER_BGCOLOR); lcdDrawBitmapPattern(0, 0, LBM_TOPMENU_POLYGON, TITLE_BGCOLOR); drawTopmenuDatetime(); - lcdDrawBitmapPattern(4, 10, LBM_TOPMENU_OPENTX, MENU_TITLE_COLOR); - - if (title) { - // must be done at the end so that we can write something at the right of the menu title - lcdDrawText(50, 3, title, MENU_TITLE_COLOR|DBLSIZE); - } - - // Body and footer (depending on options) - if (options & OPTION_MENU_NO_FOOTER) { - lcdDrawSolidFilledRect(0, MENU_HEADER_HEIGHT, LCD_W, LCD_H-MENU_HEADER_HEIGHT, TEXT_BGCOLOR); + if (menuPageCount > 0) { + lcdDrawSolidFilledRect(0, MENU_HEADER_HEIGHT, LCD_W, MENU_TITLE_TOP - MENU_HEADER_HEIGHT, TEXT_BGCOLOR); + lcdDrawSolidFilledRect(0, MENU_TITLE_TOP, LCD_W, MENU_TITLE_HEIGHT, TITLE_BGCOLOR); + lcdDrawSolidFilledRect(0, MENU_BODY_TOP, LCD_W, MENU_BODY_HEIGHT, TEXT_BGCOLOR); + lcdDrawSolidFilledRect(0, MENU_FOOTER_TOP, LCD_W, MENU_FOOTER_HEIGHT, HEADER_BGCOLOR); + if (menuVerticalPosition < 0) { + lcdDrawBitmapPattern(58+menuPageIndex*MENU_ICONS_SPACING-10, 0, LBM_CURRENT_BG, TITLE_BGCOLOR); + } + else { + lcdDrawSolidFilledRect(58+menuPageIndex*MENU_ICONS_SPACING-9, 0, 32, MENU_HEADER_HEIGHT, TITLE_BGCOLOR); + lcdDrawBitmapPattern(58+menuPageIndex*MENU_ICONS_SPACING, MENU_TITLE_TOP-9, LBM_DOT, MENU_TITLE_COLOR); + } + const uint8_t * const * icons = (menuVerticalPositions[0] == 0 ? LBM_MODEL_ICONS : LBM_RADIO_ICONS); + lcdDrawBitmapPattern(5, 7, icons[0], MENU_TITLE_COLOR); + for (int i=0; i NUM_BODY_LINES) { + drawVerticalScrollbar(scrollbar_X, DEFAULT_SCROLLBAR_Y, DEFAULT_SCROLLBAR_H, menuVerticalOffset, linesCount, NUM_BODY_LINES); + } } else { - lcdDrawSolidFilledRect(0, MENU_HEADER_HEIGHT, LCD_W, LCD_H-MENU_HEADER_HEIGHT-MENU_FOOTER_HEIGHT, TEXT_BGCOLOR); - lcdDrawSolidFilledRect(0, MENU_FOOTER_TOP, LCD_W, MENU_FOOTER_HEIGHT, HEADER_BGCOLOR); + lcdDrawBitmapPattern(4, 10, LBM_TOPMENU_OPENTX, MENU_TITLE_COLOR); + if (title) { + lcdDrawText(50, 3, title, MENU_TITLE_COLOR|DBLSIZE); + } + // Body and footer (depending on options) + if (options & OPTION_MENU_NO_FOOTER) { + lcdDrawSolidFilledRect(0, MENU_HEADER_HEIGHT, LCD_W, LCD_H-MENU_HEADER_HEIGHT, TEXT_BGCOLOR); + } + else { + lcdDrawSolidFilledRect(0, MENU_HEADER_HEIGHT, LCD_W, LCD_H-MENU_HEADER_HEIGHT-MENU_FOOTER_HEIGHT, TEXT_BGCOLOR); + lcdDrawSolidFilledRect(0, MENU_FOOTER_TOP, LCD_W, MENU_FOOTER_HEIGHT, HEADER_BGCOLOR); + } + if (scrollbar_X && linesCount > NUM_BODY_LINES+1) { + drawVerticalScrollbar(scrollbar_X, DEFAULT_SCROLLBAR_Y-FH, DEFAULT_SCROLLBAR_H+FH, menuVerticalOffset, linesCount, NUM_BODY_LINES+1); + } } } @@ -189,50 +219,6 @@ void drawSubmenuTemplate(const char * name, uint16_t scrollbar_X) } } -void drawMenuTemplate(const char * title, uint16_t scrollbar_X, uint32_t options) -{ - // clear the screen - lcdDrawSolidFilledRect(0, 0, LCD_W, MENU_HEADER_HEIGHT, HEADER_BGCOLOR); - lcdDrawSolidFilledRect(0, MENU_HEADER_HEIGHT, LCD_W, MENU_TITLE_TOP-MENU_HEADER_HEIGHT, TEXT_BGCOLOR); - lcdDrawSolidFilledRect(0, MENU_TITLE_TOP, LCD_W, MENU_TITLE_HEIGHT, TITLE_BGCOLOR); - lcdDrawSolidFilledRect(0, MENU_BODY_TOP, LCD_W, MENU_BODY_HEIGHT, TEXT_BGCOLOR); - lcdDrawSolidFilledRect(0, MENU_FOOTER_TOP, LCD_W, MENU_FOOTER_HEIGHT, HEADER_BGCOLOR); - - lcdDrawBitmapPattern(0, 0, LBM_TOPMENU_POLYGON, TITLE_BGCOLOR); - - if (menuVerticalPosition < 0) { - lcdDrawBitmapPattern(58+menuPageIndex*MENU_ICONS_SPACING-10, 0, LBM_CURRENT_BG, TITLE_BGCOLOR); - } - else { - lcdDrawSolidFilledRect(58+menuPageIndex*MENU_ICONS_SPACING-9, 0, 32, MENU_HEADER_HEIGHT, TITLE_BGCOLOR); - lcdDrawBitmapPattern(58+menuPageIndex*MENU_ICONS_SPACING, MENU_TITLE_TOP-9, LBM_DOT, MENU_TITLE_COLOR); - } - - const uint8_t * const * icons = (menuVerticalPositions[0] == 0 ? LBM_MODEL_ICONS : LBM_RADIO_ICONS); - - lcdDrawBitmapPattern(5, 7, icons[0], MENU_TITLE_COLOR); - - for (int i=0; i NUM_BODY_LINES) { - drawVerticalScrollbar(scrollbar_X, DEFAULT_SCROLLBAR_Y, DEFAULT_SCROLLBAR_H, menuVerticalOffset, linesCount, NUM_BODY_LINES); - } -} - select_menu_value_t selectMenuItem(coord_t x, coord_t y, const pm_char * values, select_menu_value_t value, select_menu_value_t min, select_menu_value_t max, LcdFlags attr, evt_t event) { if (attr) value = checkIncDec(event, value, min, max, (menuVerticalPositions[0] == 0) ? EE_MODEL : EE_GENERAL); diff --git a/radio/src/gui/horus/widgets.h b/radio/src/gui/horus/widgets.h index fde0f48ae..6aebf365e 100644 --- a/radio/src/gui/horus/widgets.h +++ b/radio/src/gui/horus/widgets.h @@ -66,9 +66,8 @@ int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int #endif // Screen templates -void drawScreenTemplate(const char * title, uint32_t options=0); -void drawSubmenuTemplate(const char * name, uint16_t scrollbar_X); void drawMenuTemplate(const char * title, uint16_t scrollbar_X=0, uint32_t options=0); +void drawSubmenuTemplate(const char * name, uint16_t scrollbar_X=0); void drawSplash(); void drawSleepBitmap(); void drawShutdownBitmap(uint32_t index); diff --git a/radio/src/gui/taranis/menu_model_telemetry.cpp b/radio/src/gui/taranis/menu_model_telemetry.cpp index 131518d58..601cecbb4 100644 --- a/radio/src/gui/taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/taranis/menu_model_telemetry.cpp @@ -147,45 +147,6 @@ enum SensorFields { SENSOR_FIELD_MAX }; -bool isSensorUnit(int sensor, uint8_t unit) -{ - if (sensor <= 0 || sensor > MAX_SENSORS ) return true; - return g_model.telemetrySensors[--sensor].unit == unit; -} - -bool isCellsSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_CELLS); -} - -bool isGPSSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_GPS); -} - -bool isAltSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_DIST) || isSensorUnit(sensor, UNIT_FEET); -} - -bool isVoltsSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_VOLTS) || isSensorUnit(sensor, UNIT_CELLS); -} - -bool isCurrentSensor(int sensor) -{ - return isSensorUnit(sensor, UNIT_AMPS); -} - -bool isSensorAvailable(int sensor) -{ - if (sensor == 0) - return true; - else - return isTelemetryFieldAvailable(abs(sensor) - 1); -} - #define SENSOR_2ND_COLUMN (12*FW) #define SENSOR_3RD_COLUMN (18*FW) diff --git a/radio/src/gui/taranis/view_telemetry.cpp b/radio/src/gui/taranis/view_telemetry.cpp index ff3b537b3..97b51f65c 100644 --- a/radio/src/gui/taranis/view_telemetry.cpp +++ b/radio/src/gui/taranis/view_telemetry.cpp @@ -47,11 +47,6 @@ void displayRssiLine() } } -NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) -{ - return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value); -} - int barCoord(int value, int min, int max) { if (value <= min) diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index a9d1411a6..69a001fc8 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -660,3 +660,8 @@ void frskyUpdateCells(void) } } #endif + +NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) +{ + return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value); +} diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index 1a9f78f33..e2e5df010 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -153,24 +153,6 @@ class TelemetryItem extern TelemetryItem telemetryItems[MAX_SENSORS]; extern uint8_t allowNewSensors; -bool isGPSSensor(int sensor); - -inline bool isTelemetryFieldAvailable(int index) -{ - TelemetrySensor & sensor = g_model.telemetrySensors[index]; - return sensor.isAvailable(); -} - -inline bool isTelemetryFieldComparisonAvailable(int index) -{ - TelemetrySensor & sensor = g_model.telemetrySensors[index]; - if (sensor.type == TELEM_TYPE_CALCULATED) - return true; - if (sensor.unit >= UNIT_DATETIME) - return false; - return (sensor.id != 0); -} - void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec); void delTelemetryIndex(uint8_t index); int availableTelemetryIndex(); diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 4267a0e63..af4eb83c0 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -429,6 +429,7 @@ const pm_char STR_RESET_TIMER3[] PROGMEM = TR_RESET_TIMER3; const pm_char STR_RESET_TELEMETRY[] PROGMEM = TR_RESET_TELEMETRY; const pm_char STR_STATISTICS[] PROGMEM = TR_STATISTICS; const pm_char STR_ABOUT_US[] PROGMEM = TR_ABOUT_US; +const pm_char STR_SETUP_SCREENS[] PROGMEM = TR_SETUP_SCREENS; #endif const pm_char STR_RESET_BTN[] PROGMEM = TR_RESET_BTN; diff --git a/radio/src/translations.h b/radio/src/translations.h index 2b99d68a0..f03bf1f4e 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -608,6 +608,7 @@ extern const pm_char STR_DELETE_CATEGORY[]; extern const pm_char STR_RESET_TELEMETRY[]; extern const pm_char STR_STATISTICS[]; extern const pm_char STR_ABOUT_US[]; +extern const pm_char STR_SETUP_SCREENS[]; #endif extern const pm_char STR_RESET_BTN[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 1911bce93..4d00e2bd2 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -916,6 +916,7 @@ #define TR_RESET_TELEMETRY "Telemetrii" #define TR_STATISTICS "Statistika" #define TR_ABOUT_US "O nás" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "AND Spínač" #define TR_SF "SF" #define TR_GF "GF" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index ab53125fe..eff165f91 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -920,6 +920,7 @@ #define TR_RESET_TELEMETRY "Reset Telemetrie" #define TR_STATISTICS "Statistik und Gas" #define TR_ABOUT_US "Die Programmierer" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "UND Schalt" //UND mit weiterem Schaltern #define TR_SF "SF" //Spezial Funktionen #define TR_GF "GF" // Globale Funktionen diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 308e3bf70..08511efe8 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -942,6 +942,7 @@ #define TR_RESET_TELEMETRY "Reset Telemetry" #define TR_STATISTICS "Statistics" #define TR_ABOUT_US "About" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "AND Switch" #define TR_SF "SF" #define TR_GF "GF" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 24a60de65..173f72f82 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -872,6 +872,7 @@ #define TR_RESET_TELEMETRY "Reset Telemetria" #define TR_STATISTICS "Estadisticas" #define TR_ABOUT_US "Nosotros" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "AND Inter." #define TR_SF "CF" #define TR_GF "GF" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 6008d6423..574aff44c 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -872,6 +872,7 @@ #define TR_RESET_TELEMETRY "Reset Telemetry" #define TR_STATISTICS "Statistics" #define TR_ABOUT_US "About" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "AND Switch" #define TR_SF "CF" #define TR_GF "GF" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 34dc1cb0b..402a90444 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -907,6 +907,7 @@ #define TR_RESET_TELEMETRY TR("Réinit. Télém.", "Réinit. Télémesure") #define TR_STATISTICS "Statistiques" #define TR_ABOUT_US "A propos" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "ET suppl." #define TR_SF "FS" #define TR_GF "FG" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 43d1e86df..659185ba3 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -918,6 +918,7 @@ #define TR_RESET_TELEMETRY "Azzera Telemetria" #define TR_STATISTICS "Statistiche" #define TR_ABOUT_US "Info su" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "Inter. AND" #define TR_SF "CF" #define TR_GF "GF" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index ecdfbc777..fc6513ac2 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -937,6 +937,7 @@ #define TR_RESET_TELEMETRY "Reset Telemetrie" #define TR_STATISTICS "Statistieken" #define TR_ABOUT_US "De Programmeurs" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "AND Switch" #define TR_SF "SF" #define TR_GF "GF" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 59185cbaa..d0cefde19 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -919,6 +919,7 @@ #define TR_RESET_TELEMETRY "Wyczyść telemetrię" #define TR_STATISTICS "Statystyki" #define TR_ABOUT_US "O nas" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "Przełącznik AND" #define TR_SF "FS" #define TR_GF "FG" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 6bee76194..c4af3e04d 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -866,6 +866,7 @@ #define TR_RESET_TELEMETRY "Reset Telemetry" #define TR_STATISTICS "Statistics" #define TR_ABOUT_US "About Us" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "AND Switch" #define TR_SF "CF" #define TR_GF "GF" @@ -891,9 +892,9 @@ #define TR_CRITICALALARM INDENT "Critical Alarm" #define TR_ENABLE_POPUP "Enable Popup" #define TR_DISABLE_POPUP "Disable Popup" -#define TR_POPUP "Popup" -#define TR_MIN "Min" -#define TR_MAX "Max" +#define TR_POPUP "Popup" +#define TR_MIN "Min" +#define TR_MAX "Max" #define TR_CURVE_PRESET "Preset..." #define TR_PRESET "Preset" #define TR_MIRROR "Mirror" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index edb05abc9..2ebe0fe99 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -939,6 +939,7 @@ #define TR_RESET_TELEMETRY "Nollställ Telemetri" #define TR_STATISTICS "Statistik" #define TR_ABOUT_US "Om Oss" +#define TR_SETUP_SCREENS "Setup screens" #define TR_AND_SWITCH "OCH Brytare" #define TR_SF "BF" #define TR_GF "GF" @@ -964,9 +965,9 @@ #define TR_CRITICALALARM INDENT "Kritiskt alarm" #define TR_ENABLE_POPUP "Slå på Dialog" #define TR_DISABLE_POPUP "Slå av Dialog" -#define TR_POPUP "Popup" -#define TR_MIN "Min" -#define TR_MAX "Max" +#define TR_POPUP "Popup" +#define TR_MIN "Min" +#define TR_MAX "Max" #define TR_CURVE_PRESET "Lutning..." #define TR_PRESET "Lutning" #define TR_MIRROR "Spegla"