1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-14 03:49:51 +03:00

feat: Add initial Jumper T20 support (#3726)

* Jumper T20

* Fix center beeps

* Add option to pinch top trim as well to bootloader

* chore: Regenerate yaml

* chore: Add entry for Buddy

* Jumper T20

* Foldable section for fonction swith and fix preflight pot checks

* Remove duplicated entry

* Rename "function switches" to "customizable switches"

* chore: Add translations

* chore: Update translations

* chore: Update Companion translations/wording
This commit is contained in:
3djc 2023-07-07 02:44:14 +02:00 committed by GitHub
parent ab5f44bacf
commit 7f669f12d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
74 changed files with 1504 additions and 174 deletions

View file

@ -52,6 +52,7 @@ jobs:
- t18
- t8
- tlite
- t20
- tx12
- tx16s
- x10
@ -97,6 +98,7 @@ jobs:
- t18
- t8;zorro;commando8
- tlite;tlitef4;tpro;tprov2;lr3pro
- t20
- tx12;tx12mk2;boxer
- tx16s
- x10;x10-access

View file

@ -320,6 +320,8 @@ elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TLITEF4)
set(FLAVOUR tlitef4)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TPRO)
set(FLAVOUR tpro)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T20)
set(FLAVOUR t20)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TX12)
set(FLAVOUR tx12)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TX12MK2)

View file

@ -44,7 +44,7 @@
</font>
</property>
<property name="text">
<string>Function Switches</string>
<string>Customizable Switches</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>

View file

@ -965,7 +965,7 @@ QString MultiModelPrinter::printFunctionSwitches()
int numFS = Boards::getCapability(firmware->getBoard(), Board::FunctionSwitches);
int colwidth = 80 / numFS;
QStringList headings = { tr("Function Switches") };
QStringList headings = { tr("Customizable Switches") };
for (int i = 0; i < numFS; i++) {
headings << tr("Switch %1").arg(i + 1);
}

View file

@ -4617,8 +4617,8 @@ Nyní používáte:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Nastavitelné přepínače</translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10492,8 +10492,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Nastavitelné přepínače</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -3646,8 +3646,8 @@ Du anvender aktuelt:
<translation>Formular</translation>
</message>
<message>
<source>Function Switches</source>
<translation>Funktion kontakt</translation>
<source>Customizable Switches</source>
<translation>Kontakter der kan tilpasses</translation>
</message>
<message>
<source>Type</source>
@ -8503,8 +8503,8 @@ p, li { white-space: pre-wrap; }
<translation>Start</translation>
</message>
<message>
<source>Function Switches</source>
<translation>Funktion kontakt</translation>
<source>Customizable Switches</source>
<translation>Kontakter der kan tilpasses</translation>
</message>
<message>
<source>Switch %1</source>

View file

@ -4600,8 +4600,8 @@ Sie verwenden gerade:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Anpassbare Schalter</translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10471,8 +10471,8 @@ If blank then the mix is considered to be &quot;ON&quot; all the time.</source>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Anpassbare Schalter</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -4564,7 +4564,7 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -10368,7 +10368,7 @@ If blank then the mix is considered to be &quot;ON&quot; all the time.</source>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>

View file

@ -4613,7 +4613,7 @@ Actualmente estás usando:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -10564,7 +10564,7 @@ Esto determina cómo los valores de mezcla son añadidos.
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>

View file

@ -4598,7 +4598,7 @@ Käytät nyt:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -10512,7 +10512,7 @@ Jos tyhjä mikserin katsotaan olevan &quot;ON&quot; kokoajan.</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>

View file

@ -4612,8 +4612,8 @@ Vous utilisez actuellement:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Inters paramétrables</translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10717,8 +10717,8 @@ Mixage actif par défaut si non-renseigné.</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Inters paramétrables</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -4564,8 +4564,8 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>מפסקים בהתאמה אישית</translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10548,8 +10548,8 @@ This determines how mixer values are added.
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>מפסקים בהתאמה אישית</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -4598,8 +4598,8 @@ state attualmente utilizzando:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Interruttori personalizzabili</translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10517,8 +10517,8 @@ Determina come il valore viene aggiunto alla miscelazione.
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Interruttori personalizzabili</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -4597,7 +4597,7 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -10709,7 +10709,7 @@ If blank then the mix is considered to be &quot;ON&quot; all the time.</source>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>

View file

@ -4564,7 +4564,7 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -10546,7 +10546,7 @@ If blank then the mix is considered to be &quot;ON&quot; all the time.</source>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>

View file

@ -4585,8 +4585,8 @@ Aktualnie używasz:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Ustawiane przełączniki</translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10510,8 +10510,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation>Ustawiane przełączniki</translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -4564,7 +4564,7 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -10548,7 +10548,7 @@ This determines how mixer values are added.
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>

View file

@ -4596,7 +4596,7 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -10478,7 +10478,7 @@ This determines how mixer values are added.
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<source>Customizable Switches</source>
<translation type="unfinished"></translation>
</message>
<message>

View file

@ -3646,8 +3646,8 @@ Du använder för närvarande:
<translation>Formulär</translation>
</message>
<message>
<source>Function Switches</source>
<translation>Funktionsbrytare</translation>
<source>Customizable Switches</source>
<translation>Anpassningsbara brytare</translation>
</message>
<message>
<source>Type</source>
@ -8504,8 +8504,8 @@ p, li { white-space: pre-wrap; }
<translation>Start</translation>
</message>
<message>
<source>Function Switches</source>
<translation>Funktionsbrytare</translation>
<source>Customizable Switches</source>
<translation>Anpassningsbara brytare</translation>
</message>
<message>
<source>Switch %1</source>

View file

@ -4648,8 +4648,8 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation></translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10610,8 +10610,8 @@ If blank then the mix is considered to be &quot;ON&quot; all the time.</source>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation></translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -4648,8 +4648,8 @@ You are currently using:
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="47"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation></translation>
</message>
<message>
<location filename="../modeledit/setup_function_switches.ui" line="69"/>
@ -10610,8 +10610,8 @@ If blank then the mix is considered to be &quot;ON&quot; all the time.</source>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="968"/>
<source>Function Switches</source>
<translation type="unfinished"></translation>
<source>Customizable Switches</source>
<translation></translation>
</message>
<message>
<location filename="../multimodelprinter.cpp" line="970"/>

View file

@ -25,6 +25,7 @@
["Jumper T-Lite (F4 MCU)", "tlitef4-"],
["Jumper T-Pro", "tpro-"],
["Jumper T-Pro V2", "tprov2-"],
["Jumper T20", "t20-"],
["RadioMaster T8", "t8-"],
["RadioMaster TX12", "tx12-"],
["RadioMaster Boxer", "boxer-"],

View file

@ -405,7 +405,11 @@ enum PotsWarnMode {
#define MAX_CALIB_ANALOG_INPUTS (MAX_STICKS + MAX_POTS + MAX_AXIS)
#define MAX_SWITCHES 20
#if defined(RADIO_T20)
#define MAX_TRIMS 8
#else
#define MAX_TRIMS 6
#endif
#define MAX_XPOTS_POSITIONS (MAX_POTS * XPOTS_MULTIPOS_COUNT)

View file

@ -128,6 +128,9 @@ static inline void check_struct()
#elif defined(RADIO_TPROV2)
CHKSIZE(RadioData, 859);
CHKSIZE(ModelData, 6290);
#elif defined(RADIO_T20)
CHKSIZE(RadioData, 859);
CHKSIZE(ModelData, 6326);
#elif defined(RADIO_BOXER)
CHKSIZE(RadioData, 870);
CHKSIZE(ModelData, 6265);

View file

@ -37,7 +37,7 @@ enum MenuModelFlightModeItems {
ITEM_MODEL_FLIGHT_MODE_NAME,
ITEM_MODEL_FLIGHT_MODE_SWITCH,
ITEM_MODEL_FLIGHT_MODE_TRIMS,
#if defined(TRIMS_GPIO_REG_T5L)
#if defined(TRIMS_GPIO_REG_T5L) || defined(TRIMS_GPIO_REG_LSD)
ITEM_MODEL_FLIGHT_MODE_TRIMS2,
#endif
ITEM_MODEL_FLIGHT_MODE_FADE_IN,
@ -71,7 +71,7 @@ void menuModelFlightModeOne(event_t event)
#if defined(GVARS) && !defined(GVARS_IN_CURVES_SCREEN)
#if defined(TRIMS_GPIO_REG_T5L)
#if defined(TRIMS_GPIO_REG_T5L) || defined(TRIMS_GPIO_REG_LSD)
#define VERTICAL_SHIFT (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_TRIMS2)
static const uint8_t mstate_tab_fm1[] = {0, 3, (uint8_t)(keysGetMaxTrims() - 5), 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1, 1};
#else
@ -132,7 +132,7 @@ void menuModelFlightModeOne(event_t event)
}
break;
#if defined(TRIMS_GPIO_REG_T5L)
#if defined(TRIMS_GPIO_REG_T5L) || defined(TRIMS_GPIO_REG_LSD)
case ITEM_MODEL_FLIGHT_MODE_TRIMS2:
{
auto trims = keysGetMaxTrims() - 4;

View file

@ -230,6 +230,7 @@ PACK(struct ExpandState {
uint8_t preflight:1;
uint8_t throttle:1;
uint8_t viewOpt:1;
uint8_t functionSwitches:1;
});
struct ExpandState expandState;
@ -248,6 +249,13 @@ uint8_t THROTTLE_ROW(uint8_t value)
return HIDDEN_ROW;
}
uint8_t FS_ROW(uint8_t value)
{
if (expandState.functionSwitches)
return value;
return HIDDEN_ROW;
}
uint8_t VIEWOPT_ROW(uint8_t value)
{
if (expandState.viewOpt)
@ -341,7 +349,14 @@ inline uint8_t TIMER_ROW(uint8_t timer, uint8_t value)
#define EXTRA_MODULE_ROWS
#if defined(FUNCTION_SWITCHES)
#define FUNCTION_SWITCHES_ROWS READONLY_ROW, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|(NUM_FUNCTIONS_SWITCHES-1),
#define FUNCTION_SWITCHES_ROWS 1, \
FS_ROW(NAVIGATION_LINE_BY_LINE|3), \
FS_ROW(NAVIGATION_LINE_BY_LINE|3), \
FS_ROW(NAVIGATION_LINE_BY_LINE|3), \
FS_ROW(NAVIGATION_LINE_BY_LINE|3), \
FS_ROW(NAVIGATION_LINE_BY_LINE|3), \
FS_ROW(NAVIGATION_LINE_BY_LINE|3), \
FS_ROW(NAVIGATION_LINE_BY_LINE|(NUM_FUNCTIONS_SWITCHES-1)),
#else
#define FUNCTION_SWITCHES_ROWS
#endif
@ -779,7 +794,7 @@ void menuModelSetup(event_t event)
#if defined(FUNCTION_SWITCHES)
case ITEM_MODEL_SETUP_LABEL:
lcdDrawTextAlignedLeft(y, "Function Switches");
expandState.functionSwitches = expandableSection(y, STR_FUNCTION_SWITCHES, expandState.functionSwitches, attr, event);
break;
case ITEM_MODEL_SETUP_SW1:
@ -1076,12 +1091,17 @@ void menuModelSetup(event_t event)
(g_model.potsWarnEnabled & (1 << i))) {
flags |= INVERS;
}
if (max_pots > 3) {
lcdDrawText(x, y, getAnalogShortLabel(adcGetInputOffset(ADC_INPUT_POT) + i), flags);
x = lcdNextPos + 1;
}
else {
lcdDrawText(x, y, getPotLabel(i), flags);
x = lcdNextPos + 3;
}
}
}
}
break;
case ITEM_MODEL_SETUP_BEEP_CENTER: {
@ -1092,7 +1112,7 @@ void menuModelSetup(event_t event)
LcdFlags flags = 0;
if ((menuHorizontalPosition == i) && attr)
flags = BLINK | INVERS;
else if (ANALOG_CENTER_BEEP(x) || (attr && CURSOR_ON_LINE()))
else if (ANALOG_CENTER_BEEP(i) || (attr && CURSOR_ON_LINE()))
flags = INVERS;
lcdDrawText(x, y, getAnalogShortLabel(i), flags);
}

View file

@ -29,6 +29,12 @@ const unsigned char bmp_sleep[] = {
#include "sleep.lbm"
};
#if defined(RADIO_T20)
constexpr uint8_t steps = NUM_FUNCTIONS_SWITCHES/2;
#elif defined(FUNCTION_SWITCHES)
constexpr uint8_t steps = NUM_FUNCTIONS_SWITCHES;
#endif
void drawStartupAnimation(uint32_t duration, uint32_t totalDuration)
{
if (totalDuration == 0)
@ -41,12 +47,16 @@ void drawStartupAnimation(uint32_t duration, uint32_t totalDuration)
#if defined(FUNCTION_SWITCHES)
uint8_t index2 = limit<uint8_t>(
0, duration / (totalDuration / (NUM_FUNCTIONS_SWITCHES + 1)),
NUM_FUNCTIONS_SWITCHES);
0, duration / (totalDuration / (steps + 1)),
steps);
for (uint8_t j = 0; j < NUM_FUNCTIONS_SWITCHES; j++) {
if (index2 > j)
for (uint8_t j = 0; j < steps; j++) {
if (index2 > j) {
fsLedOn(j);
#if defined(RADIO_T20)
fsLedOn(j + steps);
#endif
}
}
#endif
@ -72,14 +82,22 @@ void drawShutdownAnimation(uint32_t duration, uint32_t totalDuration,
lcdClear();
#if defined(FUNCTION_SWITCHES)
uint8_t index2 = limit<uint8_t>(
0, duration / (totalDuration / (NUM_FUNCTIONS_SWITCHES + 1)),
NUM_FUNCTIONS_SWITCHES);
for (uint8_t j = 0; j < NUM_FUNCTIONS_SWITCHES; j++) {
uint8_t index2 = limit<uint8_t>(
0, duration / (totalDuration / (steps + 1)),
steps);
for (uint8_t j = 0; j < steps; j++) {
fsLedOff(j);
if (NUM_FUNCTIONS_SWITCHES - index2 > j)
#if defined(RADIO_T20)
fsLedOff(j + steps);
#endif
if (steps - index2 > j) {
fsLedOn(j);
#if defined(RADIO_T20)
fsLedOn(j + steps);
#endif
}
}
#endif

View file

@ -485,7 +485,7 @@ void menuRadioHardware(event_t event)
// draw hw name
LcdFlags flags = menuHorizontalPosition < 0 ? attr : 0;
lcdDrawText(INDENT_WIDTH, y, STR_CHAR_POT, flags);
lcdDrawText(lcdNextPos, y, adcGetInputName(ADC_INPUT_POT, idx), flags);
lcdDrawText(lcdNextPos, y, adcGetInputLabel(ADC_INPUT_POT, idx), flags);
// draw custom name
if (analogHasCustomLabel(ADC_INPUT_POT, idx) ||

View file

@ -50,9 +50,11 @@ enum EnumKeys {
MAX_KEYS
};
#if defined(RADIO_T20)
#define MAX_TRIMS 8
#else
#define MAX_TRIMS 6
#endif
// returns a bit field with each key set as (1 << KEY_xxx)
uint32_t readKeys();

View file

@ -27,7 +27,11 @@
#define ROTENC_MIDSPEED 5
#define ROTENC_HIGHSPEED 50
#if defined(RADIO_T20)
#define ROTARY_ENCODER_GRANULARITY 4
#else
#define ROTARY_ENCODER_GRANULARITY 2
#endif
typedef int32_t rotenc_t;

View file

@ -53,7 +53,7 @@ uint8_t getSwitchCount();
// returns the highest row for a specified column
uint8_t switchGetMaxRow(uint8_t col);
// returns the maximum number of function switches supported in hardware
// returns the maximum number of customizable switches supported in hardware
uint8_t switchGetMaxFctSwitches();
struct switch_display_pos_t {
@ -63,10 +63,10 @@ struct switch_display_pos_t {
switch_display_pos_t switchGetDisplayPosition(uint8_t idx);
// The functions bellow support regular as well as function switches.
// The functions bellow support regular as well as customizable switches.
//
// Regular switches are indexed from `0` to `switchGetMaxSwitches() - 1`
// Function switches are indexed above the previous range.
// Customizable switches are indexed above the previous range.
//
// The total number of switches (and max index + 1) is:
// switchGetMaxSwitches() + switchGetMaxFctSwitches()

View file

@ -903,7 +903,9 @@ void alert(const char * title, const char * msg , uint8_t sound)
}
#if defined(GVARS)
#if MAX_TRIMS == 6
#if MAX_TRIMS == 8
int8_t trimGvar[MAX_TRIMS] = { -1, -1, -1, -1, -1, -1, -1, -1 };
#elif MAX_TRIMS == 6
int8_t trimGvar[MAX_TRIMS] = { -1, -1, -1, -1, -1, -1 };
#elif MAX_TRIMS == 4
int8_t trimGvar[MAX_TRIMS] = { -1, -1, -1, -1 };

View file

@ -300,7 +300,7 @@ void memswap(void * a, void * b, uint8_t size);
#include "pulses/pulses.h"
#include "pulses/modules_helpers.h"
#define MASK_CFN_TYPE uint64_t // current max = 64 function switches
#define MASK_CFN_TYPE uint64_t // current max = 64 customizable switches
#define MASK_FUNC_TYPE uint32_t // current max = 32 functions
struct CustomFunctionsContext {

View file

@ -46,14 +46,6 @@
#define DISPLAY_VERSION
#endif
#if defined(RADIO_TLITE)
#if defined(STM32F407xx)
#define CPU_NAME "-F4"
#else
#define CPU_NAME "-F2"
#endif
#endif
#if defined(COLORLCD)
const char fw_stamp[] = "FW" TAB ": edgetx-" FLAVOUR;
#if defined(RADIOMASTER_RELEASE) || defined(JUMPER_RELEASE)

View file

@ -23,6 +23,8 @@ elseif(PCB STREQUAL NV14)
elseif(PCB STREQUAL X7)
if(PCBREV STREQUAL TPRO)
set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_tpro.cpp)
elseif(PCBREV STREQUAL T20)
set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_t20.cpp)
else()
set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_128x64.cpp)
endif()

View file

@ -37,6 +37,8 @@
#elif defined(PCBX7)
#if defined(RADIO_TPRO) || defined(RADIO_TPROV2)
#include "yaml_datastructs_tpro.cpp"
#elif defined(RADIO_T20)
#include "yaml_datastructs_t20.cpp"
#else
#include "yaml_datastructs_128x64.cpp"
#endif

View file

@ -0,0 +1,870 @@
// 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, "TYPE_FLYSKY" },
{ 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" },
{ 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_MAX, "MAX" },
{ MIXSRC_TrimRud, "TrimRud" },
{ MIXSRC_TrimEle, "TrimEle" },
{ MIXSRC_TrimThr, "TrimThr" },
{ MIXSRC_TrimAil, "TrimAil" },
{ MIXSRC_TrimT5, "TrimT5" },
{ MIXSRC_TrimT6, "TrimT6" },
{ 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_RANGE, "FUNC_RANGE" },
{ 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_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( 8 ),
YAML_END
};
static const struct YamlNode struct_RadioData[] = {
YAML_UNSIGNED( "manuallyEdited", 1 ),
YAML_PADDING( 7 ),
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_PADDING( 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_PADDING( 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_UNSIGNED( "backlightColor", 8 ),
YAML_STRING("ownerRegistrationID", 8),
YAML_CUSTOM("rotEncDirection",r_rotEncDirection,nullptr),
YAML_UNSIGNED( "rotEncMode", 2 ),
YAML_SIGNED( "uartSampleMode", 2 ),
YAML_PADDING( 3 ),
YAML_UNSIGNED( "audioMuteEnable", 1 ),
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, 8, 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_ENUM("type", 8, enum_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_PADDING( 5 ),
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", 352, 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( "functionSwitchConfig", 16 ),
YAML_UNSIGNED( "functionSwitchGroup", 16 ),
YAML_UNSIGNED( "functionSwitchStartConfig", 16 ),
YAML_UNSIGNED( "functionSwitchLogicalState", 8 ),
YAML_ARRAY("switchNames", 24, 6, struct_string_24, NULL),
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;
}

View file

@ -78,7 +78,7 @@ uint8_t potsPos[MAX_POTS];
((sw) % XPOTS_MULTIPOS_COUNT))
#if defined(FUNCTION_SWITCHES)
// Function switches
// Customizable switches
//
// Non pushed : SWSRC_Sx0 = -1024 = Sx(up) = state 0
// Pushed : SWSRC_Sx2 = +1024 = Sx(down) = state 1

View file

@ -60,21 +60,21 @@ uint8_t getXPotPosition(uint8_t idx);
div_t switchInfo(int switchPosition);
// Lookup switch index by letter ('A' to 'Z')
// note: no function switches
// note: no customizable switches
int switchLookupIdx(char c);
// Lookup switch index by name ('SA' to 'SZ')
// note: no function switches
// note: no customizable switches
int switchLookupIdx(const char* name, size_t len);
// Get switch letter ('A' to 'Z')
// note: no function switches
// note: no customizable switches
char switchGetLetter(uint8_t idx);
// note: no function switches
// note: no customizable switches
const char* switchGetCanonicalName(uint8_t idx);
// function switches supported
// customizable switches supported
void switchSetCustomName(uint8_t idx, const char* str, size_t len);
const char* switchGetCustomName(uint8_t idx);
bool switchHasCustomName(uint8_t idx);

View file

@ -48,6 +48,10 @@
#define BOOTLOADER_KEYS 0x42
#endif
#if defined(RADIO_T20)
#define SECONDARY_BOOTLOADER_KEYS 0x1200
#endif
#define APP_START_ADDRESS (uint32_t)(FIRMWARE_ADDRESS + BOOTLOADER_SIZE)
#if defined(EEPROM)
@ -266,7 +270,11 @@ void bootloaderInitApp()
if ((~(KEYS_GPIO_REG_BIND->IDR) & KEYS_GPIO_PIN_BIND) == false) {
#else
// LHR & RHL trims not pressed simultanously
#if defined(SECONDARY_BOOTLOADER_KEYS)
if (readTrims() != BOOTLOADER_KEYS && readTrims() != SECONDARY_BOOTLOADER_KEYS) {
#else
if (readTrims() != BOOTLOADER_KEYS) {
#endif
#endif
// Start main application
jumpTo(APP_START_ADDRESS);

View file

@ -141,6 +141,17 @@ elseif(PCB STREQUAL X7)
add_definitions(-DRADIO_TPROV2)
add_definitions(-DMANUFACTURER_JUMPER)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
elseif(PCBREV STREQUAL T20)
set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module")
set(INTERNAL_MODULE_SERIAL YES)
set(FLAVOUR t20)
set(NAVIGATION_TYPE x7)
set(ROTARY_ENCODER YES)
set(CPU_TYPE_FULL STM32F407xE)
add_definitions(-DFUNCTION_SWITCHES)
add_definitions(-DRADIO_T20)
add_definitions(-DMANUFACTURER_JUMPER)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
elseif(PCBREV STREQUAL TLITE)
set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module")
set(INTERNAL_MODULE_SERIAL YES)

View file

@ -91,7 +91,11 @@ void sdMount();
void sdDone();
void sdPoll10ms();
uint32_t sdMounted();
#if defined(SD_PRESENT_GPIO)
#define SD_CARD_PRESENT() ((SD_PRESENT_GPIO->IDR & SD_PRESENT_GPIO_PIN) == 0)
#else
#define SD_CARD_PRESENT() (true)
#endif
#endif
// Flash Write driver
@ -189,7 +193,7 @@ extern HardwareOptions hardwareOptions;
#define BATTERY_WARN 87 // 8.7V
#define BATTERY_MIN 85 // 8.5V
#define BATTERY_MAX 115 // 11.5V
#elif defined(PCBXLITE)
#elif defined(PCBXLITE) || defined(RADIO_T20)
// 2 x Li-Ion
#define BATTERY_WARN 66 // 6.6V
#define BATTERY_MIN 67 // 6.7V
@ -296,6 +300,10 @@ uint8_t isBacklightEnabled();
#define USB_NAME "Jumper TPro V2"
#define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'T', '-', 'P', 'R', 'O', ' ', 'V', '2' /* 8 Bytes */
#elif defined(RADIO_T20)
#define USB_NAME "Jumper T20"
#define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'T', '-', '2', '0', ' ', ' ', ' ', ' ' /* 8 Bytes */
#elif defined(RADIO_COMMANDO8)
#define USB_NAME "iFlight Commando 8"
#define USB_MANUFACTURER 'i', 'F', 'l', 'i', 'g', 'h', 't', '-' /* 8 bytes */

View file

@ -214,6 +214,7 @@ void release_spi (void)
{
SD_DESELECT();
rcvr_spi();
delay_us(100);
}
#ifdef SD_USE_DMA
@ -316,12 +317,14 @@ void power_on (void)
card_power(1);
#if defined(SD_PRESENT_GPIO)
GPIO_InitStructure.GPIO_Pin = SD_PRESENT_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(SD_PRESENT_GPIO, &GPIO_InitStructure);
#endif
for (uint32_t Timer = 25000; Timer>0;Timer--); /* Wait for 250ms */

View file

@ -145,6 +145,15 @@
#define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_14 // PE.14
#define KEYS_GPIO_REG_BIND GPIOD
#define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_9 // PD.09
#elif defined(RADIO_T20)
#define KEYS_GPIO_REG_PAGE GPIOD
#define KEYS_GPIO_PIN_PAGE LL_GPIO_PIN_11 // PD.11
#define KEYS_GPIO_REG_MENU GPIOD
#define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_10 // PD.10
#define KEYS_GPIO_REG_EXIT GPIOD
#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_12 // PD.12
#define KEYS_GPIO_REG_ENTER GPIOE
#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_7 // PE.7
#elif defined(PCBX7)
#define KEYS_GPIO_REG_PAGE GPIOD
#define KEYS_GPIO_PIN_PAGE LL_GPIO_PIN_3 // PD.03
@ -220,7 +229,7 @@
#define USE_EXTI15_10_IRQ
#define EXTI15_10_IRQ_Priority 5
#endif
#elif defined(RADIO_X7) || defined(RADIO_X7ACCESS) || defined(RADIO_TPRO) || defined(RADIO_TPROV2)
#elif defined(RADIO_X7) || defined(RADIO_X7ACCESS) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_T20)
#define ROTARY_ENCODER_NAVIGATION
#define ROTARY_ENCODER_GPIO GPIOE
#define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_9 // PE.09
@ -339,6 +348,39 @@
#define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02
#define TRIMS_GPIO_REG_RHL GPIOE
#define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_4 // PE.04
#elif defined(RADIO_T20)
#define TRIMS_GPIO_REG_LHL GPIOD
#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_13 // PD.13
#define TRIMS_GPIO_REG_LHR GPIOG
#define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02
#define TRIMS_GPIO_REG_LVD GPIOG
#define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PG.03
#define TRIMS_GPIO_REG_LVU GPIOD
#define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PD.14
#define TRIMS_GPIO_REG_RVD GPIOF
#define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_2 // PF.02
#define TRIMS_GPIO_REG_RVU GPIOE
#define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_6 // PE.06
#define TRIMS_GPIO_REG_RHL GPIOE
#define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_5 // PE.05
#define TRIMS_GPIO_REG_RHR GPIOF
#define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PF.01
#define TRIMS_GPIO_REG_LSD GPIOG
#define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_9 // PG.09
#define TRIMS_GPIO_REG_LSU GPIOG
#define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_10 // PG.10
#define TRIMS_GPIO_REG_RSD GPIOD
#define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_7 // PD.07
#define TRIMS_GPIO_REG_RSU GPIOG
#define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_12 // PG.12
#define TRIMS_GPIO_REG_T7L GPIOB
#define TRIMS_GPIO_PIN_T7L LL_GPIO_PIN_3 // PB.03
#define TRIMS_GPIO_REG_T7R GPIOG
#define TRIMS_GPIO_PIN_T7R LL_GPIO_PIN_15 // PG.15
#define TRIMS_GPIO_REG_T8D GPIOG
#define TRIMS_GPIO_PIN_T8D LL_GPIO_PIN_13 // PG.13
#define TRIMS_GPIO_REG_T8U GPIOB
#define TRIMS_GPIO_PIN_T8U LL_GPIO_PIN_4 // PB.04
#elif defined(PCBX7) && !defined(RADIO_COMMANDO8)
#define TRIMS_GPIO_REG_LHL GPIOD
#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15
@ -356,7 +398,7 @@
#define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02
#define TRIMS_GPIO_REG_RHR GPIOE
#define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PE.04
#elif defined(PCBX7) && defined(RADIO_COMMANDO8)
#elif defined(RADIO_COMMANDO8)
#define TRIMS_GPIO_REG_LHL GPIOD
#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15
#define TRIMS_GPIO_REG_LHR GPIOC
@ -464,6 +506,12 @@
#define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_13 // PE.13
#define SWITCHES_GPIO_REG_A_H GPIOE
#define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_7 // PE.07
#elif defined(RADIO_T20)
#define STORAGE_SWITCH_A
#define HARDWARE_SWITCH_A
#define SWITCHES_A_INVERTED
#define SWITCHES_GPIO_REG_A GPIOD
#define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_0 // PD.00
#elif defined(PCBX7)
#define STORAGE_SWITCH_A
#define HARDWARE_SWITCH_A
@ -515,6 +563,12 @@
#define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_1 // PE.01
#define SWITCHES_GPIO_REG_B_H GPIOE
#define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_2 // PE.02
#elif defined(RADIO_T20)
#define STORAGE_SWITCH_B
#define HARDWARE_SWITCH_B
#define SWITCHES_B_INVERTED
#define SWITCHES_GPIO_REG_B GPIOE
#define SWITCHES_GPIO_PIN_B LL_GPIO_PIN_2 // PE.02
#elif (RADIO_LR3PRO)
#define STORAGE_SWITCH_B
#define HARDWARE_SWITCH_B
@ -606,6 +660,13 @@
#define HARDWARE_SWITCH_C
#define SWITCHES_GPIO_REG_C GPIOE
#define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_14 // PE.14
#elif defined(RADIO_T20)
#define STORAGE_SWITCH_C
#define HARDWARE_SWITCH_C
#define SWITCHES_GPIO_REG_C_L GPIOD
#define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PD.02
#define SWITCHES_GPIO_REG_C_H GPIOD
#define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_1 // PD.01
#elif defined(PCBX7)
#define STORAGE_SWITCH_C
#define HARDWARE_SWITCH_C
@ -668,6 +729,13 @@
#define HARDWARE_SWITCH_D
#define SWITCHES_GPIO_REG_D GPIOD
#define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_14 // PD.14
#elif defined(RADIO_T20)
#define STORAGE_SWITCH_D
#define HARDWARE_SWITCH_D
#define SWITCHES_GPIO_REG_D_L GPIOE
#define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_0 // PE.00
#define SWITCHES_GPIO_REG_D_H GPIOE
#define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_1 // PE.01
#elif defined(PCBX7) && !defined(RADIO_COMMANDO8)
#define STORAGE_SWITCH_D
#define HARDWARE_SWITCH_D
@ -750,6 +818,11 @@
#define HARDWARE_SWITCH_E
#define SWITCHES_GPIO_REG_E GPIOG
#define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_10 // PG.10
#elif defined(RADIO_T20)
#define STORAGE_SWITCH_E
#define HARDWARE_SWITCH_E
#define SWITCHES_GPIO_REG_E GPIOD
#define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PD.03
#elif defined(PCBX7)
// no SWE
#else
@ -810,7 +883,12 @@
#define HARDWARE_SWITCH_F
#define SWITCHES_GPIO_REG_F GPIOG
#define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_9 // PG.09
#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_COMMANDO8) || defined(RADIO_LR3PRO)
#elif defined(RADIO_T20)
#define STORAGE_SWITCH_F
#define HARDWARE_SWITCH_F
#define SWITCHES_GPIO_REG_F GPIOB
#define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_5 // PB.05
#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_TPROV2) || defined(RADIO_COMMANDO8) || defined(RADIO_LR3PRO)
// no SWF
#define STORAGE_SWITCH_F
#elif defined(RADIO_T12)
@ -858,6 +936,12 @@
#define HARDWARE_SWITCH_G
#define SWITCHES_GPIO_REG_G GPIOG
#define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_7 // PG.07
#elif defined(RADIO_T20)
//TRIM left low
#define STORAGE_SWITCH_G
#define HARDWARE_SWITCH_G
#define SWITCHES_GPIO_REG_G GPIOD
#define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_15 // PD.15
#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) || defined(RADIO_COMMANDO8)
// no SWG
#else
@ -899,7 +983,13 @@
#define HARDWARE_SWITCH_H
#define SWITCHES_GPIO_REG_H GPIOG
#define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_6 // PG.06
#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO)
#elif defined(RADIO_T20)
//TRIM right low
#define STORAGE_SWITCH_H
#define HARDWARE_SWITCH_H
#define SWITCHES_GPIO_REG_H GPIOF
#define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_0 // PF.00
#elif defined(RADIO_TLITE) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO)
// no SWH
#define STORAGE_SWITCH_H
#elif defined(PCBX7)
@ -1014,6 +1104,17 @@
#define HARDWARE_SWITCH_L
#define SWITCHES_GPIO_REG_L GPIOG
#define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_2 // PG.02
#elif defined(RADIO_T20)
//TRIM left up
#define STORAGE_SWITCH_I
#define HARDWARE_SWITCH_I
#define SWITCHES_GPIO_REG_I GPIOG
#define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_11 // PG.11
//TRIM right up
#define STORAGE_SWITCH_J
#define HARDWARE_SWITCH_J
#define SWITCHES_GPIO_REG_J GPIOG
#define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_14 // PG.14
#elif defined(PCBX7)
#define STORAGE_SWITCH_I
#define HARDWARE_SWITCH_I
@ -1025,6 +1126,45 @@
#define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_10 // PD.10
#endif
#if defined(RADIO_T20)
//SW1
#define FUNCTION_SWITCH_1 SK
#define STORAGE_SWITCH_K
#define HARDWARE_SWITCH_K
#define SWITCHES_GPIO_REG_K GPIOE
#define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_10 // PE.10
//SW2
#define FUNCTION_SWITCH_2 SL
#define STORAGE_SWITCH_L
#define HARDWARE_SWITCH_L
#define SWITCHES_GPIO_REG_L GPIOE
#define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_8 // PE.08
//SW3
#define FUNCTION_SWITCH_3 SM
#define STORAGE_SWITCH_M
#define HARDWARE_SWITCH_M
#define SWITCHES_GPIO_REG_M GPIOE
#define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_12 // PE.12
//SW4
#define FUNCTION_SWITCH_4 SN
#define STORAGE_SWITCH_N
#define HARDWARE_SWITCH_N
#define SWITCHES_GPIO_REG_N GPIOE
#define SWITCHES_GPIO_PIN_N LL_GPIO_PIN_13 // PE.13
//SW5
#define FUNCTION_SWITCH_5 SO
#define STORAGE_SWITCH_O
#define HARDWARE_SWITCH_O
#define SWITCHES_GPIO_REG_O GPIOE
#define SWITCHES_GPIO_PIN_O LL_GPIO_PIN_14 // PE.14
//SW6
#define FUNCTION_SWITCH_6 SP
#define STORAGE_SWITCH_P
#define HARDWARE_SWITCH_P
#define SWITCHES_GPIO_REG_P GPIOE
#define SWITCHES_GPIO_PIN_P LL_GPIO_PIN_15 // PE.15
#endif
#if defined(PCBX9E)
#define STORAGE_SWITCH_I
#define HARDWARE_SWITCH_I
@ -1137,6 +1277,15 @@
#define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15)
#define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
#define KEYS_GPIOG_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7)
#elif defined(RADIO_T20)
#define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_GPIOG)
#define KEYS_GPIOA_PINS ()
#define KEYS_GPIOB_PINS (SWITCHES_GPIO_PIN_F | TRIMS_GPIO_PIN_T7L | TRIMS_GPIO_PIN_T8U)
#define KEYS_GPIOC_PINS (SWITCHES_GPIO_PIN_C)
#define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_PAGE | KEYS_GPIO_PIN_MENU | KEYS_GPIO_PIN_EXIT | TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LVU | SWITCHES_GPIO_PIN_A_L | SWITCHES_GPIO_PIN_A_H | SWITCHES_GPIO_PIN_G | TRIMS_GPIO_PIN_RSD)
#define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_ENTER | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RVU | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_D | SWITCHES_GPIO_PIN_E | SWITCHES_GPIO_PIN_K | SWITCHES_GPIO_PIN_L | SWITCHES_GPIO_PIN_M | SWITCHES_GPIO_PIN_N | SWITCHES_GPIO_PIN_O | SWITCHES_GPIO_PIN_P)
#define KEYS_GPIOF_PINS (TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RHR | SWITCHES_GPIO_PIN_H)
#define KEYS_GPIOG_PINS (TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_LVD | SWITCHES_GPIO_PIN_I | SWITCHES_GPIO_PIN_J | TRIMS_GPIO_PIN_LSD | TRIMS_GPIO_PIN_LSU | TRIMS_GPIO_PIN_RSU | TRIMS_GPIO_PIN_T7R | TRIMS_GPIO_PIN_T8D)
#elif defined(RADIO_FAMILY_JUMPER_T12)
#define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
#if !defined(RADIO_TLITE)
@ -1223,12 +1372,14 @@
#endif
// ADC
#if !defined(RADIO_T20)
#define ADC_MAIN ADC1
#define ADC_DMA DMA2
#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0
#define ADC_DMA_STREAM LL_DMA_STREAM_4
#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler
#endif
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT
@ -1438,6 +1589,45 @@
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8
#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10
#define ADC_VREF_PREC2 330
#elif defined(RADIO_T20)
#define ADC_RCC_AHB1Periph (RCC_AHB1Periph_DMA2)
#define ADC_RCC_APB1Periph 0
#define ADC_RCC_APB2Periph 0
#define ADC_MAIN ADC3
#define ADC_DMA DMA2
#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2
#define ADC_DMA_STREAM LL_DMA_STREAM_0
#define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_1 // PA.01
#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_0 // PA.00
#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02
#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03
#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_1 // ADC123_IN1
#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_0 // ADC123_IN0
#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2
#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3
#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01
#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PC.00
#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_3 // PC.03
#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_2 // PC.02
#define ADC_GPIO_PIN_SLIDER3 LL_GPIO_PIN_5 // PF.05
#define ADC_GPIO_PIN_SLIDER4 LL_GPIO_PIN_3 // PF.03
#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_4 // PF.04
#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC123_IN11
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_10 // ADC123_IN10
#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_13 // ADC123_IN13
#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_12 // ADC123_IN12
#define ADC_CHANNEL_SLIDER3 LL_ADC_CHANNEL_15 // ADC3_IN15
#define ADC_CHANNEL_SLIDER4 LL_ADC_CHANNEL_9 // ADC3_IN9
#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_IN14
#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV)
#define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2)
#define ADC_GPIOF_PINS (ADC_GPIO_PIN_SLIDER3 | ADC_GPIO_PIN_SLIDER4 | ADC_GPIO_PIN_BATT)
#define ADC_EXT ADC1
#define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT }
#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
#define ADC_VREF_PREC2 330
#elif defined(PCBX7)
#define HARDWARE_POT1
#define HARDWARE_POT2
@ -1541,6 +1731,8 @@
#define ADC_DIRECTION {-1, 1, 1, -1, -1, 1, 1, 1}
#elif defined(RADIO_TPRO) || defined(RADIO_TPROV2)
#define ADC_DIRECTION {1,-1,1,-1, 1,1, 1, 1}
#elif defined(RADIO_T20)
#define ADC_DIRECTION {1,-1,1,-1, -1,1,-1,-1,-1,-1}
#elif defined(PCBX7)
#define ADC_DIRECTION {-1,1,-1,1, 1,1, 1, 1}
#elif defined(PCBX9LITE)
@ -1550,7 +1742,7 @@
#endif
// PWR and LED driver
#define PWR_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
#define PWR_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG)
#if defined(PCBX9LITE)
#define PWR_SWITCH_GPIO GPIOA
@ -1567,6 +1759,11 @@
#define PWR_SWITCH_GPIO_PIN GPIO_Pin_11 // PD.11
#define PWR_ON_GPIO GPIOD
#define PWR_ON_GPIO_PIN GPIO_Pin_10 // PD.10
#elif defined(RADIO_T20)
#define PWR_SWITCH_GPIO GPIOG
#define PWR_SWITCH_GPIO_PIN GPIO_Pin_5 // PG.05
#define PWR_ON_GPIO GPIOG
#define PWR_ON_GPIO_PIN GPIO_Pin_6 // PG.06
#else
#define PWR_SWITCH_GPIO GPIOD
#define PWR_SWITCH_GPIO_PIN GPIO_Pin_1 // PD.01
@ -1646,6 +1843,16 @@
#define LED_RED_GPIO_PIN GPIO_Pin_5 // PC.05
#define LED_BLUE_GPIO GPIOC
#define LED_BLUE_GPIO_PIN GPIO_Pin_4 // PC.04
#elif defined(RADIO_T20)
#define STATUS_LEDS
#define GPIO_LED_GPIO_ON GPIO_SetBits
#define GPIO_LED_GPIO_OFF GPIO_ResetBits
#define LED_GREEN_GPIO GPIOG
#define LED_GREEN_GPIO_PIN GPIO_Pin_1 // PG.01
#define LED_RED_GPIO GPIOC
#define LED_RED_GPIO_PIN GPIO_Pin_5 // PC.05
#define LED_BLUE_GPIO GPIOC
#define LED_BLUE_GPIO_PIN GPIO_Pin_4 // PC.04
#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER)
#define STATUS_LEDS
#define GPIO_LED_GPIO_ON GPIO_SetBits
@ -1687,6 +1894,18 @@
#endif
#if defined(FUNCTION_SWITCHES)
#if defined(RADIO_T20)
#define FS_RCC_AHB1Periph RCC_AHB1Periph_GPIOF
#define GPIO_FSLED_GPIO_ON GPIO_SetBits
#define GPIO_FSLED_GPIO_OFF GPIO_ResetBits
#define FSLED_GPIO GPIOF
#define FSLED_GPIO_PIN_1 GPIO_Pin_10
#define FSLED_GPIO_PIN_2 GPIO_Pin_9
#define FSLED_GPIO_PIN_3 GPIO_Pin_8
#define FSLED_GPIO_PIN_4 GPIO_Pin_7
#define FSLED_GPIO_PIN_5 GPIO_Pin_6
#define FSLED_GPIO_PIN_6 GPIO_Pin_13
#else
#define FS_RCC_AHB1Periph RCC_AHB1Periph_GPIOF
#define GPIO_FSLED_GPIO_ON GPIO_SetBits
#define GPIO_FSLED_GPIO_OFF GPIO_ResetBits
@ -1698,6 +1917,7 @@
#define FSLED_GPIO_PIN_5 GPIO_Pin_1
#define FSLED_GPIO_PIN_6 GPIO_Pin_0
#endif
#endif
// Internal Module
#if defined(PCBXLITE)
@ -1816,7 +2036,7 @@
#define INTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream5_IRQn
#define INTMODULE_TIMER_DMA_IRQHandler DMA2_Stream5_IRQHandler
#define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
#elif (defined(RADIO_FAMILY_JUMPER_T12) && defined(HARDWARE_INTERNAL_MODULE)) || defined(RADIO_TX12) || defined(RADIO_T8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2)
#elif (defined(RADIO_FAMILY_JUMPER_T12) && defined(HARDWARE_INTERNAL_MODULE)) || defined(RADIO_TX12) || defined(RADIO_T8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_T20)
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_DMA1)
#define INTMODULE_PWR_GPIO GPIOC
#define INTMODULE_PWR_GPIO_PIN GPIO_Pin_6 // PC.06
@ -1844,6 +2064,11 @@
#define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_11 // PF.11
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
#define INIT_INTMODULE_BOOTCMD_PIN() GPIO_ResetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN);
#elif defined(RADIO_T20)
#define INTMODULE_BOOTCMD_GPIO GPIOE
#define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_4 // PE.04
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
#define INIT_INTMODULE_BOOTCMD_PIN() GPIO_ResetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN);
#elif defined(RADIO_LR3PRO)
#define INTMODULE_BOOTCMD_GPIO GPIOB
#define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_5 // PB.05
@ -1945,7 +2170,7 @@
#if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TLITE)
#define HARDWARE_EXTERNAL_MODULE_SIZE_SML
#endif
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
#if defined(RADIO_COMMANDO8)
#define EXTMODULE_RF_SWITCH_GPIO GPIOE //Antenna switching port
#define EXTMODULE_RF_SWITCH_GPIO_PIN GPIO_Pin_7 //Antenna switching pin //PE.07
@ -1953,6 +2178,12 @@
#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_2 //External tuner power pin
#define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN|EXTMODULE_RF_SWITCH_GPIO_PIN)
#define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN|EXTMODULE_RF_SWITCH_GPIO_PIN)
#elif defined(RADIO_T20)
#define EXTMODULE_PWR_GPIO GPIOB
#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_1 // PB.01
#define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
#define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
#define HARDWARE_EXTERNAL_MODULE_SIZE_SML
#else
#define EXTMODULE_PWR_GPIO GPIOD
#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
@ -2008,8 +2239,13 @@
#define TRAINER_IN_TIMER_Channel LL_TIM_CHANNEL_CH3
#define TRAINER_OUT_GPIO_PIN LL_GPIO_PIN_9 // PC.09
#define TRAINER_OUT_TIMER_Channel LL_TIM_CHANNEL_CH4
#if defined(RADIO_T20)
#define TRAINER_DETECT_GPIO GPIOE
#define TRAINER_DETECT_GPIO_PIN LL_GPIO_PIN_8 // PE.03
#else
#define TRAINER_DETECT_GPIO GPIOA
#define TRAINER_DETECT_GPIO_PIN LL_GPIO_PIN_8 // PA.08
#endif
#if !defined(RADIO_X9DP2019) && !defined(RADIO_X7ACCESS)
#define TRAINER_DETECT_INVERTED
#endif
@ -2321,7 +2557,7 @@
#define BACKLIGHT_CCMR1 TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 // Channel 1, PWM
#define BACKLIGHT_CCER TIM_CCER_CC1E
#define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR1
#elif defined(RADIO_T8) || defined(RADIO_TPROV2)
#elif defined(RADIO_T8) || defined(RADIO_TPROV2) || defined(RADIO_T20)
#define BACKLIGHT_RCC_AHB1Periph 0
#define BACKLIGHT_RCC_APB1Periph 0
#define BACKLIGHT_RCC_APB2Periph 0
@ -2365,10 +2601,10 @@
#define KEYS_BACKLIGHT_RCC_AHB1Periph 0
// LCD driver
#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2)
#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_T20)
#define LCD_VERTICAL_INVERT
#endif
#if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2)
#if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2) || defined(RADIO_T20)
#define LCD_HORIZONTAL_INVERT
#define OLED_SCREEN
#endif
@ -2425,8 +2661,13 @@
#define LCD_A0_GPIO_PIN GPIO_Pin_11 // PC.11
#define LCD_NCS_GPIO GPIOA
#define LCD_NCS_GPIO_PIN GPIO_Pin_15 // PA.15
#if defined(RADIO_T20)
#define LCD_RST_GPIO GPIOA
#define LCD_RST_GPIO_PIN GPIO_Pin_14 // PA.14
#else
#define LCD_RST_GPIO GPIOD
#define LCD_RST_GPIO_PIN GPIO_Pin_12 // PD.12
#endif
#define LCD_DMA DMA1
#define LCD_DMA_Stream DMA1_Stream7
#define LCD_DMA_Stream_IRQn DMA1_Stream7_IRQn
@ -2514,6 +2755,9 @@
// SD - SPI2
#define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
#define SD_RCC_APB1Periph RCC_APB1Periph_SPI2
#if defined(RADIO_T20)
// Using chip, so no detect
#else
#define SD_PRESENT_GPIO GPIOD
#if defined(PCBXLITE) || defined(PCBX9LITE)
#define SD_PRESENT_GPIO_PIN GPIO_Pin_10 // PD.10
@ -2522,6 +2766,7 @@
#else
#define SD_PRESENT_GPIO_PIN GPIO_Pin_9 // PD.09
#endif
#endif
#define SD_GPIO GPIOB
#define SD_GPIO_PIN_CS GPIO_Pin_12 // PB.12
#define SD_GPIO_PIN_SCK GPIO_Pin_13 // PB.13
@ -2564,22 +2809,28 @@
#define AUDIO_SPEAKER_ENABLE_GPIO_PIN GPIO_Pin_14 // PD.14
#define HEADPHONE_TRAINER_SWITCH_GPIO GPIOD
#define HEADPHONE_TRAINER_SWITCH_GPIO_PIN GPIO_Pin_9 // PD.09
#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_BOXER) || defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO)
#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
#define AUDIO_MUTE_GPIO GPIOE
#define AUDIO_MUTE_GPIO_PIN GPIO_Pin_12 // PE.12
#elif defined(RADIO_T20)
#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
#define AUDIO_MUTE_GPIO GPIOG
#define AUDIO_MUTE_GPIO_PIN GPIO_Pin_4 // PG.04
#define AUDIO_MUTE_DELAY 500 // ms
#if defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO)
#define AUDIO_UNMUTE_DELAY 250 // ms
#else
#define AUDIO_UNMUTE_DELAY 150 // ms
#endif
#elif defined(RADIO_COMMANDO8)
#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
#define AUDIO_MUTE_GPIO GPIOB
#define AUDIO_MUTE_GPIO_PIN GPIO_Pin_1 // PB.01
#define AUDIO_MUTE_DELAY 500 // ms
#define INVERTED_MUTE_PIN
#elif defined(MANUFACTURER_RADIOMASTER) || defined(MANUFACTURER_JUMPER) || defined(RADIO_LR3PRO)
#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
#define AUDIO_MUTE_GPIO GPIOE
#define AUDIO_MUTE_GPIO_PIN GPIO_Pin_12 // PE.12
#define AUDIO_MUTE_DELAY 500 // ms
#if defined(MANUFACTURER_JUMPER) || defined(RADIO_LR3PRO)
#define AUDIO_UNMUTE_DELAY 250 // ms
#else
#define AUDIO_UNMUTE_DELAY 150 // ms
#endif
#else
#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
#endif

View file

@ -113,7 +113,7 @@ const uint32_t CROSSFIRE_BAUDRATES[] = {
5250000,
};
#if defined(RADIO_TPRO) || defined(RADIO_TPROV2)
#if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_T20)
#define CROSSFIRE_MAX_INTERNAL_BAUDRATE DIM(CROSSFIRE_BAUDRATES) - 3
#else
#define CROSSFIRE_MAX_INTERNAL_BAUDRATE DIM(CROSSFIRE_BAUDRATES) - 1

View file

@ -164,6 +164,7 @@ const char STR_PPMFRAME[] = TR_PPMFRAME;
const char STR_REFRESHRATE[] = TR_REFRESHRATE;
const char STR_MS[] = TR_MS;
const char STR_SWITCH[] = TR_SWITCH;
const char STR_FUNCTION_SWITCHES[] = TR_FUNCTION_SWITCHES;
const char STR_ADJUST_GVAR[] = TR_ADJUST_GVAR;
const char STR_PLAY_TRACK[] = TR_PLAY_TRACK;
const char STR_PLAY_VALUE[] = TR_PLAY_VALUE;

View file

@ -288,6 +288,7 @@ extern const char STR_PPMFRAME[];
extern const char STR_REFRESHRATE[];
extern const char STR_MS[];
extern const char STR_SWITCH[];
extern const char STR_FUNCTION_SWITCHES[];
extern const char STR_ADJUST_GVAR[];
extern const char STR_PLAY_TRACK[];
extern const char STR_PLAY_VALUE[];

View file

@ -260,6 +260,7 @@
#define TR_WARN_5VOLTS "注意输出电平为5V"
#define TR_MS "ms"
#define TR_SWITCH "开关"
#define TR_FUNCTION_SWITCHES "可自定义开关"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "微调"
#define TR_FADEIN "渐入"
@ -446,7 +447,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "已校准的模拟值"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "原始模拟值 (5 Hz)"
#define TR_MENUCALIBRATION "校准"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "可自定义开关"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "将当前微调量保存至中点"
#else
@ -831,7 +832,7 @@
#define TR_DEBUG "调试"
#define TR_KEYS_BTN BUTTON("按键")
#define TR_ANALOGS_BTN BUTTON(TR("模拟", "模拟量"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("自定义开关", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "未找到触摸硬件"
#define TR_TOUCH_EXIT "点击屏幕退出"
#define TR_SET BUTTON("设置")

View file

@ -275,6 +275,7 @@
#define TR_WARN_5VOLTS "Varování: výstupní úroveň je 5 voltů"
#define TR_MS "ms"
#define TR_SWITCH "Spínač"
#define TR_FUNCTION_SWITCHES "Nastavitelné přepínače"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trimy"
#define TR_FADEIN "Přechod Zap"
@ -462,7 +463,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "KALIBROVAT ANALOGY"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGY (5 Hz)"
#define TR_MENUCALIBRATION "KALIBRACE"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "NASTAVITELNÉ PŘEPÍNAČE"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trimy => Subtrimy"
#else
@ -841,7 +842,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("SW","Přepínače"))
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analogy"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Vlastní Sw", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Dotyková obrazovka nenalezena"
#define TR_TOUCH_EXIT "Dotkněte se obrazovky pro ukončení"
#define TR_SET BUTTON("Nast")

View file

@ -273,6 +273,7 @@
#define TR_WARN_5VOLTS "Advarsel: udgang niveau er 5 volts"
#define TR_MS "ms"
#define TR_SWITCH "Kontakt"
#define TR_FUNCTION_SWITCHES "Kontakter der kan tilpasses"
#define TR_SF_SWITCH "Udløser"
#define TR_TRIMS "Trim"
#define TR_FADEIN "Tone ind"
@ -460,7 +461,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "KALIBRERET ANALOGE"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RÅ ANALOGE (5 Hz)"
#define TR_MENUCALIBRATION "KALIBRIERING"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "KONTAKTER DER KAN TILPASSES"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trim => Subtrim"
#else
@ -845,7 +846,7 @@
#define TR_DEBUG "Fejlfind"
#define TR_KEYS_BTN BUTTON("Taster")
#define TR_ANALOGS_BTN BUTTON(TR("Analo", "Analoge"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Tilpasset sw", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Tryk skærm ikke fundet"
#define TR_TOUCH_EXIT "Tryk på skærm for at forlade"
#define TR_SET BUTTON("Set")

View file

@ -270,6 +270,7 @@
#define TR_WARN_5VOLTS "Warnung: Ausgangspegel ist 5 Volt"
#define TR_MS "ms"
#define TR_SWITCH TR("Schalt.", "Schalter")
#define TR_FUNCTION_SWITCHES "Anpassbare Schalter"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trimmer"
#define TR_FADEIN "Langs. Ein"
@ -456,7 +457,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "CALIBRATED ANALOGS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION TR("KALIB. ANALOG", "KALIBRIERUNG-Analog")
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "ANPASSBARE SCHALTER"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -833,7 +834,7 @@
#define TR_DEBUG "Testen"
#define TR_KEYS_BTN BUTTON(TR("SW","Schalter"))
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analoge"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("AnpSchalt", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Touch hardware not found"
#define TR_TOUCH_EXIT "Touch screen to exit"
#define TR_CALIBRATION "Kalibrieren"

View file

@ -271,6 +271,7 @@
#define TR_WARN_5VOLTS "Warning: output level is 5 volts"
#define TR_MS "ms"
#define TR_SWITCH "Switch"
#define TR_FUNCTION_SWITCHES "Customizable Switches"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fade in"
@ -456,7 +457,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "CALIBRATED ANALOGS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION "CALIBRATION"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "CUSTOMIZABLE SWITCHES"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -841,7 +842,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON("Keys")
#define TR_ANALOGS_BTN BUTTON(TR("Anas", "Analogs"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Custom sw", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Touch hardware not found"
#define TR_TOUCH_EXIT "Touch screen to exit"
#define TR_SET BUTTON("Set")

View file

@ -268,6 +268,7 @@
#define TR_WARN_5VOLTS "Aviso: nivel de salida 5 voltios"
#define TR_MS "ms"
#define TR_SWITCH TR("Interr.", "Interruptor")
#define TR_FUNCTION_SWITCHES "Customizable switches"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Inicio"
@ -447,7 +448,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "CALIBRATED ANALOGS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION "CALIBRACIÓN"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "CUSTOMIZABLE SWITCHES"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Offsets"
#else
@ -836,7 +837,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("SW","Switches"))
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analogs"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Custom sw", "Customizable switches"))
#define TR_TOUCH_NOTFOUND "Hardware táctil no encontrado"
#define TR_TOUCH_EXIT "Tocar pantalla para salir"
#define TR_CALIBRATION "Calibración"

View file

@ -282,6 +282,7 @@
#define TR_WARN_5VOLTS "Warning: output level is 5 volts"
#define TR_MS "ms"
#define TR_SWITCH "Switch"
#define TR_FUNCTION_SWITCHES "Customizable switches"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fade In"
@ -462,7 +463,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "CALIBRATED ANALOGS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION "KALIBROINTI"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "CUSTOMIZABLE SWITCHES"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -850,7 +851,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("SW","Switches"))
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analogs"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Custom sw", "Customizable switches"))
#define TR_TOUCH_NOTFOUND "Touch hardware not found"
#define TR_TOUCH_EXIT "Touch screen to exit"
#define TR_SET "[Set]"

View file

@ -277,6 +277,7 @@
#define TR_WARN_5VOLTS "Attention: niveau de sortie 5 volts"
#define TR_MS "ms"
#define TR_SWITCH TR("Inter", "Interrupteur")
#define TR_FUNCTION_SWITCHES "Inters paramétrables"
#define TR_SF_SWITCH "Interrupteur"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fondu ON"
@ -464,7 +465,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "ANALOG. CALIBRÉS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION "CALIBRATION"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "INTERS PARAMÉTRABLES"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -843,7 +844,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("Btns","Inters"))
#define TR_ANALOGS_BTN BUTTON(TR("Anas", "Analogs"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Custom sw", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Écran tactile non trouvé"
#define TR_TOUCH_EXIT "Toucher écran pour quitter"
#define TR_SET BUTTON("Déf")

View file

@ -350,6 +350,7 @@
#define TR_WARN_5VOLTS "Warning: output level is 5 volts"
#define TR_MS "ms"
#define TR_SWITCH "מתג"
#define TR_FUNCTION_SWITCHES "מפסקים בהתאמה אישית"
#define TR_SF_SWITCH "הדק"
#define TR_TRIMS "קיזוזים"
#define TR_FADEIN "Fade in"
@ -535,6 +536,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "בדיקת אנלוגיות סטיקים ומגע"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION "כיול"
#define TR_MENU_FSWITCH "מפסקים בהתאמה אישית"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -919,7 +921,7 @@
#define TR_DEBUG "איבחון"
#define TR_KEYS_BTN BUTTON("בדיקת מתגים")
#define TR_ANALOGS_BTN BUTTON(TR("Anas", "בדיקת אנלוגיות"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Custom sw", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "!מסך זה אינו מסך מגע"
#define TR_TOUCH_EXIT "גע במסך כדי לצאת"
#define TR_SET BUTTON("הגדר")

View file

@ -269,6 +269,7 @@
#define TR_WARN_5VOLTS "Attenzione: il livello d'uscita è 5 Volts"
#define TR_MS "ms"
#define TR_SWITCH "Inter."
#define TR_FUNCTION_SWITCHES "Interruttori personalizzabili"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Diss.In"
@ -454,7 +455,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "ANALOGICI CALIBRATI"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "ANALOGICI RAW (5 Hz)"
#define TR_MENUCALIBRATION "CALIBRAZIONE"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "INTERRUTTORI PERSONALIZZABILI"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -839,7 +840,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("SW", "Tasti"))
#define TR_ANALOGS_BTN BUTTON("Analogici")
#define TR_FS_BTN BUTTON(TR("Fun. Inter.", "Funzione interruttori"))
#define TR_FS_BTN BUTTON(TR("Int. pers.", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Schermo touch non trovato"
#define TR_TOUCH_EXIT "Tocca lo schermo per uscire"
#define TR_SET BUTTON("Set")

View file

@ -266,6 +266,7 @@
#define TR_WARN_5VOLTS "警告: 出力レベル 5V"
#define TR_MS "ms"
#define TR_SWITCH "スイッチ"
#define TR_FUNCTION_SWITCHES "Customizable switches"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "トリム"
#define TR_FADEIN "フェードイン"
@ -451,7 +452,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "アナログ キャリブレーション"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW アナログ (5 Hz)"
#define TR_MENUCALIBRATION "キャリブレーション"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "CUSTOMIZABLE SWITCHES"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "トリム => サブトリム"
#else
@ -836,7 +837,7 @@
#define TR_DEBUG "デバッグ"
#define TR_KEYS_BTN BUTTON("キー")
#define TR_ANALOGS_BTN BUTTON(TR("Anas", "アナログ"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Custom sw", "Customizable switches"))
#define TR_TOUCH_NOTFOUND "タッチパネルは見つかりませんでした"
#define TR_TOUCH_EXIT "画面をタップして終了します"
#define TR_SET BUTTON("設定")

View file

@ -268,6 +268,7 @@
#define TR_WARN_5VOLTS "Warning: output level is 5 volts"
#define TR_MS "ms"
#define TR_SWITCH TR("Schak.", "Schakelaar")
#define TR_FUNCTION_SWITCHES "Customizable switches"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Fade in"
@ -457,7 +458,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "CALIBRATED ANALOGS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION TR("CALIB. ANALOOG", "CALIBRERING Sticks+Pots")
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "CUSTOMIZABLE SWITCHES"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -837,7 +838,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("SW","Switches"))
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analogs"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Custom sw", "Customizable switches"))
#define TR_TOUCH_NOTFOUND "Touch hardware not found"
#define TR_TOUCH_EXIT "Touch screen to exit"
#define TR_SET "[Set]"

View file

@ -267,6 +267,7 @@
#define TR_WARN_5VOLTS "Uwaga: output level is 5 volts"
#define TR_MS "ms"
#define TR_SWITCH "Przełą"
#define TR_FUNCTION_SWITCHES "Ustawiane przełączniki"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trymy"
#define TR_FADEIN "Pojawia"
@ -451,7 +452,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "CALIBRATED ANALOGS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION "KALIBRACJA"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "USTAWIANE PRZEŁĄCZNIKI"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trymery => Subtrimy"
#else
@ -831,7 +832,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("SW","Switches"))
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analogi"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Ust. łącz.", TR_FUNCTION_SWITCHES ))
#define TR_TOUCH_NOTFOUND "Touch hardware not found"
#define TR_TOUCH_EXIT "Touch screen to exit"
#define TR_SET "[Set]"

View file

@ -271,6 +271,7 @@
#define TR_WARN_5VOLTS "Warning: output level is 5 volts"
#define TR_MS "ms"
#define TR_SWITCH "Chave"
#define TR_FUNCTION_SWITCHES "Botão customizável"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trims"
#define TR_FADEIN "Aparecer"
@ -451,7 +452,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "CALIBRATED ANALOGS"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RAW ANALOGS (5 Hz)"
#define TR_MENUCALIBRATION "CALIBRAGEM"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "BOTÃO CUSTOMIZÁVEL"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
@ -839,7 +840,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("SW","Switches"))
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analogs"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Bt Custom", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Touch hardware not found"
#define TR_TOUCH_EXIT "Touch screen to exit"
#define TR_SET "[Set]"

View file

@ -284,6 +284,7 @@
#define TR_WARN_5VOLTS "VARNING: Spänning ut är 5 volt"
#define TR_MS "ms"
#define TR_SWITCH "Brytare"
#define TR_FUNCTION_SWITCHES "Anpassningsbara brytare"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "Trimmar"
#define TR_FADEIN "Tona in"
@ -478,7 +479,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "KALIBRERADE ANALOGA"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "RÅA ANALOGA (5Hz)"
#define TR_MENUCALIBRATION "KALIBRERING"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "ANPASSNINGSBARA BRYTARE"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "[Spara trimvärden]"
#else
@ -859,7 +860,7 @@
#define TR_DEBUG "Debug"
#define TR_KEYS_BTN BUTTON(TR("Bryt.","Brytare"))
#define TR_ANALOGS_BTN BUTTON(TR("Ana.","Analoga"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("Anp. bryt.", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "Pekskärm hittas ej"
#define TR_TOUCH_EXIT "Peka på skärmen för att avsluta"
#define TR_SET BUTTON(TR("Def", "Ställ in"))

View file

@ -265,6 +265,7 @@
#define TR_WARN_5VOLTS "注意輸出電平是5V"
#define TR_MS "ms"
#define TR_SWITCH "開關"
#define TR_FUNCTION_SWITCHES "可自定義開關"
#define TR_SF_SWITCH "Trigger"
#define TR_TRIMS "微調"
#define TR_FADEIN "漸入"
@ -450,7 +451,7 @@
#define TR_MENU_RADIO_ANALOGS_CALIB "已校準的類比值"
#define TR_MENU_RADIO_ANALOGS_RAWLOWFPS "原始類比值 (5 Hz)"
#define TR_MENUCALIBRATION "校準"
#define TR_MENU_FSWITCH "FUNCTION SWITCHES"
#define TR_MENU_FSWITCH "可自定義開關"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "將當前微調量保存至中點"
#else
@ -835,7 +836,7 @@
#define TR_DEBUG "調試"
#define TR_KEYS_BTN BUTTON("按鍵")
#define TR_ANALOGS_BTN BUTTON(TR("類比", "類比"))
#define TR_FS_BTN BUTTON(TR("F. Switches", "Function switches"))
#define TR_FS_BTN BUTTON(TR("自定義開關", TR_FUNCTION_SWITCHES))
#define TR_TOUCH_NOTFOUND "未找到觸摸硬件"
#define TR_TOUCH_EXIT "點擊屏幕退出"
#define TR_SET BUTTON("設置")

View file

@ -21,13 +21,15 @@ TRIMS = [
{ "name": "T4", "dec": "RHL", "inc": "RHR", "input": "RH" },
{ "name": "T5", "dec": "LSD", "inc": "LSU" },
{ "name": "T6", "dec": "RSD", "inc": "RSU" },
{ "name": "T7", "dec": "T7L", "inc": "T7R" },
{ "name": "T8", "dec": "T8D", "inc": "T8U" },
# Surface
{ "name": "T1", "dec": "T1L", "inc": "T1R", "input": "ST" },
{ "name": "T2", "dec": "T2L", "inc": "T2R", "input": "TH" },
{ "name": "T3", "dec": "T3L", "inc": "T3R"},
{ "name": "T4", "dec": "T4L", "inc": "T4R"},
{ "name": "T5", "dec": "T5L", "inc": "T5R" },
{ "name": "T6", "dec": "T6L", "inc": "T6R" },
{ "name": "T6", "dec": "T6D", "inc": "T6U" },
]
KEYS = [

View file

@ -293,6 +293,65 @@ LEGACY_NAMES = [
}
}
},
{
"targets": {"t20"},
"inputs": {
"LH": {
"yaml": "Rud"
},
"LV": {
"yaml": "Ele"
},
"RV": {
"yaml": "Thr"
},
"RH": {
"yaml": "Ail"
},
"P1": {
"yaml": "POT1",
"lua": "s1",
"label": "S1",
"short_label": "1",
"description": "Potentiometer 1"
},
"P2": {
"yaml": "POT2",
"lua": "s2",
"label": "S2",
"short_label": "2",
"description": "Potentiometer 2"
},
"SL1": {
"yaml": "SLIDER1",
"lua": "s3",
"label": "S3",
"short_label": "3",
"description": "Potentiometer 3"
},
"SL2": {
"yaml": "SLIDER2",
"lua": "s4",
"label": "S4",
"short_label": "4",
"description": "Potentiometer 4"
},
"SL3": {
"yaml": "SLIDER3",
"lua": "sl",
"label": "SL",
"short_label": "L",
"description": "Right finger slider"
},
"SL4": {
"yaml": "SLIDER4",
"lua": "sr",
"label": "SR",
"short_label": "R",
"description": "Right finger slider"
}
}
},
{
"targets": {"x9lite","x9lites"},
"inputs": {

View file

@ -13,6 +13,14 @@ POT_CONFIG = {
"P1": { "default": "WITH_DETENT" },
"P2": { "default": "WITH_DETENT" }
},
"t20": {
"P1": { "default": "WITH_DETENT" },
"P2": { "default": "WITH_DETENT" },
"SL1": { "default": "SLIDER_WITH_DETENT" },
"SL2": { "default": "SLIDER_WITH_DETENT" },
"SL3": { "default": "SLIDER_WITH_DETENT" },
"SL4": { "default": "SLIDER_WITH_DETENT" },
},
"t12": {
"P1": { "default": "WITHOUT_DETENT" },
"P2": { "default": "WITHOUT_DETENT" }

View file

@ -112,6 +112,20 @@ SWITCH_CONFIG = {
"SF": { "default": "2POS", "display": [ 1, 2 ] },
"SH": { "default": "TOGGLE", "display": [ 1, 3 ] },
},
"t20": {
# left side
"SA": { "default": "2POS", "display": [ 0, 0 ] },
"SC": { "default": "3POS", "display": [ 0, 1 ] },
"SE": { "default": "2POS", "display": [ 0, 2 ] },
"SG": { "default": "TOGGLE", "display": [ 0, 3 ] },
"SI": { "default": "TOGGLE", "display": [ 0, 4 ] },
# right side
"SB": { "default": "2POS", "display": [ 1, 0 ] },
"SD": { "default": "3POS", "display": [ 1, 1 ] },
"SF": { "default": "2POS", "display": [ 1, 2 ] },
"SH": { "default": "TOGGLE", "display": [ 1, 3 ] },
"SJ": { "default": "TOGGLE", "display": [ 1, 4 ] }
},
"tx12": {
# left side
"SA": { "default": "TOGGLE", "display": [ 0, 0 ] },

View file

@ -70,4 +70,8 @@ boards = {
"PCB": "X7",
"PCBREV": "COMMANDO8",
},
"T20": {
"PCB": "X7",
"PCBREV": "T20",
},
}

View file

@ -68,6 +68,7 @@ declare -a simulator_plugins=(x9lite x9lites
t8 t12 tx12 tx12mk2
zorro commando8 boxer
tlite tpro lr3pro
t20
x9d x9dp x9dp2019 x9e
xlite xlites
nv14
@ -122,6 +123,9 @@ do
tpro)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TPRO"
;;
t20)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20"
;;
xlite)
BUILD_OPTIONS+="-DPCB=XLITE"
;;

View file

@ -134,6 +134,9 @@ do
tprov2)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TPROV2"
;;
t20)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20"
;;
lr3pro)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=LR3PRO"
;;

View file

@ -103,6 +103,9 @@ do
tlitef4)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TLITEF4"
;;
t20)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20"
;;
xlite)
BUILD_OPTIONS+="-DPCB=XLITE"
;;

View file

@ -6,7 +6,7 @@ set -e
: "${SRCDIR:=$(dirname "$(pwd)/$0")/..}"
: ${FLAVOR:="nv14;t12;t16;t18;t8;zorro;commando8;tlite;tpro;tprov2;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;commando8;tlite;tpro;tprov2;t20;lr3pro;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
@ -63,6 +63,9 @@ do
tprov2)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TPROV2"
;;
t20)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20"
;;
lr3pro)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=LR3PRO"
;;

View file

@ -8,7 +8,7 @@ if [[ -n ${GCC_ARM} ]] ; then
export PATH=${GCC_ARM}:$PATH
fi
: ${FLAVOR:="tx16s;x12s;nv14;x9d;x9dp;x9e;x9lite;xlites;x7;tpro"}
: ${FLAVOR:="tx16s;x12s;nv14;x9d;x9dp;x9e;x9lite;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"}
@ -65,6 +65,9 @@ do
tpro)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TPRO"
;;
t20)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20"
;;
xlite)
BUILD_OPTIONS+="-DPCB=XLITE"
;;

View file

@ -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|tlite|tpro|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|boxer|t8|zorro|tlite|tpro|t20/lr3pro|xlite|xlites|x9dp2019|x9e|x9e-hall|t16|t18|nv14|commando8|
export BUILD_OPTIONS="-DDEFAULT_MODE=2 -DGVARS=YES -DPPM_UNIT=US"
@ -51,6 +51,9 @@ case $RADIO_TYPE in
tpro)
BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=TPRO"
;;
t20)
BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=T20"
;;
lr3pro)
BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=LR3PRO"
;;