Merge with latest 2.4
This commit is contained in:
@@ -552,10 +552,6 @@ enum SwitchSources {
|
||||
SWSRC_TrimT6Up,
|
||||
#endif
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
SWSRC_REa,
|
||||
#endif
|
||||
|
||||
SWSRC_FIRST_LOGICAL_SWITCH SKIP,
|
||||
SWSRC_SW1 = SWSRC_FIRST_LOGICAL_SWITCH,
|
||||
SWSRC_SW2,
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#define HEADER_LINE_COLUMNS 0,
|
||||
#endif
|
||||
|
||||
#define COLUMN_X 0
|
||||
#define drawFieldLabel(x, y, str) lcdDrawTextAlignedLeft(y, str)
|
||||
|
||||
#define NUM_BODY_LINES (LCD_LINES-1)
|
||||
|
||||
@@ -83,7 +83,7 @@ void onModelSelectMenu(const char * result)
|
||||
void menuModelSelect(event_t event)
|
||||
{
|
||||
event_t _event_ = event;
|
||||
if ((s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT) || IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event)) {
|
||||
if ((s_copyMode && IS_KEY_EVT(event, KEY_EXIT)) || event == EVT_KEY_BREAK(KEY_EXIT) || IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event)) {
|
||||
_event_ = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1677,7 +1677,7 @@ void menuModelSetup(event_t event)
|
||||
#endif
|
||||
#if defined(AFHDS3)
|
||||
else if (isModuleAFHDS3(EXTERNAL_MODULE)) {
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_RFPOWER);
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_RF_POWER);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_AFHDS3_POWERS, g_model.moduleData[EXTERNAL_MODULE].afhds3.runPower, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].afhds3.runPower, afhds3::RUN_POWER::RUN_POWER_FIRST, afhds3::RUN_POWER::RUN_POWER_LAST);
|
||||
|
||||
@@ -276,10 +276,12 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||
}
|
||||
#endif // OVERRIDE_CHANNEL_FUNCTION
|
||||
else if (func >= FUNC_SET_FAILSAFE && func <= FUNC_BIND) {
|
||||
#if defined(DANGEROUS_MODULE_FUNCTIONS)
|
||||
else if (func >= FUNC_RANGECHECK && func <= FUNC_BIND) {
|
||||
val_max = NUM_MODULES-1;
|
||||
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr);
|
||||
}
|
||||
#endif
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr);
|
||||
|
||||
@@ -44,7 +44,6 @@ struct {
|
||||
#define PHASE_FLAGS 0
|
||||
#define VBATT_X (6*FW-1)
|
||||
#define VBATT_Y (2*FH)
|
||||
#define VBATTUNIT_X (VBATT_X-1)
|
||||
#define VBATTUNIT_Y (3*FH)
|
||||
#define REBOOT_X (20*FW-3)
|
||||
#define BAR_HEIGHT (BOX_WIDTH-1l) // don't remove the l here to force 16bits maths on 9X
|
||||
@@ -260,8 +259,13 @@ void displayBattVoltage()
|
||||
count = (get_tmr10ms() & 127u) * count / 128;
|
||||
}
|
||||
#endif
|
||||
for (uint8_t i = 0; i < count; i += 2)
|
||||
for (uint8_t i = 0; i < count; i += 2) {
|
||||
#if defined(USB_CHARGER)
|
||||
if ((i >= count - 2) && usbChargerLed() && BLINK_ON_PHASE) // Blink last segment on charge
|
||||
continue;
|
||||
#endif
|
||||
lcdDrawSolidVerticalLine(VBATT_X - 24 + i, VBATT_Y + 10, 3);
|
||||
}
|
||||
if (!IS_TXBATT_WARNING() || BLINK_ON_PHASE)
|
||||
lcdDrawSolidFilledRect(VBATT_X - 26, VBATT_Y, 24, 15);
|
||||
#else
|
||||
|
||||
@@ -1393,7 +1393,7 @@ void menuModelSetup(event_t event)
|
||||
#endif
|
||||
#if defined(AFHDS3)
|
||||
else if (isModuleAFHDS3(EXTERNAL_MODULE)) {
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_RFPOWER);
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_RF_POWER);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_AFHDS3_POWERS, g_model.moduleData[EXTERNAL_MODULE].afhds3.runPower, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].afhds3.runPower, afhds3::RUN_POWER::RUN_POWER_FIRST, afhds3::RUN_POWER::RUN_POWER_LAST);
|
||||
|
||||
@@ -268,10 +268,12 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||
}
|
||||
#endif
|
||||
else if (func >= FUNC_SET_FAILSAFE && func <= FUNC_BIND) {
|
||||
#if defined(DANGEROUS_MODULE_FUNCTIONS)
|
||||
else if (func >= FUNC_RANGECHECK && func <= FUNC_BIND) {
|
||||
val_max = NUM_MODULES-1;
|
||||
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr);
|
||||
}
|
||||
#endif
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR, attr);
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#define MODELNAME_Y (11)
|
||||
#define VBATT_X (MODELNAME_X+26)
|
||||
#define VBATT_Y (FH+3)
|
||||
#define VBATTUNIT_X (VBATT_X-2)
|
||||
#define VBATTUNIT_Y VBATT_Y
|
||||
#define BITMAP_X ((LCD_W-64)/2)
|
||||
#define BITMAP_Y (LCD_H/2)
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) OpenTX
|
||||
*
|
||||
* Based on code named
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
#include "sliders.h"
|
||||
#include "trims.h"
|
||||
|
||||
#define HAS_TOPBAR() (persistentData->options[0].value.boolValue == true)
|
||||
#define HAS_FM() (persistentData->options[1].value.boolValue == true)
|
||||
#define HAS_SLIDERS() (persistentData->options[2].value.boolValue == true)
|
||||
#define HAS_TRIMS() (persistentData->options[3].value.boolValue == true)
|
||||
#define IS_MIRRORED() (persistentData->options[4].value.boolValue == true)
|
||||
|
||||
const uint8_t LBM_LAYOUT_4P2[] = {
|
||||
#include "mask_layout4+2.lbm"
|
||||
};
|
||||
|
||||
const ZoneOption OPTIONS_LAYOUT_4P2[] = {
|
||||
{ STR_TOP_BAR, ZoneOption::Bool },
|
||||
{ STR_FLIGHT_MODE, ZoneOption::Bool },
|
||||
{ STR_SLIDERS, ZoneOption::Bool },
|
||||
{ STR_TRIMS, ZoneOption::Bool },
|
||||
{ STR_MIRROR, ZoneOption::Bool },
|
||||
{ nullptr, ZoneOption::Bool }
|
||||
};
|
||||
|
||||
class Layout4P2: public Layout
|
||||
{
|
||||
public:
|
||||
Layout4P2(const LayoutFactory * factory, Layout::PersistentData * persistentData):
|
||||
Layout(factory, persistentData)
|
||||
{
|
||||
decorate();
|
||||
}
|
||||
|
||||
void create() override
|
||||
{
|
||||
Layout::create();
|
||||
persistentData->options[0].value.boolValue = true;
|
||||
persistentData->options[1].value.boolValue = true;
|
||||
persistentData->options[2].value.boolValue = true;
|
||||
persistentData->options[3].value.boolValue = true;
|
||||
persistentData->options[4].value.boolValue = false;
|
||||
persistentData->options[5].value.boolValue = false;
|
||||
decorate();
|
||||
}
|
||||
|
||||
void decorate()
|
||||
{
|
||||
Layout::decorate(HAS_TOPBAR(), HAS_SLIDERS(), HAS_TRIMS(), HAS_FM());
|
||||
}
|
||||
|
||||
unsigned int getZonesCount() const override
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
|
||||
rect_t getZone(unsigned int index) const override
|
||||
{
|
||||
coord_t areaw = LCD_W - (HAS_SLIDERS() ? 2 * TRIM_SQUARE_SIZE : 0) - (HAS_TRIMS() ? 2 * TRIM_SQUARE_SIZE : 0) - 10;
|
||||
coord_t areah = LCD_H - (HAS_TOPBAR() ? TOPBAR_HEIGHT : 0) - (HAS_SLIDERS() ? TRIM_SQUARE_SIZE : 0) - (HAS_TRIMS() ? TRIM_SQUARE_SIZE : 0) - 10;
|
||||
areah = 4 * (areah % 4);
|
||||
|
||||
return {
|
||||
IS_MIRRORED() ? ((index >= 4) ? (LCD_W - areaw) / 2 : 240) : ((index >= 4) ? 240 : (LCD_W - areaw) / 2),
|
||||
static_cast<coord_t>((index >= 4) ? (HAS_TOPBAR() ? TOPBAR_HEIGHT + 1 : 1) + (index == 5 ? areah / 4 : 0) : (HAS_TOPBAR() ? TOPBAR_HEIGHT + 1 : 1) + (index % 4) * (areah / 4)),
|
||||
areaw / 2,
|
||||
(index >= 4) ? (areah / 2) : (areah / 4)
|
||||
};
|
||||
}
|
||||
|
||||
void checkEvents() override
|
||||
{
|
||||
Layout::checkEvents();
|
||||
uint8_t newValue = persistentData->options[4].value.boolValue << 4 | persistentData->options[3].value.boolValue << 3 | persistentData->options[2].value.boolValue << 2
|
||||
| persistentData->options[1].value.boolValue << 1 | persistentData->options[0].value.boolValue;
|
||||
if (value != newValue) {
|
||||
value = newValue;
|
||||
// TODO call this from the Layout config window
|
||||
this->clear();
|
||||
decorate();
|
||||
}
|
||||
}
|
||||
protected:
|
||||
uint8_t value = 0;
|
||||
};
|
||||
|
||||
BaseLayoutFactory<Layout4P2> layout4P2("Layout4P2", "4 + 2", LBM_LAYOUT_4P2, OPTIONS_LAYOUT_4P2);
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -614,6 +614,7 @@ bool menuScreenSetup(int index, event_t event)
|
||||
ZoneOptionValue * value = currentScreen->getOptionValue(o);
|
||||
if (editZoneOption(y, option, value, attr, EE_MODEL, event)) {
|
||||
currentScreen->update();
|
||||
loadCustomScreens();
|
||||
}
|
||||
}
|
||||
else if (menuPageCount > 3 && o == optionsCount) {
|
||||
|
||||
@@ -64,6 +64,11 @@ void TopBar::paint(BitmapBuffer * dc)
|
||||
dc->drawBitmapPattern(LCD_W - 98, 8, LBM_TOPMENU_USB, MENU_COLOR);
|
||||
}
|
||||
|
||||
// Logs
|
||||
if (isFunctionActive(FUNCTION_LOGS) && !usbPlugged() && BLINK_ON_PHASE) {
|
||||
dc->drawBitmapPattern(LCD_W - 98, 6, LBM_DOT, MENU_COLOR);
|
||||
}
|
||||
|
||||
// RSSI
|
||||
const uint8_t rssiBarsValue[] = {30, 40, 50, 60, 80};
|
||||
const uint8_t rssiBarsHeight[] = {5, 10, 15, 21, 31};
|
||||
|
||||
@@ -128,7 +128,7 @@ bool menuAboutView(event_t event)
|
||||
break;
|
||||
|
||||
case ABOUT_HARDWARE:
|
||||
lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, "FrSky", INVERS);
|
||||
lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_HARDWARE_1, INVERS);
|
||||
lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_HARDWARE_2);
|
||||
lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_HARDWARE_3);
|
||||
break;
|
||||
|
||||
@@ -25,6 +25,8 @@ void menuGhostModuleConfig(event_t event)
|
||||
switch (event) {
|
||||
case EVT_ENTRY:
|
||||
memclear(&reusableBuffer.ghostMenu, sizeof(reusableBuffer.ghostMenu));
|
||||
strAppend((char *) &reusableBuffer.ghostMenu.line[1].menuText, STR_WAITING_FOR_MODULE, 0);
|
||||
reusableBuffer.ghostMenu.line[1].lineFlags = GHST_LINE_FLAGS_VALUE_EDIT;
|
||||
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_NONE;
|
||||
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_OPEN;
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
|
||||
@@ -40,6 +42,7 @@ void menuGhostModuleConfig(event_t event)
|
||||
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYUP;
|
||||
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE;
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
|
||||
audioKeyPress();
|
||||
break;
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
@@ -52,6 +55,7 @@ void menuGhostModuleConfig(event_t event)
|
||||
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYDOWN;
|
||||
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE;
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
|
||||
audioKeyPress();
|
||||
break;
|
||||
|
||||
|
||||
@@ -59,12 +63,14 @@ void menuGhostModuleConfig(event_t event)
|
||||
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYPRESS;
|
||||
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE;
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
|
||||
audioKeyPress();
|
||||
break;
|
||||
|
||||
case EVT_KEY_BREAK(KEY_EXIT):
|
||||
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYLEFT;
|
||||
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE;
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
|
||||
audioKeyPress();
|
||||
break;
|
||||
|
||||
case EVT_KEY_LONG(KEY_EXIT):
|
||||
@@ -78,7 +84,12 @@ void menuGhostModuleConfig(event_t event)
|
||||
break;
|
||||
}
|
||||
|
||||
if (reusableBuffer.ghostMenu.menuAction == GHST_MENU_CTRL_CLOSE) {
|
||||
if (reusableBuffer.ghostMenu.menuStatus == GHST_MENU_STATUS_UNOPENED) { // Handles situation where module is plugged after tools start
|
||||
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_NONE;
|
||||
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_OPEN;
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
|
||||
}
|
||||
else if (reusableBuffer.ghostMenu.menuStatus == GHST_MENU_STATUS_CLOSING) {
|
||||
popMenu();
|
||||
}
|
||||
|
||||
@@ -104,6 +115,8 @@ void menuGhostModuleConfig(event_t event)
|
||||
else {
|
||||
if (reusableBuffer.ghostMenu.line[line].lineFlags & GHST_LINE_FLAGS_LABEL_SELECT)
|
||||
flags = INVERS;
|
||||
if (reusableBuffer.ghostMenu.line[line].lineFlags & GHST_LINE_FLAGS_VALUE_EDIT)
|
||||
flags |= BLINK;
|
||||
lcdDrawText(xOffset, yOffset + line * FH, reusableBuffer.ghostMenu.line[line].menuText, flags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,14 +227,19 @@ void onSdManagerMenu(const char * result)
|
||||
#if defined(INTERNAL_MODULE_MULTI)
|
||||
else if (result == STR_FLASH_INTERNAL_MULTI) {
|
||||
getSelectionFullPath(lfn);
|
||||
MultiDeviceFirmwareUpdate device(INTERNAL_MODULE);
|
||||
MultiDeviceFirmwareUpdate device(INTERNAL_MODULE, MULTI_TYPE_MULTIMODULE);
|
||||
device.flashFirmware(lfn, drawProgressScreen);
|
||||
}
|
||||
#endif
|
||||
else if (result == STR_FLASH_EXTERNAL_MULTI) {
|
||||
getSelectionFullPath(lfn);
|
||||
MultiDeviceFirmwareUpdate device(EXTERNAL_MODULE);
|
||||
device.flashFirmware(lfn, drawProgressScreen);
|
||||
device.flashFirmware(lfn, MULTI_TYPE_MULTIMODULE, drawProgressScreen);
|
||||
}
|
||||
else if (result == STR_FLASH_EXTERNAL_ELRS) {
|
||||
getSelectionFullPath(lfn);
|
||||
MultiDeviceFirmwareUpdate device(EXTERNAL_MODULE);
|
||||
device.flashFirmware(lfn, MULTI_TYPE_ELRS, drawProgressScreen);
|
||||
}
|
||||
#endif
|
||||
#if defined(BLUETOOTH)
|
||||
@@ -404,6 +409,12 @@ void menuRadioSdManager(event_t _event)
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_EXTERNAL_MULTI);
|
||||
}
|
||||
}
|
||||
|
||||
if (!READ_ONLY() && !strcasecmp(ext, ELRS_FIRMWARE_EXT)) {
|
||||
TCHAR lfn[FF_MAX_LFN + 1];
|
||||
getSelectionFullPath(lfn);
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_EXTERNAL_ELRS);
|
||||
}
|
||||
#endif
|
||||
#if defined(PCBTARANIS)
|
||||
if (!READ_ONLY() && !strcasecmp(ext, FIRMWARE_EXT)) {
|
||||
|
||||
@@ -133,6 +133,7 @@ void menuRadioTools(event_t event)
|
||||
if (isModuleGhost(EXTERNAL_MODULE))
|
||||
addRadioModuleTool(index++, "Ghost Menu", menuGhostModuleConfig, EXTERNAL_MODULE);
|
||||
#endif
|
||||
|
||||
if (index == 0) {
|
||||
lcdDrawCenteredText(LCD_H/2, STR_NO_TOOLS);
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ void menuRadioVersion(event_t event)
|
||||
|
||||
coord_t y = MENU_HEADER_HEIGHT + 2;
|
||||
lcdDrawText(FW, y, vers_stamp, SMLSIZE);
|
||||
y += 4 * (FH - 1);
|
||||
y += 5 * (FH - 1);
|
||||
|
||||
#if defined(COPROCESSOR)
|
||||
lcdDrawText(FW, y, "COPR\037\033: ", SMLSIZE);
|
||||
|
||||
@@ -35,8 +35,8 @@ enum NavigationDirection {
|
||||
#define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_LONG(KEY_LEFT) && IS_SHIFT_PRESSED())
|
||||
#define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_LONG(KEY_RIGHT) && IS_SHIFT_PRESSED())
|
||||
#elif defined(NAVIGATION_X7_TX12)
|
||||
#define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_UP))
|
||||
#define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_DOWN))
|
||||
#define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEUP))
|
||||
#define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEDN))
|
||||
#elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D)
|
||||
#define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_LONG(KEY_PAGE))
|
||||
#define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_BREAK(KEY_PAGE))
|
||||
|
||||
@@ -344,12 +344,6 @@ bool isSwitchAvailable(int swtch, SwitchContext context)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBSKY9X) && defined(REVX)
|
||||
if (swtch == SWSRC_REa) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (swtch >= SWSRC_FIRST_LOGICAL_SWITCH && swtch <= SWSRC_LAST_LOGICAL_SWITCH) {
|
||||
if (context == GeneralCustomFunctionsContext) {
|
||||
return false;
|
||||
@@ -561,7 +555,7 @@ bool isPxx2IsrmChannelsCountAllowed(int channels)
|
||||
bool isTrainerUsingModuleBay()
|
||||
{
|
||||
#if defined(PCBTARANIS)
|
||||
if (TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE <= g_model.trainerData.mode && g_model.trainerData.mode <= TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
|
||||
if (TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE <= g_model.trainerData.mode && g_model.trainerData.mode <= TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
|
||||
return true;
|
||||
#endif
|
||||
return false;
|
||||
@@ -957,8 +951,9 @@ const char STR_SUBTYPE_ESky[] = "\003""Std""ET4";
|
||||
const char STR_SUBTYPE_MT99[] = "\006""MT99\0 ""H7\0 ""YZ\0 ""LS\0 ""FY805";
|
||||
const char STR_SUBTYPE_MJXQ[] = "\007""WLH08\0 ""X600\0 ""X800\0 ""H26D\0 ""E010\0 ""H26WH\0 ""Phoenix";
|
||||
const char STR_SUBTYPE_FY326[] = "\005""Std\0 ""FY319";
|
||||
const char STR_SUBTYPE_FUTABA[] = "\005""SFHSS";
|
||||
const char STR_SUBTYPE_HONTAI[] = "\007""Std\0 ""JJRC X1""X5C1\0 ""FQ_951";
|
||||
const char STR_SUBTYPE_AFHDS2A[] = "\010""PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS";
|
||||
const char STR_SUBTYPE_AFHDS2A[] = "\010""PWM,IBUS""PPM,IBUS""PWM,SBUS""PPM,SBUS""PWM,IB16""PPM,IB16";
|
||||
const char STR_SUBTYPE_Q2X2[] = "\004""Q222""Q242""Q282";
|
||||
const char STR_SUBTYPE_WK2x01[] = "\006""WK2801""WK2401""W6_5_1""W6_6_1""W6_HeL""W6_HeI";
|
||||
const char STR_SUBTYPE_Q303[] = "\006""Std\0 ""CX35\0 ""CX10D\0""CX10WD";
|
||||
@@ -967,7 +962,7 @@ const char STR_SUBTYPE_ESKY150[] = "\003""4ch""7ch";
|
||||
const char STR_SUBTYPE_H83D[] = "\007""Std\0 ""H20H\0 ""H20Mini""H30Mini";
|
||||
const char STR_SUBTYPE_CORONA[] = "\005""V1\0 ""V2\0 ""FD V3";
|
||||
const char STR_SUBTYPE_HITEC[] = "\007""Optima\0""Opt Hub""Minima\0";
|
||||
const char STR_SUBTYPE_WFLY[] = "\006""WFR0xS";
|
||||
const char STR_SUBTYPE_WFLY[] = "\005""WFR0x";
|
||||
const char STR_SUBTYPE_BUGS_MINI[] = "\006""Std\0 ""Bugs3H";
|
||||
const char STR_SUBTYPE_TRAXXAS[] = "\004""6519";
|
||||
const char STR_SUBTYPE_E01X[] = "\005""E012\0""E015\0""E016H";
|
||||
@@ -977,18 +972,24 @@ const char STR_SUBTYPE_V761[] = "\003""3ch""4ch";
|
||||
const char STR_SUBTYPE_REDPINE[] = "\004""Fast""Slow";
|
||||
const char STR_SUBTYPE_POTENSIC[] = "\003""A20";
|
||||
const char STR_SUBTYPE_ZSX[] = "\007""280JJRC";
|
||||
const char STR_SUBTYPE_FLYZONE[] = "\005""FZ410";
|
||||
const char STR_SUBTYPE_HEIGHT[] = "\003""5ch""8ch";
|
||||
const char STR_SUBTYPE_FRSKYX_RX[] = "\007""RX\0 ""CloneTX";
|
||||
const char STR_SUBTYPE_HOTT[] = "\007""Sync\0 ""No_Sync";
|
||||
const char STR_SUBTYPE_FX816[] = "\003""P38";
|
||||
const char STR_SUBTYPE_PELIKAN[] = "\004""Pro\0""Lite";
|
||||
const char STR_SUBTYPE_XK[] = "\004""X450""X420";
|
||||
const char STR_SUBTYPE_XN297DUMP[] = "\004""250K""1M\0 ""2M\0 ""AUTO""NRF\0";
|
||||
const char STR_SUBTYPE_FRSKYX2[] = "\011""D16\0 ""D16 8ch\0 ""LBT(EU)\0 ""LBT 8ch\0 ""D16Cloned";
|
||||
const char STR_SUBTYPE_FRSKYR9[] = "\007""915MHz\0""868MHz\0""915 8ch""868 8ch";
|
||||
const char STR_SUBTYPE_FRSKYX2[] = "\010""D16\0 ""D16 8ch\0""LBT(EU)\0""LBT 8ch\0""Cloned\0 ""Clone8ch";
|
||||
const char STR_SUBTYPE_FRSKYR9[] = "\007""915MHz\0""868MHz\0""915 8ch""868 8ch""FCC\0 ""---\0 ""FCC 8ch";
|
||||
const char STR_SUBTYPE_PROPEL[] = "\004""74-Z";
|
||||
const char STR_SUBTYPE_FRSKYL[] = "\010""LR12\0 ""LR12 6ch";
|
||||
const char STR_SUBTYPE_ESKY150V2[] = "\006""150 V2";
|
||||
const char STR_SUBTYPE_JJRC345[] = "\007""Std\0 ""SkyTmbr";
|
||||
const char STR_SUBTYPE_KYOSHO[] = "\004""FHSS""Hype";
|
||||
const char STR_SUBTYPE_RLINK[] = "\007""Surface""Air\0 ""DumboRC";
|
||||
const char STR_SUBTYPE_ELRS[] = "\007""N/A WIP";
|
||||
const char STR_SUBTYPE_REALACC[] = "\003""R11";
|
||||
const char STR_SUBTYPE_WFLY2[] = "\005""RF20x";
|
||||
|
||||
const char* mm_options_strings::options[] = {
|
||||
nullptr,
|
||||
@@ -1023,11 +1024,11 @@ const mm_protocol_definition multi_protocols[] = {
|
||||
{MODULE_SUBTYPE_MULTI_MT99XX, 4, false, false, STR_SUBTYPE_MT99, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_MJXQ, 6, false, false, STR_SUBTYPE_MJXQ, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FY326, 1, false, false, STR_SUBTYPE_FY326, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_SFHSS, 0, true, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FUTABA, 0, true, true, STR_SUBTYPE_FUTABA, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_J6PRO, 0, false, true, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HONTAI, 3, false, false, STR_SUBTYPE_HONTAI, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_OLRS, 0, false, false, NO_SUBTYPE, STR_RF_POWER},
|
||||
{MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 3, true, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
||||
{MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 5, true, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
||||
{MODULE_SUBTYPE_MULTI_Q2X2, 2, false, false, STR_SUBTYPE_Q2X2, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_WK_2X01, 5, false, true, STR_SUBTYPE_WK2x01, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_Q303, 3, false, false, STR_SUBTYPE_Q303, nullptr},
|
||||
@@ -1047,20 +1048,28 @@ const mm_protocol_definition multi_protocols[] = {
|
||||
{MODULE_SUBTYPE_MULTI_REDPINE, 1, false, false, STR_SUBTYPE_REDPINE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_POTENSIC, 0, false, false, STR_SUBTYPE_POTENSIC, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_ZSX, 0, false, false, STR_SUBTYPE_ZSX, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FLYZONE, 0, false, false, STR_SUBTYPE_FLYZONE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HEIGHT, 1, false, false, STR_SUBTYPE_HEIGHT, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX_RX, 1, false, false, STR_SUBTYPE_FRSKYX_RX, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_HOTT, 1, true, false, STR_SUBTYPE_HOTT, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FX816, 0, false, false, STR_SUBTYPE_FX816, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_PELIKAN, 1, false, false, STR_SUBTYPE_PELIKAN, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_PELIKAN, 1, false, true, STR_SUBTYPE_PELIKAN, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_XK, 1, false, false, STR_SUBTYPE_XK, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_XN297DUMP, 4, false, false, STR_SUBTYPE_XN297DUMP, STR_MULTI_RFCHAN},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX2, 4, true, false, STR_SUBTYPE_FRSKYX2, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKY_R9, 3, true, false, STR_SUBTYPE_FRSKYR9, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX2, 5, true, false, STR_SUBTYPE_FRSKYX2, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKY_R9, 6, true, false, STR_SUBTYPE_FRSKYR9, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_PROPEL, 0, false, false, STR_SUBTYPE_PROPEL, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYL, 1, false, false, STR_SUBTYPE_FRSKYL, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_SKYARTEC, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_ESKY150V2, 0, false, true, STR_SUBTYPE_ESKY150V2, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_JJRC345, 1, false, false, STR_SUBTYPE_JJRC345, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_Q90C, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_KYOSHO, 1, false, true, STR_SUBTYPE_KYOSHO, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_RLINK, 2, false, false, STR_SUBTYPE_RLINK, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_ELRS, 0, false, false, STR_SUBTYPE_ELRS, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_REALACC, 0, false, false, STR_SUBTYPE_REALACC, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_OMP, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_WFLY2, 0, false, false, STR_SUBTYPE_WFLY2, STR_MULTI_OPTION},
|
||||
{MODULE_SUBTYPE_MULTI_E016HV2, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{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)
|
||||
|
||||
@@ -248,10 +248,12 @@ inline bool MULTIMODULE_HAS_SUBTYPE(uint8_t moduleIdx)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (g_model.moduleData[moduleIdx].getMultiProtocol() > MODULE_SUBTYPE_MULTI_LAST)
|
||||
if (g_model.moduleData[moduleIdx].getMultiProtocol() > MODULE_SUBTYPE_MULTI_LAST) {
|
||||
return true;
|
||||
else
|
||||
return getMultiProtocolDefinition(g_model.moduleData[moduleIdx].getMultiProtocol())->maxSubtype > 0;
|
||||
}
|
||||
else {
|
||||
return getMultiProtocolDefinition(g_model.moduleData[moduleIdx].getMultiProtocol())->subTypeString != nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,9 +305,9 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx)
|
||||
#endif
|
||||
|
||||
#if defined(AFHDS3)
|
||||
#define AFHDS3_PROTOCOL_ROW(moduleIdx) isModuleAFHDS3(moduleIdx) ? 0 : HIDDEN_ROW,
|
||||
#define AFHDS3_PROTOCOL_ROW(moduleIdx) isModuleAFHDS3(moduleIdx) ? uint8_t(0) : HIDDEN_ROW,
|
||||
#define AFHDS3_MODE_ROWS(moduleIdx) isModuleAFHDS3(moduleIdx) ? TITLE_ROW : HIDDEN_ROW, isModuleAFHDS3(moduleIdx) ? TITLE_ROW : HIDDEN_ROW, isModuleAFHDS3(moduleIdx) ? TITLE_ROW : HIDDEN_ROW,
|
||||
#define AFHDS3_MODULE_ROWS(moduleIdx) isModuleAFHDS3(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, isModuleAFHDS3(moduleIdx) ? (uint8_t) TITLE_ROW : HIDDEN_ROW,
|
||||
#define AFHDS3_MODULE_ROWS(moduleIdx) isModuleAFHDS3(moduleIdx) ? uint8_t(0) : HIDDEN_ROW, isModuleAFHDS3(moduleIdx) ? TITLE_ROW : HIDDEN_ROW,
|
||||
#else
|
||||
#define AFHDS3_PROTOCOL_ROW(moduleIdx)
|
||||
#define AFHDS3_MODE_ROWS(moduleIdx)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(DISABLE_MULTI_UPDATE)
|
||||
|
||||
#include "opentx.h"
|
||||
#include "multi_firmware_update.h"
|
||||
#include "stk500.h"
|
||||
@@ -35,23 +36,22 @@ class MultiFirmwareUpdateDriver
|
||||
protected:
|
||||
virtual void moduleOn() const = 0;
|
||||
virtual void init(bool inverted) const = 0;
|
||||
virtual bool getByte(uint8_t& byte) const = 0;
|
||||
virtual bool getByte(uint8_t & byte) const = 0;
|
||||
virtual void sendByte(uint8_t byte) const = 0;
|
||||
virtual void clear() const = 0;
|
||||
virtual void deinit(bool inverted) const {}
|
||||
|
||||
private:
|
||||
bool getRxByte(uint8_t& byte) const;
|
||||
bool getRxByte(uint8_t & byte) const;
|
||||
bool checkRxByte(uint8_t byte) const;
|
||||
const char * waitForInitialSync(bool& inverted) const;
|
||||
const char * getDeviceSignature(uint8_t* signature) const;
|
||||
const char * getDeviceSignature(uint8_t * signature) const;
|
||||
const char * loadAddress(uint32_t offset) const;
|
||||
const char * progPage(uint8_t* buffer, uint16_t size) const;
|
||||
const char * progPage(uint8_t * buffer, uint16_t size) const;
|
||||
void leaveProgMode(bool inverted) const;
|
||||
};
|
||||
|
||||
#if defined(INTERNAL_MODULE_MULTI)
|
||||
|
||||
class MultiInternalUpdateDriver: public MultiFirmwareUpdateDriver
|
||||
{
|
||||
public:
|
||||
@@ -68,7 +68,7 @@ class MultiInternalUpdateDriver: public MultiFirmwareUpdateDriver
|
||||
intmoduleSerialStart(57600, true, USART_Parity_No, USART_StopBits_1, USART_WordLength_8b);
|
||||
}
|
||||
|
||||
bool getByte(uint8_t& byte) const override
|
||||
bool getByte(uint8_t & byte) const override
|
||||
{
|
||||
return intmoduleFifo.pop(byte);
|
||||
}
|
||||
@@ -90,7 +90,6 @@ class MultiInternalUpdateDriver: public MultiFirmwareUpdateDriver
|
||||
};
|
||||
|
||||
static const MultiInternalUpdateDriver multiInternalUpdateDriver;
|
||||
|
||||
#endif
|
||||
|
||||
class MultiExternalUpdateDriver: public MultiFirmwareUpdateDriver
|
||||
@@ -122,7 +121,7 @@ class MultiExternalUpdateDriver: public MultiFirmwareUpdateDriver
|
||||
telemetryPortInit(57600, TELEMETRY_SERIAL_DEFAULT);
|
||||
}
|
||||
|
||||
bool getByte(uint8_t& byte) const override
|
||||
bool getByte(uint8_t & byte) const override
|
||||
{
|
||||
return telemetryGetByte(&byte);
|
||||
}
|
||||
@@ -150,12 +149,53 @@ class MultiExternalUpdateDriver: public MultiFirmwareUpdateDriver
|
||||
|
||||
static const MultiExternalUpdateDriver multiExternalUpdateDriver;
|
||||
|
||||
bool MultiFirmwareUpdateDriver::getRxByte(uint8_t& byte) const
|
||||
class MultiExtSportUpdateDriver: public MultiFirmwareUpdateDriver
|
||||
{
|
||||
public:
|
||||
MultiExtSportUpdateDriver(): MultiFirmwareUpdateDriver() {}
|
||||
|
||||
protected:
|
||||
void moduleOn() const override
|
||||
{
|
||||
EXTERNAL_MODULE_ON();
|
||||
}
|
||||
|
||||
void init(bool inverted) const override
|
||||
{
|
||||
telemetryPortInit(57600, TELEMETRY_SERIAL_DEFAULT);
|
||||
}
|
||||
|
||||
bool getByte(uint8_t & byte) const override
|
||||
{
|
||||
return telemetryGetByte(&byte);
|
||||
}
|
||||
|
||||
void sendByte(uint8_t byte) const override
|
||||
{
|
||||
sportSendByte(byte);
|
||||
telemetryPortSetDirectionInput();
|
||||
}
|
||||
|
||||
void clear() const override
|
||||
{
|
||||
telemetryClearFifo();
|
||||
}
|
||||
|
||||
void deinit(bool inverted) const override
|
||||
{
|
||||
telemetryPortInit(0, 0);
|
||||
clear();
|
||||
}
|
||||
};
|
||||
|
||||
static const MultiExtSportUpdateDriver multiExtSportUpdateDriver;
|
||||
|
||||
bool MultiFirmwareUpdateDriver::getRxByte(uint8_t & byte) const
|
||||
{
|
||||
uint16_t time;
|
||||
|
||||
time = getTmr2MHz() ;
|
||||
while ( (uint16_t) (getTmr2MHz() - time) < 25000 ) { // 12.5mS
|
||||
time = getTmr2MHz();
|
||||
while ((uint16_t) (getTmr2MHz() - time) < 25000) { // 12.5mS
|
||||
|
||||
if (getByte(byte)) {
|
||||
#if defined(DEBUG_EXT_MODULE_FLASH)
|
||||
@@ -175,11 +215,15 @@ bool MultiFirmwareUpdateDriver::checkRxByte(uint8_t byte) const
|
||||
return getRxByte(rxchar) ? rxchar == byte : false;
|
||||
}
|
||||
|
||||
const char * MultiFirmwareUpdateDriver::waitForInitialSync(bool& inverted) const
|
||||
const char * MultiFirmwareUpdateDriver::waitForInitialSync(bool & inverted) const
|
||||
{
|
||||
uint8_t byte;
|
||||
int retries = 200;
|
||||
|
||||
#if defined(DEBUG_EXT_MODULE_FLASH)
|
||||
TRACE("[Wait for Sync]");
|
||||
#endif
|
||||
|
||||
clear();
|
||||
do {
|
||||
|
||||
@@ -189,7 +233,7 @@ const char * MultiFirmwareUpdateDriver::waitForInitialSync(bool& inverted) const
|
||||
inverted = !inverted;
|
||||
init(inverted);
|
||||
}
|
||||
|
||||
|
||||
// Send sync request
|
||||
sendByte(STK_GET_SYNC);
|
||||
sendByte(CRC_EOP);
|
||||
@@ -197,24 +241,35 @@ const char * MultiFirmwareUpdateDriver::waitForInitialSync(bool& inverted) const
|
||||
getRxByte(byte);
|
||||
WDG_RESET();
|
||||
|
||||
} while((byte != STK_INSYNC) && --retries);
|
||||
} while ((byte != STK_INSYNC) && --retries);
|
||||
|
||||
if (!retries) {
|
||||
return "NoSync";
|
||||
}
|
||||
|
||||
if (byte != STK_INSYNC) {
|
||||
#if defined(DEBUG_EXT_MODULE_FLASH)
|
||||
TRACE("[byte != STK_INSYNC]");
|
||||
#endif
|
||||
return "NoSync";
|
||||
}
|
||||
|
||||
if (!checkRxByte(STK_OK)) {
|
||||
#if defined(DEBUG_EXT_MODULE_FLASH)
|
||||
TRACE("[!checkRxByte(STK_OK)]");
|
||||
#endif
|
||||
return "NoSync";
|
||||
}
|
||||
|
||||
// avoids sending STK_READ_SIGN with STK_OK
|
||||
// in case the receiver is too slow changing
|
||||
// to RX mode (half-duplex).
|
||||
RTOS_WAIT_TICKS(1);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const char * MultiFirmwareUpdateDriver::getDeviceSignature(uint8_t* signature) const
|
||||
const char * MultiFirmwareUpdateDriver::getDeviceSignature(uint8_t * signature) const
|
||||
{
|
||||
// Read signature
|
||||
sendByte(STK_READ_SIGN);
|
||||
@@ -224,7 +279,7 @@ const char * MultiFirmwareUpdateDriver::getDeviceSignature(uint8_t* signature) c
|
||||
if (!checkRxByte(STK_INSYNC))
|
||||
return "NoSync";
|
||||
|
||||
for (uint8_t i=0; i<4; i++) {
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
if (!getRxByte(signature[i])) {
|
||||
return "NoSignature";
|
||||
}
|
||||
@@ -244,10 +299,14 @@ const char * MultiFirmwareUpdateDriver::loadAddress(uint32_t offset) const
|
||||
return "NoSync";
|
||||
}
|
||||
|
||||
// avoids sending next page back-to-back with STK_OK
|
||||
// in case the receiver is to slow changing to RX mode (half-duplex).
|
||||
RTOS_WAIT_TICKS(1);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const char * MultiFirmwareUpdateDriver::progPage(uint8_t* buffer, uint16_t size) const
|
||||
const char * MultiFirmwareUpdateDriver::progPage(uint8_t * buffer, uint16_t size) const
|
||||
{
|
||||
sendByte(STK_PROG_PAGE);
|
||||
|
||||
@@ -258,9 +317,10 @@ const char * MultiFirmwareUpdateDriver::progPage(uint8_t* buffer, uint16_t size)
|
||||
// flash/eeprom flag
|
||||
sendByte(0);
|
||||
|
||||
for (uint16_t i=0; i < size; i++) {
|
||||
for (uint16_t i = 0; i < size; i++) {
|
||||
sendByte(buffer[i]);
|
||||
}
|
||||
|
||||
sendByte(CRC_EOP);
|
||||
|
||||
if (!checkRxByte(STK_INSYNC))
|
||||
@@ -271,7 +331,7 @@ const char * MultiFirmwareUpdateDriver::progPage(uint8_t* buffer, uint16_t size)
|
||||
do {
|
||||
getRxByte(byte);
|
||||
WDG_RESET();
|
||||
} while(!byte && --retries);
|
||||
} while (!byte && --retries);
|
||||
|
||||
if (!retries || (byte != STK_OK))
|
||||
return "NoPageSync";
|
||||
@@ -323,7 +383,7 @@ const char * MultiFirmwareUpdateDriver::flashFirmware(FIL * file, const char * l
|
||||
return result;
|
||||
}
|
||||
|
||||
uint8_t buffer[256];
|
||||
uint8_t buffer[256];
|
||||
uint16_t pageSize = 128;
|
||||
uint32_t writeOffset = 0;
|
||||
|
||||
@@ -340,7 +400,7 @@ const char * MultiFirmwareUpdateDriver::flashFirmware(FIL * file, const char * l
|
||||
while (!f_eof(file)) {
|
||||
progressHandler(label, STR_WRITING, file->fptr, file->obj.objsize);
|
||||
|
||||
UINT count=0;
|
||||
UINT count = 0;
|
||||
memclear(buffer, pageSize);
|
||||
if (f_read(file, buffer, pageSize, &count) != FR_OK) {
|
||||
result = "Error reading file";
|
||||
@@ -460,7 +520,7 @@ const char * MultiFirmwareInformation::readMultiFirmwareInformation(const char *
|
||||
if (f_open(&file, filename, FA_READ) != FR_OK)
|
||||
return "Error opening file";
|
||||
|
||||
const char * err = readMultiFirmwareInformation(&file);
|
||||
const char * err = readMultiFirmwareInformation(&file);
|
||||
f_close(&file);
|
||||
|
||||
return err;
|
||||
@@ -473,7 +533,7 @@ const char * MultiFirmwareInformation::readMultiFirmwareInformation(FIL * file)
|
||||
|
||||
if (f_size(file) < MULTI_SIGN_SIZE)
|
||||
return "File too small";
|
||||
|
||||
|
||||
f_lseek(file, f_size(file) - MULTI_SIGN_SIZE);
|
||||
if (f_read(file, buffer, MULTI_SIGN_SIZE, &count) != FR_OK || count != MULTI_SIGN_SIZE) {
|
||||
return "Error reading file";
|
||||
@@ -482,11 +542,11 @@ const char * MultiFirmwareInformation::readMultiFirmwareInformation(FIL * file)
|
||||
if (!memcmp(buffer, "multi-x", 7)) {
|
||||
return readV2Signature(buffer);
|
||||
}
|
||||
|
||||
|
||||
return readV1Signature(buffer);
|
||||
}
|
||||
|
||||
bool MultiDeviceFirmwareUpdate::flashFirmware(const char * filename, ProgressHandler progressHandler)
|
||||
bool MultiDeviceFirmwareUpdate::flashFirmware(const char * filename, MultiModuleType type, ProgressHandler progressHandler)
|
||||
{
|
||||
FIL file;
|
||||
|
||||
@@ -495,34 +555,38 @@ bool MultiDeviceFirmwareUpdate::flashFirmware(const char * filename, ProgressHan
|
||||
return false;
|
||||
}
|
||||
|
||||
MultiFirmwareInformation firmwareFile;
|
||||
if (firmwareFile.readMultiFirmwareInformation(&file)) {
|
||||
f_close(&file);
|
||||
POPUP_WARNING("Not a valid file");
|
||||
return false;
|
||||
}
|
||||
f_lseek(&file, 0);
|
||||
|
||||
if (module == EXTERNAL_MODULE) {
|
||||
if (!firmwareFile.isMultiExternalFirmware()) {
|
||||
if (type == MULTI_TYPE_MULTIMODULE) {
|
||||
MultiFirmwareInformation firmwareFile;
|
||||
if (firmwareFile.readMultiFirmwareInformation(&file)) {
|
||||
f_close(&file);
|
||||
POPUP_WARNING(STR_NEEDS_FILE, STR_EXT_MULTI_SPEC);
|
||||
POPUP_WARNING("Not a valid file");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!firmwareFile.isMultiInternalFirmware()) {
|
||||
f_close(&file);
|
||||
POPUP_WARNING(STR_NEEDS_FILE, STR_INT_MULTI_SPEC);
|
||||
return false;
|
||||
f_lseek(&file, 0);
|
||||
|
||||
if (module == EXTERNAL_MODULE) {
|
||||
if (!firmwareFile.isMultiExternalFirmware()) {
|
||||
f_close(&file);
|
||||
POPUP_WARNING(STR_NEEDS_FILE, STR_EXT_MULTI_SPEC);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!firmwareFile.isMultiInternalFirmware()) {
|
||||
f_close(&file);
|
||||
POPUP_WARNING(STR_NEEDS_FILE, STR_INT_MULTI_SPEC);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const MultiFirmwareUpdateDriver* driver = &multiExternalUpdateDriver;
|
||||
const MultiFirmwareUpdateDriver * driver = &multiExternalUpdateDriver;
|
||||
#if defined(INTERNAL_MODULE_MULTI)
|
||||
if (module == INTERNAL_MODULE)
|
||||
driver = &multiInternalUpdateDriver;
|
||||
#endif
|
||||
if (type == MULTI_TYPE_ELRS)
|
||||
driver = &multiExtSportUpdateDriver;
|
||||
|
||||
pausePulses();
|
||||
|
||||
@@ -548,7 +612,7 @@ bool MultiDeviceFirmwareUpdate::flashFirmware(const char * filename, ProgressHan
|
||||
const char * result = driver->flashFirmware(&file, getBasename(filename), progressHandler);
|
||||
f_close(&file);
|
||||
|
||||
AUDIO_PLAY(AU_SPECIAL_SOUND_BEEP1 );
|
||||
AUDIO_PLAY(AU_SPECIAL_SOUND_BEEP1);
|
||||
BACKLIGHT_ENABLE();
|
||||
|
||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||
@@ -570,7 +634,7 @@ bool MultiDeviceFirmwareUpdate::flashFirmware(const char * filename, ProgressHan
|
||||
|
||||
// reset telemetry protocol
|
||||
telemetryInit(255);
|
||||
|
||||
|
||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||
if (intPwr) {
|
||||
INTERNAL_MODULE_ON();
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef OPENTX_MULTI_FIRMWARE_H
|
||||
#define OPENTX_MULTI_FIRMWARE_H
|
||||
#pragma once
|
||||
|
||||
#include "ff.h"
|
||||
|
||||
@@ -101,6 +100,11 @@ class MultiFirmwareInformation {
|
||||
const char * readV2Signature(const char * buffer);
|
||||
};
|
||||
|
||||
enum MultiModuleType {
|
||||
MULTI_TYPE_MULTIMODULE = 0,
|
||||
MULTI_TYPE_ELRS,
|
||||
};
|
||||
|
||||
class MultiDeviceFirmwareUpdate {
|
||||
public:
|
||||
explicit MultiDeviceFirmwareUpdate(ModuleIndex module):
|
||||
@@ -108,10 +112,8 @@ class MultiDeviceFirmwareUpdate {
|
||||
{
|
||||
}
|
||||
|
||||
bool flashFirmware(const char * filename, ProgressHandler progressHandler);
|
||||
bool flashFirmware(const char * filename, MultiModuleType type, ProgressHandler progressHandler);
|
||||
|
||||
protected:
|
||||
ModuleIndex module;
|
||||
};
|
||||
|
||||
#endif //OPENTX_MULTI_FIRMWARE_H
|
||||
|
||||
+40
-7
@@ -76,9 +76,22 @@ constexpr bool IS_VIRTUAL_KEY_EVENT(event_t event)
|
||||
|
||||
// normal order of events is: FIRST, LONG, REPEAT, REPEAT, ..., BREAK
|
||||
#define EVT_KEY_MASK(e) ((e) & 0x1F)
|
||||
#define EVT_KEY_FIRST(key) ((key)|_MSK_KEY_FIRST) // fired when key is pressed
|
||||
#define EVT_KEY_LONG(key) ((key)|_MSK_KEY_LONG) // fired when key is held pressed for a while
|
||||
#define EVT_KEY_REPT(key) ((key)|_MSK_KEY_REPT) // fired when key is held pressed long enough, fires multiple times with increasing speed
|
||||
|
||||
constexpr event_t EVT_KEY_FIRST(uint8_t key)
|
||||
{
|
||||
return (key | _MSK_KEY_FIRST); // fired when key is pressed
|
||||
}
|
||||
|
||||
constexpr event_t EVT_KEY_REPT(uint8_t key)
|
||||
{
|
||||
return (key | _MSK_KEY_REPT); // fired when key is held pressed long enough, fires multiple times with increasing speed
|
||||
}
|
||||
|
||||
constexpr event_t EVT_KEY_LONG(uint8_t key)
|
||||
{
|
||||
return (key | _MSK_KEY_LONG); // fired when key is held pressed for a while
|
||||
}
|
||||
|
||||
constexpr event_t EVT_KEY_BREAK(uint8_t key)
|
||||
{
|
||||
return (key | _MSK_KEY_BREAK); // fired when key is released (short or long), but only if the event was not killed
|
||||
@@ -94,10 +107,30 @@ constexpr bool IS_TRIM_EVENT(event_t event)
|
||||
return (IS_KEY_EVENT(event) && EVT_KEY_MASK(event) >= TRM_BASE);
|
||||
}
|
||||
|
||||
#define IS_KEY_FIRST(evt) (((evt) & _MSK_KEY_FLAGS) == _MSK_KEY_FIRST)
|
||||
#define IS_KEY_LONG(evt) (((evt) & _MSK_KEY_FLAGS) == _MSK_KEY_LONG)
|
||||
#define IS_KEY_REPT(evt) (((evt) & _MSK_KEY_FLAGS) == _MSK_KEY_REPT)
|
||||
#define IS_KEY_BREAK(evt) (((evt) & _MSK_KEY_FLAGS) == _MSK_KEY_BREAK)
|
||||
inline bool IS_KEY_FIRST(event_t evt)
|
||||
{
|
||||
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_FIRST;
|
||||
}
|
||||
|
||||
inline bool IS_KEY_REPT(event_t evt)
|
||||
{
|
||||
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_REPT;
|
||||
}
|
||||
|
||||
inline bool IS_KEY_LONG(event_t evt)
|
||||
{
|
||||
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_LONG;
|
||||
}
|
||||
|
||||
inline bool IS_KEY_BREAK(event_t evt)
|
||||
{
|
||||
return (evt & _MSK_KEY_FLAGS) == _MSK_KEY_BREAK;
|
||||
}
|
||||
|
||||
inline bool IS_KEY_EVT(event_t evt, uint8_t key)
|
||||
{
|
||||
return (evt & _MSK_KEY_FLAGS) && (EVT_KEY_MASK(evt) == key);
|
||||
}
|
||||
|
||||
#if defined(PCBXLITE)
|
||||
#define EVT_ROTARY_BREAK EVT_KEY_BREAK(KEY_ENTER)
|
||||
|
||||
+65
-20
@@ -71,7 +71,8 @@ Reset the backlight timeout
|
||||
*/
|
||||
static int luaLcdResetBacklightTimeout(lua_State * L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
resetBacklightTimeout();
|
||||
return 0;
|
||||
}
|
||||
@@ -95,7 +96,8 @@ bottom line is 63. Drawing on an existing black pixel produces white pixel (TODO
|
||||
*/
|
||||
static int luaLcdDrawPoint(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
LcdFlags att = luaL_optunsigned(L, 3, 0);
|
||||
@@ -123,7 +125,8 @@ whole line will not be drawn (starting from OpenTX 2.1.5)
|
||||
*/
|
||||
static int luaLcdDrawLine(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
coord_t x1 = luaL_checkunsigned(L, 1);
|
||||
coord_t y1 = luaL_checkunsigned(L, 2);
|
||||
coord_t x2 = luaL_checkunsigned(L, 3);
|
||||
@@ -228,7 +231,8 @@ See the [Appendix](../appendix/fonts.md) for available characters in each font s
|
||||
*/
|
||||
static int luaLcdDrawText(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
const char * s = luaL_checkstring(L, 3);
|
||||
@@ -259,7 +263,8 @@ Display a value formatted as time at (x,y)
|
||||
*/
|
||||
static int luaLcdDrawTimer(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int seconds = luaL_checkinteger(L, 3);
|
||||
@@ -293,7 +298,8 @@ Display a number at (x,y)
|
||||
*/
|
||||
static int luaLcdDrawNumber(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int val = luaL_checkinteger(L, 3);
|
||||
@@ -321,7 +327,8 @@ See getValue()
|
||||
*/
|
||||
static int luaLcdDrawChannel(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int channel = -1;
|
||||
@@ -358,7 +365,8 @@ displays negated switch
|
||||
*/
|
||||
static int luaLcdDrawSwitch(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int s = luaL_checkinteger(L, 3);
|
||||
@@ -382,7 +390,8 @@ Displays the name of the corresponding input as defined by the source at (x,y)
|
||||
*/
|
||||
static int luaLcdDrawSource(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int s = luaL_checkinteger(L, 3);
|
||||
@@ -532,7 +541,8 @@ Omitting scale draws image in 1:1 scale and is faster than specifying 100 for sc
|
||||
*/
|
||||
static int luaLcdDrawBitmap(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
const BitmapBuffer * b = checkBitmap(L, 1);
|
||||
|
||||
if (b) {
|
||||
@@ -564,7 +574,8 @@ Draw a bitmap at (x,y)
|
||||
*/
|
||||
static int luaLcdDrawPixmap(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
const char * filename = luaL_checkstring(L, 3);
|
||||
@@ -597,7 +608,8 @@ Draw a rectangle from top left corner (x,y) of specified width and height
|
||||
*/
|
||||
static int luaLcdDrawRectangle(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int w = luaL_checkinteger(L, 3);
|
||||
@@ -629,7 +641,8 @@ Draw a solid rectangle from top left corner (x,y) of specified width and height
|
||||
*/
|
||||
static int luaLcdDrawFilledRectangle(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int w = luaL_checkinteger(L, 3);
|
||||
@@ -661,7 +674,8 @@ Draw a simple gauge that is filled based upon fill value
|
||||
*/
|
||||
static int luaLcdDrawGauge(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int w = luaL_checkinteger(L, 3);
|
||||
@@ -699,7 +713,8 @@ the right side of title bar. (i.e. idx=2, cnt=5, display `2/5`)
|
||||
*/
|
||||
static int luaLcdDrawScreenTitle(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
const char * str = luaL_checkstring(L, 1);
|
||||
int idx = luaL_checkinteger(L, 2);
|
||||
int cnt = luaL_checkinteger(L, 3);
|
||||
@@ -739,7 +754,8 @@ Draw a combo box
|
||||
*/
|
||||
static int luaLcdDrawCombobox(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int x = luaL_checkinteger(L, 1);
|
||||
int y = luaL_checkinteger(L, 2);
|
||||
int w = luaL_checkinteger(L, 3);
|
||||
@@ -818,7 +834,13 @@ Set a color for specific area
|
||||
* `MENU_BGCOLOR`
|
||||
* `HEADER_ICON_BGCOLOR`
|
||||
* `HEADER_CURRENT_BGCOLOR`
|
||||
* `MAINVIEW_PANES_COLOR`
|
||||
* `MAINVIEW_GRAPHICS_COLOR`
|
||||
* `OVERLAY_COLOR`
|
||||
* `BARGRAPH1_COLOR`
|
||||
* `BARGRAPH2_COLOR`
|
||||
* `BARGRAPH_BGCOLOR`
|
||||
* `CUSTOM_COLOR`
|
||||
|
||||
@param color (number) color in 5/6/5 rgb format. The following prefined colors are available
|
||||
* `WHITE`
|
||||
@@ -831,19 +853,40 @@ Set a color for specific area
|
||||
* `RED`
|
||||
* `DARKRED`
|
||||
|
||||
@notice Only available on Horus
|
||||
@notice Only available on Colorlcd radios
|
||||
|
||||
@status current Introduced in 2.2.0
|
||||
*/
|
||||
static int luaLcdSetColor(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
unsigned int index = luaL_checkunsigned(L, 1) >> 16;
|
||||
unsigned int color = luaL_checkunsigned(L, 2);
|
||||
lcdColorTable[index] = color;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*luadoc
|
||||
@function lcd.getColor(area)
|
||||
|
||||
Get the color for specific area : see lcd.setColor for area list
|
||||
|
||||
@notice Only available on Colorlcd radios
|
||||
|
||||
@status current Introduced in 2.3.11
|
||||
*/
|
||||
|
||||
static int luaLcdGetColor(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
|
||||
unsigned int index = luaL_checkunsigned(L, 1) >> 16;
|
||||
lua_pushunsigned(L, lcdColorTable[index]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*luadoc
|
||||
@function lcd.RGB(r, g, b)
|
||||
|
||||
@@ -857,13 +900,14 @@ Returns a 5/6/5 rgb color code, that can be used with lcd.setColor
|
||||
|
||||
@retval number (integer) rgb color expressed in 5/6/5 format
|
||||
|
||||
@notice Only available on Horus
|
||||
@notice Only available on Colorlcd radios
|
||||
|
||||
@status current Introduced in 2.2.0
|
||||
*/
|
||||
static int luaRGB(lua_State *L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
if (!luaLcdAllowed)
|
||||
return 0;
|
||||
int r = luaL_checkinteger(L, 1);
|
||||
int g = luaL_checkinteger(L, 2);
|
||||
int b = luaL_checkinteger(L, 3);
|
||||
@@ -890,6 +934,7 @@ const luaL_Reg lcdLib[] = {
|
||||
#if defined(COLORLCD)
|
||||
{ "drawBitmap", luaLcdDrawBitmap },
|
||||
{ "setColor", luaLcdSetColor },
|
||||
{ "getColor", luaLcdGetColor },
|
||||
{ "RGB", luaRGB },
|
||||
#else
|
||||
{ "getLastPos", luaLcdGetLastPos },
|
||||
|
||||
@@ -1518,16 +1518,16 @@ Get Telemetry Sensor parameters
|
||||
|
||||
@param sensor (unsigned number) sensor number (use 0 for sensor 1)
|
||||
|
||||
@retval nil requested logical switch does not exist
|
||||
@retval nil requested sensor does not exist
|
||||
|
||||
@retval table logical switch data:
|
||||
* `func` (number) function index
|
||||
* `v1` (number) V1 value (index)
|
||||
* `v2` (number) V2 value (index or value)
|
||||
* `v3` (number) V3 value (index or value)
|
||||
* `and` (number) AND switch index
|
||||
* `delay` (number) delay (time in 1/10 s)
|
||||
* `duration` (number) duration (time in 1/10 s)
|
||||
@retval table with sensor data:
|
||||
* `type` (number) 0 = custom, 1 = calculated
|
||||
* `name` (string) Name
|
||||
* `unit` (number) See list of units in the appendix of the OpenTX Lua Reference Guide
|
||||
* `prec` (number) Number of decimals
|
||||
* `id` (number) Only custom sensors
|
||||
* `instance` (number) Only custom sensors
|
||||
* `formula` (number) Only calculated sensors. 0 = Add etc. see list of formula choices in Companion popup
|
||||
|
||||
@status current Introduced in 2.3.0
|
||||
*/
|
||||
@@ -1555,6 +1555,28 @@ static int luaModelGetSensor(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*luadoc
|
||||
@function model.resetSensor(sensor)
|
||||
|
||||
Reset Telemetry Sensor parameters
|
||||
|
||||
@param sensor (unsigned number) sensor number (use 0 for sensor 1)
|
||||
|
||||
@retval nil
|
||||
|
||||
@status current Introduced in 2.3.11
|
||||
*/
|
||||
static int luaModelResetSensor(lua_State *L)
|
||||
{
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < MAX_TELEMETRY_SENSORS) {
|
||||
telemetryItems[idx].clear();
|
||||
}
|
||||
|
||||
lua_pushnil(L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const luaL_Reg modelLib[] = {
|
||||
{ "getInfo", luaModelGetInfo },
|
||||
{ "setInfo", luaModelSetInfo },
|
||||
@@ -1588,5 +1610,6 @@ const luaL_Reg modelLib[] = {
|
||||
{ "getGlobalVariable", luaModelGetGlobalVariable },
|
||||
{ "setGlobalVariable", luaModelSetGlobalVariable },
|
||||
{ "getSensor", luaModelGetSensor },
|
||||
{ "resetSensor", luaModelResetSensor },
|
||||
{ NULL, NULL } /* sentinel */
|
||||
};
|
||||
|
||||
+22
-8
@@ -536,14 +536,25 @@ int getStickTrimValue(int stick, int stickValue)
|
||||
return trim;
|
||||
}
|
||||
|
||||
int getSourceTrimValue(int source, int stickValue=0)
|
||||
int getSourceTrimOrigin(int source)
|
||||
{
|
||||
if (source >= MIXSRC_Rud && source <= MIXSRC_Ail)
|
||||
return getStickTrimValue(source - MIXSRC_Rud, stickValue);
|
||||
return source - MIXSRC_Rud;
|
||||
else if (source >= MIXSRC_FIRST_INPUT && source <= MIXSRC_LAST_INPUT)
|
||||
return getStickTrimValue(virtualInputsTrims[source - MIXSRC_FIRST_INPUT], stickValue);
|
||||
return virtualInputsTrims[source - MIXSRC_FIRST_INPUT];
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
int getSourceTrimValue(int source, int stickValue=0)
|
||||
{
|
||||
auto origin = getSourceTrimOrigin(source);
|
||||
if (origin >= 0) {
|
||||
return getStickTrimValue(origin, stickValue);
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t mixerCurrentFlightMode;
|
||||
@@ -735,13 +746,16 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms)
|
||||
}
|
||||
|
||||
if (applyOffsetAndCurve) {
|
||||
|
||||
//========== TRIMS ================
|
||||
if (!(mode & e_perout_mode_notrims)) {
|
||||
if (md->carryTrim == 0) {
|
||||
v += getSourceTrimValue(md->srcRaw, v);
|
||||
bool applyTrims = !(mode & e_perout_mode_notrims);
|
||||
if (!applyTrims && g_model.thrTrim) {
|
||||
auto origin = getSourceTrimOrigin(md->srcRaw);
|
||||
if (origin == g_model.getThrottleStickTrimSource() - MIXSRC_FIRST_TRIM) {
|
||||
applyTrims = true;
|
||||
}
|
||||
}
|
||||
if (applyTrims && md->carryTrim == 0) {
|
||||
v += getSourceTrimValue(md->srcRaw, v);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t weight = GET_GVAR_PREC1(MD_WEIGHT(md), GV_RANGELARGE_NEG, GV_RANGELARGE, mixerCurrentFlightMode);
|
||||
|
||||
+14
-9
@@ -1143,7 +1143,7 @@ void checkTrims()
|
||||
else {
|
||||
phase = getTrimFlightMode(mixerCurrentFlightMode, idx);
|
||||
before = getTrimValue(phase, idx);
|
||||
thro = (idx==THR_STICK && g_model.thrTrim);
|
||||
thro = (idx == (g_model.getThrottleStickTrimSource() - MIXSRC_FIRST_TRIM) && g_model.thrTrim);
|
||||
}
|
||||
#else
|
||||
phase = getTrimFlightMode(mixerCurrentFlightMode, idx);
|
||||
@@ -1785,7 +1785,8 @@ void copyTrimsToOffset(uint8_t ch)
|
||||
|
||||
int16_t output = applyLimits(ch, chans[ch]) - zero;
|
||||
int16_t v = g_model.limitData[ch].offset;
|
||||
if (g_model.limitData[ch].revert) output = -output;
|
||||
if (g_model.limitData[ch].revert)
|
||||
output = -output;
|
||||
v += (output * 125) / 128;
|
||||
g_model.limitData[ch].offset = limit((int16_t)-1000, (int16_t)v, (int16_t)1000); // make sure the offset doesn't go haywire
|
||||
|
||||
@@ -1860,23 +1861,27 @@ void moveTrimsToOffsets() // copy state of 3 primary to subtrim
|
||||
pauseMixerCalculations();
|
||||
|
||||
evalFlightModeMixes(e_perout_mode_noinput, 0); // do output loop - zero input sticks and trims
|
||||
for (uint8_t i=0; i<MAX_OUTPUT_CHANNELS; i++) {
|
||||
|
||||
for (uint8_t i = 0; i < MAX_OUTPUT_CHANNELS; i++) {
|
||||
zeros[i] = applyLimits(i, chans[i]);
|
||||
}
|
||||
|
||||
evalFlightModeMixes(e_perout_mode_noinput-e_perout_mode_notrims, 0); // do output loop - only trims
|
||||
|
||||
for (uint8_t i=0; i<MAX_OUTPUT_CHANNELS; i++) {
|
||||
int16_t output = applyLimits(i, chans[i]) - zeros[i];
|
||||
for (uint8_t i = 0; i < MAX_OUTPUT_CHANNELS; i++) {
|
||||
int16_t diff = applyLimits(i, chans[i]) - zeros[i];
|
||||
int16_t v = g_model.limitData[i].offset;
|
||||
if (g_model.limitData[i].revert) output = -output;
|
||||
v += (output * 125) / 128;
|
||||
g_model.limitData[i].offset = limit((int16_t)-1000, (int16_t)v, (int16_t)1000); // make sure the offset doesn't go haywire
|
||||
if (g_model.limitData[i].revert)
|
||||
diff = -diff;
|
||||
v += (diff * 125) / 128;
|
||||
|
||||
g_model.limitData[i].offset = limit((int16_t) -1000, (int16_t) v, (int16_t) 1000); // make sure the offset doesn't go haywire
|
||||
}
|
||||
|
||||
// reset all trims, except throttle (if throttle trim)
|
||||
for (uint8_t i=0; i<NUM_TRIMS; i++) {
|
||||
if (i != THR_STICK || !g_model.thrTrim) {
|
||||
auto thrStick = g_model.getThrottleStickTrimSource() - MIXSRC_FIRST_TRIM;
|
||||
if (i != thrStick || !g_model.thrTrim) {
|
||||
int16_t original_trim = getTrimValue(mixerCurrentFlightMode, i);
|
||||
for (uint8_t fm=0; fm<MAX_FLIGHT_MODES; fm++) {
|
||||
trim_t trim = getRawTrimValue(fm, i);
|
||||
|
||||
+2
-3
@@ -18,8 +18,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef _OPENTX_H_
|
||||
#define _OPENTX_H_
|
||||
#pragma once
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "definitions.h"
|
||||
@@ -1115,6 +1114,7 @@ union ReusableBuffer
|
||||
#if defined(GHOST)
|
||||
struct {
|
||||
GhostMenuData line[GHST_MENU_LINES + 1];
|
||||
uint8_t menuStatus;
|
||||
uint8_t menuAction;
|
||||
uint8_t buttonAction;
|
||||
} ghostMenu;
|
||||
@@ -1313,4 +1313,3 @@ inline bool isAsteriskDisplayed()
|
||||
#include "thirdparty/libACCESS/libAccess.h"
|
||||
#endif
|
||||
|
||||
#endif // _OPENTX_H_
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
|
||||
uint8_t createGhostMenuControlFrame(uint8_t * frame, int16_t * pulses)
|
||||
{
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_FRAME_CHANNEL;
|
||||
|
||||
uint8_t * buf = frame;
|
||||
#if SPORT_MAX_BAUDRATE < 400000
|
||||
*buf++ = g_eeGeneral.telemetryBaudrate == GHST_TELEMETRY_RATE_400K ? GHST_ADDR_MODULE_SYM : GHST_ADDR_MODULE_ASYM;
|
||||
@@ -118,5 +116,7 @@ void setupPulsesGhost()
|
||||
extmodulePulsesData.ghost.length = createGhostMenuControlFrame(pulses, &channelOutputs[g_model.moduleData[EXTERNAL_MODULE].channelsStart]);
|
||||
else
|
||||
extmodulePulsesData.ghost.length = createGhostChannelsFrame(pulses, &channelOutputs[g_model.moduleData[EXTERNAL_MODULE].channelsStart]);
|
||||
|
||||
moduleState[EXTERNAL_MODULE].counter = GHST_FRAME_CHANNEL;
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,7 @@ enum ModuleSubtypeMulti {
|
||||
MODULE_SUBTYPE_MULTI_MJXQ,
|
||||
MODULE_SUBTYPE_MULTI_SHENQI,
|
||||
MODULE_SUBTYPE_MULTI_FY326,
|
||||
MODULE_SUBTYPE_MULTI_SFHSS,
|
||||
MODULE_SUBTYPE_MULTI_FUTABA,
|
||||
MODULE_SUBTYPE_MULTI_J6PRO, //20
|
||||
MODULE_SUBTYPE_MULTI_FQ777,
|
||||
MODULE_SUBTYPE_MULTI_ASSAN,
|
||||
@@ -152,7 +152,7 @@ enum ModuleSubtypeMulti {
|
||||
MODULE_SUBTYPE_MULTI_REDPINE,
|
||||
MODULE_SUBTYPE_MULTI_POTENSIC,
|
||||
MODULE_SUBTYPE_MULTI_ZSX,
|
||||
MODULE_SUBTYPE_MULTI_FLYZONE, //50
|
||||
MODULE_SUBTYPE_MULTI_HEIGHT, //50
|
||||
MODULE_SUBTYPE_MULTI_SCANNER,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX_RX,
|
||||
MODULE_SUBTYPE_MULTI_AFHDS2A_RX,
|
||||
@@ -172,7 +172,15 @@ enum ModuleSubtypeMulti {
|
||||
MODULE_SUBTYPE_MULTI_DSM_RX,
|
||||
MODULE_SUBTYPE_MULTI_JJRC345,
|
||||
MODULE_SUBTYPE_MULTI_Q90C,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_Q90C
|
||||
MODULE_SUBTYPE_MULTI_KYOSHO, //70
|
||||
MODULE_SUBTYPE_MULTI_RLINK,
|
||||
MODULE_SUBTYPE_MULTI_ELRS,
|
||||
MODULE_SUBTYPE_MULTI_REALACC,
|
||||
MODULE_SUBTYPE_MULTI_OMP,
|
||||
MODULE_SUBTYPE_MULTI_MLINK, //75
|
||||
MODULE_SUBTYPE_MULTI_WFLY2,
|
||||
MODULE_SUBTYPE_MULTI_E016HV2,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_E016HV2
|
||||
};
|
||||
#define MODULE_SUBTYPE_MULTI_XN297DP 63-3
|
||||
|
||||
|
||||
@@ -284,9 +284,14 @@ inline bool isModulePXX1(uint8_t idx)
|
||||
return isModuleTypePXX1(g_model.moduleData[idx].type);
|
||||
}
|
||||
|
||||
inline bool isModuleXJTLite(uint8_t idx)
|
||||
{
|
||||
return g_model.moduleData[idx].type == MODULE_TYPE_XJT_LITE_PXX2;
|
||||
}
|
||||
|
||||
inline bool isModulePXX2(uint8_t idx)
|
||||
{
|
||||
return isModuleISRM(idx) || isModuleR9MAccess(idx);
|
||||
return isModuleISRM(idx) || isModuleR9MAccess(idx) || isModuleXJTLite(idx);
|
||||
}
|
||||
|
||||
inline bool isModuleRFAccess(uint8_t idx)
|
||||
|
||||
@@ -76,6 +76,7 @@ const char RADIO_SETTINGS_YAML_PATH[] = RADIO_PATH "/radio.yml";
|
||||
#define SPORT_FIRMWARE_EXT ".frk"
|
||||
#define FRSKY_FIRMWARE_EXT ".frsk"
|
||||
#define MULTI_FIRMWARE_EXT ".bin"
|
||||
#define ELRS_FIRMWARE_EXT ".elrs"
|
||||
#define YAML_EXT ".yml"
|
||||
|
||||
#if defined(COLORLCD)
|
||||
|
||||
+9
-1
@@ -33,7 +33,7 @@
|
||||
#elif defined(JUMPER_RELEASE)
|
||||
#define DISPLAY_VERSION "-jumper"
|
||||
#elif defined(RADIOMASTER_RELEASE)
|
||||
#define DISPLAY_VERSION "-radiomaster"
|
||||
#define DISPLAY_VERSION "-RM"
|
||||
#elif defined(TBS_RELEASE)
|
||||
#define DISPLAY_VERSION "-tbs"
|
||||
#elif defined(IMRC_RELEASE)
|
||||
@@ -44,12 +44,20 @@
|
||||
|
||||
#if defined(COLORLCD)
|
||||
const char fw_stamp[] = "FW" TAB ": opentx-" FLAVOUR;
|
||||
#if defined(RADIOMASTER_RELEASE) || defined(JUMPER_RELEASE)
|
||||
const char vers_stamp[] = "VERS" TAB ": Factory firmware (" GIT_STR ")";
|
||||
#else
|
||||
const char vers_stamp[] = "VERS" TAB ": " VERSION DISPLAY_VERSION " (" GIT_STR ")";
|
||||
#endif
|
||||
const char date_stamp[] = "DATE" TAB ": " DATE;
|
||||
const char time_stamp[] = "TIME" TAB ": " TIME;
|
||||
const char eeprom_stamp[] = "EEPR" TAB ": " EEPROM_STR;
|
||||
#elif defined(BOARD_NAME)
|
||||
const char vers_stamp[] = "FW" TAB ": opentx-" BOARD_NAME "\036VERS" TAB ": " VERSION DISPLAY_VERSION " (" GIT_STR ")" "\036DATE" TAB ": " DATE " " TIME "\036EEPR" TAB ": " EEPROM_STR;
|
||||
#elif defined(RADIOMASTER_RELEASE)
|
||||
const char vers_stamp[] = "FW" TAB ": opentx-" FLAVOUR "\036VERS" TAB ": RM Factory (" GIT_STR ")" "\036BUILT BY : OpenTX" "\036DATE" TAB ": " DATE " " TIME "\036EEPR" TAB ": " EEPROM_STR;
|
||||
#elif defined(JUMPER_RELEASE)
|
||||
const char vers_stamp[] = "FW" TAB ": opentx-" FLAVOUR "\036VERS" TAB ": Factory (" GIT_STR ")" "\036BUILT BY : OpenTX" "\036DATE" TAB ": " DATE " " TIME "\036EEPR" TAB ": " EEPROM_STR;
|
||||
#else
|
||||
const char vers_stamp[] = "FW" TAB ": opentx-" FLAVOUR "\036VERS" TAB ": " VERSION DISPLAY_VERSION " (" GIT_STR ")" "\036DATE" TAB ": " DATE " " TIME "\036EEPR" TAB ": " EEPROM_STR;
|
||||
#endif
|
||||
|
||||
@@ -374,16 +374,9 @@ char * getSwitchPositionName(char * dest, swsrc_t idx)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
else if (idx <= SWSRC_REa) {
|
||||
getStringAtIndex(s, STR_VSWITCHES, IDX_TRIMS_IN_STR_VSWITCHES+idx-SWSRC_FIRST_TRIM);
|
||||
}
|
||||
#else
|
||||
else if (idx <= SWSRC_LAST_TRIM) {
|
||||
getStringAtIndex(s, STR_VSWITCHES, IDX_TRIMS_IN_STR_VSWITCHES+idx-SWSRC_FIRST_TRIM);
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (idx <= SWSRC_LAST_LOGICAL_SWITCH) {
|
||||
*s++ = 'L';
|
||||
strAppendUnsigned(s, idx-SWSRC_FIRST_LOGICAL_SWITCH+1, 2);
|
||||
|
||||
@@ -236,12 +236,8 @@ set(FIRMWARE_TARGET_SRC
|
||||
${FIRMWARE_TARGET_SRC}
|
||||
keys_driver.cpp
|
||||
diskio.cpp
|
||||
)
|
||||
|
||||
set(TARGET_SRC
|
||||
${TARGET_SRC}
|
||||
telemetry_driver.cpp
|
||||
)
|
||||
)
|
||||
|
||||
set(FIRMWARE_SRC
|
||||
${FIRMWARE_SRC}
|
||||
|
||||
@@ -150,7 +150,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol)
|
||||
break;
|
||||
|
||||
case UART_MODE_SBUS_TRAINER:
|
||||
auxSerialSetup(SBUS_BAUDRATE, false, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b
|
||||
auxSerialSetup(SBUS_BAUDRATE, true, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b
|
||||
AUX_SERIAL_POWER_ON();
|
||||
break;
|
||||
|
||||
@@ -238,10 +238,6 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void)
|
||||
#if defined(LUA) & !defined(CLI)
|
||||
if (luaRxFifo && auxSerialMode == UART_MODE_LUA)
|
||||
luaRxFifo->push(data);
|
||||
#endif
|
||||
#if !defined(BOOT)
|
||||
if (auxSerialMode == UART_MODE_SBUS_TRAINER)
|
||||
trainerSbusFifo.push(data);
|
||||
#endif
|
||||
}
|
||||
status = AUX_SERIAL_USART->SR;
|
||||
@@ -352,7 +348,7 @@ void aux2SerialInit(unsigned int mode, unsigned int protocol)
|
||||
break;
|
||||
|
||||
case UART_MODE_SBUS_TRAINER:
|
||||
aux2SerialSetup(SBUS_BAUDRATE, false, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b
|
||||
aux2SerialSetup(SBUS_BAUDRATE, true, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b
|
||||
AUX2_SERIAL_POWER_ON();
|
||||
break;
|
||||
|
||||
@@ -438,11 +434,6 @@ extern "C" void AUX2_SERIAL_USART_IRQHandler(void)
|
||||
if (luaRxFifo && aux2SerialMode == UART_MODE_LUA) {
|
||||
luaRxFifo->push(data);
|
||||
}
|
||||
#endif
|
||||
#if !defined(BOOT)
|
||||
if (aux2SerialMode == UART_MODE_SBUS_TRAINER) {
|
||||
trainerSbusFifo.push(data);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
status = AUX2_SERIAL_USART->SR;
|
||||
|
||||
@@ -54,28 +54,32 @@
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define USBD_VID 0x0483
|
||||
#define USBD_VID_STM 0x0483 // STM Vendor ID
|
||||
#define USBD_VID_PID_CODES 0x1209 // https://pid.codes
|
||||
|
||||
#define USBD_LANGID_STRING 0x409
|
||||
#define USBD_MANUFACTURER_STRING "OpenTX"
|
||||
#define USBD_SERIALNUMBER_FS_STRING "00000000001B"
|
||||
|
||||
|
||||
#if defined(BOOT)
|
||||
#define USBD_MSC_PRODUCT_FS_STRING USB_NAME " Bootloader"
|
||||
#else
|
||||
#define USBD_MSC_PRODUCT_FS_STRING USB_NAME " Mass Storage"
|
||||
#endif
|
||||
|
||||
#define USBD_MSC_VID USBD_VID_STM
|
||||
#define USBD_MSC_PID 0x5720
|
||||
#define USBD_MSC_CONFIGURATION_FS_STRING "MSC Config"
|
||||
#define USBD_MSC_INTERFACE_FS_STRING "MSC Interface"
|
||||
|
||||
#define USBD_HID_PID 0x5710
|
||||
#define USBD_HID_VID USBD_VID_PID_CODES
|
||||
#define USBD_HID_PID 0x4F54 // OpenTX assigned PID
|
||||
#define USBD_HID_PRODUCT_FS_STRING USB_NAME " Joystick"
|
||||
#define USBD_HID_CONFIGURATION_FS_STRING "HID Config"
|
||||
#define USBD_HID_INTERFACE_FS_STRING "HID Interface"
|
||||
|
||||
#define USBD_CDC_PID 0x5740 // do not change, this ID is used by the ST USB driver for Windows
|
||||
#define USBD_CDC_VID USBD_VID_STM
|
||||
#define USBD_CDC_PID 0x5740 // do not change, this ID is used by the ST USB driver for Windows
|
||||
#define USBD_CDC_PRODUCT_FS_STRING USB_NAME " Serial Port"
|
||||
#define USBD_CDC_CONFIGURATION_FS_STRING "VSP Config"
|
||||
#define USBD_CDC_INTERFACE_FS_STRING "VSP Interface"
|
||||
@@ -125,20 +129,29 @@ __ALIGN_BEGIN uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ] __ALIGN_END ; // modifi
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length)
|
||||
uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length)
|
||||
{
|
||||
int pid=0;
|
||||
int vid, pid;
|
||||
|
||||
switch (getSelectedUsbMode()) {
|
||||
case USB_JOYSTICK_MODE:
|
||||
vid = USBD_HID_VID;
|
||||
pid = USBD_HID_PID;
|
||||
break;
|
||||
|
||||
case USB_SERIAL_MODE:
|
||||
vid = USBD_CDC_VID;
|
||||
pid = USBD_CDC_PID;
|
||||
break;
|
||||
|
||||
case USB_MASS_STORAGE_MODE:
|
||||
vid = USBD_MSC_VID;
|
||||
pid = USBD_MSC_PID;
|
||||
break;
|
||||
|
||||
default:
|
||||
vid = 0;
|
||||
pid = 0;
|
||||
}
|
||||
|
||||
/* USB Standard Device Descriptor */
|
||||
@@ -152,10 +165,10 @@ uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length)
|
||||
0x00, /*bDeviceSubClass*/
|
||||
0x00, /*bDeviceProtocol*/
|
||||
USB_OTG_MAX_EP0_SIZE, /*bMaxPacketSize*/
|
||||
LOBYTE(USBD_VID), /*idVendor*/
|
||||
HIBYTE(USBD_VID), /*idVendor*/
|
||||
LOBYTE(pid), /*idVendor*/
|
||||
HIBYTE(pid), /*idVendor*/
|
||||
LOBYTE(vid), /*idVendor*/
|
||||
HIBYTE(vid), /*idVendor*/
|
||||
LOBYTE(pid), /*idVendor*/
|
||||
HIBYTE(pid), /*idVendor*/
|
||||
0x00, /*bcdDevice rel. 2.00*/
|
||||
0x02,
|
||||
USBD_IDX_MFC_STR, /*Index of manufacturer string*/
|
||||
|
||||
@@ -69,6 +69,7 @@ if (PCB STREQUAL X10)
|
||||
set(BLUETOOTH ON)
|
||||
add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT)
|
||||
add_definitions(-DRADIO_X10E)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
elseif (PCBREV STREQUAL T16)
|
||||
set(FLAVOUR t16)
|
||||
set(LUA_EXPORT lua_export_t16)
|
||||
@@ -76,6 +77,7 @@ if (PCB STREQUAL X10)
|
||||
add_definitions(-DRADIO_FAMILY_T16)
|
||||
option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" OFF)
|
||||
option(BLUETOOTH "Support for bluetooth module" OFF)
|
||||
add_definitions(-DMANUFACTURER_JUMPER)
|
||||
elseif (PCBREV STREQUAL TX16S)
|
||||
set(FLAVOUR tx16s)
|
||||
set(LUA_EXPORT lua_export_t16)
|
||||
@@ -89,6 +91,7 @@ if (PCB STREQUAL X10)
|
||||
set(DEFAULT_THEME "DARKBLUE")
|
||||
set(SBUS_TRAINER ON)
|
||||
set(AUX_SERIAL ON)
|
||||
add_definitions(-DMANUFACTURER_RADIOMASTER)
|
||||
if (NOT BLUETOOTH AND NOT INTERNAL_GPS)
|
||||
set(AUX2_SERIAL ON)
|
||||
endif()
|
||||
@@ -100,11 +103,13 @@ if (PCB STREQUAL X10)
|
||||
add_definitions(-DRADIO_FAMILY_T16)
|
||||
option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" ON)
|
||||
option(BLUETOOTH "Support for bluetooth module" OFF)
|
||||
add_definitions(-DMANUFACTURER_JUMPER)
|
||||
else()
|
||||
set(FLAVOUR x10)
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
|
||||
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF)
|
||||
set(BLUETOOTH ON)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
endif()
|
||||
elseif (PCB STREQUAL X12S)
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
|
||||
@@ -134,6 +139,7 @@ elseif (PCB STREQUAL X12S)
|
||||
set(FONTS_TARGET x12s_fonts)
|
||||
set(LCD_DRIVER lcd_driver.cpp)
|
||||
set(LUA_EXPORT lua_export_x12s)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
endif()
|
||||
|
||||
add_definitions(-DPCBREV=${PCBREV})
|
||||
|
||||
@@ -637,7 +637,11 @@ void sportUpdatePowerInit();
|
||||
#endif
|
||||
|
||||
// Aux serial port driver
|
||||
#define DEBUG_BAUDRATE 115200
|
||||
#if defined(RADIO_TX16S)
|
||||
#define DEBUG_BAUDRATE 400000
|
||||
#else
|
||||
#define DEBUG_BAUDRATE 115200
|
||||
#endif
|
||||
#if defined(AUX_SERIAL_GPIO)
|
||||
extern uint8_t auxSerialMode;
|
||||
void auxSerialInit(unsigned int mode, unsigned int protocol);
|
||||
@@ -711,6 +715,7 @@ void bluetoothDisable();
|
||||
extern DMAFifo<512> telemetryFifo;
|
||||
typedef DMAFifo<32> AuxSerialRxFifo;
|
||||
extern AuxSerialRxFifo auxSerialRxFifo;
|
||||
extern AuxSerialRxFifo aux2SerialRxFifo;
|
||||
extern volatile uint32_t externalModulePort;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -160,9 +160,16 @@ extern "C" void TRAINER_TIMER_IRQHandler()
|
||||
int sbusGetByte(uint8_t * byte)
|
||||
{
|
||||
switch (currentTrainerMode) {
|
||||
#if defined(AUX_SERIAL)
|
||||
#if defined(AUX_SERIAL) || defined(AUX2_SERIAL)
|
||||
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
||||
return trainerSbusFifo.pop(*byte);
|
||||
#if defined(AUX_SERIAL)
|
||||
if (auxSerialMode == UART_MODE_SBUS_TRAINER)
|
||||
return auxSerialRxFifo.pop(*byte);
|
||||
#endif
|
||||
#if defined(AUX2_SERIAL)
|
||||
if (aux2SerialMode == UART_MODE_SBUS_TRAINER)
|
||||
return aux2SerialRxFifo.pop(*byte);
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
return false;
|
||||
|
||||
@@ -42,6 +42,8 @@ char * main_thread_error = nullptr;
|
||||
bool simu_shutdown = false;
|
||||
bool simu_running = false;
|
||||
|
||||
uint32_t telemetryErrors = 0;
|
||||
|
||||
#if defined(STM32)
|
||||
GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpioi, gpioj;
|
||||
TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10;
|
||||
@@ -470,6 +472,47 @@ void sportUpdatePowerInit()
|
||||
{
|
||||
}
|
||||
|
||||
void telemetryPortSetDirectionInput()
|
||||
{
|
||||
}
|
||||
|
||||
void telemetryPortSetDirectionOutput()
|
||||
{
|
||||
}
|
||||
|
||||
void rxPdcUsart( void (*pChProcess)(uint8_t x) )
|
||||
{
|
||||
}
|
||||
|
||||
void telemetryPortInit(uint32_t baudrate, uint8_t mode)
|
||||
{
|
||||
}
|
||||
|
||||
bool telemetryGetByte(uint8_t * byte)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void telemetryClearFifo()
|
||||
{
|
||||
}
|
||||
|
||||
void telemetryPortInvertedInit(uint32_t baudrate)
|
||||
{
|
||||
}
|
||||
|
||||
void sportSendByte(uint8_t byte)
|
||||
{
|
||||
}
|
||||
|
||||
void sportSendBuffer(const uint8_t * buffer, uint32_t count)
|
||||
{
|
||||
}
|
||||
|
||||
void check_telemetry_exti()
|
||||
{
|
||||
}
|
||||
|
||||
void boardInit()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -125,9 +125,13 @@ set(FIRMWARE_TARGET_SRC
|
||||
MEDSdcard.c
|
||||
)
|
||||
|
||||
set(FIRMWARE_TARGET_SRC
|
||||
${FIRMWARE_TARGET_SRC}
|
||||
telemetry_driver.cpp
|
||||
)
|
||||
|
||||
set(TARGET_SRC
|
||||
${TARGET_SRC}
|
||||
telemetry_driver.cpp
|
||||
adc_driver.cpp
|
||||
pulses_driver.cpp
|
||||
audio_driver.cpp
|
||||
|
||||
@@ -399,10 +399,8 @@ void debugPutc(const char c);
|
||||
|
||||
// Telemetry driver
|
||||
void telemetryPortInit(uint32_t baudrate, uint8_t mode);
|
||||
inline void telemetryPortSetDirectionOutput()
|
||||
{
|
||||
}
|
||||
uint32_t telemetryTransmitPending();
|
||||
void telemetryPortSetDirectionOutput();
|
||||
void telemetryPortSetDirectionInput();
|
||||
void telemetryTransmitBuffer(const uint8_t * buffer, uint32_t size);
|
||||
void rxPdcUsart( void (*pChProcess)(uint8_t x) );
|
||||
void sportSendBuffer(const uint8_t * buffer, uint32_t size);
|
||||
|
||||
@@ -93,10 +93,8 @@ void startPdcUsartReceive()
|
||||
{
|
||||
Usart *pUsart = SECOND_USART;
|
||||
TelemetryInBuffer.outPtr = TelemetryInBuffer.fifo ;
|
||||
#ifndef SIMU
|
||||
pUsart->US_RPR = (uint32_t)TelemetryInBuffer.fifo ;
|
||||
pUsart->US_RNPR = (uint32_t)TelemetryInBuffer.fifo ;
|
||||
#endif
|
||||
pUsart->US_RCR = RX_UART_BUFFER_SIZE ;
|
||||
pUsart->US_RNCR = RX_UART_BUFFER_SIZE ;
|
||||
pUsart->US_PTCR = US_PTCR_RXTEN ;
|
||||
@@ -104,7 +102,6 @@ void startPdcUsartReceive()
|
||||
|
||||
void rxPdcUsart( void (*pChProcess)(uint8_t x) )
|
||||
{
|
||||
#if !defined(SIMU)
|
||||
Usart *pUsart = SECOND_USART;
|
||||
uint8_t *ptr ;
|
||||
uint8_t *endPtr ;
|
||||
@@ -132,7 +129,6 @@ void rxPdcUsart( void (*pChProcess)(uint8_t x) )
|
||||
pUsart->US_RNPR = (uint32_t)TelemetryInBuffer.fifo ;
|
||||
pUsart->US_RNCR = RX_UART_BUFFER_SIZE ;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
uint32_t txPdcUsart(const uint8_t * buffer, uint32_t size)
|
||||
@@ -140,9 +136,7 @@ uint32_t txPdcUsart(const uint8_t * buffer, uint32_t size)
|
||||
Usart * pUsart = SECOND_USART;
|
||||
|
||||
if (pUsart->US_TNCR == 0) {
|
||||
#ifndef SIMU
|
||||
pUsart->US_TNPR = (uint32_t)buffer ;
|
||||
#endif
|
||||
pUsart->US_TNCR = size ;
|
||||
pUsart->US_PTCR = US_PTCR_TXTEN ;
|
||||
return 1 ;
|
||||
@@ -150,6 +144,7 @@ uint32_t txPdcUsart(const uint8_t * buffer, uint32_t size)
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
/*
|
||||
uint32_t telemetryTransmitPending()
|
||||
{
|
||||
Usart *pUsart = SECOND_USART;
|
||||
@@ -164,13 +159,20 @@ uint32_t telemetryTransmitPending()
|
||||
|
||||
return x ;
|
||||
}
|
||||
*/
|
||||
|
||||
void telemetryPortSetDirectionOutput()
|
||||
{
|
||||
}
|
||||
|
||||
void telemetryPortSetDirectionInput()
|
||||
{
|
||||
}
|
||||
|
||||
void telemetryPortInit(uint32_t baudrate, uint8_t mode)
|
||||
{
|
||||
#if !defined(SIMU)
|
||||
UART2_Configure(baudrate, Master_frequency, mode);
|
||||
startPdcUsartReceive();
|
||||
#endif
|
||||
}
|
||||
|
||||
void sportSendBuffer(const uint8_t * buffer, uint32_t size)
|
||||
|
||||
@@ -2,7 +2,7 @@ option(SHUTDOWN_CONFIRMATION "Shutdown confirmation" OFF)
|
||||
option(LCD_DUAL_BUFFER "Dual LCD Buffer" OFF)
|
||||
option(PXX1 "PXX1 protocol support" ON)
|
||||
option(PXX2 "PXX2 protocol support" OFF)
|
||||
option(AFHDS3 "AFHDS3 TX Module" OFF)
|
||||
option(AFHDS3 "AFHDS3 TX Module" ON)
|
||||
option(GHOST "Ghost TX Module" ON)
|
||||
option(INTERNAL_MODULE_PPM "Support for PPM internal module" OFF)
|
||||
option(AUTOUPDATE "Auto update internal chips from SD" OFF)
|
||||
@@ -43,6 +43,7 @@ if(PCB STREQUAL X9E)
|
||||
set(STATUS_LEDS NO)
|
||||
set(BLUETOOTH YES)
|
||||
set(ROTARY_ENCODER YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
elseif(PCB STREQUAL X9D+)
|
||||
set(HAPTIC YES)
|
||||
set(LUA_EXPORT lua_export_x9d)
|
||||
@@ -56,7 +57,9 @@ elseif(PCB STREQUAL X9D+)
|
||||
set(LCD_DRIVER lcd_driver_spi.cpp)
|
||||
set(GVAR_SCREEN model_gvars.cpp)
|
||||
set(PCBREV 2014 CACHE STRING "PCB Revision")
|
||||
set(AFHDS3 NO)
|
||||
add_definitions(-DPCBREV=${PCBREV})
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
if (${PCBREV} STREQUAL 2019)
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF)
|
||||
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON)
|
||||
@@ -108,6 +111,8 @@ elseif(PCB STREQUAL X9D)
|
||||
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
|
||||
set(GVAR_SCREEN model_gvars.cpp)
|
||||
set(STATUS_LEDS NO)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
set(AFHDS3 NO)
|
||||
elseif(PCB STREQUAL X7)
|
||||
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
|
||||
set(HAPTIC YES)
|
||||
@@ -140,8 +145,10 @@ elseif(PCB STREQUAL X7)
|
||||
set(ROTARY_ENCODER YES)
|
||||
set(LUA_EXPORT lua_export_tx12)
|
||||
set(BLUETOOTH NO)
|
||||
set(USB_CHARGER YES)
|
||||
add_definitions(-DRADIO_TX12)
|
||||
add_definitions(-DEEPROM_VARIANT=0x4002)
|
||||
add_definitions(-DMANUFACTURER_RADIOMASTER)
|
||||
elseif(PCBREV STREQUAL ACCESS)
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF)
|
||||
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON)
|
||||
@@ -166,6 +173,7 @@ elseif(PCB STREQUAL X7)
|
||||
set(BLUETOOTH YES)
|
||||
set(ROTARY_ENCODER YES)
|
||||
set(INTERNAL_MODULE_SERIAL YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
else()
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
|
||||
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF)
|
||||
@@ -180,6 +188,7 @@ elseif(PCB STREQUAL X7)
|
||||
set(BLUETOOTH YES)
|
||||
add_definitions(-DBLUETOOTH_PROBE)
|
||||
set(ROTARY_ENCODER YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
if(DEFINED PCBREV_HARDCODED)
|
||||
# This *can* be used to prevent messing with PA14 (SWCLK), so stlink can be used
|
||||
# without interruptions.
|
||||
@@ -215,6 +224,7 @@ elseif(PCB STREQUAL X9LITE)
|
||||
set(STATUS_LEDS YES)
|
||||
set(ROTARY_ENCODER YES)
|
||||
set(INTERNAL_MODULE_SERIAL YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
elseif(PCB STREQUAL X9LITES)
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF)
|
||||
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON)
|
||||
@@ -242,6 +252,7 @@ elseif(PCB STREQUAL X9LITES)
|
||||
set(BLUETOOTH YES)
|
||||
set(ROTARY_ENCODER YES)
|
||||
set(INTERNAL_MODULE_SERIAL YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
elseif(PCB STREQUAL XLITE)
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
|
||||
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF)
|
||||
@@ -267,6 +278,7 @@ elseif(PCB STREQUAL XLITE)
|
||||
set(STATUS_LEDS YES)
|
||||
set(BLUETOOTH YES)
|
||||
set(INTERNAL_MODULE_SERIAL YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
elseif(PCB STREQUAL XLITES)
|
||||
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF)
|
||||
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON)
|
||||
@@ -293,6 +305,7 @@ elseif(PCB STREQUAL XLITES)
|
||||
set(BLUETOOTH YES)
|
||||
set(GYRO YES)
|
||||
set(INTERNAL_MODULE_SERIAL YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
endif()
|
||||
|
||||
if(NOT PCB STREQUAL PCBXLITE)
|
||||
@@ -334,6 +347,11 @@ if(ROTARY_ENCODER)
|
||||
)
|
||||
endif()
|
||||
|
||||
if(USB_CHARGER)
|
||||
set(TARGET_SRC ${TARGET_SRC} usb_charger_driver.cpp)
|
||||
add_definitions(-DUSB_CHARGER)
|
||||
endif()
|
||||
|
||||
if(BLUETOOTH)
|
||||
add_definitions(-DBLUETOOTH)
|
||||
set(TARGET_SRC
|
||||
|
||||
@@ -92,7 +92,8 @@ void boardInit()
|
||||
TRAINER_RCC_AHB1Periph |
|
||||
TRAINER_MODULE_RCC_AHB1Periph |
|
||||
BT_RCC_AHB1Periph |
|
||||
GYRO_RCC_AHB1Periph,
|
||||
GYRO_RCC_AHB1Periph |
|
||||
USB_CHARGER_RCC_AHB1Periph,
|
||||
ENABLE);
|
||||
|
||||
RCC_APB1PeriphClockCmd(ROTARY_ENCODER_RCC_APB1Periph |
|
||||
@@ -193,6 +194,10 @@ void boardInit()
|
||||
toplcdInit();
|
||||
#endif
|
||||
|
||||
#if defined(USB_CHARGER)
|
||||
usbChargerInit();
|
||||
#endif
|
||||
|
||||
if (HAS_SPORT_UPDATE_CONNECTOR()) {
|
||||
sportUpdateInit();
|
||||
}
|
||||
|
||||
@@ -863,6 +863,10 @@ void bluetoothDisable();
|
||||
#define IS_BLUETOOTH_CHIP_PRESENT() (true)
|
||||
#endif
|
||||
|
||||
// USB Charger
|
||||
void usbChargerInit();
|
||||
bool usbChargerLed();
|
||||
|
||||
// LED driver
|
||||
void ledInit();
|
||||
void ledOff();
|
||||
|
||||
@@ -37,7 +37,8 @@ void extmoduleStop()
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
||||
GPIO_Init(EXTMODULE_USART_GPIO, &GPIO_InitStructure);
|
||||
|
||||
GPIO_ResetBits(EXTMODULE_USART_GPIO, EXTMODULE_TX_GPIO_PIN | EXTMODULE_RX_GPIO_PIN);
|
||||
// TX and RX are inverted, we set it to HIGH
|
||||
GPIO_SetBits(EXTMODULE_USART_GPIO, EXTMODULE_TX_GPIO_PIN | EXTMODULE_RX_GPIO_PIN);
|
||||
#endif
|
||||
|
||||
EXTMODULE_TIMER->DIER &= ~(TIM_DIER_CC2IE | TIM_DIER_UDE);
|
||||
|
||||
@@ -1248,29 +1248,6 @@
|
||||
#define EXTMODULE_USART_TX_DMA_STREAM DMA2_Stream6
|
||||
#define EXTMODULE_USART_RX_DMA_CHANNEL DMA_Channel_5
|
||||
#define EXTMODULE_USART_RX_DMA_STREAM DMA2_Stream1
|
||||
#elif defined(RADIO_X9DP2019)
|
||||
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
|
||||
#define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6)
|
||||
#define EXTMODULE_PWR_GPIO GPIOD
|
||||
#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
|
||||
#define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
|
||||
#define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
|
||||
#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
||||
#define EXTMODULE_TX_GPIO GPIOC
|
||||
#define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 // PC.07
|
||||
#define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource7
|
||||
#define EXTMODULE_TIMER TIM8
|
||||
#define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH2
|
||||
#define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn
|
||||
#define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler
|
||||
#define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7 // TIM8_UP
|
||||
#define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1 // TIM8_UP
|
||||
#define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn
|
||||
#define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler
|
||||
#define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1
|
||||
#define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E
|
||||
#define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC2NP
|
||||
#define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
|
||||
#else
|
||||
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
|
||||
#define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8
|
||||
@@ -1454,6 +1431,16 @@
|
||||
#define PCBREV_RCC_AHB1Periph 0
|
||||
#endif
|
||||
|
||||
|
||||
// USB Charger
|
||||
#if defined(USB_CHARGER)
|
||||
#define USB_CHARGER_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
|
||||
#define USB_CHARGER_GPIO GPIOB
|
||||
#define USB_CHARGER_GPIO_PIN GPIO_Pin_5 // PB.05
|
||||
#else
|
||||
#define USB_CHARGER_RCC_AHB1Periph 0
|
||||
#endif
|
||||
|
||||
// S.Port update connector
|
||||
#if defined(PCBXLITE)
|
||||
#define SPORT_MAX_BAUDRATE 250000 // not tested
|
||||
@@ -1469,7 +1456,7 @@
|
||||
#define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03
|
||||
#define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
|
||||
#define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
|
||||
#elif defined(PCBX7)
|
||||
#elif defined(RADIO_X7)
|
||||
#define SPORT_MAX_BAUDRATE 250000 // < 400000
|
||||
#define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
|
||||
#define SPORT_UPDATE_PWR_GPIO GPIOB
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (C) OpenTX
|
||||
*
|
||||
* Based on code named
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
|
||||
void usbChargerInit()
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
GPIO_InitStructure.GPIO_Pin = USB_CHARGER_GPIO_PIN;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
||||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
||||
GPIO_Init(USB_CHARGER_GPIO, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
bool usbChargerLed()
|
||||
{
|
||||
return (GPIO_ReadInputDataBit(USB_CHARGER_GPIO, USB_CHARGER_GPIO_PIN) == Bit_RESET && usbPlugged());
|
||||
}
|
||||
@@ -192,11 +192,10 @@ void processGhostTelemetryFrame()
|
||||
{
|
||||
GhostMenuFrame * packet;
|
||||
GhostMenuData * lineData;
|
||||
|
||||
packet = (GhostMenuFrame * ) telemetryRxBuffer;
|
||||
lineData = (GhostMenuData *) &reusableBuffer.ghostMenu.line[packet->lineIndex];
|
||||
lineData->splitLine = 0;
|
||||
reusableBuffer.ghostMenu.menuAction = packet->menuFlags;
|
||||
reusableBuffer.ghostMenu.menuStatus = packet->menuStatus;
|
||||
lineData->lineFlags = packet->lineFlags;
|
||||
for (uint8_t i = 0; i < GHST_MENU_CHARS; i++) {
|
||||
if (packet->menuText[i] == 0x7C) {
|
||||
@@ -208,8 +207,6 @@ void processGhostTelemetryFrame()
|
||||
}
|
||||
}
|
||||
lineData->menuText[GHST_MENU_CHARS] = '\0';
|
||||
if (packet->lineIndex == GHST_MENU_LINES - 1)
|
||||
lineData->menuUpdateNeeded = true;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -142,6 +142,13 @@ enum GhostMenuControl
|
||||
GHST_MENU_CTRL_REDRAW = 0X04,
|
||||
};
|
||||
|
||||
enum GhostMenuStatus
|
||||
{
|
||||
GHST_MENU_STATUS_UNOPENED = 0x00,
|
||||
GHST_MENU_STATUS_OPENED = 0x01,
|
||||
GHST_MENU_STATUS_CLOSING = 0x02,
|
||||
};
|
||||
|
||||
enum GhostFrames
|
||||
{
|
||||
GHST_FRAME_CHANNEL,
|
||||
@@ -157,8 +164,8 @@ struct GhostMenuFrame
|
||||
uint8_t address;
|
||||
uint8_t length ;
|
||||
uint8_t packetId;
|
||||
uint8_t menuFlags; // GHST_MENU_CTRL
|
||||
uint8_t lineFlags; // Carat states, Inverse, Bold for each of Menu Label, and Value
|
||||
uint8_t menuStatus; // GhostMenuStatus
|
||||
uint8_t lineFlags; // GhostLineFlags
|
||||
uint8_t lineIndex; // 0 = first line
|
||||
unsigned char menuText[GHST_MENU_CHARS];
|
||||
uint8_t crc;
|
||||
@@ -166,9 +173,9 @@ struct GhostMenuFrame
|
||||
|
||||
struct GhostMenuData
|
||||
{
|
||||
uint8_t menuFlags; // Update Line, Clear Menu, etc.
|
||||
uint8_t menuStatus; // Update Line, Clear Menu, etc.
|
||||
uint8_t lineFlags; // Carat states, Inverse, Bold for each of Menu Label, and Value
|
||||
uint8_t splitLine; // Store beginning of Value substring
|
||||
char menuText[GHST_MENU_CHARS + 1];
|
||||
uint8_t menuUpdateNeeded;
|
||||
};
|
||||
|
||||
|
||||
@@ -288,6 +288,7 @@ void telemetryInit(uint8_t protocol)
|
||||
#if defined(LUA)
|
||||
outputTelemetryBuffer.reset();
|
||||
#endif
|
||||
telemetryPortSetDirectionInput();
|
||||
}
|
||||
else if (protocol == PROTOCOL_TELEMETRY_SPEKTRUM) {
|
||||
// Spektrum's own small race RX (SPM4648) uses 125000 8N1, use the same since there is no real standard
|
||||
@@ -322,7 +323,7 @@ void telemetryInit(uint8_t protocol)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(AFHDS3) && !defined(SIMU)
|
||||
#if defined(AFHDS3)
|
||||
else if (protocol == PROTOCOL_TELEMETRY_AFHDS3) {
|
||||
telemetryPortInvertedInit(AFHDS3_BAUDRATE);
|
||||
telemetryPortSetDirectionInput();
|
||||
|
||||
@@ -339,6 +339,106 @@ TEST_F(TrimsTest, CopySticksToOffset)
|
||||
EXPECT_EQ(g_model.limitData[1].offset, -97);
|
||||
}
|
||||
|
||||
TEST_F(TrimsTest, MoveTrimsToOffsets)
|
||||
{
|
||||
// No trim idle only
|
||||
g_model.thrTrim = 0;
|
||||
anaInValues[THR_STICK] = 0;
|
||||
setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, 100);
|
||||
setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, -100);
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], 200); // THR output value is reflecting 100 trim
|
||||
moveTrimsToOffsets();
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 0); // back to neutral
|
||||
EXPECT_EQ(g_model.limitData[2].offset, 195); // value transferred
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 0); // back to neutral
|
||||
EXPECT_EQ(g_model.limitData[1].offset, -195); // value transferred
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], 200); // THR output value is still reflecting 100 trim
|
||||
}
|
||||
|
||||
TEST_F(TrimsTest, MoveTrimsToOffsetsWithTrimIdle)
|
||||
{
|
||||
// Trim idle only
|
||||
g_model.thrTrim = 1;
|
||||
anaInValues[THR_STICK] = -1024; // Min stick
|
||||
g_model.limitData[2].offset = 0;
|
||||
g_model.limitData[1].offset = 0;
|
||||
setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, 100);
|
||||
setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, -100);
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], -574); // THR output value is reflecting 100 trim idle
|
||||
moveTrimsToOffsets();
|
||||
|
||||
// Trim affecting Throttle should not be affected
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 100); // unchanged
|
||||
EXPECT_EQ(g_model.limitData[2].offset, 0); // unchanged
|
||||
|
||||
// Other trims should
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 0); // back to neutral
|
||||
EXPECT_EQ(g_model.limitData[1].offset, -195); // value transferred
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], -574); // THR output value is still reflecting 100 trim idle
|
||||
}
|
||||
|
||||
TEST_F(TrimsTest, MoveTrimsToOffsetsWithCrossTrims)
|
||||
{
|
||||
// No trim idle only
|
||||
// Cross trims
|
||||
g_model.thrTrim = 0;
|
||||
g_model.limitData[2].offset = 0;
|
||||
g_model.limitData[1].offset = 0;
|
||||
g_model.thrTrimSw = MIXSRC_TrimEle - MIXSRC_FIRST_TRIM;
|
||||
ExpoData *expo = expoAddress(THR_STICK);
|
||||
expo->carryTrim = TRIM_ELE;
|
||||
expo = expoAddress(ELE_STICK);
|
||||
expo->carryTrim = TRIM_THR;
|
||||
|
||||
anaInValues[THR_STICK] = 0;
|
||||
setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 100);
|
||||
setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, -100);
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], 200); // THR output value is reflecting 100 Ele trim
|
||||
moveTrimsToOffsets();
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], 200); // THR output value remains unchanged
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 0); // back to neutral
|
||||
EXPECT_EQ(g_model.limitData[2].offset, 195); // value transferred
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 0); // back to neutral
|
||||
EXPECT_EQ(g_model.limitData[1].offset, -195); // value transferred
|
||||
}
|
||||
|
||||
TEST_F(TrimsTest, MoveTrimsToOffsetsWithCrosstrimsAndTrimIdle)
|
||||
{
|
||||
// Trim idle only
|
||||
// Cross trims
|
||||
g_model.limitData[2].offset = 0;
|
||||
g_model.limitData[1].offset = 0;
|
||||
g_model.thrTrim = 1;
|
||||
g_model.thrTrimSw = MIXSRC_TrimEle - MIXSRC_FIRST_TRIM;
|
||||
ExpoData *expo = expoAddress(THR_STICK);
|
||||
expo->carryTrim = TRIM_ELE;
|
||||
expo = expoAddress(ELE_STICK);
|
||||
expo->carryTrim = TRIM_THR;
|
||||
|
||||
anaInValues[THR_STICK] = -1024; // Min stick
|
||||
setTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM, 100);
|
||||
setTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM, -100);
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], -574); // THR output value is reflecting 100 ele trim idle
|
||||
moveTrimsToOffsets();
|
||||
|
||||
// Trim affecting Throttle (now Ele because of crosstrims) should not be affected
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimEle - MIXSRC_FIRST_TRIM), 100); // unchanged
|
||||
EXPECT_EQ(g_model.limitData[2].offset, 0); // THR chan offset unchanged
|
||||
|
||||
// Other trims should
|
||||
EXPECT_EQ(getTrimValue(0, MIXSRC_TrimThr - MIXSRC_FIRST_TRIM), 0); // back to neutral
|
||||
EXPECT_EQ(g_model.limitData[1].offset, -195); // Ele chan offset transfered
|
||||
evalMixes(1);
|
||||
EXPECT_EQ(channelOutputs[2], -574); // THR output value is still reflecting 100 trim idle
|
||||
}
|
||||
|
||||
TEST_F(TrimsTest, InstantTrim)
|
||||
{
|
||||
anaInValues[AIL_STICK] = 50;
|
||||
|
||||
@@ -106,7 +106,7 @@ TEST(evalLogicalSwitches, playFile)
|
||||
char filename[AUDIO_FILENAME_MAXLEN+1];
|
||||
|
||||
//#if defined(EEPROM)
|
||||
#define MODELNAME "MODEL01"
|
||||
#define MODELNAME TR_MODEL "01"
|
||||
/*#else
|
||||
#define MODELNAME "Model00"
|
||||
#endif*/
|
||||
|
||||
Vendored
+1
-1
Submodule radio/src/thirdparty/libopenui updated: f84ff26497...55d511c0de
+11
-8
@@ -26,8 +26,8 @@ uint8_t currentTrainerMode = 0xff;
|
||||
|
||||
void checkTrainerSignalWarning()
|
||||
{
|
||||
enum PpmInValidState_t {
|
||||
PPM_IN_IS_NOT_USED=0,
|
||||
enum {
|
||||
PPM_IN_IS_NOT_USED = 0,
|
||||
PPM_IN_IS_VALID,
|
||||
PPM_IN_INVALID
|
||||
};
|
||||
@@ -137,17 +137,20 @@ void checkTrainerSettings()
|
||||
#if defined(TRAINER_BATTERY_COMPARTMENT)
|
||||
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
|
||||
#if defined(AUX_SERIAL)
|
||||
if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER)
|
||||
if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) {
|
||||
auxSerialSbusInit();
|
||||
else
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(AUX2_SERIAL)
|
||||
if (g_eeGeneral.aux2SerialMode == UART_MODE_SBUS_TRAINER)
|
||||
if (g_eeGeneral.aux2SerialMode == UART_MODE_SBUS_TRAINER) {
|
||||
aux2SerialSbusInit();
|
||||
else
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
init_trainer_capture();
|
||||
break;
|
||||
|
||||
// no break
|
||||
#endif
|
||||
|
||||
case TRAINER_MODE_MASTER_TRAINER_JACK:
|
||||
|
||||
@@ -136,6 +136,7 @@ const char STR_REFRESHRATE[] = TR_REFRESHRATE;
|
||||
const char STR_MS[] = TR_MS;
|
||||
const char STR_SWITCH[] = TR_SWITCH;
|
||||
const char STR_TRIMS[] = TR_TRIMS;
|
||||
const char STR_MIRROR[] = TR_MIRROR;
|
||||
const char STR_FADEIN[] = TR_FADEIN;
|
||||
const char STR_FADEOUT[] = TR_FADEOUT;
|
||||
const char STR_DEFAULT[] = TR_DEFAULT;
|
||||
@@ -190,6 +191,8 @@ const char STR_MINUTEBEEP[] = TR_MINUTEBEEP;
|
||||
const char STR_BEEPCOUNTDOWN[] = TR_BEEPCOUNTDOWN;
|
||||
const char STR_PERSISTENT[] = TR_PERSISTENT;
|
||||
const char STR_BACKLIGHT_LABEL[] = TR_BACKLIGHT_LABEL;
|
||||
const char STR_GHOST_MENU_LABEL[] = TR_GHOST_MENU_LABEL;
|
||||
const char STR_BLDELAY[] = TR_BLDELAY;
|
||||
const char STR_RXCHANNELORD[] = TR_RXCHANNELORD;
|
||||
const char STR_STICKS[] = TR_STICKS;
|
||||
const char STR_POTS[] = TR_POTS;
|
||||
@@ -377,6 +380,7 @@ const char STR_SPECTRUM_ANALYSER_EXT[] = TR_SPECTRUM_ANALYSER_EXT;
|
||||
const char STR_SPECTRUM_ANALYSER_INT[] = TR_SPECTRUM_ANALYSER_INT;
|
||||
const char STR_WAITING_FOR_RX[] = TR_WAITING_FOR_RX;
|
||||
const char STR_WAITING_FOR_TX[] = TR_WAITING_FOR_TX;
|
||||
const char STR_WAITING_FOR_MODULE[] = TR_WAITING_FOR_MODULE;
|
||||
const char STR_WARN_5VOLTS[] = TR_WARN_5VOLTS;
|
||||
const char STR_CAT_NOT_EMPTY[] = TR_CAT_NOT_EMPTY;
|
||||
const char STR_WARNING[] = TR_WARNING;
|
||||
@@ -456,6 +460,7 @@ const char STR_FLASH_INTERNAL_MODULE[] = TR_FLASH_INTERNAL_MODULE;
|
||||
const char STR_FLASH_INTERNAL_MULTI[] = TR_FLASH_INTERNAL_MULTI;
|
||||
const char STR_FLASH_EXTERNAL_MODULE[] = TR_FLASH_EXTERNAL_MODULE;
|
||||
const char STR_FLASH_EXTERNAL_MULTI[] = TR_FLASH_EXTERNAL_MULTI;
|
||||
const char STR_FLASH_EXTERNAL_ELRS[] = TR_FLASH_EXTERNAL_ELRS;
|
||||
const char STR_FIRMWARE_UPDATE_ERROR[] = TR_FIRMWARE_UPDATE_ERROR;
|
||||
const char STR_FIRMWARE_UPDATE_SUCCESS[] = TR_FIRMWARE_UPDATE_SUCCESS;
|
||||
const char STR_WRITING[] = TR_WRITING;
|
||||
@@ -673,7 +678,6 @@ const char STR_MAX[] = TR_MAX;
|
||||
const char STR_INVERTED[] = TR_INVERTED;
|
||||
const char STR_CURVE_PRESET[] = TR_CURVE_PRESET;
|
||||
const char STR_PRESET[] = TR_PRESET;
|
||||
const char STR_MIRROR[] = TR_MIRROR;
|
||||
const char STR_CLEAR[] = TR_CLEAR;
|
||||
const char STR_RESET[] = TR_RESET;
|
||||
const char STR_COUNT[] = TR_COUNT;
|
||||
@@ -875,6 +879,8 @@ const char STR_DELETE_ERROR[] = TR_DELETE_ERROR;
|
||||
const char STR_SDCARD_ERROR[] = TR_SDCARD_ERROR;
|
||||
#define STR_SDCARD TR_SDCARD
|
||||
#define STR_NO_FILES_ON_SD TR_NO_FILES_ON_SD
|
||||
#define STR_EDIT TR_EDIT
|
||||
#define STR_CLEAR TR_CLEAR
|
||||
const char STR_NO_SDCARD[] = TR_NO_SDCARD;
|
||||
const char STR_SDCARD_FULL[] = TR_SDCARD_FULL;
|
||||
const char STR_INCOMPATIBLE[] = TR_INCOMPATIBLE;
|
||||
|
||||
@@ -235,6 +235,7 @@ extern const char STR_REFRESHRATE[];
|
||||
extern const char STR_MS[];
|
||||
extern const char STR_SWITCH[];
|
||||
extern const char STR_TRIMS[];
|
||||
extern const char STR_MIRROR[];
|
||||
extern const char STR_FADEIN[];
|
||||
extern const char STR_FADEOUT[];
|
||||
extern const char STR_DEFAULT[];
|
||||
@@ -309,6 +310,8 @@ extern const char STR_MINUTEBEEP[];
|
||||
extern const char STR_BEEPCOUNTDOWN[];
|
||||
extern const char STR_PERSISTENT[];
|
||||
extern const char STR_BACKLIGHT_LABEL[];
|
||||
extern const char STR_GHOST_MENU_LABEL[];
|
||||
extern const char STR_BLDELAY[];
|
||||
|
||||
#if defined(PWM_BACKLIGHT) || defined(COLORLCD)
|
||||
extern const char STR_BLONBRIGHTNESS[];
|
||||
@@ -565,6 +568,7 @@ extern const char STR_SPECTRUM_ANALYSER_EXT[];
|
||||
extern const char STR_SPECTRUM_ANALYSER_INT[];
|
||||
extern const char STR_WAITING_FOR_RX[];
|
||||
extern const char STR_WAITING_FOR_TX[];
|
||||
extern const char STR_WAITING_FOR_MODULE[];
|
||||
extern const char STR_WARN_5VOLTS[];
|
||||
|
||||
extern const char STR_BACKUP_MODEL[];
|
||||
@@ -695,6 +699,7 @@ extern const char STR_FLASH_INTERNAL_MODULE[];
|
||||
extern const char STR_FLASH_INTERNAL_MULTI[];
|
||||
extern const char STR_FLASH_EXTERNAL_MODULE[];
|
||||
extern const char STR_FLASH_EXTERNAL_MULTI[];
|
||||
extern const char STR_FLASH_EXTERNAL_ELRS[];
|
||||
extern const char STR_FIRMWARE_UPDATE_ERROR[];
|
||||
extern const char STR_FIRMWARE_UPDATE_SUCCESS[];
|
||||
extern const char STR_WRITING[];
|
||||
@@ -983,7 +988,6 @@ extern const char STR_MAX[];
|
||||
extern const char STR_INVERTED[];
|
||||
extern const char STR_CURVE_PRESET[];
|
||||
extern const char STR_PRESET[];
|
||||
extern const char STR_MIRROR[];
|
||||
extern const char STR_CLEAR[];
|
||||
extern const char STR_RESET[];
|
||||
extern const char STR_COUNT[];
|
||||
|
||||
@@ -538,8 +538,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT"Odpočet"
|
||||
#define TR_PERSISTENT INDENT"Trvalé"
|
||||
#define TR_BACKLIGHT_LABEL "Podsvětlení"
|
||||
#define TR_BLONBRIGHTNESS TR3("Jas Zap.", "Jas Zap.", "Jas zapnutého LCD")
|
||||
#define TR_BLOFFBRIGHTNESS TR3("Jas Vyp.", "Jas Vyp.", "Jas vypnutého LCD")
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT"Zhasnout po"
|
||||
#define TR_BLONBRIGHTNESS TR3(INDENT"Jas Zap.", INDENT"Jas Zap.", INDENT"Jas zapnutého LCD")
|
||||
#define TR_BLOFFBRIGHTNESS TR3(INDENT"Jas Vyp.", INDENT"Jas Vyp.", INDENT"Jas vypnutého LCD")
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Barva"
|
||||
#define TR_SPLASHSCREEN TR("úvodní logo", "Zobrazit úvodní logo")
|
||||
@@ -727,6 +729,7 @@
|
||||
#define TR_NO_SDCARD "Není SD karta"
|
||||
#define TR_WAITING_FOR_RX "Čekám na RX..."
|
||||
#define TR_WAITING_FOR_TX "Čekám na TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS TR("Nejsou k dispozici", "Žádné nástroje k dispozici")
|
||||
#define TR_NORMAL "Normální"
|
||||
#define TR_NOT_INVERTED "Neinvert"
|
||||
@@ -869,6 +872,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE TR("Flash ext. modulu", "Flash externího zařízení")
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("Chyba zápisu FW", "Chyba zápisu firmware")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Úspěšný zápis FW"
|
||||
#define TR_WRITING "Zapisuji.."
|
||||
@@ -1132,10 +1136,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotař"
|
||||
#define TR_ABOUT_MARTIN_2 "Design, Čeština"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x designer/výrobce"
|
||||
|
||||
@@ -544,8 +544,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT "Countdown"
|
||||
#define TR_PERSISTENT TR(INDENT "Permanent", INDENT "Permanent")
|
||||
#define TR_BACKLIGHT_LABEL "LCD-Beleuchtung"
|
||||
#define TR_BLONBRIGHTNESS "An-Helligkeit"
|
||||
#define TR_BLOFFBRIGHTNESS "Aus-Helligkeit"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT "Dauer"
|
||||
#define TR_BLONBRIGHTNESS INDENT "An-Helligkeit"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT "Aus-Helligkeit"
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Farbe"
|
||||
#define TR_SPLASHSCREEN TR("Startbild Ein", "Startbild Anzeigedauer")
|
||||
@@ -734,6 +736,7 @@
|
||||
#define TR_NO_SDCARD "Keine SD-Karte"
|
||||
#define TR_WAITING_FOR_RX "Waiting for RX..."
|
||||
#define TR_WAITING_FOR_TX "Waiting for TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No tools available"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Not inv"
|
||||
@@ -876,6 +879,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash int. Multimodul")
|
||||
#define TR_FLASH_EXTERNAL_MODULE TR("Flash ext. mod","Flash ext. Modul")
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash ext. Multimodul")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware Updatefehler")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS TR3("Flash successful","Flash successful","Update erfolgreich")
|
||||
#define TR_WRITING "Schreibe..."
|
||||
@@ -1146,10 +1150,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Grafikdesigner"
|
||||
|
||||
#if defined(PCBFRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Hardware designer/producer"
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer"
|
||||
|
||||
@@ -542,8 +542,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT "Countdown"
|
||||
#define TR_PERSISTENT TR(INDENT "Persist.", INDENT "Persistent")
|
||||
#define TR_BACKLIGHT_LABEL "Backlight"
|
||||
#define TR_BLONBRIGHTNESS "ON brightness"
|
||||
#define TR_BLOFFBRIGHTNESS "OFF brightness"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT "Duration"
|
||||
#define TR_BLONBRIGHTNESS INDENT "ON brightness"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT "OFF brightness"
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Color"
|
||||
#define TR_SPLASHSCREEN "Splash screen"
|
||||
@@ -737,6 +739,7 @@
|
||||
#define TR_NO_SDCARD "No SD card"
|
||||
#define TR_WAITING_FOR_RX "Waiting for RX..."
|
||||
#define TR_WAITING_FOR_TX "Waiting for TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No tools available"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Not inv"
|
||||
@@ -879,6 +882,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE TR("Flash ext. module", "Flash external module")
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update error", "Firmware update error")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful"
|
||||
#define TR_WRITING "Writing..."
|
||||
@@ -1145,10 +1149,26 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Graphics designer"
|
||||
|
||||
#if defined(PCBFRSKY)
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer"
|
||||
|
||||
@@ -452,10 +452,10 @@
|
||||
#define TR_OUTPUT_TYPE INDENT "Output"
|
||||
#endif
|
||||
#define TR_PROTO TR(INDENT"Proto",INDENT"Protocolo")
|
||||
#define TR_PPMFRAME "Trama PPM"
|
||||
#define TR_PPMFRAME INDENT "Trama PPM"
|
||||
#define TR_REFRESHRATE TR(INDENT "Refresco", INDENT "Velocidad refresco")
|
||||
#define STR_WARN_BATTVOLTAGE TR(INDENT "Salida es VBAT: ", INDENT "Aviso: señal salida es VBAT: ")
|
||||
#define TR_WARN_5VOLTS "Warning: output level is 5 volts"
|
||||
#define TR_WARN_5VOLTS "Aviso: nivel de salida 5 voltios"
|
||||
#define TR_MS "ms"
|
||||
#define TR_FREQUENCY INDENT "Frequencia"
|
||||
#define TR_SWITCH TR("Interr.", "Interruptor")
|
||||
@@ -541,6 +541,7 @@
|
||||
#define TR_BEEPCOUNTDOWN TR(INDENT"Cta. atrás", INDENT"Cuenta atrás")
|
||||
#define TR_PERSISTENT TR(INDENT"Persisten.", INDENT"Persistente")
|
||||
#define TR_BACKLIGHT_LABEL "Luz fondo"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT"Duración"
|
||||
#define TR_BLONBRIGHTNESS INDENT"MAS brillo"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT"MENOS brillo"
|
||||
@@ -735,6 +736,7 @@
|
||||
#define TR_NO_SDCARD "No SDCARD"
|
||||
#define TR_WAITING_FOR_RX "Esperando a RX..."
|
||||
#define TR_WAITING_FOR_TX "Esperando a TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No hay utils"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "No inv"
|
||||
@@ -877,6 +879,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Multi int", "Flash Multi interno")
|
||||
#define TR_FLASH_EXTERNAL_MODULE TR("Flash módulo ext", "Flash módulo externo")
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Multi ext", "Flash Multi externo")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("Error act FW", "Error actualiz. firmware")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash ok"
|
||||
#define TR_WRITING "Escribiendo..."
|
||||
@@ -962,8 +965,8 @@
|
||||
#define TR_DEBUG "Debug"
|
||||
#define TR_KEYS_BTN BUTTON(TR("SW","Switches"))
|
||||
#define TR_ANALOGS_BTN BUTTON(TR("Analog","Analogs"))
|
||||
#define TR_TOUCH_NOTFOUND "Touch hardware not found"
|
||||
#define TR_TOUCH_EXIT "Touch screen to exit"
|
||||
#define TR_TOUCH_NOTFOUND "Hardware táctil no encontrado"
|
||||
#define TR_TOUCH_EXIT "Tocar pantalla para salir"
|
||||
#define TR_CALIBRATION "Calibración"
|
||||
#define TR_SET "[Ajuste]"
|
||||
#define TR_TRAINER "Entrenador"
|
||||
@@ -981,8 +984,8 @@
|
||||
#define TR_UNIT "Unidad"
|
||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Añadir sensor..."
|
||||
#define TR_CHANNELRANGE INDENT "Canales"
|
||||
#define TR_AFHDS3_RX_FREQ TR("RX freq.", "RX frequency")
|
||||
#define TR_AFHDS3_ONE_TO_ONE_TELEMETRY TR("Unicast/Tel.", "Unicast/Telemetry")
|
||||
#define TR_AFHDS3_RX_FREQ TR("RX freq.", "RX frequencia")
|
||||
#define TR_AFHDS3_ONE_TO_ONE_TELEMETRY TR("Unicast/Tel.", "Unicast/Telemetría")
|
||||
#define TR_AFHDS3_ONE_TO_MANY "Multicast"
|
||||
#define TR_AFHDS3_ACTUAL_POWER TR("Act. pow", "Actual power")
|
||||
#define TR_AFHDS3_POWER_SOURCE TR("Power src.", "Power source")
|
||||
@@ -1047,7 +1050,7 @@
|
||||
#define LEN_SPORT_UPDATE_POWER_MODES "\004"
|
||||
#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 "
|
||||
#define TR_NO_TELEMETRY_SCREENS TR("No hay pant. telemetría", "No hay pantallas de telemetría")
|
||||
#define TR_TOUCH_PANEL "Touch panel:"
|
||||
#define TR_TOUCH_PANEL "Pantalla táctil:"
|
||||
|
||||
// Horus and Taranis column headers
|
||||
#define TR_PHASES_HEADERS_NAME "Nombre"
|
||||
@@ -1146,10 +1149,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Dise\201o gráfico"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Colaborador firmware"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Colaborador firmware"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Colaborador firmware"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x dise\201ador/productor"
|
||||
@@ -1225,9 +1236,9 @@
|
||||
#define TR_ADD_MAIN_VIEW "Añadir vista pral."
|
||||
#define TR_BACKGROUND_COLOR "Color de fondo"
|
||||
#define TR_MAIN_COLOR "Color principal"
|
||||
#define TR_BAR2_COLOR "Secondary bar color"
|
||||
#define TR_BAR1_COLOR "Main bar color"
|
||||
#define TR_TEXT_COLOR "Text color"
|
||||
#define TR_BAR2_COLOR "Color barra secundaria"
|
||||
#define TR_BAR1_COLOR "Color barra principal"
|
||||
#define TR_TEXT_COLOR "Color texto"
|
||||
#define TR_TEXT_VIEWER "Visor de texto"
|
||||
|
||||
#define TR_MENU_INPUTS STR_CHAR_INPUT "Entradas"
|
||||
|
||||
@@ -555,8 +555,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT"Countdown"
|
||||
#define TR_PERSISTENT TR(INDENT"Persist.", INDENT"Persistent")
|
||||
#define TR_BACKLIGHT_LABEL "Backlight"
|
||||
#define TR_BLONBRIGHTNESS "ON Brightness"
|
||||
#define TR_BLOFFBRIGHTNESS "OFF Brightness"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT"Duration"
|
||||
#define TR_BLONBRIGHTNESS INDENT"ON Brightness"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT"OFF Brightness"
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Color"
|
||||
#define TR_SPLASHSCREEN "Splash screen"
|
||||
@@ -749,6 +751,7 @@
|
||||
#define TR_NO_SDCARD "No SDCARD"
|
||||
#define TR_WAITING_FOR_RX "Waiting for RX..."
|
||||
#define TR_WAITING_FOR_TX "Waiting for TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No tools available"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Not inv"
|
||||
@@ -891,6 +894,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE "Flash external module"
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful"
|
||||
#define TR_WRITING "Writing..."
|
||||
@@ -1159,10 +1163,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Graphics designer"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Hardware designer/producer"
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer"
|
||||
|
||||
@@ -562,8 +562,10 @@
|
||||
#define TR_BEEPCOUNTDOWN TR(INDENT "Bip fin", INDENT "Compte à rebours")
|
||||
#define TR_PERSISTENT TR(INDENT "Persist.", INDENT "Persistant")
|
||||
#define TR_BACKLIGHT_LABEL "Rétroéclairage"
|
||||
#define TR_BLONBRIGHTNESS "Luminosité ON"
|
||||
#define TR_BLOFFBRIGHTNESS "Luminosité OFF"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT "Durée"
|
||||
#define TR_BLONBRIGHTNESS INDENT "Luminosité ON"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT "Luminosité OFF"
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Couleur"
|
||||
#define TR_SPLASHSCREEN "Logo d'accueil"
|
||||
@@ -754,6 +756,7 @@
|
||||
#define TR_NO_SDCARD "Carte SD indisponible"
|
||||
#define TR_WAITING_FOR_RX "Attente du RX..."
|
||||
#define TR_WAITING_FOR_TX "Attente du TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "Pas d'outils dispo"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Non inv"
|
||||
@@ -895,6 +898,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE TR("Flasher module ext.", "Flasher module externe")
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("Erreur màj FW","Erreur de mise à jour")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash ok"
|
||||
#define TR_WRITING "Ecriture..."
|
||||
@@ -1170,10 +1174,26 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Design graphique"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Développeur/fabricant"
|
||||
#define TR_ABOUT_HARDWARE_3 "du matériel"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 "Développeur/fabricant"
|
||||
#define TR_ABOUT_HARDWARE_3 "du matériel"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 "Développeur/fabricant"
|
||||
#define TR_ABOUT_HARDWARE_3 "du matériel"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 "Développeur/fabricant"
|
||||
#define TR_ABOUT_HARDWARE_3 "du matériel"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 "Développeur/fabricant"
|
||||
#define TR_ABOUT_HARDWARE_3 "du matériel"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Développeur/fabricant"
|
||||
|
||||
@@ -566,8 +566,10 @@
|
||||
#define TR_BEEPCOUNTDOWN TR(INDENT "Conto rov", INDENT "Conto rovescia")
|
||||
#define TR_PERSISTENT TR(INDENT "Persist.", INDENT "Persistente")
|
||||
#define TR_BACKLIGHT_LABEL TR("Retroillu.", "Retroilluminazione")
|
||||
#define TR_BLONBRIGHTNESS TR("Lumin. ON", "Luminosità ON")
|
||||
#define TR_BLOFFBRIGHTNESS TR("Lumin. OFF", "Luminosità OFF")
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT "Durata"
|
||||
#define TR_BLONBRIGHTNESS TR(INDENT "Lumin. ON", INDENT "Luminosità ON")
|
||||
#define TR_BLOFFBRIGHTNESS TR(INDENT "Lumin. OFF", INDENT "Luminosità OFF")
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Colore"
|
||||
#define TR_SPLASHSCREEN TR("Sch. avvio", "Schermata d'avvio")
|
||||
@@ -756,6 +758,7 @@
|
||||
#define TR_NO_SDCARD "No SDCard"
|
||||
#define TR_WAITING_FOR_RX "Attendo la RX..."
|
||||
#define TR_WAITING_FOR_TX "Attendo la TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "Tools non disp."
|
||||
#define TR_NORMAL "Normale"
|
||||
#define TR_NOT_INVERTED "No inv."
|
||||
@@ -894,6 +897,7 @@
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Prog. mod. BT", INDENT "Prog. modulo Bluetooth")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Prog. PMU", "Programma PMU")
|
||||
#define TR_CURRENT_VERSION TR("Vers. currente ", "Versione corrente: ")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FLASH_INTERNAL_MODULE TR("Prog. modulo int.", "Programma modulo interno")
|
||||
#define TR_FLASH_EXTERNAL_MODULE TR("Prog. modulo est.", "Programma modulo esterno")
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Prog. MULTI int.", "Programma MULTI interno")
|
||||
@@ -1166,10 +1170,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Graphic Designer"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Contributi al Firmware"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Contributi al Firmware"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Contributi al Firmware"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Designer/Produttore SKY9X"
|
||||
|
||||
@@ -543,8 +543,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT "Countdown"
|
||||
#define TR_PERSISTENT TR(INDENT "Vasth.", INDENT "Vasthouden")
|
||||
#define TR_BACKLIGHT_LABEL "LCD-Verlichting"
|
||||
#define TR_BLONBRIGHTNESS "Aan-Helderheid"
|
||||
#define TR_BLOFFBRIGHTNESS "Uit-Helderheid"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT "Duur"
|
||||
#define TR_BLONBRIGHTNESS INDENT "Aan-Helderheid"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT "Uit-Helderheid"
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Kleur"
|
||||
#define TR_SPLASHSCREEN "Startscherm Aan"
|
||||
@@ -738,6 +740,7 @@
|
||||
#define TR_NO_SDCARD "Geen SD-Kaart"
|
||||
#define TR_WAITING_FOR_RX "Waiting for RX..."
|
||||
#define TR_WAITING_FOR_TX "Waiting for TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No tools available"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Not inv"
|
||||
@@ -880,6 +883,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE "Flash external module"
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful"
|
||||
#define TR_WRITING "Schrijven..."
|
||||
@@ -1153,10 +1157,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Graphics designer"
|
||||
|
||||
#if defined(PCBFRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Hardware designer/producer"
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer"
|
||||
|
||||
@@ -562,8 +562,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT "Odliczanie"
|
||||
#define TR_PERSISTENT TR(INDENT "Dokł.", INDENT "Dokładny")
|
||||
#define TR_BACKLIGHT_LABEL "Podświetl"
|
||||
#define TR_BLONBRIGHTNESS "Jasnośc wł."
|
||||
#define TR_BLOFFBRIGHTNESS "Jasność wył."
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT"Czas trwania"
|
||||
#define TR_BLONBRIGHTNESS INDENT"Jasnośc wł."
|
||||
#define TR_BLOFFBRIGHTNESS INDENT"Jasność wył."
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Color"
|
||||
#define TR_SPLASHSCREEN "Logo ekranu"
|
||||
@@ -752,6 +754,7 @@
|
||||
#define TR_NO_SDCARD "Brak karty SD"
|
||||
#define TR_WAITING_FOR_RX "Waiting for RX..."
|
||||
#define TR_WAITING_FOR_TX "Waiting for TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No tools available"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Not inv"
|
||||
@@ -894,6 +897,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE "Flash external module"
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful"
|
||||
#define TR_WRITING "Zapis... "
|
||||
@@ -1162,14 +1166,22 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Projekty graficzne"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Współautor firmware"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Współautor firmware"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware"
|
||||
#define TR_ABOUT_HARDWARE_3 "Współautor firmware"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x twórca/producent"
|
||||
#define TR_ABOUT_HARDWARE_3 ""
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x designer/výrobce"
|
||||
#define TR_ABOUT_HARDWARE_3 ""
|
||||
#endif
|
||||
|
||||
#define TR_ABOUT_PARENTS_1 "Projekty macierzyste"
|
||||
|
||||
@@ -559,8 +559,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT "Beep Regressivo"
|
||||
#define TR_PERSISTENT INDENT "Persist."
|
||||
#define TR_BACKLIGHT_LABEL "Backlight"
|
||||
#define TR_BLONBRIGHTNESS "ON Brightness"
|
||||
#define TR_BLOFFBRIGHTNESS "OFF Brightness"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT "Tempo Backlight"
|
||||
#define TR_BLONBRIGHTNESS INDENT "ON Brightness"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT "OFF Brightness"
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_BLCOLOR "Color"
|
||||
#define TR_SPLASHSCREEN "Splash screen"
|
||||
@@ -753,6 +755,7 @@
|
||||
#define TR_NO_SDCARD "Sem SDCARD"
|
||||
#define TR_WAITING_FOR_RX "Waiting for RX..."
|
||||
#define TR_WAITING_FOR_TX "Waiting for TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No tools available"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Not inv"
|
||||
@@ -895,6 +898,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE "Flash external module"
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful"
|
||||
#define TR_WRITING "Writing..."
|
||||
@@ -1163,10 +1167,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Graphics designer"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Hardware designer/producer"
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer")
|
||||
#define TR_ABOUT_HARDWARE_3 "Firmware contributor"
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer"
|
||||
|
||||
@@ -564,8 +564,10 @@
|
||||
#define TR_BEEPCOUNTDOWN INDENT "Nedräkning"
|
||||
#define TR_PERSISTENT TR("Jämt på ", INDENT"Alltid På")
|
||||
#define TR_BACKLIGHT_LABEL "Belysning"
|
||||
#define TR_BLONBRIGHTNESS "På Ljusstyrka"
|
||||
#define TR_BLOFFBRIGHTNESS "Av Ljusstyrka"
|
||||
#define TR_GHOST_MENU_LABEL "GHOST MENU"
|
||||
#define TR_BLDELAY INDENT "Av efter"
|
||||
#define TR_BLONBRIGHTNESS INDENT "På Ljusstyrka"
|
||||
#define TR_BLOFFBRIGHTNESS INDENT "Av Ljusstyrka"
|
||||
#define TR_KEYS_BACKLIGHT "Keys backlight"
|
||||
#define TR_SPLASHSCREEN "Startbild"
|
||||
#define TR_PWR_ON_DELAY "Pwr On delay"
|
||||
@@ -754,6 +756,7 @@
|
||||
#define TR_NO_SDCARD "SDCARD saknas"
|
||||
#define TR_WAITING_FOR_RX "Waiting for RX..."
|
||||
#define TR_WAITING_FOR_TX "Waiting for TX..."
|
||||
#define TR_WAITING_FOR_MODULE TR("Waiting module", "Waiting for module...")
|
||||
#define TR_NO_TOOLS "No tools available"
|
||||
#define TR_NORMAL "Normal"
|
||||
#define TR_NOT_INVERTED "Not inv"
|
||||
@@ -897,6 +900,7 @@
|
||||
#define TR_FLASH_INTERNAL_MULTI TR("Flash Int. Multi", "Flash Internal Multi")
|
||||
#define TR_FLASH_EXTERNAL_MODULE "Flash external module"
|
||||
#define TR_FLASH_EXTERNAL_MULTI TR("Flash Ext. Multi", "Flash External Multi")
|
||||
#define TR_FLASH_EXTERNAL_ELRS TR("Flash Ext. ELRS", "Flash External ELRS")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error")
|
||||
#define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful"
|
||||
#define TR_WRITING "Skriver..."
|
||||
@@ -1165,10 +1169,18 @@
|
||||
#define TR_ABOUT_MARTIN_1 "Martin Hotar"
|
||||
#define TR_ABOUT_MARTIN_2 "Grafikdesigner"
|
||||
|
||||
#if defined(PCBFRSKY)
|
||||
#if defined(MANUFACTURER_FRSKY)
|
||||
#define TR_ABOUT_HARDWARE_1 "FrSky"
|
||||
#define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent"
|
||||
#define TR_ABOUT_HARDWARE_3 ""
|
||||
#elif defined(MANUFACTURER_RADIOMASTER)
|
||||
#define TR_ABOUT_HARDWARE_1 "Radiomaster"
|
||||
#define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent"
|
||||
#define TR_ABOUT_HARDWARE_3 ""
|
||||
#elif defined(MANUFACTURER_JUMPER)
|
||||
#define TR_ABOUT_HARDWARE_1 "JumperRC"
|
||||
#define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent"
|
||||
#define TR_ABOUT_HARDWARE_3 ""
|
||||
#else
|
||||
#define TR_ABOUT_HARDWARE_1 "Brent Nelson"
|
||||
#define TR_ABOUT_HARDWARE_2 "Sky9x design/producent"
|
||||
|
||||
@@ -47,6 +47,9 @@
|
||||
#elif defined(RADIO_TX12)
|
||||
#define TR_POTS_VSRCRAW STR_CHAR_POT "S1\0" STR_CHAR_POT "S2\0"
|
||||
#define TR_SW_VSRCRAW STR_CHAR_SWITCH "SA\0" STR_CHAR_SWITCH "SB\0" STR_CHAR_SWITCH "SC\0" STR_CHAR_SWITCH "SD\0" STR_CHAR_SWITCH "SE\0" STR_CHAR_SWITCH "SF\0" STR_CHAR_SWITCH "SI\0" STR_CHAR_SWITCH "SJ\0"
|
||||
#elif defined(RADIO_TX12)
|
||||
#define TR_POTS_VSRCRAW "\310S1\0""\310S2\0"
|
||||
#define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SI\0""\312SJ\0"
|
||||
#elif defined(PCBX7)
|
||||
#define TR_POTS_VSRCRAW STR_CHAR_POT"S1\0" STR_CHAR_POT"S2\0"
|
||||
#define TR_SW_VSRCRAW STR_CHAR_SWITCH"SA\0" STR_CHAR_SWITCH"SB\0" STR_CHAR_SWITCH"SC\0" STR_CHAR_SWITCH"SD\0" STR_CHAR_SWITCH"SF\0" STR_CHAR_SWITCH"SH\0" STR_CHAR_SWITCH"SI\0" STR_CHAR_SWITCH"SJ\0"
|
||||
@@ -139,7 +142,7 @@
|
||||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\007"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky\0""Hubsan\0""FrSky\0 ""Hisky\0 ""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0 ""KN\0 ""SymaX\0 ""SLT\0 ""CX10\0 ""CG023\0 ""Bayang\0""ESky\0 ""MT99XX\0""MJXq\0 ""Shenqi\0""FY326\0 ""SFHSS\0 ""J6 Pro\0""FQ777\0 ""Assan\0 ""Hontai\0""OpenLrs""FlSky2A""Q2x2\0 ""Walkera""Q303\0 ""GW008\0 ""DM002\0 ""Cabell\0""Esky150""H8 3D\0 ""Corona\0""CFlie\0 ""Hitec\0 ""WFly\0 ""Bugs\0 ""BugMini""Traxxas""NCC1701""E01X\0 ""V911S\0 ""GD00X\0 ""V761\0 ""KF606\0 ""Redpine""Potensi""ZSX\0 ""FlyZone""Scanner""FrSkyRX""FS2A_RX""HoTT\0 ""FX816\0 ""BayanRX""Pelikan""Tiger\0 ""XK\0 ""XN297DU""FrSkyX2""FrSkyR9""Propel\0""FrSkyL\0""Skyarte""ESky-v2""DSM RX\0""JJRC345""Q90C\0 "
|
||||
#define TR_MULTI_PROTOCOLS "FlySky\0""Hubsan\0""FrSky\0 ""Hisky\0 ""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0 ""KN\0 ""SymaX\0 ""SLT\0 ""CX10\0 ""CG023\0 ""Bayang\0""ESky\0 ""MT99XX\0""MJXq\0 ""Shenqi\0""FY326\0 ""Futaba\0""J6 Pro\0""FQ777\0 ""Assan\0 ""Hontai\0""OpenLrs""FlSky2A""Q2x2\0 ""Walkera""Q303\0 ""GW008\0 ""DM002\0 ""Cabell\0""Esky150""H8 3D\0 ""Corona\0""CFlie\0 ""Hitec\0 ""WFly\0 ""Bugs\0 ""BugMini""Traxxas""NCC1701""E01X\0 ""V911S\0 ""GD00X\0 ""V761\0 ""KF606\0 ""Redpine""Potensi""ZSX\0 ""Height\0""Scanner""FrSkyRX""FS2A_RX""HoTT\0 ""FX816\0 ""BayanRX""Pelikan""Tiger\0 ""XK\0 ""XN297DU""FrSkyX2""FrSkyR9""Propel\0""FrSkyL\0""Skyartc""ESky-v2""DSM RX\0""JJRC345""Q90C\0 ""Kyosho\0""RadLink""ExpLRS\0""Realacc""OMP\0 ""M-Link\0""Wfly 2\0""E016Hv2"
|
||||
|
||||
#define LEN_MULTI_POWER "\005"
|
||||
#define TR_MULTI_POWER "10mW\0""25mW\0""50mW\0""100mW""200mW""300mW""500mW""1W\0 ""2W\0 "
|
||||
|
||||
Reference in New Issue
Block a user