diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 5733c7f86..9c5e1b652 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -444,6 +444,9 @@ PACK(struct ModuleData { uint8_t autoBindMode:1; uint8_t lowPowerMode:1; int8_t optionValue; + uint8_t receiverTelemetryOff:1; + uint8_t receiverHigherChannels:1; + uint8_t spare:6; } multi); NOBACKUP(struct { uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index be933710b..3a67ba80e 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1461,8 +1461,19 @@ void menuModelSetup(event_t event) if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) { int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); const uint8_t multi_proto = g_model.moduleData[moduleIdx].getMultiProtocol(); - if (multi_proto < MODULE_SUBTYPE_MULTI_LAST) { + + if (status.isValid()) { + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); + lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); + if (attr && status.optionDisp == 2) { + lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, "RSSI(", LEFT); + lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); + lcdDrawText(lcdLastRightPos, y, ")", LEFT); + } + } + else { const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); if (pdef->optionsstr) { lcdDrawText(INDENT_WIDTH, y, pdef->optionsstr); @@ -1473,15 +1484,7 @@ void menuModelSetup(event_t event) } } } - else { - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); - if (attr && status.optionDisp == 2) { - lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, "RSSI(", LEFT); - lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); - lcdDrawText(lcdLastRightPos, y, ")", LEFT); - } - } + if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) optionValue = 50 + 5 * optionValue; diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index c7acddefb..18efa2849 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -1216,8 +1216,17 @@ void menuModelSetup(event_t event) if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) { int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); const uint8_t multi_proto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(); - if (multi_proto < MODULE_SUBTYPE_MULTI_LAST) { + if (status.isValid()) { + lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); + if (attr && status.optionDisp == 2) { + lcdDrawText(MODEL_SETUP_3RD_COLUMN+22, y, "RSSI(", LEFT); + lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); + lcdDrawText(lcdLastRightPos, y, ")", LEFT); + } + } + else { const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); if (pdef->optionsstr) lcdDrawText(INDENT_WIDTH, y, pdef->optionsstr); @@ -1227,15 +1236,7 @@ void menuModelSetup(event_t event) lcdDrawText(lcdLastRightPos, y, ")", LEFT); } } - else { - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - lcdDrawText(INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); - if (attr && status.optionDisp == 2) { - lcdDrawText(MODEL_SETUP_3RD_COLUMN+22, y, "RSSI(", LEFT); - lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT); - lcdDrawText(lcdLastRightPos, y, ")", LEFT); - } - } + if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) optionValue = 50 + 5 * optionValue; diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 93fed1953..405efbfd5 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -1613,23 +1613,24 @@ bool menuModelSetup(event_t event) if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) { int optionValue = g_model.moduleData[moduleIdx].multi.optionValue; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); const uint8_t multi_proto = g_model.moduleData[moduleIdx].getMultiProtocol(); - if (multi_proto < MODULE_SUBTYPE_MULTI_LAST) { + if (status.isValid()) { + lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); + if (attr && status.optionDisp == 2) { + lcdDrawNumber(LCD_W - 10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")"); + } + } + else { const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto); if (pdef->optionsstr) { lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, pdef->optionsstr); - if (attr && pdef->optionsstr == STR_MULTI_RFTUNE) { + if (attr && pdef->optionsstr == STR_MULTI_RFTUNE) { lcdDrawNumber(LCD_W - 10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")"); } } } - else { - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, mm_options_strings::options[status.optionDisp]); - if (attr && status.optionDisp == 2) { - lcdDrawNumber(LCD_W - 10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")"); - } - } + if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) optionValue = 50 + 5 * optionValue; diff --git a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp index 24091dcd7..13ad0437c 100644 --- a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp +++ b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp @@ -22,27 +22,37 @@ void onBindMenu(const char * result) { uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition - HEADER_LINE); + uint8_t receiverTelemetryOff, receiverHigherChannels; if (result == STR_BINDING_1_8_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false; + receiverTelemetryOff = false; + receiverHigherChannels = false; } else if (result == STR_BINDING_1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false; + receiverTelemetryOff = true; + receiverHigherChannels = false; } else if (result == STR_BINDING_9_16_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true; + receiverTelemetryOff = false; + receiverHigherChannels = true; } else if (result == STR_BINDING_9_16_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true; - g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true; + receiverTelemetryOff = true; + receiverHigherChannels = true; } else { return; } + if (isModuleMultimodule(moduleIdx)) { + g_model.moduleData[moduleIdx].multi.receiverTelemetryOff = receiverTelemetryOff; + g_model.moduleData[moduleIdx].multi.receiverHigherChannels = receiverHigherChannels; + } + else { + g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = receiverTelemetryOff; + g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = receiverHigherChannels; + } + moduleState[moduleIdx].mode = MODULE_MODE_BIND; } diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index ca7dc4442..a849dfd7a 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -926,7 +926,7 @@ const mm_protocol_definition multi_protocols[] = { {MM_RF_CUSTOM_SELECTED, 7, true, true, NO_SUBTYPE, STR_MULTI_OPTION}, // Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff) - {0xfe, 0, false, true, NO_SUBTYPE, nullptr} + {0xfe, 0, false, false, NO_SUBTYPE, nullptr} }; #undef NO_SUBTYPE diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 6c52f2fb3..ccbf535eb 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -166,6 +166,11 @@ inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx) if (!isModuleMultimodule(moduleIdx)) return HIDDEN_ROW; + MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); + if (status.isValid()) { + return status.supportsDisableMapping() == true ? 0 : HIDDEN_ROW; + } + uint8_t protocol = g_model.moduleData[moduleIdx].getMultiProtocol(); if (protocol < MODULE_SUBTYPE_MULTI_LAST) { const mm_protocol_definition * pdef = getMultiProtocolDefinition(protocol); @@ -173,11 +178,6 @@ inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx) return 0; } - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - if (status.supportsDisableMapping() && status.isValid()) { - return 0; - } - return HIDDEN_ROW; } @@ -239,12 +239,15 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx) return false; uint8_t protocol = g_model.moduleData[moduleIdx].getMultiProtocol(); - if (protocol < MODULE_SUBTYPE_MULTI_LAST) { - return getMultiProtocolDefinition(protocol)->optionsstr != nullptr; - } - MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); - return status.optionDisp; + + if (status.isValid()) + return status.optionDisp; + + if (protocol < MODULE_SUBTYPE_MULTI_LAST) + return getMultiProtocolDefinition(protocol)->optionsstr != nullptr; + + return false; } #define MULTIMODULE_MODULE_ROWS(moduleIdx) MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTI_DISABLE_CHAN_MAP_ROW(moduleIdx), // AUTOBIND, DISABLE TELEM, DISABLE CN.MAP diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index 2c9a64e94..dfd5a1e24 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -127,7 +127,7 @@ inline bool isModuleISRMD16(uint8_t idx) inline bool isModuleD16(uint8_t idx) { - return isModuleXJTD16(idx) || isModuleISRMD16(idx); + return isModuleXJTD16(idx) || isModuleISRMD16(idx) || IS_D16_MULTI(idx); } inline bool isModuleISRMAccess(uint8_t idx) @@ -469,7 +469,7 @@ inline bool isTelemAllowedOnBind(uint8_t moduleIndex) { #if defined(HARDWARE_INTERNAL_MODULE) if (moduleIndex == INTERNAL_MODULE) - return isModuleISRM(moduleIndex) || isSportLineUsedByInternalModule(); + return true; if (isSportLineUsedByInternalModule()) return false; @@ -557,6 +557,8 @@ inline void resetMultiProtocolsOptions(uint8_t moduleIdx) g_model.moduleData[moduleIdx].multi.disableTelemetry = 0; g_model.moduleData[moduleIdx].multi.disableMapping = 0; g_model.moduleData[moduleIdx].multi.lowPowerMode = 0; + g_model.moduleData[moduleIdx].failsafeMode = FAILSAFE_NOT_SET; + g_model.header.modelId[moduleIdx] = 0; } inline void getMultiOptionValues(int8_t multi_proto, int8_t & min, int8_t & max) diff --git a/radio/src/pulses/multi.cpp b/radio/src/pulses/multi.cpp index b49c61b7d..936da0948 100644 --- a/radio/src/pulses/multi.cpp +++ b/radio/src/pulses/multi.cpp @@ -38,6 +38,7 @@ static void sendFrameProtocolHeader(uint8_t moduleIdx, bool failsafe); void sendChannels(uint8_t moduleIdx); +static void sendD16BindOption(uint8_t moduleIdx); #if defined(LUA) static void sendSport(uint8_t moduleIdx); static void sendHott(uint8_t moduleIdx); @@ -174,10 +175,13 @@ void setupPulsesMulti(uint8_t moduleIdx) | g_model.moduleData[moduleIdx].multi.disableMapping)); // Multi V1.3.X.X -> Send protocol additional data: max 9 bytes -#if defined(LUA) if (getMultiModuleStatus(moduleIdx).isValid()) { MultiModuleStatus &status = getMultiModuleStatus(moduleIdx); if (status.minor >= 3 && !(status.flags & 0x80)) { //Version 1.3.x.x or more and Buffer not full + if (IS_D16_MULTI(moduleIdx) && moduleState[moduleIdx].mode == MODULE_MODE_BIND) { + sendD16BindOption(moduleIdx);//1 byte of additional data + } +#if defined(LUA) // SPort send if (IS_D16_MULTI(moduleIdx) && outputTelemetryBuffer.destination == TELEMETRY_ENDPOINT_SPORT && outputTelemetryBuffer.size) { sendSport(moduleIdx); //8 bytes of additional data @@ -185,9 +189,9 @@ void setupPulsesMulti(uint8_t moduleIdx) else if (IS_HOTT_MULTI(moduleIdx)) { sendHott(moduleIdx); //1 byte of additional data } +#endif } } - #endif } void setupPulsesMultiExternalModule() @@ -345,6 +349,13 @@ void sendFrameProtocolHeader(uint8_t moduleIdx, bool failsafe) sendMulti(moduleIdx, (uint8_t) optionValue); } +void sendD16BindOption(uint8_t moduleIdx) +{ + uint8_t bind_opt = g_model.moduleData[moduleIdx].multi.receiverTelemetryOff ? 1 : 0; + bind_opt |= g_model.moduleData[moduleIdx].multi.receiverHigherChannels ? 2 : 0; + sendMulti(moduleIdx, bind_opt); +} + #if defined(LUA) void sendSport(uint8_t moduleIdx) { diff --git a/radio/src/telemetry/multi.cpp b/radio/src/telemetry/multi.cpp index 9fba4105a..e6b41faae 100644 --- a/radio/src/telemetry/multi.cpp +++ b/radio/src/telemetry/multi.cpp @@ -548,7 +548,7 @@ void MultiModuleStatus::getStatusString(char * statusText) const return; } - if (major == 1 && minor < 3 && SLOW_BLINK_ON_PHASE) { + if (major <= 1 && minor <= 3 && revision <= 0 && patch <= 47 && SLOW_BLINK_ON_PHASE) { strcpy(statusText, STR_MODULE_UPGRADE); } else { diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index df4261a0a..d90d692c7 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -644,7 +644,7 @@ #define TR_MODULE_WAITFORBIND "Párovat při zavedení protokolu" #define TR_MODULE_BINDING TR("Bind...","Párování") #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Nutno přepárovat" #define TR_REG_OK "Registrace ok" #define TR_BIND_OK "Úspěšné párovaní" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 89ad37779..de1421c0e 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -646,7 +646,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 0cfa48682..f7600bf4f 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -645,7 +645,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING TR("Bind...","Binding") #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index acdc29090..a52691923 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -669,7 +669,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index c378cb47c..f5e018ead 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -663,7 +663,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index acf1f155f..c8ec87b9f 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -666,7 +666,7 @@ #define TR_MODULE_WAITFORBIND "Binder d'abord" #define TR_MODULE_BINDING "Bind..." #define TR_MODULE_UPGRADE_ALERT "Mise à jour requise" -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebind requis" #define TR_REG_OK "Enregistr. ok" #define TR_BIND_OK "Bind ok" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 2b68fe5df..633d83a26 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -651,7 +651,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 0441b2418..339755077 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -664,7 +664,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 998a4e99a..7d51e12f7 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -655,7 +655,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index aeff79192..2c26a7a0a 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -664,7 +664,7 @@ #define TR_MODULE_WAITFORBIND "Bind to load protocol" #define TR_MODULE_BINDING "Binding" #define TR_MODULE_UPGRADE_ALERT TR3("Upg. needed", "Module upgrade required", "Module\nUpgrade required") -#define TR_MODULE_UPGRADE TR("Upg. needed", "Module update recommended") +#define TR_MODULE_UPGRADE TR("Upg. advised", "Module update recommended") #define TR_REBIND "Rebinding required" #define TR_REG_OK "Registration ok" #define TR_BIND_OK "Bind successful"