1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-15 12:25:12 +03:00

Wismy/frsky new receivers (#7449)

Add internal module OTA
Change virtual keys for X-Lite(S) Lua scripts
This commit is contained in:
WismyYao 2020-03-24 22:15:10 +08:00 committed by GitHub
parent 9e22b1c6c4
commit 629f98a930
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 350 additions and 59 deletions

View file

@ -46,14 +46,18 @@ void onRxOptionsUpdateConfirm(const char * result)
enum {
ITEM_RECEIVER_SETTINGS_PWM_RATE,
ITEM_RECEIVER_SETTINGS_TELEMETRY,
ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW,
ITEM_RECEIVER_SETTINGS_SPORT_FPORT,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2,
ITEM_RECEIVER_SETTINGS_PINMAP_FIRST
};
#define IS_RECEIVER_CAPABILITY_ENABLED(capability) (reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability))
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t(IS_RECEIVER_CAPABILITY_ENABLED(capability) ? count : HIDDEN_ROW)
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t((reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability)) ? count : HIDDEN_ROW)
#define CH_ENABLE_SPORT 4
#define CH_ENABLE_SBUS 5
bool menuModelReceiverOptions(event_t event)
{
@ -76,6 +80,7 @@ bool menuModelReceiverOptions(event_t event)
SUBMENU(STR_RECEIVER_OPTIONS, ICON_MODEL_SETUP, ITEM_RECEIVER_SETTINGS_PINMAP_FIRST + outputsCount, {
0, // PWM rate
isModuleR9MAccess(g_moduleIdx) && receiverVariant == PXX2_VARIANT_EU && reusableBuffer.hardwareAndSettings.moduleSettings.txPower > 14 /*25mW*/ ? READONLY_ROW : (uint8_t)0, // Telemetry
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_TELEMETRY_25MW, 0),
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT, 0),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
@ -156,6 +161,14 @@ bool menuModelReceiverOptions(event_t event)
}
break;
case ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW:
lcdDrawText(MENUS_MARGIN_LEFT, y, "25mw Tele");
reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw, RECEIVER_OPTIONS_2ND_COLUMN, y, attr, event);
if (attr && checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
break;
case ITEM_RECEIVER_SETTINGS_SPORT_FPORT:
lcdDrawText(MENUS_MARGIN_LEFT, y, "F.Port");
reusableBuffer.hardwareAndSettings.receiverSettings.fport = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport, RECEIVER_OPTIONS_2ND_COLUMN, y, attr, event);
@ -182,22 +195,44 @@ bool menuModelReceiverOptions(event_t event)
int32_t channelValue = channelOutputs[channel];
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_PIN);
lcdDrawNumber(lcdNextPos + 1, y, pin + 1);
uint8_t channelMax = sentModuleChannels(g_moduleIdx) - 1;
uint8_t selectionMax = channelMax;
if (IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6)) {
if (CH_ENABLE_SPORT == pin || CH_ENABLE_SBUS == pin) {
selectionMax += 1;
}
if (CH_ENABLE_SPORT == pin && selectionMax == channel) {
lcdDrawText(100, y, "S.PORT", attr);
}
else if (CH_ENABLE_SBUS == pin && selectionMax == channel) {
lcdDrawText(100, y, "SBUS", attr);
}
else {
putsChn(100, y, channel + 1, attr);
}
}
else {
putsChn(100, y, channel + 1, attr);
}
// Channel
if (attr) {
mapping = checkIncDec(event, mapping, 0, sentModuleChannels(g_moduleIdx) - 1);
mapping = checkIncDec(event, mapping, 0, selectionMax);
if (checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
}
// Bargraph
if (channel <= channelMax) {
lcdDrawRect(RECEIVER_OPTIONS_2ND_COLUMN, y + 4, wbar + 1, 10);
const uint8_t lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
const coord_t xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
auto lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
auto xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
lcdDrawSolidFilledRect(xChannel, y + 5, lenChannel, 8, TEXT_INVERTED_BGCOLOR);
}
}
break;
}
}

View file

@ -18,7 +18,6 @@
* GNU General Public License for more details.
*/
#include <stdio.h>
#include "io/frsky_firmware_update.h"
#include "io/multi_firmware_update.h"
#include "opentx.h"
@ -91,6 +90,49 @@ void onSdFormatConfirm(const char * result)
}
}
#if defined(PXX2)
void onUpdateConfirmation(const char * result)
{
if (result == STR_OK) {
OtaUpdateInformation * destination = moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].otaUpdateInformation;
Pxx2OtaUpdate otaUpdate(reusableBuffer.sdManager.otaUpdateInformation.module, destination->candidateReceiversNames[destination->selectedReceiverIndex]);
otaUpdate.flashFirmware(destination->filename);
}
else {
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
void onUpdateStateChanged()
{
if (reusableBuffer.sdManager.otaUpdateInformation.step == BIND_INFO_REQUEST) {
uint8_t modelId = reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.modelID;
if (modelId > 0 && modelId < DIM(PXX2ReceiversNames)) {
if (isPXX2ReceiverOptionAvailable(modelId, RECEIVER_OPTION_OTA)) {
POPUP_CONFIRMATION(getPXX2ReceiverName(modelId), onUpdateConfirmation);
char *tmp = strAppend(reusableBuffer.sdManager.otaReceiverVersion, TR_CURRENT_VERSION);
tmp = strAppendUnsigned(tmp, 1 + reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.swVersion.major);
*tmp++ = '.';
tmp = strAppendUnsigned(tmp, reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.swVersion.minor);
*tmp++ = '.';
tmp = strAppendUnsigned(tmp, reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.swVersion.revision);
SET_WARNING_INFO(reusableBuffer.sdManager.otaReceiverVersion, tmp - reusableBuffer.sdManager.otaReceiverVersion, 0);
}
else {
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
SET_WARNING_INFO(STR_UNSUPPORTED_RX, sizeof(TR_UNSUPPORTED_RX) - 1, 0);
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
else {
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
SET_WARNING_INFO(STR_UNKNOWN_RX, sizeof(TR_UNKNOWN_RX) - 1, 0);
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
}
#endif
void onSdManagerMenu(const char * result)
{
TCHAR lfn[_MAX_LFN+1];
@ -203,6 +245,14 @@ void onSdManagerMenu(const char * result)
multiFlashFirmware(EXTERNAL_MODULE, lfn);
}
#endif
#if defined(PXX2)
else if (result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL || result == STR_FLASH_RECEIVER_OTA_BY_EXTERNAL) {
memclear(&reusableBuffer.sdManager.otaUpdateInformation, sizeof(OtaUpdateInformation));
getSelectionFullPath(reusableBuffer.sdManager.otaUpdateInformation.filename);
reusableBuffer.sdManager.otaUpdateInformation.module = result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL ? INTERNAL_MODULE : EXTERNAL_MODULE;
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].startBind(&reusableBuffer.sdManager.otaUpdateInformation, onUpdateStateChanged);
}
#endif
#if defined(LUA)
else if (result == STR_EXECUTE_FILE) {
getSelectionFullPath(lfn);
@ -211,8 +261,33 @@ void onSdManagerMenu(const char * result)
#endif
}
#if defined(PXX2)
void onUpdateReceiverSelection(const char * result)
{
if (result != STR_EXIT) {
reusableBuffer.sdManager.otaUpdateInformation.selectedReceiverIndex = (result - reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversNames[0]) / sizeof(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversNames[0]);
reusableBuffer.sdManager.otaUpdateInformation.step = BIND_INFO_REQUEST;
#if defined(SIMU)
reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.modelID = 0x01;
onUpdateStateChanged();
#endif
}
else {
// the user pressed [Exit]
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
#endif
bool menuRadioSdManager(event_t _event)
{
if (moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND && EVT_KEY_MASK(_event) == KEY_EXIT) {
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
CLEAR_POPUP();
killEvents(KEY_EXIT);
_event = 0;
}
event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event);
SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, RADIO_ICONS, menuTabGeneral, MENU_RADIO_SD_MANAGER, reusableBuffer.sdManager.count);
@ -300,8 +375,12 @@ bool menuRadioSdManager(event_t _event)
if (HAS_SPORT_UPDATE_CONNECTOR() && (information.productFamily == FIRMWARE_FAMILY_RECEIVER || information.productFamily == FIRMWARE_FAMILY_SENSOR))
POPUP_MENU_ADD_ITEM(STR_FLASH_EXTERNAL_DEVICE);
#if defined(PXX2)
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER)
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA);
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER) {
if (isReceiverOTAEnabledFromModule(INTERNAL_MODULE, information.productId))
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_INTERNAL);
if (isReceiverOTAEnabledFromModule(EXTERNAL_MODULE, information.productId))
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_EXTERNAL);
}
#endif
#if defined(BLUETOOTH)
if (information.productFamily == FIRMWARE_FAMILY_BLUETOOTH_CHIP)
@ -476,6 +555,27 @@ bool menuRadioSdManager(event_t _event)
}
}
#if defined(PXX2)
if (moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND) {
if (reusableBuffer.sdManager.otaUpdateInformation.step == BIND_INIT) {
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount > 0) {
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount != popupMenuItemsCount) {
CLEAR_POPUP();
popupMenuItemsCount = min<uint8_t>(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount,PXX2_MAX_RECEIVERS_PER_MODULE);
for (auto rx = 0; rx < popupMenuItemsCount; rx++) {
popupMenuItems[rx] = reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversNames[rx];
}
//popupMenuTitle = STR_PXX2_SELECT_RX;
POPUP_MENU_START(onUpdateReceiverSelection);
}
}
else {
POPUP_WAIT(STR_WAITING_FOR_RX);
}
}
}
#endif
const char * ext = getFileExtension(reusableBuffer.sdManager.lines[index]);
if (ext && isExtensionMatching(ext, BITMAPS_EXT)) {
if (currentBitmapIndex != menuVerticalPosition) {

View file

@ -46,14 +46,18 @@ void onRxOptionsUpdateConfirm(const char * result)
enum {
ITEM_RECEIVER_SETTINGS_PWM_RATE,
ITEM_RECEIVER_SETTINGS_TELEMETRY,
ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW,
ITEM_RECEIVER_SETTINGS_SPORT_FPORT,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2,
ITEM_RECEIVER_SETTINGS_PINMAP_FIRST
};
#define IS_RECEIVER_CAPABILITY_ENABLED(capability) (reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability))
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t(IS_RECEIVER_CAPABILITY_ENABLED(capability) ? count : HIDDEN_ROW)
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t((reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability)) ? count : HIDDEN_ROW)
#define CH_ENABLE_SPORT 4
#define CH_ENABLE_SBUS 5
void menuModelReceiverOptions(event_t event)
{
@ -76,6 +80,7 @@ void menuModelReceiverOptions(event_t event)
SUBMENU_NOTITLE(ITEM_RECEIVER_SETTINGS_PINMAP_FIRST + outputsCount, {
0, // PWM rate
isModuleR9MAccess(g_moduleIdx) && receiverVariant == PXX2_VARIANT_EU && reusableBuffer.hardwareAndSettings.moduleSettings.txPower > 14 /*25mW*/ ? READONLY_ROW : (uint8_t)0, // Telemetry
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_TELEMETRY_25MW, 0),
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT, 0),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
@ -139,7 +144,7 @@ void menuModelReceiverOptions(event_t event)
switch (i) {
case ITEM_RECEIVER_SETTINGS_PWM_RATE:
reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate, RECEIVER_OPTIONS_2ND_COLUMN, y, isModuleR9MAccess(g_moduleIdx) ? "6.67ms PWM": "9ms PWM", attr, event);
reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate, RECEIVER_OPTIONS_2ND_COLUMN, y, isModuleR9MAccess(g_moduleIdx) ? "6.67ms PWM": "7ms PWM", attr, event);
if (attr && checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
@ -152,6 +157,13 @@ void menuModelReceiverOptions(event_t event)
}
break;
case ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW:
reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw, RECEIVER_OPTIONS_2ND_COLUMN, y, "25mw Tele", attr, event);
if (attr && checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
break;
case ITEM_RECEIVER_SETTINGS_SPORT_FPORT:
reusableBuffer.hardwareAndSettings.receiverSettings.fport = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport, RECEIVER_OPTIONS_2ND_COLUMN, y, "F.Port", attr, event);
if (attr && checkIncDec_Ret) {
@ -174,28 +186,50 @@ void menuModelReceiverOptions(event_t event)
if (pin < reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount) {
uint8_t & mapping = reusableBuffer.hardwareAndSettings.receiverSettings.outputsMapping[pin];
uint8_t channel = g_model.moduleData[g_moduleIdx].channelsStart + mapping;
int32_t channelValue = channelOutputs[channel];
lcdDrawText(0, y, STR_PIN);
lcdDrawNumber(lcdLastRightPos + 1, y, pin + 1);
uint8_t channelMax = sentModuleChannels(g_moduleIdx) - 1;
uint8_t selectionMax = channelMax;
if (IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6)) {
if (CH_ENABLE_SPORT == pin || CH_ENABLE_SBUS == pin)
selectionMax += 1;
if (CH_ENABLE_SPORT == pin && selectionMax == channel) {
lcdDrawText(7 * FW, y, "S.PORT", attr);
}
else if (CH_ENABLE_SBUS == pin && selectionMax == channel) {
lcdDrawText(7 * FW, y, "SBUS", attr);
}
else {
putsChn(7 * FW, y, channel + 1, attr);
}
}
else {
putsChn(7 * FW, y, channel + 1, attr);
}
// Channel
if (attr) {
mapping = checkIncDec(event, mapping, 0, sentModuleChannels(g_moduleIdx) - 1);
mapping = checkIncDec(event, mapping, 0, selectionMax);
if (checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
}
// Bargraph
#if !defined(PCBX7) // X7 LCD doesn't like too many horizontal lines
if (channel <= channelMax) {
int32_t channelValue = channelOutputs[channel];
#if !defined(PCBX7) // X7 LCD doesn't like too many horizontal lines
lcdDrawRect(RECEIVER_OPTIONS_2ND_COLUMN, y + 2, wbar + 1, 4);
#endif
const uint8_t lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
const coord_t xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
#endif
auto lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
auto xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
lcdDrawHorizontalLine(xChannel, y + 3, lenChannel, SOLID, 0);
lcdDrawHorizontalLine(xChannel, y + 4, lenChannel, SOLID, 0);
}
}
break;
}
}

View file

@ -94,12 +94,12 @@ void onSdFormatConfirm(const char * result)
void onUpdateConfirmation(const char * result)
{
if (result == STR_OK) {
OtaUpdateInformation * destination = moduleState[EXTERNAL_MODULE].otaUpdateInformation;
Pxx2OtaUpdate otaUpdate(EXTERNAL_MODULE, destination->candidateReceiversNames[destination->selectedReceiverIndex]);
OtaUpdateInformation * destination = moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].otaUpdateInformation;
Pxx2OtaUpdate otaUpdate(reusableBuffer.sdManager.otaUpdateInformation.module, destination->candidateReceiversNames[destination->selectedReceiverIndex]);
otaUpdate.flashFirmware(destination->filename);
}
else {
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
@ -121,13 +121,13 @@ void onUpdateStateChanged()
else {
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
SET_WARNING_INFO(STR_UNSUPPORTED_RX, sizeof(TR_UNSUPPORTED_RX) - 1, 0);
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
else {
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
SET_WARNING_INFO(STR_UNKNOWN_RX, sizeof(TR_UNKNOWN_RX) - 1, 0);
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
}
@ -246,10 +246,11 @@ void onSdManagerMenu(const char * result)
}
#endif
#if defined(PXX2)
else if (result == STR_FLASH_RECEIVER_OTA) {
else if (result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL || result == STR_FLASH_RECEIVER_OTA_BY_EXTERNAL) {
memclear(&reusableBuffer.sdManager.otaUpdateInformation, sizeof(OtaUpdateInformation));
getSelectionFullPath(reusableBuffer.sdManager.otaUpdateInformation.filename);
moduleState[EXTERNAL_MODULE].startBind(&reusableBuffer.sdManager.otaUpdateInformation, onUpdateStateChanged);
reusableBuffer.sdManager.otaUpdateInformation.module = result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL ? INTERNAL_MODULE : EXTERNAL_MODULE;
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].startBind(&reusableBuffer.sdManager.otaUpdateInformation, onUpdateStateChanged);
}
#endif
#endif
@ -274,7 +275,7 @@ void onUpdateReceiverSelection(const char * result)
}
else {
// the user pressed [Exit]
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
}
}
#endif
@ -285,8 +286,8 @@ void menuRadioSdManager(event_t _event)
int lastPos = menuVerticalPosition;
#endif
if (moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND && EVT_KEY_MASK(_event) == KEY_EXIT) {
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
if (moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND && EVT_KEY_MASK(_event) == KEY_EXIT) {
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
CLEAR_POPUP();
killEvents(KEY_EXIT);
_event = 0;
@ -417,8 +418,12 @@ void menuRadioSdManager(event_t _event)
POPUP_MENU_ADD_ITEM(STR_FLASH_EXTERNAL_MODULE);
}
#if defined(PXX2)
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER)
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA);
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER) {
if (isReceiverOTAEnabledFromModule(INTERNAL_MODULE, information.productId))
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_INTERNAL);
if (isReceiverOTAEnabledFromModule(EXTERNAL_MODULE, information.productId))
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_EXTERNAL);
}
#endif
#if defined(BLUETOOTH)
if (information.productFamily == FIRMWARE_FAMILY_BLUETOOTH_CHIP)
@ -564,10 +569,10 @@ void menuRadioSdManager(event_t _event)
}
#if defined(PXX2)
if (moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND) {
if (moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND) {
if (reusableBuffer.sdManager.otaUpdateInformation.step == BIND_INIT) {
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount > 0) {
if(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount != popupMenuItemsCount) {
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount != popupMenuItemsCount) {
CLEAR_POPUP();
popupMenuItemsCount = min<uint8_t>(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount,PXX2_MAX_RECEIVERS_PER_MODULE);
for (auto rx = 0; rx < popupMenuItemsCount; rx++) {

View file

@ -313,12 +313,12 @@ const char * FrskyDeviceFirmwareUpdate::doFlashFirmware(const char * filename)
}
else {
#if defined(PCBHORUS)
information.productId = FIRMWARE_ID_XJT;
information.productId = FIRMWARE_ID_MODULE_XJT;
#endif
}
#if defined(PCBHORUS)
if (module == INTERNAL_MODULE && information.productId == FIRMWARE_ID_XJT) {
if (module == INTERNAL_MODULE && information.productId == FIRMWARE_ID_MODULE_XJT) {
INTERNAL_MODULE_ON();
RTOS_WAIT_MS(1);
intmoduleSerialStart(38400, true, USART_Parity_No, USART_StopBits_1, USART_WordLength_8b);

View file

@ -24,6 +24,7 @@
#include "dataconstants.h"
#include "definitions.h"
#include "frsky_pxx2.h"
#include "pulses/modules_helpers.h"
#include "ff.h"
enum FrskyFirmwareProductFamily {
@ -35,12 +36,43 @@ enum FrskyFirmwareProductFamily {
FIRMWARE_FAMILY_POWER_MANAGEMENT_UNIT,
};
enum FrskyFirmwareProductId {
FIRMWARE_ID_NONE,
FIRMWARE_ID_XJT = 0x01,
FIRMWARE_ID_ISRM = 0x02,
enum FrskyFirmwareModuleProductId {
FIRMWARE_ID_MODULE_NONE,
FIRMWARE_ID_MODULE_XJT = 0x01,
FIRMWARE_ID_MODULE_ISRM = 0x02,
};
enum FrskyFirmwareReceiverProductId {
FIRMWARE_ID_RECEIVER_NONE,
FIRMWARE_ID_RECEIVER_ARCHER = 0xC0, // TODO use the right constant
FIRMWARE_ID_RECEIVER_R9MX = 0xF0, // TODO use the right constant
// TODO fill the table
};
inline bool isReceiverOTAEnabledFromModule(uint8_t moduleIdx, uint8_t productId)
{
switch (productId) {
case FIRMWARE_ID_RECEIVER_ARCHER:
return isModuleISRM(moduleIdx);
case FIRMWARE_ID_RECEIVER_R9MX:
return isModuleR9M(moduleIdx);
// TODO add all those OTA receivers here
/*
"R9-MINI-OTA", // this one has OTA (different bootloader)
"R9-MM-OTA", // this one has OTA (different bootloader)
"R9-SLIM+-OTA", // this one has OTA (different bootloader)
"R9SX", // this one has OTA
*/
default:
return false;
}
}
PACK(struct FrSkyFirmwareInformation {
uint32_t fourcc;
uint8_t headerVersion;
@ -69,7 +101,7 @@ class FrskyDeviceFirmwareUpdate {
};
public:
FrskyDeviceFirmwareUpdate(ModuleIndex module):
explicit FrskyDeviceFirmwareUpdate(ModuleIndex module):
module(module) {
}

View file

@ -1751,7 +1751,7 @@ const luaR_value_entry opentxConstants[] = {
{ "EVT_VIRTUAL_INC_REPT", EVT_KEY_REPT(KEY_UP) },
#endif
#if defined(NAVIGATION_9X) || defined(NAVIGATION_XLITE)
#if defined(NAVIGATION_9X)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_LEFT) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_LEFT) },
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_RIGHT) },
@ -1759,6 +1759,14 @@ const luaR_value_entry opentxConstants[] = {
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
#elif defined(NAVIGATION_XLITE)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_LEFT) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_LONG(KEY_RIGHT) },
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_SHIFT) },
{ "EVT_VIRTUAL_MENU_LONG", EVT_KEY_LONG(KEY_SHIFT) },
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
#elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_PAGE) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PAGE) },

View file

@ -255,17 +255,6 @@
#include "myeeprom.h"
inline void memclear(void * p, size_t size)
{
memset(p, 0, size);
}
inline bool is_memclear(void * p, size_t size)
{
uint8_t * buf = (uint8_t *)p;
return buf[0] == 0 && memcmp(buf, buf + 1, size - 1) == 0;
}
void memswap(void * a, void * b, uint8_t size);
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBHORUS)

View file

@ -21,10 +21,23 @@
#ifndef _OPENTX_HELPERS_H_
#define _OPENTX_HELPERS_H_
#include <string.h>
template<class t> inline t min(t a, t b) { return a<b?a:b; }
template<class t> inline t max(t a, t b) { return a>b?a:b; }
template<class t> inline t sgn(t a) { return a>0 ? 1 : (a < 0 ? -1 : 0); }
template<class t> inline t limit(t mi, t x, t ma) { return min(max(mi,x),ma); }
template<class t> inline void SWAP(t & a, t & b) { t tmp = b; b = a; a = tmp; }
inline void memclear(void * p, size_t size)
{
memset(p, 0, size);
}
inline bool is_memclear(void * p, size_t size)
{
uint8_t * buf = (uint8_t *)p;
return buf[0] == 0 && memcmp(buf, buf + 1, size - 1) == 0;
}
#endif // _OPENTX_HELPERS_H_

View file

@ -25,6 +25,8 @@
#include "definitions.h"
#include "opentx_helpers.h"
#include "telemetry/telemetry.h"
#include "storage/storage.h"
#if defined(MULTIMODULE)
#include "telemetry/multi.h"
#endif

View file

@ -121,8 +121,10 @@ class ReceiverSettings {
uint8_t receiverId;
uint8_t dirty;
uint8_t telemetryDisabled;
uint8_t telemetry25mw;
uint8_t pwmRate;
uint8_t fport;
uint8_t enablePwmCh5Ch6;
uint8_t outputsCount;
uint8_t outputsMapping[24];
};
@ -144,6 +146,7 @@ class OtaUpdateInformation: public BindInformation {
public:
char filename[_MAX_LFN + 1];
uint32_t address;
uint32_t module;
};
typedef void (* ModuleCallback)();

View file

@ -223,6 +223,10 @@ void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module)
flag1 |= PXX2_RX_SETTINGS_FLAG1_FASTPWM;
if (reusableBuffer.hardwareAndSettings.receiverSettings.fport)
flag1 |= PXX2_RX_SETTINGS_FLAG1_FPORT;
if (reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw)
flag1 |= PXX2_RX_SETTINGS_FLAG1_TELEMETRY_25MW;
if (reusableBuffer.hardwareAndSettings.receiverSettings.enablePwmCh5Ch6)
flag1 |= PXX2_RX_SETTINGS_FLAG1_ENABLE_PWM_CH5_CH6;
Pxx2Transport::addByte(flag1);
uint8_t outputsCount = min<uint8_t>(24, reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount);
for (int i = 0; i < outputsCount; i++) {
@ -355,6 +359,8 @@ void Pxx2Pulses::sendOtaUpdate(uint8_t module, const char * rxName, uint32_t add
if (module == EXTERNAL_MODULE)
extmoduleSendNextFrame();
else if (module == INTERNAL_MODULE)
intmoduleSendNextFrame();
}
void Pxx2Pulses::setupAuthenticationFrame(uint8_t module, uint8_t mode, const uint8_t * outputMessage)
@ -464,7 +470,12 @@ const char * Pxx2OtaUpdate::nextStep(uint8_t step, const char * rxName, uint32_t
destination->address = address;
for (uint8_t retry = 0;; retry++) {
if (module == EXTERNAL_MODULE) {
extmodulePulsesData.pxx2.sendOtaUpdate(module, rxName, address, (const char *) buffer);
}
else if (module == INTERNAL_MODULE) {
intmodulePulsesData.pxx2.sendOtaUpdate(module, rxName, address, (const char *) buffer);
}
if (waitStep(step + 1, 20)) {
return nullptr;
}

View file

@ -53,6 +53,8 @@
#define PXX2_RX_SETTINGS_FLAG1_READONLY (1 << 6)
#define PXX2_RX_SETTINGS_FLAG1_FASTPWM (1 << 4)
#define PXX2_RX_SETTINGS_FLAG1_FPORT (1 << 3)
#define PXX2_RX_SETTINGS_FLAG1_TELEMETRY_25MW (1 << 2)
#define PXX2_RX_SETTINGS_FLAG1_ENABLE_PWM_CH5_CH6 (1 << 1)
#define PXX2_TX_SETTINGS_FLAG0_WRITE (1 << 6)
#define PXX2_TX_SETTINGS_FLAG1_EXTERNAL_ANTENNA (1 << 3)
@ -81,7 +83,7 @@ enum PXX2ModuleModelID {
PXX2_MODULE_ISRM_S_X10E,
PXX2_MODULE_XJT_LITE,
PXX2_MODULE_ISRM_S_X10S,
PXX2_MODULE_ISRM_S_X9LITE,
PXX2_MODULE_ISRM_X9LITES,
};
static const char * const PXX2ModulesNames[] = {
@ -98,7 +100,7 @@ static const char * const PXX2ModulesNames[] = {
"ISRM-S-X10E",
"XJT Lite",
"ISRM-S-X10S",
"ISRM-S-X9Lite"
"ISRM-X9LiteS"
};
inline const char * getPXX2ModuleName(uint8_t modelId)
@ -140,7 +142,7 @@ static const uint8_t PXX2ModuleOptions[] = {
0b00000101, // ISRM-S-X10E
0b00000001, // XJT_LITE
0b00000101, // ISRM-S-X10S
0b00000101, // ISRM-S-X9LITE
0b00000100, // ISRM-X9LITES
};
inline uint8_t getPXX2ModuleOptions(uint8_t modelId)
@ -189,6 +191,9 @@ static const char * const PXX2ReceiversNames[] = {
"R9-MINI-OTA", // this one has OTA (different bootloader)
"R9-MM-OTA", // this one has OTA (different bootloader)
"R9-SLIM+-OTA", // this one has OTA (different bootloader)
"Archer-X", // this one has OTA (internal module)
"R9MX", // this one has OTA
"R9SX", // this one has OTA
};
inline const char * getPXX2ReceiverName(uint8_t modelId)
@ -239,6 +244,9 @@ static const uint8_t PXX2ReceiverOptions[] = {
0b11111111, // R9-MINI+OTA
0b11111111, // R9-MM+OTA
0b11111111, // R9-SLIM+OTA
0b11111111, // ARCHER-X
0b11111111, // R9MX
0b11111111, // R9SX
};
inline uint8_t getPXX2ReceiverOptions(uint8_t modelId)
@ -256,6 +264,8 @@ inline bool isPXX2ReceiverOptionAvailable(uint8_t modelId, uint8_t option)
enum ReceiverCapabilities {
RECEIVER_CAPABILITY_FPORT,
RECEIVER_CAPABILITY_TELEMETRY_25MW,
RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6,
RECEIVER_CAPABILITY_COUNT
};

View file

@ -187,6 +187,7 @@ enum FrSkyDataState {
#define DIY_STREAM_FIRST_ID 0x5000
#define DIY_STREAM_LAST_ID 0x50FF
#define FACT_TEST_ID 0xF000
#define FRAME_LOSS_RATE_ID 0xF010
#define RSSI_ID 0xF101
#define ADC1_ID 0xF102
#define ADC2_ID 0xF103

View file

@ -86,6 +86,12 @@ void processReceiverSettingsFrame(uint8_t module, const uint8_t * frame)
if (frame[4] & PXX2_RX_SETTINGS_FLAG1_TELEMETRY_DISABLED)
destination->telemetryDisabled = 1;
if (frame[4] & PXX2_RX_SETTINGS_FLAG1_TELEMETRY_25MW)
destination->telemetry25mw = 1;
if (frame[4] & PXX2_RX_SETTINGS_FLAG1_ENABLE_PWM_CH5_CH6)
destination->enablePwmCh5Ch6 = 1;
uint8_t outputsCount = min<uint8_t>(16, frame[0] - 4);
destination->outputsCount = outputsCount;
for (uint8_t pin = 0; pin < outputsCount; pin++) {

View file

@ -30,6 +30,7 @@ struct FrSkySportSensor {
};
const FrSkySportSensor sportSensors[] = {
{ FRAME_LOSS_RATE_ID, FRAME_LOSS_RATE_ID, 0, ZSTR_FLR, UNIT_PERCENT, 0 },
{ RSSI_ID, RSSI_ID, 0, ZSTR_RSSI, UNIT_DB, 0 },
#if defined(MULTIMODULE)
{ TX_RSSI_ID, TX_RSSI_ID, 0, ZSTR_TX_RSSI , UNIT_DB , 0 },

View file

@ -23,6 +23,9 @@
#include "frsky.h"
#include "crossfire.h"
#include "myeeprom.h"
#include "io/frsky_sport.h"
#if defined(MULTIMODULE)
#include "spektrum.h"
#include "flysky_ibus.h"

View file

@ -22,6 +22,7 @@
#define _TELEMETRY_HOLDERS_H_
#include <inttypes.h>
#include <string.h>
#include "../timers.h"
#define TELEMETRY_AVERAGE_COUNT 3 // we actually average one more reading!

View file

@ -428,6 +428,8 @@ const char STR_FIRMWARE_UPDATE_SUCCESS[] = TR_FIRMWARE_UPDATE_SUCCESS;
const char STR_WRITING[] = TR_WRITING;
const char STR_FLASH_EXTERNAL_DEVICE[] = TR_FLASH_EXTERNAL_DEVICE;
const char STR_FLASH_RECEIVER_OTA[] = TR_FLASH_RECEIVER_OTA;
const char STR_FLASH_RECEIVER_OTA_BY_EXTERNAL[] = TR_FLASH_RECEIVER_OTA_BY_EXTERNAL;
const char STR_FLASH_RECEIVER_OTA_BY_INTERNAL[] = TR_FLASH_RECEIVER_OTA_BY_INTERNAL;
const char STR_FLASH_BLUETOOTH_MODULE[] = TR_FLASH_BLUETOOTH_MODULE;
const char STR_FLASH_POWER_MANAGEMENT_UNIT[] = TR_FLASH_POWER_MANAGEMENT_UNIT;
const char STR_CONFIRM_FORMAT[] = TR_CONFIRM_FORMAT;

View file

@ -626,6 +626,8 @@ extern const char STR_VIEW_TEXT[];
extern const char STR_FLASH_BOOTLOADER[];
extern const char STR_FLASH_EXTERNAL_DEVICE[];
extern const char STR_FLASH_RECEIVER_OTA[];
extern const char STR_FLASH_RECEIVER_OTA_BY_EXTERNAL[];
extern const char STR_FLASH_RECEIVER_OTA_BY_INTERNAL[];
extern const char STR_FLASH_BLUETOOTH_MODULE[];
extern const char STR_FLASH_POWER_MANAGEMENT_UNIT[];
extern const char STR_CURRENT_VERSION[];

View file

@ -821,6 +821,8 @@
#define TR_FLASH_BOOTLOADER "Flash bootloaderu"
#define TR_FLASH_EXTERNAL_DEVICE TR("Flash S.Portem", "Flash S.Portem")
#define TR_FLASH_RECEIVER_OTA "Flash příjímače OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash modulu BT", "Flash modulu Bluetooth")
#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash řízení spotř.", "Flash jednotky řízení spotřeby")
#define TR_CURRENT_VERSION TR("Současná ver. ", "Současná verze: ")
@ -1165,6 +1167,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -823,6 +823,8 @@
#define TR_FLASH_BOOTLOADER TR("Flash bootloader","Flash bootloader") //
#define TR_FLASH_EXTERNAL_DEVICE TR("Flash ext. Gerät","Flash externes Gerät")
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetoothmodul")
#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit")
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
@ -1171,6 +1173,7 @@
#define TR_AUTH_FAILURE "Auth-failure"
// ----------------------------------------------------------------
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -822,6 +822,8 @@
#define TR_FLASH_BOOTLOADER "Flash bootloader"
#define TR_FLASH_EXTERNAL_DEVICE TR("Flash S.Port", "Flash S.Port device")
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
#define TR_CURRENT_VERSION TR("Curr Vers: ", "Current version: ")
@ -1169,6 +1171,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -842,6 +842,8 @@
#define TR_FLASH_BOOTLOADER "Flash bootloader"
#define TR_FLASH_EXTERNAL_DEVICE "Flash disp. externo"
#define TR_FLASH_RECEIVER_OTA "Flash RX OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash modulo BT", "Flash modulo bluetooth")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash unid. pwr mngt"
#define TR_CURRENT_VERSION TR("Vers. actual", "Version actual: ")
@ -1187,6 +1189,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltaje")
#define TR_AUTH_FAILURE "Fallo auth."
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -840,6 +840,8 @@
#define TR_FLASH_BOOTLOADER "Flash bootloader"
#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device"
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
@ -1178,6 +1180,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -842,6 +842,8 @@
#define TR_FLASH_BOOTLOADER "Flasher BootLoader"
#define TR_FLASH_EXTERNAL_DEVICE TR("Flasher S.Port", "Flasher S.Port externe")
#define TR_FLASH_RECEIVER_OTA "Flasher RX OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash module BT", "Flash module Bluetooth")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flasher pwr mngt unit"
#define TR_CURRENT_VERSION "Version courante :"
@ -1193,6 +1195,7 @@
#define TR_RTC_CHECK TR("Vérif. RTC", "Vérif. pile RTC")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -842,6 +842,8 @@
#define TR_FLASH_BOOTLOADER "Prog. bootloader"
#define TR_FLASH_EXTERNAL_DEVICE "Progr. dispositivo Esterno"
#define TR_FLASH_RECEIVER_OTA TR("Prog. RX OTA", INDENT "Prog. ricevente OTA")
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Prog. mod. BT", INDENT "Prog. modulo Bluetooth")
#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Prog. PMU", "Program. PMU")
#define TR_CURRENT_VERSION TR("Vers. currente ", "Versione corrente: ")
@ -1187,6 +1189,7 @@
#define TR_RTC_CHECK TR("Controllo RTC", "Controllo voltaggio RTC")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -828,6 +828,8 @@
#define TR_FLASH_BOOTLOADER "Flash bootloader"
#define TR_FLASH_EXTERNAL_DEVICE "Flash extern Apparaat"
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
@ -1179,6 +1181,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -841,6 +841,8 @@
#define TR_FLASH_BOOTLOADER "Flash bootloader"
#define TR_FLASH_EXTERNAL_DEVICE "Sflashuj Moduł Zewnętrzny"
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
@ -1186,6 +1188,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -831,6 +831,8 @@
#define TR_FLASH_BOOTLOADER "Flash bootloader"
#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device"
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
@ -1175,6 +1177,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"

View file

@ -841,6 +841,8 @@
#define TR_FLASH_BOOTLOADER "Skriv BootLoader"
#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device"
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
@ -1186,6 +1188,7 @@
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure"
#define ZSTR_FLR "FLR"
#define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW"
#define ZSTR_RAS "SWR"