feat(lua): Port of NodeMCU Lua53 read-only tables (#2994)

* chore(lua): revert useless c light function change

This change was part of the eLua LTR patches (based on 5.1), whereby this feature was already integrated in Lua 5.2.

* feat(lua): port of NodeMCU Lua53 read-only tables

# Conflicts:
#	radio/src/lua/CMakeLists.txt
#	radio/src/lua/api_general.cpp

* fix(nv14): missing SDRAM definition

* fix: l_mathop

* fix: use float functions in drawPower()

* fix: ltable resize

* fix: correct name is "bit32"

* fix: first Lua context must be closed last

As the lookup cache is attached to that one

* Revert to Lua using double

* Ensure byte-code compatibility

* Fix possible compatibility issue with `lua_typename`/`luaL_typename`

* Fix Bitmap symbol table

* Re-add table lib for COLORLCD
This commit is contained in:
Raphael Coeffic
2023-02-09 20:29:56 +10:00
committed by GitHub
parent 72193eda82
commit be3f8d74a8
43 changed files with 1387 additions and 2211 deletions
+408 -409
View File
@@ -19,6 +19,8 @@
* GNU General Public License for more details.
*/
#define LUA_LIB
#include <ctype.h>
#include <stdio.h>
#include "opentx.h"
@@ -34,51 +36,51 @@
#endif
#if defined(PCBX12S)
#include "lua/lua_exports_x12s.inc" // this line must be after lua headers
#include "lua_exports_x12s.inc" // this line must be after lua headers
#elif defined(RADIO_FAMILY_T16)
#include "lua/lua_exports_t16.inc"
#include "lua_exports_t16.inc"
#elif defined(PCBX10)
#include "lua/lua_exports_x10.inc"
#include "lua_exports_x10.inc"
#elif defined(PCBX9E)
#include "lua/lua_exports_x9e.inc"
#include "lua_exports_x9e.inc"
#elif defined(RADIO_X7ACCESS)
#include "lua/lua_exports_x7access.inc"
#include "lua_exports_x7access.inc"
#elif defined(RADIO_X7)
#include "lua/lua_exports_x7.inc"
#include "lua_exports_x7.inc"
#elif defined(RADIO_T12)
#include "lua/lua_exports_t12.inc"
#include "lua_exports_t12.inc"
#elif defined(RADIO_TLITE)
#include "lua/lua_exports_tlite.inc"
#include "lua_exports_tlite.inc"
#elif defined(RADIO_TPRO)
#include "lua/lua_exports_tpro.inc"
#include "lua_exports_tpro.inc"
#elif defined(RADIO_TX12)
#include "lua/lua_exports_tx12.inc"
#include "lua_exports_tx12.inc"
#elif defined(RADIO_TX12MK2)
#include "lua/lua_exports_tx12mk2.inc"
#include "lua_exports_tx12mk2.inc"
#elif defined(RADIO_LR3PRO)
#include "lua/lua_exports_lr3pro.inc"
#include "lua_exports_lr3pro.inc"
#elif defined(RADIO_BOXER)
#include "lua/lua_exports_boxer.inc"
#include "lua_exports_boxer.inc"
#elif defined(RADIO_ZORRO)
#include "lua/lua_exports_zorro.inc"
#include "lua_exports_zorro.inc"
#elif defined(RADIO_T8)
#include "lua/lua_exports_t8.inc"
#include "lua_exports_t8.inc"
#elif defined(RADIO_COMMANDO8)
#include "lua/lua_exports_commando8.inc"
#include "lua_exports_commando8.inc"
#elif defined(PCBX9LITES)
#include "lua/lua_exports_x9lites.inc"
#include "lua_exports_x9lites.inc"
#elif defined(PCBX9LITE)
#include "lua/lua_exports_x9lite.inc"
#include "lua_exports_x9lite.inc"
#elif defined(PCBXLITES)
#include "lua/lua_exports_xlites.inc"
#include "lua_exports_xlites.inc"
#elif defined(PCBXLITE)
#include "lua/lua_exports_xlite.inc"
#include "lua_exports_xlite.inc"
#elif defined(RADIO_X9DP2019)
#include "lua/lua_exports_x9d+2019.inc"
#include "lua_exports_x9d+2019.inc"
#elif defined(PCBTARANIS)
#include "lua/lua_exports_x9d.inc"
#include "lua_exports_x9d.inc"
#elif defined(PCBNV14)
#include "lua/lua_exports_nv14.inc"
#include "lua_exports_nv14.inc"
#endif
#include "telemetry/frsky.h"
@@ -105,12 +107,6 @@
#define FIND_FIELD_DESC 0x01
#define KEY_EVENTS(xxx, yyy) \
{ "EVT_"#xxx"_FIRST", EVT_KEY_FIRST(yyy) }, \
{ "EVT_"#xxx"_BREAK", EVT_KEY_BREAK(yyy) }, \
{ "EVT_"#xxx"_LONG", EVT_KEY_LONG(yyy) }, \
{ "EVT_"#xxx"_REPT", EVT_KEY_REPT(yyy) }
// see strhelpers.cpp for pre-instantiation of function-template
// getSourceString() for this parametrization
static constexpr uint8_t maxSourceNameLength{16};
@@ -2628,502 +2624,505 @@ static int luaGetTrainerStatus(lua_State * L)
return 1;
}
const luaL_Reg opentxLib[] = {
{ "getTime", luaGetTime },
{ "getDateTime", luaGetDateTime },
#define KEY_EVENTS(xxx, yyy) \
{ "EVT_"#xxx"_FIRST", LRO_NUMVAL(EVT_KEY_FIRST(yyy)) }, \
{ "EVT_"#xxx"_BREAK", LRO_NUMVAL(EVT_KEY_BREAK(yyy)) }, \
{ "EVT_"#xxx"_LONG", LRO_NUMVAL(EVT_KEY_LONG(yyy)) }, \
{ "EVT_"#xxx"_REPT", LRO_NUMVAL(EVT_KEY_REPT(yyy)) },
LROT_BEGIN(etxlib, NULL, 0)
LROT_FUNCENTRY( getTime, luaGetTime )
LROT_FUNCENTRY( getDateTime, luaGetDateTime )
#if defined(RTCLOCK)
{ "getRtcTime", luaGetRtcTime },
LROT_FUNCENTRY( getRtcTime, luaGetRtcTime )
#endif
{ "getVersion", luaGetVersion },
{ "getGeneralSettings", luaGetGeneralSettings },
{ "getGlobalTimer", luaGetGlobalTimer },
{ "getRotEncSpeed", luaGetRotEncSpeed },
{ "getRotEncMode", luaGetRotEncMode },
{ "getValue", luaGetValue },
{ "getOutputValue", luaGetOutputValue },
{ "getSourceValue", luaGetSourceValue },
{ "getTrainerStatus", luaGetTrainerStatus },
{ "getRAS", luaGetRAS },
{ "getTxGPS", luaGetTxGPS },
{ "getFieldInfo", luaGetFieldInfo },
{ "getSourceInfo", luaGetFieldInfo },
{ "getFlightMode", luaGetFlightMode },
{ "playFile", luaPlayFile },
{ "playNumber", luaPlayNumber },
{ "playDuration", luaPlayDuration },
{ "playTone", luaPlayTone },
{ "playHaptic", luaPlayHaptic },
{ "flushAudio", luaFlushAudio },
LROT_FUNCENTRY( getVersion, luaGetVersion )
LROT_FUNCENTRY( getGeneralSettings, luaGetGeneralSettings )
LROT_FUNCENTRY( getGlobalTimer, luaGetGlobalTimer )
LROT_FUNCENTRY( getRotEncSpeed, luaGetRotEncSpeed )
LROT_FUNCENTRY( getRotEncMode, luaGetRotEncMode )
LROT_FUNCENTRY( getValue, luaGetValue )
LROT_FUNCENTRY( getOutputValue, luaGetOutputValue )
LROT_FUNCENTRY( getSourceValue, luaGetSourceValue )
LROT_FUNCENTRY( getTrainerStatus, luaGetTrainerStatus )
LROT_FUNCENTRY( getRAS, luaGetRAS )
LROT_FUNCENTRY( getTxGPS, luaGetTxGPS )
LROT_FUNCENTRY( getFieldInfo, luaGetFieldInfo )
LROT_FUNCENTRY( getSourceInfo, luaGetFieldInfo )
LROT_FUNCENTRY( getFlightMode, luaGetFlightMode )
LROT_FUNCENTRY( playFile, luaPlayFile )
LROT_FUNCENTRY( playNumber, luaPlayNumber )
LROT_FUNCENTRY( playDuration, luaPlayDuration )
LROT_FUNCENTRY( playTone, luaPlayTone )
LROT_FUNCENTRY( playHaptic, luaPlayHaptic )
LROT_FUNCENTRY( flushAudio, luaFlushAudio )
#if defined(ENABLE_LUA_POPUP_INPUT)
{ "popupInput", luaPopupInput },
LROT_FUNCENTRY( popupInput, luaPopupInput )
#endif
{ "popupWarning", luaPopupWarning },
{ "popupConfirmation", luaPopupConfirmation },
{ "defaultStick", luaDefaultStick },
{ "defaultChannel", luaDefaultChannel },
{ "getRSSI", luaGetRSSI },
{ "killEvents", luaKillEvents },
{ "dir", luaDir },
{ "fstat", luaFstat },
{ "chdir", luaChdir },
{ "loadScript", luaLoadScript },
{ "getUsage", luaGetUsage },
{ "getAvailableMemory", luaGetAvailableMemory },
{ "resetGlobalTimer", luaResetGlobalTimer },
LROT_FUNCENTRY( popupWarning, luaPopupWarning )
LROT_FUNCENTRY( popupConfirmation, luaPopupConfirmation )
LROT_FUNCENTRY( defaultStick, luaDefaultStick )
LROT_FUNCENTRY( defaultChannel, luaDefaultChannel )
LROT_FUNCENTRY( getRSSI, luaGetRSSI )
LROT_FUNCENTRY( killEvents, luaKillEvents )
LROT_FUNCENTRY( chdir, luaChdir )
LROT_FUNCENTRY( loadScript, luaLoadScript )
LROT_FUNCENTRY( getUsage, luaGetUsage )
LROT_FUNCENTRY( getAvailableMemory, luaGetAvailableMemory )
LROT_FUNCENTRY( resetGlobalTimer, luaResetGlobalTimer )
#if LCD_DEPTH > 1 && !defined(COLORLCD)
{ "GREY", luaGrey },
LROT_FUNCENTRY( GREY, luaGrey )
#endif
#if defined(PXX2)
{ "accessTelemetryPush", luaAccessTelemetryPush },
LROT_FUNCENTRY( accessTelemetryPush, luaAccessTelemetryPush )
#endif
{ "sportTelemetryPop", luaSportTelemetryPop },
{ "sportTelemetryPush", luaSportTelemetryPush },
{ "setTelemetryValue", luaSetTelemetryValue },
LROT_FUNCENTRY( sportTelemetryPop, luaSportTelemetryPop )
LROT_FUNCENTRY( sportTelemetryPush, luaSportTelemetryPush )
LROT_FUNCENTRY( setTelemetryValue, luaSetTelemetryValue )
#if defined(CROSSFIRE)
{ "crossfireTelemetryPop", luaCrossfireTelemetryPop },
{ "crossfireTelemetryPush", luaCrossfireTelemetryPush },
LROT_FUNCENTRY( crossfireTelemetryPop, luaCrossfireTelemetryPop )
LROT_FUNCENTRY( crossfireTelemetryPush, luaCrossfireTelemetryPush )
#endif
#if defined(GHOST)
{ "ghostTelemetryPop", luaGhostTelemetryPop },
{ "ghostTelemetryPush", luaGhostTelemetryPush },
LROT_FUNCENTRY( ghostTelemetryPop, luaGhostTelemetryPop )
LROT_FUNCENTRY( ghostTelemetryPush, luaGhostTelemetryPush )
#endif
#if defined(MULTIMODULE)
{ "multiBuffer", luaMultiBuffer },
LROT_FUNCENTRY( multiBuffer, luaMultiBuffer )
#endif
{ "setSerialBaudrate", luaSetSerialBaudrate },
{ "serialWrite", luaSerialWrite },
{ "serialRead", luaSerialRead },
LROT_FUNCENTRY( setSerialBaudrate, luaSetSerialBaudrate )
LROT_FUNCENTRY( serialWrite, luaSerialWrite )
LROT_FUNCENTRY( serialRead, luaSerialRead )
#if defined(COLORLCD)
{ "setShmVar", luaSetShmVar },
{ "getShmVar", luaGetShmVar },
LROT_FUNCENTRY( setShmVar, luaSetShmVar )
LROT_FUNCENTRY( getShmVar, luaGetShmVar )
#endif
{ "setStickySwitch", luaSetStickySwitch },
{ "getLogicalSwitchValue", luaGetLogicalSwitchValue },
{ "getSwitchIndex", luaGetSwitchIndex },
{ "getSwitchName", luaGetSwitchName },
{ "getSwitchValue", luaGetSwitchValue },
{ "switches", luaSwitches },
{ "getSourceIndex", luaGetSourceIndex },
{ "getSourceName", luaGetSourceName },
{ "sources", luaSources },
{ nullptr, nullptr } /* sentinel */
};
LROT_FUNCENTRY( setStickySwitch, luaSetStickySwitch )
LROT_FUNCENTRY( getLogicalSwitchValue, luaGetLogicalSwitchValue )
LROT_FUNCENTRY( getSwitchIndex, luaGetSwitchIndex )
LROT_FUNCENTRY( getSwitchName, luaGetSwitchName )
LROT_FUNCENTRY( getSwitchValue, luaGetSwitchValue )
LROT_FUNCENTRY( switches, luaSwitches )
LROT_FUNCENTRY( getSourceIndex, luaGetSourceIndex )
LROT_FUNCENTRY( getSourceName, luaGetSourceName )
LROT_FUNCENTRY( sources, luaSources )
LROT_END(etxlib, NULL, 0)
const luaR_value_entry opentxConstants[] = {
{ "FULLSCALE", RESX },
LROT_BEGIN(etxcst, NULL, 0)
// Constants
LROT_NUMENTRY( FULLSCALE, RESX )
#if defined(COLORLCD)
{ "XXLSIZE", FONT(XXL) },
{ "DBLSIZE", FONT(XL) },
{ "MIDSIZE", FONT(L) },
{ "SMLSIZE", FONT(XS) },
{ "TINSIZE", FONT(XXS) },
{ "BLINK", BLINK },
{ "INVERS", INVERS },
LROT_NUMENTRY( XXLSIZE, FONT(XXL) )
LROT_NUMENTRY( DBLSIZE, FONT(XL) )
LROT_NUMENTRY( MIDSIZE, FONT(L) )
LROT_NUMENTRY( SMLSIZE, FONT(XS) )
LROT_NUMENTRY( TINSIZE, FONT(XXS) )
LROT_NUMENTRY( BLINK, BLINK )
LROT_NUMENTRY( INVERS, INVERS )
#else
{ "XXLSIZE", XXLSIZE },
{ "DBLSIZE", DBLSIZE },
{ "MIDSIZE", MIDSIZE },
{ "SMLSIZE", SMLSIZE },
{ "BLINK", BLINK },
{ "INVERS", INVERS },
LROT_NUMENTRY( XXLSIZE, XXLSIZE )
LROT_NUMENTRY( DBLSIZE, DBLSIZE )
LROT_NUMENTRY( MIDSIZE, MIDSIZE )
LROT_NUMENTRY( SMLSIZE, SMLSIZE )
LROT_NUMENTRY( BLINK, BLINK )
LROT_NUMENTRY( INVERS, INVERS )
#endif
#if defined(COLORLCD)
{ "BOLD", FONT(BOLD) },
{ "VCENTER", VCENTERED },
LROT_NUMENTRY( BOLD, FONT(BOLD) )
LROT_NUMENTRY( VCENTER, VCENTERED )
#else
{ "BOLD", BOLD },
LROT_NUMENTRY( BOLD, BOLD )
#endif
{ "RIGHT", RIGHT },
{ "LEFT", LEFT },
{ "CENTER", CENTERED },
{ "PREC1", PREC1 },
{ "PREC2", PREC2 },
{ "VALUE", INPUT_TYPE_VALUE },
{ "SOURCE", INPUT_TYPE_SOURCE },
{ "REPLACE", MLTPX_REPL },
{ "MIXSRC_MAX", MIXSRC_MAX },
{ "MIXSRC_FIRST_INPUT", MIXSRC_FIRST_INPUT },
{ "MIXSRC_Rud", MIXSRC_Rud },
{ "MIXSRC_Ele", MIXSRC_Ele },
{ "MIXSRC_Thr", MIXSRC_Thr },
{ "MIXSRC_Ail", MIXSRC_Ail },
{ "MIXSRC_SA", MIXSRC_SA },
{ "MIXSRC_SB", MIXSRC_SB },
{ "MIXSRC_SC", MIXSRC_SC },
{ "MIXSRC_SD", MIXSRC_SD },
LROT_NUMENTRY( RIGHT, RIGHT )
LROT_NUMENTRY( LEFT, LEFT )
LROT_NUMENTRY( CENTER, CENTERED )
LROT_NUMENTRY( PREC1, PREC1 )
LROT_NUMENTRY( PREC2, PREC2 )
LROT_NUMENTRY( VALUE, INPUT_TYPE_VALUE )
LROT_NUMENTRY( SOURCE, INPUT_TYPE_SOURCE )
LROT_NUMENTRY( REPLACE, MLTPX_REPL )
LROT_NUMENTRY( MIXSRC_MAX, MIXSRC_MAX )
LROT_NUMENTRY( MIXSRC_FIRST_INPUT, MIXSRC_FIRST_INPUT )
LROT_NUMENTRY( MIXSRC_Rud, MIXSRC_Rud )
LROT_NUMENTRY( MIXSRC_Ele, MIXSRC_Ele )
LROT_NUMENTRY( MIXSRC_Thr, MIXSRC_Thr )
LROT_NUMENTRY( MIXSRC_Ail, MIXSRC_Ail )
LROT_NUMENTRY( MIXSRC_SA, MIXSRC_SA )
LROT_NUMENTRY( MIXSRC_SB, MIXSRC_SB )
LROT_NUMENTRY( MIXSRC_SC, MIXSRC_SC )
LROT_NUMENTRY( MIXSRC_SD, MIXSRC_SD )
#if !defined(PCBX7) && !defined(PCBXLITE) && !defined(PCBX9LITE)
{ "MIXSRC_SE", MIXSRC_SE },
{ "MIXSRC_SG", MIXSRC_SG },
LROT_NUMENTRY( MIXSRC_SE, MIXSRC_SE )
LROT_NUMENTRY( MIXSRC_SG, MIXSRC_SG )
#endif
#if defined(HARDWARE_SWITCH_F)
{ "MIXSRC_SF", MIXSRC_SF },
LROT_NUMENTRY( MIXSRC_SF, MIXSRC_SF )
#endif
#if defined(HARDWARE_SWITCH_H)
{ "MIXSRC_SH", MIXSRC_SH },
LROT_NUMENTRY( MIXSRC_SH, MIXSRC_SH )
#endif
{ "MIXSRC_CH1", MIXSRC_CH1 },
{ "SWSRC_LAST", SWSRC_LAST_LOGICAL_SWITCH },
{ "SWITCH_COUNT", SWSRC_COUNT },
{ "MAX_SENSORS", MAX_TELEMETRY_SENSORS },
LROT_NUMENTRY( MIXSRC_CH1, MIXSRC_CH1 )
LROT_NUMENTRY( SWSRC_LAST, SWSRC_LAST_LOGICAL_SWITCH )
LROT_NUMENTRY( SWITCH_COUNT, SWSRC_COUNT )
LROT_NUMENTRY( MAX_SENSORS, MAX_TELEMETRY_SENSORS )
{ "MAX_OUTPUT_CHANNELS", MAX_OUTPUT_CHANNELS },
{ "LIMIT_EXT_PERCENT", LIMIT_EXT_PERCENT },
{ "LIMIT_STD_PERCENT", LIMIT_STD_PERCENT },
LROT_NUMENTRY( MAX_OUTPUT_CHANNELS, MAX_OUTPUT_CHANNELS )
LROT_NUMENTRY( LIMIT_EXT_PERCENT, LIMIT_EXT_PERCENT )
LROT_NUMENTRY( LIMIT_STD_PERCENT, LIMIT_STD_PERCENT )
{ "LS_FUNC_NONE", LS_FUNC_NONE },
{ "LS_FUNC_VEQUAL", LS_FUNC_VEQUAL },
{ "LS_FUNC_VALMOSTEQUAL", LS_FUNC_VALMOSTEQUAL },
{ "LS_FUNC_VPOS", LS_FUNC_VPOS },
{ "LS_FUNC_VNEG", LS_FUNC_VNEG },
{ "LS_FUNC_RANGE", LS_FUNC_RANGE },
{ "LS_FUNC_APOS", LS_FUNC_APOS },
{ "LS_FUNC_ANEG", LS_FUNC_ANEG },
{ "LS_FUNC_AND", LS_FUNC_AND },
{ "LS_FUNC_OR", LS_FUNC_OR },
{ "LS_FUNC_XOR", LS_FUNC_XOR },
{ "LS_FUNC_EDGE", LS_FUNC_EDGE },
{ "LS_FUNC_EQUAL", LS_FUNC_EQUAL },
{ "LS_FUNC_GREATER", LS_FUNC_GREATER },
{ "LS_FUNC_LESS", LS_FUNC_LESS },
{ "LS_FUNC_DIFFEGREATER", LS_FUNC_DIFFEGREATER },
{ "LS_FUNC_ADIFFEGREATER", LS_FUNC_ADIFFEGREATER },
{ "LS_FUNC_TIMER", LS_FUNC_TIMER },
{ "LS_FUNC_STICKY", LS_FUNC_STICKY },
LROT_NUMENTRY( LS_FUNC_NONE, LS_FUNC_NONE )
LROT_NUMENTRY( LS_FUNC_VEQUAL, LS_FUNC_VEQUAL )
LROT_NUMENTRY( LS_FUNC_VALMOSTEQUAL, LS_FUNC_VALMOSTEQUAL )
LROT_NUMENTRY( LS_FUNC_VPOS, LS_FUNC_VPOS )
LROT_NUMENTRY( LS_FUNC_VNEG, LS_FUNC_VNEG )
LROT_NUMENTRY( LS_FUNC_RANGE, LS_FUNC_RANGE )
LROT_NUMENTRY( LS_FUNC_APOS, LS_FUNC_APOS )
LROT_NUMENTRY( LS_FUNC_ANEG, LS_FUNC_ANEG )
LROT_NUMENTRY( LS_FUNC_AND, LS_FUNC_AND )
LROT_NUMENTRY( LS_FUNC_OR, LS_FUNC_OR )
LROT_NUMENTRY( LS_FUNC_XOR, LS_FUNC_XOR )
LROT_NUMENTRY( LS_FUNC_EDGE, LS_FUNC_EDGE )
LROT_NUMENTRY( LS_FUNC_EQUAL, LS_FUNC_EQUAL )
LROT_NUMENTRY( LS_FUNC_GREATER, LS_FUNC_GREATER )
LROT_NUMENTRY( LS_FUNC_LESS, LS_FUNC_LESS )
LROT_NUMENTRY( LS_FUNC_DIFFEGREATER, LS_FUNC_DIFFEGREATER )
LROT_NUMENTRY( LS_FUNC_ADIFFEGREATER, LS_FUNC_ADIFFEGREATER )
LROT_NUMENTRY( LS_FUNC_TIMER, LS_FUNC_TIMER )
LROT_NUMENTRY( LS_FUNC_STICKY, LS_FUNC_STICKY )
{ "FUNC_OVERRIDE_CHANNEL", FUNC_OVERRIDE_CHANNEL },
{ "FUNC_TRAINER", FUNC_TRAINER },
{ "FUNC_INSTANT_TRIM", FUNC_INSTANT_TRIM },
{ "FUNC_RESET", FUNC_RESET },
{ "FUNC_SET_TIMER", FUNC_SET_TIMER },
{ "FUNC_ADJUST_GVAR", FUNC_ADJUST_GVAR },
{ "FUNC_VOLUME", FUNC_VOLUME },
{ "FUNC_SET_FAILSAFE", FUNC_SET_FAILSAFE },
{ "FUNC_RANGECHECK", FUNC_RANGECHECK },
{ "FUNC_BIND", FUNC_BIND },
{ "FUNC_PLAY_SOUND", FUNC_PLAY_SOUND },
{ "FUNC_PLAY_TRACK", FUNC_PLAY_TRACK },
{ "FUNC_PLAY_VALUE", FUNC_PLAY_VALUE },
{ "FUNC_PLAY_SCRIPT", FUNC_PLAY_SCRIPT },
{ "FUNC_BACKGND_MUSIC", FUNC_BACKGND_MUSIC },
{ "FUNC_BACKGND_MUSIC_PAUSE", FUNC_BACKGND_MUSIC_PAUSE },
{ "FUNC_VARIO", FUNC_VARIO },
{ "FUNC_HAPTIC", FUNC_HAPTIC },
{ "FUNC_LOGS", FUNC_LOGS },
{ "FUNC_BACKLIGHT", FUNC_BACKLIGHT },
{ "FUNC_SCREENSHOT", FUNC_SCREENSHOT },
{ "FUNC_RACING_MODE", FUNC_RACING_MODE },
LROT_NUMENTRY( FUNC_OVERRIDE_CHANNEL, FUNC_OVERRIDE_CHANNEL )
LROT_NUMENTRY( FUNC_TRAINER, FUNC_TRAINER )
LROT_NUMENTRY( FUNC_INSTANT_TRIM, FUNC_INSTANT_TRIM )
LROT_NUMENTRY( FUNC_RESET, FUNC_RESET )
LROT_NUMENTRY( FUNC_SET_TIMER, FUNC_SET_TIMER )
LROT_NUMENTRY( FUNC_ADJUST_GVAR, FUNC_ADJUST_GVAR )
LROT_NUMENTRY( FUNC_VOLUME, FUNC_VOLUME )
LROT_NUMENTRY( FUNC_SET_FAILSAFE, FUNC_SET_FAILSAFE )
LROT_NUMENTRY( FUNC_RANGECHECK, FUNC_RANGECHECK )
LROT_NUMENTRY( FUNC_BIND, FUNC_BIND )
LROT_NUMENTRY( FUNC_PLAY_SOUND, FUNC_PLAY_SOUND )
LROT_NUMENTRY( FUNC_PLAY_TRACK, FUNC_PLAY_TRACK )
LROT_NUMENTRY( FUNC_PLAY_VALUE, FUNC_PLAY_VALUE )
LROT_NUMENTRY( FUNC_PLAY_SCRIPT, FUNC_PLAY_SCRIPT )
LROT_NUMENTRY( FUNC_BACKGND_MUSIC, FUNC_BACKGND_MUSIC )
LROT_NUMENTRY( FUNC_BACKGND_MUSIC_PAUSE, FUNC_BACKGND_MUSIC_PAUSE )
LROT_NUMENTRY( FUNC_VARIO, FUNC_VARIO )
LROT_NUMENTRY( FUNC_HAPTIC, FUNC_HAPTIC )
LROT_NUMENTRY( FUNC_LOGS, FUNC_LOGS )
LROT_NUMENTRY( FUNC_BACKLIGHT, FUNC_BACKLIGHT )
LROT_NUMENTRY( FUNC_SCREENSHOT, FUNC_SCREENSHOT )
LROT_NUMENTRY( FUNC_RACING_MODE, FUNC_RACING_MODE )
#if defined(COLORLCD)
{ "FUNC_DISABLE_TOUCH", FUNC_DISABLE_TOUCH },
{ "FUNC_SET_SCREEN", FUNC_SET_SCREEN },
LROT_NUMENTRY( FUNC_DISABLE_TOUCH, FUNC_DISABLE_TOUCH )
LROT_NUMENTRY( FUNC_SET_SCREEN, FUNC_SET_SCREEN )
{ "SHADOWED", SHADOWED },
{ "COLOR", ZoneOption::Color },
{ "BOOL", ZoneOption::Bool },
{ "STRING", ZoneOption::String },
{ "TIMER", ZoneOption::Timer },
{ "TEXT_SIZE", ZoneOption::TextSize },
{ "MENU_HEADER_HEIGHT", COLOR2FLAGS(MENU_HEADER_HEIGHT) },
LROT_NUMENTRY( SHADOWED, SHADOWED )
LROT_NUMENTRY( COLOR, ZoneOption::Color )
LROT_NUMENTRY( BOOL, ZoneOption::Bool )
LROT_NUMENTRY( STRING, ZoneOption::String )
LROT_NUMENTRY( TIMER, ZoneOption::Timer )
LROT_NUMENTRY( TEXT_SIZE, ZoneOption::TextSize )
LROT_NUMENTRY( MENU_HEADER_HEIGHT, COLOR2FLAGS(MENU_HEADER_HEIGHT) )
// Colors gui/colorlcd/colors.h
{ "COLOR_THEME_PRIMARY1", COLOR2FLAGS(COLOR_THEME_PRIMARY1_INDEX) },
{ "COLOR_THEME_PRIMARY2", COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) },
{ "COLOR_THEME_PRIMARY3", COLOR2FLAGS(COLOR_THEME_PRIMARY3_INDEX) },
{ "COLOR_THEME_SECONDARY1", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "COLOR_THEME_SECONDARY2", COLOR2FLAGS(COLOR_THEME_SECONDARY2_INDEX) },
{ "COLOR_THEME_SECONDARY3", COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) },
{ "COLOR_THEME_FOCUS", COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) },
{ "COLOR_THEME_EDIT", COLOR2FLAGS(COLOR_THEME_EDIT_INDEX) },
{ "COLOR_THEME_ACTIVE", COLOR2FLAGS(COLOR_THEME_ACTIVE_INDEX) },
{ "COLOR_THEME_WARNING", COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) },
{ "COLOR_THEME_DISABLED", COLOR2FLAGS(COLOR_THEME_DISABLED_INDEX) },
{ "CUSTOM_COLOR", COLOR2FLAGS(CUSTOM_COLOR_INDEX) },
LROT_NUMENTRY( COLOR_THEME_PRIMARY1, COLOR2FLAGS(COLOR_THEME_PRIMARY1_INDEX) )
LROT_NUMENTRY( COLOR_THEME_PRIMARY2, COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) )
LROT_NUMENTRY( COLOR_THEME_PRIMARY3, COLOR2FLAGS(COLOR_THEME_PRIMARY3_INDEX) )
LROT_NUMENTRY( COLOR_THEME_SECONDARY1, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( COLOR_THEME_SECONDARY2, COLOR2FLAGS(COLOR_THEME_SECONDARY2_INDEX) )
LROT_NUMENTRY( COLOR_THEME_SECONDARY3, COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) )
LROT_NUMENTRY( COLOR_THEME_FOCUS, COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) )
LROT_NUMENTRY( COLOR_THEME_EDIT, COLOR2FLAGS(COLOR_THEME_EDIT_INDEX) )
LROT_NUMENTRY( COLOR_THEME_ACTIVE, COLOR2FLAGS(COLOR_THEME_ACTIVE_INDEX) )
LROT_NUMENTRY( COLOR_THEME_WARNING, COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) )
LROT_NUMENTRY( COLOR_THEME_DISABLED, COLOR2FLAGS(COLOR_THEME_DISABLED_INDEX) )
LROT_NUMENTRY( CUSTOM_COLOR, COLOR2FLAGS(CUSTOM_COLOR_INDEX) )
// Old style theme color constants
{ "ALARM_COLOR", COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) },
{ "BARGRAPH_BGCOLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) },
{ "BARGRAPH1_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "BARGRAPH2_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY2_INDEX) },
{ "CURVE_AXIS_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY2_INDEX) },
{ "CURVE_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "CURVE_CURSOR_COLOR", COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) },
{ "HEADER_BGCOLOR", COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) },
{ "HEADER_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "HEADER_CURRENT_BGCOLOR", COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) },
{ "HEADER_ICON_BGCOLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "LINE_COLOR", COLOR2FLAGS(COLOR_THEME_PRIMARY3_INDEX) },
{ "MAINVIEW_GRAPHICS_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "MAINVIEW_PANES_COLOR", COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) },
{ "MENU_TITLE_BGCOLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "MENU_TITLE_COLOR", COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) },
{ "MENU_TITLE_DISABLE_COLOR", COLOR2FLAGS(COLOR_THEME_PRIMARY3_INDEX) },
{ "OVERLAY_COLOR", COLOR2FLAGS(COLOR_THEME_PRIMARY1_INDEX) },
{ "SCROLLBOX_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) },
{ "TEXT_BGCOLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) },
{ "TEXT_COLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "TEXT_DISABLE_COLOR", COLOR2FLAGS(COLOR_THEME_DISABLED_INDEX) },
{ "TEXT_INVERTED_BGCOLOR", COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) },
{ "TEXT_INVERTED_COLOR", COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) },
{ "TITLE_BGCOLOR", COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) },
{ "TRIM_BGCOLOR", COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) },
{ "TRIM_SHADOW_COLOR", COLOR2FLAGS(COLOR_THEME_PRIMARY1_INDEX) },
{ "WARNING_COLOR", COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) },
LROT_NUMENTRY( ALARM_COLOR, COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) )
LROT_NUMENTRY( BARGRAPH_BGCOLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) )
LROT_NUMENTRY( BARGRAPH1_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( BARGRAPH2_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY2_INDEX) )
LROT_NUMENTRY( CURVE_AXIS_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY2_INDEX) )
LROT_NUMENTRY( CURVE_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( CURVE_CURSOR_COLOR, COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) )
LROT_NUMENTRY( HEADER_BGCOLOR, COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) )
LROT_NUMENTRY( HEADER_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( HEADER_CURRENT_BGCOLOR, COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) )
LROT_NUMENTRY( HEADER_ICON_BGCOLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( LINE_COLOR, COLOR2FLAGS(COLOR_THEME_PRIMARY3_INDEX) )
LROT_NUMENTRY( MAINVIEW_GRAPHICS_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( MAINVIEW_PANES_COLOR, COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) )
LROT_NUMENTRY( MENU_TITLE_BGCOLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( MENU_TITLE_COLOR, COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) )
LROT_NUMENTRY( MENU_TITLE_DISABLE_COLOR, COLOR2FLAGS(COLOR_THEME_PRIMARY3_INDEX) )
LROT_NUMENTRY( OVERLAY_COLOR, COLOR2FLAGS(COLOR_THEME_PRIMARY1_INDEX) )
LROT_NUMENTRY( SCROLLBOX_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) )
LROT_NUMENTRY( TEXT_BGCOLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX) )
LROT_NUMENTRY( TEXT_COLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( TEXT_DISABLE_COLOR, COLOR2FLAGS(COLOR_THEME_DISABLED_INDEX) )
LROT_NUMENTRY( TEXT_INVERTED_BGCOLOR, COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) )
LROT_NUMENTRY( TEXT_INVERTED_COLOR, COLOR2FLAGS(COLOR_THEME_PRIMARY2_INDEX) )
LROT_NUMENTRY( TITLE_BGCOLOR, COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX) )
LROT_NUMENTRY( TRIM_BGCOLOR, COLOR2FLAGS(COLOR_THEME_FOCUS_INDEX) )
LROT_NUMENTRY( TRIM_SHADOW_COLOR, COLOR2FLAGS(COLOR_THEME_PRIMARY1_INDEX) )
LROT_NUMENTRY( WARNING_COLOR, COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) )
// Literal colors
{ "BLACK", RGB2FLAGS(0x00, 0x00, 0x00) },
{ "WHITE", RGB2FLAGS(0xFF, 0xFF, 0xFF) },
{ "LIGHTWHITE", RGB2FLAGS(0xEA, 0xEA, 0xEA) },
{ "YELLOW", RGB2FLAGS(0xFF, 0xFF, 0x00) },
{ "BLUE", RGB2FLAGS(0x00, 0x00, 0xFF) },
{ "DARKBLUE", RGB2FLAGS(0x00, 0x00, 0xA0) },
{ "GREY", RGB2FLAGS(0x60, 0x60, 0x60) },
{ "DARKGREY", RGB2FLAGS(0x40, 0x40, 0x40) },
{ "LIGHTGREY", RGB2FLAGS(0xC0, 0xC0, 0xC0) },
{ "RED", RGB2FLAGS(0xFF, 0x00, 0x00) },
{ "DARKRED", RGB2FLAGS(0xA0, 0x00, 0x00) },
{ "GREEN", RGB2FLAGS(0x00, 0xFF, 0x00) },
{ "DARKGREEN", RGB2FLAGS(0x00, 0xA0, 0x00) },
{ "LIGHTBROWN", RGB2FLAGS(0x9C, 0x6D, 0x20) },
{ "DARKBROWN", RGB2FLAGS(0x6A, 0x48, 0x10) },
{ "BRIGHTGREEN", RGB2FLAGS(0x00, 0xB4, 0x3C) },
{ "ORANGE", RGB2FLAGS(0xE5, 0x64, 0x1E) },
LROT_NUMENTRY( BLACK, RGB2FLAGS(0x00, 0x00, 0x00) )
LROT_NUMENTRY( WHITE, RGB2FLAGS(0xFF, 0xFF, 0xFF) )
LROT_NUMENTRY( LIGHTWHITE, RGB2FLAGS(0xEA, 0xEA, 0xEA) )
LROT_NUMENTRY( YELLOW, RGB2FLAGS(0xFF, 0xFF, 0x00) )
LROT_NUMENTRY( BLUE, RGB2FLAGS(0x00, 0x00, 0xFF) )
LROT_NUMENTRY( DARKBLUE, RGB2FLAGS(0x00, 0x00, 0xA0) )
LROT_NUMENTRY( GREY, RGB2FLAGS(0x60, 0x60, 0x60) )
LROT_NUMENTRY( DARKGREY, RGB2FLAGS(0x40, 0x40, 0x40) )
LROT_NUMENTRY( LIGHTGREY, RGB2FLAGS(0xC0, 0xC0, 0xC0) )
LROT_NUMENTRY( RED, RGB2FLAGS(0xFF, 0x00, 0x00) )
LROT_NUMENTRY( DARKRED, RGB2FLAGS(0xA0, 0x00, 0x00) )
LROT_NUMENTRY( GREEN, RGB2FLAGS(0x00, 0xFF, 0x00) )
LROT_NUMENTRY( DARKGREEN, RGB2FLAGS(0x00, 0xA0, 0x00) )
LROT_NUMENTRY( LIGHTBROWN, RGB2FLAGS(0x9C, 0x6D, 0x20) )
LROT_NUMENTRY( DARKBROWN, RGB2FLAGS(0x6A, 0x48, 0x10) )
LROT_NUMENTRY( BRIGHTGREEN, RGB2FLAGS(0x00, 0xB4, 0x3C) )
LROT_NUMENTRY( ORANGE, RGB2FLAGS(0xE5, 0x64, 0x1E) )
#else
{ "FIXEDWIDTH", FIXEDWIDTH },
LROT_NUMENTRY( FIXEDWIDTH, FIXEDWIDTH )
#endif
// Virtual events
#if defined(ROTARY_ENCODER_NAVIGATION)
{ "EVT_VIRTUAL_PREV", EVT_ROTARY_LEFT },
{ "EVT_VIRTUAL_NEXT", EVT_ROTARY_RIGHT },
{ "EVT_VIRTUAL_DEC", EVT_ROTARY_LEFT },
{ "EVT_VIRTUAL_INC", EVT_ROTARY_RIGHT },
{ "ROTENC_LOWSPEED", ROTENC_LOWSPEED },
{ "ROTENC_MIDSPEED", ROTENC_MIDSPEED },
{ "ROTENC_HIGHSPEED", ROTENC_HIGHSPEED },
LROT_NUMENTRY( EVT_VIRTUAL_PREV, EVT_ROTARY_LEFT )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT, EVT_ROTARY_RIGHT )
LROT_NUMENTRY( EVT_VIRTUAL_DEC, EVT_ROTARY_LEFT )
LROT_NUMENTRY( EVT_VIRTUAL_INC, EVT_ROTARY_RIGHT )
LROT_NUMENTRY( ROTENC_LOWSPEED, ROTENC_LOWSPEED )
LROT_NUMENTRY( ROTENC_MIDSPEED, ROTENC_MIDSPEED )
LROT_NUMENTRY( ROTENC_HIGHSPEED, ROTENC_HIGHSPEED )
#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_T8) || defined(RADIO_COMMANDO8)// key reverted between field nav and value change
{ "EVT_VIRTUAL_PREV", EVT_KEY_FIRST(KEY_PLUS) },
{ "EVT_VIRTUAL_PREV_REPT", EVT_KEY_REPT(KEY_PLUS) },
{ "EVT_VIRTUAL_NEXT", EVT_KEY_FIRST(KEY_MINUS) },
{ "EVT_VIRTUAL_NEXT_REPT", EVT_KEY_REPT(KEY_MINUS) },
{ "EVT_VIRTUAL_DEC", EVT_KEY_FIRST(KEY_MINUS) },
{ "EVT_VIRTUAL_DEC_REPT", EVT_KEY_REPT(KEY_MINUS) },
{ "EVT_VIRTUAL_INC", EVT_KEY_FIRST(KEY_PLUS) },
{ "EVT_VIRTUAL_INC_REPT", EVT_KEY_REPT(KEY_PLUS) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV, EVT_KEY_FIRST(KEY_PLUS) )
LROT_NUMENTRY( EVT_VIRTUAL_PREV_REPT, EVT_KEY_REPT(KEY_PLUS) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT, EVT_KEY_FIRST(KEY_MINUS) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_REPT, EVT_KEY_REPT(KEY_MINUS) )
LROT_NUMENTRY( EVT_VIRTUAL_DEC, EVT_KEY_FIRST(KEY_MINUS) )
LROT_NUMENTRY( EVT_VIRTUAL_DEC_REPT, EVT_KEY_REPT(KEY_MINUS) )
LROT_NUMENTRY( EVT_VIRTUAL_INC, EVT_KEY_FIRST(KEY_PLUS) )
LROT_NUMENTRY( EVT_VIRTUAL_INC_REPT, EVT_KEY_REPT(KEY_PLUS) )
#else
{ "EVT_VIRTUAL_PREV", EVT_KEY_FIRST(KEY_UP) },
{ "EVT_VIRTUAL_PREV_REPT", EVT_KEY_REPT(KEY_UP) },
{ "EVT_VIRTUAL_NEXT", EVT_KEY_FIRST(KEY_DOWN) },
{ "EVT_VIRTUAL_NEXT_REPT", EVT_KEY_REPT(KEY_DOWN) },
{ "EVT_VIRTUAL_DEC", EVT_KEY_FIRST(KEY_DOWN) },
{ "EVT_VIRTUAL_DEC_REPT", EVT_KEY_REPT(KEY_DOWN) },
{ "EVT_VIRTUAL_INC", EVT_KEY_FIRST(KEY_UP) },
{ "EVT_VIRTUAL_INC_REPT", EVT_KEY_REPT(KEY_UP) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV, EVT_KEY_FIRST(KEY_UP) )
LROT_NUMENTRY( EVT_VIRTUAL_PREV_REPT, EVT_KEY_REPT(KEY_UP) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT, EVT_KEY_FIRST(KEY_DOWN) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_REPT, EVT_KEY_REPT(KEY_DOWN) )
LROT_NUMENTRY( EVT_VIRTUAL_DEC, EVT_KEY_FIRST(KEY_DOWN) )
LROT_NUMENTRY( EVT_VIRTUAL_DEC_REPT, EVT_KEY_REPT(KEY_DOWN) )
LROT_NUMENTRY( EVT_VIRTUAL_INC, EVT_KEY_FIRST(KEY_UP) )
LROT_NUMENTRY( EVT_VIRTUAL_INC_REPT, EVT_KEY_REPT(KEY_UP) )
#endif
#if defined(NAVIGATION_9X)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_LEFT) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_LEFT) },
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_RIGHT) },
{ "EVT_VIRTUAL_MENU_LONG", EVT_KEY_LONG(KEY_RIGHT) },
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV_PAGE, EVT_KEY_LONG(KEY_LEFT) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_PAGE, EVT_KEY_BREAK(KEY_LEFT) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU, EVT_KEY_BREAK(KEY_RIGHT) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU_LONG, EVT_KEY_LONG(KEY_RIGHT) )
LROT_NUMENTRY( EVT_VIRTUAL_ENTER, EVT_KEY_BREAK(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_ENTER_LONG, EVT_KEY_LONG(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_EXIT, EVT_KEY_BREAK(KEY_EXIT) )
#elif defined(NAVIGATION_XLITE)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_LEFT) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_LONG(KEY_RIGHT) },
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_SHIFT) },
{ "EVT_VIRTUAL_MENU_LONG", EVT_KEY_LONG(KEY_SHIFT) },
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV_PAGE, EVT_KEY_LONG(KEY_LEFT) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_PAGE, EVT_KEY_LONG(KEY_RIGHT) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU, EVT_KEY_BREAK(KEY_SHIFT) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU_LONG, EVT_KEY_LONG(KEY_SHIFT) )
LROT_NUMENTRY( EVT_VIRTUAL_ENTER, EVT_KEY_BREAK(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_ENTER_LONG, EVT_KEY_LONG(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_EXIT, EVT_KEY_BREAK(KEY_EXIT) )
#elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D)
#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_COMMANDO8)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_BREAK(KEY_PAGEUP) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PAGEDN) },
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_MODEL) },
{ "EVT_VIRTUAL_MENU_LONG", EVT_KEY_LONG(KEY_MODEL) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV_PAGE, EVT_KEY_BREAK(KEY_PAGEUP) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_PAGE, EVT_KEY_BREAK(KEY_PAGEDN) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU, EVT_KEY_BREAK(KEY_MODEL) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU_LONG, EVT_KEY_LONG(KEY_MODEL) )
#else
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_PAGE) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PAGE) },
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_MENU) },
{ "EVT_VIRTUAL_MENU_LONG", EVT_KEY_LONG(KEY_MENU) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV_PAGE, EVT_KEY_LONG(KEY_PAGE) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_PAGE, EVT_KEY_BREAK(KEY_PAGE) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU, EVT_KEY_BREAK(KEY_MENU) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU_LONG, EVT_KEY_LONG(KEY_MENU) )
#endif
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
LROT_NUMENTRY( EVT_VIRTUAL_ENTER, EVT_KEY_BREAK(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_ENTER_LONG, EVT_KEY_LONG(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_EXIT, EVT_KEY_BREAK(KEY_EXIT) )
#elif defined(COLORLCD)
#if defined(KEYS_GPIO_REG_PGUP)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_BREAK(KEY_PGUP) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PGDN) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV_PAGE, EVT_KEY_BREAK(KEY_PGUP) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_PAGE, EVT_KEY_BREAK(KEY_PGDN) )
#elif defined(PCBNV14)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_BREAK(KEY_LEFT) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_RIGHT) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV_PAGE, EVT_KEY_BREAK(KEY_LEFT) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_PAGE, EVT_KEY_BREAK(KEY_RIGHT) )
#else
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_PGDN) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PGDN) },
LROT_NUMENTRY( EVT_VIRTUAL_PREV_PAGE, EVT_KEY_LONG(KEY_PGDN) )
LROT_NUMENTRY( EVT_VIRTUAL_NEXT_PAGE, EVT_KEY_BREAK(KEY_PGDN) )
#endif
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_MODEL) },
{ "EVT_VIRTUAL_MENU_LONG", EVT_KEY_LONG(KEY_MODEL) },
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
LROT_NUMENTRY( EVT_VIRTUAL_MENU, EVT_KEY_BREAK(KEY_MODEL) )
LROT_NUMENTRY( EVT_VIRTUAL_MENU_LONG, EVT_KEY_LONG(KEY_MODEL) )
LROT_NUMENTRY( EVT_VIRTUAL_ENTER, EVT_KEY_BREAK(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_ENTER_LONG, EVT_KEY_LONG(KEY_ENTER) )
LROT_NUMENTRY( EVT_VIRTUAL_EXIT, EVT_KEY_BREAK(KEY_EXIT) )
#endif
{ "EVT_EXIT_BREAK", EVT_KEY_BREAK(KEY_EXIT) },
LROT_NUMENTRY( EVT_EXIT_BREAK, EVT_KEY_BREAK(KEY_EXIT) )
#if defined(KEYS_GPIO_REG_ENTER)
KEY_EVENTS(ENTER, KEY_ENTER),
KEY_EVENTS(ENTER, KEY_ENTER)
#endif
#if defined(KEYS_GPIO_REG_MENU)
KEY_EVENTS(MENU, KEY_MENU),
KEY_EVENTS(MENU, KEY_MENU)
#endif
#if defined(KEYS_GPIO_REG_RIGHT) && defined(COLORLCD)
KEY_EVENTS(TELEM, KEY_TELEM),
KEY_EVENTS(TELEM, KEY_TELEM)
#elif defined(KEYS_GPIO_REG_RIGHT)
KEY_EVENTS(RIGHT, KEY_RIGHT),
KEY_EVENTS(RIGHT, KEY_RIGHT)
#endif
#if defined(KEYS_GPIO_REG_UP) && defined(COLORLCD)
KEY_EVENTS(MODEL, KEY_MODEL),
KEY_EVENTS(MODEL, KEY_MODEL)
#elif defined(KEYS_GPIO_REG_UP)
KEY_EVENTS(UP, KEY_UP),
KEY_EVENTS(UP, KEY_UP)
#endif
#if defined(KEYS_GPIO_REG_LEFT) && defined(COLORLCD)
KEY_EVENTS(SYS, KEY_RADIO),
KEY_EVENTS(SYS, KEY_RADIO)
#elif defined(KEYS_GPIO_REG_LEFT)
KEY_EVENTS(LEFT, KEY_LEFT),
KEY_EVENTS(LEFT, KEY_LEFT)
#endif
#if defined(KEYS_GPIO_REG_DOWN) && defined(COLORLCD)
{ "EVT_RTN_FIRST", EVT_KEY_BREAK(KEY_EXIT) },
LROT_NUMENTRY( EVT_RTN_FIRST, EVT_KEY_BREAK(KEY_EXIT) )
#else
KEY_EVENTS(DOWN, KEY_DOWN),
KEY_EVENTS(DOWN, KEY_DOWN)
#endif
#if defined(KEYS_GPIO_REG_PGUP)
KEY_EVENTS(PAGEUP, KEY_PGUP),
KEY_EVENTS(PAGEUP, KEY_PGUP)
#endif
#if defined(KEYS_GPIO_REG_PGDN)
KEY_EVENTS(PAGEDN, KEY_PGDN),
KEY_EVENTS(PAGEDN, KEY_PGDN)
#endif
#if defined(KEYS_GPIO_REG_PAGE)
KEY_EVENTS(PAGE, KEY_PAGE),
KEY_EVENTS(PAGE, KEY_PAGE)
#endif
#if defined(KEYS_GPIO_REG_SHIFT)
KEY_EVENTS(SHIFT, KEY_SHIFT),
KEY_EVENTS(SHIFT, KEY_SHIFT)
#endif
#if defined(KEYS_GPIO_REG_PLUS)
KEY_EVENTS(PLUS, KEY_PLUS),
KEY_EVENTS(PLUS, KEY_PLUS)
#endif
#if defined(KEYS_GPIO_REG_MINUS)
KEY_EVENTS(MINUS, KEY_MINUS),
KEY_EVENTS(MINUS, KEY_MINUS)
#endif
#if defined(ROTARY_ENCODER_NAVIGATION)
KEY_EVENTS(ROT, KEY_ENTER),
{ "EVT_ROT_LEFT", EVT_ROTARY_LEFT },
{ "EVT_ROT_RIGHT", EVT_ROTARY_RIGHT },
KEY_EVENTS(ROT, KEY_ENTER)
LROT_NUMENTRY( EVT_ROT_LEFT, EVT_ROTARY_LEFT )
LROT_NUMENTRY( EVT_ROT_RIGHT, EVT_ROTARY_RIGHT )
#endif
#if defined(HARDWARE_TOUCH)
{ "EVT_TOUCH_FIRST", EVT_TOUCH_FIRST },
{ "EVT_TOUCH_BREAK", EVT_TOUCH_BREAK },
{ "EVT_TOUCH_SLIDE", EVT_TOUCH_SLIDE },
{ "EVT_TOUCH_TAP", EVT_TOUCH_TAP },
LROT_NUMENTRY( EVT_TOUCH_FIRST, EVT_TOUCH_FIRST )
LROT_NUMENTRY( EVT_TOUCH_BREAK, EVT_TOUCH_BREAK )
LROT_NUMENTRY( EVT_TOUCH_SLIDE, EVT_TOUCH_SLIDE )
LROT_NUMENTRY( EVT_TOUCH_TAP, EVT_TOUCH_TAP )
#endif
#if LCD_DEPTH > 1 && !defined(COLORLCD)
{ "FILL_WHITE", FILL_WHITE },
{ "GREY_DEFAULT", GREY_DEFAULT },
LROT_NUMENTRY( FILL_WHITE, FILL_WHITE )
LROT_NUMENTRY( GREY_DEFAULT, GREY_DEFAULT )
#endif
#if LCD_W <= 212
{ "FORCE", FORCE },
{ "ERASE", ERASE },
{ "ROUND", ROUND },
LROT_NUMENTRY( FORCE, FORCE )
LROT_NUMENTRY( ERASE, ERASE )
LROT_NUMENTRY( ROUND, ROUND )
#endif
{ "SOLID", SOLID },
{ "DOTTED", DOTTED },
{ "LCD_W", LCD_W },
{ "LCD_H", LCD_H },
{ "PLAY_NOW", PLAY_NOW },
{ "PLAY_BACKGROUND", PLAY_BACKGROUND },
{ "TIMEHOUR", TIMEHOUR },
LROT_NUMENTRY( SOLID, SOLID )
LROT_NUMENTRY( DOTTED, DOTTED )
LROT_NUMENTRY( LCD_W, LCD_W )
LROT_NUMENTRY( LCD_H, LCD_H )
LROT_NUMENTRY( PLAY_NOW, PLAY_NOW )
LROT_NUMENTRY( PLAY_BACKGROUND, PLAY_BACKGROUND )
LROT_NUMENTRY( TIMEHOUR, TIMEHOUR )
{"UNIT_RAW", UNIT_RAW },
{"UNIT_VOLTS", UNIT_VOLTS },
{"UNIT_AMPS", UNIT_AMPS },
{"UNIT_MILLIAMPS", UNIT_MILLIAMPS },
{"UNIT_KTS", UNIT_KTS },
{"UNIT_METERS_PER_SECOND", UNIT_METERS_PER_SECOND },
{"UNIT_FEET_PER_SECOND", UNIT_FEET_PER_SECOND },
{"UNIT_KMH", UNIT_KMH },
{"UNIT_MPH", UNIT_MPH },
{"UNIT_METERS", UNIT_METERS },
{"UNIT_KM", UNIT_KM },
{"UNIT_FEET", UNIT_FEET },
{"UNIT_CELSIUS", UNIT_CELSIUS },
{"UNIT_FAHRENHEIT", UNIT_FAHRENHEIT },
{"UNIT_PERCENT", UNIT_PERCENT },
{"UNIT_MAH", UNIT_MAH },
{"UNIT_WATTS", UNIT_WATTS },
{"UNIT_MILLIWATTS", UNIT_MILLIWATTS },
{"UNIT_DB", UNIT_DB },
{"UNIT_RPMS", UNIT_RPMS },
{"UNIT_G", UNIT_G },
{"UNIT_DEGREE", UNIT_DEGREE },
{"UNIT_RADIANS", UNIT_RADIANS },
{"UNIT_MILLILITERS", UNIT_MILLILITERS },
{"UNIT_FLOZ", UNIT_FLOZ },
{"UNIT_MILLILITERS_PER_MINUTE", UNIT_MILLILITERS_PER_MINUTE },
{"UNIT_HERTZ", UNIT_HERTZ },
{"UNIT_MS", UNIT_MS },
{"UNIT_US", UNIT_US },
{"UNIT_HOURS", UNIT_HOURS },
{"UNIT_MINUTES", UNIT_MINUTES },
{"UNIT_SECONDS", UNIT_SECONDS },
{"UNIT_CELLS", UNIT_CELLS},
{"UNIT_DATETIME", UNIT_DATETIME},
{"UNIT_GPS", UNIT_GPS},
{"UNIT_BITFIELD", UNIT_BITFIELD},
{"UNIT_TEXT", UNIT_TEXT},
LROT_NUMENTRY( UNIT_RAW, UNIT_RAW )
LROT_NUMENTRY( UNIT_VOLTS, UNIT_VOLTS )
LROT_NUMENTRY( UNIT_AMPS, UNIT_AMPS )
LROT_NUMENTRY( UNIT_MILLIAMPS, UNIT_MILLIAMPS )
LROT_NUMENTRY( UNIT_KTS, UNIT_KTS )
LROT_NUMENTRY( UNIT_METERS_PER_SECOND, UNIT_METERS_PER_SECOND )
LROT_NUMENTRY( UNIT_FEET_PER_SECOND, UNIT_FEET_PER_SECOND )
LROT_NUMENTRY( UNIT_KMH, UNIT_KMH )
LROT_NUMENTRY( UNIT_MPH, UNIT_MPH )
LROT_NUMENTRY( UNIT_METERS, UNIT_METERS )
LROT_NUMENTRY( UNIT_KM, UNIT_KM )
LROT_NUMENTRY( UNIT_FEET, UNIT_FEET )
LROT_NUMENTRY( UNIT_CELSIUS, UNIT_CELSIUS )
LROT_NUMENTRY( UNIT_FAHRENHEIT, UNIT_FAHRENHEIT )
LROT_NUMENTRY( UNIT_PERCENT, UNIT_PERCENT )
LROT_NUMENTRY( UNIT_MAH, UNIT_MAH )
LROT_NUMENTRY( UNIT_WATTS, UNIT_WATTS )
LROT_NUMENTRY( UNIT_MILLIWATTS, UNIT_MILLIWATTS )
LROT_NUMENTRY( UNIT_DB, UNIT_DB )
LROT_NUMENTRY( UNIT_RPMS, UNIT_RPMS )
LROT_NUMENTRY( UNIT_G, UNIT_G )
LROT_NUMENTRY( UNIT_DEGREE, UNIT_DEGREE )
LROT_NUMENTRY( UNIT_RADIANS, UNIT_RADIANS )
LROT_NUMENTRY( UNIT_MILLILITERS, UNIT_MILLILITERS )
LROT_NUMENTRY( UNIT_FLOZ, UNIT_FLOZ )
LROT_NUMENTRY( UNIT_MILLILITERS_PER_MINUTE, UNIT_MILLILITERS_PER_MINUTE )
LROT_NUMENTRY( UNIT_HERTZ, UNIT_HERTZ )
LROT_NUMENTRY( UNIT_MS, UNIT_MS )
LROT_NUMENTRY( UNIT_US, UNIT_US )
LROT_NUMENTRY( UNIT_HOURS, UNIT_HOURS )
LROT_NUMENTRY( UNIT_MINUTES, UNIT_MINUTES )
LROT_NUMENTRY( UNIT_SECONDS, UNIT_SECONDS )
LROT_NUMENTRY( UNIT_CELLS, UNIT_CELLS )
LROT_NUMENTRY( UNIT_DATETIME, UNIT_DATETIME )
LROT_NUMENTRY( UNIT_GPS, UNIT_GPS )
LROT_NUMENTRY( UNIT_BITFIELD, UNIT_BITFIELD )
LROT_NUMENTRY( UNIT_TEXT, UNIT_TEXT )
{"AM_RDO", AM_RDO},
{"AM_HID", AM_HID},
{"AM_SYS", AM_SYS},
{"AM_DIR", AM_DIR},
{"AM_ARC", AM_ARC},
LROT_NUMENTRY( AM_RDO, AM_RDO )
LROT_NUMENTRY( AM_HID, AM_HID )
LROT_NUMENTRY( AM_SYS, AM_SYS )
LROT_NUMENTRY( AM_DIR, AM_DIR )
LROT_NUMENTRY( AM_ARC, AM_ARC )
LROT_END(etxcst, NULL, 0)
{ nullptr, 0 } /* sentinel */
};
const luaR_string_entry edgetxStrings[] = {
{ "CHAR_RIGHT", STR_CHAR_RIGHT },
{ "CHAR_LEFT", STR_CHAR_LEFT },
{ "CHAR_UP", STR_CHAR_UP },
{ "CHAR_DOWN", STR_CHAR_DOWN },
{ "CHAR_DELTA", STR_CHAR_DELTA },
{ "CHAR_STICK", STR_CHAR_STICK },
{ "CHAR_POT", STR_CHAR_POT },
{ "CHAR_SLIDER", STR_CHAR_SLIDER },
{ "CHAR_SWITCH", STR_CHAR_SWITCH },
{ "CHAR_TRIM", STR_CHAR_TRIM },
{ "CHAR_INPUT", STR_CHAR_INPUT },
{ "CHAR_FUNCTION", STR_CHAR_FUNCTION },
{ "CHAR_CYC", STR_CHAR_CYC },
{ "CHAR_TRAINER", STR_CHAR_TRAINER },
{ "CHAR_CHANNEL", STR_CHAR_CHANNEL },
{ "CHAR_TELEMETRY", STR_CHAR_TELEMETRY },
{ "CHAR_LUA", STR_CHAR_LUA },
{ nullptr, "" } /* sentinel */
};
// LUA strings cannot be encoded statically,
// use light user data instead
LROT_BEGIN(etxstr, NULL, 0)
LROT_LUDENTRY( CHAR_RIGHT, STR_CHAR_RIGHT )
LROT_LUDENTRY( CHAR_LEFT, STR_CHAR_LEFT )
LROT_LUDENTRY( CHAR_UP, STR_CHAR_UP )
LROT_LUDENTRY( CHAR_DOWN, STR_CHAR_DOWN )
LROT_LUDENTRY( CHAR_DELTA, STR_CHAR_DELTA )
LROT_LUDENTRY( CHAR_STICK, STR_CHAR_STICK )
LROT_LUDENTRY( CHAR_POT, STR_CHAR_POT )
LROT_LUDENTRY( CHAR_SLIDER, STR_CHAR_SLIDER )
LROT_LUDENTRY( CHAR_SWITCH, STR_CHAR_SWITCH )
LROT_LUDENTRY( CHAR_TRIM, STR_CHAR_TRIM )
LROT_LUDENTRY( CHAR_INPUT, STR_CHAR_INPUT )
LROT_LUDENTRY( CHAR_FUNCTION, STR_CHAR_FUNCTION )
LROT_LUDENTRY( CHAR_CYC, STR_CHAR_CYC )
LROT_LUDENTRY( CHAR_TRAINER, STR_CHAR_TRAINER )
LROT_LUDENTRY( CHAR_CHANNEL, STR_CHAR_CHANNEL )
LROT_LUDENTRY( CHAR_TELEMETRY, STR_CHAR_TELEMETRY )
LROT_LUDENTRY( CHAR_LUA, STR_CHAR_LUA )
LROT_END(etxstr, NULL, 0)