diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index bb4df9578..d86aa3bea 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -66,6 +66,7 @@ jobs: - x9lites - xlite - xlites + - mt12 container: image: ghcr.io/edgetx/edgetx-dev:latest volumes: @@ -109,6 +110,7 @@ jobs: - x9e;x9e-hall - x9lite;x9lites - xlite;xlites + - mt12 container: image: ghcr.io/edgetx/edgetx-dev:latest volumes: diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 87fc82415..619ad9914 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -306,6 +306,8 @@ elseif(PCB STREQUAL X7 AND PCBREV STREQUAL COMMANDO8) set(FLAVOUR commando8) elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T8) set(FLAVOUR t8) +elseif(PCB STREQUAL X7 AND PCBREV STREQUAL MT12) + set(FLAVOUR mt12) elseif(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) set(FLAVOUR x9d+2019) elseif(PCB STREQUAL X10 AND PCBREV STREQUAL EXPRESS) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index c69b8071d..7806f9c0e 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -428,13 +428,6 @@ enum SwitchSources { SWSRC_FIRST_TRIM SKIP, SWSRC_LAST_TRIM SKIP = SWSRC_FIRST_TRIM + 2 * MAX_TRIMS - 1, -#if NUM_TRIMS > 6 - SWSRC_TrimT7Down, - SWSRC_TrimT7Up, - SWSRC_TrimT8Down, - SWSRC_TrimT8Up, -#endif - SWSRC_FIRST_LOGICAL_SWITCH SKIP, SWSRC_LAST_LOGICAL_SWITCH SKIP = SWSRC_FIRST_LOGICAL_SWITCH + MAX_LOGICAL_SWITCHES - 1, @@ -482,7 +475,8 @@ enum MixSources { #if defined(LUA_INPUTS) MIXSRC_FIRST_LUA SKIP, - MIXSRC_LAST_LUA SKIP = MIXSRC_FIRST_LUA + (MAX_SCRIPTS * MAX_SCRIPT_OUTPUTS) - 1, + MIXSRC_LAST_LUA SKIP = + MIXSRC_FIRST_LUA + (MAX_SCRIPTS * MAX_SCRIPT_OUTPUTS) - 1, #endif // Semantic sticks @@ -515,19 +509,7 @@ enum MixSources { MIXSRC_LAST_HELI SKIP = MIXSRC_FIRST_HELI + 2, MIXSRC_FIRST_TRIM SKIP, - MIXSRC_TrimRud = MIXSRC_FIRST_TRIM, - MIXSRC_TrimEle, - MIXSRC_TrimThr, - MIXSRC_TrimAil, - //#if defined(PCBHORUS) - MIXSRC_TrimT5, - MIXSRC_TrimT6, - MIXSRC_TrimT7, - MIXSRC_TrimT8, - MIXSRC_LAST_TRIM SKIP = MIXSRC_TrimT8, - //#else - //MIXSRC_LAST_TRIM SKIP = MIXSRC_TrimAil, - //#endif + MIXSRC_LAST_TRIM SKIP = MIXSRC_FIRST_TRIM + MAX_TRIMS - 1, MIXSRC_FIRST_SWITCH SKIP, MIXSRC_LAST_SWITCH SKIP = MIXSRC_FIRST_SWITCH + MAX_SWITCHES - 1, @@ -560,9 +542,6 @@ enum MixSources { #define INPUTSRC_FIRST MIXSRC_FIRST_STICK #define INPUTSRC_LAST MIXSRC_LAST_TELEM -// TODO: this won't work forever (what about ground radios?) -#define MIXSRC_Thr (MIXSRC_FIRST_STICK + 2) - #if defined(FUNCTION_SWITCHES) #define MIXSRC_LAST_REGULAR_SWITCH (MIXSRC_FIRST_SWITCH + switchGetMaxSwitches() - 1) #define MIXSRC_FIRST_FS_SWITCH (MIXSRC_LAST_REGULAR_SWITCH + 1) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 52d64811a..b417c2c2d 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -117,39 +117,39 @@ static inline void check_struct() CHKSIZE(TrainerData, 16); #if defined(PCBXLITES) - CHKSIZE(RadioData, 872); + CHKSIZE(RadioData, 871); CHKSIZE(ModelData, 6265); #elif defined(PCBXLITE) - CHKSIZE(RadioData, 870); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6265); #elif defined(RADIO_TPRO) - CHKSIZE(RadioData, 859); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6290); #elif defined(RADIO_POCKET) - CHKSIZE(RadioData, 859); + CHKSIZE(RadioData, 869); #elif defined(RADIO_TPROV2) - CHKSIZE(RadioData, 859); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6290); #elif defined(RADIO_T14) - CHKSIZE(RadioData, 859); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6265); #elif defined(RADIO_T20) - CHKSIZE(RadioData, 859); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6326); #elif defined(RADIO_BOXER) - CHKSIZE(RadioData, 870); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6265); #elif defined(RADIO_MT12) - CHKSIZE(RadioData, 859); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6265); #elif defined(PCBX7) - CHKSIZE(RadioData, 870); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6265); #elif defined(PCBX9E) - CHKSIZE(RadioData, 870); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6707); #elif defined(PCBX9D) || defined(PCBX9DP) - CHKSIZE(RadioData, 870); + CHKSIZE(RadioData, 869); CHKSIZE(ModelData, 6706); #elif defined(PCBHORUS) #if defined(PCBX10) diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index 5a12b4515..897896b7c 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -824,16 +824,9 @@ PACK(struct TrainerData { NOBACKUP(uint8_t blOffBright:7); \ NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]); #else - #if defined(STORAGE_BLUETOOTH) - #define BLUETOOTH_FIELDS \ - uint8_t spare6 SKIP; \ - char bluetoothName[LEN_BLUETOOTH_NAME]; - #else - #define BLUETOOTH_FIELDS - #endif #define EXTRA_GENERAL_FIELDS \ uint8_t backlightColor; \ - BLUETOOTH_FIELDS + char bluetoothName[LEN_BLUETOOTH_NAME]; #endif #if defined(BUZZER) diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index 3f36a5e97..881a81113 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -129,13 +129,17 @@ void doMainScreenGraphics() drawThrottle(LBOX_CENTERX, calibratedAnalogs[ADC_MAIN_TH]); #else int16_t calibStickVert = calibratedAnalogs[ADC_MAIN_LV]; - if (g_model.throttleReversed && inputMappingConvertMode(ADC_MAIN_LV) == THR_STICK) + if (g_model.throttleReversed && + inputMappingConvertMode(ADC_MAIN_LV) == inputMappingGetThrottle()) { calibStickVert = -calibStickVert; + } drawStick(LBOX_CENTERX, calibratedAnalogs[ADC_MAIN_LH], calibStickVert); calibStickVert = calibratedAnalogs[ADC_MAIN_RV]; - if (g_model.throttleReversed && inputMappingConvertMode(ADC_MAIN_RV) == THR_STICK) + if (g_model.throttleReversed && + inputMappingConvertMode(ADC_MAIN_RV) == inputMappingGetThrottle()) { calibStickVert = -calibStickVert; + } drawStick(RBOX_CENTERX, calibratedAnalogs[ADC_MAIN_RH], calibStickVert); #endif diff --git a/radio/src/gui/212x64/view_main.cpp b/radio/src/gui/212x64/view_main.cpp index d0ed17d80..d63f9b24b 100644 --- a/radio/src/gui/212x64/view_main.cpp +++ b/radio/src/gui/212x64/view_main.cpp @@ -96,13 +96,17 @@ static bool isAsteriskDisplayed() { void doMainScreenGraphics() { int16_t calibStickVert = calibratedAnalogs[ADC_MAIN_LV]; - if (g_model.throttleReversed && inputMappingConvertMode(ADC_MAIN_LV) == THR_STICK) + if (g_model.throttleReversed && + inputMappingConvertMode(ADC_MAIN_LV) == inputMappingGetThrottle()) { calibStickVert = -calibStickVert; + } drawStick(LBOX_CENTERX, calibratedAnalogs[ADC_MAIN_LH], calibStickVert); calibStickVert = calibratedAnalogs[ADC_MAIN_RV]; - if (g_model.throttleReversed && inputMappingConvertMode(ADC_MAIN_RV) == THR_STICK) + if (g_model.throttleReversed && + inputMappingConvertMode(ADC_MAIN_RV) == inputMappingGetThrottle()) { calibStickVert = -calibStickVert; + } drawStick(RBOX_CENTERX, calibratedAnalogs[ADC_MAIN_RH], calibStickVert); } diff --git a/radio/src/gui/colorlcd/input_edit_adv.cpp b/radio/src/gui/colorlcd/input_edit_adv.cpp index 0d1024588..035487b28 100644 --- a/radio/src/gui/colorlcd/input_edit_adv.cpp +++ b/radio/src/gui/colorlcd/input_edit_adv.cpp @@ -59,7 +59,8 @@ InputEditAdvanced::InputEditAdvanced(uint8_t input_n, uint8_t index) : // Trim line = form->newLine(&grid); new StaticText(line, rect_t{}, STR_TRIM, 0, COLOR_THEME_PRIMARY1); - auto c = new Choice(line, rect_t{}, -TRIM_OFF, -TRIM_LAST, + const auto trimLast = TRIM_OFF + keysGetMaxTrims() - 1; + auto c = new Choice(line, rect_t{}, -TRIM_OFF, -trimLast, GET_VALUE(-input->trimSource), SET_VALUE(input->trimSource, -newValue)); diff --git a/radio/src/input_mapping.h b/radio/src/input_mapping.h index bb5772538..4cef7054c 100644 --- a/radio/src/input_mapping.h +++ b/radio/src/input_mapping.h @@ -23,11 +23,6 @@ #include -// Air radios / input order in mode 1 -#define RUD_STICK 0 -#define ELE_STICK 1 -#define THR_STICK 2 -#define AIL_STICK 3 #define MAX_INPUT_MODES 4 diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 50914077e..fdb447370 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -368,11 +368,6 @@ struct LuaSingleField { }; const LuaSingleField luaSingleFields[] = { - {MIXSRC_FIRST_STICK, "rud", "Rudder"}, - {MIXSRC_FIRST_STICK + 1, "ele", "Elevator"}, - {MIXSRC_FIRST_STICK + 2, "thr", "Throttle"}, - {MIXSRC_FIRST_STICK + 3, "ail", "Aileron"}, - #if defined(IMU) {MIXSRC_TILT_X, "tiltx", "Tilt X"}, {MIXSRC_TILT_Y, "tilty", "Tilt Y"}, @@ -390,16 +385,6 @@ const LuaSingleField luaSingleFields[] = { {MIXSRC_MAX, "min", "MIN"}, {MIXSRC_MAX, "max", "MAX"}, - {MIXSRC_TrimRud, "trim-rud", "Rudder trim"}, - {MIXSRC_TrimEle, "trim-ele", "Elevator trim"}, - {MIXSRC_TrimThr, "trim-thr", "Throttle trim"}, - {MIXSRC_TrimAil, "trim-ail", "Aileron trim"}, - -#if MAX_TRIMS > 4 - {MIXSRC_TrimT5, "trim-t5", "Aux trim T5"}, - {MIXSRC_TrimT6, "trim-t6", "Aux trim T6"}, -#endif - {MIXSRC_TX_VOLTAGE, "tx-voltage", "Transmitter battery voltage [volts]"}, {MIXSRC_TX_TIME, "clock", "RTC clock [minutes from midnight]"}, }; diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 1d57b0ad6..062dacbf9 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -591,6 +591,12 @@ void evalInputs(uint8_t mode) } } +#if defined(SURFACE_RADIO) + constexpr int IDLE_TRIM_SCALE = 1; +#else + constexpr int IDLE_TRIM_SCALE = 2; +#endif + int getStickTrimValue(int stick, int stickValue) { if (stick < 0) @@ -598,13 +604,26 @@ int getStickTrimValue(int stick, int stickValue) int trim = trims[stick]; uint8_t thrTrimSw = g_model.getThrottleStickTrimSource() - MIXSRC_FIRST_TRIM; - if (stick == thrTrimSw) { + if (stick == thrTrimSw) { // trim for throttle if (g_model.throttleReversed) trim = -trim; - if (g_model.thrTrim) { + if (g_model.thrTrim) { // throttle idle ON + // evalTrims() store 2 * trim value in trims[] + // so here, trim values range from -256 to 256 + // and extended trim values range from -1024 to 1024 trim = (g_model.extendedTrims) ? 2 * TRIM_EXTENDED_MAX + trim : 2 * TRIM_MAX + trim; - trim = trim * (1024 - stickValue) / (2 * RESX); + trim = trim * (1024 - stickValue) / (IDLE_TRIM_SCALE * RESX); +#if defined(SURFACE_RADIO) + // Throttle Idle trim (g_model.thrTrim) should affect only forward stick (0 to 1024) + // Return no trim for reverse side when throttle idle trim is enabled + if (stickValue < 0) return 0; +#endif } +#if defined(SURFACE_RADIO) + // divide throtle trim by two since since the full extend + // of forward/reverse chan is only 1024 instead of 2048 + trim >>= 1; +#endif } return trim; } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 4d86c219b..5daec4f8b 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -159,23 +159,6 @@ enum CurveRefType { #define TRIM_OFF (1) #define TRIM_ON (0) -#define TRIM_RUD (-1) -#define TRIM_ELE (-2) -#define TRIM_THR (-3) -#define TRIM_AIL (-4) -#if defined(PCBPL18) - #define TRIM_T5 (-5) - #define TRIM_T6 (-6) - #define TRIM_T7 (-7) - #define TRIM_T8 (-8) - #define TRIM_LAST TRIM_T8 -#elif defined(PCBHORUS) - #define TRIM_T5 (-5) - #define TRIM_T6 (-6) - #define TRIM_LAST TRIM_T6 -#else - #define TRIM_LAST TRIM_AIL -#endif enum MixerMultiplex { MLTPX_ADD = 0, diff --git a/radio/src/storage/yaml/CMakeLists.txt b/radio/src/storage/yaml/CMakeLists.txt index 6a7e537bb..61e88b19d 100644 --- a/radio/src/storage/yaml/CMakeLists.txt +++ b/radio/src/storage/yaml/CMakeLists.txt @@ -31,7 +31,7 @@ elseif(PCB STREQUAL X7) set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_128x64.cpp) endif() elseif(PCB STREQUAL X9LITE) - set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_x9lite.cpp) + set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_128x64.cpp) elseif(PCB STREQUAL X9LITES) set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_128x64.cpp) elseif(PCB STREQUAL XLITE) diff --git a/radio/src/storage/yaml/yaml_datastructs.cpp b/radio/src/storage/yaml/yaml_datastructs.cpp index 3b1a2254c..dd05b1081 100644 --- a/radio/src/storage/yaml/yaml_datastructs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs.cpp @@ -44,9 +44,7 @@ #else #include "yaml_datastructs_128x64.cpp" #endif -#elif defined(PCBX9LITE) && !defined(PCBX9LITES) - #include "yaml_datastructs_x9lite.cpp" -#elif defined(PCBX9LITES) +#elif defined(PCBX9LITE) #include "yaml_datastructs_128x64.cpp" #elif defined(PCBXLITE) && !defined(PCBXLITES) #include "yaml_datastructs_128x64.cpp" diff --git a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp index a5e5a467a..1e92b6413 100644 --- a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp @@ -106,14 +106,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_NONE, "NONE" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, @@ -349,7 +341,6 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), YAML_UNSIGNED( "backlightColor", 8 ), - YAML_PADDING( 8 ), YAML_STRING("bluetoothName", 10), YAML_STRING("ownerRegistrationID", 8), YAML_CUSTOM("rotEncDirection",r_rotEncDirection,nullptr), diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 4529e98ca..5214ce6aa 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -252,7 +252,7 @@ static uint32_t r_mixSrcRaw(const YamlNode* node, const char* val, uint8_t val_l val[1] == 'm' && val[2] == 'r' && val[3] >= '1' && - val[3] <= ('1' + MAX_TIMERS)) { + val[3] <= ('0' + MAX_TIMERS)) { return MIXSRC_FIRST_TIMER + (val[3] - '1'); @@ -263,15 +263,16 @@ static uint32_t r_mixSrcRaw(const YamlNode* node, const char* val, uint8_t val_l val[3] == 'E' && val[4] == 'R' && val[5] >= '1' && - val[5] <= ('1' + MAX_TIMERS)) { + val[5] <= ('0' + MAX_TIMERS)) { return MIXSRC_FIRST_TIMER + (val[5] - '1'); } else if (val_len > 1 && val[0] == 'T' && val[1] >= '1' && - val[1] <= '9') { - return yaml_str2uint(val + 1, val_len - 1) + MIXSRC_FIRST_TRIM - 1; + val[1] <= ('0' + MAX_TRIMS)) { + + return MIXSRC_FIRST_TRIM + (val[1] - '1'); } auto idx = analogLookupCanonicalIdx(ADC_INPUT_MAIN, val, val_len); @@ -343,6 +344,11 @@ static bool w_mixSrcRaw(const YamlNode* node, uint32_t val, yaml_writer_func wf, if (!wf(opaque, "CYC", 3)) return false; str = yaml_unsigned2str(val - MIXSRC_FIRST_HELI + 1); } + else if (val >= MIXSRC_FIRST_TRIM + && val <= MIXSRC_LAST_TRIM) { + if (!wf(opaque, "T", 1)) return false; + str = yaml_unsigned2str(val - MIXSRC_FIRST_TRIM + 1); + } else if (val >= MIXSRC_FIRST_SWITCH && val <= MIXSRC_LAST_SWITCH) { str = switchGetCanonicalName(val - MIXSRC_FIRST_SWITCH); diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index e252b9db3..fc448baa0 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -115,14 +115,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_NONE, "NONE" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, diff --git a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp index de04266d3..408b5db26 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp @@ -115,14 +115,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_NONE, "NONE" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, @@ -159,10 +151,6 @@ const struct YamlIdStr enum_SwashType[] = { }; const struct YamlIdStr enum_SwitchSources[] = { { SWSRC_NONE, "NONE" }, - { SWSRC_TrimT7Down, "TrimT7Down" }, - { SWSRC_TrimT7Up, "TrimT7Up" }, - { SWSRC_TrimT8Down, "TrimT8Down" }, - { SWSRC_TrimT8Up, "TrimT8Up" }, { SWSRC_ON, "ON" }, { SWSRC_ONE, "ONE" }, { SWSRC_TELEMETRY_STREAMING, "TELEMETRY_STREAMING" }, diff --git a/radio/src/storage/yaml/yaml_datastructs_t20.cpp b/radio/src/storage/yaml/yaml_datastructs_t20.cpp index cd545ab1d..60cb7f55b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t20.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t20.cpp @@ -106,14 +106,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_NONE, "NONE" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, @@ -150,10 +142,6 @@ const struct YamlIdStr enum_SwashType[] = { }; const struct YamlIdStr enum_SwitchSources[] = { { SWSRC_NONE, "NONE" }, - { SWSRC_TrimT7Down, "TrimT7Down" }, - { SWSRC_TrimT7Up, "TrimT7Up" }, - { SWSRC_TrimT8Down, "TrimT8Down" }, - { SWSRC_TrimT8Up, "TrimT8Up" }, { SWSRC_ON, "ON" }, { SWSRC_ONE, "ONE" }, { SWSRC_TELEMETRY_STREAMING, "TELEMETRY_STREAMING" }, @@ -353,6 +341,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), YAML_UNSIGNED( "backlightColor", 8 ), + YAML_STRING("bluetoothName", 10), YAML_STRING("ownerRegistrationID", 8), YAML_CUSTOM("rotEncDirection",r_rotEncDirection,nullptr), YAML_UNSIGNED( "rotEncMode", 3 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp index 66fa2d6b5..ea13a0783 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp @@ -106,14 +106,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_NONE, "NONE" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, @@ -349,6 +341,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), YAML_UNSIGNED( "backlightColor", 8 ), + YAML_STRING("bluetoothName", 10), YAML_STRING("ownerRegistrationID", 8), YAML_CUSTOM("rotEncDirection",r_rotEncDirection,nullptr), YAML_UNSIGNED( "rotEncMode", 3 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index 06aeb8fab..f2fdf8a1b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -116,14 +116,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_SPACEMOUSE_F, "SPACEMOUSE_F" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, diff --git a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp index 06aeb8fab..f2fdf8a1b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp @@ -116,14 +116,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_SPACEMOUSE_F, "SPACEMOUSE_F" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, diff --git a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp index ee8384d14..4da315f64 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp @@ -106,14 +106,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_NONE, "NONE" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, @@ -349,7 +341,6 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), YAML_UNSIGNED( "backlightColor", 8 ), - YAML_PADDING( 8 ), YAML_STRING("bluetoothName", 10), YAML_STRING("ownerRegistrationID", 8), YAML_PADDING( 3 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp index 74f3f5436..68faae82b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp @@ -106,14 +106,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_NONE, "NONE" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, @@ -349,7 +341,6 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), YAML_UNSIGNED( "backlightColor", 8 ), - YAML_PADDING( 8 ), YAML_STRING("bluetoothName", 10), YAML_STRING("ownerRegistrationID", 8), YAML_CUSTOM("rotEncDirection",r_rotEncDirection,nullptr), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp b/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp deleted file mode 100644 index 5b5be5a72..000000000 --- a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp +++ /dev/null @@ -1,876 +0,0 @@ -// generated by generate_yaml.py - -// -// Enums first -// - -const struct YamlIdStr enum_BacklightMode[] = { - { e_backlight_mode_off, "backlight_mode_off" }, - { e_backlight_mode_keys, "backlight_mode_keys" }, - { e_backlight_mode_sticks, "backlight_mode_sticks" }, - { e_backlight_mode_all, "backlight_mode_all" }, - { e_backlight_mode_on, "backlight_mode_on" }, - { 0, NULL } -}; -const struct YamlIdStr enum_AntennaModes[] = { - { ANTENNA_MODE_INTERNAL, "MODE_INTERNAL" }, - { ANTENNA_MODE_ASK, "MODE_ASK" }, - { ANTENNA_MODE_PER_MODEL, "MODE_PER_MODEL" }, - { ANTENNA_MODE_EXTERNAL, "MODE_EXTERNAL" }, - { 0, NULL } -}; -const struct YamlIdStr enum_ModuleType[] = { - { MODULE_TYPE_NONE, "TYPE_NONE" }, - { MODULE_TYPE_PPM, "TYPE_PPM" }, - { MODULE_TYPE_XJT_PXX1, "TYPE_XJT_PXX1" }, - { MODULE_TYPE_ISRM_PXX2, "TYPE_ISRM_PXX2" }, - { MODULE_TYPE_DSM2, "TYPE_DSM2" }, - { MODULE_TYPE_CROSSFIRE, "TYPE_CROSSFIRE" }, - { MODULE_TYPE_MULTIMODULE, "TYPE_MULTIMODULE" }, - { MODULE_TYPE_R9M_PXX1, "TYPE_R9M_PXX1" }, - { MODULE_TYPE_R9M_PXX2, "TYPE_R9M_PXX2" }, - { MODULE_TYPE_R9M_LITE_PXX1, "TYPE_R9M_LITE_PXX1" }, - { MODULE_TYPE_R9M_LITE_PXX2, "TYPE_R9M_LITE_PXX2" }, - { MODULE_TYPE_GHOST, "TYPE_GHOST" }, - { MODULE_TYPE_R9M_LITE_PRO_PXX2, "TYPE_R9M_LITE_PRO_PXX2" }, - { MODULE_TYPE_SBUS, "TYPE_SBUS" }, - { MODULE_TYPE_XJT_LITE_PXX2, "TYPE_XJT_LITE_PXX2" }, - { MODULE_TYPE_FLYSKY_AFHDS2A, "TYPE_FLYSKY_AFHDS2A" }, - { MODULE_TYPE_FLYSKY_AFHDS3, "TYPE_FLYSKY_AFHDS3" }, - { MODULE_TYPE_LEMON_DSMP, "TYPE_LEMON_DSMP" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TrainerMultiplex[] = { - { TRAINER_OFF, "OFF" }, - { TRAINER_ADD, "ADD" }, - { TRAINER_REPL, "REPL" }, - { 0, NULL } -}; -const struct YamlIdStr enum_BeeperMode[] = { - { e_mode_quiet, "mode_quiet" }, - { e_mode_alarms, "mode_alarms" }, - { e_mode_nokeys, "mode_nokeys" }, - { e_mode_all, "mode_all" }, - { 0, NULL } -}; -const struct YamlIdStr enum_BluetoothModes[] = { - { BLUETOOTH_OFF, "OFF" }, - { BLUETOOTH_TELEMETRY, "TELEMETRY" }, - { BLUETOOTH_TRAINER, "TRAINER" }, - { 0, NULL } -}; -const struct YamlIdStr enum_Functions[] = { - { FUNC_OVERRIDE_CHANNEL, "OVERRIDE_CHANNEL" }, - { FUNC_TRAINER, "TRAINER" }, - { FUNC_INSTANT_TRIM, "INSTANT_TRIM" }, - { FUNC_RESET, "RESET" }, - { FUNC_SET_TIMER, "SET_TIMER" }, - { FUNC_ADJUST_GVAR, "ADJUST_GVAR" }, - { FUNC_VOLUME, "VOLUME" }, - { FUNC_SET_FAILSAFE, "SET_FAILSAFE" }, - { FUNC_RANGECHECK, "RANGECHECK" }, - { FUNC_BIND, "BIND" }, - { FUNC_PLAY_SOUND, "PLAY_SOUND" }, - { FUNC_PLAY_TRACK, "PLAY_TRACK" }, - { FUNC_PLAY_VALUE, "PLAY_VALUE" }, - { FUNC_PLAY_SCRIPT, "PLAY_SCRIPT" }, - { FUNC_BACKGND_MUSIC, "BACKGND_MUSIC" }, - { FUNC_BACKGND_MUSIC_PAUSE, "BACKGND_MUSIC_PAUSE" }, - { FUNC_VARIO, "VARIO" }, - { FUNC_HAPTIC, "HAPTIC" }, - { FUNC_LOGS, "LOGS" }, - { FUNC_BACKLIGHT, "BACKLIGHT" }, - { FUNC_SCREENSHOT, "SCREENSHOT" }, - { FUNC_RACING_MODE, "RACING_MODE" }, - { FUNC_DISABLE_AUDIO_AMP, "DISABLE_AUDIO_AMP" }, - { FUNC_RGB_LED, "RGB_LED" }, - { FUNC_TEST, "TEST" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TimerModes[] = { - { TMRMODE_OFF, "OFF" }, - { TMRMODE_ON, "ON" }, - { TMRMODE_START, "START" }, - { TMRMODE_THR, "THR" }, - { TMRMODE_THR_REL, "THR_REL" }, - { TMRMODE_THR_START, "THR_START" }, - { 0, NULL } -}; -const struct YamlIdStr enum_MixerMultiplex[] = { - { MLTPX_ADD, "ADD" }, - { MLTPX_MUL, "MUL" }, - { MLTPX_REPL, "REPL" }, - { 0, NULL } -}; -const struct YamlIdStr enum_MixSources[] = { - { MIXSRC_NONE, "NONE" }, - { MIXSRC_MIN, "MIN" }, - { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, - { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, - { MIXSRC_TX_TIME, "TX_TIME" }, - { MIXSRC_TX_GPS, "TX_GPS" }, - { 0, NULL } -}; -const struct YamlIdStr enum_LogicalSwitchesFunctions[] = { - { LS_FUNC_NONE, "FUNC_NONE" }, - { LS_FUNC_VEQUAL, "FUNC_VEQUAL" }, - { LS_FUNC_VALMOSTEQUAL, "FUNC_VALMOSTEQUAL" }, - { LS_FUNC_VPOS, "FUNC_VPOS" }, - { LS_FUNC_VNEG, "FUNC_VNEG" }, - { LS_FUNC_APOS, "FUNC_APOS" }, - { LS_FUNC_ANEG, "FUNC_ANEG" }, - { LS_FUNC_AND, "FUNC_AND" }, - { LS_FUNC_OR, "FUNC_OR" }, - { LS_FUNC_XOR, "FUNC_XOR" }, - { LS_FUNC_EDGE, "FUNC_EDGE" }, - { LS_FUNC_EQUAL, "FUNC_EQUAL" }, - { LS_FUNC_GREATER, "FUNC_GREATER" }, - { LS_FUNC_LESS, "FUNC_LESS" }, - { LS_FUNC_DIFFEGREATER, "FUNC_DIFFEGREATER" }, - { LS_FUNC_ADIFFEGREATER, "FUNC_ADIFFEGREATER" }, - { LS_FUNC_TIMER, "FUNC_TIMER" }, - { LS_FUNC_STICKY, "FUNC_STICKY" }, - { 0, NULL } -}; -const struct YamlIdStr enum_SwashType[] = { - { SWASH_TYPE_NONE, "TYPE_NONE" }, - { SWASH_TYPE_120, "TYPE_120" }, - { SWASH_TYPE_120X, "TYPE_120X" }, - { SWASH_TYPE_140, "TYPE_140" }, - { SWASH_TYPE_90, "TYPE_90" }, - { 0, NULL } -}; -const struct YamlIdStr enum_SwitchSources[] = { - { SWSRC_NONE, "NONE" }, - { SWSRC_ON, "ON" }, - { SWSRC_ONE, "ONE" }, - { SWSRC_TELEMETRY_STREAMING, "TELEMETRY_STREAMING" }, - { SWSRC_RADIO_ACTIVITY, "RADIO_ACTIVITY" }, - { SWSRC_TRAINER_CONNECTED, "TRAINER_CONNECTED" }, - { SWSRC_OFF, "OFF" }, - { 0, NULL } -}; -const struct YamlIdStr enum_PotsWarnMode[] = { - { POTS_WARN_OFF, "WARN_OFF" }, - { POTS_WARN_MANUAL, "WARN_MANUAL" }, - { POTS_WARN_AUTO, "WARN_AUTO" }, - { 0, NULL } -}; -const struct YamlIdStr enum_ModelOverridableEnable[] = { - { OVERRIDE_GLOBAL, "GLOBAL" }, - { OVERRIDE_OFF, "OFF" }, - { OVERRIDE_ON, "ON" }, - { 0, NULL } -}; -const struct YamlIdStr enum_FailsafeModes[] = { - { FAILSAFE_NOT_SET, "NOT_SET" }, - { FAILSAFE_HOLD, "HOLD" }, - { FAILSAFE_CUSTOM, "CUSTOM" }, - { FAILSAFE_NOPULSES, "NOPULSES" }, - { FAILSAFE_RECEIVER, "RECEIVER" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TelemetrySensorFormula[] = { - { TELEM_FORMULA_ADD, "FORMULA_ADD" }, - { TELEM_FORMULA_AVERAGE, "FORMULA_AVERAGE" }, - { TELEM_FORMULA_MIN, "FORMULA_MIN" }, - { TELEM_FORMULA_MAX, "FORMULA_MAX" }, - { TELEM_FORMULA_MULTIPLY, "FORMULA_MULTIPLY" }, - { TELEM_FORMULA_TOTALIZE, "FORMULA_TOTALIZE" }, - { TELEM_FORMULA_CELL, "FORMULA_CELL" }, - { TELEM_FORMULA_CONSUMPTION, "FORMULA_CONSUMPTION" }, - { TELEM_FORMULA_DIST, "FORMULA_DIST" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TelemetrySensorType[] = { - { TELEM_TYPE_CUSTOM, "TYPE_CUSTOM" }, - { TELEM_TYPE_CALCULATED, "TYPE_CALCULATED" }, - { 0, NULL } -}; -const struct YamlIdStr enum_USBJoystickIfMode[] = { - { USBJOYS_JOYSTICK, "JOYSTICK" }, - { USBJOYS_GAMEPAD, "GAMEPAD" }, - { USBJOYS_MULTIAXIS, "MULTIAXIS" }, - { 0, NULL } -}; -const struct YamlIdStr enum_USBJoystickCh[] = { - { USBJOYS_CH_NONE, "CH_NONE" }, - { USBJOYS_CH_BUTTON, "CH_BUTTON" }, - { USBJOYS_CH_AXIS, "CH_AXIS" }, - { USBJOYS_CH_SIM, "CH_SIM" }, - { 0, NULL } -}; - -// -// Structs last -// - -static const struct YamlNode struct_CalibData[] = { - YAML_IDX_CUST("calib",r_calib,w_calib), - YAML_SIGNED( "mid", 16 ), - YAML_SIGNED( "spanNeg", 16 ), - YAML_SIGNED( "spanPos", 16 ), - YAML_END -}; -static const struct YamlNode struct_signed_16[] = { - YAML_IDX, - YAML_SIGNED( "val", 16 ), - YAML_END -}; -static const struct YamlNode struct_TrainerMix[] = { - YAML_IDX, - YAML_UNSIGNED( "srcChn", 6 ), - YAML_ENUM("mode", 2, enum_TrainerMultiplex), - YAML_SIGNED( "studWeight", 8 ), - YAML_END -}; -static const struct YamlNode struct_TrainerData[] = { - YAML_ARRAY("calib", 16, 4, struct_signed_16, NULL), - YAML_ARRAY("mix", 16, 4, struct_TrainerMix, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_1[] = { - YAML_STRING("name", 6), - YAML_END -}; -static const struct YamlNode struct_anonymous_2[] = { - YAML_SIGNED( "val", 16 ), - YAML_UNSIGNED( "mode", 8 ), - YAML_UNSIGNED( "param", 8 ), - YAML_SIGNED( "spare", 32 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_3[] = { - YAML_SIGNED( "val1", 32 ), - YAML_SIGNED( "val2", 32 ), - YAML_END -}; -static const struct YamlNode union_anonymous_0_elmts[] = { - YAML_STRUCT("play", 48, struct_anonymous_1, NULL), - YAML_STRUCT("all", 64, struct_anonymous_2, NULL), - YAML_STRUCT("clear", 64, struct_anonymous_3, NULL), - YAML_END -}; -static const struct YamlNode struct_CustomFunctionData[] = { - YAML_IDX, - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_ENUM("func", 6, enum_Functions), - YAML_CUSTOM("def",r_customFn,w_customFn), - YAML_PADDING( 64 ), - YAML_PADDING( 1 ), - YAML_PADDING( 7 ), - YAML_END -}; -static const struct YamlNode struct_RadioData[] = { - YAML_UNSIGNED( "manuallyEdited", 1 ), - YAML_SIGNED( "timezoneMinutes", 3 ), - YAML_UNSIGNED( "ppmunit", 2 ), - YAML_PADDING( 2 ), - YAML_CUSTOM("semver",nullptr,w_semver), - YAML_CUSTOM("board",nullptr,w_board), - YAML_ARRAY("calib", 48, 12, struct_CalibData, NULL), - YAML_PADDING( 16 ), - YAML_SIGNED( "currModel", 8 ), - YAML_UNSIGNED( "contrast", 8 ), - YAML_UNSIGNED( "vBatWarn", 8 ), - YAML_SIGNED( "txVoltageCalibration", 8 ), - YAML_ENUM("backlightMode", 3, enum_BacklightMode), - YAML_ENUM("antennaMode", 2, enum_AntennaModes), - YAML_UNSIGNED( "disableRtcWarning", 1 ), - YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_UNSIGNED( "dontPlayHello", 1 ), - YAML_ENUM("internalModule", 8, enum_ModuleType), - YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), - YAML_UNSIGNED( "view", 8 ), - YAML_PADDING( 2 ), - YAML_UNSIGNED( "fai", 1 ), - YAML_SIGNED_CUST( "beepMode", 2, r_beeperMode, w_beeperMode ), - YAML_UNSIGNED( "alarmsFlash", 1 ), - YAML_UNSIGNED( "disableMemoryWarning", 1 ), - YAML_UNSIGNED( "disableAlarmWarning", 1 ), - YAML_UNSIGNED( "stickMode", 2 ), - YAML_SIGNED( "timezone", 5 ), - YAML_UNSIGNED( "adjustRTC", 1 ), - YAML_UNSIGNED( "inactivityTimer", 8 ), - YAML_CUSTOM("telemetryBaudrate",r_telemetryBaudrate,nullptr), - YAML_UNSIGNED( "internalModuleBaudrate", 3 ), - YAML_SIGNED( "splashMode", 3 ), - YAML_SIGNED_CUST( "hapticMode", 2, r_beeperMode, w_beeperMode ), - YAML_SIGNED( "switchesDelay", 8 ), - YAML_UNSIGNED( "lightAutoOff", 8 ), - YAML_UNSIGNED( "templateSetup", 8 ), - YAML_SIGNED( "PPM_Multiplier", 8 ), - YAML_SIGNED_CUST( "hapticLength", 8, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "beepLength", 3, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "hapticStrength", 3, r_5pos, w_5pos ), - YAML_UNSIGNED( "gpsFormat", 1 ), - YAML_UNSIGNED( "audioMuteEnable", 1 ), - YAML_UNSIGNED_CUST( "speakerPitch", 8, r_spPitch, w_spPitch ), - YAML_SIGNED_CUST( "speakerVolume", 8, r_vol, w_vol ), - YAML_SIGNED_CUST( "vBatMin", 8, r_vbat_min, w_vbat_min ), - YAML_SIGNED_CUST( "vBatMax", 8, r_vbat_max, w_vbat_max ), - YAML_UNSIGNED( "backlightBright", 8 ), - YAML_UNSIGNED( "globalTimer", 32 ), - YAML_UNSIGNED( "bluetoothBaudrate", 4 ), - YAML_ENUM("bluetoothMode", 4, enum_BluetoothModes), - YAML_UNSIGNED( "countryCode", 2 ), - YAML_SIGNED( "pwrOnSpeed", 3 ), - YAML_SIGNED( "pwrOffSpeed", 3 ), - YAML_CUSTOM("jitterFilter",r_jitterFilter,nullptr), - YAML_UNSIGNED( "noJitterFilter", 1 ), - YAML_UNSIGNED( "imperial", 1 ), - YAML_UNSIGNED( "disableRssiPoweroffAlarm", 1 ), - YAML_UNSIGNED( "USBMode", 2 ), - YAML_UNSIGNED( "jackMode", 2 ), - YAML_PADDING( 1 ), - YAML_STRING("ttsLanguage", 2), - YAML_SIGNED_CUST( "beepVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "wavVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "varioVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "backgroundVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "varioPitch", 8, r_vPitch, w_vPitch ), - YAML_SIGNED_CUST( "varioRange", 8, r_vPitch, w_vPitch ), - YAML_SIGNED( "varioRepeat", 8 ), - YAML_ARRAY("customFn", 88, 64, struct_CustomFunctionData, cfn_is_active), - YAML_CUSTOM("auxSerialMode",r_serialMode,nullptr), - YAML_CUSTOM("aux2SerialMode",r_serialMode,nullptr), - YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), - YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), - YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), - YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), - YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), - YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), - YAML_UNSIGNED( "backlightColor", 8 ), - YAML_STRING("ownerRegistrationID", 8), - YAML_CUSTOM("rotEncDirection",r_rotEncDirection,nullptr), - YAML_UNSIGNED( "rotEncMode", 3 ), - YAML_SIGNED( "uartSampleMode", 2 ), - YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_END -}; -static const struct YamlNode struct_unsigned_8[] = { - YAML_IDX, - YAML_UNSIGNED( "val", 8 ), - YAML_END -}; -static const struct YamlNode struct_ModelHeader[] = { - YAML_STRING("name", 10), - YAML_ARRAY("modelId", 8, 2, struct_unsigned_8, NULL), - YAML_END -}; -static const struct YamlNode struct_TimerData[] = { - YAML_IDX, - YAML_UNSIGNED( "start", 22 ), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_SIGNED( "value", 22 ), - YAML_ENUM("mode", 3, enum_TimerModes), - YAML_UNSIGNED( "countdownBeep", 2 ), - YAML_UNSIGNED( "minuteBeep", 1 ), - YAML_UNSIGNED( "persistent", 2 ), - YAML_SIGNED( "countdownStart", 2 ), - YAML_UNSIGNED( "showElapsed", 1 ), - YAML_UNSIGNED( "extraHaptic", 1 ), - YAML_PADDING( 6 ), - YAML_STRING("name", 3), - YAML_END -}; -static const struct YamlNode struct_CurveRef[] = { - YAML_UNSIGNED( "type", 8 ), - YAML_SIGNED_CUST( "value", 8, in_read_weight, in_write_weight ), - YAML_END -}; -static const struct YamlNode struct_MixData[] = { - YAML_SIGNED_CUST( "weight", 11, in_read_weight, in_write_weight ), - YAML_UNSIGNED( "destCh", 5 ), - YAML_UNSIGNED_CUST( "srcRaw", 10, r_mixSrcRaw, w_mixSrcRaw ), - YAML_UNSIGNED( "carryTrim", 1 ), - YAML_UNSIGNED( "mixWarn", 2 ), - YAML_ENUM("mltpx", 2, enum_MixerMultiplex), - YAML_PADDING( 1 ), - YAML_SIGNED_CUST( "offset", 13, in_read_weight, in_write_weight ), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ), - YAML_STRUCT("curve", 16, struct_CurveRef, NULL), - YAML_UNSIGNED( "delayUp", 8 ), - YAML_UNSIGNED( "delayDown", 8 ), - YAML_UNSIGNED( "speedUp", 8 ), - YAML_UNSIGNED( "speedDown", 8 ), - YAML_STRING("name", 6), - YAML_END -}; -static const struct YamlNode struct_LimitData[] = { - YAML_IDX, - YAML_SIGNED_CUST( "min", 11, in_read_weight, in_write_weight ), - YAML_SIGNED_CUST( "max", 11, in_read_weight, in_write_weight ), - YAML_SIGNED( "ppmCenter", 10 ), - YAML_SIGNED_CUST( "offset", 11, in_read_weight, in_write_weight ), - YAML_UNSIGNED( "symetrical", 1 ), - YAML_UNSIGNED( "revert", 1 ), - YAML_PADDING( 3 ), - YAML_SIGNED( "curve", 8 ), - YAML_STRING("name", 4), - YAML_END -}; -static const struct YamlNode struct_ExpoData[] = { - YAML_UNSIGNED( "mode", 2 ), - YAML_UNSIGNED( "scale", 14 ), - YAML_CUSTOM("carryTrim",r_carryTrim,nullptr), - YAML_SIGNED( "trimSource", 6 ), - YAML_UNSIGNED_CUST( "srcRaw", 10, r_mixSrcRaw, w_mixSrcRaw ), - YAML_UNSIGNED( "chn", 5 ), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ), - YAML_SIGNED_CUST( "weight", 8, in_read_weight, in_write_weight ), - YAML_STRING("name", 6), - YAML_SIGNED_CUST( "offset", 8, in_read_weight, in_write_weight ), - YAML_STRUCT("curve", 16, struct_CurveRef, NULL), - YAML_END -}; -static const struct YamlNode struct_CurveHeader[] = { - YAML_IDX, - YAML_UNSIGNED( "type", 1 ), - YAML_UNSIGNED( "smooth", 1 ), - YAML_SIGNED( "points", 6 ), - YAML_STRING("name", 3), - YAML_END -}; -static const struct YamlNode struct_signed_8[] = { - YAML_IDX, - YAML_SIGNED( "val", 8 ), - YAML_END -}; -static const struct YamlNode struct_LogicalSwitchData[] = { - YAML_IDX, - YAML_ENUM("func", 8, enum_LogicalSwitchesFunctions), - YAML_CUSTOM("def",r_logicSw,w_logicSw), - YAML_PADDING( 10 ), - YAML_PADDING( 10 ), - YAML_SIGNED_CUST( "andsw", 10, r_swtchSrc, w_swtchSrc ), - YAML_PADDING( 1 ), - YAML_PADDING( 1 ), - YAML_PADDING( 16 ), - YAML_UNSIGNED( "delay", 8 ), - YAML_UNSIGNED( "duration", 8 ), - YAML_END -}; -static const struct YamlNode struct_SwashRingData[] = { - YAML_ENUM("type", 8, enum_SwashType), - YAML_UNSIGNED( "value", 8 ), - YAML_UNSIGNED_CUST( "collectiveSource", 8, r_mixSrcRaw, w_mixSrcRaw ), - YAML_UNSIGNED_CUST( "aileronSource", 8, r_mixSrcRaw, w_mixSrcRaw ), - YAML_UNSIGNED_CUST( "elevatorSource", 8, r_mixSrcRaw, w_mixSrcRaw ), - YAML_SIGNED( "collectiveWeight", 8 ), - YAML_SIGNED( "aileronWeight", 8 ), - YAML_SIGNED( "elevatorWeight", 8 ), - YAML_END -}; -static const struct YamlNode struct_trim_t[] = { - YAML_IDX, - YAML_SIGNED( "value", 11 ), - YAML_UNSIGNED( "mode", 5 ), - YAML_END -}; -static const struct YamlNode struct_FlightModeData[] = { - YAML_IDX, - YAML_ARRAY("trim", 16, 6, struct_trim_t, NULL), - YAML_STRING("name", 6), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_PADDING( 6 ), - YAML_UNSIGNED( "fadeIn", 8 ), - YAML_UNSIGNED( "fadeOut", 8 ), - YAML_ARRAY("gvars", 16, 9, struct_signed_16, gvar_is_active), - YAML_END -}; -static const struct YamlNode struct_GVarData[] = { - YAML_IDX, - YAML_STRING("name", 3), - YAML_UNSIGNED( "min", 12 ), - YAML_UNSIGNED( "max", 12 ), - YAML_UNSIGNED( "popup", 1 ), - YAML_UNSIGNED( "prec", 1 ), - YAML_UNSIGNED( "unit", 2 ), - YAML_PADDING( 4 ), - YAML_END -}; -static const struct YamlNode struct_VarioData[] = { - YAML_UNSIGNED_CUST( "source", 7, r_tele_sensor, w_tele_sensor ), - YAML_UNSIGNED( "centerSilent", 1 ), - YAML_SIGNED( "centerMax", 8 ), - YAML_SIGNED( "centerMin", 8 ), - YAML_SIGNED( "min", 8 ), - YAML_SIGNED( "max", 8 ), - YAML_END -}; -static const struct YamlNode struct_RssiAlarmData[] = { - YAML_CUSTOM("disabled",r_rssiDisabled,nullptr), - YAML_CUSTOM("warning",r_rssiWarning,nullptr), - YAML_CUSTOM("critical",r_rssiCritical,nullptr), - YAML_END -}; -static const struct YamlNode struct_RFAlarmData[] = { - YAML_SIGNED( "warning", 8 ), - YAML_SIGNED( "critical", 8 ), - YAML_END -}; -static const struct YamlNode struct_PpmModule[] = { - YAML_SIGNED( "delay", 6 ), - YAML_UNSIGNED( "pulsePol", 1 ), - YAML_UNSIGNED( "outputType", 1 ), - YAML_SIGNED( "frameLength", 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_5[] = { - YAML_PADDING( 8 ), - YAML_UNSIGNED( "disableTelemetry", 1 ), - YAML_UNSIGNED( "disableMapping", 1 ), - YAML_UNSIGNED( "autoBindMode", 1 ), - YAML_UNSIGNED( "lowPowerMode", 1 ), - YAML_UNSIGNED( "receiverTelemetryOff", 1 ), - YAML_UNSIGNED( "receiverHigherChannels", 1 ), - YAML_PADDING( 2 ), - YAML_SIGNED( "optionValue", 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_6[] = { - YAML_UNSIGNED( "power", 2 ), - YAML_PADDING( 2 ), - YAML_UNSIGNED( "receiverTelemetryOff", 1 ), - YAML_UNSIGNED( "receiverHigherChannels", 1 ), - YAML_SIGNED( "antennaMode", 2 ), - YAML_PADDING( 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_7[] = { - YAML_PADDING( 6 ), - YAML_UNSIGNED( "noninverted", 1 ), - YAML_PADDING( 1 ), - YAML_SIGNED( "refreshRate", 8 ), - YAML_END -}; -static const struct YamlNode struct_string_64[] = { - YAML_IDX, - YAML_STRING("val", 8), - YAML_END -}; -static const struct YamlNode struct_anonymous_8[] = { - YAML_UNSIGNED( "receivers", 7 ), - YAML_UNSIGNED( "racingMode", 1 ), - YAML_ARRAY("receiverName", 64, 3, struct_string_64, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_9[] = { - YAML_ARRAY("rx_id", 8, 4, struct_unsigned_8, NULL), - YAML_UNSIGNED( "mode", 3 ), - YAML_UNSIGNED( "rfPower", 1 ), - YAML_UNSIGNED( "reserved", 4 ), - YAML_ARRAY("rx_freq", 8, 2, struct_unsigned_8, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_10[] = { - YAML_UNSIGNED( "emi", 2 ), - YAML_UNSIGNED( "telemetry", 1 ), - YAML_UNSIGNED( "phyMode", 3 ), - YAML_UNSIGNED( "reserved", 2 ), - YAML_UNSIGNED( "rfPower", 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_11[] = { - YAML_UNSIGNED( "raw12bits", 1 ), - YAML_UNSIGNED( "telemetryBaudrate", 3 ), - YAML_PADDING( 4 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_12[] = { - YAML_UNSIGNED( "telemetryBaudrate", 3 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_13[] = { - YAML_UNSIGNED( "flags", 8 ), - YAML_END -}; -static const struct YamlNode union_anonymous_4_elmts[] = { - YAML_ARRAY("raw", 8, 25, struct_unsigned_8, NULL), - YAML_STRUCT("ppm", 16, struct_PpmModule, NULL), - YAML_STRUCT("multi", 24, struct_anonymous_5, NULL), - YAML_STRUCT("pxx", 16, struct_anonymous_6, NULL), - YAML_STRUCT("sbus", 16, struct_anonymous_7, NULL), - YAML_STRUCT("pxx2", 200, struct_anonymous_8, NULL), - YAML_STRUCT("flysky", 56, struct_anonymous_9, NULL), - YAML_STRUCT("afhds3", 16, struct_anonymous_10, NULL), - YAML_STRUCT("ghost", 8, struct_anonymous_11, NULL), - YAML_STRUCT("crsf", 8, struct_anonymous_12, NULL), - YAML_STRUCT("dsmp", 8, struct_anonymous_13, NULL), - YAML_END -}; -static const struct YamlNode struct_ModuleData[] = { - YAML_IDX, - YAML_UNSIGNED_CUST( "type", 8, r_moduleType, w_moduleType ), - YAML_CUSTOM("subType",r_modSubtype,w_modSubtype), - YAML_UNSIGNED( "channelsStart", 8 ), - YAML_SIGNED_CUST( "channelsCount", 8, r_channelsCount, w_channelsCount ), - YAML_ENUM("failsafeMode", 4, enum_FailsafeModes), - YAML_PADDING( 4 ), - YAML_UNION("mod", 200, union_anonymous_4_elmts, select_mod_type), - YAML_END -}; -static const struct YamlNode struct_TrainerModuleData[] = { - YAML_UNSIGNED_CUST( "mode", 8, r_trainerMode, w_trainerMode ), - YAML_UNSIGNED( "channelsStart", 8 ), - YAML_SIGNED( "channelsCount", 8 ), - YAML_SIGNED( "frameLength", 8 ), - YAML_SIGNED( "delay", 6 ), - YAML_UNSIGNED( "pulsePol", 1 ), - YAML_PADDING( 1 ), - YAML_END -}; -static const struct YamlNode union_ScriptDataInput_elmts[] = { - YAML_SIGNED( "value", 16 ), - YAML_UNSIGNED_CUST( "source", 16, r_mixSrcRaw, w_mixSrcRaw ), - YAML_END -}; -static const struct YamlNode union_ScriptDataInput[] = { - YAML_IDX, - YAML_UNION("u", 16, union_ScriptDataInput_elmts, select_script_input), - YAML_END -}; -static const struct YamlNode struct_ScriptData[] = { - YAML_IDX, - YAML_STRING("file", 6), - YAML_STRING("name", 6), - YAML_ARRAY("inputs", 16, 6, union_ScriptDataInput, NULL), - YAML_END -}; -static const struct YamlNode struct_string_24[] = { - YAML_IDX, - YAML_STRING("val", 3), - YAML_END -}; -static const struct YamlNode union_anonymous_14_elmts[] = { - YAML_UNSIGNED( "id", 16 ), - YAML_UNSIGNED( "persistentValue", 16 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_16[] = { - YAML_UNSIGNED( "physID", 5 ), - YAML_UNSIGNED( "rxIndex", 3 ), - YAML_END -}; -static const struct YamlNode union_anonymous_15_elmts[] = { - YAML_STRUCT("frskyInstance", 8, struct_anonymous_16, NULL), - YAML_UNSIGNED( "instance", 8 ), - YAML_ENUM("formula", 8, enum_TelemetrySensorFormula), - YAML_END -}; -static const struct YamlNode struct_anonymous_18[] = { - YAML_UNSIGNED( "ratio", 16 ), - YAML_SIGNED( "offset", 16 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_19[] = { - YAML_UNSIGNED( "source", 8 ), - YAML_UNSIGNED( "index", 8 ), - YAML_PADDING( 16 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_20[] = { - YAML_ARRAY("sources", 8, 4, struct_signed_8, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_21[] = { - YAML_UNSIGNED( "source", 8 ), - YAML_PADDING( 24 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_22[] = { - YAML_UNSIGNED( "gps", 8 ), - YAML_UNSIGNED( "alt", 8 ), - YAML_PADDING( 16 ), - YAML_END -}; -static const struct YamlNode union_anonymous_17_elmts[] = { - YAML_STRUCT("custom", 32, struct_anonymous_18, NULL), - YAML_STRUCT("cell", 32, struct_anonymous_19, NULL), - YAML_STRUCT("calc", 32, struct_anonymous_20, NULL), - YAML_STRUCT("consumption", 32, struct_anonymous_21, NULL), - YAML_STRUCT("dist", 32, struct_anonymous_22, NULL), - YAML_UNSIGNED( "param", 32 ), - YAML_END -}; -static const struct YamlNode struct_TelemetrySensor[] = { - YAML_IDX, - YAML_UNION("id1", 16, union_anonymous_14_elmts, select_id1), - YAML_UNION("id2", 8, union_anonymous_15_elmts, select_id2), - YAML_STRING("label", 4), - YAML_UNSIGNED( "subId", 8 ), - YAML_ENUM("type", 1, enum_TelemetrySensorType), - YAML_PADDING( 1 ), - YAML_UNSIGNED( "unit", 6 ), - YAML_UNSIGNED( "prec", 2 ), - YAML_UNSIGNED( "autoOffset", 1 ), - YAML_UNSIGNED( "filter", 1 ), - YAML_UNSIGNED( "logs", 1 ), - YAML_UNSIGNED( "persistent", 1 ), - YAML_UNSIGNED( "onlyPositive", 1 ), - YAML_PADDING( 1 ), - YAML_UNION("cfg", 32, union_anonymous_17_elmts, select_sensor_cfg), - YAML_END -}; -static const struct YamlNode struct_FrSkyBarData[] = { - YAML_IDX, - YAML_UNSIGNED_CUST( "source", 16, r_mixSrcRaw, w_mixSrcRaw ), - YAML_SIGNED( "barMin", 16 ), - YAML_SIGNED( "barMax", 16 ), - YAML_END -}; -static const struct YamlNode struct_LineDataSource[] = { - YAML_IDX, - YAML_UNSIGNED_CUST( "val", 16, r_mixSrcRaw, w_mixSrcRaw ), - YAML_END -}; -static const struct YamlNode struct_FrSkyLineData[] = { - YAML_IDX, - YAML_ARRAY("sources", 16, 2, struct_LineDataSource, NULL), - YAML_END -}; -static const struct YamlNode struct_TelemetryScriptData[] = { - YAML_STRING("file", 6), - YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), - YAML_END -}; -static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { - YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), - YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), - YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), - YAML_END -}; -static const struct YamlNode struct_TelemetryScreenData[] = { - YAML_IDX, - YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), - YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), - YAML_END -}; -static const struct YamlNode struct_USBJoystickChData[] = { - YAML_IDX, - YAML_ENUM("mode", 3, enum_USBJoystickCh), - YAML_UNSIGNED( "inversion", 1 ), - YAML_UNSIGNED( "param", 4 ), - YAML_UNSIGNED( "btn_num", 5 ), - YAML_UNSIGNED( "switch_npos", 3 ), - YAML_END -}; -static const struct YamlNode struct_ModelData[] = { - YAML_CUSTOM("semver",nullptr,w_semver), - YAML_STRUCT("header", 96, struct_ModelHeader, NULL), - YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL), - YAML_UNSIGNED( "telemetryProtocol", 3 ), - YAML_UNSIGNED( "thrTrim", 1 ), - YAML_UNSIGNED( "noGlobalFunctions", 1 ), - YAML_UNSIGNED( "displayTrims", 2 ), - YAML_UNSIGNED( "ignoreSensorIds", 1 ), - YAML_SIGNED( "trimInc", 3 ), - YAML_UNSIGNED( "disableThrottleWarning", 1 ), - YAML_UNSIGNED( "displayChecklist", 1 ), - YAML_UNSIGNED( "extendedLimits", 1 ), - YAML_UNSIGNED( "extendedTrims", 1 ), - YAML_UNSIGNED( "throttleReversed", 1 ), - YAML_UNSIGNED( "enableCustomThrottleWarning", 1 ), - YAML_UNSIGNED( "disableTelemetryWarning", 1 ), - YAML_UNSIGNED( "showInstanceIds", 1 ), - YAML_UNSIGNED( "checklistInteractive", 1 ), - YAML_PADDING( 4 ), - YAML_SIGNED( "customThrottleWarningPosition", 8 ), - YAML_UNSIGNED( "beepANACenter", 16 ), - YAML_ARRAY("mixData", 160, 64, struct_MixData, NULL), - YAML_ARRAY("limitData", 88, 32, struct_LimitData, NULL), - YAML_ARRAY("expoData", 136, 64, struct_ExpoData, NULL), - YAML_ARRAY("curves", 32, 32, struct_CurveHeader, NULL), - YAML_ARRAY("points", 8, 512, struct_signed_8, NULL), - YAML_ARRAY("logicalSw", 72, 64, struct_LogicalSwitchData, NULL), - YAML_ARRAY("customFn", 88, 64, struct_CustomFunctionData, cfn_is_active), - YAML_STRUCT("swashR", 64, struct_SwashRingData, swash_is_active), - YAML_ARRAY("flightModeData", 320, 9, struct_FlightModeData, fmd_is_active), - YAML_UNSIGNED_CUST( "thrTraceSrc", 8, r_thrSrc, w_thrSrc ), - YAML_CUSTOM("switchWarningState",r_swtchWarn,w_swtchWarn), - YAML_PADDING( 64 ), - YAML_ARRAY("gvars", 56, 9, struct_GVarData, NULL), - YAML_STRUCT("varioData", 40, struct_VarioData, NULL), - YAML_UNSIGNED_CUST( "rssiSource", 8, r_tele_sensor, w_tele_sensor ), - YAML_STRUCT("rssiAlarms", 0, struct_RssiAlarmData, NULL), - YAML_STRUCT("rfAlarms", 16, struct_RFAlarmData, NULL), - YAML_UNSIGNED( "thrTrimSw", 3 ), - YAML_ENUM("potsWarnMode", 2, enum_PotsWarnMode), - YAML_ENUM("jitterFilter", 2, enum_ModelOverridableEnable), - YAML_PADDING( 1 ), - YAML_ARRAY("moduleData", 232, 2, struct_ModuleData, NULL), - YAML_ARRAY("failsafeChannels", 16, 32, struct_signed_16, NULL), - YAML_STRUCT("trainerData", 40, struct_TrainerModuleData, NULL), - YAML_ARRAY("scriptsData", 192, 7, struct_ScriptData, NULL), - YAML_ARRAY("inputNames", 24, 32, struct_string_24, NULL), - YAML_UNSIGNED( "potsWarnEnabled", 8 ), - YAML_ARRAY("potsWarnPosition", 8, 8, struct_signed_8, NULL), - YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_PADDING( 8 ), - YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), - YAML_UNSIGNED( "view", 8 ), - YAML_STRING("modelRegistrationID", 8), - YAML_UNSIGNED( "usbJoystickExtMode", 1 ), - YAML_ENUM("usbJoystickIfMode", 3, enum_USBJoystickIfMode), - YAML_UNSIGNED( "usbJoystickCircularCut", 4 ), - YAML_ARRAY("usbJoystickCh", 16, 26, struct_USBJoystickChData, NULL), - YAML_ENUM("radioGFDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("radioTrainerDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelHeliDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelFMDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelCurvesDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelGVDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelLSDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelSFDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelCustomScriptsDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelTelemetryDisabled", 2, enum_ModelOverridableEnable), - YAML_END -}; -static const struct YamlNode struct_PartialModel[] = { - YAML_STRUCT("header", 96, struct_ModelHeader, NULL), - YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL), - YAML_END -}; - -#define MAX_RADIODATA_MODELDATA_PARTIALMODEL_STR_LEN 29 - -static const struct YamlNode __RadioData_root_node = YAML_ROOT( struct_RadioData ); - -const YamlNode* get_radiodata_nodes() -{ - return &__RadioData_root_node; -} -static const struct YamlNode __ModelData_root_node = YAML_ROOT( struct_ModelData ); - -const YamlNode* get_modeldata_nodes() -{ - return &__ModelData_root_node; -} -static const struct YamlNode __PartialModel_root_node = YAML_ROOT( struct_PartialModel ); - -const YamlNode* get_partialmodel_nodes() -{ - return &__PartialModel_root_node; -} - diff --git a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp index 456d76f06..2cc9542de 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp @@ -108,14 +108,6 @@ const struct YamlIdStr enum_MixSources[] = { { MIXSRC_TILT_Y, "TILT_Y" }, { MIXSRC_MIN, "MIN" }, { MIXSRC_MAX, "MAX" }, - { MIXSRC_TrimRud, "TrimRud" }, - { MIXSRC_TrimEle, "TrimEle" }, - { MIXSRC_TrimThr, "TrimThr" }, - { MIXSRC_TrimAil, "TrimAil" }, - { MIXSRC_TrimT5, "TrimT5" }, - { MIXSRC_TrimT6, "TrimT6" }, - { MIXSRC_TrimT7, "TrimT7" }, - { MIXSRC_TrimT8, "TrimT8" }, { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, { MIXSRC_TX_TIME, "TX_TIME" }, { MIXSRC_TX_GPS, "TX_GPS" }, @@ -351,7 +343,6 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), YAML_UNSIGNED( "backlightColor", 8 ), - YAML_PADDING( 8 ), YAML_STRING("bluetoothName", 10), YAML_STRING("ownerRegistrationID", 8), YAML_PADDING( 3 ), diff --git a/radio/src/tests/lua.cpp b/radio/src/tests/lua.cpp index 823c32ca9..3cf9258c5 100644 --- a/radio/src/tests/lua.cpp +++ b/radio/src/tests/lua.cpp @@ -27,6 +27,8 @@ #define SWAP_DEFINED #include "opentx.h" +#define MIXSRC_THR (MIXSRC_FIRST_STICK + inputMappingGetThrottle()) +#define MIXSRC_TRIMTHR (MIXSRC_FIRST_TRIM + inputMappingGetThrottle()) ::testing::AssertionResult __luaExecStr(const char * str) { @@ -111,16 +113,24 @@ TEST(Lua, testModelInputs) luaExecStr("if noInputs > 0 then error('getInputsCount()') end"); // add one line on Input4 +#if defined(SURFACE_RADIO) + luaExecStr("model.insertInput(3, 0, {name='test1', source=MIXSRC_TH, weight=56, offset=3, switch=2})"); +#else luaExecStr("model.insertInput(3, 0, {name='test1', source=MIXSRC_Thr, weight=56, offset=3, switch=2})"); +#endif EXPECT_EQ(3, (int)g_model.expoData[0].chn); EXPECT_STRNEQ("test1", g_model.expoData[0].name); - EXPECT_EQ(MIXSRC_Thr, g_model.expoData[0].srcRaw); + EXPECT_EQ(MIXSRC_THR, g_model.expoData[0].srcRaw); EXPECT_EQ(56, g_model.expoData[0].weight); EXPECT_EQ(3, g_model.expoData[0].offset); EXPECT_EQ(2, g_model.expoData[0].swtch); // add another one before existing line on Input4 +#if defined(SURFACE_RADIO) + luaExecStr("model.insertInput(3, 0, {name='test2', source=MIXSRC_ST, weight=-56})"); +#else luaExecStr("model.insertInput(3, 0, {name='test2', source=MIXSRC_Rud, weight=-56})"); +#endif EXPECT_EQ(3, (int)g_model.expoData[0].chn); EXPECT_STRNEQ("test2", g_model.expoData[0].name); EXPECT_EQ(MIXSRC_FIRST_STICK, g_model.expoData[0].srcRaw); @@ -130,13 +140,18 @@ TEST(Lua, testModelInputs) EXPECT_EQ(3, (int)g_model.expoData[1].chn); EXPECT_STRNEQ("test1", g_model.expoData[1].name); - EXPECT_EQ(MIXSRC_Thr, g_model.expoData[1].srcRaw); + EXPECT_EQ(MIXSRC_THR, g_model.expoData[1].srcRaw); EXPECT_EQ(56, g_model.expoData[1].weight); EXPECT_EQ(3, g_model.expoData[1].offset); EXPECT_EQ(2, g_model.expoData[1].swtch); + // add another line after existing lines on Input4 +#if defined(SURFACE_RADIO) + luaExecStr("model.insertInput(3, model.getInputsCount(3), {name='test3', source=MIXSRC_TH, weight=100})"); +#else luaExecStr("model.insertInput(3, model.getInputsCount(3), {name='test3', source=MIXSRC_Ail, weight=100})"); +#endif EXPECT_EQ(3, (int)g_model.expoData[0].chn); EXPECT_STRNEQ("test2", g_model.expoData[0].name); EXPECT_EQ(MIXSRC_FIRST_STICK, g_model.expoData[0].srcRaw); @@ -146,14 +161,18 @@ TEST(Lua, testModelInputs) EXPECT_EQ(3, (int)g_model.expoData[1].chn); EXPECT_STRNEQ("test1", g_model.expoData[1].name); - EXPECT_EQ(MIXSRC_Thr, g_model.expoData[1].srcRaw); + EXPECT_EQ(MIXSRC_THR, g_model.expoData[1].srcRaw); EXPECT_EQ(56, g_model.expoData[1].weight); EXPECT_EQ(3, g_model.expoData[1].offset); EXPECT_EQ(2, g_model.expoData[1].swtch); EXPECT_EQ(3, (int)g_model.expoData[2].chn); EXPECT_STRNEQ("test3", g_model.expoData[2].name); +#if defined(SURFACE_RADIO) + EXPECT_EQ(MIXSRC_THR, g_model.expoData[2].srcRaw); +#else EXPECT_EQ(MIXSRC_LAST_STICK, g_model.expoData[2].srcRaw); +#endif EXPECT_EQ(100, g_model.expoData[2].weight); EXPECT_EQ(0, g_model.expoData[2].offset); EXPECT_EQ(0, g_model.expoData[2].swtch); @@ -161,7 +180,6 @@ TEST(Lua, testModelInputs) // verify number of lines for Input4 luaExecStr("noInputs = model.getInputsCount(3)"); luaExecStr("if noInputs ~= 3 then error('getInputsCount()') end"); - } TEST(Lua, Switches) diff --git a/radio/src/tests/mixer.cpp b/radio/src/tests/mixer.cpp index e001f9e2b..2af10aa51 100644 --- a/radio/src/tests/mixer.cpp +++ b/radio/src/tests/mixer.cpp @@ -65,16 +65,38 @@ class MixerTest : public OpenTxTest {}; } \ } while (0) -#define MIXSRC_Ele (MIXSRC_FIRST_STICK + 1) -#define MIXSRC_Ail (MIXSRC_FIRST_STICK + 3) - -#define MIXSRC_TrimEle (MIXSRC_FIRST_TRIM + 1) -#define MIXSRC_TrimThr (MIXSRC_FIRST_TRIM + 2) - #define MIXSRC_CYC1 (MIXSRC_FIRST_HELI) #define MIXSRC_CYC2 (MIXSRC_FIRST_HELI + 1) #define MIXSRC_CYC3 (MIXSRC_FIRST_HELI + 2) +#if defined(SURFACE_RADIO) + #define ELE_CHAN 0 + #define ELE_THRTRIMSW 1 + #define THR_STICK_MIN_THR_POS 0 + #define TRIM_SCALE(x) (x / 2) +#else + #define ELE_CHAN 1 + #define ELE_THRTRIMSW 1 + #define THR_STICK_MIN_THR_POS -1024 + #define TRIM_SCALE(x) (x) +#endif + +#define THR_CHAN inputMappingGetThrottle() +#define THR_STICK THR_CHAN +#define ELE_STICK ELE_CHAN +#define AIL_STICK 3 + +#define MIXSRC_ELE (MIXSRC_FIRST_STICK + ELE_CHAN) +#define MIXSRC_THR (MIXSRC_FIRST_STICK + THR_CHAN) +#define MIXSRC_AIL (MIXSRC_FIRST_STICK + AIL_STICK) + +#define MIXSRC_TRIMELE (MIXSRC_FIRST_TRIM + ELE_CHAN) +#define MIXSRC_TRIMTHR (MIXSRC_FIRST_TRIM + THR_CHAN) + +#define ELE_TRIM_SOURCE (-1 -ELE_CHAN) +#define THR_TRIM_SOURCE (-1 -THR_CHAN) + + TEST_F(MixerTest, throttleInvert) { // Mode 1 / reversed @@ -82,21 +104,21 @@ TEST_F(MixerTest, throttleInvert) g_model.throttleReversed = 1; anaSetFiltered(inputMappingConvertMode(THR_STICK), -1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); // Mode 2 / reversed g_eeGeneral.stickMode = 1; g_model.throttleReversed = 1; anaSetFiltered(inputMappingConvertMode(THR_STICK), -1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); // Mode 2 / normal g_eeGeneral.stickMode = 1; g_model.throttleReversed = 0; anaSetFiltered(inputMappingConvertMode(THR_STICK), -1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); } TEST_F(TrimsTest, throttleTrim) @@ -106,56 +128,61 @@ TEST_F(TrimsTest, throttleTrim) anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); // stick max + trim min anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); // stick min + trim max - anaSetFiltered(THR_STICK, -1024); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+512); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS + TRIM_SCALE(512)); // stick min + trim mid - anaSetFiltered(THR_STICK, -1024); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); setTrimValue(0, THR_STICK, 0); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+256); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS + TRIM_SCALE(256)); // stick min + trim min - anaSetFiltered(THR_STICK, -1024); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); - + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS); +#if defined(SURFACE_RADIO) + // stick bellow 0 + trim max :no trim in reverse + anaSetFiltered(THR_STICK, -512); + setTrimValue(0, THR_STICK, TRIM_MAX); + evalMixes(1); + EXPECT_EQ(channelOutputs[THR_CHAN], -512); +#endif // now the same tests with extended Trims g_model.extendedTrims = 1; // stick max + trim max anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); // stick max + trim min anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); // stick min + trim max - anaSetFiltered(THR_STICK, -1024); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+2048); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS + TRIM_SCALE(2048)); // stick min + trim mid - anaSetFiltered(THR_STICK, -1024); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); setTrimValue(0, THR_STICK, 0); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+1024); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS + TRIM_SCALE(1024)); // stick min + trim min - anaSetFiltered(THR_STICK, -1024); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); - + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS); } TEST_F(TrimsTest, invertedThrottlePlusThrottleTrim) @@ -166,55 +193,85 @@ TEST_F(TrimsTest, invertedThrottlePlusThrottleTrim) anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // stick max + trim mid anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, 0); evalMixes(1); +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // no effect since we are in reverse mode +#else EXPECT_EQ(channelOutputs[2], -1024+256); +#endif // stick max + trim min anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+512); +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // no effect since we are in reverse mode +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+512); +#endif + // stick max + trim min + anaSetFiltered(THR_STICK, +1024); + setTrimValue(0, THR_STICK, TRIM_MIN); + evalMixes(1); +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // no effect since we are in reverse mode +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+512); +#endif // stick min + trim max anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); // stick min + trim min anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); // now the same tests with extended Trims g_model.extendedTrims = 1; - // stick max + trim max + // stick max + trim max : no effect since we are in reverse mode anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); +#if defined(SURFACE_RADIO) + // stick max + trim mid: no effect since we are in reverse mode + anaSetFiltered(THR_STICK, +1024); + setTrimValue(0, THR_STICK, 0); + evalMixes(1); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); +#else // stick max + trim mid anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, 0); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+1024); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+1024); // stick max + trim min anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+2048); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+2048); +#endif // stick min + trim max anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); + // stick min + trim mid + anaSetFiltered(THR_STICK, -1024); + setTrimValue(0, THR_STICK, 0); + evalMixes(1); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); // stick min + trim min anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); } TEST_F(TrimsTest, throttleTrimWithZeroWeightOnThrottle) @@ -227,32 +284,32 @@ TEST_F(TrimsTest, throttleTrimWithZeroWeightOnThrottle) anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 256); + EXPECT_EQ(channelOutputs[THR_CHAN], 256); // stick max + trim mid anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, 0); evalMixes(1); - EXPECT_LE(abs(channelOutputs[2] - 128), 1); //can't use precise comparison here because of lower precision math on 9X + EXPECT_LE(abs(channelOutputs[THR_CHAN] - 128), 1); //can't use precise comparison here because of lower precision math on 9X // stick max + trim min anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); // stick min + trim max anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 256); + EXPECT_EQ(channelOutputs[THR_CHAN], 256); // stick min + trim mid anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, 0); evalMixes(1); - EXPECT_LE(abs(channelOutputs[2] - 128), 1); + EXPECT_LE(abs(channelOutputs[THR_CHAN] - 128), 1); // stick min + trim min anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); // now some tests with extended Trims g_model.extendedTrims = 1; @@ -260,31 +317,31 @@ TEST_F(TrimsTest, throttleTrimWithZeroWeightOnThrottle) setTrimValue(0, THR_STICK, TRIM_EXTENDED_MIN); anaSetFiltered(THR_STICK, -1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); anaSetFiltered(THR_STICK, -300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); anaSetFiltered(THR_STICK, +300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); anaSetFiltered(THR_STICK, +1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); // trim max + various stick positions = should always be same value setTrimValue(0, THR_STICK, TRIM_EXTENDED_MAX); anaSetFiltered(THR_STICK, -1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); anaSetFiltered(THR_STICK, -300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); anaSetFiltered(THR_STICK, +300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); anaSetFiltered(THR_STICK, +1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); } TEST_F(TrimsTest, invertedThrottlePlusthrottleTrimWithZeroWeightOnThrottle) @@ -298,32 +355,32 @@ TEST_F(TrimsTest, invertedThrottlePlusthrottleTrimWithZeroWeightOnThrottle) anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); // stick max + trim mid anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, 0); evalMixes(1); - EXPECT_LE(abs(channelOutputs[2] - 128), 1); + EXPECT_LE(abs(channelOutputs[THR_CHAN] - 128), 1); // stick max + trim min anaSetFiltered(THR_STICK, +1024); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 256); + EXPECT_EQ(channelOutputs[THR_CHAN], 256); // stick min + trim max anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); // stick min + trim mid anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, 0); evalMixes(1); - EXPECT_LE(abs(channelOutputs[2] - 128), 1); + EXPECT_LE(abs(channelOutputs[THR_CHAN] - 128), 1); // stick min + trim min anaSetFiltered(THR_STICK, -1024); setTrimValue(0, THR_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 256); + EXPECT_EQ(channelOutputs[THR_CHAN], 256); // now some tests with extended Trims g_model.extendedTrims = 1; @@ -331,51 +388,51 @@ TEST_F(TrimsTest, invertedThrottlePlusthrottleTrimWithZeroWeightOnThrottle) setTrimValue(0, THR_STICK, TRIM_EXTENDED_MIN); anaSetFiltered(THR_STICK, -1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); anaSetFiltered(THR_STICK, -300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); anaSetFiltered(THR_STICK, +300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); anaSetFiltered(THR_STICK, +1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); // trim max + various stick positions = should always be same value setTrimValue(0, THR_STICK, TRIM_EXTENDED_MAX); anaSetFiltered(THR_STICK, -1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); anaSetFiltered(THR_STICK, -300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); anaSetFiltered(THR_STICK, +300); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); anaSetFiltered(THR_STICK, +1024); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 0); } TEST_F(TrimsTest, CopyTrimsToOffset) { - setTrimValue(0, ELE_STICK, -100); // -100 on elevator + setTrimValue(0, ELE_STICK, -100); // -100 on elevator/steering evalFunctions(g_model.customFn, modelFunctionsContext); // it disables all safety channels - copyTrimsToOffset(1); + copyTrimsToOffset(ELE_CHAN); EXPECT_EQ(getTrimValue(0, ELE_STICK), -100); // unchanged - EXPECT_EQ(g_model.limitData[1].offset, -195); + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -195); } TEST_F(TrimsTest, CopySticksToOffset) { anaSetFiltered(ELE_STICK, -100); evalMixes(1); - copySticksToOffset(1); + copySticksToOffset(ELE_CHAN); #if defined(STICK_DEAD_ZONE) - EXPECT_EQ(g_model.limitData[1].offset, -93); + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -93); #else - EXPECT_EQ(g_model.limitData[1].offset, -97); + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -97); #endif } @@ -384,41 +441,55 @@ TEST_F(TrimsTest, MoveTrimsToOffsets) // No trim idle only g_model.thrTrim = 0; anaSetFiltered(THR_STICK, 0); - setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, 100); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, -100); + setTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM, 100); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, -100); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 200); // THR output value is reflecting 100 trim + EXPECT_EQ(channelOutputs[THR_CHAN], TRIM_SCALE(200)); // THR output value is reflecting 100 trim moveTrimsToOffsets(); - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 0); // back to neutral - EXPECT_EQ(g_model.limitData[2].offset, 195); // value transferred - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 0); // back to neutral - EXPECT_EQ(g_model.limitData[1].offset, -195); // value transferred + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM), 0); // back to neutral + EXPECT_EQ(g_model.limitData[THR_CHAN].offset, TRIM_SCALE(195)); // value transferred + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM), 0); // back to neutral + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -195); // value transferred evalMixes(1); - EXPECT_EQ(channelOutputs[2], 200); // THR output value is still reflecting 100 trim +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], 99); // THR output value is still reflecting 100 trim +#else + EXPECT_EQ(channelOutputs[THR_CHAN], 200); // THR output value is still reflecting 100 trim +#endif } TEST_F(TrimsTest, MoveTrimsToOffsetsWithTrimIdle) { // Trim idle only g_model.thrTrim = 1; - anaSetFiltered(THR_STICK, -1024); // Min stick - g_model.limitData[2].offset = 0; - g_model.limitData[1].offset = 0; - setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, 100); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, -100); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); // Min stick + g_model.limitData[THR_CHAN].offset = 0; + g_model.limitData[ELE_CHAN].offset = 0; + setTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM, 100); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, -100); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -568); // THR output value is reflecting 100 trim idle +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], 228); // THR output value is reflecting 100 trim idle +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -568); // THR output value is reflecting 100 trim idle +#endif moveTrimsToOffsets(); // Trim affecting Throttle should not be affected - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 100); // unchanged + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM), 100); // unchanged EXPECT_EQ(g_model.limitData[2].offset, 0); // unchanged // Other trims should - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 0); // back to neutral - EXPECT_EQ(g_model.limitData[1].offset, -195); // value transferred + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM), 0); // back to neutral +#if defined(SURFACE_RADIO) + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -195); // value transferred evalMixes(1); - EXPECT_EQ(channelOutputs[2], -568); // THR output value is still reflecting 100 trim idle + EXPECT_EQ(channelOutputs[THR_CHAN], 228); // THR output value is reflecting 100 trim idle +#else + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -195); // value transferred + evalMixes(1); + EXPECT_EQ(channelOutputs[THR_CHAN], -568); // THR output value is reflecting 100 trim idle +#endif } TEST_F(TrimsTest, MoveTrimsToOffsetsWithCrossTrims) @@ -426,59 +497,73 @@ TEST_F(TrimsTest, MoveTrimsToOffsetsWithCrossTrims) // No trim idle only // Cross trims g_model.thrTrim = 0; - g_model.limitData[2].offset = 0; - g_model.limitData[1].offset = 0; - g_model.thrTrimSw = MIXSRC_TrimEle - MIXSRC_FIRST_TRIM; - ExpoData *expo = expoAddress(THR_STICK); - expo->trimSource = TRIM_ELE; - expo = expoAddress(ELE_STICK); - expo->trimSource = TRIM_THR; + g_model.limitData[THR_CHAN].offset = 0; + g_model.limitData[ELE_CHAN].offset = 0; + g_model.setThrottleStickTrimSource(MIXSRC_TRIMELE); + ExpoData *expo = expoAddress(THR_CHAN); + expo->trimSource = ELE_TRIM_SOURCE; + expo = expoAddress(ELE_CHAN); + expo->trimSource = THR_TRIM_SOURCE; anaSetFiltered(THR_STICK, 0); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 100); - setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, -100); + anaSetFiltered(ELE_STICK, 0); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, 100); + setTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM, -100); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 200); // THR output value is reflecting 100 Ele trim + EXPECT_EQ(channelOutputs[THR_CHAN], TRIM_SCALE(200)); // THR output value is reflecting 100 Ele trim + EXPECT_EQ(channelOutputs[ELE_CHAN], -200); // ELE output value is reflecting -100 Thr trim moveTrimsToOffsets(); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 200); // THR output value remains unchanged - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 0); // back to neutral - EXPECT_EQ(g_model.limitData[2].offset, 195); // value transferred - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 0); // back to neutral - EXPECT_EQ(g_model.limitData[1].offset, -195); // value transferred +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], 99); // THR output value remains unchanged +#else + EXPECT_EQ(channelOutputs[THR_CHAN], 200); // THR output value remains unchanged +#endif + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM), 0); // back to neutral + EXPECT_EQ(g_model.limitData[THR_CHAN].offset, TRIM_SCALE(195)); // value transferred + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM), 0); // back to neutral + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -195); // value transferred } TEST_F(TrimsTest, MoveTrimsToOffsetsWithCrosstrimsAndTrimIdle) { // Trim idle only // Cross trims - g_model.limitData[2].offset = 0; - g_model.limitData[1].offset = 0; + g_model.limitData[THR_CHAN].offset = 0; + g_model.limitData[ELE_CHAN].offset = 0; g_model.thrTrim = 1; - g_model.thrTrimSw = MIXSRC_TrimEle - MIXSRC_FIRST_TRIM; - ExpoData *expo = expoAddress(THR_STICK); - expo->trimSource = TRIM_ELE; - expo = expoAddress(ELE_STICK); - expo->trimSource = TRIM_THR; - - anaSetFiltered(THR_STICK, -1024); // Min stick - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 100); - setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, -100); + g_model.thrTrimSw = ELE_THRTRIMSW; + ExpoData *expo = expoAddress(THR_CHAN); + expo->trimSource = ELE_TRIM_SOURCE; + expo = expoAddress(ELE_CHAN); + expo->trimSource = THR_TRIM_SOURCE; + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); // Min throttle + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, 100); + setTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM, -100); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -568); // THR output value is reflecting 100 ele trim idle +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], 228); // THR output value is reflecting 100 ele trim idle +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -568); // THR output value is reflecting 100 ele trim idle +#endif moveTrimsToOffsets(); // Trim affecting Throttle (now Ele because of crosstrims) should not be affected - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 100); // unchanged + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM), 100); // unchanged EXPECT_EQ(g_model.limitData[2].offset, 0); // THR chan offset unchanged // Other trims should - EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 0); // back to neutral - EXPECT_EQ(g_model.limitData[1].offset, -195); // Ele chan offset transfered + EXPECT_EQ(getTrimValue(0, MIXSRC_TRIMTHR - MIXSRC_FIRST_TRIM), 0); // back to neutral + EXPECT_EQ(g_model.limitData[ELE_CHAN].offset, -195); // Ele chan offset transferred evalMixes(1); - EXPECT_EQ(channelOutputs[2], -568); // THR output value is still reflecting 100 trim idle +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], 228); // THR output value is still reflecting 100 trim idle +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -568); // THR output value is still reflecting 100 trim idle +#endif } +#if !defined(SURFACE_RADIO) TEST_F(TrimsTest, InstantTrim) { anaSetFiltered(AIL_STICK, 50); @@ -508,6 +593,7 @@ TEST_F(TrimsTest, InstantTrimNegativeCurve) EXPECT_EQ(128, getTrimValue(0, AIL_STICK)); #endif } +#endif TEST(Curves, LinearIntpol) { @@ -746,15 +832,15 @@ TEST_F(TrimsTest, throttleTrimEle) { MODEL_RESET(); MIXER_RESET(); setModelDefaults(); - g_eeGeneral.templateSetup = 17; + g_eeGeneral.templateSetup = 17; // WARNING: NOT RETA (TAER or TH/ST) applyDefaultTemplate(); g_model.thrTrim = 1; -// checks ELE sticks are not affected by throttleTrim -// stick max + trim min + // checks ELE sticks are not affected by throttleTrim + // stick max + trim min anaSetFiltered(ELE_STICK, +1024); setTrimValue(0, ELE_STICK, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024 - 256); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024 - 256); SYSTEM_RESET(); MODEL_RESET(); MIXER_RESET(); @@ -770,9 +856,9 @@ TEST(Heli, BasicTest) MODEL_RESET(); MIXER_RESET(); setModelDefaults(); - g_model.swashR.collectiveSource = MIXSRC_Thr; - g_model.swashR.elevatorSource = MIXSRC_Ele; - g_model.swashR.aileronSource = MIXSRC_Ail; + g_model.swashR.collectiveSource = MIXSRC_THR; + g_model.swashR.elevatorSource = MIXSRC_ELE; + g_model.swashR.aileronSource = MIXSRC_AIL; g_model.swashR.collectiveWeight = 100; g_model.swashR.elevatorWeight = 100; g_model.swashR.aileronWeight = 100; @@ -806,9 +892,9 @@ TEST(Heli, Mode2Test) setModelDefaults(); g_eeGeneral.templateSetup = 2; applyDefaultTemplate(); - g_model.swashR.collectiveSource = MIXSRC_Thr; - g_model.swashR.elevatorSource = MIXSRC_Ele; - g_model.swashR.aileronSource = MIXSRC_Ail; + g_model.swashR.collectiveSource = MIXSRC_THR; + g_model.swashR.elevatorSource = MIXSRC_ELE; + g_model.swashR.aileronSource = MIXSRC_AIL; g_model.swashR.collectiveWeight = 100; g_model.swashR.elevatorWeight = 100; g_model.swashR.aileronWeight = 100; @@ -901,152 +987,168 @@ TEST_F(MixerTest, flightModeOverflow) TEST_F(TrimsTest, throttleTrimWithCrossTrims) { g_model.thrTrim = 1; - g_model.thrTrimSw = MIXSRC_TrimEle - MIXSRC_FIRST_TRIM; + g_model.thrTrimSw = ELE_THRTRIMSW; ExpoData *expo = expoAddress(THR_STICK); - expo->trimSource = TRIM_ELE; + expo->trimSource = ELE_TRIM_SOURCE; expo = expoAddress(ELE_STICK); - expo->trimSource = TRIM_THR; + expo->trimSource = THR_TRIM_SOURCE; // stick max + trim max anaSetFiltered(THR_STICK, +1024); anaSetFiltered(ELE_STICK, 0); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MAX); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick max + trim min anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MIN); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim max - anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MAX); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024 + 512); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS + TRIM_SCALE(512)); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim mid - anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 0); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, 0); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024 + 256); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS + TRIM_SCALE(256)); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim min - anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MIN); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // now the same tests with extended Trims g_model.extendedTrims = 1; // stick max + trim max anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick max + trim min anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], 1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], 1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim max - anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+2048); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+2048); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim mid - anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 0); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, 0); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS + TRIM_SCALE(1024)); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim min - anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); + anaSetFiltered(THR_STICK, THR_STICK_MIN_THR_POS); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], THR_STICK_MIN_THR_POS); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); } TEST_F(TrimsTest, invertedThrottlePlusThrottleTrimWithCrossTrims) { g_model.throttleReversed = 1; g_model.thrTrim = 1; - g_model.thrTrimSw = MIXSRC_TrimEle - MIXSRC_FIRST_TRIM; + g_model.thrTrimSw = ELE_THRTRIMSW; ExpoData *expo = expoAddress(THR_STICK); - expo->trimSource = TRIM_ELE; + expo->trimSource = ELE_TRIM_SOURCE; expo = expoAddress(ELE_STICK); - expo->trimSource = TRIM_THR; + expo->trimSource = THR_TRIM_SOURCE; // stick max + trim max anaSetFiltered(THR_STICK, +1024); anaSetFiltered(ELE_STICK, 0); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MAX); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick max + trim mid anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 0); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, 0); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+256); - EXPECT_EQ(channelOutputs[1], 0); +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // no effect since we are in reverse mode +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+256); +#endif + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick max + trim min anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MIN); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+512); - EXPECT_EQ(channelOutputs[1], 0); +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // no effect since we are in reverse mode +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+512); +#endif + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim max anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MAX); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim min anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_MIN); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // now the same tests with extended Trims g_model.extendedTrims = 1; // stick max + trim max anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick max + trim mid anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 0); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, 0); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+1024); - EXPECT_EQ(channelOutputs[1], 0); +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // no effect since we are in reverse mode +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+1024); +#endif + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick max + trim min anaSetFiltered(THR_STICK, +1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], -1024+2048); - EXPECT_EQ(channelOutputs[1], 0); +#if defined(SURFACE_RADIO) + EXPECT_EQ(channelOutputs[THR_CHAN], -1024); // no effect since we are in reverse mode +#else + EXPECT_EQ(channelOutputs[THR_CHAN], -1024+2048); +#endif + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim max anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MAX); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); // stick min + trim min anaSetFiltered(THR_STICK, -1024); - setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); + setTrimValue(0, MIXSRC_TRIMELE - MIXSRC_FIRST_TRIM, TRIM_EXTENDED_MIN); evalMixes(1); - EXPECT_EQ(channelOutputs[2], +1024); - EXPECT_EQ(channelOutputs[1], 0); + EXPECT_EQ(channelOutputs[THR_CHAN], +1024); + EXPECT_EQ(channelOutputs[ELE_CHAN], 0); } diff --git a/radio/src/tests/sources.cpp b/radio/src/tests/sources.cpp index 077ec2928..f6d6a6a47 100644 --- a/radio/src/tests/sources.cpp +++ b/radio/src/tests/sources.cpp @@ -111,8 +111,12 @@ TEST(Sources, getSourceString) EXPECT_STREQ(getSourceString(MIXSRC_FIRST_HELI + 1), "[C2]"); EXPECT_STREQ(getSourceString(MIXSRC_FIRST_HELI + 2), "[C3]"); #endif - - EXPECT_STREQ(getSourceString(MIXSRC_TrimRud), STR_CHAR_TRIM "Rud"); - EXPECT_STREQ(getSourceString(MIXSRC_TrimEle), STR_CHAR_TRIM "Ele"); - EXPECT_STREQ(getSourceString(MIXSRC_TrimThr), STR_CHAR_TRIM "Thr"); +#if defined(SURFACE_RADIO) + EXPECT_STREQ(getSourceString(MIXSRC_FIRST_TRIM), STR_CHAR_TRIM "ST"); + EXPECT_STREQ(getSourceString(MIXSRC_FIRST_TRIM + 1), STR_CHAR_TRIM "TH"); +#else + EXPECT_STREQ(getSourceString(MIXSRC_FIRST_TRIM), STR_CHAR_TRIM "Rud"); + EXPECT_STREQ(getSourceString(MIXSRC_FIRST_TRIM + 1), STR_CHAR_TRIM "Ele"); + EXPECT_STREQ(getSourceString(MIXSRC_FIRST_TRIM + 2), STR_CHAR_TRIM "Thr"); +#endif } diff --git a/radio/util/hw_defs/legacy_names.py b/radio/util/hw_defs/legacy_names.py index 61d077f85..69f85253f 100644 --- a/radio/util/hw_defs/legacy_names.py +++ b/radio/util/hw_defs/legacy_names.py @@ -5,16 +5,24 @@ LEGACY_NAMES = [ "targets": {"x10", "x10express", "t16", "tx16s", "t18"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "S1", @@ -85,16 +93,24 @@ LEGACY_NAMES = [ "targets": {"x12s"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "S1", @@ -165,16 +181,24 @@ LEGACY_NAMES = [ "targets": {"x9e"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -224,16 +248,24 @@ LEGACY_NAMES = [ "targets": {"boxer"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -262,10 +294,14 @@ LEGACY_NAMES = [ "targets": {"mt12"}, "inputs": { "ST": { - "yaml": "ST" + "yaml": "ST", + "lua": "ste", + "description": "Steering" }, "TH": { - "yaml": "TH" + "yaml": "TH", + "lua": "thr", + "description": "Throttle" }, "P1": { "yaml": "POT1", @@ -342,16 +378,24 @@ LEGACY_NAMES = [ }, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -375,16 +419,24 @@ LEGACY_NAMES = [ }, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -429,16 +481,24 @@ LEGACY_NAMES = [ }, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -509,16 +569,24 @@ LEGACY_NAMES = [ "targets": {"t20"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -568,16 +636,24 @@ LEGACY_NAMES = [ "targets": {"pocket"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -592,16 +668,24 @@ LEGACY_NAMES = [ "targets": {"x9lite", "x9lites"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", @@ -616,16 +700,24 @@ LEGACY_NAMES = [ "targets": {"x9d", "x9d+", "x9d+2019"}, "inputs": { "LH": { - "yaml": "Rud" + "yaml": "Rud", + "lua": "rud", + "description": "Rudder" }, "LV": { - "yaml": "Ele" + "yaml": "Ele", + "lua": "ele", + "description": "Elevator" }, "RV": { - "yaml": "Thr" + "yaml": "Thr", + "lua": "thr", + "description": "Throttle" }, "RH": { - "yaml": "Ail" + "yaml": "Ail", + "lua": "ail", + "description": "Aileron" }, "P1": { "yaml": "POT1", diff --git a/radio/util/hw_defs/lua_inputs.jinja b/radio/util/hw_defs/lua_inputs.jinja index 84bf79019..07c58d779 100644 --- a/radio/util/hw_defs/lua_inputs.jinja +++ b/radio/util/hw_defs/lua_inputs.jinja @@ -3,11 +3,33 @@ // This file has been generated from the target's JSON hardware description // -{% set inputs = adc_inputs.inputs | selectattr('type', '==', 'FLEX') | list %} +{% macro lua_input(first, offset, input) %} + {% set li = legacy_inputs[input.name] %} +{ {{ first }} + {{ offset }}, "{{ li.lua }}", "{{ li.description }}" }, +{%- endmacro %} + +{% macro lua_inputs(first, inputs) %} + {% for input in inputs %} + {{ lua_input(first, loop.index0, input) }} + {% endfor %} +{%- endmacro %} static const LuaSingleField _lua_inputs[] = { - {% for input in inputs %} - {% set li = legacy_inputs[input.name] %} - { MIXSRC_FIRST_POT + {{ loop.index0 }}, "{{ li.lua }}", "{{ li.description }}" }, + // main inputs + {% set main_inputs = adc_inputs.inputs | selectattr('type', '==', 'STICK') | list %} +{{ lua_inputs('MIXSRC_FIRST_STICK', main_inputs) }} + // flex inputs + {% set inputs = adc_inputs.inputs | selectattr('type', '==', 'FLEX') | list %} +{{ lua_inputs('MIXSRC_FIRST_POT', inputs) }} + // trims + {% set trims_count = trims | count %} + {% for n in range(trims_count) %} + {% if n < (main_inputs | length) %} + {% set input = main_inputs[loop.index0] %} + {% set li = legacy_inputs[input.name] %} + { MIXSRC_FIRST_TRIM + {{ loop.index0 }}, "trim-{{ li.lua }}", "{{ li.description}} trim" }, + {% else %} + { MIXSRC_FIRST_TRIM + {{ loop.index0 }}, "trim-t{{ loop.index }}", "Aux trim T{{ loop.index }}" }, + {% endif %} {% endfor %} }; diff --git a/radio/util/hw_defs/yaml_inputs.jinja b/radio/util/hw_defs/yaml_inputs.jinja index f36f24bd2..0576d3815 100644 --- a/radio/util/hw_defs/yaml_inputs.jinja +++ b/radio/util/hw_defs/yaml_inputs.jinja @@ -12,12 +12,25 @@ struct legacy_input_t { }; static const legacy_input_t _legacy_inputs[] = { + // main inputs {% for input in main_inputs %} {% set li = legacy_inputs[input.name] %} { "{{ li.yaml }}", MIXSRC_FIRST_STICK + {{ loop.index0 }} }, {% endfor %} + // flex inputs {% for input in flex_inputs %} {% set li = legacy_inputs[input.name] %} { "{{ li.yaml }}", MIXSRC_FIRST_POT + {{ loop.index0 }} }, {% endfor %} + // trims + {% set trims_count = trims | count %} + {% for n in range(trims_count) %} + {% if n < (main_inputs | length) %} + {% set input = main_inputs[loop.index0] %} + {% set li = legacy_inputs[input.name] %} + { "Trim{{ li.yaml }}", MIXSRC_FIRST_TRIM + {{ loop.index0 }} }, + {% else %} + { "TrimT{{ loop.index }}", MIXSRC_FIRST_TRIM + {{ loop.index0 }} }, + {% endif %} + {% endfor %} }; diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index a3c7d5f4e..3c467a68a 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -85,6 +85,9 @@ do t12) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T12 -DINTERNAL_MODULE_MULTI=ON" ;; + mt12) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=MT12 -DINTERNAL_MODULE_MULTI=ON" + ;; tx12) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TX12" ;; diff --git a/tools/generate-hw-defs.sh b/tools/generate-hw-defs.sh index 49d60eefa..9b7b66015 100755 --- a/tools/generate-hw-defs.sh +++ b/tools/generate-hw-defs.sh @@ -6,7 +6,7 @@ set -e : "${SRCDIR:=$(dirname "$(pwd)/$0")/..}" -: ${FLAVOR:="nv14;t12;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;t20;t14;lr3pro;tx12;tx12mk2;boxer;tx16s;x10;x10-access;x12s;x7;x7-access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites"} +: ${FLAVOR:="nv14;t12;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;t20;t14;lr3pro;mt12;tx12;tx12mk2;boxer;tx16s;x10;x10-access;x12s;x7;x7-access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites"} : ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"} # wipe build directory clean @@ -39,6 +39,9 @@ do t12) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T12 -DINTERNAL_MODULE_MULTI=ON" ;; + mt12) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=MT12 -DINTERNAL_MODULE_MULTI=ON" + ;; tx12) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TX12" ;; diff --git a/tools/generate-yaml.sh b/tools/generate-yaml.sh index 5351aaf9d..3c0819b43 100755 --- a/tools/generate-yaml.sh +++ b/tools/generate-yaml.sh @@ -8,7 +8,7 @@ if [[ -n ${GCC_ARM} ]] ; then export PATH=${GCC_ARM}:$PATH fi -: ${FLAVOR:="tx16s;x12s;nv14;pl18;x9d;x9dp;x9e;x9lite;xlites;x7;tpro;t20"} +: ${FLAVOR:="tx16s;x12s;nv14;pl18;x9d;x9dp;x9e;xlites;x7;tpro;t20"} : ${SRCDIR:=$(dirname "$(pwd)/$0")/..} : ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DDISABLE_COMPANION=YES -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"} @@ -56,6 +56,9 @@ do pocket) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=POCKET" ;; + mt12) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=MT12" + ;; lr3pro) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=LR3PRO" ;; diff --git a/tools/msys2_fetch_and_build_all.sh b/tools/msys2_fetch_and_build_all.sh index f9a89f2d3..4a131dea9 100644 --- a/tools/msys2_fetch_and_build_all.sh +++ b/tools/msys2_fetch_and_build_all.sh @@ -9,7 +9,7 @@ # ----------------------------------------------------------------------------- export BRANCH_NAME="main" # main|2.9|... -export RADIO_TYPE="tx16s" # tx16s|x10|x10-access|x12s|x9d|x9dp|x9lite|x9lites|x7|x7-access|t12|tx12|tx12mk2|boxer|t8|zorro|pocket|tlite|tpro|t20|t14|lr3pro|xlite|xlites|x9dp2019|x9e|x9e-hall|t16|t18|nv14|commando8 +export RADIO_TYPE="tx16s" # tx16s|x10|x10-access|x12s|x9d|x9dp|x9lite|x9lites|x7|x7-access|t12|tx12|tx12mk2|mt12|boxer|t8|zorro|pocket|tlite|tpro|t20|t14|lr3pro|xlite|xlites|x9dp2019|x9e|x9e-hall|t16|t18|nv14|commando8 export BUILD_OPTIONS="-DDEFAULT_MODE=2 -DGVARS=YES" @@ -30,6 +30,9 @@ case $RADIO_TYPE in t12) BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=T12 -DINTERNAL_MODULE_MULTI=ON" ;; + mt12) + BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=MT12 -DINTERNAL_MODULE_MULTI=ON" + ;; tx12) BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=TX12" ;;