mirror of
https://github.com/opentx/opentx.git
synced 2025-07-21 23:35:17 +03:00
Merge branch 'bsongis/pxx2' into bsongis/x-lites
This commit is contained in:
commit
3dfe50c10b
55 changed files with 612 additions and 509 deletions
|
@ -1451,3 +1451,9 @@ Jaroslav Gazik
|
||||||
Philippe Desrichard
|
Philippe Desrichard
|
||||||
Vincent Heron
|
Vincent Heron
|
||||||
Marcel Schäfer
|
Marcel Schäfer
|
||||||
|
Stefano Pascucci
|
||||||
|
Frédéric Bourgois
|
||||||
|
Stefan Hufnagl
|
||||||
|
Jean Philippe Bonacci
|
||||||
|
Jack Mitchell
|
||||||
|
Santiago Iglesias Garcia
|
||||||
|
|
|
@ -46,8 +46,6 @@ option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF)
|
||||||
option(FRSKY_STICKS "Reverse sticks for FrSky sticks" OFF)
|
option(FRSKY_STICKS "Reverse sticks for FrSky sticks" OFF)
|
||||||
option(NANO "Use nano newlib and binalloc")
|
option(NANO "Use nano newlib and binalloc")
|
||||||
option(NIGHTLY_BUILD_WARNING "Warn this is a nightly build" OFF)
|
option(NIGHTLY_BUILD_WARNING "Warn this is a nightly build" OFF)
|
||||||
option(MODULE_R9M_FLEX_FW "Add R9M options for non certified firmwwares" OFF)
|
|
||||||
option(PXX2 "Enable PXX v2 support" OFF)
|
|
||||||
|
|
||||||
# since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags.
|
# since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags.
|
||||||
set(FIRMWARE_C_FLAGS "" CACHE STRING "Additional flags for firmware target c compiler (note: all CMAKE_C_FLAGS[_*] are ignored for firmware/bootloader).")
|
set(FIRMWARE_C_FLAGS "" CACHE STRING "Additional flags for firmware target c compiler (note: all CMAKE_C_FLAGS[_*] are ignored for firmware/bootloader).")
|
||||||
|
@ -313,14 +311,6 @@ if(NIGHTLY_BUILD_WARNING)
|
||||||
add_definitions(-DNIGHTLY_BUILD_WARNING)
|
add_definitions(-DNIGHTLY_BUILD_WARNING)
|
||||||
endif(NIGHTLY_BUILD_WARNING)
|
endif(NIGHTLY_BUILD_WARNING)
|
||||||
|
|
||||||
if(MODULE_R9M_FLEX_FW)
|
|
||||||
add_definitions(-DMODULE_R9M_FLEX_FW)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PXX2)
|
|
||||||
add_definitions(-DPXX2)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(SRC
|
set(SRC
|
||||||
${SRC}
|
${SRC}
|
||||||
opentx.cpp
|
opentx.cpp
|
||||||
|
|
|
@ -226,12 +226,12 @@ enum BeeperMode {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||||
#define IS_INTERNAL_MODULE_ENABLED() (g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE)
|
#define IS_INTERNAL_MODULE_ENABLED() (g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE)
|
||||||
#elif defined(PCBSKY9X)
|
#elif defined(PCBSKY9X)
|
||||||
#define IS_INTERNAL_MODULE_ENABLED() (false)
|
#define IS_INTERNAL_MODULE_ENABLED() (false)
|
||||||
#endif
|
#endif
|
||||||
#define IS_EXTERNAL_MODULE_ENABLED() (g_model.moduleData[EXTERNAL_MODULE].type != MODULE_TYPE_NONE)
|
|
||||||
|
|
||||||
|
#define IS_EXTERNAL_MODULE_ENABLED() (g_model.moduleData[EXTERNAL_MODULE].type != MODULE_TYPE_NONE)
|
||||||
|
|
||||||
enum UartModes {
|
enum UartModes {
|
||||||
#if defined(CLI) || defined(DEBUG)
|
#if defined(CLI) || defined(DEBUG)
|
||||||
|
|
|
@ -406,9 +406,18 @@ PACK(struct ModuleData {
|
||||||
int8_t rfProtocol:4;
|
int8_t rfProtocol:4;
|
||||||
uint8_t channelsStart;
|
uint8_t channelsStart;
|
||||||
int8_t channelsCount; // 0=8 channels
|
int8_t channelsCount; // 0=8 channels
|
||||||
uint8_t failsafeMode:4; // only 3 bits used
|
union {
|
||||||
uint8_t subType:3;
|
struct {
|
||||||
uint8_t invertedSerial:1; // telemetry serial inverted from standard
|
uint8_t failsafeMode:4; // only 3 bits used
|
||||||
|
uint8_t subType:3;
|
||||||
|
uint8_t invertedSerial:1; // telemetry serial inverted from standard
|
||||||
|
};
|
||||||
|
struct {
|
||||||
|
uint8_t failsafeMode:4; // only 3 bits used
|
||||||
|
uint8_t freq:2;
|
||||||
|
uint8_t region:2;
|
||||||
|
} r9m;
|
||||||
|
};
|
||||||
int16_t failsafeChannels[MAX_OUTPUT_CHANNELS];
|
int16_t failsafeChannels[MAX_OUTPUT_CHANNELS];
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -155,8 +155,7 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
|
||||||
active &= (bool)CFN_ACTIVE(cfn);
|
active &= (bool)CFN_ACTIVE(cfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (active || IS_PLAY_BOTH_FUNC(CFN_FUNC(cfn))) {
|
if (active) {
|
||||||
|
|
||||||
switch (CFN_FUNC(cfn)) {
|
switch (CFN_FUNC(cfn)) {
|
||||||
|
|
||||||
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
||||||
|
|
|
@ -97,6 +97,9 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||||
|
#if !defined(PCBXLITE)
|
||||||
|
ITEM_MODEL_EXTERNAL_MODULE_FREQ,
|
||||||
|
#endif
|
||||||
#if defined(PCBSKY9X) && !defined(REVA)
|
#if defined(PCBSKY9X) && !defined(REVA)
|
||||||
ITEM_MODEL_EXTRA_MODULE_LABEL,
|
ITEM_MODEL_EXTRA_MODULE_LABEL,
|
||||||
ITEM_MODEL_EXTRA_MODULE_CHANNELS,
|
ITEM_MODEL_EXTRA_MODULE_CHANNELS,
|
||||||
|
@ -160,17 +163,21 @@ enum MenuModelSetupItems {
|
||||||
#define OUTPUT_TYPE_ROWS()
|
#define OUTPUT_TYPE_ROWS()
|
||||||
#endif
|
#endif
|
||||||
#define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0)
|
#define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0)
|
||||||
|
#if defined(PCBXLITE)
|
||||||
#define EXTERNAL_MODULE_MODE_ROWS (isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
#define EXTERNAL_MODULE_MODE_ROWS (isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
||||||
|
#else
|
||||||
|
#define EXTERNAL_MODULE_MODE_ROWS (isModuleXJT(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
||||||
|
#endif
|
||||||
#define CURSOR_ON_CELL (true)
|
#define CURSOR_ON_CELL (true)
|
||||||
#define MODEL_SETUP_MAX_LINES (HEADER_LINE+ITEM_MODEL_SETUP_MAX)
|
#define MODEL_SETUP_MAX_LINES (HEADER_LINE+ITEM_MODEL_SETUP_MAX)
|
||||||
#define POT_WARN_ITEMS() ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0)
|
#define POT_WARN_ITEMS() ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0)
|
||||||
#define TIMER_ROWS 2, 0, 0, 0, 0
|
#define TIMER_ROWS 2, 0, 0, 0, 0
|
||||||
#if defined(PCBSKY9X) && !defined(REVA)
|
#if defined(PCBSKY9X) && !defined(REVA)
|
||||||
#define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2,
|
#define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2,
|
||||||
#else
|
#elif defined(PCBXLITE)
|
||||||
#define EXTRA_MODULE_ROWS
|
#define EXTRA_MODULE_ROWS
|
||||||
|
#else
|
||||||
|
#define EXTRA_MODULE_ROWS isR9MMFlex(EXTERNAL_MODULE) ? (uint8_t)1: (uint8_t)HIDDEN_ROW,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBX7)
|
#if defined(PCBX7)
|
||||||
|
@ -733,8 +740,13 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||||
else if (isModuleDSM2(EXTERNAL_MODULE))
|
else if (isModuleDSM2(EXTERNAL_MODULE))
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||||
|
#if defined(PCBXLITE)
|
||||||
else if (isModuleR9M(EXTERNAL_MODULE))
|
else if (isModuleR9M(EXTERNAL_MODULE))
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||||
|
#else
|
||||||
|
else if (isR9ModuleRunning(EXTERNAL_MODULE))
|
||||||
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].r9m.region, (menuHorizontalPosition==1 ? attr : 0));
|
||||||
|
#endif
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||||
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
@ -761,6 +773,7 @@ void menuModelSetup(event_t event)
|
||||||
case 1:
|
case 1:
|
||||||
if (isModuleDSM2(EXTERNAL_MODULE))
|
if (isModuleDSM2(EXTERNAL_MODULE))
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
|
#if defined(PCBXLITE)
|
||||||
else if (isModuleR9M(EXTERNAL_MODULE)) {
|
else if (isModuleR9M(EXTERNAL_MODULE)) {
|
||||||
uint8_t newR9MType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL, isR9MModeAvailable);
|
uint8_t newR9MType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL, isR9MModeAvailable);
|
||||||
if (newR9MType != g_model.moduleData[EXTERNAL_MODULE].subType && newR9MType > MODULE_SUBTYPE_R9M_EU) {
|
if (newR9MType != g_model.moduleData[EXTERNAL_MODULE].subType && newR9MType > MODULE_SUBTYPE_R9M_EU) {
|
||||||
|
@ -770,7 +783,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
@ -1197,6 +1210,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PCBXLITE)
|
||||||
if (isModuleR9M(moduleIdx)) {
|
if (isModuleR9M(moduleIdx)) {
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||||
|
@ -1207,6 +1221,9 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isModuleSBUS(moduleIdx)) {
|
else if (isModuleSBUS(moduleIdx)) {
|
||||||
|
#else
|
||||||
|
if (isModuleSBUS(moduleIdx)) {
|
||||||
|
#endif
|
||||||
lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE);
|
lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE);
|
||||||
putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT);
|
putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT);
|
||||||
}
|
}
|
||||||
|
@ -1252,6 +1269,19 @@ void menuModelSetup(event_t event)
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#if !defined(PCBXLITE)
|
||||||
|
case ITEM_MODEL_EXTERNAL_MODULE_FREQ:
|
||||||
|
{
|
||||||
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
|
lcdDrawTextAlignedLeft(y, STR_FREQUENCY);
|
||||||
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9MFLEX_FREQ, g_model.moduleData[moduleIdx].r9m.freq, LEFT | attr);
|
||||||
|
if (attr)
|
||||||
|
{
|
||||||
|
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].r9m.freq, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||||
|
|
|
@ -543,7 +543,7 @@ void menuModelTelemetryFrsky(event_t event)
|
||||||
|
|
||||||
case ITEM_TELEMETRY_RSSI_LABEL:
|
case ITEM_TELEMETRY_RSSI_LABEL:
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
if (telemetryProtocol == PROTOCOL_MULTIMODULE &&
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE &&
|
||||||
g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
|
g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
|
||||||
lcdDrawTextAlignedLeft(y, "RSNR");
|
lcdDrawTextAlignedLeft(y, "RSNR");
|
||||||
else
|
else
|
||||||
|
|
|
@ -88,6 +88,7 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||||
|
ITEM_MODEL_EXTERNAL_MODULE_FREQ,
|
||||||
ITEM_MODEL_TRAINER_LABEL,
|
ITEM_MODEL_TRAINER_LABEL,
|
||||||
ITEM_MODEL_TRAINER_MODE,
|
ITEM_MODEL_TRAINER_MODE,
|
||||||
ITEM_MODEL_TRAINER_LINE1,
|
ITEM_MODEL_TRAINER_LINE1,
|
||||||
|
@ -253,7 +254,8 @@ int getSwitchWarningsCount()
|
||||||
|
|
||||||
#define TIMER_ROWS(x) 2|NAVIGATION_LINE_BY_LINE, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t) 1 : (uint8_t)0
|
#define TIMER_ROWS(x) 2|NAVIGATION_LINE_BY_LINE, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t) 1 : (uint8_t)0
|
||||||
|
|
||||||
#define EXTERNAL_MODULE_MODE_ROWS (isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : isModuleMultimodule(EXTERNAL_MODULE) ? MULTIMODULE_MODE_ROWS(EXTERNAL_MODULE) : (uint8_t)0
|
#define EXTERNAL_MODULE_MODE_ROWS (isModuleXJT(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
||||||
|
#define EXTRA_MODULE_ROWS isR9MMFlex(EXTERNAL_MODULE) ? (uint8_t)1: (uint8_t)HIDDEN_ROW,
|
||||||
|
|
||||||
#if TIMERS == 1
|
#if TIMERS == 1
|
||||||
#define TIMERS_ROWS TIMER_ROWS(0)
|
#define TIMERS_ROWS TIMER_ROWS(0)
|
||||||
|
@ -296,6 +298,7 @@ void menuModelSetup(event_t event)
|
||||||
EXTERNAL_MODULE_OPTION_ROW,
|
EXTERNAL_MODULE_OPTION_ROW,
|
||||||
MULTIMODULE_MODULE_ROWS
|
MULTIMODULE_MODULE_ROWS
|
||||||
EXTERNAL_MODULE_POWER_ROW,
|
EXTERNAL_MODULE_POWER_ROW,
|
||||||
|
EXTRA_MODULE_ROWS
|
||||||
LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS});
|
LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS});
|
||||||
|
|
||||||
MENU_CHECK(STR_MENUSETUP, menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_MAX);
|
MENU_CHECK(STR_MENUSETUP, menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_MAX);
|
||||||
|
@ -733,8 +736,8 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||||
else if (isModuleDSM2(EXTERNAL_MODULE))
|
else if (isModuleDSM2(EXTERNAL_MODULE))
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||||
else if (isModuleR9M(EXTERNAL_MODULE))
|
else if (isR9ModuleRunning(EXTERNAL_MODULE))
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].r9m.region, (menuHorizontalPosition==1 ? attr : 0));
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
@ -771,15 +774,6 @@ void menuModelSetup(event_t event)
|
||||||
case 1:
|
case 1:
|
||||||
if (isModuleDSM2(EXTERNAL_MODULE))
|
if (isModuleDSM2(EXTERNAL_MODULE))
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
else if (isModuleR9M(EXTERNAL_MODULE)) {
|
|
||||||
uint8_t newR9MType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL, isR9MModeAvailable);
|
|
||||||
if (newR9MType != g_model.moduleData[EXTERNAL_MODULE].subType && newR9MType > MODULE_SUBTYPE_R9M_EU) {
|
|
||||||
POPUP_WARNING(STR_R9MFLEXWARN1);
|
|
||||||
const char * w = STR_R9MFLEXWARN2;
|
|
||||||
SET_WARNING_INFO(w, strlen(w), 0);
|
|
||||||
}
|
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
|
||||||
}
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
@ -1129,16 +1123,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (isModuleR9M(moduleIdx)) {
|
if (isModuleSBUS(moduleIdx)) {
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
|
||||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
|
||||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_TELEM_ON);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (isModuleSBUS(moduleIdx)) {
|
|
||||||
lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE);
|
lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE);
|
||||||
putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT);
|
putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT);
|
||||||
}
|
}
|
||||||
|
@ -1174,6 +1159,18 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ITEM_MODEL_EXTERNAL_MODULE_FREQ:
|
||||||
|
{
|
||||||
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
|
lcdDrawTextAlignedLeft(y, STR_FREQUENCY);
|
||||||
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9MFLEX_FREQ, g_model.moduleData[moduleIdx].r9m.freq, LEFT | attr);
|
||||||
|
if (attr)
|
||||||
|
{
|
||||||
|
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].r9m.freq, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#if defined (MULTIMODULE)
|
#if defined (MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||||
|
|
|
@ -82,6 +82,7 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||||
|
ITEM_MODEL_EXTERNAL_MODULE_FREQ,
|
||||||
ITEM_MODEL_TRAINER_LABEL,
|
ITEM_MODEL_TRAINER_LABEL,
|
||||||
ITEM_MODEL_TRAINER_MODE,
|
ITEM_MODEL_TRAINER_MODE,
|
||||||
ITEM_MODEL_TRAINER_LINE1,
|
ITEM_MODEL_TRAINER_LINE1,
|
||||||
|
@ -236,7 +237,8 @@ int getSwitchWarningsCount()
|
||||||
|
|
||||||
#define TIMER_ROWS(x) NAVIGATION_LINE_BY_LINE|1, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 : (uint8_t)0
|
#define TIMER_ROWS(x) NAVIGATION_LINE_BY_LINE|1, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 : (uint8_t)0
|
||||||
|
|
||||||
#define EXTERNAL_MODULE_MODE_ROWS (isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : isModuleMultimodule(EXTERNAL_MODULE) ? MULTIMODULE_MODE_ROWS(EXTERNAL_MODULE) : (uint8_t)0
|
#define EXTERNAL_MODULE_MODE_ROWS (isModuleXJT(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
||||||
|
#define EXTRA_MODULE_ROWS isR9MMFlex(EXTERNAL_MODULE) ? (uint8_t)1: (uint8_t)HIDDEN_ROW,
|
||||||
|
|
||||||
#if TIMERS == 1
|
#if TIMERS == 1
|
||||||
#define TIMERS_ROWS TIMER_ROWS(0)
|
#define TIMERS_ROWS TIMER_ROWS(0)
|
||||||
|
@ -285,6 +287,7 @@ bool menuModelSetup(event_t event)
|
||||||
EXTERNAL_MODULE_OPTION_ROW,
|
EXTERNAL_MODULE_OPTION_ROW,
|
||||||
MULTIMODULE_MODULE_ROWS
|
MULTIMODULE_MODULE_ROWS
|
||||||
EXTERNAL_MODULE_POWER_ROW,
|
EXTERNAL_MODULE_POWER_ROW,
|
||||||
|
EXTRA_MODULE_ROWS
|
||||||
LABEL(Trainer),
|
LABEL(Trainer),
|
||||||
0,
|
0,
|
||||||
TRAINER_LINE1_ROWS,
|
TRAINER_LINE1_ROWS,
|
||||||
|
@ -693,8 +696,8 @@ bool menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
||||||
else if (isModuleDSM2(EXTERNAL_MODULE))
|
else if (isModuleDSM2(EXTERNAL_MODULE))
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
||||||
else if (isModuleR9M(EXTERNAL_MODULE))
|
else if (isR9ModuleRunning(EXTERNAL_MODULE))
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].r9m.region, (menuHorizontalPosition==1 ? attr : 0));
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||||
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
@ -728,15 +731,6 @@ bool menuModelSetup(event_t event)
|
||||||
case 1:
|
case 1:
|
||||||
if (isModuleDSM2(EXTERNAL_MODULE))
|
if (isModuleDSM2(EXTERNAL_MODULE))
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
else if (isModuleR9M(EXTERNAL_MODULE)) {
|
|
||||||
uint8_t newR9MType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL, isR9MModeAvailable);
|
|
||||||
if (newR9MType != g_model.moduleData[EXTERNAL_MODULE].subType && newR9MType > MODULE_SUBTYPE_R9M_EU) {
|
|
||||||
POPUP_WARNING(STR_R9MFLEXWARN1);
|
|
||||||
const char * w = STR_R9MFLEXWARN2;
|
|
||||||
SET_WARNING_INFO(w, strlen(w), 0);
|
|
||||||
}
|
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
|
||||||
}
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
@ -1068,16 +1062,7 @@ bool menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (isModuleR9M(moduleIdx)) {
|
if (isModuleSBUS(moduleIdx)) {
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODULE_TELEMETRY);
|
|
||||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
|
||||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_TELEM_ON);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (isModuleSBUS(moduleIdx)) {
|
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_WARN_BATTVOLTAGE);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_WARN_BATTVOLTAGE);
|
||||||
drawValueWithUnit(MODEL_SETUP_4TH_COLUMN, y, getBatteryVoltage(), UNIT_VOLTS, attr|PREC2|LEFT);
|
drawValueWithUnit(MODEL_SETUP_4TH_COLUMN, y, getBatteryVoltage(), UNIT_VOLTS, attr|PREC2|LEFT);
|
||||||
}
|
}
|
||||||
|
@ -1116,6 +1101,18 @@ bool menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ITEM_MODEL_EXTERNAL_MODULE_FREQ:
|
||||||
|
{
|
||||||
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_FREQUENCY);
|
||||||
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9MFLEX_FREQ, g_model.moduleData[moduleIdx].r9m.freq, LEFT | attr);
|
||||||
|
if (attr)
|
||||||
|
{
|
||||||
|
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].r9m.freq, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||||
|
|
|
@ -33,12 +33,12 @@ void drawColumnHeader(const char * const * headers, const char * const * descrip
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t __alpha_button_on[] {
|
static const uint8_t __alpha_button_on[] __ALIGNED(4) = {
|
||||||
#include "alpha_button_on.lbm"
|
#include "alpha_button_on.lbm"
|
||||||
};
|
};
|
||||||
Bitmap ALPHA_BUTTON_ON(BMP_ARGB4444, (const uint16_t*)__alpha_button_on);
|
Bitmap ALPHA_BUTTON_ON(BMP_ARGB4444, (const uint16_t*)__alpha_button_on);
|
||||||
|
|
||||||
const uint8_t __alpha_button_off[] {
|
static const uint8_t __alpha_button_off[] __ALIGNED(4) = {
|
||||||
#include "alpha_button_off.lbm"
|
#include "alpha_button_off.lbm"
|
||||||
};
|
};
|
||||||
Bitmap ALPHA_BUTTON_OFF(BMP_ARGB4444, (const uint16_t*)__alpha_button_off);
|
Bitmap ALPHA_BUTTON_OFF(BMP_ARGB4444, (const uint16_t*)__alpha_button_off);
|
||||||
|
|
|
@ -54,6 +54,8 @@ bool isSwitchAvailableInCustomFunctions(int swtch);
|
||||||
bool isSwitchAvailableInMixes(int swtch);
|
bool isSwitchAvailableInMixes(int swtch);
|
||||||
bool isSwitchAvailableInTimers(int swtch);
|
bool isSwitchAvailableInTimers(int swtch);
|
||||||
bool isR9MModeAvailable(int mode);
|
bool isR9MModeAvailable(int mode);
|
||||||
|
bool isR9ModuleRunning(int module);
|
||||||
|
bool isR9MMFlex(int module);
|
||||||
bool isModuleAvailable(int module);
|
bool isModuleAvailable(int module);
|
||||||
bool isRfProtocolAvailable(int protocol);
|
bool isRfProtocolAvailable(int protocol);
|
||||||
bool isTelemetryProtocolAvailable(int protocol);
|
bool isTelemetryProtocolAvailable(int protocol);
|
||||||
|
@ -155,12 +157,18 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol);
|
||||||
|
|
||||||
#define FAILSAFE_ROWS(x) ((isModuleXJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || isModuleR9M(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW
|
#define FAILSAFE_ROWS(x) ((isModuleXJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || isModuleR9M(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW
|
||||||
|
|
||||||
|
#if defined(PCBXLITE)
|
||||||
#define EXTERNAL_MODULE_OPTION_ROW (isModuleR9M(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW)
|
#define EXTERNAL_MODULE_OPTION_ROW (isModuleR9M(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW)
|
||||||
|
#else
|
||||||
|
#define EXTERNAL_MODULE_OPTION_ROW (isR9ModuleRunning(EXTERNAL_MODULE) ? HIDDEN_ROW : isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PCBXLITE) && !defined(MODULE_R9M_FULLSIZE)
|
#if defined(PCBXLITE) && !defined(MODULE_R9M_FULLSIZE)
|
||||||
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (isModuleR9M_FCC_VARIANT(EXTERNAL_MODULE) ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW
|
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (isModuleR9M_FCC_VARIANT(EXTERNAL_MODULE) ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW
|
||||||
#else
|
#elif defined(PCBXLITE)
|
||||||
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW
|
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW
|
||||||
|
#else
|
||||||
|
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isR9ModuleRunning(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags);
|
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags);
|
||||||
|
|
|
@ -486,6 +486,15 @@ bool isSourceAvailableInResetSpecialFunction(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isR9ModuleRunning(int module)
|
||||||
|
{
|
||||||
|
#if defined(SIMU)
|
||||||
|
return g_model.moduleData[module].type == MODULE_TYPE_R9M && TELEMETRY_STREAMING(); // Simu uses telemetry simu to activate/desactivate R9
|
||||||
|
#else
|
||||||
|
return g_model.moduleData[module].type == MODULE_TYPE_R9M && R9ModuleStreaming;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if defined(PCBXLITE)
|
||||||
bool isR9MModeAvailable(int mode)
|
bool isR9MModeAvailable(int mode)
|
||||||
{
|
{
|
||||||
#if defined(MODULE_R9M_FLEX_FW)
|
#if defined(MODULE_R9M_FLEX_FW)
|
||||||
|
@ -495,6 +504,17 @@ bool isR9MModeAvailable(int mode)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
bool isR9MModeAvailable(int mode)
|
||||||
|
{
|
||||||
|
return mode <= MODULE_SUBTYPE_R9M_EUPLUS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
bool isR9MMFlex(int module)
|
||||||
|
{
|
||||||
|
return g_model.moduleData[module].r9m.region == MODULE_R9M_REGION_FLEX;
|
||||||
|
}
|
||||||
|
|
||||||
bool isModuleAvailable(int module)
|
bool isModuleAvailable(int module)
|
||||||
{
|
{
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
|
@ -516,7 +536,14 @@ bool isModuleAvailable(int module)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||||
|
if (module == MODULE_TYPE_R9M && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isRfProtocolAvailable(int protocol)
|
bool isRfProtocolAvailable(int protocol)
|
||||||
|
@ -531,29 +558,35 @@ bool isRfProtocolAvailable(int protocol)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||||
|
if (protocol != RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isTelemetryProtocolAvailable(int protocol)
|
bool isTelemetryProtocolAvailable(int protocol)
|
||||||
{
|
{
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if (protocol == PROTOCOL_FRSKY_D_SECONDARY && g_eeGeneral.serial2Mode != UART_MODE_TELEMETRY) {
|
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY && g_eeGeneral.serial2Mode != UART_MODE_TELEMETRY) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (protocol== PROTOCOL_PULSES_CROSSFIRE) {
|
if (protocol== PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(MULTIMODULE)
|
#if !defined(MULTIMODULE)
|
||||||
if (protocol == PROTOCOL_SPEKTRUM || protocol == PROTOCOL_FLYSKY_IBUS || protocol == PROTOCOL_MULTIMODULE) {
|
if (protocol == PROTOCOL_TELEMETRY_SPEKTRUM || protocol == PROTOCOL_TELEMETRY_FLYSKY_IBUS || protocol == PROTOCOL_TELEMETRY_MULTIMODULE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBHORUS)
|
#if defined(PCBHORUS)
|
||||||
if (protocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -176,7 +176,7 @@ const char * sportUpdatePowerOn(ModuleIndex module)
|
||||||
sportUpdateState = SPORT_POWERUP_REQ;
|
sportUpdateState = SPORT_POWERUP_REQ;
|
||||||
sportWaitState(SPORT_IDLE, 500); // Clear the fifo
|
sportWaitState(SPORT_IDLE, 500); // Clear the fifo
|
||||||
|
|
||||||
telemetryInit(PROTOCOL_FRSKY_SPORT);
|
telemetryInit(PROTOCOL_TELEMETRY_FRSKY_SPORT);
|
||||||
|
|
||||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||||
if (module == INTERNAL_MODULE)
|
if (module == INTERNAL_MODULE)
|
||||||
|
@ -199,7 +199,7 @@ const char * sportUpdatePowerOn(ModuleIndex module)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (telemetryProtocol != PROTOCOL_FRSKY_SPORT) {
|
if (telemetryProtocol != PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||||
return TR("Not responding", "Not S.Port 1");
|
return TR("Not responding", "Not S.Port 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,20 +23,8 @@
|
||||||
|
|
||||||
#include "datastructs.h"
|
#include "datastructs.h"
|
||||||
|
|
||||||
#define WARN_THR_BIT 0x01
|
#define EEPROM_VER 218
|
||||||
#define WARN_BEP_BIT 0x80
|
#define FIRST_CONV_EEPROM_VER 216
|
||||||
#define WARN_SW_BIT 0x02
|
|
||||||
#define WARN_MEM_BIT 0x04
|
|
||||||
#define WARN_BVAL_BIT 0x38
|
|
||||||
|
|
||||||
#define WARN_THR (!(g_eeGeneral.warnOpts & WARN_THR_BIT))
|
|
||||||
#define WARN_BEP (!(g_eeGeneral.warnOpts & WARN_BEP_BIT))
|
|
||||||
#define WARN_SW (!(g_eeGeneral.warnOpts & WARN_SW_BIT))
|
|
||||||
#define WARN_MEM (!(g_eeGeneral.warnOpts & WARN_MEM_BIT))
|
|
||||||
#define BEEP_VAL ( (g_eeGeneral.warnOpts & WARN_BVAL_BIT) >>3 )
|
|
||||||
|
|
||||||
#define EEPROM_VER 218
|
|
||||||
#define FIRST_CONV_EEPROM_VER 216
|
|
||||||
|
|
||||||
#define GET_PPM_POLARITY(idx) g_model.moduleData[idx].ppm.pulsePol
|
#define GET_PPM_POLARITY(idx) g_model.moduleData[idx].ppm.pulsePol
|
||||||
#define GET_SBUS_POLARITY(idx) g_model.moduleData[idx].sbus.noninverted
|
#define GET_SBUS_POLARITY(idx) g_model.moduleData[idx].sbus.noninverted
|
||||||
|
@ -53,10 +41,7 @@
|
||||||
#define IS_TRAINER_EXTERNAL_MODULE() false
|
#define IS_TRAINER_EXTERNAL_MODULE() false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IS_PLAY_FUNC(func) ((func) >= FUNC_PLAY_SOUND && func <= FUNC_PLAY_VALUE)
|
#define IS_PLAY_FUNC(func) ((func) >= FUNC_PLAY_SOUND && func <= FUNC_PLAY_VALUE)
|
||||||
|
|
||||||
#define IS_PLAY_BOTH_FUNC(func) (0)
|
|
||||||
#define IS_VOLUME_FUNC(func) ((func) == FUNC_VOLUME)
|
|
||||||
|
|
||||||
#if defined(GVARS)
|
#if defined(GVARS)
|
||||||
#define IS_ADJUST_GV_FUNC(func) ((func) == FUNC_ADJUST_GVAR)
|
#define IS_ADJUST_GV_FUNC(func) ((func) == FUNC_ADJUST_GVAR)
|
||||||
|
@ -141,21 +126,20 @@ enum CurveRefType {
|
||||||
CURVE_REF_CUSTOM
|
CURVE_REF_CUSTOM
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define MIN_EXPO_WEIGHT -100
|
#define MIN_EXPO_WEIGHT -100
|
||||||
#define EXPO_VALID(ed) ((ed)->mode)
|
#define EXPO_VALID(ed) ((ed)->mode)
|
||||||
#define EXPO_MODE_ENABLE(ed, v) (((v)<0 && ((ed)->mode&1)) || ((v)>=0 && ((ed)->mode&2)))
|
#define EXPO_MODE_ENABLE(ed, v) (((v)<0 && ((ed)->mode&1)) || ((v)>=0 && ((ed)->mode&2)))
|
||||||
|
|
||||||
#define limit_min_max_t int16_t
|
#define limit_min_max_t int16_t
|
||||||
#define LIMIT_EXT_PERCENT 150
|
#define LIMIT_EXT_PERCENT 150
|
||||||
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
||||||
#define PPM_CENTER_MAX 500
|
#define PPM_CENTER_MAX 500
|
||||||
#define LIMIT_MAX(lim) (GV_IS_GV_VALUE(lim->max, -GV_RANGELARGE, GV_RANGELARGE) ? GET_GVAR_PREC1(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode) : lim->max+1000)
|
#define LIMIT_MAX(lim) (GV_IS_GV_VALUE(lim->max, -GV_RANGELARGE, GV_RANGELARGE) ? GET_GVAR_PREC1(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode) : lim->max+1000)
|
||||||
#define LIMIT_MIN(lim) (GV_IS_GV_VALUE(lim->min, -GV_RANGELARGE, GV_RANGELARGE) ? GET_GVAR_PREC1(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode) : lim->min-1000)
|
#define LIMIT_MIN(lim) (GV_IS_GV_VALUE(lim->min, -GV_RANGELARGE, GV_RANGELARGE) ? GET_GVAR_PREC1(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode) : lim->min-1000)
|
||||||
#define LIMIT_OFS(lim) (GV_IS_GV_VALUE(lim->offset, -1000, 1000) ? GET_GVAR_PREC1(lim->offset, -1000, 1000, mixerCurrentFlightMode) : lim->offset)
|
#define LIMIT_OFS(lim) (GV_IS_GV_VALUE(lim->offset, -1000, 1000) ? GET_GVAR_PREC1(lim->offset, -1000, 1000, mixerCurrentFlightMode) : lim->offset)
|
||||||
#define LIMIT_MAX_RESX(lim) calc1000toRESX(LIMIT_MAX(lim))
|
#define LIMIT_MAX_RESX(lim) calc1000toRESX(LIMIT_MAX(lim))
|
||||||
#define LIMIT_MIN_RESX(lim) calc1000toRESX(LIMIT_MIN(lim))
|
#define LIMIT_MIN_RESX(lim) calc1000toRESX(LIMIT_MIN(lim))
|
||||||
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
||||||
|
|
||||||
#define TRIM_OFF (1)
|
#define TRIM_OFF (1)
|
||||||
#define TRIM_ON (0)
|
#define TRIM_ON (0)
|
||||||
|
@ -191,8 +175,6 @@ enum CurveRefType {
|
||||||
#define MD_OFFSET(md) (md->offset)
|
#define MD_OFFSET(md) (md->offset)
|
||||||
#define MD_OFFSET_TO_UNION(md, var) var.word = md->offset
|
#define MD_OFFSET_TO_UNION(md, var) var.word = md->offset
|
||||||
#define MD_UNION_TO_OFFSET(var, md) md->offset = var.word
|
#define MD_UNION_TO_OFFSET(var, md) md->offset = var.word
|
||||||
// #define MD_SETOFFSET(md, val) md->offset = val
|
|
||||||
|
|
||||||
|
|
||||||
enum LogicalSwitchesFunctions {
|
enum LogicalSwitchesFunctions {
|
||||||
LS_FUNC_NONE,
|
LS_FUNC_NONE,
|
||||||
|
@ -222,14 +204,6 @@ enum LogicalSwitchesFunctions {
|
||||||
#define MAX_LS_DELAY 250 /*25s*/
|
#define MAX_LS_DELAY 250 /*25s*/
|
||||||
#define MAX_LS_ANDSW SWSRC_LAST
|
#define MAX_LS_ANDSW SWSRC_LAST
|
||||||
|
|
||||||
//#define TELEM_FLAG_TIMEOUT 0x01
|
|
||||||
#define TELEM_FLAG_LOG 0x02
|
|
||||||
//#define TELEM_FLAG_PERSISTENT 0x04
|
|
||||||
//#define TELEM_FLAG_SCALE 0x08
|
|
||||||
#define TELEM_FLAG_AUTO_OFFSET 0x10
|
|
||||||
#define TELEM_FLAG_FILTER 0x20
|
|
||||||
#define TELEM_FLAG_LOSS_ALARM 0x40
|
|
||||||
|
|
||||||
enum TelemetrySensorType
|
enum TelemetrySensorType
|
||||||
{
|
{
|
||||||
TELEM_TYPE_CUSTOM,
|
TELEM_TYPE_CUSTOM,
|
||||||
|
@ -251,16 +225,10 @@ enum TelemetrySensorFormula
|
||||||
};
|
};
|
||||||
|
|
||||||
enum VarioSource {
|
enum VarioSource {
|
||||||
#if !defined(TELEMETRY_FRSKY_SPORT)
|
|
||||||
VARIO_SOURCE_ALTI,
|
|
||||||
VARIO_SOURCE_ALTI_PLUS,
|
|
||||||
#endif
|
|
||||||
VARIO_SOURCE_VSPEED,
|
VARIO_SOURCE_VSPEED,
|
||||||
VARIO_SOURCE_A1,
|
VARIO_SOURCE_A1,
|
||||||
VARIO_SOURCE_A2,
|
VARIO_SOURCE_A2,
|
||||||
#if defined(TELEMETRY_FRSKY_SPORT)
|
|
||||||
VARIO_SOURCE_DTE,
|
VARIO_SOURCE_DTE,
|
||||||
#endif
|
|
||||||
VARIO_SOURCE_COUNT,
|
VARIO_SOURCE_COUNT,
|
||||||
VARIO_SOURCE_LAST = VARIO_SOURCE_COUNT-1
|
VARIO_SOURCE_LAST = VARIO_SOURCE_COUNT-1
|
||||||
};
|
};
|
||||||
|
@ -292,8 +260,6 @@ enum FrskyVoltsSource {
|
||||||
FRSKY_VOLTS_SOURCE_LAST=FRSKY_VOLTS_SOURCE_CELLS
|
FRSKY_VOLTS_SOURCE_LAST=FRSKY_VOLTS_SOURCE_CELLS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum SwashType {
|
enum SwashType {
|
||||||
SWASH_TYPE_NONE,
|
SWASH_TYPE_NONE,
|
||||||
SWASH_TYPE_120,
|
SWASH_TYPE_120,
|
||||||
|
@ -310,8 +276,8 @@ enum SwashType {
|
||||||
|
|
||||||
#define ROTARY_ENCODER_MAX 1024
|
#define ROTARY_ENCODER_MAX 1024
|
||||||
|
|
||||||
#define TRIMS_ARRAY_SIZE 8
|
#define TRIMS_ARRAY_SIZE 8
|
||||||
#define TRIM_MODE_NONE 0x1F // 0b11111
|
#define TRIM_MODE_NONE 0x1F // 0b11111
|
||||||
|
|
||||||
#define IS_MANUAL_RESET_TIMER(idx) (g_model.timers[idx].persistent == 2)
|
#define IS_MANUAL_RESET_TIMER(idx) (g_model.timers[idx].persistent == 2)
|
||||||
|
|
||||||
|
@ -321,37 +287,23 @@ enum SwashType {
|
||||||
#define TIMER_COUNTDOWN_START(x) 10
|
#define TIMER_COUNTDOWN_START(x) 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum Protocols {
|
enum ChannelsProtocols {
|
||||||
PROTO_PPM,
|
PROTOCOL_CHANNELS_PPM,
|
||||||
#if defined(PXX) || defined(DSM2) || defined(IRPROTOS)
|
#if defined(PXX) || defined(DSM2)
|
||||||
PROTO_PXX,
|
PROTOCOL_CHANNELS_PXX,
|
||||||
#endif
|
#endif
|
||||||
#if defined(DSM2) || defined(IRPROTOS)
|
#if defined(DSM2)
|
||||||
PROTO_DSM2_LP45,
|
PROTOCOL_CHANNELS_DSM2_LP45,
|
||||||
PROTO_DSM2_DSM2,
|
PROTOCOL_CHANNELS_DSM2_DSM2,
|
||||||
PROTO_DSM2_DSMX,
|
PROTOCOL_CHANNELS_DSM2_DSMX,
|
||||||
#endif
|
#endif
|
||||||
PROTO_CROSSFIRE,
|
PROTOCOL_CHANNELS_CROSSFIRE,
|
||||||
#if defined(IRPROTOS)
|
PROTOCOL_CHANNELS_MULTIMODULE,
|
||||||
// only used on AVR
|
PROTOCOL_CHANNELS_SBUS,
|
||||||
// we will need 4 bits for proto :(
|
PROTOCOL_CHANNELS_PXX2,
|
||||||
PROTO_SILV,
|
PROTOCOL_CHANNELS_NONE
|
||||||
PROTO_TRAC09,
|
|
||||||
PROTO_PICZ,
|
|
||||||
PROTO_SWIFT,
|
|
||||||
#endif
|
|
||||||
PROTO_MULTIMODULE,
|
|
||||||
PROTO_SBUS,
|
|
||||||
PROTO_PXX2,
|
|
||||||
PROTO_NONE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(PXX2)
|
|
||||||
#define PROTO_PXX_EXTERNAL_MODULE PROTO_PXX2
|
|
||||||
#else
|
|
||||||
#define PROTO_PXX_EXTERNAL_MODULE PROTO_PXX
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum XJTRFProtocols {
|
enum XJTRFProtocols {
|
||||||
RF_PROTO_OFF = -1,
|
RF_PROTO_OFF = -1,
|
||||||
RF_PROTO_X16,
|
RF_PROTO_X16,
|
||||||
|
@ -369,6 +321,21 @@ enum R9MSubTypes
|
||||||
MODULE_SUBTYPE_R9M_LAST=MODULE_SUBTYPE_R9M_AUPLUS
|
MODULE_SUBTYPE_R9M_LAST=MODULE_SUBTYPE_R9M_AUPLUS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum R9MRegion
|
||||||
|
{
|
||||||
|
MODULE_R9M_REGION_FCC,
|
||||||
|
MODULE_R9M_REGION_EU,
|
||||||
|
MODULE_R9M_REGION_FLEX,
|
||||||
|
MODULE_R9M_REGION_LAST=MODULE_R9M_REGION_FLEX
|
||||||
|
};
|
||||||
|
|
||||||
|
enum R9MFrenquency
|
||||||
|
{
|
||||||
|
MODULE_R9M_FREQ_868MHZ,
|
||||||
|
MODULE_R9M_FREQ_915MHZ,
|
||||||
|
MODULE_R9M_FREQ_LAST=MODULE_R9M_FREQ_915MHZ
|
||||||
|
};
|
||||||
|
|
||||||
enum MultiModuleRFProtocols {
|
enum MultiModuleRFProtocols {
|
||||||
MM_RF_PROTO_CUSTOM = -1,
|
MM_RF_PROTO_CUSTOM = -1,
|
||||||
MM_RF_PROTO_FIRST = MM_RF_PROTO_CUSTOM,
|
MM_RF_PROTO_FIRST = MM_RF_PROTO_CUSTOM,
|
||||||
|
@ -492,17 +459,18 @@ enum ThrottleSources {
|
||||||
THROTTLE_SOURCE_CH1,
|
THROTTLE_SOURCE_CH1,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TelemetryType
|
enum TelemetryProtocols
|
||||||
{
|
{
|
||||||
PROTOCOL_TELEMETRY_FIRST,
|
PROTOCOL_TELEMETRY_FIRST,
|
||||||
PROTOCOL_FRSKY_SPORT = PROTOCOL_TELEMETRY_FIRST,
|
PROTOCOL_TELEMETRY_FRSKY_SPORT = PROTOCOL_TELEMETRY_FIRST,
|
||||||
PROTOCOL_FRSKY_D,
|
PROTOCOL_TELEMETRY_FRSKY_D,
|
||||||
PROTOCOL_FRSKY_D_SECONDARY,
|
PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY,
|
||||||
PROTOCOL_PULSES_CROSSFIRE,
|
PROTOCOL_TELEMETRY_CROSSFIRE,
|
||||||
PROTOCOL_SPEKTRUM,
|
PROTOCOL_TELEMETRY_SPEKTRUM,
|
||||||
PROTOCOL_FLYSKY_IBUS,
|
PROTOCOL_TELEMETRY_FLYSKY_IBUS,
|
||||||
PROTOCOL_MULTIMODULE,
|
PROTOCOL_TELEMETRY_MULTIMODULE,
|
||||||
PROTOCOL_TELEMETRY_LAST=PROTOCOL_MULTIMODULE
|
PROTOCOL_TELEMETRY_LAST=PROTOCOL_TELEMETRY_MULTIMODULE,
|
||||||
|
PROTOCOL_TELEMETRY_PXX2,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum DisplayTrims
|
enum DisplayTrims
|
||||||
|
@ -512,8 +480,6 @@ enum DisplayTrims
|
||||||
DISPLAY_TRIMS_ALWAYS
|
DISPLAY_TRIMS_ALWAYS
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TOTAL_EEPROM_USAGE (sizeof(ModelData)*MAX_MODELS + sizeof(RadioData))
|
|
||||||
|
|
||||||
extern RadioData g_eeGeneral;
|
extern RadioData g_eeGeneral;
|
||||||
extern ModelData g_model;
|
extern ModelData g_model;
|
||||||
|
|
||||||
|
|
|
@ -125,10 +125,10 @@ void setupPulsesDSM2(uint8_t port)
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
||||||
|
|
||||||
switch (s_current_protocol[port]) {
|
switch (s_current_protocol[port]) {
|
||||||
case PROTO_DSM2_LP45:
|
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||||
dsmDat[0] = 0x00;
|
dsmDat[0] = 0x00;
|
||||||
break;
|
break;
|
||||||
case PROTO_DSM2_DSM2:
|
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||||
dsmDat[0] = 0x10;
|
dsmDat[0] = 0x10;
|
||||||
break;
|
break;
|
||||||
default: // DSMX
|
default: // DSMX
|
||||||
|
|
|
@ -88,7 +88,7 @@ inline bool isModulePPM(uint8_t idx)
|
||||||
{
|
{
|
||||||
return idx == TRAINER_MODULE ||
|
return idx == TRAINER_MODULE ||
|
||||||
(idx == INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) ||
|
(idx == INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) ||
|
||||||
(idx == EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM));
|
(idx == EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
inline bool isModulePPM(uint8_t idx)
|
inline bool isModulePPM(uint8_t idx)
|
||||||
|
@ -99,6 +99,7 @@ inline bool isModulePPM(uint8_t idx)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PCBXLITE)
|
||||||
inline bool isModuleR9M(uint8_t idx)
|
inline bool isModuleR9M(uint8_t idx)
|
||||||
{
|
{
|
||||||
return g_model.moduleData[idx].type == MODULE_TYPE_R9M;
|
return g_model.moduleData[idx].type == MODULE_TYPE_R9M;
|
||||||
|
@ -128,7 +129,37 @@ inline bool isModuleR9M_AU_PLUS(uint8_t idx)
|
||||||
{
|
{
|
||||||
return isModuleR9M(idx) && g_model.moduleData[idx].subType != MODULE_SUBTYPE_R9M_AUPLUS;
|
return isModuleR9M(idx) && g_model.moduleData[idx].subType != MODULE_SUBTYPE_R9M_AUPLUS;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
inline bool isModuleR9M(uint8_t idx)
|
||||||
|
{
|
||||||
|
return g_model.moduleData[idx].type == MODULE_TYPE_R9M;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool isModuleR9M_FCC(uint8_t idx)
|
||||||
|
{
|
||||||
|
return isModuleR9M(idx) && g_model.moduleData[idx].r9m.region == MODULE_R9M_REGION_FCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool isModuleR9M_LBT(uint8_t idx)
|
||||||
|
{
|
||||||
|
return isModuleR9M(idx) && g_model.moduleData[idx].r9m.region == MODULE_R9M_REGION_EU;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool isModuleR9M_FCC_VARIANT(uint8_t idx)
|
||||||
|
{
|
||||||
|
return isModuleR9M(idx) && g_model.moduleData[idx].r9m.region != MODULE_R9M_REGION_EU;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool isModuleR9M_EUPLUS(uint8_t idx)
|
||||||
|
{
|
||||||
|
return isModuleR9M(idx) && g_model.moduleData[idx].r9m.region == MODULE_R9M_REGION_FLEX && g_model.moduleData[idx].r9m.freq == MODULE_R9M_FREQ_868MHZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool isModuleR9M_AU_PLUS(uint8_t idx)
|
||||||
|
{
|
||||||
|
return isModuleR9M(idx) && g_model.moduleData[idx].r9m.region == MODULE_R9M_REGION_FLEX && g_model.moduleData[idx].r9m.freq == MODULE_R9M_FREQ_915MHZ;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline bool isModulePXX(uint8_t idx)
|
inline bool isModulePXX(uint8_t idx)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,7 +51,7 @@ enum ModuleFlag
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define IS_DSM2_PROTOCOL(protocol) (protocol>=PROTO_DSM2_LP45 && protocol<=PROTO_DSM2_DSMX)
|
#define IS_DSM2_PROTOCOL(protocol) (protocol>=PROTOCOL_CHANNELS_DSM2_LP45 && protocol<=PROTOCOL_CHANNELS_DSM2_DSMX)
|
||||||
#else
|
#else
|
||||||
#define IS_DSM2_PROTOCOL(protocol) (0)
|
#define IS_DSM2_PROTOCOL(protocol) (0)
|
||||||
#endif
|
#endif
|
||||||
|
@ -63,7 +63,7 @@ enum ModuleFlag
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
#define IS_MULTIMODULE_PROTOCOL(protocol) (protocol==PROTO_MULTIMODULE)
|
#define IS_MULTIMODULE_PROTOCOL(protocol) (protocol==PROTOCOL_CHANNELS_MULTIMODULE)
|
||||||
#if !defined(DSM2)
|
#if !defined(DSM2)
|
||||||
#error You need to enable DSM2 = PPM for MULTIMODULE support
|
#error You need to enable DSM2 = PPM for MULTIMODULE support
|
||||||
#endif
|
#endif
|
||||||
|
@ -71,7 +71,7 @@ enum ModuleFlag
|
||||||
#define IS_MULTIMODULE_PROTOCOL(protocol) (0)
|
#define IS_MULTIMODULE_PROTOCOL(protocol) (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IS_SBUS_PROTOCOL(protocol) (protocol == PROTO_SBUS)
|
#define IS_SBUS_PROTOCOL(protocol) (protocol == PROTOCOL_CHANNELS_SBUS)
|
||||||
|
|
||||||
|
|
||||||
#include "pulses_arm.h"
|
#include "pulses_arm.h"
|
||||||
|
|
|
@ -19,11 +19,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
#if defined(PXX2)
|
|
||||||
#include "io/pxx2.h"
|
#include "io/pxx2.h"
|
||||||
#include "pulses/pxx2.h"
|
#include "pulses/pxx2.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t s_pulses_paused = 0;
|
uint8_t s_pulses_paused = 0;
|
||||||
uint8_t s_current_protocol[NUM_MODULES] = { MODULES_INIT(255) };
|
uint8_t s_current_protocol[NUM_MODULES] = { MODULES_INIT(255) };
|
||||||
|
@ -47,14 +44,14 @@ uint8_t getRequiredProtocol(uint8_t port)
|
||||||
switch (g_model.moduleData[INTERNAL_MODULE].type) {
|
switch (g_model.moduleData[INTERNAL_MODULE].type) {
|
||||||
#if defined(TARANIS_INTERNAL_PPM)
|
#if defined(TARANIS_INTERNAL_PPM)
|
||||||
case MODULE_TYPE_PPM:
|
case MODULE_TYPE_PPM:
|
||||||
required_protocol = PROTO_PPM;
|
required_protocol = PROTOCOL_CHANNELS_PPM;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case MODULE_TYPE_XJT:
|
case MODULE_TYPE_XJT:
|
||||||
required_protocol = PROTO_PXX;
|
required_protocol = PROTOCOL_CHANNELS_PXX;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
required_protocol = PROTO_NONE;
|
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -63,30 +60,36 @@ uint8_t getRequiredProtocol(uint8_t port)
|
||||||
default:
|
default:
|
||||||
switch (g_model.moduleData[EXTERNAL_MODULE].type) {
|
switch (g_model.moduleData[EXTERNAL_MODULE].type) {
|
||||||
case MODULE_TYPE_PPM:
|
case MODULE_TYPE_PPM:
|
||||||
required_protocol = PROTO_PPM;
|
required_protocol = PROTOCOL_CHANNELS_PPM;
|
||||||
break;
|
break;
|
||||||
case MODULE_TYPE_XJT:
|
case MODULE_TYPE_XJT:
|
||||||
|
required_protocol = PROTOCOL_CHANNELS_PXX;
|
||||||
|
break;
|
||||||
case MODULE_TYPE_R9M:
|
case MODULE_TYPE_R9M:
|
||||||
required_protocol = PROTO_PXX_EXTERNAL_MODULE; // either PXX or PXX2 depending on compilation options
|
#if defined(PCBXLITE)
|
||||||
|
required_protocol = PROTOCOL_CHANNELS_PXX;
|
||||||
|
#else
|
||||||
|
required_protocol = PROTOCOL_CHANNELS_PXX2;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case MODULE_TYPE_SBUS:
|
case MODULE_TYPE_SBUS:
|
||||||
required_protocol = PROTO_SBUS;
|
required_protocol = PROTOCOL_CHANNELS_SBUS;
|
||||||
break;
|
break;
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case MODULE_TYPE_MULTIMODULE:
|
case MODULE_TYPE_MULTIMODULE:
|
||||||
required_protocol = PROTO_MULTIMODULE;
|
required_protocol = PROTOCOL_CHANNELS_MULTIMODULE;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
case MODULE_TYPE_DSM2:
|
case MODULE_TYPE_DSM2:
|
||||||
required_protocol = limit<uint8_t>(PROTO_DSM2_LP45, PROTO_DSM2_LP45+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, PROTO_DSM2_DSMX);
|
required_protocol = limit<uint8_t>(PROTOCOL_CHANNELS_DSM2_LP45, PROTOCOL_CHANNELS_DSM2_LP45+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, PROTOCOL_CHANNELS_DSM2_DSMX);
|
||||||
// The module is set to OFF during one second before BIND start
|
// The module is set to OFF during one second before BIND start
|
||||||
{
|
{
|
||||||
static tmr10ms_t bindStartTime = 0;
|
static tmr10ms_t bindStartTime = 0;
|
||||||
if (moduleFlag[EXTERNAL_MODULE] == MODULE_BIND) {
|
if (moduleFlag[EXTERNAL_MODULE] == MODULE_BIND) {
|
||||||
if (bindStartTime == 0) bindStartTime = get_tmr10ms();
|
if (bindStartTime == 0) bindStartTime = get_tmr10ms();
|
||||||
if ((tmr10ms_t)(get_tmr10ms() - bindStartTime) < 100) {
|
if ((tmr10ms_t)(get_tmr10ms() - bindStartTime) < 100) {
|
||||||
required_protocol = PROTO_NONE;
|
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,24 +101,24 @@ uint8_t getRequiredProtocol(uint8_t port)
|
||||||
#endif
|
#endif
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
case MODULE_TYPE_CROSSFIRE:
|
case MODULE_TYPE_CROSSFIRE:
|
||||||
required_protocol = PROTO_CROSSFIRE;
|
required_protocol = PROTOCOL_CHANNELS_CROSSFIRE;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
required_protocol = PROTO_NONE;
|
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s_pulses_paused) {
|
if (s_pulses_paused) {
|
||||||
required_protocol = PROTO_NONE;
|
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// will need an EEPROM conversion
|
// will need an EEPROM conversion
|
||||||
if (moduleFlag[port] == MODULE_OFF) {
|
if (moduleFlag[port] == MODULE_OFF) {
|
||||||
required_protocol = PROTO_NONE;
|
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -146,38 +149,36 @@ void setupPulses(uint8_t port)
|
||||||
if (s_current_protocol[port] != required_protocol) {
|
if (s_current_protocol[port] != required_protocol) {
|
||||||
init_needed = true;
|
init_needed = true;
|
||||||
switch (s_current_protocol[port]) { // stop existing protocol hardware
|
switch (s_current_protocol[port]) { // stop existing protocol hardware
|
||||||
case PROTO_PXX:
|
case PROTOCOL_CHANNELS_PXX:
|
||||||
disable_pxx(port);
|
disable_pxx(port);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
case PROTO_DSM2_LP45:
|
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||||
case PROTO_DSM2_DSM2:
|
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||||
case PROTO_DSM2_DSMX:
|
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||||
disable_serial(port);
|
disable_serial(port);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
case PROTO_CROSSFIRE:
|
case PROTOCOL_CHANNELS_CROSSFIRE:
|
||||||
disable_module_timer(port);
|
disable_module_timer(port);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PXX2)
|
case PROTOCOL_CHANNELS_PXX2:
|
||||||
case PROTO_PXX2:
|
|
||||||
disable_module_timer(port);
|
disable_module_timer(port);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case PROTO_MULTIMODULE:
|
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||||
#endif
|
#endif
|
||||||
case PROTO_SBUS:
|
case PROTOCOL_CHANNELS_SBUS:
|
||||||
disable_serial(port);
|
disable_serial(port);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTO_PPM:
|
case PROTOCOL_CHANNELS_PPM:
|
||||||
disable_ppm(port);
|
disable_ppm(port);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -190,28 +191,28 @@ void setupPulses(uint8_t port)
|
||||||
|
|
||||||
// Set up output data here
|
// Set up output data here
|
||||||
switch (required_protocol) {
|
switch (required_protocol) {
|
||||||
case PROTO_PXX:
|
case PROTOCOL_CHANNELS_PXX:
|
||||||
setupPulsesPXX(port);
|
setupPulsesPXX(port);
|
||||||
scheduleNextMixerCalculation(port, PXX_PERIOD);
|
scheduleNextMixerCalculation(port, PXX_PERIOD);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTO_SBUS:
|
case PROTOCOL_CHANNELS_SBUS:
|
||||||
setupPulsesSbus(port);
|
setupPulsesSbus(port);
|
||||||
scheduleNextMixerCalculation(port, SBUS_PERIOD);
|
scheduleNextMixerCalculation(port, SBUS_PERIOD);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
case PROTO_DSM2_LP45:
|
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||||
case PROTO_DSM2_DSM2:
|
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||||
case PROTO_DSM2_DSMX:
|
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||||
setupPulsesDSM2(port);
|
setupPulsesDSM2(port);
|
||||||
scheduleNextMixerCalculation(port, DSM2_PERIOD);
|
scheduleNextMixerCalculation(port, DSM2_PERIOD);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
case PROTO_CROSSFIRE:
|
case PROTOCOL_CHANNELS_CROSSFIRE:
|
||||||
if (telemetryProtocol == PROTOCOL_PULSES_CROSSFIRE && !init_needed) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE && !init_needed) {
|
||||||
uint8_t * crossfire = modulePulsesData[port].crossfire.pulses;
|
uint8_t * crossfire = modulePulsesData[port].crossfire.pulses;
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
|
@ -232,26 +233,25 @@ void setupPulses(uint8_t port)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PXX2)
|
case PROTOCOL_CHANNELS_PXX2:
|
||||||
case PROTO_PXX2:
|
// here we have to wait that telemetryInit() is called, hence this test
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT && !init_needed) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_PXX2 && !init_needed) {
|
||||||
modulePulsesData[port].pxx2.setupFrame(port);
|
modulePulsesData[port].pxx2.setupFrame(port);
|
||||||
sportSendBuffer(modulePulsesData[port].pxx2.getData(), modulePulsesData[port].pxx2.getSize());
|
sportSendBuffer(modulePulsesData[port].pxx2.getData(), modulePulsesData[port].pxx2.getSize());
|
||||||
}
|
}
|
||||||
scheduleNextMixerCalculation(port, PXX2_PERIOD);
|
scheduleNextMixerCalculation(port, PXX2_PERIOD);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case PROTO_MULTIMODULE:
|
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||||
setupPulsesMultimodule(port);
|
setupPulsesMultimodule(port);
|
||||||
scheduleNextMixerCalculation(port, MULTIMODULE_PERIOD);
|
scheduleNextMixerCalculation(port, MULTIMODULE_PERIOD);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case PROTO_PPM:
|
case PROTOCOL_CHANNELS_PPM:
|
||||||
#if defined(PCBSKY9X)
|
#if defined(PCBSKY9X)
|
||||||
case PROTO_NONE:
|
case PROTOCOL_CHANNELS_NONE:
|
||||||
#endif
|
#endif
|
||||||
setupPulsesPPMModule(port);
|
setupPulsesPPMModule(port);
|
||||||
scheduleNextMixerCalculation(port, PPM_PERIOD(port));
|
scheduleNextMixerCalculation(port, PPM_PERIOD(port));
|
||||||
|
@ -263,41 +263,39 @@ void setupPulses(uint8_t port)
|
||||||
|
|
||||||
if (init_needed) {
|
if (init_needed) {
|
||||||
switch (required_protocol) { // Start new protocol hardware here
|
switch (required_protocol) { // Start new protocol hardware here
|
||||||
case PROTO_PXX:
|
case PROTOCOL_CHANNELS_PXX:
|
||||||
init_pxx(port);
|
init_pxx(port);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
case PROTO_DSM2_LP45:
|
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||||
case PROTO_DSM2_DSM2:
|
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||||
case PROTO_DSM2_DSMX:
|
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||||
init_serial(port, DSM2_BAUDRATE, DSM2_PERIOD * 2000);
|
init_serial(port, DSM2_BAUDRATE, DSM2_PERIOD * 2000);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
case PROTO_CROSSFIRE:
|
case PROTOCOL_CHANNELS_CROSSFIRE:
|
||||||
init_module_timer(port, CROSSFIRE_PERIOD, true);
|
init_module_timer(port, CROSSFIRE_PERIOD, true);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PXX2)
|
case PROTOCOL_CHANNELS_PXX2:
|
||||||
case PROTO_PXX2:
|
|
||||||
init_module_timer(port, PXX2_PERIOD, true);
|
init_module_timer(port, PXX2_PERIOD, true);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case PROTO_MULTIMODULE:
|
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||||
init_serial(port, MULTIMODULE_BAUDRATE, MULTIMODULE_PERIOD * 2000);
|
init_serial(port, MULTIMODULE_BAUDRATE, MULTIMODULE_PERIOD * 2000);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case PROTO_SBUS:
|
case PROTOCOL_CHANNELS_SBUS:
|
||||||
init_serial(port, SBUS_BAUDRATE, SBUS_PERIOD_HALF_US);
|
init_serial(port, SBUS_BAUDRATE, SBUS_PERIOD_HALF_US);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTO_PPM:
|
case PROTOCOL_CHANNELS_PPM:
|
||||||
init_ppm(port);
|
init_ppm(port);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -82,9 +82,7 @@ union ModulePulsesData {
|
||||||
PwmPxxPulses pxx;
|
PwmPxxPulses pxx;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PXX2)
|
|
||||||
Pxx2Pulses pxx2;
|
Pxx2Pulses pxx2;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PPM_PIN_SERIAL)
|
#if defined(PPM_PIN_SERIAL)
|
||||||
Dsm2SerialPulsesData dsm2;
|
Dsm2SerialPulsesData dsm2;
|
||||||
|
@ -168,6 +166,8 @@ void setCustomFailsafe(uint8_t moduleIndex);
|
||||||
#define LEN_R9M_LBT_POWER_VALUES "\015"
|
#define LEN_R9M_LBT_POWER_VALUES "\015"
|
||||||
#define TR_R9M_FCC_POWER_VALUES "(100 mW)"
|
#define TR_R9M_FCC_POWER_VALUES "(100 mW)"
|
||||||
#define TR_R9M_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0 ""100mW no tele"
|
#define TR_R9M_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0 ""100mW no tele"
|
||||||
|
#define LEN_R9MFLEX_FREQ "\006"
|
||||||
|
#define TR_R9MFLEX_FREQ "868Mhz""915Mhz"
|
||||||
|
|
||||||
enum R9MFCCPowerValues {
|
enum R9MFCCPowerValues {
|
||||||
R9M_FCC_POWER_100 = 0,
|
R9M_FCC_POWER_100 = 0,
|
||||||
|
@ -186,8 +186,10 @@ enum R9MLBTPowerValues {
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define LEN_R9M_REGION "\006"
|
#define LEN_R9M_REGION "\004"
|
||||||
#define TR_R9M_REGION "FCC\0 ""EU\0 ""868MHz""915MHz"
|
#define TR_R9M_REGION "FCC\0""EU\0 ""FLEX"
|
||||||
|
#define LEN_R9MFLEX_FREQ "\006"
|
||||||
|
#define TR_R9MFLEX_FREQ "868Mhz""915Mhz"
|
||||||
#define LEN_R9M_FCC_POWER_VALUES "\006"
|
#define LEN_R9M_FCC_POWER_VALUES "\006"
|
||||||
#define LEN_R9M_LBT_POWER_VALUES "\013"
|
#define LEN_R9M_LBT_POWER_VALUES "\013"
|
||||||
#define TR_R9M_FCC_POWER_VALUES "10 mW\0" "100 mW" "500 mW" "1 W\0"
|
#define TR_R9M_FCC_POWER_VALUES "10 mW\0" "100 mW" "500 mW" "1 W\0"
|
||||||
|
|
|
@ -166,7 +166,7 @@ void PxxPulses<PxxTransport>::addExtraFlags(uint8_t port)
|
||||||
extra_flags |= (g_model.moduleData[port].pxx.receiver_channel_9_16 << 2);
|
extra_flags |= (g_model.moduleData[port].pxx.receiver_channel_9_16 << 2);
|
||||||
if (isModuleR9M(port)) {
|
if (isModuleR9M(port)) {
|
||||||
extra_flags |= (min<uint8_t>(g_model.moduleData[port].pxx.power, isModuleR9M_FCC_VARIANT(port) ? (uint8_t)R9M_FCC_POWER_MAX : (uint8_t)R9M_LBT_POWER_MAX) << 3);
|
extra_flags |= (min<uint8_t>(g_model.moduleData[port].pxx.power, isModuleR9M_FCC_VARIANT(port) ? (uint8_t)R9M_FCC_POWER_MAX : (uint8_t)R9M_LBT_POWER_MAX) << 3);
|
||||||
if(isModuleR9M_EUPLUS(port))
|
if (isModuleR9M_EUPLUS(port))
|
||||||
extra_flags |= (1 << 6);
|
extra_flags |= (1 << 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -150,6 +150,17 @@ class StandardPxxTransport: public BitTransport, public PxxCrcMixin {
|
||||||
addByteWithoutCrc(byte);
|
addByteWithoutCrc(byte);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void addRawByte(uint8_t byte)
|
||||||
|
{
|
||||||
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
|
if (byte & 0x80)
|
||||||
|
BitTransport::addPart(1);
|
||||||
|
else
|
||||||
|
BitTransport::addPart(0);
|
||||||
|
byte <<= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void addByteWithoutCrc(uint8_t byte)
|
void addByteWithoutCrc(uint8_t byte)
|
||||||
{
|
{
|
||||||
for (uint8_t i = 0; i < 8; i++) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
|
@ -187,23 +198,28 @@ class UartPxxTransport: public DataBuffer<uint8_t, 64>, public PxxCrcMixin {
|
||||||
addWithByteStuffing(byte);
|
addWithByteStuffing(byte);
|
||||||
}
|
}
|
||||||
|
|
||||||
void addByteWithoutCrc(uint8_t byte)
|
void addRawByte(uint8_t byte)
|
||||||
{
|
{
|
||||||
*ptr++ = byte;
|
*ptr++ = byte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addByteWithoutCrc(uint8_t byte)
|
||||||
|
{
|
||||||
|
addWithByteStuffing(byte);
|
||||||
|
}
|
||||||
|
|
||||||
void addWithByteStuffing(uint8_t byte)
|
void addWithByteStuffing(uint8_t byte)
|
||||||
{
|
{
|
||||||
if (0x7E == byte) {
|
if (0x7E == byte) {
|
||||||
*ptr++ = 0x7D;
|
addRawByte(0x7D);
|
||||||
*ptr++ = 0x5E;
|
addRawByte(0x5E);
|
||||||
}
|
}
|
||||||
else if (0x7D == byte) {
|
else if (0x7D == byte) {
|
||||||
*ptr++ = 0x7D;
|
addRawByte(0x7D);
|
||||||
*ptr++ = 0x5D;
|
addRawByte(0x5D);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
*ptr++ = byte;
|
addRawByte(byte);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ class Pxx1Pulses: public PxxPulses<PxxTransport>
|
||||||
void addHead()
|
void addHead()
|
||||||
{
|
{
|
||||||
// send 7E, do not CRC
|
// send 7E, do not CRC
|
||||||
PxxTransport::addByteWithoutCrc(0x7E);
|
PxxTransport::addRawByte(0x7E);
|
||||||
}
|
}
|
||||||
|
|
||||||
void addCrc()
|
void addCrc()
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
void Pxx2Pulses::setupFrame(uint8_t port)
|
void Pxx2Pulses::setupFrame(uint8_t port)
|
||||||
{
|
{
|
||||||
initFrame();
|
initFrame();
|
||||||
initCrc();
|
|
||||||
|
|
||||||
static uint8_t pass[NUM_MODULES] = { MODULES_INIT(0) };
|
static uint8_t pass[NUM_MODULES] = { MODULES_INIT(0) };
|
||||||
uint8_t sendUpperChannels = 0;
|
uint8_t sendUpperChannels = 0;
|
||||||
|
@ -38,38 +37,23 @@ void Pxx2Pulses::setupFrame(uint8_t port)
|
||||||
// Flag1
|
// Flag1
|
||||||
uint8_t flag1 = addFlag1(port);
|
uint8_t flag1 = addFlag1(port);
|
||||||
|
|
||||||
// Flag2
|
// Flag2 = Extra flags
|
||||||
addByte(0);
|
addExtraFlags(port);
|
||||||
|
|
||||||
// Channels
|
// Channels
|
||||||
addChannels(port, flag1 & PXX_SEND_FAILSAFE, sendUpperChannels);
|
addChannels(port, flag1 & PXX_SEND_FAILSAFE, sendUpperChannels);
|
||||||
|
|
||||||
// Extra flags
|
|
||||||
addExtraFlags(port);
|
|
||||||
|
|
||||||
// Flag3, reserved
|
|
||||||
addByte(0);
|
|
||||||
|
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
if (outputTelemetryBufferTrigger != 0x00 && outputTelemetryBufferSize > 0) {
|
if (outputTelemetryBufferTrigger != 0x7E && outputTelemetryBufferSize > 0) {
|
||||||
// CMD/Resp
|
|
||||||
addByte(1);
|
|
||||||
// primID (1 byte) + dataID (2 bytes) + value (4 bytes)
|
// primID (1 byte) + dataID (2 bytes) + value (4 bytes)
|
||||||
|
addByte(outputTelemetryBufferTrigger);
|
||||||
for (uint8_t i=0; i<7; i++) {
|
for (uint8_t i=0; i<7; i++) {
|
||||||
addByte(outputTelemetryBuffer[i]);
|
addByte(outputTelemetryBuffer[i]);
|
||||||
}
|
}
|
||||||
outputTelemetryBufferTrigger = 0x00;
|
outputTelemetryBufferTrigger = 0x00;
|
||||||
outputTelemetryBufferSize = 0;
|
outputTelemetryBufferSize = 0;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// CMD/Resp
|
|
||||||
addByte(0);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// CMD/Resp
|
|
||||||
addByte(0);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// CRC
|
endFrame();
|
||||||
addByte(crc); // TODO need to check the CRC chosen algorithm
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "./pxx.h"
|
#include "./pxx.h"
|
||||||
|
|
||||||
|
// should not be used anymore
|
||||||
class SportCrcMixin {
|
class SportCrcMixin {
|
||||||
protected:
|
protected:
|
||||||
void initCrc()
|
void initCrc()
|
||||||
|
@ -41,17 +42,17 @@ class SportCrcMixin {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Pxx2Transport: public DataBuffer<uint8_t, 64>, public SportCrcMixin {
|
class Pxx2Transport: public DataBuffer<uint8_t, 64>, public PxxCrcMixin {
|
||||||
protected:
|
protected:
|
||||||
void addByte(uint8_t byte)
|
void addByte(uint8_t byte)
|
||||||
{
|
{
|
||||||
SportCrcMixin::addToCrc(byte);
|
PxxCrcMixin::addToCrc(byte);
|
||||||
*ptr++ = byte;
|
addByteWithoutCrc(byte);
|
||||||
}
|
};
|
||||||
|
|
||||||
void addTail()
|
void addByteWithoutCrc(uint8_t byte)
|
||||||
{
|
{
|
||||||
// nothing
|
*ptr++ = byte;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,13 +60,43 @@ class Pxx2Pulses: public PxxPulses<Pxx2Transport> {
|
||||||
public:
|
public:
|
||||||
void setupFrame(uint8_t port);
|
void setupFrame(uint8_t port);
|
||||||
|
|
||||||
protected:
|
void addHead()
|
||||||
uint8_t data[64];
|
{
|
||||||
uint8_t * ptr;
|
// send 7E, do not CRC
|
||||||
|
Pxx2Transport::addByteWithoutCrc(0x7E);
|
||||||
|
|
||||||
|
// reserve 1 byte for LEN
|
||||||
|
Pxx2Transport::addByteWithoutCrc(0x00);
|
||||||
|
|
||||||
|
// TYPE_C + TYPE_ID
|
||||||
|
Pxx2Transport::addByte(0x26); // This one is CRC-ed on purpose
|
||||||
|
}
|
||||||
|
|
||||||
|
void addCrc()
|
||||||
|
{
|
||||||
|
Pxx2Transport::addByteWithoutCrc(PxxCrcMixin::crc >> 8);
|
||||||
|
Pxx2Transport::addByteWithoutCrc(PxxCrcMixin::crc);
|
||||||
|
}
|
||||||
|
|
||||||
void initFrame()
|
void initFrame()
|
||||||
{
|
{
|
||||||
|
// init the CRC counter
|
||||||
|
initCrc();
|
||||||
|
|
||||||
|
// reset the frame pointer
|
||||||
Pxx2Transport::initBuffer();
|
Pxx2Transport::initBuffer();
|
||||||
|
|
||||||
|
// add the frame head
|
||||||
|
addHead();
|
||||||
|
}
|
||||||
|
|
||||||
|
void endFrame()
|
||||||
|
{
|
||||||
|
// update the frame LEN = frame length minus the 2 first bytes
|
||||||
|
data[1] = getSize() - 2;
|
||||||
|
|
||||||
|
// now add the CRC
|
||||||
|
addCrc();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -132,13 +132,7 @@ set(PULSES_SRC
|
||||||
ppm_arm.cpp
|
ppm_arm.cpp
|
||||||
pxx.cpp
|
pxx.cpp
|
||||||
pxx1.cpp
|
pxx1.cpp
|
||||||
|
pxx2.cpp
|
||||||
dsm2_arm.cpp
|
dsm2_arm.cpp
|
||||||
sbus_arm.cpp
|
sbus_arm.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(PXX2)
|
|
||||||
set(PULSES_SRC
|
|
||||||
${PULSES_SRC}
|
|
||||||
pxx2.cpp
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
|
@ -124,7 +124,7 @@ extern "C" void INTMODULE_DMA_STREAM_IRQHandler(void)
|
||||||
|
|
||||||
void intmoduleSendNextFrame()
|
void intmoduleSendNextFrame()
|
||||||
{
|
{
|
||||||
if (s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) {
|
if (s_current_protocol[INTERNAL_MODULE] == PROTOCOL_CHANNELS_PXX) {
|
||||||
DMA_InitTypeDef DMA_InitStructure;
|
DMA_InitTypeDef DMA_InitStructure;
|
||||||
DMA_DeInit(INTMODULE_DMA_STREAM);
|
DMA_DeInit(INTMODULE_DMA_STREAM);
|
||||||
DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL;
|
DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL;
|
||||||
|
|
|
@ -97,7 +97,7 @@ void serial2Init(unsigned int mode, unsigned int protocol)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case UART_MODE_TELEMETRY:
|
case UART_MODE_TELEMETRY:
|
||||||
if (protocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
uart3Setup(FRSKY_D_BAUDRATE, true);
|
uart3Setup(FRSKY_D_BAUDRATE, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -215,7 +215,7 @@ void extmoduleSerialStart(uint32_t /*baudrate*/, uint32_t period_half_us)
|
||||||
|
|
||||||
void extmoduleSendNextFrame()
|
void extmoduleSendNextFrame()
|
||||||
{
|
{
|
||||||
if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PPM) {
|
if (s_current_protocol[EXTERNAL_MODULE] == PROTOCOL_CHANNELS_PPM) {
|
||||||
#if defined(PCBX10) || PCBREV >= 13
|
#if defined(PCBX10) || PCBREV >= 13
|
||||||
EXTMODULE_TIMER->CCR3 = GET_PPM_DELAY(EXTERNAL_MODULE)*2;
|
EXTMODULE_TIMER->CCR3 = GET_PPM_DELAY(EXTERNAL_MODULE)*2;
|
||||||
EXTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC3P : 0);
|
EXTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC3P : 0);
|
||||||
|
@ -234,7 +234,7 @@ void extmoduleSendNextFrame()
|
||||||
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].ppm.ptr - modulePulsesData[EXTERNAL_MODULE].ppm.pulses;
|
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].ppm.ptr - modulePulsesData[EXTERNAL_MODULE].ppm.pulses;
|
||||||
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
else if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PXX) {
|
else if (s_current_protocol[EXTERNAL_MODULE] == PROTOCOL_CHANNELS_PXX) {
|
||||||
EXTMODULE_TIMER->CCR2 = modulePulsesData[EXTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = modulePulsesData[EXTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
||||||
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
#if defined(PCBX10) || PCBREV >= 13
|
#if defined(PCBX10) || PCBREV >= 13
|
||||||
|
|
|
@ -175,7 +175,7 @@ extern "C" void TELEMETRY_DMA_TX_IRQHandler(void)
|
||||||
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
|
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
|
||||||
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
|
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
|
||||||
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
|
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||||
outputTelemetryBufferSize = 0;
|
outputTelemetryBufferSize = 0;
|
||||||
outputTelemetryBufferTrigger = 0x7E;
|
outputTelemetryBufferTrigger = 0x7E;
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ extern "C" void TELEMETRY_USART_IRQHandler(void)
|
||||||
else {
|
else {
|
||||||
telemetryNoDMAFifo.push(data);
|
telemetryNoDMAFifo.push(data);
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||||
static uint8_t prevdata;
|
static uint8_t prevdata;
|
||||||
if (prevdata == 0x7E && outputTelemetryBufferSize > 0 && data == outputTelemetryBufferTrigger) {
|
if (prevdata == 0x7E && outputTelemetryBufferSize > 0 && data == outputTelemetryBufferTrigger) {
|
||||||
sportSendBuffer(outputTelemetryBuffer, outputTelemetryBufferSize);
|
sportSendBuffer(outputTelemetryBuffer, outputTelemetryBufferSize);
|
||||||
|
|
|
@ -261,6 +261,8 @@ void init_pxx(uint32_t port);
|
||||||
void disable_pxx(uint32_t port);
|
void disable_pxx(uint32_t port);
|
||||||
void init_serial(uint32_t port, uint32_t baudrate, uint32_t period_half_us);
|
void init_serial(uint32_t port, uint32_t baudrate, uint32_t period_half_us);
|
||||||
void disable_serial(uint32_t port);
|
void disable_serial(uint32_t port);
|
||||||
|
void init_module_timer( uint32_t module_index, uint32_t period, uint8_t state);
|
||||||
|
void disable_module_timer( uint32_t module_index);
|
||||||
|
|
||||||
// SD driver
|
// SD driver
|
||||||
#if defined(SIMU)
|
#if defined(SIMU)
|
||||||
|
@ -405,8 +407,9 @@ void debugPutc(const char c);
|
||||||
// Telemetry driver
|
// Telemetry driver
|
||||||
void telemetryPortInit(uint32_t baudrate, uint8_t mode);
|
void telemetryPortInit(uint32_t baudrate, uint8_t mode);
|
||||||
uint32_t telemetryTransmitPending();
|
uint32_t telemetryTransmitPending();
|
||||||
void telemetryTransmitBuffer(uint8_t * buffer, uint32_t size);
|
void telemetryTransmitBuffer(const uint8_t * buffer, uint32_t size);
|
||||||
void rxPdcUsart( void (*pChProcess)(uint8_t x) );
|
void rxPdcUsart( void (*pChProcess)(uint8_t x) );
|
||||||
|
void sportSendBuffer(const uint8_t * buffer, uint32_t size);
|
||||||
|
|
||||||
// Second UART driver
|
// Second UART driver
|
||||||
void serial2TelemetryInit(unsigned int protocol);
|
void serial2TelemetryInit(unsigned int protocol);
|
||||||
|
|
|
@ -129,6 +129,22 @@ void init_no_pulses(uint32_t port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void init_module_timer(uint32_t port, uint32_t period, uint8_t state)
|
||||||
|
{
|
||||||
|
if (port == EXTERNAL_MODULE) {
|
||||||
|
// TODO use period here
|
||||||
|
init_main_ppm(3000, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disable_module_timer(uint32_t port)
|
||||||
|
{
|
||||||
|
if (port == EXTERNAL_MODULE) {
|
||||||
|
disable_ppm(EXTERNAL_MODULE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void disable_no_pulses(uint32_t port)
|
void disable_no_pulses(uint32_t port)
|
||||||
{
|
{
|
||||||
if (port == EXTERNAL_MODULE) {
|
if (port == EXTERNAL_MODULE) {
|
||||||
|
@ -261,7 +277,7 @@ extern "C" void PWM_IRQHandler(void)
|
||||||
if (reason & PWM_ISR1_CHID3) {
|
if (reason & PWM_ISR1_CHID3) {
|
||||||
// Use the current protocol, don't switch until set_up_pulses
|
// Use the current protocol, don't switch until set_up_pulses
|
||||||
switch (s_current_protocol[EXTERNAL_MODULE]) {
|
switch (s_current_protocol[EXTERNAL_MODULE]) {
|
||||||
case PROTO_PXX:
|
case PROTOCOL_CHANNELS_PXX:
|
||||||
// Alternate periods of 6.5mS and 2.5 mS
|
// Alternate periods of 6.5mS and 2.5 mS
|
||||||
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
||||||
if (period == 2500 * 2) {
|
if (period == 2500 * 2) {
|
||||||
|
@ -284,9 +300,9 @@ extern "C" void PWM_IRQHandler(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTO_DSM2_LP45:
|
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||||
case PROTO_DSM2_DSM2:
|
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||||
case PROTO_DSM2_DSMX:
|
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||||
// Alternate periods of 19.5mS and 2.5 mS
|
// Alternate periods of 19.5mS and 2.5 mS
|
||||||
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
||||||
if (period == 2500 * 2) {
|
if (period == 2500 * 2) {
|
||||||
|
@ -309,9 +325,9 @@ extern "C" void PWM_IRQHandler(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case PROTO_MULTIMODULE:
|
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||||
#endif
|
#endif
|
||||||
case PROTO_SBUS:
|
case PROTOCOL_CHANNELS_SBUS:
|
||||||
// Todo: how to do inverted polarity on this platform?
|
// Todo: how to do inverted polarity on this platform?
|
||||||
// Alternate periods of 5.5mS and 3.5 mS
|
// Alternate periods of 5.5mS and 3.5 mS
|
||||||
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
||||||
|
|
|
@ -135,12 +135,11 @@ void rxPdcUsart( void (*pChProcess)(uint8_t x) )
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t txPdcUsart(uint8_t *buffer, uint32_t size)
|
uint32_t txPdcUsart(const uint8_t * buffer, uint32_t size)
|
||||||
{
|
{
|
||||||
Usart *pUsart = SECOND_USART;
|
Usart * pUsart = SECOND_USART;
|
||||||
|
|
||||||
if ( pUsart->US_TNCR == 0 )
|
if (pUsart->US_TNCR == 0) {
|
||||||
{
|
|
||||||
#ifndef SIMU
|
#ifndef SIMU
|
||||||
pUsart->US_TNPR = (uint32_t)buffer ;
|
pUsart->US_TNPR = (uint32_t)buffer ;
|
||||||
#endif
|
#endif
|
||||||
|
@ -174,7 +173,12 @@ void telemetryPortInit(uint32_t baudrate, uint8_t mode)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void telemetryTransmitBuffer(uint8_t * buffer, uint32_t size)
|
void sportSendBuffer(const uint8_t * buffer, uint32_t size)
|
||||||
|
{
|
||||||
|
telemetryTransmitBuffer(buffer, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void telemetryTransmitBuffer(const uint8_t * buffer, uint32_t size)
|
||||||
{
|
{
|
||||||
txPdcUsart(buffer, size);
|
txPdcUsart(buffer, size);
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,7 +238,7 @@ void extmodulePxxStart()
|
||||||
|
|
||||||
void extmoduleSendNextFrame()
|
void extmoduleSendNextFrame()
|
||||||
{
|
{
|
||||||
if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PPM) {
|
if (s_current_protocol[EXTERNAL_MODULE] == PROTOCOL_CHANNELS_PPM) {
|
||||||
EXTMODULE_TIMER->CCR1 = GET_PPM_DELAY(EXTERNAL_MODULE)*2;
|
EXTMODULE_TIMER->CCR1 = GET_PPM_DELAY(EXTERNAL_MODULE)*2;
|
||||||
EXTMODULE_TIMER->CCER = EXTMODULE_TIMER_OUTPUT_ENABLE | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? EXTMODULE_TIMER_OUTPUT_POLARITY : 0); // // we are using complementary output so logic has to be reversed here
|
EXTMODULE_TIMER->CCER = EXTMODULE_TIMER_OUTPUT_ENABLE | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? EXTMODULE_TIMER_OUTPUT_POLARITY : 0); // // we are using complementary output so logic has to be reversed here
|
||||||
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
||||||
|
@ -249,7 +249,7 @@ void extmoduleSendNextFrame()
|
||||||
EXTMODULE_TIMER_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].ppm.ptr - modulePulsesData[EXTERNAL_MODULE].ppm.pulses;
|
EXTMODULE_TIMER_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].ppm.ptr - modulePulsesData[EXTERNAL_MODULE].ppm.pulses;
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
else if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PXX) {
|
else if (s_current_protocol[EXTERNAL_MODULE] == PROTOCOL_CHANNELS_PXX) {
|
||||||
#if defined(EXTMODULE_USART)
|
#if defined(EXTMODULE_USART)
|
||||||
DMA_InitTypeDef DMA_InitStructure;
|
DMA_InitTypeDef DMA_InitStructure;
|
||||||
DMA_DeInit(EXTMODULE_USART_DMA_STREAM);
|
DMA_DeInit(EXTMODULE_USART_DMA_STREAM);
|
||||||
|
|
|
@ -60,7 +60,7 @@ void intmoduleNoneStart()
|
||||||
|
|
||||||
void intmoduleSendNextFrame()
|
void intmoduleSendNextFrame()
|
||||||
{
|
{
|
||||||
if (s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) {
|
if (s_current_protocol[INTERNAL_MODULE] == PROTOCOL_CHANNELS_PXX) {
|
||||||
INTMODULE_TIMER->CCR2 = modulePulsesData[INTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
INTMODULE_TIMER->CCR2 = modulePulsesData[INTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
||||||
INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
|
@ -70,7 +70,7 @@ void intmoduleSendNextFrame()
|
||||||
INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
#if defined(TARANIS_INTERNAL_PPM)
|
#if defined(TARANIS_INTERNAL_PPM)
|
||||||
else if (s_current_protocol[INTERNAL_MODULE] == PROTO_PPM) {
|
else if (s_current_protocol[INTERNAL_MODULE] == PROTOCOL_CHANNELS_PPM) {
|
||||||
INTMODULE_TIMER->CCR3 = GET_PPM_DELAY(INTERNAL_MODULE)*2;
|
INTMODULE_TIMER->CCR3 = GET_PPM_DELAY(INTERNAL_MODULE)*2;
|
||||||
INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P);
|
INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P);
|
||||||
INTMODULE_TIMER->CCR2 = *(modulePulsesData[INTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
INTMODULE_TIMER->CCR2 = *(modulePulsesData[INTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
||||||
|
|
|
@ -127,7 +127,7 @@ extern "C" void TELEMETRY_DMA_TX_IRQHandler(void)
|
||||||
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
|
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
|
||||||
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
|
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
|
||||||
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
|
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || telemetryProtocol == PROTOCOL_TELEMETRY_PXX2) {
|
||||||
outputTelemetryBufferSize = 0;
|
outputTelemetryBufferSize = 0;
|
||||||
outputTelemetryBufferTrigger = 0x7E;
|
outputTelemetryBufferTrigger = 0x7E;
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ extern "C" void TELEMETRY_USART_IRQHandler(void)
|
||||||
else {
|
else {
|
||||||
telemetryFifo.push(data);
|
telemetryFifo.push(data);
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||||
static uint8_t prevdata;
|
static uint8_t prevdata;
|
||||||
if (prevdata == 0x7E && outputTelemetryBufferSize > 0 && data == outputTelemetryBufferTrigger) {
|
if (prevdata == 0x7E && outputTelemetryBufferSize > 0 && data == outputTelemetryBufferTrigger) {
|
||||||
sportSendBuffer(outputTelemetryBuffer, outputTelemetryBufferSize);
|
sportSendBuffer(outputTelemetryBuffer, outputTelemetryBufferSize);
|
||||||
|
@ -174,7 +174,7 @@ extern "C" void TELEMETRY_USART_IRQHandler(void)
|
||||||
uint8_t telemetryGetByte(uint8_t * byte)
|
uint8_t telemetryGetByte(uint8_t * byte)
|
||||||
{
|
{
|
||||||
#if defined(SERIAL2)
|
#if defined(SERIAL2)
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
if (serial2Mode == UART_MODE_TELEMETRY)
|
if (serial2Mode == UART_MODE_TELEMETRY)
|
||||||
return serial2RxFifo.pop(*byte);
|
return serial2RxFifo.pop(*byte);
|
||||||
else
|
else
|
||||||
|
|
|
@ -20,6 +20,76 @@
|
||||||
|
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
|
bool checkPXX2PacketCRC(const uint8_t * packet)
|
||||||
|
{
|
||||||
|
// TODO ...
|
||||||
|
|
||||||
|
return true;
|
||||||
|
// TRACE("checkPXX2PacketCRC(): checksum error ");
|
||||||
|
// DUMP(packet, FRSKY_SPORT_PACKET_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void createFrSkyPXX2Sensor(uint16_t type, uint8_t value){
|
||||||
|
uint8_t buffer[5] = {0x18, 0x10, 0, 0, 0};
|
||||||
|
buffer[2] = type & 0xF;
|
||||||
|
buffer[3] = type >> 8;
|
||||||
|
buffer[4] = value;
|
||||||
|
sportProcessTelemetryPacketWithoutCrc(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void processFrskyPXX2Data(uint8_t data)
|
||||||
|
{
|
||||||
|
static uint8_t dataState = STATE_DATA_IDLE;
|
||||||
|
|
||||||
|
switch (dataState) {
|
||||||
|
case STATE_DATA_IDLE:
|
||||||
|
if (data == START_STOP) {
|
||||||
|
telemetryRxBufferCount = 0;
|
||||||
|
dataState = STATE_DATA_START;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STATE_DATA_START:
|
||||||
|
if (telemetryRxBufferCount == 0 && data > 0x0C) {
|
||||||
|
// wrong length
|
||||||
|
telemetryRxBufferCount = 0;
|
||||||
|
dataState = STATE_DATA_IDLE;
|
||||||
|
}
|
||||||
|
else if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) {
|
||||||
|
telemetryRxBuffer[telemetryRxBufferCount++] = data;
|
||||||
|
if (telemetryRxBuffer[0] + 3 /* 1 byte for length, 2 bytes for CRC */ == telemetryRxBufferCount) {
|
||||||
|
if (checkPXX2PacketCRC(telemetryRxBuffer)) {
|
||||||
|
R9ModuleStreaming = TELEMETRY_TIMEOUT10ms; // reset counter only if valid packets are being detected
|
||||||
|
uint8_t R9Region = (telemetryRxBuffer[3] & 0x30) >> 4;
|
||||||
|
if (R9Region != 0x04) {
|
||||||
|
g_model.moduleData[EXTERNAL_MODULE].r9m.region = R9Region;
|
||||||
|
}
|
||||||
|
if (telemetryRxBuffer[2] & 0x80) {
|
||||||
|
createFrSkyPXX2Sensor(RSSI_ID, telemetryRxBuffer[2] & 0x7f);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
createFrSkyPXX2Sensor(BATT_ID, telemetryRxBuffer[2] & 0x7f);
|
||||||
|
}
|
||||||
|
if((telemetryRxBuffer[3] & 0x04) == 0) {
|
||||||
|
createFrSkyPXX2Sensor(R9_PWR_ID, (telemetryRxBuffer[3] & 0x03));
|
||||||
|
}
|
||||||
|
if (telemetryRxBuffer[0] == 0x0C) {
|
||||||
|
sportProcessTelemetryPacketWithoutCrc(telemetryRxBuffer + 5 /* LEN, TYPE, RSSI/BAT, TP/SS/FW_T, FW_VER, Data ID */);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
telemetryRxBufferCount = 0;
|
||||||
|
dataState = STATE_DATA_IDLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// overflow guard
|
||||||
|
telemetryRxBufferCount = 0;
|
||||||
|
dataState = STATE_DATA_IDLE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void processFrskyTelemetryData(uint8_t data)
|
void processFrskyTelemetryData(uint8_t data)
|
||||||
{
|
{
|
||||||
static uint8_t dataState = STATE_DATA_IDLE;
|
static uint8_t dataState = STATE_DATA_IDLE;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "../definitions.h"
|
#include "../definitions.h"
|
||||||
#include "telemetry_holders.h"
|
#include "telemetry_holders.h"
|
||||||
|
#include "../io/pxx2.h"
|
||||||
|
|
||||||
// Receive buffer state machine state enum
|
// Receive buffer state machine state enum
|
||||||
enum FrSkyDataState {
|
enum FrSkyDataState {
|
||||||
|
@ -32,12 +33,7 @@ enum FrSkyDataState {
|
||||||
STATE_DATA_XOR,
|
STATE_DATA_XOR,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(PXX2)
|
|
||||||
#include "io/pxx2.h"
|
|
||||||
#define FRSKY_SPORT_BAUDRATE PXX2_BAUDRATE
|
|
||||||
#else
|
|
||||||
#define FRSKY_SPORT_BAUDRATE 57600
|
#define FRSKY_SPORT_BAUDRATE 57600
|
||||||
#endif
|
|
||||||
|
|
||||||
#define FRSKY_D_BAUDRATE 9600
|
#define FRSKY_D_BAUDRATE 9600
|
||||||
|
|
||||||
|
@ -194,9 +190,12 @@ enum FrSkyDataState {
|
||||||
#define BATT_ID 0xf104
|
#define BATT_ID 0xf104
|
||||||
#define RAS_ID 0xf105
|
#define RAS_ID 0xf105
|
||||||
#define XJT_VERSION_ID 0xf106
|
#define XJT_VERSION_ID 0xf106
|
||||||
|
#define R9_PWR_ID 0xf107
|
||||||
#define FUEL_QTY_FIRST_ID 0x0a10
|
#define FUEL_QTY_FIRST_ID 0x0a10
|
||||||
#define FUEL_QTY_LAST_ID 0x0a1f
|
#define FUEL_QTY_LAST_ID 0x0a1f
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Default sensor data IDs (Physical IDs + CRC)
|
// Default sensor data IDs (Physical IDs + CRC)
|
||||||
#define DATA_ID_VARIO 0x00 // 0
|
#define DATA_ID_VARIO 0x00 // 0
|
||||||
#define DATA_ID_FLVSS 0xA1 // 1
|
#define DATA_ID_FLVSS 0xA1 // 1
|
||||||
|
@ -206,7 +205,6 @@ enum FrSkyDataState {
|
||||||
#define DATA_ID_SP2UH 0x45 // 5
|
#define DATA_ID_SP2UH 0x45 // 5
|
||||||
#define DATA_ID_SP2UR 0xC6 // 6
|
#define DATA_ID_SP2UR 0xC6 // 6
|
||||||
|
|
||||||
|
|
||||||
#if defined(NO_RAS)
|
#if defined(NO_RAS)
|
||||||
#define IS_RAS_VALUE_VALID() (false)
|
#define IS_RAS_VALUE_VALID() (false)
|
||||||
#elif defined(PCBX10)
|
#elif defined(PCBX10)
|
||||||
|
@ -219,13 +217,6 @@ enum FrSkyDataState {
|
||||||
|
|
||||||
#define IS_HIDDEN_TELEMETRY_VALUE(id) ((id == SP2UART_A_ID) || (id == SP2UART_B_ID) || (id == XJT_VERSION_ID) || (id == RAS_ID) || (id == FACT_TEST_ID))
|
#define IS_HIDDEN_TELEMETRY_VALUE(id) ((id == SP2UART_A_ID) || (id == SP2UART_B_ID) || (id == XJT_VERSION_ID) || (id == RAS_ID) || (id == FACT_TEST_ID))
|
||||||
|
|
||||||
enum AlarmLevel {
|
|
||||||
alarm_off = 0,
|
|
||||||
alarm_yellow = 1,
|
|
||||||
alarm_orange = 2,
|
|
||||||
alarm_red = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ALARM_GREATER(channel, alarm) ((g_model.frsky.channels[channel].alarms_greater >> alarm) & 1)
|
#define ALARM_GREATER(channel, alarm) ((g_model.frsky.channels[channel].alarms_greater >> alarm) & 1)
|
||||||
#define ALARM_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3)
|
#define ALARM_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3)
|
||||||
|
|
||||||
|
@ -287,11 +278,11 @@ typedef enum {
|
||||||
|
|
||||||
// FrSky D Telemetry Protocol
|
// FrSky D Telemetry Protocol
|
||||||
void processHubPacket(uint8_t id, int16_t value);
|
void processHubPacket(uint8_t id, int16_t value);
|
||||||
void frskyDSendNextAlarm();
|
|
||||||
void frskyDProcessPacket(const uint8_t *packet);
|
void frskyDProcessPacket(const uint8_t *packet);
|
||||||
|
|
||||||
// FrSky S.PORT Telemetry Protocol
|
// FrSky S.PORT Telemetry Protocol
|
||||||
void sportProcessTelemetryPacket(const uint8_t * packet);
|
void sportProcessTelemetryPacket(const uint8_t * packet);
|
||||||
|
void sportProcessTelemetryPacketWithoutCrc(const uint8_t * packet);
|
||||||
|
|
||||||
void telemetryWakeup();
|
void telemetryWakeup();
|
||||||
void telemetryReset();
|
void telemetryReset();
|
||||||
|
@ -311,14 +302,6 @@ enum TelemetryProtocol
|
||||||
TELEM_PROTO_FLYSKY_IBUS,
|
TELEM_PROTO_FLYSKY_IBUS,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TelemAnas {
|
|
||||||
TELEM_ANA_A1,
|
|
||||||
TELEM_ANA_A2,
|
|
||||||
TELEM_ANA_A3,
|
|
||||||
TELEM_ANA_A4,
|
|
||||||
TELEM_ANA_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TelemetryData {
|
struct TelemetryData {
|
||||||
TelemetryValueWithMin swr; // TODO Min not needed
|
TelemetryValueWithMin swr; // TODO Min not needed
|
||||||
TelemetryValueWithMin rssi; // TODO Min not needed
|
TelemetryValueWithMin rssi; // TODO Min not needed
|
||||||
|
@ -328,12 +311,7 @@ struct TelemetryData {
|
||||||
|
|
||||||
extern TelemetryData telemetryData;
|
extern TelemetryData telemetryData;
|
||||||
|
|
||||||
typedef uint16_t frskyCellVoltage_t;
|
|
||||||
|
|
||||||
void frskySetCellsCount(uint8_t cellscount);
|
|
||||||
void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts);
|
|
||||||
void frskyUpdateCells();
|
|
||||||
|
|
||||||
void processFrskyTelemetryData(uint8_t data);
|
void processFrskyTelemetryData(uint8_t data);
|
||||||
|
void processFrskyPXX2Data(uint8_t data);
|
||||||
|
|
||||||
#endif // _FRSKY_H_
|
#endif // _FRSKY_H_
|
||||||
|
|
|
@ -36,6 +36,7 @@ const FrSkySportSensor sportSensors[] = {
|
||||||
{ A3_FIRST_ID, A3_LAST_ID, 0, ZSTR_A3, UNIT_VOLTS, 2 },
|
{ A3_FIRST_ID, A3_LAST_ID, 0, ZSTR_A3, UNIT_VOLTS, 2 },
|
||||||
{ A4_FIRST_ID, A4_LAST_ID, 0, ZSTR_A4, UNIT_VOLTS, 2 },
|
{ A4_FIRST_ID, A4_LAST_ID, 0, ZSTR_A4, UNIT_VOLTS, 2 },
|
||||||
{ BATT_ID, BATT_ID, 0, ZSTR_BATT, UNIT_VOLTS, 1 },
|
{ BATT_ID, BATT_ID, 0, ZSTR_BATT, UNIT_VOLTS, 1 },
|
||||||
|
{ R9_PWR_ID, R9_PWR_ID, 0, ZSTR_R9PW, UNIT_MILLIWATTS, 0 },
|
||||||
{ T1_FIRST_ID, T1_LAST_ID, 0, ZSTR_TEMP1, UNIT_CELSIUS, 0 },
|
{ T1_FIRST_ID, T1_LAST_ID, 0, ZSTR_TEMP1, UNIT_CELSIUS, 0 },
|
||||||
{ T2_FIRST_ID, T2_LAST_ID, 0, ZSTR_TEMP2, UNIT_CELSIUS, 0 },
|
{ T2_FIRST_ID, T2_LAST_ID, 0, ZSTR_TEMP2, UNIT_CELSIUS, 0 },
|
||||||
{ RPM_FIRST_ID, RPM_LAST_ID, 0, ZSTR_RPM, UNIT_RPMS, 0 },
|
{ RPM_FIRST_ID, RPM_LAST_ID, 0, ZSTR_RPM, UNIT_RPMS, 0 },
|
||||||
|
@ -92,7 +93,7 @@ const FrSkySportSensor * getFrSkySportSensor(uint16_t id, uint8_t subId=0)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool checkSportPacket(const uint8_t *packet)
|
bool checkSportPacket(const uint8_t * packet)
|
||||||
{
|
{
|
||||||
short crc = 0;
|
short crc = 0;
|
||||||
for (int i=1; i<FRSKY_SPORT_PACKET_SIZE; ++i) {
|
for (int i=1; i<FRSKY_SPORT_PACKET_SIZE; ++i) {
|
||||||
|
@ -138,17 +139,22 @@ void sportProcessTelemetryPacket(uint16_t id, uint8_t subId, uint8_t instance, u
|
||||||
|
|
||||||
void sportProcessTelemetryPacket(const uint8_t * packet)
|
void sportProcessTelemetryPacket(const uint8_t * packet)
|
||||||
{
|
{
|
||||||
uint8_t physicalId = packet[0] & 0x1F;
|
|
||||||
uint8_t primId = packet[1];
|
|
||||||
uint16_t id = *((uint16_t *)(packet+2));
|
|
||||||
uint32_t data = SPORT_DATA_S32(packet);
|
|
||||||
|
|
||||||
if (!checkSportPacket(packet)) {
|
if (!checkSportPacket(packet)) {
|
||||||
TRACE("sportProcessTelemetryPacket(): checksum error ");
|
TRACE("sportProcessTelemetryPacket(): checksum error ");
|
||||||
DUMP(packet, FRSKY_SPORT_PACKET_SIZE);
|
DUMP(packet, FRSKY_SPORT_PACKET_SIZE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sportProcessTelemetryPacketWithoutCrc(packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sportProcessTelemetryPacketWithoutCrc(const uint8_t * packet)
|
||||||
|
{
|
||||||
|
uint8_t physicalId = packet[0] & 0x1F;
|
||||||
|
uint8_t primId = packet[1];
|
||||||
|
uint16_t id = *((uint16_t *)(packet+2));
|
||||||
|
uint32_t data = SPORT_DATA_S32(packet);
|
||||||
|
|
||||||
if (primId == DATA_FRAME) {
|
if (primId == DATA_FRAME) {
|
||||||
uint8_t instance = physicalId + 1;
|
uint8_t instance = physicalId + 1;
|
||||||
if (id == RSSI_ID && isValidIdAndInstance(RSSI_ID, instance)) {
|
if (id == RSSI_ID && isValidIdAndInstance(RSSI_ID, instance)) {
|
||||||
|
@ -159,6 +165,10 @@ void sportProcessTelemetryPacket(const uint8_t * packet)
|
||||||
else
|
else
|
||||||
telemetryData.rssi.set(data);
|
telemetryData.rssi.set(data);
|
||||||
}
|
}
|
||||||
|
else if (id == R9_PWR_ID) {
|
||||||
|
uint32_t r9pwr[] = {100, 200, 500, 1000};
|
||||||
|
data = r9pwr[SPORT_DATA_U8(packet) & 0x03];
|
||||||
|
}
|
||||||
else if (id == XJT_VERSION_ID) {
|
else if (id == XJT_VERSION_ID) {
|
||||||
telemetryData.xjtVersion = HUB_DATA_U16(packet);
|
telemetryData.xjtVersion = HUB_DATA_U16(packet);
|
||||||
if (!IS_RAS_VALUE_VALID()) {
|
if (!IS_RAS_VALUE_VALID()) {
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
uint8_t telemetryStreaming = 0;
|
uint8_t telemetryStreaming = 0;
|
||||||
|
uint8_t R9ModuleStreaming = 0;
|
||||||
uint8_t telemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; // Receive buffer. 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1)
|
uint8_t telemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; // Receive buffer. 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1)
|
||||||
uint8_t telemetryRxBufferCount = 0;
|
uint8_t telemetryRxBufferCount = 0;
|
||||||
|
|
||||||
|
@ -28,8 +29,6 @@ uint8_t telemetryRxBufferCount = 0;
|
||||||
uint8_t wshhStreaming = 0;
|
uint8_t wshhStreaming = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t link_counter = 0;
|
|
||||||
|
|
||||||
uint8_t telemetryState = TELEMETRY_INIT;
|
uint8_t telemetryState = TELEMETRY_INIT;
|
||||||
|
|
||||||
TelemetryData telemetryData;
|
TelemetryData telemetryData;
|
||||||
|
@ -40,44 +39,53 @@ uint8_t telemetryProtocol = 255;
|
||||||
uint8_t serialInversion = 0;
|
uint8_t serialInversion = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void processTelemetryData(uint8_t data)
|
void processTelemetryData(uint8_t data)
|
||||||
{
|
{
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
if (telemetryProtocol == PROTOCOL_PULSES_CROSSFIRE) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||||
processCrossfireTelemetryData(data);
|
processCrossfireTelemetryData(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
if (telemetryProtocol == PROTOCOL_SPEKTRUM) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_SPEKTRUM) {
|
||||||
processSpektrumTelemetryData(data);
|
processSpektrumTelemetryData(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (telemetryProtocol == PROTOCOL_FLYSKY_IBUS) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FLYSKY_IBUS) {
|
||||||
processFlySkyTelemetryData(data);
|
processFlySkyTelemetryData(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (telemetryProtocol == PROTOCOL_MULTIMODULE) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE) {
|
||||||
processMultiTelemetryData(data);
|
processMultiTelemetryData(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_PXX2) {
|
||||||
|
processFrskyPXX2Data(data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
processFrskyTelemetryData(data);
|
processFrskyTelemetryData(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void telemetryWakeup()
|
void telemetryWakeup()
|
||||||
{
|
{
|
||||||
uint8_t requiredTelemetryProtocol = modelTelemetryProtocol();
|
uint8_t requiredTelemetryProtocol = modelTelemetryProtocol();
|
||||||
|
|
||||||
#if defined(REVX)
|
#if defined(REVX)
|
||||||
uint8_t requiredSerialInversion = g_model.moduleData[EXTERNAL_MODULE].invertedSerial;
|
uint8_t requiredSerialInversion = g_model.moduleData[EXTERNAL_MODULE].invertedSerial;
|
||||||
if (telemetryProtocol != requiredTelemetryProtocol || serialInversion != requiredSerialInversion) {
|
if (telemetryProtocol != requiredTelemetryProtocol || serialInversion != requiredSerialInversion) {
|
||||||
serialInversion = requiredSerialInversion;
|
serialInversion = requiredSerialInversion;
|
||||||
#else
|
|
||||||
if (telemetryProtocol != requiredTelemetryProtocol) {
|
|
||||||
#endif
|
|
||||||
telemetryInit(requiredTelemetryProtocol);
|
telemetryInit(requiredTelemetryProtocol);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (telemetryProtocol != requiredTelemetryProtocol) {
|
||||||
|
telemetryInit(requiredTelemetryProtocol);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(STM32)
|
#if defined(STM32)
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
@ -89,7 +97,7 @@ void telemetryWakeup()
|
||||||
} while (telemetryGetByte(&data));
|
} while (telemetryGetByte(&data));
|
||||||
}
|
}
|
||||||
#elif defined(PCBSKY9X)
|
#elif defined(PCBSKY9X)
|
||||||
if (telemetryProtocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
while (telemetrySecondPortReceive(data)) {
|
while (telemetrySecondPortReceive(data)) {
|
||||||
processTelemetryData(data);
|
processTelemetryData(data);
|
||||||
|
@ -101,7 +109,6 @@ void telemetryWakeup()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
||||||
const TelemetrySensor & sensor = g_model.telemetrySensors[i];
|
const TelemetrySensor & sensor = g_model.telemetrySensors[i];
|
||||||
if (sensor.type == TELEM_TYPE_CALCULATED) {
|
if (sensor.type == TELEM_TYPE_CALCULATED) {
|
||||||
|
@ -196,7 +203,9 @@ void telemetryInterrupt10ms()
|
||||||
wshhStreaming--;
|
wshhStreaming--;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (R9ModuleStreaming > 0) {
|
||||||
|
R9ModuleStreaming--;
|
||||||
|
}
|
||||||
if (telemetryStreaming > 0) {
|
if (telemetryStreaming > 0) {
|
||||||
telemetryStreaming--;
|
telemetryStreaming--;
|
||||||
}
|
}
|
||||||
|
@ -216,11 +225,8 @@ void telemetryReset()
|
||||||
}
|
}
|
||||||
|
|
||||||
telemetryStreaming = 0; // reset counter only if valid frsky packets are being detected
|
telemetryStreaming = 0; // reset counter only if valid frsky packets are being detected
|
||||||
link_counter = 0;
|
|
||||||
|
|
||||||
telemetryState = TELEMETRY_INIT;
|
telemetryState = TELEMETRY_INIT;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// we don't reset the telemetry here as we would also reset the consumption after model load
|
// we don't reset the telemetry here as we would also reset the consumption after model load
|
||||||
|
@ -228,12 +234,12 @@ void telemetryInit(uint8_t protocol)
|
||||||
{
|
{
|
||||||
telemetryProtocol = protocol;
|
telemetryProtocol = protocol;
|
||||||
|
|
||||||
if (protocol == PROTOCOL_FRSKY_D) {
|
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D) {
|
||||||
telemetryPortInit(FRSKY_D_BAUDRATE, TELEMETRY_SERIAL_DEFAULT);
|
telemetryPortInit(FRSKY_D_BAUDRATE, TELEMETRY_SERIAL_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (protocol == PROTOCOL_MULTIMODULE || protocol == PROTOCOL_FLYSKY_IBUS) {
|
else if (protocol == PROTOCOL_TELEMETRY_MULTIMODULE || protocol == PROTOCOL_TELEMETRY_FLYSKY_IBUS) {
|
||||||
// The DIY Multi module always speaks 100000 baud regardless of the telemetry protocol in use
|
// The DIY Multi module always speaks 100000 baud regardless of the telemetry protocol in use
|
||||||
telemetryPortInit(MULTIMODULE_BAUDRATE, TELEMETRY_SERIAL_8E2);
|
telemetryPortInit(MULTIMODULE_BAUDRATE, TELEMETRY_SERIAL_8E2);
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
|
@ -241,14 +247,14 @@ void telemetryInit(uint8_t protocol)
|
||||||
outputTelemetryBufferTrigger = 0x7E;
|
outputTelemetryBufferTrigger = 0x7E;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (protocol == PROTOCOL_SPEKTRUM) {
|
else if (protocol == PROTOCOL_TELEMETRY_SPEKTRUM) {
|
||||||
// Spektrum's own small race RX (SPM4648) uses 125000 8N1, use the same since there is no real standard
|
// Spektrum's own small race RX (SPM4648) uses 125000 8N1, use the same since there is no real standard
|
||||||
telemetryPortInit(125000, TELEMETRY_SERIAL_DEFAULT);
|
telemetryPortInit(125000, TELEMETRY_SERIAL_DEFAULT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
else if (protocol == PROTOCOL_PULSES_CROSSFIRE) {
|
else if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||||
telemetryPortInit(CROSSFIRE_BAUDRATE, TELEMETRY_SERIAL_DEFAULT);
|
telemetryPortInit(CROSSFIRE_BAUDRATE, TELEMETRY_SERIAL_DEFAULT);
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
outputTelemetryBufferSize = 0;
|
outputTelemetryBufferSize = 0;
|
||||||
|
@ -259,12 +265,19 @@ void telemetryInit(uint8_t protocol)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SERIAL2) || defined(PCBSKY9X)
|
#if defined(SERIAL2) || defined(PCBSKY9X)
|
||||||
else if (protocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
else if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||||
telemetryPortInit(0, TELEMETRY_SERIAL_DEFAULT);
|
telemetryPortInit(0, TELEMETRY_SERIAL_DEFAULT);
|
||||||
serial2TelemetryInit(PROTOCOL_FRSKY_D_SECONDARY);
|
serial2TelemetryInit(PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
else if (protocol == PROTOCOL_TELEMETRY_PXX2) {
|
||||||
|
telemetryPortInit(PXX2_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA);
|
||||||
|
#if defined(LUA)
|
||||||
|
outputTelemetryBufferSize = 0;
|
||||||
|
outputTelemetryBufferTrigger = 0x7E;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
telemetryPortInit(FRSKY_SPORT_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA);
|
telemetryPortInit(FRSKY_SPORT_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA);
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
|
|
|
@ -36,13 +36,12 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern uint8_t telemetryStreaming; // >0 (true) == data is streaming in. 0 = no data detected for some time
|
extern uint8_t telemetryStreaming; // >0 (true) == data is streaming in. 0 = no data detected for some time
|
||||||
|
extern uint8_t R9ModuleStreaming; // >0 (true) == R9 module is connected and sending data 0 = no data detected for some time
|
||||||
|
|
||||||
#if defined(WS_HOW_HIGH)
|
#if defined(WS_HOW_HIGH)
|
||||||
extern uint8_t wshhStreaming;
|
extern uint8_t wshhStreaming;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern uint8_t link_counter;
|
|
||||||
|
|
||||||
enum TelemetryStates {
|
enum TelemetryStates {
|
||||||
TELEMETRY_INIT,
|
TELEMETRY_INIT,
|
||||||
TELEMETRY_OK,
|
TELEMETRY_OK,
|
||||||
|
@ -99,7 +98,6 @@ void delTelemetryIndex(uint8_t index);
|
||||||
int availableTelemetryIndex();
|
int availableTelemetryIndex();
|
||||||
int lastUsedTelemetryIndex();
|
int lastUsedTelemetryIndex();
|
||||||
|
|
||||||
int32_t getTelemetryValue(uint8_t index, uint8_t & prec);
|
|
||||||
int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec);
|
int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec);
|
||||||
|
|
||||||
void frskySportSetDefault(int index, uint16_t id, uint8_t subId, uint8_t instance);
|
void frskySportSetDefault(int index, uint16_t id, uint8_t subId, uint8_t instance);
|
||||||
|
@ -109,20 +107,20 @@ void frskyDSetDefault(int index, uint16_t id);
|
||||||
#define IS_SPEED_UNIT(unit) ((unit) >= UNIT_KTS && (unit) <= UNIT_MPH)
|
#define IS_SPEED_UNIT(unit) ((unit) >= UNIT_KTS && (unit) <= UNIT_MPH)
|
||||||
|
|
||||||
extern uint8_t telemetryProtocol;
|
extern uint8_t telemetryProtocol;
|
||||||
#define IS_FRSKY_D_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_D)
|
|
||||||
#if defined (MULTIMODULE)
|
#if defined (MULTIMODULE)
|
||||||
#define IS_D16_MULTI() ((g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FRSKY) && (g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH))
|
#define IS_D16_MULTI() ((g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FRSKY) && (g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH))
|
||||||
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_MULTIMODULE && IS_D16_MULTI()))
|
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && IS_D16_MULTI()))
|
||||||
#else
|
#else
|
||||||
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_SPORT)
|
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT)
|
||||||
#endif
|
#endif
|
||||||
#define IS_SPEKTRUM_PROTOCOL() (telemetryProtocol == PROTOCOL_SPEKTRUM)
|
#define IS_SPEKTRUM_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_SPEKTRUM)
|
||||||
|
|
||||||
inline uint8_t modelTelemetryProtocol()
|
inline uint8_t modelTelemetryProtocol()
|
||||||
{
|
{
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) {
|
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) {
|
||||||
return PROTOCOL_PULSES_CROSSFIRE;
|
return PROTOCOL_TELEMETRY_CROSSFIRE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -130,14 +128,22 @@ inline uint8_t modelTelemetryProtocol()
|
||||||
return g_model.telemetryProtocol;
|
return g_model.telemetryProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IS_INTERNAL_MODULE_ENABLED() && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M) {
|
||||||
|
#if defined(PCBXLITE)
|
||||||
|
return PROTOCOL_TELEMETRY_FRSKY_SPORT;
|
||||||
|
#else
|
||||||
|
return PROTOCOL_TELEMETRY_PXX2;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
if (!IS_INTERNAL_MODULE_ENABLED() && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) {
|
if (!IS_INTERNAL_MODULE_ENABLED() && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) {
|
||||||
return PROTOCOL_MULTIMODULE;
|
return PROTOCOL_TELEMETRY_MULTIMODULE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// default choice
|
// default choice
|
||||||
return PROTOCOL_FRSKY_SPORT;
|
return PROTOCOL_TELEMETRY_FRSKY_SPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "telemetry_sensors.h"
|
#include "telemetry_sensors.h"
|
||||||
|
|
|
@ -33,7 +33,7 @@ bool isFaiForbidden(source_t idx)
|
||||||
|
|
||||||
switch (telemetryProtocol) {
|
switch (telemetryProtocol) {
|
||||||
|
|
||||||
case PROTOCOL_FRSKY_SPORT:
|
case PROTOCOL_TELEMETRY_FRSKY_SPORT:
|
||||||
if (sensor->id == RSSI_ID) {
|
if (sensor->id == RSSI_ID) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ bool isFaiForbidden(source_t idx)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTOCOL_FRSKY_D:
|
case PROTOCOL_TELEMETRY_FRSKY_D:
|
||||||
if (sensor->id == D_RSSI_ID) {
|
if (sensor->id == D_RSSI_ID) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ bool isFaiForbidden(source_t idx)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
case PROTOCOL_PULSES_CROSSFIRE:
|
case PROTOCOL_TELEMETRY_CROSSFIRE:
|
||||||
if (sensor->id == RX_RSSI1_INDEX) {
|
if (sensor->id == RX_RSSI1_INDEX) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,6 +93,7 @@ const char STR_OPEN9X[] =
|
||||||
ISTR(VTRAINERMODES)
|
ISTR(VTRAINERMODES)
|
||||||
ISTR(TARANIS_PROTOCOLS)
|
ISTR(TARANIS_PROTOCOLS)
|
||||||
ISTR(R9M_REGION)
|
ISTR(R9M_REGION)
|
||||||
|
ISTR(R9MFLEX_FREQ)
|
||||||
ISTR(R9M_FCC_POWER_VALUES)
|
ISTR(R9M_FCC_POWER_VALUES)
|
||||||
ISTR(R9M_LBT_POWER_VALUES)
|
ISTR(R9M_LBT_POWER_VALUES)
|
||||||
ISTR(TELEMETRY_PROTOCOLS)
|
ISTR(TELEMETRY_PROTOCOLS)
|
||||||
|
@ -145,6 +146,7 @@ const char STR_PPMFRAME[] = TR_PPMFRAME;
|
||||||
const char STR_REFRESHRATE[] = TR_REFRESHRATE;
|
const char STR_REFRESHRATE[] = TR_REFRESHRATE;
|
||||||
const char SSTR_WARN_BATTVOLTAGE[] = STR_WARN_BATTVOLTAGE;
|
const char SSTR_WARN_BATTVOLTAGE[] = STR_WARN_BATTVOLTAGE;
|
||||||
const char STR_MS[] = TR_MS;
|
const char STR_MS[] = TR_MS;
|
||||||
|
const char STR_FREQUENCY[] = TR_FREQUENCY;
|
||||||
const char STR_SWITCH[] = TR_SWITCH;
|
const char STR_SWITCH[] = TR_SWITCH;
|
||||||
const char STR_TRIMS[] = TR_TRIMS;
|
const char STR_TRIMS[] = TR_TRIMS;
|
||||||
const char STR_FADEIN[] = TR_FADEIN;
|
const char STR_FADEIN[] = TR_FADEIN;
|
||||||
|
|
|
@ -189,8 +189,9 @@ extern const char STR_OPEN9X[];
|
||||||
#define OFS_VFAILSAFE (OFS_JACKMODES + sizeof(TR_JACKMODES))
|
#define OFS_VFAILSAFE (OFS_JACKMODES + sizeof(TR_JACKMODES))
|
||||||
#define OFS_VTRAINERMODES (OFS_VFAILSAFE + sizeof(TR_VFAILSAFE))
|
#define OFS_VTRAINERMODES (OFS_VFAILSAFE + sizeof(TR_VFAILSAFE))
|
||||||
#define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES))
|
#define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES))
|
||||||
#define OFS_R9M_REGION (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS))
|
#define OFS_R9M_REGION (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS))
|
||||||
#define OFS_R9M_FCC_POWER_VALUES (OFS_R9M_REGION + sizeof(TR_R9M_REGION))
|
#define OFS_R9MFLEX_FREQ (OFS_R9M_REGION + sizeof(TR_R9M_REGION))
|
||||||
|
#define OFS_R9M_FCC_POWER_VALUES (OFS_R9MFLEX_FREQ + sizeof(TR_R9MFLEX_FREQ))
|
||||||
#define OFS_R9M_LBT_POWER_VALUES (OFS_R9M_FCC_POWER_VALUES + sizeof(TR_R9M_FCC_POWER_VALUES))
|
#define OFS_R9M_LBT_POWER_VALUES (OFS_R9M_FCC_POWER_VALUES + sizeof(TR_R9M_FCC_POWER_VALUES))
|
||||||
#define OFS_TELEMETRY_PROTOCOLS (OFS_R9M_LBT_POWER_VALUES + sizeof(TR_R9M_LBT_POWER_VALUES))
|
#define OFS_TELEMETRY_PROTOCOLS (OFS_R9M_LBT_POWER_VALUES + sizeof(TR_R9M_LBT_POWER_VALUES))
|
||||||
#define OFS_XJT_PROTOCOLS (OFS_TELEMETRY_PROTOCOLS + sizeof(TR_TELEMETRY_PROTOCOLS))
|
#define OFS_XJT_PROTOCOLS (OFS_TELEMETRY_PROTOCOLS + sizeof(TR_TELEMETRY_PROTOCOLS))
|
||||||
|
@ -296,7 +297,8 @@ extern const char STR_OPEN9X[];
|
||||||
|
|
||||||
#define STR_VTRAINERMODES (STR_OPEN9X + OFS_VTRAINERMODES)
|
#define STR_VTRAINERMODES (STR_OPEN9X + OFS_VTRAINERMODES)
|
||||||
#define STR_TARANIS_PROTOCOLS (STR_OPEN9X + OFS_TARANIS_PROTOCOLS)
|
#define STR_TARANIS_PROTOCOLS (STR_OPEN9X + OFS_TARANIS_PROTOCOLS)
|
||||||
#define STR_R9M_REGION (STR_OPEN9X + OFS_R9M_REGION)
|
#define STR_R9M_REGION (STR_OPEN9X + OFS_R9M_REGION)
|
||||||
|
#define STR_R9MFLEX_FREQ (STR_OPEN9X + OFS_R9MFLEX_FREQ)
|
||||||
#define STR_R9M_FCC_POWER_VALUES (STR_OPEN9X + OFS_R9M_FCC_POWER_VALUES)
|
#define STR_R9M_FCC_POWER_VALUES (STR_OPEN9X + OFS_R9M_FCC_POWER_VALUES)
|
||||||
#define STR_R9M_LBT_POWER_VALUES (STR_OPEN9X + OFS_R9M_LBT_POWER_VALUES)
|
#define STR_R9M_LBT_POWER_VALUES (STR_OPEN9X + OFS_R9M_LBT_POWER_VALUES)
|
||||||
#define STR_TELEMETRY_PROTOCOLS (STR_OPEN9X + OFS_TELEMETRY_PROTOCOLS)
|
#define STR_TELEMETRY_PROTOCOLS (STR_OPEN9X + OFS_TELEMETRY_PROTOCOLS)
|
||||||
|
@ -363,6 +365,7 @@ extern const char STR_PPMFRAME[];
|
||||||
extern const char STR_REFRESHRATE[];
|
extern const char STR_REFRESHRATE[];
|
||||||
extern const char SSTR_WARN_BATTVOLTAGE[];
|
extern const char SSTR_WARN_BATTVOLTAGE[];
|
||||||
extern const char STR_MS[];
|
extern const char STR_MS[];
|
||||||
|
extern const char STR_FREQUENCY[];
|
||||||
extern const char STR_SWITCH[];
|
extern const char STR_SWITCH[];
|
||||||
extern const char STR_TRIMS[];
|
extern const char STR_TRIMS[];
|
||||||
extern const char STR_FADEIN[];
|
extern const char STR_FADEIN[];
|
||||||
|
|
|
@ -152,7 +152,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -160,21 +160,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POZ""NEG"
|
#define TR_POSNEG "POZ""NEG"
|
||||||
|
@ -579,6 +569,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Spínač"
|
#define TR_SWITCH "Spínač"
|
||||||
#define TR_TRIMS "Trimy"
|
#define TR_TRIMS "Trimy"
|
||||||
#define TR_FADEIN "Přechod Zap"
|
#define TR_FADEIN "Přechod Zap"
|
||||||
|
@ -1199,6 +1190,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filtr"
|
#define TR_JITTER_FILTER "ADC Filtr"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -163,21 +163,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -584,6 +574,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH TR("Schalt.", "Schalter")
|
#define TR_SWITCH TR("Schalt.", "Schalter")
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Langs. Ein"
|
#define TR_FADEIN "Langs. Ein"
|
||||||
|
@ -1197,6 +1188,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
// ----------------------------------------------------------------
|
// ----------------------------------------------------------------
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -154,7 +154,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -162,22 +162,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -583,6 +572,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Switch"
|
#define TR_SWITCH "Switch"
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Fade in"
|
#define TR_FADEIN "Fade in"
|
||||||
|
@ -1208,6 +1198,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC filter"
|
#define TR_JITTER_FILTER "ADC filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -154,7 +154,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -162,21 +162,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -587,6 +577,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Interr"
|
#define TR_SWITCH "Interr"
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Inicio"
|
#define TR_FADEIN "Inicio"
|
||||||
|
@ -1203,6 +1194,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -154,7 +154,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -162,21 +162,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -579,6 +569,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Switch"
|
#define TR_SWITCH "Switch"
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Fade In"
|
#define TR_FADEIN "Fade In"
|
||||||
|
@ -1189,6 +1180,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -154,7 +154,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -162,21 +162,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SLV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -596,6 +586,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH TR("Inter", "Interrupteur")
|
#define TR_SWITCH TR("Inter", "Interrupteur")
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Fondu ON"
|
#define TR_FADEIN "Fondu ON"
|
||||||
|
@ -1215,6 +1206,7 @@
|
||||||
#define TR_JITTER_FILTER "Filtre ADC"
|
#define TR_JITTER_FILTER "Filtre ADC"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -154,7 +154,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -162,21 +162,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -585,6 +575,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Inter."
|
#define TR_SWITCH "Inter."
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Diss.In"
|
#define TR_FADEIN "Diss.In"
|
||||||
|
@ -1198,6 +1189,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -156,7 +156,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -164,21 +164,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -579,6 +569,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH TR("Schak.", "Schakelaar")
|
#define TR_SWITCH TR("Schak.", "Schakelaar")
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Fade in"
|
#define TR_FADEIN "Fade in"
|
||||||
|
@ -1205,6 +1196,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -163,21 +163,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POZ""NEG"
|
#define TR_POSNEG "POZ""NEG"
|
||||||
|
@ -586,6 +576,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Przełą"
|
#define TR_SWITCH "Przełą"
|
||||||
#define TR_TRIMS "Trymy"
|
#define TR_TRIMS "Trymy"
|
||||||
#define TR_FADEIN "Pojawia"
|
#define TR_FADEIN "Pojawia"
|
||||||
|
@ -1199,6 +1190,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -153,7 +153,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -161,21 +161,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_XPPM
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "POS""NEG"
|
#define TR_POSNEG "POS""NEG"
|
||||||
|
@ -586,6 +576,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Chave"
|
#define TR_SWITCH "Chave"
|
||||||
#define TR_TRIMS "Trims"
|
#define TR_TRIMS "Trims"
|
||||||
#define TR_FADEIN "Aparecer"
|
#define TR_FADEIN "Aparecer"
|
||||||
|
@ -1202,6 +1193,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -152,7 +152,7 @@
|
||||||
|
|
||||||
#if defined(PXX)
|
#if defined(PXX)
|
||||||
#define TR_PXX "PXX\0 "
|
#define TR_PXX "PXX\0 "
|
||||||
#elif defined(DSM2) || defined(IRPROTOS)
|
#elif defined(DSM2)
|
||||||
#define TR_PXX "[PXX]\0"
|
#define TR_PXX "[PXX]\0"
|
||||||
#else
|
#else
|
||||||
#define TR_PXX
|
#define TR_PXX
|
||||||
|
@ -160,19 +160,11 @@
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||||
#elif defined(IRPROTOS)
|
|
||||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
|
||||||
#else
|
#else
|
||||||
#define TR_DSM2
|
#define TR_DSM2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(IRPROTOS)
|
#define TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
|
||||||
#else
|
|
||||||
#define TR_IRPROTOS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS
|
|
||||||
|
|
||||||
#define LEN_POSNEG "\003"
|
#define LEN_POSNEG "\003"
|
||||||
#define TR_POSNEG "Pos""Neg"
|
#define TR_POSNEG "Pos""Neg"
|
||||||
|
@ -596,6 +588,7 @@
|
||||||
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
#define TR_REFRESHRATE TR(INDENT "Refresh", INDENT "Refresh rate")
|
||||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
#define STR_WARN_BATTVOLTAGE TR(INDENT "Output is VBAT: ", INDENT "Warning: output level is VBAT: ")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
|
#define TR_FREQUENCY INDENT "Frequency"
|
||||||
#define TR_SWITCH "Brytare"
|
#define TR_SWITCH "Brytare"
|
||||||
#define TR_TRIMS "Trimmar"
|
#define TR_TRIMS "Trimmar"
|
||||||
#define TR_FADEIN "Tona In"
|
#define TR_FADEIN "Tona In"
|
||||||
|
@ -1210,6 +1203,7 @@
|
||||||
#define TR_JITTER_FILTER "ADC Filter"
|
#define TR_JITTER_FILTER "ADC Filter"
|
||||||
|
|
||||||
#define ZSTR_RSSI "RSSI"
|
#define ZSTR_RSSI "RSSI"
|
||||||
|
#define ZSTR_R9PW "R9PW"
|
||||||
#define ZSTR_RAS "SWR"
|
#define ZSTR_RAS "SWR"
|
||||||
#define ZSTR_A1 "A1"
|
#define ZSTR_A1 "A1"
|
||||||
#define ZSTR_A2 "A2"
|
#define ZSTR_A2 "A2"
|
||||||
|
|
|
@ -79,7 +79,6 @@ options_taranis = {
|
||||||
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
||||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
options_taranisplus = {
|
options_taranisplus = {
|
||||||
|
@ -97,7 +96,6 @@ options_taranisplus = {
|
||||||
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
||||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
options_xlite = {
|
options_xlite = {
|
||||||
|
@ -114,7 +112,6 @@ options_xlite = {
|
||||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"stdr9m": ("MODULE_R9M_FULLSIZE", "YES", None),
|
"stdr9m": ("MODULE_R9M_FULLSIZE", "YES", None),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
options_taranisx9e = {
|
options_taranisx9e = {
|
||||||
|
@ -132,7 +129,6 @@ options_taranisx9e = {
|
||||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||||
"horussticks": ("STICKS", "HORUS", "STANDARD"),
|
"horussticks": ("STICKS", "HORUS", "STANDARD"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
options_x12s = {
|
options_x12s = {
|
||||||
|
@ -147,7 +143,6 @@ options_x12s = {
|
||||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"pcbdev": ("PCBREV", "10", None),
|
"pcbdev": ("PCBREV", "10", None),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
options_x10 = {
|
options_x10 = {
|
||||||
|
@ -161,5 +156,4 @@ options_x10 = {
|
||||||
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
||||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue