mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 16:55:20 +03:00
R9M and R9M2
This commit is contained in:
parent
66a4276fb3
commit
d80dc67bbd
20 changed files with 57 additions and 37 deletions
|
@ -159,9 +159,8 @@ enum MenuModelSetupItems {
|
|||
#define MODEL_SETUP_RANGE_OFS 4*FW+3
|
||||
#define MODEL_SETUP_SET_FAILSAFE_OFS 7*FW-2
|
||||
|
||||
#define IS_PXX2_EXTERNAL_ENABLED() (isModulePXX2(EXTERNAL_MODULE))
|
||||
#define IF_PXX2(xxx) (IS_PXX2_INTERNAL_ENABLED() ? (uint8_t)(xxx) : HIDDEN_ROW)
|
||||
#define IF_NOT_PXX2(xxx) (IS_PXX2_INTERNAL_ENABLED() ? HIDDEN_ROW : (uint8_t)(xxx))
|
||||
#define IF_PXX2(xxx) (isModulePXX2(INTERNAL_MODULE) ? (uint8_t)(xxx) : HIDDEN_ROW)
|
||||
#define IF_NOT_PXX2(xxx) (isModulePXX2(INTERNAL_MODULE) ? HIDDEN_ROW : (uint8_t)(xxx))
|
||||
#define IF_EXTERNAL_PXX2(xxx) (isModulePXX2(EXTERNAL_MODULE) ? (uint8_t)(xxx) : HIDDEN_ROW)
|
||||
#define IF_NOT_EXTERNAL_PXX2(xxx) (isModulePXX2(EXTERNAL_MODULE) ? HIDDEN_ROW : (uint8_t)(xxx))
|
||||
#define IF_PXX2_RECEIVER_DISPLAYED(module, idx, xxx) ((isModulePXX2(module) && g_model.moduleData[module].pxx2.receivers[idx].enabled) ? (uint8_t)(xxx) : HIDDEN_ROW)
|
||||
|
@ -232,6 +231,17 @@ enum MenuModelSetupItems {
|
|||
#define TRAINER_CHANNELS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)1 : HIDDEN_ROW)
|
||||
#define TRAINER_PARAMS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)2 : HIDDEN_ROW)
|
||||
#define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_BLUETOOTH_ROW TRAINER_CHANNELS_ROW, TRAINER_PARAMS_ROW
|
||||
#define DEF case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_NAME:\
|
||||
case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_2_NAME:\
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_1_NAME:\
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_2_NAME:\
|
||||
{\
|
||||
uint8_t receiverIdx = CURRENT_RECEIVER_EDITED(k);\
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);\
|
||||
\
|
||||
lcdDrawTextAlignedLeft(y, STR_RECEIVER);\
|
||||
lcdDrawSizedText(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].rxName, PXX2_LEN_RX_NAME, 0);\
|
||||
}
|
||||
#elif defined(PCBXLITES)
|
||||
#define ANTENNA_ROW IF_INTERNAL_MODULE_ON(0),
|
||||
#define IF_BT_TRAINER_ON(x) (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER ? (uint8_t)(x) : HIDDEN_ROW)
|
||||
|
@ -1208,17 +1218,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_NAME:
|
||||
case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_2_NAME:
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_1_NAME:
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_2_NAME:
|
||||
{
|
||||
uint8_t receiverIdx = CURRENT_RECEIVER_EDITED(k);
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
|
||||
lcdDrawTextAlignedLeft(y, STR_RECEIVER);
|
||||
lcdDrawSizedText(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].rxName, PXX2_LEN_RX_NAME, 0);
|
||||
}
|
||||
DEF
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_PINMAP:
|
||||
|
|
|
@ -77,7 +77,7 @@ void runPopupWarning(event_t event)
|
|||
{
|
||||
warningResult = false;
|
||||
|
||||
theme->drawMessageBox(warningText, warningInfoText, WARNING_TYPE_INFO ? STR_OK : (warningType == WARNING_TYPE_ASTERISK ? STR_EXIT : STR_POPUPS_ENTER_EXIT_ENTER_EXIT), warningType);
|
||||
theme->drawMessageBox(warningText, warningInfoText, WARNING_TYPE_INFO ? STR_OK : (warningType == WARNING_TYPE_ASTERISK ? STR_EXIT : STR_POPUPS_ENTER_EXIT), warningType);
|
||||
|
||||
switch (event) {
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
|
|
|
@ -156,7 +156,7 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol);
|
|||
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8)
|
||||
#define IS_R9M_OR_XJTD16(x) ((isModuleXJT(x) && g_model.moduleData[x].rfProtocol== RF_PROTO_X16) || isModuleR9M(x))
|
||||
|
||||
#define FAILSAFE_ROWS(x) ((isModuleXJTVariant(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || isModuleR9M(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW
|
||||
#define FAILSAFE_ROWS(x) ((isModuleXJTVariant(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || isModuleR9M(x) || isModuleR9M2(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)
|
||||
|
|
|
@ -520,7 +520,7 @@ bool isInternalModuleAvailable(int module)
|
|||
if (module == MODULE_TYPE_NONE)
|
||||
return true;
|
||||
|
||||
if (module == (IS_PXX2_INTERNAL_ENABLED() ? MODULE_TYPE_XJT2 : MODULE_TYPE_XJT))
|
||||
if ((module == (IS_PXX2_INTERNAL_ENABLED() ? MODULE_TYPE_XJT2 : MODULE_TYPE_XJT)) && !isModulePXX2(EXTERNAL_MODULE))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -561,6 +561,15 @@ bool isExternalModuleAvailable(int module)
|
|||
if (module == MODULE_TYPE_R9M && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) {
|
||||
return false;
|
||||
}
|
||||
if (module == MODULE_TYPE_R9M2 && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) {
|
||||
return false;
|
||||
}
|
||||
if (module == MODULE_TYPE_XJT && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) {
|
||||
return false;
|
||||
}
|
||||
if (module == MODULE_TYPE_XJT2 && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
|
@ -582,6 +591,9 @@ bool isRfProtocolAvailable(int protocol)
|
|||
if (protocol != RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M) {
|
||||
return false;
|
||||
}
|
||||
if (protocol != RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M2) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
|
|
|
@ -407,6 +407,7 @@ enum ModuleTypes {
|
|||
MODULE_TYPE_CROSSFIRE,
|
||||
MODULE_TYPE_MULTIMODULE,
|
||||
MODULE_TYPE_R9M,
|
||||
MODULE_TYPE_R9M2,
|
||||
MODULE_TYPE_SBUS,
|
||||
MODULE_TYPE_MAX = MODULE_TYPE_SBUS,
|
||||
MODULE_TYPE_COUNT
|
||||
|
|
|
@ -56,7 +56,7 @@ inline bool isModuleXJT(uint8_t idx)
|
|||
|
||||
inline bool isModuleXJT2(uint8_t idx)
|
||||
{
|
||||
return g_model.moduleData[idx].type == MODULE_TYPE_XJT2 || g_model.moduleData[idx].type == MODULE_TYPE_R9M;
|
||||
return g_model.moduleData[idx].type == MODULE_TYPE_XJT2;
|
||||
}
|
||||
|
||||
|
||||
|
@ -146,6 +146,11 @@ inline bool isModuleR9M(uint8_t idx)
|
|||
return g_model.moduleData[idx].type == MODULE_TYPE_R9M;
|
||||
}
|
||||
|
||||
inline bool isModuleR9M2(uint8_t idx)
|
||||
{
|
||||
return g_model.moduleData[idx].type == MODULE_TYPE_R9M2;
|
||||
}
|
||||
|
||||
inline bool isModuleR9M_FCC(uint8_t idx)
|
||||
{
|
||||
return isModuleR9M(idx) && g_model.moduleData[idx].r9m.region == MODULE_R9M_REGION_FCC;
|
||||
|
@ -179,7 +184,7 @@ inline bool isModulePXX(uint8_t idx)
|
|||
|
||||
inline bool isModulePXX2(uint8_t idx)
|
||||
{
|
||||
return isModuleXJT2(idx) || isModuleR9M(idx);
|
||||
return isModuleXJT2(idx) || isModuleR9M2(idx);
|
||||
}
|
||||
|
||||
#if defined(DSM2)
|
||||
|
|
|
@ -50,11 +50,12 @@ uint8_t getRequiredProtocol(uint8_t module)
|
|||
break;
|
||||
|
||||
case MODULE_TYPE_XJT:
|
||||
case MODULE_TYPE_R9M:
|
||||
protocol = PROTOCOL_CHANNELS_PXX1;
|
||||
break;
|
||||
|
||||
case MODULE_TYPE_XJT2:
|
||||
case MODULE_TYPE_R9M:
|
||||
case MODULE_TYPE_R9M2:
|
||||
protocol = PROTOCOL_CHANNELS_PXX2;
|
||||
break;
|
||||
|
||||
|
|
|
@ -29,6 +29,8 @@ extern "C" {
|
|||
}
|
||||
#endif
|
||||
|
||||
extern bool sticks_pwm_disabled;
|
||||
|
||||
HardwareOptions hardwareOptions;
|
||||
|
||||
void watchdogInit(unsigned int duration)
|
||||
|
@ -194,7 +196,7 @@ void boardInit()
|
|||
|
||||
audioInit();
|
||||
|
||||
// we need to initialize g_FATFS_Obj here, because it is in .ram section (because of DMA access)
|
||||
// we need to initialize g_FATFS_Obj here, because it is in .ram section (because of DMA access)
|
||||
// and this section is un-initialized
|
||||
memset(&g_FATFS_Obj, 0, sizeof(g_FATFS_Obj));
|
||||
|
||||
|
|
|
@ -126,14 +126,13 @@ 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
|
||||
if (!IS_INTERNAL_MODULE_ENABLED() && isModulePXX2(EXTERNAL_MODULE)) {
|
||||
return PROTOCOL_TELEMETRY_PXX2;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (!IS_INTERNAL_MODULE_ENABLED() && isModulePXX(EXTERNAL_MODULE)) {
|
||||
return PROTOCOL_TELEMETRY_FRSKY_SPORT;
|
||||
}
|
||||
#if defined(MULTIMODULE)
|
||||
if (!IS_INTERNAL_MODULE_ENABLED() && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) {
|
||||
return PROTOCOL_TELEMETRY_MULTIMODULE;
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "Vyp\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS "Vyp\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 FrSky D\0 FrSky D (kabel)Spektrum\0 "
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (Kabel)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "UIT\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS "UIT\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS"
|
||||
#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue