mirror of
https://github.com/opentx/opentx.git
synced 2025-07-20 23:05:12 +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
|
||||
Vincent Heron
|
||||
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(NANO "Use nano newlib and binalloc")
|
||||
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.
|
||||
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)
|
||||
endif(NIGHTLY_BUILD_WARNING)
|
||||
|
||||
if(MODULE_R9M_FLEX_FW)
|
||||
add_definitions(-DMODULE_R9M_FLEX_FW)
|
||||
endif()
|
||||
|
||||
if(PXX2)
|
||||
add_definitions(-DPXX2)
|
||||
endif()
|
||||
|
||||
set(SRC
|
||||
${SRC}
|
||||
opentx.cpp
|
||||
|
|
|
@ -226,12 +226,12 @@ enum BeeperMode {
|
|||
#endif
|
||||
|
||||
#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)
|
||||
#define IS_INTERNAL_MODULE_ENABLED() (false)
|
||||
#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 {
|
||||
#if defined(CLI) || defined(DEBUG)
|
||||
|
|
|
@ -406,9 +406,18 @@ PACK(struct ModuleData {
|
|||
int8_t rfProtocol:4;
|
||||
uint8_t channelsStart;
|
||||
int8_t channelsCount; // 0=8 channels
|
||||
union {
|
||||
struct {
|
||||
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];
|
||||
union {
|
||||
struct {
|
||||
|
|
|
@ -155,8 +155,7 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
|
|||
active &= (bool)CFN_ACTIVE(cfn);
|
||||
}
|
||||
|
||||
if (active || IS_PLAY_BOTH_FUNC(CFN_FUNC(cfn))) {
|
||||
|
||||
if (active) {
|
||||
switch (CFN_FUNC(cfn)) {
|
||||
|
||||
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
||||
|
|
|
@ -97,6 +97,9 @@ enum MenuModelSetupItems {
|
|||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||
#endif
|
||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||
#if !defined(PCBXLITE)
|
||||
ITEM_MODEL_EXTERNAL_MODULE_FREQ,
|
||||
#endif
|
||||
#if defined(PCBSKY9X) && !defined(REVA)
|
||||
ITEM_MODEL_EXTRA_MODULE_LABEL,
|
||||
ITEM_MODEL_EXTRA_MODULE_CHANNELS,
|
||||
|
@ -160,17 +163,21 @@ enum MenuModelSetupItems {
|
|||
#define OUTPUT_TYPE_ROWS()
|
||||
#endif
|
||||
#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
|
||||
|
||||
#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 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 TIMER_ROWS 2, 0, 0, 0, 0
|
||||
#if defined(PCBSKY9X) && !defined(REVA)
|
||||
#define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2,
|
||||
#else
|
||||
#elif defined(PCBXLITE)
|
||||
#define EXTRA_MODULE_ROWS
|
||||
#else
|
||||
#define EXTRA_MODULE_ROWS isR9MMFlex(EXTERNAL_MODULE) ? (uint8_t)1: (uint8_t)HIDDEN_ROW,
|
||||
#endif
|
||||
|
||||
#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);
|
||||
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);
|
||||
#if defined(PCBXLITE)
|
||||
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));
|
||||
#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)
|
||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
|
@ -761,6 +773,7 @@ void menuModelSetup(event_t event)
|
|||
case 1:
|
||||
if (isModuleDSM2(EXTERNAL_MODULE))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||
#if defined(PCBXLITE)
|
||||
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) {
|
||||
|
@ -770,7 +783,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
||||
}
|
||||
|
||||
#endif
|
||||
#if defined(MULTIMODULE)
|
||||
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);
|
||||
|
@ -1197,6 +1210,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
#if defined(PCBXLITE)
|
||||
if (isModuleR9M(moduleIdx)) {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||
|
@ -1207,6 +1221,9 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
else if (isModuleSBUS(moduleIdx)) {
|
||||
#else
|
||||
if (isModuleSBUS(moduleIdx)) {
|
||||
#endif
|
||||
lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE);
|
||||
putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT);
|
||||
}
|
||||
|
@ -1252,6 +1269,19 @@ void menuModelSetup(event_t event)
|
|||
|
||||
}
|
||||
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)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||
|
|
|
@ -543,7 +543,7 @@ void menuModelTelemetryFrsky(event_t event)
|
|||
|
||||
case ITEM_TELEMETRY_RSSI_LABEL:
|
||||
#if defined(MULTIMODULE)
|
||||
if (telemetryProtocol == PROTOCOL_MULTIMODULE &&
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE &&
|
||||
g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
|
||||
lcdDrawTextAlignedLeft(y, "RSNR");
|
||||
else
|
||||
|
|
|
@ -88,6 +88,7 @@ enum MenuModelSetupItems {
|
|||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||
#endif
|
||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_FREQ,
|
||||
ITEM_MODEL_TRAINER_LABEL,
|
||||
ITEM_MODEL_TRAINER_MODE,
|
||||
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 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
|
||||
#define TIMERS_ROWS TIMER_ROWS(0)
|
||||
|
@ -296,6 +298,7 @@ void menuModelSetup(event_t event)
|
|||
EXTERNAL_MODULE_OPTION_ROW,
|
||||
MULTIMODULE_MODULE_ROWS
|
||||
EXTERNAL_MODULE_POWER_ROW,
|
||||
EXTRA_MODULE_ROWS
|
||||
LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS});
|
||||
|
||||
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);
|
||||
else if (isModuleDSM2(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (isModuleR9M(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
else if (isR9ModuleRunning(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].r9m.region, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
|
@ -771,15 +774,6 @@ void menuModelSetup(event_t event)
|
|||
case 1:
|
||||
if (isModuleDSM2(EXTERNAL_MODULE))
|
||||
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)
|
||||
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);
|
||||
|
@ -1129,16 +1123,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
if (isModuleR9M(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)) {
|
||||
if (isModuleSBUS(moduleIdx)) {
|
||||
lcdDrawTextAlignedLeft(y, STR_WARN_BATTVOLTAGE);
|
||||
putsVolts(lcdLastRightPos, y, getBatteryVoltage(), attr | PREC2 | LEFT);
|
||||
}
|
||||
|
@ -1174,6 +1159,18 @@ void menuModelSetup(event_t event)
|
|||
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)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||
|
|
|
@ -82,6 +82,7 @@ enum MenuModelSetupItems {
|
|||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||
#endif
|
||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_FREQ,
|
||||
ITEM_MODEL_TRAINER_LABEL,
|
||||
ITEM_MODEL_TRAINER_MODE,
|
||||
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 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
|
||||
#define TIMERS_ROWS TIMER_ROWS(0)
|
||||
|
@ -285,6 +287,7 @@ bool menuModelSetup(event_t event)
|
|||
EXTERNAL_MODULE_OPTION_ROW,
|
||||
MULTIMODULE_MODULE_ROWS
|
||||
EXTERNAL_MODULE_POWER_ROW,
|
||||
EXTRA_MODULE_ROWS
|
||||
LABEL(Trainer),
|
||||
0,
|
||||
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));
|
||||
else if (isModuleDSM2(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
||||
else if (isModuleR9M(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
else if (isR9ModuleRunning(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].r9m.region, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
|
@ -728,15 +731,6 @@ bool menuModelSetup(event_t event)
|
|||
case 1:
|
||||
if (isModuleDSM2(EXTERNAL_MODULE))
|
||||
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)
|
||||
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);
|
||||
|
@ -1068,16 +1062,7 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
if (isModuleR9M(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)) {
|
||||
if (isModuleSBUS(moduleIdx)) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_WARN_BATTVOLTAGE);
|
||||
drawValueWithUnit(MODEL_SETUP_4TH_COLUMN, y, getBatteryVoltage(), UNIT_VOLTS, attr|PREC2|LEFT);
|
||||
}
|
||||
|
@ -1116,6 +1101,18 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
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)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||
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"
|
||||
};
|
||||
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"
|
||||
};
|
||||
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 isSwitchAvailableInTimers(int swtch);
|
||||
bool isR9MModeAvailable(int mode);
|
||||
bool isR9ModuleRunning(int module);
|
||||
bool isR9MMFlex(int module);
|
||||
bool isModuleAvailable(int module);
|
||||
bool isRfProtocolAvailable(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
|
||||
|
||||
#if defined(PCBXLITE)
|
||||
#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)
|
||||
#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
|
||||
#else
|
||||
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isR9ModuleRunning(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW
|
||||
#endif
|
||||
|
||||
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)
|
||||
{
|
||||
#if defined(MODULE_R9M_FLEX_FW)
|
||||
|
@ -495,6 +504,17 @@ bool isR9MModeAvailable(int mode)
|
|||
#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)
|
||||
{
|
||||
#if defined(CROSSFIRE)
|
||||
|
@ -516,7 +536,14 @@ bool isModuleAvailable(int module)
|
|||
return false;
|
||||
}
|
||||
#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;
|
||||
|
||||
}
|
||||
|
||||
bool isRfProtocolAvailable(int protocol)
|
||||
|
@ -531,29 +558,35 @@ bool isRfProtocolAvailable(int protocol)
|
|||
return false;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
|
||||
bool isTelemetryProtocolAvailable(int protocol)
|
||||
{
|
||||
#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;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (protocol== PROTOCOL_PULSES_CROSSFIRE) {
|
||||
if (protocol== PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#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;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBHORUS)
|
||||
if (protocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
||||
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -176,7 +176,7 @@ const char * sportUpdatePowerOn(ModuleIndex module)
|
|||
sportUpdateState = SPORT_POWERUP_REQ;
|
||||
sportWaitState(SPORT_IDLE, 500); // Clear the fifo
|
||||
|
||||
telemetryInit(PROTOCOL_FRSKY_SPORT);
|
||||
telemetryInit(PROTOCOL_TELEMETRY_FRSKY_SPORT);
|
||||
|
||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||
if (module == INTERNAL_MODULE)
|
||||
|
@ -199,7 +199,7 @@ const char * sportUpdatePowerOn(ModuleIndex module)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (telemetryProtocol != PROTOCOL_FRSKY_SPORT) {
|
||||
if (telemetryProtocol != PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||
return TR("Not responding", "Not S.Port 1");
|
||||
}
|
||||
|
||||
|
|
|
@ -23,20 +23,8 @@
|
|||
|
||||
#include "datastructs.h"
|
||||
|
||||
#define WARN_THR_BIT 0x01
|
||||
#define WARN_BEP_BIT 0x80
|
||||
#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 EEPROM_VER 218
|
||||
#define FIRST_CONV_EEPROM_VER 216
|
||||
|
||||
#define GET_PPM_POLARITY(idx) g_model.moduleData[idx].ppm.pulsePol
|
||||
#define GET_SBUS_POLARITY(idx) g_model.moduleData[idx].sbus.noninverted
|
||||
|
@ -53,10 +41,7 @@
|
|||
#define IS_TRAINER_EXTERNAL_MODULE() false
|
||||
#endif
|
||||
|
||||
#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)
|
||||
#define IS_PLAY_FUNC(func) ((func) >= FUNC_PLAY_SOUND && func <= FUNC_PLAY_VALUE)
|
||||
|
||||
#if defined(GVARS)
|
||||
#define IS_ADJUST_GV_FUNC(func) ((func) == FUNC_ADJUST_GVAR)
|
||||
|
@ -141,21 +126,20 @@ enum CurveRefType {
|
|||
CURVE_REF_CUSTOM
|
||||
};
|
||||
|
||||
|
||||
#define MIN_EXPO_WEIGHT -100
|
||||
#define EXPO_VALID(ed) ((ed)->mode)
|
||||
#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_EXT_PERCENT 150
|
||||
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
||||
#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_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_MAX_RESX(lim) calc1000toRESX(LIMIT_MAX(lim))
|
||||
#define LIMIT_MIN_RESX(lim) calc1000toRESX(LIMIT_MIN(lim))
|
||||
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
||||
#define limit_min_max_t int16_t
|
||||
#define LIMIT_EXT_PERCENT 150
|
||||
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
||||
#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_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_MAX_RESX(lim) calc1000toRESX(LIMIT_MAX(lim))
|
||||
#define LIMIT_MIN_RESX(lim) calc1000toRESX(LIMIT_MIN(lim))
|
||||
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
||||
|
||||
#define TRIM_OFF (1)
|
||||
#define TRIM_ON (0)
|
||||
|
@ -191,8 +175,6 @@ enum CurveRefType {
|
|||
#define MD_OFFSET(md) (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_SETOFFSET(md, val) md->offset = val
|
||||
|
||||
|
||||
enum LogicalSwitchesFunctions {
|
||||
LS_FUNC_NONE,
|
||||
|
@ -222,14 +204,6 @@ enum LogicalSwitchesFunctions {
|
|||
#define MAX_LS_DELAY 250 /*25s*/
|
||||
#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
|
||||
{
|
||||
TELEM_TYPE_CUSTOM,
|
||||
|
@ -251,16 +225,10 @@ enum TelemetrySensorFormula
|
|||
};
|
||||
|
||||
enum VarioSource {
|
||||
#if !defined(TELEMETRY_FRSKY_SPORT)
|
||||
VARIO_SOURCE_ALTI,
|
||||
VARIO_SOURCE_ALTI_PLUS,
|
||||
#endif
|
||||
VARIO_SOURCE_VSPEED,
|
||||
VARIO_SOURCE_A1,
|
||||
VARIO_SOURCE_A2,
|
||||
#if defined(TELEMETRY_FRSKY_SPORT)
|
||||
VARIO_SOURCE_DTE,
|
||||
#endif
|
||||
VARIO_SOURCE_COUNT,
|
||||
VARIO_SOURCE_LAST = VARIO_SOURCE_COUNT-1
|
||||
};
|
||||
|
@ -292,8 +260,6 @@ enum FrskyVoltsSource {
|
|||
FRSKY_VOLTS_SOURCE_LAST=FRSKY_VOLTS_SOURCE_CELLS
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum SwashType {
|
||||
SWASH_TYPE_NONE,
|
||||
SWASH_TYPE_120,
|
||||
|
@ -310,8 +276,8 @@ enum SwashType {
|
|||
|
||||
#define ROTARY_ENCODER_MAX 1024
|
||||
|
||||
#define TRIMS_ARRAY_SIZE 8
|
||||
#define TRIM_MODE_NONE 0x1F // 0b11111
|
||||
#define TRIMS_ARRAY_SIZE 8
|
||||
#define TRIM_MODE_NONE 0x1F // 0b11111
|
||||
|
||||
#define IS_MANUAL_RESET_TIMER(idx) (g_model.timers[idx].persistent == 2)
|
||||
|
||||
|
@ -321,37 +287,23 @@ enum SwashType {
|
|||
#define TIMER_COUNTDOWN_START(x) 10
|
||||
#endif
|
||||
|
||||
enum Protocols {
|
||||
PROTO_PPM,
|
||||
#if defined(PXX) || defined(DSM2) || defined(IRPROTOS)
|
||||
PROTO_PXX,
|
||||
enum ChannelsProtocols {
|
||||
PROTOCOL_CHANNELS_PPM,
|
||||
#if defined(PXX) || defined(DSM2)
|
||||
PROTOCOL_CHANNELS_PXX,
|
||||
#endif
|
||||
#if defined(DSM2) || defined(IRPROTOS)
|
||||
PROTO_DSM2_LP45,
|
||||
PROTO_DSM2_DSM2,
|
||||
PROTO_DSM2_DSMX,
|
||||
#if defined(DSM2)
|
||||
PROTOCOL_CHANNELS_DSM2_LP45,
|
||||
PROTOCOL_CHANNELS_DSM2_DSM2,
|
||||
PROTOCOL_CHANNELS_DSM2_DSMX,
|
||||
#endif
|
||||
PROTO_CROSSFIRE,
|
||||
#if defined(IRPROTOS)
|
||||
// only used on AVR
|
||||
// we will need 4 bits for proto :(
|
||||
PROTO_SILV,
|
||||
PROTO_TRAC09,
|
||||
PROTO_PICZ,
|
||||
PROTO_SWIFT,
|
||||
#endif
|
||||
PROTO_MULTIMODULE,
|
||||
PROTO_SBUS,
|
||||
PROTO_PXX2,
|
||||
PROTO_NONE
|
||||
PROTOCOL_CHANNELS_CROSSFIRE,
|
||||
PROTOCOL_CHANNELS_MULTIMODULE,
|
||||
PROTOCOL_CHANNELS_SBUS,
|
||||
PROTOCOL_CHANNELS_PXX2,
|
||||
PROTOCOL_CHANNELS_NONE
|
||||
};
|
||||
|
||||
#if defined(PXX2)
|
||||
#define PROTO_PXX_EXTERNAL_MODULE PROTO_PXX2
|
||||
#else
|
||||
#define PROTO_PXX_EXTERNAL_MODULE PROTO_PXX
|
||||
#endif
|
||||
|
||||
enum XJTRFProtocols {
|
||||
RF_PROTO_OFF = -1,
|
||||
RF_PROTO_X16,
|
||||
|
@ -369,6 +321,21 @@ enum R9MSubTypes
|
|||
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 {
|
||||
MM_RF_PROTO_CUSTOM = -1,
|
||||
MM_RF_PROTO_FIRST = MM_RF_PROTO_CUSTOM,
|
||||
|
@ -492,17 +459,18 @@ enum ThrottleSources {
|
|||
THROTTLE_SOURCE_CH1,
|
||||
};
|
||||
|
||||
enum TelemetryType
|
||||
enum TelemetryProtocols
|
||||
{
|
||||
PROTOCOL_TELEMETRY_FIRST,
|
||||
PROTOCOL_FRSKY_SPORT = PROTOCOL_TELEMETRY_FIRST,
|
||||
PROTOCOL_FRSKY_D,
|
||||
PROTOCOL_FRSKY_D_SECONDARY,
|
||||
PROTOCOL_PULSES_CROSSFIRE,
|
||||
PROTOCOL_SPEKTRUM,
|
||||
PROTOCOL_FLYSKY_IBUS,
|
||||
PROTOCOL_MULTIMODULE,
|
||||
PROTOCOL_TELEMETRY_LAST=PROTOCOL_MULTIMODULE
|
||||
PROTOCOL_TELEMETRY_FRSKY_SPORT = PROTOCOL_TELEMETRY_FIRST,
|
||||
PROTOCOL_TELEMETRY_FRSKY_D,
|
||||
PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY,
|
||||
PROTOCOL_TELEMETRY_CROSSFIRE,
|
||||
PROTOCOL_TELEMETRY_SPEKTRUM,
|
||||
PROTOCOL_TELEMETRY_FLYSKY_IBUS,
|
||||
PROTOCOL_TELEMETRY_MULTIMODULE,
|
||||
PROTOCOL_TELEMETRY_LAST=PROTOCOL_TELEMETRY_MULTIMODULE,
|
||||
PROTOCOL_TELEMETRY_PXX2,
|
||||
};
|
||||
|
||||
enum DisplayTrims
|
||||
|
@ -512,8 +480,6 @@ enum DisplayTrims
|
|||
DISPLAY_TRIMS_ALWAYS
|
||||
};
|
||||
|
||||
#define TOTAL_EEPROM_USAGE (sizeof(ModelData)*MAX_MODELS + sizeof(RadioData))
|
||||
|
||||
extern RadioData g_eeGeneral;
|
||||
extern ModelData g_model;
|
||||
|
||||
|
|
|
@ -125,10 +125,10 @@ void setupPulsesDSM2(uint8_t port)
|
|||
modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
||||
|
||||
switch (s_current_protocol[port]) {
|
||||
case PROTO_DSM2_LP45:
|
||||
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||
dsmDat[0] = 0x00;
|
||||
break;
|
||||
case PROTO_DSM2_DSM2:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||
dsmDat[0] = 0x10;
|
||||
break;
|
||||
default: // DSMX
|
||||
|
|
|
@ -88,7 +88,7 @@ inline bool isModulePPM(uint8_t idx)
|
|||
{
|
||||
return idx == TRAINER_MODULE ||
|
||||
(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
|
||||
inline bool isModulePPM(uint8_t idx)
|
||||
|
@ -99,6 +99,7 @@ inline bool isModulePPM(uint8_t idx)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBXLITE)
|
||||
inline bool isModuleR9M(uint8_t idx)
|
||||
{
|
||||
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;
|
||||
}
|
||||
#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)
|
||||
{
|
||||
|
|
|
@ -51,7 +51,7 @@ enum ModuleFlag
|
|||
#endif
|
||||
|
||||
#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
|
||||
#define IS_DSM2_PROTOCOL(protocol) (0)
|
||||
#endif
|
||||
|
@ -63,7 +63,7 @@ enum ModuleFlag
|
|||
#endif
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#define IS_MULTIMODULE_PROTOCOL(protocol) (protocol==PROTO_MULTIMODULE)
|
||||
#define IS_MULTIMODULE_PROTOCOL(protocol) (protocol==PROTOCOL_CHANNELS_MULTIMODULE)
|
||||
#if !defined(DSM2)
|
||||
#error You need to enable DSM2 = PPM for MULTIMODULE support
|
||||
#endif
|
||||
|
@ -71,7 +71,7 @@ enum ModuleFlag
|
|||
#define IS_MULTIMODULE_PROTOCOL(protocol) (0)
|
||||
#endif
|
||||
|
||||
#define IS_SBUS_PROTOCOL(protocol) (protocol == PROTO_SBUS)
|
||||
#define IS_SBUS_PROTOCOL(protocol) (protocol == PROTOCOL_CHANNELS_SBUS)
|
||||
|
||||
|
||||
#include "pulses_arm.h"
|
||||
|
|
|
@ -19,11 +19,8 @@
|
|||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
|
||||
#if defined(PXX2)
|
||||
#include "io/pxx2.h"
|
||||
#include "pulses/pxx2.h"
|
||||
#endif
|
||||
|
||||
uint8_t s_pulses_paused = 0;
|
||||
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) {
|
||||
#if defined(TARANIS_INTERNAL_PPM)
|
||||
case MODULE_TYPE_PPM:
|
||||
required_protocol = PROTO_PPM;
|
||||
required_protocol = PROTOCOL_CHANNELS_PPM;
|
||||
break;
|
||||
#endif
|
||||
case MODULE_TYPE_XJT:
|
||||
required_protocol = PROTO_PXX;
|
||||
required_protocol = PROTOCOL_CHANNELS_PXX;
|
||||
break;
|
||||
default:
|
||||
required_protocol = PROTO_NONE;
|
||||
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -63,30 +60,36 @@ uint8_t getRequiredProtocol(uint8_t port)
|
|||
default:
|
||||
switch (g_model.moduleData[EXTERNAL_MODULE].type) {
|
||||
case MODULE_TYPE_PPM:
|
||||
required_protocol = PROTO_PPM;
|
||||
required_protocol = PROTOCOL_CHANNELS_PPM;
|
||||
break;
|
||||
case MODULE_TYPE_XJT:
|
||||
required_protocol = PROTOCOL_CHANNELS_PXX;
|
||||
break;
|
||||
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;
|
||||
case MODULE_TYPE_SBUS:
|
||||
required_protocol = PROTO_SBUS;
|
||||
required_protocol = PROTOCOL_CHANNELS_SBUS;
|
||||
break;
|
||||
#if defined(MULTIMODULE)
|
||||
case MODULE_TYPE_MULTIMODULE:
|
||||
required_protocol = PROTO_MULTIMODULE;
|
||||
required_protocol = PROTOCOL_CHANNELS_MULTIMODULE;
|
||||
break;
|
||||
#endif
|
||||
#if defined(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
|
||||
{
|
||||
static tmr10ms_t bindStartTime = 0;
|
||||
if (moduleFlag[EXTERNAL_MODULE] == MODULE_BIND) {
|
||||
if (bindStartTime == 0) bindStartTime = get_tmr10ms();
|
||||
if ((tmr10ms_t)(get_tmr10ms() - bindStartTime) < 100) {
|
||||
required_protocol = PROTO_NONE;
|
||||
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -98,24 +101,24 @@ uint8_t getRequiredProtocol(uint8_t port)
|
|||
#endif
|
||||
#if defined(CROSSFIRE)
|
||||
case MODULE_TYPE_CROSSFIRE:
|
||||
required_protocol = PROTO_CROSSFIRE;
|
||||
required_protocol = PROTOCOL_CHANNELS_CROSSFIRE;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
required_protocol = PROTO_NONE;
|
||||
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (s_pulses_paused) {
|
||||
required_protocol = PROTO_NONE;
|
||||
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// will need an EEPROM conversion
|
||||
if (moduleFlag[port] == MODULE_OFF) {
|
||||
required_protocol = PROTO_NONE;
|
||||
required_protocol = PROTOCOL_CHANNELS_NONE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -146,38 +149,36 @@ void setupPulses(uint8_t port)
|
|||
if (s_current_protocol[port] != required_protocol) {
|
||||
init_needed = true;
|
||||
switch (s_current_protocol[port]) { // stop existing protocol hardware
|
||||
case PROTO_PXX:
|
||||
case PROTOCOL_CHANNELS_PXX:
|
||||
disable_pxx(port);
|
||||
break;
|
||||
|
||||
#if defined(DSM2)
|
||||
case PROTO_DSM2_LP45:
|
||||
case PROTO_DSM2_DSM2:
|
||||
case PROTO_DSM2_DSMX:
|
||||
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||
disable_serial(port);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(CROSSFIRE)
|
||||
case PROTO_CROSSFIRE:
|
||||
case PROTOCOL_CHANNELS_CROSSFIRE:
|
||||
disable_module_timer(port);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(PXX2)
|
||||
case PROTO_PXX2:
|
||||
case PROTOCOL_CHANNELS_PXX2:
|
||||
disable_module_timer(port);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
case PROTO_MULTIMODULE:
|
||||
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||
#endif
|
||||
case PROTO_SBUS:
|
||||
case PROTOCOL_CHANNELS_SBUS:
|
||||
disable_serial(port);
|
||||
break;
|
||||
|
||||
case PROTO_PPM:
|
||||
case PROTOCOL_CHANNELS_PPM:
|
||||
disable_ppm(port);
|
||||
break;
|
||||
|
||||
|
@ -190,28 +191,28 @@ void setupPulses(uint8_t port)
|
|||
|
||||
// Set up output data here
|
||||
switch (required_protocol) {
|
||||
case PROTO_PXX:
|
||||
case PROTOCOL_CHANNELS_PXX:
|
||||
setupPulsesPXX(port);
|
||||
scheduleNextMixerCalculation(port, PXX_PERIOD);
|
||||
break;
|
||||
|
||||
case PROTO_SBUS:
|
||||
case PROTOCOL_CHANNELS_SBUS:
|
||||
setupPulsesSbus(port);
|
||||
scheduleNextMixerCalculation(port, SBUS_PERIOD);
|
||||
break;
|
||||
|
||||
#if defined(DSM2)
|
||||
case PROTO_DSM2_LP45:
|
||||
case PROTO_DSM2_DSM2:
|
||||
case PROTO_DSM2_DSMX:
|
||||
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||
setupPulsesDSM2(port);
|
||||
scheduleNextMixerCalculation(port, DSM2_PERIOD);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(CROSSFIRE)
|
||||
case PROTO_CROSSFIRE:
|
||||
if (telemetryProtocol == PROTOCOL_PULSES_CROSSFIRE && !init_needed) {
|
||||
case PROTOCOL_CHANNELS_CROSSFIRE:
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE && !init_needed) {
|
||||
uint8_t * crossfire = modulePulsesData[port].crossfire.pulses;
|
||||
uint8_t len;
|
||||
#if defined(LUA)
|
||||
|
@ -232,26 +233,25 @@ void setupPulses(uint8_t port)
|
|||
break;
|
||||
#endif
|
||||
|
||||
#if defined(PXX2)
|
||||
case PROTO_PXX2:
|
||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT && !init_needed) {
|
||||
case PROTOCOL_CHANNELS_PXX2:
|
||||
// here we have to wait that telemetryInit() is called, hence this test
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_PXX2 && !init_needed) {
|
||||
modulePulsesData[port].pxx2.setupFrame(port);
|
||||
sportSendBuffer(modulePulsesData[port].pxx2.getData(), modulePulsesData[port].pxx2.getSize());
|
||||
}
|
||||
scheduleNextMixerCalculation(port, PXX2_PERIOD);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
case PROTO_MULTIMODULE:
|
||||
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||
setupPulsesMultimodule(port);
|
||||
scheduleNextMixerCalculation(port, MULTIMODULE_PERIOD);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case PROTO_PPM:
|
||||
case PROTOCOL_CHANNELS_PPM:
|
||||
#if defined(PCBSKY9X)
|
||||
case PROTO_NONE:
|
||||
case PROTOCOL_CHANNELS_NONE:
|
||||
#endif
|
||||
setupPulsesPPMModule(port);
|
||||
scheduleNextMixerCalculation(port, PPM_PERIOD(port));
|
||||
|
@ -263,41 +263,39 @@ void setupPulses(uint8_t port)
|
|||
|
||||
if (init_needed) {
|
||||
switch (required_protocol) { // Start new protocol hardware here
|
||||
case PROTO_PXX:
|
||||
case PROTOCOL_CHANNELS_PXX:
|
||||
init_pxx(port);
|
||||
break;
|
||||
|
||||
#if defined(DSM2)
|
||||
case PROTO_DSM2_LP45:
|
||||
case PROTO_DSM2_DSM2:
|
||||
case PROTO_DSM2_DSMX:
|
||||
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||
init_serial(port, DSM2_BAUDRATE, DSM2_PERIOD * 2000);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(CROSSFIRE)
|
||||
case PROTO_CROSSFIRE:
|
||||
case PROTOCOL_CHANNELS_CROSSFIRE:
|
||||
init_module_timer(port, CROSSFIRE_PERIOD, true);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(PXX2)
|
||||
case PROTO_PXX2:
|
||||
case PROTOCOL_CHANNELS_PXX2:
|
||||
init_module_timer(port, PXX2_PERIOD, true);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
case PROTO_MULTIMODULE:
|
||||
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||
init_serial(port, MULTIMODULE_BAUDRATE, MULTIMODULE_PERIOD * 2000);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case PROTO_SBUS:
|
||||
case PROTOCOL_CHANNELS_SBUS:
|
||||
init_serial(port, SBUS_BAUDRATE, SBUS_PERIOD_HALF_US);
|
||||
break;
|
||||
|
||||
case PROTO_PPM:
|
||||
case PROTOCOL_CHANNELS_PPM:
|
||||
init_ppm(port);
|
||||
break;
|
||||
|
||||
|
|
|
@ -82,9 +82,7 @@ union ModulePulsesData {
|
|||
PwmPxxPulses pxx;
|
||||
#endif
|
||||
|
||||
#if defined(PXX2)
|
||||
Pxx2Pulses pxx2;
|
||||
#endif
|
||||
|
||||
#if defined(PPM_PIN_SERIAL)
|
||||
Dsm2SerialPulsesData dsm2;
|
||||
|
@ -168,6 +166,8 @@ void setCustomFailsafe(uint8_t moduleIndex);
|
|||
#define LEN_R9M_LBT_POWER_VALUES "\015"
|
||||
#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 LEN_R9MFLEX_FREQ "\006"
|
||||
#define TR_R9MFLEX_FREQ "868Mhz""915Mhz"
|
||||
|
||||
enum R9MFCCPowerValues {
|
||||
R9M_FCC_POWER_100 = 0,
|
||||
|
@ -186,8 +186,10 @@ enum R9MLBTPowerValues {
|
|||
|
||||
#else
|
||||
|
||||
#define LEN_R9M_REGION "\006"
|
||||
#define TR_R9M_REGION "FCC\0 ""EU\0 ""868MHz""915MHz"
|
||||
#define LEN_R9M_REGION "\004"
|
||||
#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_LBT_POWER_VALUES "\013"
|
||||
#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);
|
||||
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);
|
||||
if(isModuleR9M_EUPLUS(port))
|
||||
if (isModuleR9M_EUPLUS(port))
|
||||
extra_flags |= (1 << 6);
|
||||
}
|
||||
|
||||
|
|
|
@ -150,6 +150,17 @@ class StandardPxxTransport: public BitTransport, public PxxCrcMixin {
|
|||
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)
|
||||
{
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
|
@ -187,23 +198,28 @@ class UartPxxTransport: public DataBuffer<uint8_t, 64>, public PxxCrcMixin {
|
|||
addWithByteStuffing(byte);
|
||||
}
|
||||
|
||||
void addByteWithoutCrc(uint8_t byte)
|
||||
void addRawByte(uint8_t byte)
|
||||
{
|
||||
*ptr++ = byte;
|
||||
}
|
||||
|
||||
void addByteWithoutCrc(uint8_t byte)
|
||||
{
|
||||
addWithByteStuffing(byte);
|
||||
}
|
||||
|
||||
void addWithByteStuffing(uint8_t byte)
|
||||
{
|
||||
if (0x7E == byte) {
|
||||
*ptr++ = 0x7D;
|
||||
*ptr++ = 0x5E;
|
||||
addRawByte(0x7D);
|
||||
addRawByte(0x5E);
|
||||
}
|
||||
else if (0x7D == byte) {
|
||||
*ptr++ = 0x7D;
|
||||
*ptr++ = 0x5D;
|
||||
addRawByte(0x7D);
|
||||
addRawByte(0x5D);
|
||||
}
|
||||
else {
|
||||
*ptr++ = byte;
|
||||
addRawByte(byte);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class Pxx1Pulses: public PxxPulses<PxxTransport>
|
|||
void addHead()
|
||||
{
|
||||
// send 7E, do not CRC
|
||||
PxxTransport::addByteWithoutCrc(0x7E);
|
||||
PxxTransport::addRawByte(0x7E);
|
||||
}
|
||||
|
||||
void addCrc()
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
void Pxx2Pulses::setupFrame(uint8_t port)
|
||||
{
|
||||
initFrame();
|
||||
initCrc();
|
||||
|
||||
static uint8_t pass[NUM_MODULES] = { MODULES_INIT(0) };
|
||||
uint8_t sendUpperChannels = 0;
|
||||
|
@ -38,38 +37,23 @@ void Pxx2Pulses::setupFrame(uint8_t port)
|
|||
// Flag1
|
||||
uint8_t flag1 = addFlag1(port);
|
||||
|
||||
// Flag2
|
||||
addByte(0);
|
||||
// Flag2 = Extra flags
|
||||
addExtraFlags(port);
|
||||
|
||||
// Channels
|
||||
addChannels(port, flag1 & PXX_SEND_FAILSAFE, sendUpperChannels);
|
||||
|
||||
// Extra flags
|
||||
addExtraFlags(port);
|
||||
|
||||
// Flag3, reserved
|
||||
addByte(0);
|
||||
|
||||
#if defined(LUA)
|
||||
if (outputTelemetryBufferTrigger != 0x00 && outputTelemetryBufferSize > 0) {
|
||||
// CMD/Resp
|
||||
addByte(1);
|
||||
if (outputTelemetryBufferTrigger != 0x7E && outputTelemetryBufferSize > 0) {
|
||||
// primID (1 byte) + dataID (2 bytes) + value (4 bytes)
|
||||
addByte(outputTelemetryBufferTrigger);
|
||||
for (uint8_t i=0; i<7; i++) {
|
||||
addByte(outputTelemetryBuffer[i]);
|
||||
}
|
||||
outputTelemetryBufferTrigger = 0x00;
|
||||
outputTelemetryBufferSize = 0;
|
||||
}
|
||||
else {
|
||||
// CMD/Resp
|
||||
addByte(0);
|
||||
}
|
||||
#else
|
||||
// CMD/Resp
|
||||
addByte(0);
|
||||
#endif
|
||||
|
||||
// CRC
|
||||
addByte(crc); // TODO need to check the CRC chosen algorithm
|
||||
endFrame();
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "./pxx.h"
|
||||
|
||||
// should not be used anymore
|
||||
class SportCrcMixin {
|
||||
protected:
|
||||
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:
|
||||
void addByte(uint8_t byte)
|
||||
{
|
||||
SportCrcMixin::addToCrc(byte);
|
||||
*ptr++ = byte;
|
||||
}
|
||||
PxxCrcMixin::addToCrc(byte);
|
||||
addByteWithoutCrc(byte);
|
||||
};
|
||||
|
||||
void addTail()
|
||||
void addByteWithoutCrc(uint8_t byte)
|
||||
{
|
||||
// nothing
|
||||
*ptr++ = byte;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -59,13 +60,43 @@ class Pxx2Pulses: public PxxPulses<Pxx2Transport> {
|
|||
public:
|
||||
void setupFrame(uint8_t port);
|
||||
|
||||
protected:
|
||||
uint8_t data[64];
|
||||
uint8_t * ptr;
|
||||
void addHead()
|
||||
{
|
||||
// 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()
|
||||
{
|
||||
// init the CRC counter
|
||||
initCrc();
|
||||
|
||||
// reset the frame pointer
|
||||
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
|
||||
pxx.cpp
|
||||
pxx1.cpp
|
||||
pxx2.cpp
|
||||
dsm2_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()
|
||||
{
|
||||
if (s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) {
|
||||
if (s_current_protocol[INTERNAL_MODULE] == PROTOCOL_CHANNELS_PXX) {
|
||||
DMA_InitTypeDef DMA_InitStructure;
|
||||
DMA_DeInit(INTMODULE_DMA_STREAM);
|
||||
DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL;
|
||||
|
|
|
@ -97,7 +97,7 @@ void serial2Init(unsigned int mode, unsigned int protocol)
|
|||
break;
|
||||
#endif
|
||||
case UART_MODE_TELEMETRY:
|
||||
if (protocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
||||
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||
uart3Setup(FRSKY_D_BAUDRATE, true);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -215,7 +215,7 @@ void extmoduleSerialStart(uint32_t /*baudrate*/, uint32_t period_half_us)
|
|||
|
||||
void extmoduleSendNextFrame()
|
||||
{
|
||||
if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PPM) {
|
||||
if (s_current_protocol[EXTERNAL_MODULE] == PROTOCOL_CHANNELS_PPM) {
|
||||
#if defined(PCBX10) || PCBREV >= 13
|
||||
EXTMODULE_TIMER->CCR3 = GET_PPM_DELAY(EXTERNAL_MODULE)*2;
|
||||
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->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_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
#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)) {
|
||||
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
|
||||
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
|
||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||
outputTelemetryBufferSize = 0;
|
||||
outputTelemetryBufferTrigger = 0x7E;
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ extern "C" void TELEMETRY_USART_IRQHandler(void)
|
|||
else {
|
||||
telemetryNoDMAFifo.push(data);
|
||||
#if defined(LUA)
|
||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||
static uint8_t prevdata;
|
||||
if (prevdata == 0x7E && outputTelemetryBufferSize > 0 && data == outputTelemetryBufferTrigger) {
|
||||
sportSendBuffer(outputTelemetryBuffer, outputTelemetryBufferSize);
|
||||
|
|
|
@ -261,6 +261,8 @@ void init_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 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
|
||||
#if defined(SIMU)
|
||||
|
@ -405,8 +407,9 @@ void debugPutc(const char c);
|
|||
// Telemetry driver
|
||||
void telemetryPortInit(uint32_t baudrate, uint8_t mode);
|
||||
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 sportSendBuffer(const uint8_t * buffer, uint32_t size);
|
||||
|
||||
// Second UART driver
|
||||
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)
|
||||
{
|
||||
if (port == EXTERNAL_MODULE) {
|
||||
|
@ -261,7 +277,7 @@ extern "C" void PWM_IRQHandler(void)
|
|||
if (reason & PWM_ISR1_CHID3) {
|
||||
// Use the current protocol, don't switch until set_up_pulses
|
||||
switch (s_current_protocol[EXTERNAL_MODULE]) {
|
||||
case PROTO_PXX:
|
||||
case PROTOCOL_CHANNELS_PXX:
|
||||
// Alternate periods of 6.5mS and 2.5 mS
|
||||
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
||||
if (period == 2500 * 2) {
|
||||
|
@ -284,9 +300,9 @@ extern "C" void PWM_IRQHandler(void)
|
|||
}
|
||||
break;
|
||||
|
||||
case PROTO_DSM2_LP45:
|
||||
case PROTO_DSM2_DSM2:
|
||||
case PROTO_DSM2_DSMX:
|
||||
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||
// Alternate periods of 19.5mS and 2.5 mS
|
||||
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
||||
if (period == 2500 * 2) {
|
||||
|
@ -309,9 +325,9 @@ extern "C" void PWM_IRQHandler(void)
|
|||
break;
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
case PROTO_MULTIMODULE:
|
||||
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||
#endif
|
||||
case PROTO_SBUS:
|
||||
case PROTOCOL_CHANNELS_SBUS:
|
||||
// Todo: how to do inverted polarity on this platform?
|
||||
// Alternate periods of 5.5mS and 3.5 mS
|
||||
period = pwmptr->PWM_CH_NUM[3].PWM_CPDR;
|
||||
|
|
|
@ -135,12 +135,11 @@ void rxPdcUsart( void (*pChProcess)(uint8_t x) )
|
|||
#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
|
||||
pUsart->US_TNPR = (uint32_t)buffer ;
|
||||
#endif
|
||||
|
@ -174,7 +173,12 @@ void telemetryPortInit(uint32_t baudrate, uint8_t mode)
|
|||
#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);
|
||||
}
|
||||
|
|
|
@ -238,7 +238,7 @@ void extmodulePxxStart()
|
|||
|
||||
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->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
|
||||
|
@ -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->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)
|
||||
DMA_InitTypeDef DMA_InitStructure;
|
||||
DMA_DeInit(EXTMODULE_USART_DMA_STREAM);
|
||||
|
|
|
@ -60,7 +60,7 @@ void intmoduleNoneStart()
|
|||
|
||||
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_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;
|
||||
|
@ -70,7 +70,7 @@ void intmoduleSendNextFrame()
|
|||
INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||
}
|
||||
#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->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
|
||||
|
|
|
@ -127,7 +127,7 @@ extern "C" void TELEMETRY_DMA_TX_IRQHandler(void)
|
|||
if (DMA_GetITStatus(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;
|
||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || telemetryProtocol == PROTOCOL_TELEMETRY_PXX2) {
|
||||
outputTelemetryBufferSize = 0;
|
||||
outputTelemetryBufferTrigger = 0x7E;
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ extern "C" void TELEMETRY_USART_IRQHandler(void)
|
|||
else {
|
||||
telemetryFifo.push(data);
|
||||
#if defined(LUA)
|
||||
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
|
||||
static uint8_t prevdata;
|
||||
if (prevdata == 0x7E && outputTelemetryBufferSize > 0 && data == outputTelemetryBufferTrigger) {
|
||||
sportSendBuffer(outputTelemetryBuffer, outputTelemetryBufferSize);
|
||||
|
@ -174,7 +174,7 @@ extern "C" void TELEMETRY_USART_IRQHandler(void)
|
|||
uint8_t telemetryGetByte(uint8_t * byte)
|
||||
{
|
||||
#if defined(SERIAL2)
|
||||
if (telemetryProtocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||
if (serial2Mode == UART_MODE_TELEMETRY)
|
||||
return serial2RxFifo.pop(*byte);
|
||||
else
|
||||
|
|
|
@ -20,6 +20,76 @@
|
|||
|
||||
#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)
|
||||
{
|
||||
static uint8_t dataState = STATE_DATA_IDLE;
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "../definitions.h"
|
||||
#include "telemetry_holders.h"
|
||||
#include "../io/pxx2.h"
|
||||
|
||||
// Receive buffer state machine state enum
|
||||
enum FrSkyDataState {
|
||||
|
@ -32,12 +33,7 @@ enum FrSkyDataState {
|
|||
STATE_DATA_XOR,
|
||||
};
|
||||
|
||||
#if defined(PXX2)
|
||||
#include "io/pxx2.h"
|
||||
#define FRSKY_SPORT_BAUDRATE PXX2_BAUDRATE
|
||||
#else
|
||||
#define FRSKY_SPORT_BAUDRATE 57600
|
||||
#endif
|
||||
|
||||
#define FRSKY_D_BAUDRATE 9600
|
||||
|
||||
|
@ -194,9 +190,12 @@ enum FrSkyDataState {
|
|||
#define BATT_ID 0xf104
|
||||
#define RAS_ID 0xf105
|
||||
#define XJT_VERSION_ID 0xf106
|
||||
#define R9_PWR_ID 0xf107
|
||||
#define FUEL_QTY_FIRST_ID 0x0a10
|
||||
#define FUEL_QTY_LAST_ID 0x0a1f
|
||||
|
||||
|
||||
|
||||
// Default sensor data IDs (Physical IDs + CRC)
|
||||
#define DATA_ID_VARIO 0x00 // 0
|
||||
#define DATA_ID_FLVSS 0xA1 // 1
|
||||
|
@ -206,7 +205,6 @@ enum FrSkyDataState {
|
|||
#define DATA_ID_SP2UH 0x45 // 5
|
||||
#define DATA_ID_SP2UR 0xC6 // 6
|
||||
|
||||
|
||||
#if defined(NO_RAS)
|
||||
#define IS_RAS_VALUE_VALID() (false)
|
||||
#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))
|
||||
|
||||
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_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3)
|
||||
|
||||
|
@ -287,11 +278,11 @@ typedef enum {
|
|||
|
||||
// FrSky D Telemetry Protocol
|
||||
void processHubPacket(uint8_t id, int16_t value);
|
||||
void frskyDSendNextAlarm();
|
||||
void frskyDProcessPacket(const uint8_t *packet);
|
||||
|
||||
// FrSky S.PORT Telemetry Protocol
|
||||
void sportProcessTelemetryPacket(const uint8_t * packet);
|
||||
void sportProcessTelemetryPacketWithoutCrc(const uint8_t * packet);
|
||||
|
||||
void telemetryWakeup();
|
||||
void telemetryReset();
|
||||
|
@ -311,14 +302,6 @@ enum TelemetryProtocol
|
|||
TELEM_PROTO_FLYSKY_IBUS,
|
||||
};
|
||||
|
||||
enum TelemAnas {
|
||||
TELEM_ANA_A1,
|
||||
TELEM_ANA_A2,
|
||||
TELEM_ANA_A3,
|
||||
TELEM_ANA_A4,
|
||||
TELEM_ANA_COUNT
|
||||
};
|
||||
|
||||
struct TelemetryData {
|
||||
TelemetryValueWithMin swr; // TODO Min not needed
|
||||
TelemetryValueWithMin rssi; // TODO Min not needed
|
||||
|
@ -328,12 +311,7 @@ struct 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 processFrskyPXX2Data(uint8_t data);
|
||||
|
||||
#endif // _FRSKY_H_
|
||||
|
|
|
@ -36,6 +36,7 @@ const FrSkySportSensor sportSensors[] = {
|
|||
{ A3_FIRST_ID, A3_LAST_ID, 0, ZSTR_A3, 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 },
|
||||
{ R9_PWR_ID, R9_PWR_ID, 0, ZSTR_R9PW, UNIT_MILLIWATTS, 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 },
|
||||
{ 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;
|
||||
}
|
||||
|
||||
bool checkSportPacket(const uint8_t *packet)
|
||||
bool checkSportPacket(const uint8_t * packet)
|
||||
{
|
||||
short crc = 0;
|
||||
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)
|
||||
{
|
||||
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)) {
|
||||
TRACE("sportProcessTelemetryPacket(): checksum error ");
|
||||
DUMP(packet, FRSKY_SPORT_PACKET_SIZE);
|
||||
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) {
|
||||
uint8_t instance = physicalId + 1;
|
||||
if (id == RSSI_ID && isValidIdAndInstance(RSSI_ID, instance)) {
|
||||
|
@ -159,6 +165,10 @@ void sportProcessTelemetryPacket(const uint8_t * packet)
|
|||
else
|
||||
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) {
|
||||
telemetryData.xjtVersion = HUB_DATA_U16(packet);
|
||||
if (!IS_RAS_VALUE_VALID()) {
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "opentx.h"
|
||||
|
||||
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 telemetryRxBufferCount = 0;
|
||||
|
||||
|
@ -28,8 +29,6 @@ uint8_t telemetryRxBufferCount = 0;
|
|||
uint8_t wshhStreaming = 0;
|
||||
#endif
|
||||
|
||||
uint8_t link_counter = 0;
|
||||
|
||||
uint8_t telemetryState = TELEMETRY_INIT;
|
||||
|
||||
TelemetryData telemetryData;
|
||||
|
@ -40,44 +39,53 @@ uint8_t telemetryProtocol = 255;
|
|||
uint8_t serialInversion = 0;
|
||||
#endif
|
||||
|
||||
|
||||
void processTelemetryData(uint8_t data)
|
||||
{
|
||||
#if defined(CROSSFIRE)
|
||||
if (telemetryProtocol == PROTOCOL_PULSES_CROSSFIRE) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||
processCrossfireTelemetryData(data);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
if (telemetryProtocol == PROTOCOL_SPEKTRUM) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_SPEKTRUM) {
|
||||
processSpektrumTelemetryData(data);
|
||||
return;
|
||||
}
|
||||
if (telemetryProtocol == PROTOCOL_FLYSKY_IBUS) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FLYSKY_IBUS) {
|
||||
processFlySkyTelemetryData(data);
|
||||
return;
|
||||
}
|
||||
if (telemetryProtocol == PROTOCOL_MULTIMODULE) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE) {
|
||||
processMultiTelemetryData(data);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_PXX2) {
|
||||
processFrskyPXX2Data(data);
|
||||
return;
|
||||
}
|
||||
|
||||
processFrskyTelemetryData(data);
|
||||
}
|
||||
|
||||
void telemetryWakeup()
|
||||
{
|
||||
uint8_t requiredTelemetryProtocol = modelTelemetryProtocol();
|
||||
|
||||
#if defined(REVX)
|
||||
uint8_t requiredSerialInversion = g_model.moduleData[EXTERNAL_MODULE].invertedSerial;
|
||||
if (telemetryProtocol != requiredTelemetryProtocol || serialInversion != requiredSerialInversion) {
|
||||
serialInversion = requiredSerialInversion;
|
||||
#else
|
||||
if (telemetryProtocol != requiredTelemetryProtocol) {
|
||||
#endif
|
||||
telemetryInit(requiredTelemetryProtocol);
|
||||
}
|
||||
#else
|
||||
if (telemetryProtocol != requiredTelemetryProtocol) {
|
||||
telemetryInit(requiredTelemetryProtocol);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(STM32)
|
||||
uint8_t data;
|
||||
|
@ -89,7 +97,7 @@ void telemetryWakeup()
|
|||
} while (telemetryGetByte(&data));
|
||||
}
|
||||
#elif defined(PCBSKY9X)
|
||||
if (telemetryProtocol == PROTOCOL_FRSKY_D_SECONDARY) {
|
||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) {
|
||||
uint8_t data;
|
||||
while (telemetrySecondPortReceive(data)) {
|
||||
processTelemetryData(data);
|
||||
|
@ -101,7 +109,6 @@ void telemetryWakeup()
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
||||
const TelemetrySensor & sensor = g_model.telemetrySensors[i];
|
||||
if (sensor.type == TELEM_TYPE_CALCULATED) {
|
||||
|
@ -196,7 +203,9 @@ void telemetryInterrupt10ms()
|
|||
wshhStreaming--;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (R9ModuleStreaming > 0) {
|
||||
R9ModuleStreaming--;
|
||||
}
|
||||
if (telemetryStreaming > 0) {
|
||||
telemetryStreaming--;
|
||||
}
|
||||
|
@ -216,11 +225,8 @@ void telemetryReset()
|
|||
}
|
||||
|
||||
telemetryStreaming = 0; // reset counter only if valid frsky packets are being detected
|
||||
link_counter = 0;
|
||||
|
||||
telemetryState = TELEMETRY_INIT;
|
||||
|
||||
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
if (protocol == PROTOCOL_FRSKY_D) {
|
||||
if (protocol == PROTOCOL_TELEMETRY_FRSKY_D) {
|
||||
telemetryPortInit(FRSKY_D_BAUDRATE, TELEMETRY_SERIAL_DEFAULT);
|
||||
}
|
||||
|
||||
#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
|
||||
telemetryPortInit(MULTIMODULE_BAUDRATE, TELEMETRY_SERIAL_8E2);
|
||||
#if defined(LUA)
|
||||
|
@ -241,14 +247,14 @@ void telemetryInit(uint8_t protocol)
|
|||
outputTelemetryBufferTrigger = 0x7E;
|
||||
#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
|
||||
telemetryPortInit(125000, TELEMETRY_SERIAL_DEFAULT);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CROSSFIRE)
|
||||
else if (protocol == PROTOCOL_PULSES_CROSSFIRE) {
|
||||
else if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||
telemetryPortInit(CROSSFIRE_BAUDRATE, TELEMETRY_SERIAL_DEFAULT);
|
||||
#if defined(LUA)
|
||||
outputTelemetryBufferSize = 0;
|
||||
|
@ -259,12 +265,19 @@ void telemetryInit(uint8_t protocol)
|
|||
#endif
|
||||
|
||||
#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);
|
||||
serial2TelemetryInit(PROTOCOL_FRSKY_D_SECONDARY);
|
||||
serial2TelemetryInit(PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY);
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (protocol == PROTOCOL_TELEMETRY_PXX2) {
|
||||
telemetryPortInit(PXX2_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA);
|
||||
#if defined(LUA)
|
||||
outputTelemetryBufferSize = 0;
|
||||
outputTelemetryBufferTrigger = 0x7E;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
telemetryPortInit(FRSKY_SPORT_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA);
|
||||
#if defined(LUA)
|
||||
|
|
|
@ -36,13 +36,12 @@
|
|||
#endif
|
||||
|
||||
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)
|
||||
extern uint8_t wshhStreaming;
|
||||
#endif
|
||||
|
||||
extern uint8_t link_counter;
|
||||
|
||||
enum TelemetryStates {
|
||||
TELEMETRY_INIT,
|
||||
TELEMETRY_OK,
|
||||
|
@ -99,7 +98,6 @@ void delTelemetryIndex(uint8_t index);
|
|||
int availableTelemetryIndex();
|
||||
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);
|
||||
|
||||
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)
|
||||
|
||||
extern uint8_t telemetryProtocol;
|
||||
#define IS_FRSKY_D_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_D)
|
||||
|
||||
#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_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
|
||||
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_SPORT)
|
||||
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT)
|
||||
#endif
|
||||
#define IS_SPEKTRUM_PROTOCOL() (telemetryProtocol == PROTOCOL_SPEKTRUM)
|
||||
#define IS_SPEKTRUM_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_SPEKTRUM)
|
||||
|
||||
inline uint8_t modelTelemetryProtocol()
|
||||
{
|
||||
#if defined(CROSSFIRE)
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) {
|
||||
return PROTOCOL_PULSES_CROSSFIRE;
|
||||
return PROTOCOL_TELEMETRY_CROSSFIRE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -130,14 +128,22 @@ inline uint8_t modelTelemetryProtocol()
|
|||
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 (!IS_INTERNAL_MODULE_ENABLED() && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) {
|
||||
return PROTOCOL_MULTIMODULE;
|
||||
return PROTOCOL_TELEMETRY_MULTIMODULE;
|
||||
}
|
||||
#endif
|
||||
|
||||
// default choice
|
||||
return PROTOCOL_FRSKY_SPORT;
|
||||
return PROTOCOL_TELEMETRY_FRSKY_SPORT;
|
||||
}
|
||||
|
||||
#include "telemetry_sensors.h"
|
||||
|
|
|
@ -33,7 +33,7 @@ bool isFaiForbidden(source_t idx)
|
|||
|
||||
switch (telemetryProtocol) {
|
||||
|
||||
case PROTOCOL_FRSKY_SPORT:
|
||||
case PROTOCOL_TELEMETRY_FRSKY_SPORT:
|
||||
if (sensor->id == RSSI_ID) {
|
||||
return false;
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ bool isFaiForbidden(source_t idx)
|
|||
}
|
||||
break;
|
||||
|
||||
case PROTOCOL_FRSKY_D:
|
||||
case PROTOCOL_TELEMETRY_FRSKY_D:
|
||||
if (sensor->id == D_RSSI_ID) {
|
||||
return false;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ bool isFaiForbidden(source_t idx)
|
|||
break;
|
||||
|
||||
#if defined(CROSSFIRE)
|
||||
case PROTOCOL_PULSES_CROSSFIRE:
|
||||
case PROTOCOL_TELEMETRY_CROSSFIRE:
|
||||
if (sensor->id == RX_RSSI1_INDEX) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -93,6 +93,7 @@ const char STR_OPEN9X[] =
|
|||
ISTR(VTRAINERMODES)
|
||||
ISTR(TARANIS_PROTOCOLS)
|
||||
ISTR(R9M_REGION)
|
||||
ISTR(R9MFLEX_FREQ)
|
||||
ISTR(R9M_FCC_POWER_VALUES)
|
||||
ISTR(R9M_LBT_POWER_VALUES)
|
||||
ISTR(TELEMETRY_PROTOCOLS)
|
||||
|
@ -145,6 +146,7 @@ const char STR_PPMFRAME[] = TR_PPMFRAME;
|
|||
const char STR_REFRESHRATE[] = TR_REFRESHRATE;
|
||||
const char SSTR_WARN_BATTVOLTAGE[] = STR_WARN_BATTVOLTAGE;
|
||||
const char STR_MS[] = TR_MS;
|
||||
const char STR_FREQUENCY[] = TR_FREQUENCY;
|
||||
const char STR_SWITCH[] = TR_SWITCH;
|
||||
const char STR_TRIMS[] = TR_TRIMS;
|
||||
const char STR_FADEIN[] = TR_FADEIN;
|
||||
|
|
|
@ -190,7 +190,8 @@ extern const char STR_OPEN9X[];
|
|||
#define OFS_VTRAINERMODES (OFS_VFAILSAFE + sizeof(TR_VFAILSAFE))
|
||||
#define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES))
|
||||
#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_TELEMETRY_PROTOCOLS (OFS_R9M_LBT_POWER_VALUES + sizeof(TR_R9M_LBT_POWER_VALUES))
|
||||
#define OFS_XJT_PROTOCOLS (OFS_TELEMETRY_PROTOCOLS + sizeof(TR_TELEMETRY_PROTOCOLS))
|
||||
|
@ -297,6 +298,7 @@ extern const char STR_OPEN9X[];
|
|||
#define STR_VTRAINERMODES (STR_OPEN9X + OFS_VTRAINERMODES)
|
||||
#define STR_TARANIS_PROTOCOLS (STR_OPEN9X + OFS_TARANIS_PROTOCOLS)
|
||||
#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_LBT_POWER_VALUES (STR_OPEN9X + OFS_R9M_LBT_POWER_VALUES)
|
||||
#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 SSTR_WARN_BATTVOLTAGE[];
|
||||
extern const char STR_MS[];
|
||||
extern const char STR_FREQUENCY[];
|
||||
extern const char STR_SWITCH[];
|
||||
extern const char STR_TRIMS[];
|
||||
extern const char STR_FADEIN[];
|
||||
|
|
|
@ -152,7 +152,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -160,21 +160,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POZ""NEG"
|
||||
|
@ -579,6 +569,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Spínač"
|
||||
#define TR_TRIMS "Trimy"
|
||||
#define TR_FADEIN "Přechod Zap"
|
||||
|
@ -1199,6 +1190,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filtr"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -155,7 +155,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -163,21 +163,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -584,6 +574,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH TR("Schalt.", "Schalter")
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Langs. Ein"
|
||||
|
@ -1197,6 +1188,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
// ----------------------------------------------------------------
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -154,7 +154,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -162,22 +162,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -583,6 +572,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Switch"
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Fade in"
|
||||
|
@ -1208,6 +1198,7 @@
|
|||
#define TR_JITTER_FILTER "ADC filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -154,7 +154,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -162,21 +162,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -587,6 +577,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Interr"
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Inicio"
|
||||
|
@ -1203,6 +1194,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -154,7 +154,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -162,21 +162,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -579,6 +569,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Switch"
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Fade In"
|
||||
|
@ -1189,6 +1180,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -154,7 +154,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -162,21 +162,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -596,6 +586,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH TR("Inter", "Interrupteur")
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Fondu ON"
|
||||
|
@ -1215,6 +1206,7 @@
|
|||
#define TR_JITTER_FILTER "Filtre ADC"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -154,7 +154,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -162,21 +162,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -585,6 +575,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Inter."
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Diss.In"
|
||||
|
@ -1198,6 +1189,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -164,21 +164,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -579,6 +569,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH TR("Schak.", "Schakelaar")
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Fade in"
|
||||
|
@ -1205,6 +1196,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -155,7 +155,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -163,21 +163,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POZ""NEG"
|
||||
|
@ -586,6 +576,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Przełą"
|
||||
#define TR_TRIMS "Trymy"
|
||||
#define TR_FADEIN "Pojawia"
|
||||
|
@ -1199,6 +1190,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -153,7 +153,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -161,21 +161,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
@ -586,6 +576,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Chave"
|
||||
#define TR_TRIMS "Trims"
|
||||
#define TR_FADEIN "Aparecer"
|
||||
|
@ -1202,6 +1193,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -152,7 +152,7 @@
|
|||
|
||||
#if defined(PXX)
|
||||
#define TR_PXX "PXX\0 "
|
||||
#elif defined(DSM2) || defined(IRPROTOS)
|
||||
#elif defined(DSM2)
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#else
|
||||
#define TR_PXX
|
||||
|
@ -160,19 +160,11 @@
|
|||
|
||||
#if defined(DSM2)
|
||||
#define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 "
|
||||
#elif defined(IRPROTOS)
|
||||
#define TR_DSM2 "[LP45]""[DSM2]""[DSMX]"
|
||||
#else
|
||||
#define TR_DSM2
|
||||
#endif
|
||||
|
||||
#if defined(IRPROTOS)
|
||||
#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 TR_VPROTOS "PPM\0 " TR_PXX TR_DSM2
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "Pos""Neg"
|
||||
|
@ -596,6 +588,7 @@
|
|||
#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 TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequency"
|
||||
#define TR_SWITCH "Brytare"
|
||||
#define TR_TRIMS "Trimmar"
|
||||
#define TR_FADEIN "Tona In"
|
||||
|
@ -1210,6 +1203,7 @@
|
|||
#define TR_JITTER_FILTER "ADC Filter"
|
||||
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
#define ZSTR_A1 "A1"
|
||||
#define ZSTR_A2 "A2"
|
||||
|
|
|
@ -79,7 +79,6 @@ options_taranis = {
|
|||
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
||||
}
|
||||
|
||||
options_taranisplus = {
|
||||
|
@ -97,7 +96,6 @@ options_taranisplus = {
|
|||
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
||||
}
|
||||
|
||||
options_xlite = {
|
||||
|
@ -114,7 +112,6 @@ options_xlite = {
|
|||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"stdr9m": ("MODULE_R9M_FULLSIZE", "YES", None),
|
||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
||||
}
|
||||
|
||||
options_taranisx9e = {
|
||||
|
@ -132,7 +129,6 @@ options_taranisx9e = {
|
|||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"horussticks": ("STICKS", "HORUS", "STANDARD"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
||||
}
|
||||
|
||||
options_x12s = {
|
||||
|
@ -147,7 +143,6 @@ options_x12s = {
|
|||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"pcbdev": ("PCBREV", "10", None),
|
||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
||||
}
|
||||
|
||||
options_x10 = {
|
||||
|
@ -161,5 +156,4 @@ options_x10 = {
|
|||
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue