diff --git a/companion/src/modeledit/setup_module.ui b/companion/src/modeledit/setup_module.ui
index 4e94e0424..2f6426870 100644
--- a/companion/src/modeledit/setup_module.ui
+++ b/companion/src/modeledit/setup_module.ui
@@ -768,7 +768,7 @@
- WARNING: Requires non-certified R9M firmware!
+ WARNING: Requires non-certified firmware!
diff --git a/companion/src/translations/companion_fr.ts b/companion/src/translations/companion_fr.ts
index 026419b09..46c62cf12 100644
--- a/companion/src/translations/companion_fr.ts
+++ b/companion/src/translations/companion_fr.ts
@@ -8696,8 +8696,8 @@ Mixage actif par défaut si non-renseigné.
- WARNING: Requires non-certified R9M firmware!
- ATTENTION: Nécessite un firmware R9M non certifié!
+ WARNING: Requires non-certified firmware!
+ ATTENTION: Nécessite un firmware non certifié!
diff --git a/companion/src/translations/companion_ja.ts b/companion/src/translations/companion_ja.ts
index 22ad93af4..98ba35c33 100644
--- a/companion/src/translations/companion_ja.ts
+++ b/companion/src/translations/companion_ja.ts
@@ -8650,7 +8650,7 @@ If blank then the mix is considered to be "ON" all the time.
- WARNING: Requires non-certified R9M firmware!
+ WARNING: Requires non-certified firmware!
警告: 未認定のR9Mファームウェアが必要です!
diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp
index e9b4614d7..c257080ca 100644
--- a/radio/src/gui/128x64/model_setup.cpp
+++ b/radio/src/gui/128x64/model_setup.cpp
@@ -754,7 +754,7 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL:
- lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
+ lcdDrawTextAlignedLeft(y, STR_INTERNALRF);
break;
case ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE:
@@ -817,7 +817,7 @@ void menuModelSetup(event_t event)
#endif
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
- lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
+ lcdDrawTextAlignedLeft(y, STR_EXTERNALRF);
break;
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE:
@@ -863,8 +863,9 @@ void menuModelSetup(event_t event)
break;
case 1:
- if (isModuleDSM2(EXTERNAL_MODULE))
+ if (isModuleDSM2(EXTERNAL_MODULE)) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
+ }
else if (isModuleR9M(EXTERNAL_MODULE)) {
g_model.moduleData[EXTERNAL_MODULE].subType = checkIncDec(event,
g_model.moduleData[EXTERNAL_MODULE].subType,
@@ -872,13 +873,6 @@ void menuModelSetup(event_t event)
MODULE_SUBTYPE_R9M_LAST,
EE_MODEL,
isR9MModeAvailable);
-#if defined(R9M_PROTO_FLEX)
- if (g_model.moduleData[EXTERNAL_MODULE].subType > MODULE_SUBTYPE_R9M_EU && old_editMode && !s_editMode) {
- POPUP_WARNING(STR_R9MFLEXWARN1);
- const char *w = STR_R9MFLEXWARN2;
- SET_WARNING_INFO(w, strlen(w), 0);
- }
-#endif
}
#if defined(MULTIMODULE)
@@ -911,13 +905,21 @@ void menuModelSetup(event_t event)
}
}
}
- else {
-#if defined(R9M_PROTO_FLEX)
- if (isModuleR9M(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].subType > MODULE_SUBTYPE_R9M_EU && old_editMode) {
- POPUP_WARNING(STR_R9MFLEXWARN1);
- SET_WARNING_INFO(STR_R9MFLEXWARN2, sizeof(TR_R9MFLEXWARN2), 0);
+ else if (old_editMode > 0) {
+ if (isModuleR9M(EXTERNAL_MODULE)) {
+ if (g_model.moduleData[EXTERNAL_MODULE].subType > MODULE_SUBTYPE_R9M_EU) {
+ POPUP_WARNING(STR_R9M_PROTO_FLEX_WARN1);
+ SET_WARNING_INFO(STR_R9M_PROTO_WARN2, sizeof(TR_R9M_PROTO_WARN2), 0);
+ }
+ else if (g_model.moduleData[EXTERNAL_MODULE].subType == MODULE_SUBTYPE_R9M_EU) {
+ POPUP_WARNING(STR_R9M_PROTO_EU_WARN1);
+ SET_WARNING_INFO(STR_R9M_PROTO_WARN2, sizeof(TR_R9M_PROTO_WARN2), 0);
+ }
+ else {
+ POPUP_WARNING(STR_R9M_PROTO_FCC_WARN1);
+ SET_WARNING_INFO(STR_R9M_PROTO_WARN2, sizeof(TR_R9M_PROTO_WARN2), 0);
+ }
}
-#endif
}
}
break;
diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp
index dbf14846a..38b7cf864 100644
--- a/radio/src/gui/212x64/model_setup.cpp
+++ b/radio/src/gui/212x64/model_setup.cpp
@@ -274,7 +274,10 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
#define CURRENT_RECEIVER_EDITED(k) (k - (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_1 : ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1))
#include "common/stdlcd/model_setup_pxx1.cpp"
+
+#if defined(PXX2)
#include "common/stdlcd/model_setup_pxx2.cpp"
+#endif
void menuModelSetup(event_t event)
{
@@ -715,7 +718,7 @@ void menuModelSetup(event_t event)
break;
case ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL:
- lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
+ lcdDrawTextAlignedLeft(y, STR_INTERNALRF);
break;
case ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE:
@@ -785,18 +788,18 @@ void menuModelSetup(event_t event)
break;
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
- lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
+ lcdDrawTextAlignedLeft(y, STR_EXTERNALRF);
break;
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE:
lcdDrawTextAlignedLeft(y, STR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_EXTERNAL_MODULE_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
if (isModuleXJT(EXTERNAL_MODULE))
- lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
+ lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ACCST_RF_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);
+ lcdDrawTextAtIndex(lcdNextPos + 3, 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));
+ lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
#if defined(MULTIMODULE)
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
@@ -809,84 +812,104 @@ void menuModelSetup(event_t event)
}
else {
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
-
const mm_protocol_definition *pdef = getMultiProtocolDefinition(multi_rfProto);
- if (pdef->subTypeString != nullptr)
+ if (pdef->subTypeString != nullptr) {
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+11*FW, y, pdef->subTypeString, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
+ }
}
}
#endif
- if (attr && s_editMode>0) {
- switch (menuHorizontalPosition) {
- case 0:
- g_model.moduleData[EXTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type, MODULE_TYPE_NONE, IS_TRAINER_EXTERNAL_MODULE() ? MODULE_TYPE_NONE : MODULE_TYPE_COUNT-1, EE_MODEL, isExternalModuleAvailable);
- if (checkIncDec_Ret) {
- g_model.moduleData[EXTERNAL_MODULE].rfProtocol = 0;
- g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
- g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
- if (isModuleSBUS(EXTERNAL_MODULE))
- g_model.moduleData[EXTERNAL_MODULE].sbus.refreshRate = -31;
- if(isModulePPM(EXTERNAL_MODULE))
- SET_DEFAULT_PPM_FRAME_LENGTH(EXTERNAL_MODULE);
- }
- break;
- case 1:
- if (isModuleDSM2(EXTERNAL_MODULE))
- CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
-#if defined(MULTIMODULE)
- else if (isModuleMultimodule(EXTERNAL_MODULE)) {
- int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MODULE_SUBTYPE_MULTI_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
- CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
+ if (attr) {
+ if (s_editMode > 0) {
+ switch (menuHorizontalPosition) {
+ case 0:
+ g_model.moduleData[EXTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type, MODULE_TYPE_NONE,
+ IS_TRAINER_EXTERNAL_MODULE() ? MODULE_TYPE_NONE : MODULE_TYPE_COUNT - 1, EE_MODEL,
+ isExternalModuleAvailable);
if (checkIncDec_Ret) {
- g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MODULE_SUBTYPE_MULTI_CUSTOM);
- if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
- g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
- g_model.moduleData[EXTERNAL_MODULE].subType = 0;
- // Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
- if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2) {
- g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
- }
- else {
- g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
- }
- g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
+ g_model.moduleData[EXTERNAL_MODULE].rfProtocol = 0;
+ g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
+ g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
+ if (isModuleSBUS(EXTERNAL_MODULE))
+ g_model.moduleData[EXTERNAL_MODULE].sbus.refreshRate = -31;
+ if (isModulePPM(EXTERNAL_MODULE))
+ SET_DEFAULT_PPM_FRAME_LENGTH(EXTERNAL_MODULE);
}
- }
-#endif
- 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;
- }
- else {
- g_model.moduleData[EXTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable);
- }
- if (checkIncDec_Ret) {
- g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
- g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
- }
- break;
-#if defined(MULTIMODULE)
- case 2:
- if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto) {
- g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), 0, 63, EE_MODEL));
break;
+ case 1:
+ if (isModuleDSM2(EXTERNAL_MODULE))
+ CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
+#if defined(MULTIMODULE)
+ else if (isModuleMultimodule(EXTERNAL_MODULE)) {
+ int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MODULE_SUBTYPE_MULTI_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
+ CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
+ if (checkIncDec_Ret) {
+ g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MODULE_SUBTYPE_MULTI_CUSTOM);
+ if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
+ g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
+ g_model.moduleData[EXTERNAL_MODULE].subType = 0;
+ // Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
+ if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2) {
+ g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
+ }
+ else {
+ g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
+ }
+ g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
+ }
+ }
+#endif
+ else if (isModuleR9M(EXTERNAL_MODULE)) {
+ g_model.moduleData[EXTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType,
+ MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LAST, EE_MODEL,
+ isR9MModeAvailable);
+ }
+ else {
+ g_model.moduleData[EXTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol,
+ MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL,
+ isRfProtocolAvailable);
+ }
+ if (checkIncDec_Ret) {
+ g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
+ g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
+ }
+ break;
+
+#if defined(MULTIMODULE)
+ case 2:
+ if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto) {
+ g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), 0, 63, EE_MODEL));
+ break;
+ }
+ else {
+ const mm_protocol_definition * pdef = getMultiProtocolDefinition(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false));
+ if (pdef->maxSubtype > 0)
+ CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, pdef->maxSubtype);
+ }
+ break;
+
+ case 3:
+ // Custom protocol, third column is subtype
+ CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
+ break;
+#endif
+ }
+ }
+ else if (old_editMode > 0) {
+ if (isModuleR9M(EXTERNAL_MODULE)) {
+ if (g_model.moduleData[EXTERNAL_MODULE].subType > MODULE_SUBTYPE_R9M_EU) {
+ POPUP_WARNING(STR_R9M_PROTO_FLEX_WARN1);
+ SET_WARNING_INFO(STR_R9M_PROTO_WARN2, sizeof(TR_R9M_PROTO_WARN2), 0);
+ }
+ else if (g_model.moduleData[EXTERNAL_MODULE].subType == MODULE_SUBTYPE_R9M_EU) {
+ POPUP_WARNING(STR_R9M_PROTO_EU_WARN1);
+ SET_WARNING_INFO(STR_R9M_PROTO_WARN2, sizeof(TR_R9M_PROTO_WARN2), 0);
}
else {
- const mm_protocol_definition * pdef = getMultiProtocolDefinition(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false));
- if (pdef->maxSubtype > 0)
- CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, pdef->maxSubtype);
+ POPUP_WARNING(STR_R9M_PROTO_FCC_WARN1);
+ SET_WARNING_INFO(STR_R9M_PROTO_WARN2, sizeof(TR_R9M_PROTO_WARN2), 0);
}
- break;
- case 3:
- // Custom protocol, third column is subtype
- CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
- break;
-#endif
+ }
}
}
break;
diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp
index e27981289..a55c7d9a7 100644
--- a/radio/src/gui/480x272/model_setup.cpp
+++ b/radio/src/gui/480x272/model_setup.cpp
@@ -642,7 +642,7 @@ bool menuModelSetup(event_t event)
break;
case ITEM_MODEL_INTERNAL_MODULE_LABEL:
- lcdDrawText(MENUS_MARGIN_LEFT, y, TR_INTERNALRF);
+ lcdDrawText(MENUS_MARGIN_LEFT, y, STR_INTERNALRF);
break;
case ITEM_MODEL_INTERNAL_MODULE_MODE:
@@ -685,7 +685,7 @@ bool menuModelSetup(event_t event)
break;
case ITEM_MODEL_EXTERNAL_MODULE_LABEL:
- lcdDrawText(MENUS_MARGIN_LEFT, y, TR_EXTERNALRF);
+ lcdDrawText(MENUS_MARGIN_LEFT, y, STR_EXTERNALRF);
break;
case ITEM_MODEL_EXTERNAL_MODULE_MODE:
@@ -713,78 +713,75 @@ bool menuModelSetup(event_t event)
}
}
#endif
- if (attr && s_editMode>0) {
- switch (menuHorizontalPosition) {
- case 0:
- g_model.moduleData[EXTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type,
- MODULE_TYPE_NONE, MODULE_TYPE_COUNT - 1, EE_MODEL,
- isExternalModuleAvailable);
- if (checkIncDec_Ret) {
- g_model.moduleData[EXTERNAL_MODULE].rfProtocol = 0;
- g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
- g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
- if (isModuleSBUS(EXTERNAL_MODULE))
- g_model.moduleData[EXTERNAL_MODULE].sbus.refreshRate = -31;
- if (isModulePPM(EXTERNAL_MODULE))
- SET_DEFAULT_PPM_FRAME_LENGTH(EXTERNAL_MODULE);
- }
- break;
- case 1:
- if (isModuleDSM2(EXTERNAL_MODULE))
- CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
-#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);
- CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
+ if (attr) {
+ if (s_editMode > 0) {
+ switch (menuHorizontalPosition) {
+ case 0:
+ g_model.moduleData[EXTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type,
+ MODULE_TYPE_NONE, MODULE_TYPE_COUNT - 1, EE_MODEL,
+ isExternalModuleAvailable);
if (checkIncDec_Ret) {
- g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
- if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
- g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
- g_model.moduleData[EXTERNAL_MODULE].subType = 0;
- // Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
- if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
- g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
- }
- else {
- g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
- }
- g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
+ g_model.moduleData[EXTERNAL_MODULE].rfProtocol = 0;
+ g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
+ g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
+ if (isModuleSBUS(EXTERNAL_MODULE))
+ g_model.moduleData[EXTERNAL_MODULE].sbus.refreshRate = -31;
+ if (isModulePPM(EXTERNAL_MODULE))
+ SET_DEFAULT_PPM_FRAME_LENGTH(EXTERNAL_MODULE);
}
- }
-#endif
- 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;
- }
- else {
- CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST);
- }
- if (checkIncDec_Ret) {
- g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
- g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
- }
- break;
-#if defined(MULTIMODULE)
- case 2:
- if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto) {
- g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), 0, 63, EE_MODEL));
break;
- } else {
- const mm_protocol_definition *pdef = getMultiProtocolDefinition(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false));
- if (pdef->maxSubtype > 0)
- CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, pdef->maxSubtype);
- }
- break;
- case 3:
- // Custom protocol, third column is subtype
- CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
- break;
+ case 1:
+ if (isModuleDSM2(EXTERNAL_MODULE))
+ CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
+#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);
+ CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
+ if (checkIncDec_Ret) {
+ g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
+ if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
+ g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
+ g_model.moduleData[EXTERNAL_MODULE].subType = 0;
+ // Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
+ if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
+ g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
+ }
+ else {
+ g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
+ }
+ g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
+ }
+ }
#endif
+ else if (isModuleR9M(EXTERNAL_MODULE)) {
+ g_model.moduleData[EXTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC,
+ MODULE_SUBTYPE_R9M_LAST, EE_MODEL, isR9MModeAvailable);
+ }
+ else {
+ CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST);
+ }
+ if (checkIncDec_Ret) {
+ g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
+ g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE);
+ }
+ break;
+#if defined(MULTIMODULE)
+ case 2:
+ if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto) {
+ g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), 0, 63, EE_MODEL));
+ break;
+ } else {
+ const mm_protocol_definition *pdef = getMultiProtocolDefinition(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false));
+ if (pdef->maxSubtype > 0)
+ CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, pdef->maxSubtype);
+ }
+ break;
+ case 3:
+ // Custom protocol, third column is subtype
+ CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
+ break;
+#endif
+ }
}
}
break;
diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp
index 6e9185a70..0d9aebd2c 100644
--- a/radio/src/gui/gui_common.cpp
+++ b/radio/src/gui/gui_common.cpp
@@ -547,7 +547,7 @@ bool isPxx2IsrmChannelsCountAllowed(int channels)
}
#endif
-bool isModuleUSingSport(uint8_t moduleBay, uint8_t moduleType)
+bool isModuleUsingSport(uint8_t moduleBay, uint8_t moduleType)
{
switch(moduleType) {
case MODULE_TYPE_NONE:
@@ -555,18 +555,15 @@ bool isModuleUSingSport(uint8_t moduleBay, uint8_t moduleType)
case MODULE_TYPE_PPM:
case MODULE_TYPE_DSM2:
case MODULE_TYPE_MULTIMODULE:
+ case MODULE_TYPE_ISRM_PXX2:
case MODULE_TYPE_R9M_LITE_PXX2:
case MODULE_TYPE_R9M_LITE_PRO_PXX2:
return false;
- case MODULE_TYPE_ISRM_PXX2:
+ case MODULE_TYPE_XJT_PXX1:
if (moduleBay == EXTERNAL_MODULE)
return false;
-#if defined(INTMODULE_USART)
- return false;
-#endif
-
default:
return true;
}
@@ -580,7 +577,7 @@ bool isInternalModuleAvailable(int moduleType)
#if defined(PXX1) && defined(INTERNAL_MODULE_PXX1)
if (moduleType == MODULE_TYPE_XJT_PXX1)
- return !isModuleUSingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type);
+ return !isModuleUsingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type);
#else
if (moduleType == MODULE_TYPE_XJT_PXX1)
return false;
@@ -591,7 +588,7 @@ bool isInternalModuleAvailable(int moduleType)
#if defined(INTMODULE_USART)
return true;
#else
- return (!isModuleUSingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type));
+ return (!isModuleUsingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type));
#endif
#endif
@@ -601,7 +598,7 @@ bool isInternalModuleAvailable(int moduleType)
bool isExternalModuleAvailable(int moduleType)
{
-#if !defined(PCBXLITE) && !defined(PCBX9LITE)
+#if !defined(HARDWARE_EXTERNAL_MODULE_SIZE_SML)
if (moduleType == MODULE_TYPE_R9M_LITE_PXX1 || moduleType == MODULE_TYPE_R9M_LITE_PXX2 || moduleType == MODULE_TYPE_R9M_LITE_PRO_PXX2)
return false;
#endif
@@ -651,7 +648,7 @@ bool isExternalModuleAvailable(int moduleType)
#endif
#if defined(HARDWARE_INTERNAL_MODULE)
- if (isModuleUSingSport(EXTERNAL_MODULE, moduleType) && isModuleUSingSport(INTERNAL_MODULE, g_model.moduleData[INTERNAL_MODULE].type))
+ if (isModuleUsingSport(EXTERNAL_MODULE, moduleType) && isModuleUsingSport(INTERNAL_MODULE, g_model.moduleData[INTERNAL_MODULE].type))
return false;
#endif
diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h
index 1886a8a24..c2a5f1f3b 100644
--- a/radio/src/targets/taranis/hal.h
+++ b/radio/src/targets/taranis/hal.h
@@ -918,6 +918,7 @@
#define EXTMODULE_PULSES
#if defined(PCBXLITE) || defined(PCBX9LITE)
+ #define HARDWARE_EXTERNAL_MODULE_SIZE_SML
#define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6)
#if defined(PCBX9LITE)
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp
index 025540084..22538aed5 100644
--- a/radio/src/translations.cpp
+++ b/radio/src/translations.cpp
@@ -254,6 +254,8 @@ const char STR_MONITOR_SWITCHES[] = TR_MONITOR_SWITCHES;
const char STR_MONITOR_OUTPUT_DESC[] = TR_MONITOR_OUTPUT_DESC;
const char STR_MONITOR_MIXER_DESC[] = TR_MONITOR_MIXER_DESC;
const char STR_MENUGLOBALVARS[] = TR_MENUGLOBALVARS;
+const char STR_INTERNALRF[] = TR_INTERNALRF;
+const char STR_EXTERNALRF[] = TR_EXTERNALRF;
const char STR_MODULE_TELEMETRY[] = TR_MODULE_TELEMETRY;
const char STR_MODULE_TELEM_ON[] = TR_MODULE_TELEM_ON;
const char STR_COUNTRYCODE[] = TR_COUNTRYCODE;
@@ -463,8 +465,10 @@ const char STR_CHANNELRANGE[] = TR_CHANNELRANGE;
const char STR_ANTENNASELECTION[] = TR_ANTENNASELECTION;
const char STR_ANTENNACONFIRM1[] = TR_ANTENNACONFIRM1;
const char STR_ANTENNACONFIRM2[] = TR_ANTENNACONFIRM2;
-const char STR_R9MFLEXWARN1[] = TR_R9MFLEXWARN1;
-const char STR_R9MFLEXWARN2[] = TR_R9MFLEXWARN2;
+const char STR_R9M_PROTO_FLEX_WARN1[] = TR_R9M_PROTO_FLEX_WARN1;
+const char STR_R9M_PROTO_FCC_WARN1[] = TR_R9M_PROTO_FCC_WARN1;
+const char STR_R9M_PROTO_EU_WARN1[] = TR_R9M_PROTO_EU_WARN1;
+const char STR_R9M_PROTO_WARN2[] = TR_R9M_PROTO_WARN2;
const char STR_SET[] = TR_SET;
const char STR_PREFLIGHT[] = TR_PREFLIGHT;
const char STR_CHECKLIST[] = TR_CHECKLIST;
diff --git a/radio/src/translations.h b/radio/src/translations.h
index 9623fdb15..8deb7fdca 100644
--- a/radio/src/translations.h
+++ b/radio/src/translations.h
@@ -414,6 +414,8 @@ extern const char STR_REG_OK[];
extern const char STR_BIND_OK[];
#endif
+extern const char STR_INTERNALRF[];
+extern const char STR_EXTERNALRF[];
extern const char STR_MODULE_TELEMETRY[];
extern const char STR_MODULE_TELEM_ON[];
extern const char STR_FAILSAFE[];
@@ -721,8 +723,10 @@ extern const char STR_CHANNELRANGE[];
extern const char STR_ANTENNASELECTION[];
extern const char STR_ANTENNACONFIRM1[];
extern const char STR_ANTENNACONFIRM2[];
-extern const char STR_R9MFLEXWARN1[];
-extern const char STR_R9MFLEXWARN2[];
+extern const char STR_R9M_PROTO_FLEX_WARN1[];
+extern const char STR_R9M_PROTO_FCC_WARN1[];
+extern const char STR_R9M_PROTO_EU_WARN1[];
+extern const char STR_R9M_PROTO_WARN2[];
extern const char STR_SET[];
extern const char STR_PREFLIGHT[];
extern const char STR_CHECKLIST[];
diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt
index 1592fcbe7..c65c9dd2d 100644
--- a/radio/src/translations/cz.h.txt
+++ b/radio/src/translations/cz.h.txt
@@ -984,8 +984,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Volba antény")
#define TR_ANTENNACONFIRM1 "Opravdu přepnout?"
#define TR_ANTENNACONFIRM2 TR("Zkont. anténu", "Ujisti se že je anténa připojena!")
-#define TR_R9MFLEXWARN1 "Potřebuje"
-#define TR_R9MFLEXWARN2 "necertifikovaný R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Potřebuje"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "necertifikovaný R9M firm."
#define TR_LOWALARM INDENT "Nízký Alarm"
#define TR_CRITICALALARM INDENT "Kritický Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","RSSI TELEMETRIE")
diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt
index a16e3fbd3..17c74b2be 100644
--- a/radio/src/translations/de.h.txt
+++ b/radio/src/translations/de.h.txt
@@ -991,8 +991,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenne auswählen")
#define TR_ANTENNACONFIRM1 "Ant. umschalten"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Ist eine externe Antenne installiert?")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Warnungsschwelle"
#define TR_CRITICALALARM INDENT "Kritischer Alarm"
#define TR_RSSIALARM_WARN "Telemetry"
diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt
index 705fa5295..97c65e9da 100644
--- a/radio/src/translations/en.h.txt
+++ b/radio/src/translations/en.h.txt
@@ -990,8 +990,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection"))
#define TR_ANTENNACONFIRM1 "Really switch?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires FLEX non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Low alarm"
#define TR_CRITICALALARM INDENT "Critical alarm"
#define TR_RSSIALARM_WARN "RSSI"
diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt
index 74976e87e..d8deae264 100644
--- a/radio/src/translations/es.h.txt
+++ b/radio/src/translations/es.h.txt
@@ -1006,8 +1006,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection"))
#define TR_ANTENNACONFIRM1 "Really switch?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Alarma baja"
#define TR_CRITICALALARM INDENT "Alarma Critica"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt
index 4a47288dc..197d8257a 100644
--- a/radio/src/translations/fi.h.txt
+++ b/radio/src/translations/fi.h.txt
@@ -999,8 +999,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection"))
#define TR_ANTENNACONFIRM1 "Really switch?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Low Alarm"
#define TR_CRITICALALARM INDENT "Critical Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt
index bda1aa346..a85ddccad 100644
--- a/radio/src/translations/fr.h.txt
+++ b/radio/src/translations/fr.h.txt
@@ -1001,8 +1001,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenne", INDENT "Choix antenne")
#define TR_ANTENNACONFIRM1 "Vraiment changer?"
#define TR_ANTENNACONFIRM2 TR("Vérif antenne", "Installer l'antenne d'abord!")
-#define TR_R9MFLEXWARN1 "Nécessite firm."
-#define TR_R9MFLEXWARN2 "R9M non certifié"
+#define TR_R9M_PROTO_FLEX_WARN1 "Nécessite firm."
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "R9M non certifié"
#define TR_LOWALARM INDENT "Alarme basse"
#define TR_CRITICALALARM INDENT "Alarme critique"
#define TR_RSSIALARM_WARN TR("RSSI", "TELEMETRIE")
diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt
index a0f2852d6..cd3001368 100644
--- a/radio/src/translations/it.h.txt
+++ b/radio/src/translations/it.h.txt
@@ -1000,8 +1000,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
#define TR_ANTENNACONFIRM1 "Really switch?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Allarme Basso"
#define TR_CRITICALALARM INDENT "Allarme Critico"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt
index a13c66dcb..dd631c571 100644
--- a/radio/src/translations/nl.h.txt
+++ b/radio/src/translations/nl.h.txt
@@ -989,8 +989,10 @@ TR_GYR_VSRCRAW
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
#define TR_ANTENNACONFIRM1 "Antennes wisselen?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Is er zeker een antenne geplaatst!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Waarschuwing"
#define TR_CRITICALALARM INDENT "Kritiek Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt
index 3787db2f4..c7b886f4a 100644
--- a/radio/src/translations/pl.h.txt
+++ b/radio/src/translations/pl.h.txt
@@ -1000,8 +1000,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
#define TR_ANTENNACONFIRM1 "Really switch?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Alarm niski"
#define TR_CRITICALALARM INDENT "Alarm krytyczny"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt
index d4bf75507..89e6c0814 100644
--- a/radio/src/translations/pt.h.txt
+++ b/radio/src/translations/pt.h.txt
@@ -990,8 +990,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
#define TR_ANTENNACONFIRM1 "Really switch?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Low Alarm"
#define TR_CRITICALALARM INDENT "Critical Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt
index ef8c613e1..535a2c6d1 100644
--- a/radio/src/translations/se.h.txt
+++ b/radio/src/translations/se.h.txt
@@ -1000,8 +1000,10 @@
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
#define TR_ANTENNACONFIRM1 "Really switch?"
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
-#define TR_R9MFLEXWARN1 "Requires non"
-#define TR_R9MFLEXWARN2 "certified R9M firm."
+#define TR_R9M_PROTO_FLEX_WARN1 "Requires non"
+#define TR_R9M_PROTO_FCC_WARN1 "Requires FCC"
+#define TR_R9M_PROTO_EU_WARN1 "Requires EU"
+#define TR_R9M_PROTO_WARN2 "certified firmware"
#define TR_LOWALARM INDENT "Låg-alarm"
#define TR_CRITICALALARM INDENT "Kritiskt alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")