fix: Throttle idle trim handling for surface, enable MT12 tests (#4520)
Co-authored-by: 3djc <3djc@gh.com> Co-authored-by: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com>
This commit is contained in:
co-authored by
3djc
raphaelcoeffic
parent
4c2ea7a60a
commit
dfaad73070
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
+12
-12
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -23,11 +23,6 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// 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
|
||||
|
||||
|
||||
@@ -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]"},
|
||||
};
|
||||
|
||||
+22
-3
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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" },
|
||||
|
||||
@@ -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" },
|
||||
|
||||
@@ -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 ),
|
||||
|
||||
@@ -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 ),
|
||||
|
||||
@@ -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" },
|
||||
|
||||
@@ -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" },
|
||||
|
||||
@@ -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 ),
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 ),
|
||||
|
||||
+22
-4
@@ -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)
|
||||
|
||||
+304
-202
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 %}
|
||||
};
|
||||
|
||||
@@ -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 %}
|
||||
};
|
||||
|
||||
@@ -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"
|
||||
;;
|
||||
|
||||
@@ -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"
|
||||
;;
|
||||
|
||||
@@ -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"
|
||||
;;
|
||||
|
||||
@@ -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"
|
||||
;;
|
||||
|
||||
Reference in New Issue
Block a user