mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-24 16:55:15 +03:00
Merge branch '2.3.0' into 2.3
# Conflicts: # CREDITS.txt # radio/src/telemetry/multi.cpp # tools/release23/tts.py # tools/release23/tts_common.py
This commit is contained in:
commit
f56885b54d
30 changed files with 524 additions and 520 deletions
|
@ -1550,7 +1550,7 @@ NXGRAPHICS
|
|||
AIR-RC
|
||||
Nicolas Deshaies
|
||||
Jean-Francois Delhove
|
||||
Hugo Daniel Farneti
|
||||
Hugo Daniel Farneti
|
||||
RC electronic products
|
||||
Adrian Andrei
|
||||
Henk van de Kerkhof
|
||||
|
|
|
@ -108,7 +108,7 @@ const Multiprotocols multiProtocols {
|
|||
{MODULE_SUBTYPE_MULTI_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_BUGS_MINI, 1, false, STR_SUBTYPE_BUGS_MINI, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_TRAXXAS, 0, false, STR_SUBTYPE_TRAXXAS, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_E01X, 2, false, STR_SUBTYPE_E01X, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_E01X, 2, false, STR_SUBTYPE_E01X, STR_MULTI_OPTION},
|
||||
{MODULE_SUBTYPE_MULTI_V911S, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_GD00X, 1, false, STR_SUBTYPE_GD00X, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_KF606, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
|
|
|
@ -8,24 +8,21 @@ SimulatedUIWidgetX9LITE::SimulatedUIWidgetX9LITE(SimulatorInterface *simulator,
|
|||
ui(new Ui::SimulatedUIWidgetX9LITE)
|
||||
{
|
||||
RadioUiAction * act;
|
||||
QPolygon polygon;
|
||||
|
||||
ui->setupUi(this);
|
||||
|
||||
// add actions in order of appearance on the help menu
|
||||
|
||||
QPoint ctr(70, 91);
|
||||
polygon << polyArc(ctr.x(), ctr.y(), 50, -90, 90) << polyArc(ctr.x(), ctr.y(), 22, -90, 90);
|
||||
|
||||
act = new RadioUiAction(0, QList<int>() << Qt::Key_PageUp << Qt::Key_Up, SIMU_STR_HLP_KEYS_GO_UP, SIMU_STR_HLP_ACT_MENU_ICN);
|
||||
addRadioWidget(ui->leftbuttons->addArea(polyArc(ctr.x(), ctr.y(), 20), "X9LITE/left_menu.png", act));
|
||||
addRadioWidget(ui->leftbuttons->addArea(QRect(80, 20, 40, 35), "X9LITE/left_menu.png", act));
|
||||
|
||||
act = new RadioUiAction(3, QList<int>() << Qt::Key_PageDown << Qt::Key_Down, SIMU_STR_HLP_KEYS_GO_DN, SIMU_STR_HLP_ACT_PAGE);
|
||||
addRadioWidget(ui->leftbuttons->addArea(polygon, "X9LITE/left_page.png", act));
|
||||
addRadioWidget(ui->leftbuttons->addArea(QRect(80, 65, 40, 35), "X9LITE/left_page.png", act));
|
||||
|
||||
polygon.clear();
|
||||
polygon << polyArc(ctr.x(), ctr.y(), 50, 90, 270) << polyArc(ctr.x(), ctr.y(), 22, 90, 270);
|
||||
act = new RadioUiAction(1, QList<int>() << Qt::Key_Delete << Qt::Key_Escape << Qt::Key_Backspace, SIMU_STR_HLP_KEYS_EXIT, SIMU_STR_HLP_ACT_EXIT);
|
||||
addRadioWidget(ui->leftbuttons->addArea(polygon, "X9LITE/left_exit.png", act));
|
||||
addRadioWidget(ui->leftbuttons->addArea(QRect(80, 130, 40, 35), "X9LITE/left_exit.png", act));
|
||||
|
||||
m_scrollUpAction = new RadioUiAction(-1, QList<int>() << Qt::Key_Minus << Qt::Key_Equal << Qt::Key_Left, SIMU_STR_HLP_KEYS_GO_LFT, SIMU_STR_HLP_ACT_ROT_LFT);
|
||||
m_scrollDnAction = new RadioUiAction(-1, QList<int>() << Qt::Key_Plus << Qt::Key_Right, SIMU_STR_HLP_KEYS_GO_RGT, SIMU_STR_HLP_ACT_ROT_RGT);
|
||||
|
@ -34,7 +31,7 @@ SimulatedUIWidgetX9LITE::SimulatedUIWidgetX9LITE(SimulatorInterface *simulator,
|
|||
m_mouseMidClickAction = new RadioUiAction(2, QList<int>() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ROT_DN);
|
||||
addRadioWidget(ui->rightbuttons->addArea(polyArc(88, 92, 33), "X9LITE/right_ent.png", m_mouseMidClickAction));
|
||||
|
||||
addRadioWidget(ui->leftbuttons->addArea(QRect(9, 154, 30, 30), "X9LITE/left_scrnshot.png", m_screenshotAction));
|
||||
addRadioWidget(ui->leftbuttons->addArea(QRect(30, 154, 30, 30), "X9LITE/left_scrnshot.png", m_screenshotAction));
|
||||
|
||||
m_backlightColors << QColor(215, 243, 255); // X9LITE Blue
|
||||
m_backlightColors << QColor(166,247,159);
|
||||
|
@ -45,10 +42,10 @@ SimulatedUIWidgetX9LITE::SimulatedUIWidgetX9LITE(SimulatorInterface *simulator,
|
|||
setLcd(ui->lcd);
|
||||
|
||||
QString css = "#radioUiWidget {"
|
||||
"background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1,"
|
||||
"stop:0 rgba(255, 255, 255, 255),"
|
||||
"stop:0.757062 rgba(241, 238, 238, 255),"
|
||||
"stop:1 rgba(247, 245, 245, 255));"
|
||||
"background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1,"
|
||||
"stop:0 rgba(255, 255, 255, 255),"
|
||||
"stop:0.757062 rgba(241, 238, 238, 255),"
|
||||
"stop:1 rgba(247, 245, 245, 255));"
|
||||
"}";
|
||||
|
||||
QTimer * tim = new QTimer(this);
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>570</width>
|
||||
<width>650</width>
|
||||
<height>208</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -18,14 +18,14 @@
|
|||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>570</width>
|
||||
<height>208</height>
|
||||
<width>603</width>
|
||||
<height>235</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>570</width>
|
||||
<height>208</height>
|
||||
<width>603</width>
|
||||
<height>240</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -60,14 +60,14 @@
|
|||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>157</width>
|
||||
<height>186</height>
|
||||
<width>173</width>
|
||||
<height>210</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>157</width>
|
||||
<height>186</height>
|
||||
<width>173</width>
|
||||
<height>210</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
|
@ -85,14 +85,14 @@
|
|||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>256</width>
|
||||
<height>128</height>
|
||||
<width>602</width>
|
||||
<height>129</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>424</width>
|
||||
<height>128</height>
|
||||
<width>602</width>
|
||||
<height>129</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
|
@ -110,14 +110,14 @@
|
|||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>157</width>
|
||||
<height>186</height>
|
||||
<width>174</width>
|
||||
<height>210</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>157</width>
|
||||
<height>186</height>
|
||||
<width>174</width>
|
||||
<height>210</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
|
@ -135,14 +135,14 @@
|
|||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>256</width>
|
||||
<height>48</height>
|
||||
<width>258</width>
|
||||
<height>35</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>256</width>
|
||||
<height>48</height>
|
||||
<width>258</width>
|
||||
<height>35</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
|
@ -160,14 +160,14 @@
|
|||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>256</width>
|
||||
<height>10</height>
|
||||
<width>258</width>
|
||||
<height>46</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>256</width>
|
||||
<height>10</height>
|
||||
<width>258</width>
|
||||
<height>46</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1420,9 +1420,11 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN+23, y, "RSSI(", LEFT);
|
||||
lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT);
|
||||
lcdDrawText(lcdLastRightPos, y, ")", LEFT);
|
||||
if (pdef->optionsstr == STR_MULTI_RFTUNE) {
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, "RSSI(", LEFT);
|
||||
lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT);
|
||||
lcdDrawText(lcdLastRightPos, y, ")", LEFT);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -774,7 +774,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
else if (isModulePXX2(INTERNAL_MODULE)) {
|
||||
g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_LR12, EE_MODEL, isRfProtocolAvailable);
|
||||
g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16, EE_MODEL, isRfProtocolAvailable);
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
@ -784,7 +784,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_ISRM_RF_PROTOCOLS, index, attr);
|
||||
if (attr) {
|
||||
index = checkIncDec(event, index, 0, 3, EE_MODEL);
|
||||
index = checkIncDec(event, index, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16 + 1 /* because of --- */, EE_MODEL);
|
||||
if (checkIncDec_Ret) {
|
||||
memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData));
|
||||
if (index > 0) {
|
||||
|
@ -1251,9 +1251,11 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
lcdDrawText(MODEL_SETUP_3RD_COLUMN+22, y, "RSSI(", LEFT);
|
||||
lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT);
|
||||
lcdDrawText(lcdLastRightPos, y, ")", LEFT);
|
||||
if (pdef->optionsstr == STR_MULTI_RFTUNE) {
|
||||
lcdDrawText(MODEL_SETUP_3RD_COLUMN+22, y, "RSSI(", LEFT);
|
||||
lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT);
|
||||
lcdDrawText(lcdLastRightPos, y, ")", LEFT);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -998,7 +998,7 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
else if (isModulePXX2(INTERNAL_MODULE)) {
|
||||
g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_LR12, EE_MODEL);
|
||||
g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16, EE_MODEL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1608,7 +1608,9 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
lcdDrawNumber(LCD_W-10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")");
|
||||
if (pdef->optionsstr == STR_MULTI_RFTUNE) {
|
||||
lcdDrawNumber(LCD_W - 10, y, TELEMETRY_RSSI(), RIGHT, 0, "RSSI(", ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -634,7 +634,10 @@ void menuRadioHardware(event_t event)
|
|||
break;
|
||||
|
||||
case ITEM_RADIO_BACKUP_EEPROM:
|
||||
lcdDrawText(LCD_W / 2, y, BUTTON(STR_EEBACKUP), attr | CENTERED);
|
||||
if (LCD_W < 212)
|
||||
lcdDrawText(LCD_W / 2, y, BUTTON(STR_EEBACKUP), attr | CENTERED);
|
||||
else
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, BUTTON(STR_EEBACKUP), attr);
|
||||
if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
s_editMode = EDIT_SELECT_FIELD;
|
||||
eepromBackup();
|
||||
|
@ -642,7 +645,10 @@ void menuRadioHardware(event_t event)
|
|||
break;
|
||||
|
||||
case ITEM_RADIO_FACTORY_RESET:
|
||||
lcdDrawText(LCD_W / 2, y, BUTTON(STR_FACTORYRESET), attr | CENTERED);
|
||||
if (LCD_W < 212)
|
||||
lcdDrawText(LCD_W / 2, y, BUTTON(STR_FACTORYRESET), attr | CENTERED);
|
||||
else
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, BUTTON(STR_FACTORYRESET), attr);
|
||||
if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
s_editMode = EDIT_SELECT_FIELD;
|
||||
POPUP_CONFIRMATION(STR_CONFIRMRESET, onFactoryResetConfirm);
|
||||
|
|
|
@ -848,7 +848,7 @@ const mm_protocol_definition multi_protocols[] = {
|
|||
{MODULE_SUBTYPE_MULTI_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_BUGS_MINI, 1, false, STR_SUBTYPE_BUGS_MINI, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_TRAXXAS, 0, false, STR_SUBTYPE_TRAXXAS, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_E01X, 2, false, STR_SUBTYPE_E01X, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_E01X, 2, false, STR_SUBTYPE_E01X, STR_MULTI_OPTION},
|
||||
{MODULE_SUBTYPE_MULTI_V911S, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_GD00X, 1, false, STR_SUBTYPE_GD00X, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_KF606, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
|
|
|
@ -869,7 +869,10 @@ static void checkRTCBattery()
|
|||
void checkFailsafe()
|
||||
{
|
||||
for (int i=0; i<NUM_MODULES; i++) {
|
||||
if (isModuleFailsafeAvailable(i)) {
|
||||
if (isModuleMultimodule(i)) {
|
||||
multiModuleStatus.requiresFailsafeCheck = true;
|
||||
}
|
||||
else if (isModuleFailsafeAvailable(i)) {
|
||||
ModuleData & moduleData = g_model.moduleData[i];
|
||||
if (moduleData.failsafeMode == FAILSAFE_NOT_SET) {
|
||||
ALERT(STR_FAILSAFEWARN, STR_NO_FAILSAFE, AU_ERROR);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "opentx.h"
|
||||
|
||||
#if !defined(BOOT)
|
||||
Fifo<uint8_t, BT_TX_FIFO_SIZE> btTxFifo;
|
||||
Fifo<uint8_t, BT_RX_FIFO_SIZE> btRxFifo;
|
||||
|
||||
|
@ -42,6 +43,7 @@ enum BluetoothWriteState
|
|||
};
|
||||
|
||||
volatile uint8_t bluetoothWriteState = BLUETOOTH_WRITE_IDLE;
|
||||
#endif
|
||||
|
||||
void bluetoothInit(uint32_t baudrate, bool enable)
|
||||
{
|
||||
|
@ -65,6 +67,7 @@ void bluetoothInit(uint32_t baudrate, bool enable)
|
|||
GPIO_Init(BT_BCTS_GPIO, &GPIO_InitStructure);
|
||||
#endif
|
||||
|
||||
#if !defined(BOOT)
|
||||
GPIO_PinAFConfig(BT_USART_GPIO, BT_TX_GPIO_PinSource, BT_GPIO_AF);
|
||||
GPIO_PinAFConfig(BT_USART_GPIO, BT_RX_GPIO_PinSource, BT_GPIO_AF);
|
||||
|
||||
|
@ -90,17 +93,17 @@ void bluetoothInit(uint32_t baudrate, bool enable)
|
|||
|
||||
bluetoothWriteState = BLUETOOTH_WRITE_IDLE;
|
||||
|
||||
if (enable) {
|
||||
GPIO_ResetBits(BT_EN_GPIO, BT_EN_GPIO_PIN);
|
||||
}
|
||||
else {
|
||||
GPIO_SetBits(BT_EN_GPIO, BT_EN_GPIO_PIN);
|
||||
}
|
||||
|
||||
btRxFifo.clear();
|
||||
btTxFifo.clear();
|
||||
#endif
|
||||
|
||||
if (enable)
|
||||
GPIO_ResetBits(BT_EN_GPIO, BT_EN_GPIO_PIN);
|
||||
else
|
||||
GPIO_SetBits(BT_EN_GPIO, BT_EN_GPIO_PIN);
|
||||
}
|
||||
|
||||
#if !defined(BOOT)
|
||||
void bluetoothDisable()
|
||||
{
|
||||
GPIO_SetBits(BT_EN_GPIO, BT_EN_GPIO_PIN); // close bluetooth (recent modules will go to bootloader mode)
|
||||
|
@ -165,3 +168,4 @@ uint8_t bluetoothIsWriting(void)
|
|||
{
|
||||
return bluetoothWriteState != BLUETOOTH_WRITE_IDLE;
|
||||
}
|
||||
#endif // !BOOT
|
||||
|
|
|
@ -92,6 +92,13 @@ if(PCB STREQUAL X12S OR PCB STREQUAL X10 OR PCB STREQUAL X9E OR (PCB STREQUAL X9
|
|||
)
|
||||
endif()
|
||||
|
||||
if(PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES)
|
||||
set(BOOTLOADER_SRC
|
||||
${BOOTLOADER_SRC}
|
||||
../../../../../targets/common/arm/stm32/bluetooth_driver.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT (PCB STREQUAL X10 OR PCB STREQUAL X12S))
|
||||
set(BOOTLOADER_SRC
|
||||
${BOOTLOADER_SRC}
|
||||
|
|
|
@ -245,6 +245,11 @@ int main()
|
|||
backlightInit();
|
||||
backlightEnable();
|
||||
|
||||
#if defined(PCBX7) || defined(PCBXLITE)
|
||||
// we shutdown the bluetooth module now to be sure it will be detected on firmware start
|
||||
bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE, false);
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
i2cInit();
|
||||
#endif
|
||||
|
|
|
@ -106,6 +106,7 @@ void rotaryEncoderCheck()
|
|||
if (g_eeGeneral.backlightMode & e_backlight_mode_keys) {
|
||||
backlightOn();
|
||||
}
|
||||
inactivity.counter = 0;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -116,17 +116,18 @@ struct MultiModuleStatus {
|
|||
uint8_t patch;
|
||||
|
||||
uint8_t flags;
|
||||
uint8_t requiresFailsafeCheck;
|
||||
tmr10ms_t lastUpdate;
|
||||
|
||||
void getStatusString(char* statusText);
|
||||
|
||||
inline bool isValid() { return (bool)(get_tmr10ms() - lastUpdate < 200); }
|
||||
inline bool supportsFailsafe() { return (bool) (flags & 0x20); }
|
||||
inline bool isWaitingforBind() { return (bool) (flags & 0x10); }
|
||||
inline bool isBinding() { return (bool) (flags & 0x08); }
|
||||
inline bool protocolValid() { return (bool) (flags & 0x04); }
|
||||
inline bool serialMode() { return (bool) (flags & 0x02); }
|
||||
inline bool inputDetected() { return (bool) (flags & 0x01); }
|
||||
inline bool isValid() const { return (bool)(get_tmr10ms() - lastUpdate < 200); }
|
||||
inline bool supportsFailsafe() const { return (bool) (flags & 0x20); }
|
||||
inline bool isWaitingforBind() const { return (bool) (flags & 0x10); }
|
||||
inline bool isBinding() const { return (bool) (flags & 0x08); }
|
||||
inline bool protocolValid() const { return (bool) (flags & 0x04); }
|
||||
inline bool serialMode() const { return (bool) (flags & 0x02); }
|
||||
inline bool inputDetected() const { return (bool) (flags & 0x01); }
|
||||
};
|
||||
|
||||
MultiModuleStatus& getMultiModuleStatus(uint8_t module);
|
||||
|
|
|
@ -51,9 +51,6 @@
|
|||
#define LEN_VBEEPMODE TR("\005","\012")
|
||||
#define TR_VBEEPMODE TR("Tichý""Alarm""BezKl""Vše\0", "Tichý\0 ""Jen alarm\0""Bez kláves""Vše\0 ")
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "Ne REaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\005", "\007")
|
||||
#define TR_VBLMODE TR("Vyp\0 ""Kláv.""Páky\0""Vše\0 ""Zap\0 ", "Vypnuto""Klávesy""Páky\0 ""Vše\0 ""Zapnuto")
|
||||
|
||||
|
@ -512,7 +509,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model stále spuštěn"
|
||||
#define TR_MODEL_SHUTDOWN "Vypnout ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Zmáčkni enter pro potvrzení"
|
||||
#define TR_RENAVIG "Navig. RotEnc"
|
||||
#define TR_THROTTLE_LABEL "Plyn"
|
||||
#define TR_THROTTLEREVERSE TR("ReversPlyn", INDENT"Revers plynu")
|
||||
#define TR_MINUTEBEEP TR("Minuta", "Oznamovat minuty")
|
||||
|
@ -563,11 +559,9 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER "NO DATA"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_US "us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_MENUTORESET TR_ENTER" >> Reset"
|
||||
#define TR_PPM_TRAINER "TR"
|
||||
#define TR_CH "CH"
|
||||
|
@ -667,7 +661,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Tón na nule"
|
||||
#define TR_PITCH_AT_MAX INDENT "Tón na maximu"
|
||||
#define TR_REPEAT_AT_ZERO TR(INDENT "Opak. na nule", INDENT "Opakování na nule")
|
||||
#define TR_POWEROFF "\027Vypínám..."
|
||||
#define TR_SHUTDOWN "Vypínání.."
|
||||
#define TR_SAVEMODEL "Ukládám nastavení modelu"
|
||||
#define TR_BATT_CALIB "Kalib. bat."
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Stumm""Alarm""NoKey""Alle\0"
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "AUSDGaDGb"
|
||||
|
||||
#define LEN_VBLMODE "\005"
|
||||
#define TR_VBLMODE "AUS\0 ""Taste""Stks\0""Beide""EIN\0 " // Anpassung
|
||||
|
||||
|
@ -514,7 +511,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG TR ("Rol", "Drehgeb. Navig.")
|
||||
#define TR_THROTTLE_LABEL "Gas-Kontrolle"
|
||||
#define TR_THROTTLEREVERSE TR("Gas invers", INDENT "Vollgas hinten?") //Änderung wg TH9x, Taranis
|
||||
#define TR_MINUTEBEEP TR("Min-Alarm", "Minuten-Alarm")
|
||||
|
@ -567,9 +563,7 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER"Keine Daten"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036GAS\037\146GS%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Freier Stack"
|
||||
#define TR_MENUTORESET TR_ENTER " für Reset"
|
||||
|
@ -669,7 +663,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Töne sinken"
|
||||
#define TR_PITCH_AT_MAX INDENT "Töne steigen"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Wiederholrate"
|
||||
#define TR_POWEROFF "\027Power OFF..."
|
||||
#define TR_SHUTDOWN "Herunterfahren"
|
||||
#define TR_SAVEMODEL "Modelleinstellungen speichern"
|
||||
#define TR_BATT_CALIB TR("AkkuSpgwert", "Akku Kalibrierung")
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Quiet""Alarm""NoKey""All\0 "
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "No REaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\004", "\010")
|
||||
#define TR_VBLMODE TR("OFF\0""Keys""Ctrl""Both""ON\0 ", "OFF\0 ""Keys\0 ""Controls""Both\0 ""ON\0 ")
|
||||
|
||||
|
@ -409,7 +406,6 @@
|
|||
|
||||
#if defined(PCBTARANIS)
|
||||
#define TR_POPUPS_ENTER_EXIT TR(TR_EXIT "\010" TR_ENTER, TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER)
|
||||
|
||||
#else
|
||||
#define TR_POPUPS_ENTER_EXIT TR_ENTER "\010" TR_EXIT
|
||||
#endif
|
||||
|
@ -510,11 +506,10 @@
|
|||
#define TR_INACTIVITYALARM INDENT "Inactivity"
|
||||
#define TR_MEMORYWARNING INDENT "Memory low"
|
||||
#define TR_ALARMWARNING INDENT "Sound off"
|
||||
#define TR_RSSISHUTDOWNALARM TR(INDENT "Rssi Shutdown", INDENT "Check Rssi on Shutdown")
|
||||
#define TR_RSSISHUTDOWNALARM TR(INDENT "Rssi Shutdown", INDENT "Check RSSI on shutdown")
|
||||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "RotEnc Navig"
|
||||
#define TR_THROTTLE_LABEL "Throttle"
|
||||
#define TR_THROTTLEREVERSE TR("T-Reverse", INDENT "Reverse")
|
||||
#define TR_MINUTEBEEP TR("Minute", "Minute call")
|
||||
|
@ -567,11 +562,9 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER "NO DATA"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_US "us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_MENUTORESET TR_ENTER " to reset"
|
||||
#define TR_PPM_TRAINER "TR"
|
||||
#define TR_CH "CH"
|
||||
|
@ -634,7 +627,7 @@
|
|||
#define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune")
|
||||
#define TR_MULTI_TELEMETRY "Telemetry"
|
||||
#define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency")
|
||||
#define TR_RFPOWER "RF Power"
|
||||
#define TR_RFPOWER "RF Power"
|
||||
#define TR_MULTI_FIXEDID TR("FixedID", "Fixed ID")
|
||||
#define TR_MULTI_OPTION TR("Option", "Option value")
|
||||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on channel")
|
||||
|
@ -669,7 +662,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Pitch zero"
|
||||
#define TR_PITCH_AT_MAX INDENT "Pitch max"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Repeat zero"
|
||||
#define TR_POWEROFF "\027Power OFF..."
|
||||
#define TR_SHUTDOWN "SHUTTING DOWN"
|
||||
#define TR_SAVEMODEL "Saving model settings"
|
||||
#define TR_BATT_CALIB TR("Batt. calib", "Battery calibration")
|
||||
|
@ -785,7 +777,6 @@
|
|||
#define TR_TEMP_CALIB "Temp. Calib"
|
||||
#define TR_TIME "Time"
|
||||
#define TR_MAXBAUDRATE "Max bauds"
|
||||
|
||||
#define TR_BLUETOOTH "Bluetooth"
|
||||
#define TR_BLUETOOTH_DISC "Discover"
|
||||
#define TR_BLUETOOTH_INIT "Init"
|
||||
|
@ -1085,7 +1076,7 @@
|
|||
|
||||
#define TR_BEEP_VOLUME "Beep volume"
|
||||
#define TR_WAV_VOLUME "Wav volume"
|
||||
#define TR_BG_VOLUME TR("Bg volume", "Background Volume")
|
||||
#define TR_BG_VOLUME TR("Bg volume", "Background volume")
|
||||
|
||||
#define TR_TOP_BAR "Top bar"
|
||||
#define TR_FLASH_ERASE "Flash erase..."
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Mudo ""Alarm""NoKey""Todo "
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "No REaREb"
|
||||
|
||||
#define LEN_VBLMODE "\004"
|
||||
#define TR_VBLMODE "OFF ""Keys""Stks""Both""ON\0"
|
||||
|
||||
|
@ -534,7 +531,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "RotEnc Navig"
|
||||
#define TR_THROTTLE_LABEL "Throttle"
|
||||
#define TR_THROTTLEREVERSE TR("Invert_Acel", INDENT "Invertir Acel.")
|
||||
#define TR_MINUTEBEEP TR("Minuto", "Cada Minuto")
|
||||
|
@ -581,9 +577,7 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER "SIN DATOS"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_MENUTORESET TR_ENTER "Resetear"
|
||||
|
@ -692,7 +686,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Pitch at Zero"
|
||||
#define TR_PITCH_AT_MAX INDENT "Pitch at Max"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Repeat at Zero"
|
||||
#define TR_POWEROFF "\027Power OFF..."
|
||||
#define TR_SHUTDOWN "APAGANDO"
|
||||
#define TR_SAVEMODEL "Saving model settings"
|
||||
#define TR_BATT_CALIB "Calib.bateria"
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Äänet""Hälyt""EiNap""Kaikk"
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "No REaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\004", "\010")
|
||||
#define TR_VBLMODE TR("OFF\0""Keys""Ctrl""Both""ON\0 ", "OFF\0 ""Keys\0 ""Controls""Both\0 ""ON\0 ")
|
||||
|
||||
|
@ -526,7 +523,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "RotEnc Navig"
|
||||
#define TR_THROTTLE_LABEL "Throttle"
|
||||
#define TR_THROTTLEREVERSE TR("T-Reverse", INDENT "Throttle reverse")
|
||||
#define TR_MINUTEBEEP TR("Minute", "Minute call")
|
||||
|
@ -573,9 +569,7 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER "NO DATA"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
|
@ -686,7 +680,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Pitch at Zero"
|
||||
#define TR_PITCH_AT_MAX INDENT "Pitch at Max"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Repeat at Zero"
|
||||
#define TR_POWEROFF "\027Power OFF..."
|
||||
#define TR_SHUTDOWN "SHUTTING DOWN"
|
||||
#define TR_SAVEMODEL "Saving model settings"
|
||||
#define TR_BATT_CALIB "Battery Calib"
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Aucun""Alarm""NoKey""Tout\0"
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "NonREaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\004", "\011")
|
||||
#define TR_VBLMODE TR("OFF\0""Btns""Ctrl""Tous""ON\0","OFF\0 ""Touches\0 ""Controles""Tous\0 ""ON\0 ")
|
||||
|
||||
|
@ -532,7 +529,6 @@
|
|||
#define TR_MODEL_STILL_POWERED TR("Modèle allumé", "Modèle encore allumé")
|
||||
#define TR_MODEL_SHUTDOWN "Eteindre ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Presser [Enter] pour confirmer"
|
||||
#define TR_RENAVIG "Navig EncRot"
|
||||
#define TR_THROTTLE_LABEL "Gaz"
|
||||
#define TR_THROTTLEREVERSE TR("Inv. gaz", INDENT "Inversion gaz")
|
||||
#define TR_MINUTEBEEP TR("Bip min.", "Annonces minutes")
|
||||
|
@ -583,10 +579,8 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER "NO DATA"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036GAZ\037\146GZ%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
|
@ -689,7 +683,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Tonalité zéro"
|
||||
#define TR_PITCH_AT_MAX INDENT "Tonalité max"
|
||||
#define TR_REPEAT_AT_ZERO TR(INDENT "Interv. zéro", INDENT "Intervalle au zéro")
|
||||
#define TR_POWEROFF "\037\120ARRET..."
|
||||
#define TR_SHUTDOWN "ARRET EN COURS"
|
||||
#define TR_SAVEMODEL "Sauvegarde modèle..."
|
||||
#define TR_BATT_CALIB "Calib. batt"
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE TR("\005", "\010")
|
||||
#define TR_VBEEPMODE TR("Silen""Avvis""Notst""Tutti","Silente ""Avvisi\0 ""No Tasti""Tutti\0 ")
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "No REaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\005", "\006")
|
||||
#define TR_VBLMODE TR("OFF\0 ""Tasti""Stks\0""Tutti""ON\0 ", "Spenta""Tasti\0""Sticks""Tutti\0""Accesa")
|
||||
|
||||
|
@ -533,7 +530,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "Navig EncRot "
|
||||
#define TR_THROTTLE_LABEL "Motore"
|
||||
#define TR_THROTTLEREVERSE TR("Mot inv.", INDENT "Motore Inverso")
|
||||
#define TR_MINUTEBEEP "Minuto"
|
||||
|
@ -584,9 +580,7 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER"DATI ASSENTI"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_MENUTORESET TR_ENTER" x Azzerare"
|
||||
|
@ -687,7 +681,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Tono a Zero"
|
||||
#define TR_PITCH_AT_MAX INDENT "Tono al Max"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Ripeti a Zero"
|
||||
#define TR_POWEROFF "\027Power OFF..."
|
||||
#define TR_SHUTDOWN "ARRESTO.."
|
||||
#define TR_SAVEMODEL "Salvataggio dati modello"
|
||||
#define TR_BATT_CALIB "Calibra batt."
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Stil\0""Alarm""NoKey""Alles"
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "UITREaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\005", "\010")
|
||||
#define TR_VBLMODE TR("UIT\0 ""Keys\0""Stick""Beide""AAN\0 ", "UIT\0 ""Toetsen\0""Sticks\0 ""Beide\0 ""AAN\0 ")
|
||||
|
||||
|
@ -516,7 +513,6 @@ TR_GYR_VSRCRAW
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "Stappenschakelaar"
|
||||
#define TR_THROTTLE_LABEL "Gas"
|
||||
#define TR_THROTTLEREVERSE TR("Reverse", INDENT "Omgekeerd")
|
||||
#define TR_MINUTEBEEP TR("Min-Alarm", "Minuten-Alarm")
|
||||
|
@ -569,9 +565,7 @@ TR_GYR_VSRCRAW
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER"Geen Data"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_MENUTORESET TR_ENTER" voor Reset"
|
||||
|
@ -675,7 +669,6 @@ TR_GYR_VSRCRAW
|
|||
#define TR_PITCH_AT_ZERO INDENT "Laagste Toon"
|
||||
#define TR_PITCH_AT_MAX INDENT "Hoogste Toon"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Herhalen bij 0"
|
||||
#define TR_POWEROFF "\027Uitschakelen..."
|
||||
#define TR_SHUTDOWN "Afsluiten"
|
||||
#define TR_SAVEMODEL "Bewaar Model-instellingen"
|
||||
#define TR_BATT_CALIB "Accu Calib"
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Cichy""Alarm""BezPr""Wsz.\0"
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "No REaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\004", "\010")
|
||||
#define TR_VBLMODE TR("Wył\0""Przy""Drąż""Oba\0""Zał\0", "Wyłącz ""Przycisk""Drązki\0 ""Oba\0 ""Włącz ")
|
||||
|
||||
|
@ -533,7 +530,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "Nawigacja potencjometrem"
|
||||
#define TR_THROTTLE_LABEL "Gaz "
|
||||
#define TR_THROTTLEREVERSE TR("OdwrGaz", INDENT "OdwrGaz")
|
||||
#define TR_MINUTEBEEP TR("Minuta", "PikCoMinutę")
|
||||
|
@ -584,9 +580,7 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER "BrakDAN"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "TmixMaks"
|
||||
#define TR_FREE_STACK "Wolny stos"
|
||||
#define TR_MENUTORESET TR_ENTER " >> Reset"
|
||||
|
@ -687,7 +681,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Ton przy Zerze"
|
||||
#define TR_PITCH_AT_MAX INDENT "Ton przy Max"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Powtórz przy Zerze"
|
||||
#define TR_POWEROFF "\027Wyłączanie.."
|
||||
#define TR_SHUTDOWN "Wyłączanie.."
|
||||
#define TR_SAVEMODEL "Zapisz ustwienia modelu"
|
||||
#define TR_BATT_CALIB "Kalib:Baterii"
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Mudo ""Alarm""NoKey""Todo "
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "No REaREb"
|
||||
|
||||
#define LEN_VBLMODE "\004"
|
||||
#define TR_VBLMODE "OFF ""Chav""Stks""Tudo""ON\0"
|
||||
|
||||
|
@ -519,7 +516,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "RotEnc Navig"
|
||||
#define TR_THROTTLE_LABEL "Throttle"
|
||||
#define TR_THROTTLEREVERSE TR("Inverte Acel.", INDENT "Inverte Acel.")
|
||||
#define TR_MINUTEBEEP "Beep Minuto"
|
||||
|
@ -566,9 +562,7 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER"SEM DADOS"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_MENUTORESET TR_ENTER" Reinicia"
|
||||
|
@ -677,7 +671,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Pitch at Zero"
|
||||
#define TR_PITCH_AT_MAX INDENT "Pitch at Max"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Repeat at Zero"
|
||||
#define TR_POWEROFF "\027Power OFF..."
|
||||
#define TR_SHUTDOWN "DESLIGANDOo"
|
||||
#define TR_SAVEMODEL "Saving model settings"
|
||||
#define TR_BATT_CALIB "CALIBRAR BATT"
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Tyst\0""Alarm""EjKnp""Alla\0"
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "IngREaREb"
|
||||
|
||||
#define LEN_VBLMODE TR("\005", "\010")
|
||||
#define TR_VBLMODE TR("Av\0 ""Knapp""Spak\0""Allt\0""På\0 ", "Av\0 ""Knappar\0""Spakar\0 ""Allt\0 ""På\0 ")
|
||||
|
||||
|
@ -532,7 +529,6 @@
|
|||
#define TR_MODEL_STILL_POWERED "Model still powered"
|
||||
#define TR_MODEL_SHUTDOWN "Shutdown ?"
|
||||
#define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm"
|
||||
#define TR_RENAVIG "RotEnk Navig"
|
||||
#define TR_THROTTLE_LABEL "Gas"
|
||||
#define TR_THROTTLEREVERSE TR("Inv.Gas", INDENT "Inverterad Gas")
|
||||
#define TR_MINUTEBEEP "Minutpip"
|
||||
|
@ -583,9 +579,7 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA CENTER "DATA SAKNAS"
|
||||
#define TR_TOTTM1TM2THRTHP "\037\146SES\036TM1\037\146TM2\036THR\037\146TH%"
|
||||
#define TR_US "us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us"
|
||||
#define TR_TMIXMAXMS "Tmix max"
|
||||
#define TR_FREE_STACK "Free stack"
|
||||
#define TR_MENUTORESET TR_ENTER " Nollar"
|
||||
|
@ -686,7 +680,6 @@
|
|||
#define TR_PITCH_AT_ZERO INDENT "Ton vid Noll"
|
||||
#define TR_PITCH_AT_MAX INDENT "Ton vid Max"
|
||||
#define TR_REPEAT_AT_ZERO INDENT "Repetera vid Noll"
|
||||
#define TR_POWEROFF "\027Stänger Av..."
|
||||
#define TR_SHUTDOWN "STÄNGER AV"
|
||||
#define TR_SAVEMODEL "Spara modellinställn."
|
||||
#define TR_BATT_CALIB "Kalib. Batteri"
|
||||
|
|
77
tools/release23/build-sdcard.sh
Executable file
77
tools/release23/build-sdcard.sh
Executable file
|
@ -0,0 +1,77 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
workdir=/home/opentx/release23
|
||||
output=/var/www/html/2.3/release
|
||||
|
||||
# Handle opentx.sdcard.version
|
||||
sdcard_version="2.3V"$(grep 'set(SDCARD_REVISION' ${workdir}/code/CMakeLists.txt | grep -o '".*"' | sed 's/"//g')
|
||||
echo ${sdcard_version} > ${workdir}/code/radio/sdcard/horus/opentx.sdcard.version
|
||||
echo ${sdcard_version} > ${workdir}/code/radio/sdcard/taranis-x9/opentx.sdcard.version
|
||||
echo ${sdcard_version} > ${workdir}/code/radio/sdcard/taranis-x7/opentx.sdcard.version
|
||||
|
||||
|
||||
if cmp --silent ${workdir}/code/radio/sdcard/horus/opentx.sdcard.version ${workdir}/opentx.sdcard.version
|
||||
then
|
||||
exit
|
||||
else
|
||||
cd ${workdir}
|
||||
|
||||
# Copy git sdcard data
|
||||
rm -Rf ${workdir}/sdcard
|
||||
cp -r ${workdir}/code/radio/sdcard .
|
||||
|
||||
# Get images for Horus
|
||||
mkdir -p ${workdir}/sdcard/horus/IMAGES
|
||||
cp /home/opentx/horus-bitmaps/* ${workdir}/sdcard/horus/IMAGES/
|
||||
|
||||
|
||||
# Request sound pack generation
|
||||
if [[ ! -d /tmp/SOUNDS/fr ]];then
|
||||
${workdir}/code/tools/release23/tts.py en csv files
|
||||
fi
|
||||
if [[ ! -d /tmp/SOUNDS/es ]];then
|
||||
${workdir}/code/tools/release23/tts.py fr csv files
|
||||
fi
|
||||
if [[ ! -d /tmp/SOUNDS/it ]];then
|
||||
${workdir}/code/tools/release23/tts.py es csv files
|
||||
fi
|
||||
if [[ ! -d /tmp/SOUNDS/de ]];then
|
||||
${workdir}/code/tools/release23/tts.py it csv files
|
||||
fi
|
||||
if [[ ! -d /tmp/SOUNDS/cz ]];then
|
||||
${workdir}/code/tools/release23/tts.py de csv files
|
||||
fi
|
||||
if [[ ! -d /tmp/SOUNDS/pl ]];then
|
||||
${workdir}/code/tools/release23/tts.py cz csv files
|
||||
fi
|
||||
if [[ ! -d /tmp/SOUNDS/ru ]];then
|
||||
${workdir}/code/tools/release23/tts.py pt csv files
|
||||
fi
|
||||
${workdir}/code/tools/release23/tts.py ru csv psv files
|
||||
|
||||
# Create sdcards.zips for supported platforms
|
||||
mv /tmp/SOUNDS ${workdir}/sdcard/horus/
|
||||
mkdir ${workdir}/sdcard/taranis-x9/SOUNDS
|
||||
mkdir ${workdir}/sdcard/taranis-x7/SOUNDS
|
||||
cp -r ${workdir}/sdcard/horus/SOUNDS ${workdir}/sdcard/taranis-x9/
|
||||
cp -r ${workdir}/sdcard/horus/SOUNDS ${workdir}/sdcard/taranis-x7/
|
||||
cd ${workdir}/sdcard/horus && zip -r ${output}/sdcard/sdcard-horus-${sdcard_version}.zip *
|
||||
cd ${workdir}/sdcard/taranis-x9 && zip -r ${output}/sdcard/sdcard-taranis-x9-${sdcard_version}.zip *
|
||||
cd ${workdir}/sdcard/taranis-x7 && zip -r ${output}/sdcard/sdcard-taranis-x7-${sdcard_version}.zip *
|
||||
|
||||
# Create symlinks for other radios
|
||||
ln -s ${output}/sdcard/sdcard-taranis-x7-${sdcard_version}.zip ${output}/sdcard/sdcard-taranis-xlite-${sdcard_version}.zip
|
||||
ln -s ${output}/sdcard/sdcard-taranis-x7-${sdcard_version}.zip ${output}/sdcard/sdcard-taranis-x9lite-${sdcard_version}.zip
|
||||
ln -s ${output}/sdcard/sdcard-taranis-x7-${sdcard_version}.zip ${output}/sdcard/sdcard-jumper-t12-${sdcard_version}.zip
|
||||
|
||||
# remove LUA stuff for 9x platform
|
||||
rm -Rf ${workdir}/sdcard/taranis-x7/SCRIPTS
|
||||
rm -Rf ${workdir}/sdcard/taranis-x7/FrSky-utilities
|
||||
cd ${workdir}/sdcard/taranis-x7 && zip -r ${output}/sdcard/sdcard-9xarm-${sdcard_version}.zip *
|
||||
|
||||
rm -Rf ${workdir}/sdcard
|
||||
cp -r ${workdir}/code/radio/sdcard/horus/opentx.sdcard.version ${workdir}
|
||||
fi
|
152
tools/release23/tts.py
Executable file
152
tools/release23/tts.py
Executable file
|
@ -0,0 +1,152 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
# This script is a modified version to support Linux TTS fiel genration using PicoTTS
|
||||
|
||||
# Sound pack maintainers (incomplete list) by language alphabetical order
|
||||
# Czech : Martin Hotar
|
||||
# French : Bertrand Songis & André Bernet
|
||||
# English : Rob Thompson & Martin Hotar
|
||||
# German : Romolo Manfredini (Some corrections by Peer)
|
||||
# Italian : Romolo Manfredini
|
||||
# Portuguese : Romolo Manfredini
|
||||
# Spanish : Romolo Manfredini (With the help of Jose Moreno)
|
||||
|
||||
# from __future__ import print_function
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import zipfile
|
||||
from gtts import gTTS
|
||||
from tts_common import *
|
||||
board = "taranis"
|
||||
|
||||
reload(sys)
|
||||
sys.setdefaultencoding('utf8')
|
||||
|
||||
SOURCE_DIRECTORY = os.path.dirname(os.path.realpath(__file__))
|
||||
lib_path = os.path.abspath(os.path.join(SOURCE_DIRECTORY, '..', '..', 'radio', 'util'))
|
||||
sys.path.append(lib_path)
|
||||
|
||||
def generate(str, filename):
|
||||
if 0:
|
||||
output = "output.wav"
|
||||
command = 'pico2wave -l=%s -w=%s "%s"' % (voice, output, str)
|
||||
os.system(command.encode('utf-8'))
|
||||
command = "sox %s -r 32000 %s reverse silence 1 0.1 0.1%% reverse" % (output, filename)
|
||||
os.system(command.encode('utf-8'))
|
||||
else:
|
||||
output = u"output.mp3"
|
||||
tts = gTTS(text=str, lang=voice[:2])
|
||||
tts.save(output)
|
||||
command = "sox --norm %s -r 32000 %s tempo 1.2" % (output, filename)
|
||||
os.system(command.encode('utf-8'))
|
||||
command = "rm -f output.mp3"
|
||||
os.system(command.encode('utf-8'))
|
||||
|
||||
################################################################
|
||||
|
||||
if __name__ == "__main__":
|
||||
if "en" in sys.argv:
|
||||
from tts_en import systemSounds, sounds
|
||||
|
||||
directory = "en"
|
||||
voice = "en-US"
|
||||
|
||||
elif "fr" in sys.argv:
|
||||
from tts_fr import systemSounds, sounds
|
||||
|
||||
directory = "fr"
|
||||
voice = "fr-FR"
|
||||
|
||||
elif "it" in sys.argv:
|
||||
from tts_it import systemSounds, sounds
|
||||
|
||||
directory = "it"
|
||||
voice = "it-IT"
|
||||
|
||||
elif "de" in sys.argv:
|
||||
from tts_de import systemSounds, sounds
|
||||
|
||||
directory = "de"
|
||||
voice = "de-DE"
|
||||
|
||||
elif "es" in sys.argv:
|
||||
from tts_es import systemSounds, sounds
|
||||
|
||||
directory = "es"
|
||||
voice = "es-ES"
|
||||
|
||||
elif "cz" in sys.argv:
|
||||
from tts_cz import systemSounds, sounds
|
||||
|
||||
directory = "cz"
|
||||
voice = "cs-CZ"
|
||||
|
||||
elif "ru" in sys.argv:
|
||||
from tts_ru import systemSounds, sounds
|
||||
|
||||
directory = "ru"
|
||||
voice = "ru-RU"
|
||||
|
||||
elif "pt" in sys.argv:
|
||||
from tts_pt import systemSounds, sounds
|
||||
|
||||
directory = "pt"
|
||||
voice = "pt-PT"
|
||||
|
||||
else:
|
||||
print("which language?")
|
||||
exit()
|
||||
|
||||
if "csv" in sys.argv:
|
||||
path = "/tmp/SOUNDS/" + directory + "/SYSTEM/"
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
os.chdir(path)
|
||||
with open("%s-%s.csv" % (voice, board), "wb") as csvFile:
|
||||
for s, f in systemSounds:
|
||||
if s and f:
|
||||
l = u""
|
||||
if board in ("sky9x", "taranis"):
|
||||
l += u"SOUNDS/%s/SYSTEM;" % directory
|
||||
l += f + u";" + s + u"\n"
|
||||
csvFile.write(l.encode("utf-8"))
|
||||
for s, f in sounds:
|
||||
if s and f:
|
||||
l = u""
|
||||
if board in ("sky9x", "taranis"):
|
||||
l += u"SOUNDS/%s;" % directory
|
||||
l += f + u";" + s + u"\n"
|
||||
csvFile.write(l.encode("utf-8"))
|
||||
|
||||
if "psv" in sys.argv:
|
||||
path = "/tmp/SOUNDS/" + directory + "/"
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
os.chdir(path)
|
||||
with open("%s-%s.psv" % (voice, board), "wb") as csvFile:
|
||||
for s, f in systemSounds:
|
||||
if s and f:
|
||||
l = u"SYSTEM|" + f.replace(".wav", "") + u"|" + s + u"\r\n"
|
||||
csvFile.write(l.encode("windows-1251"))
|
||||
for s, f in sounds:
|
||||
if s and f:
|
||||
l = u"|" + f.replace(".wav", "") + u"|" + s + u"\r\n"
|
||||
csvFile.write(l.encode("windows-1251"))
|
||||
|
||||
|
||||
if "files" in sys.argv:
|
||||
path = "/tmp/SOUNDS/" + directory + "/SYSTEM/"
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
os.chdir(path)
|
||||
for s, f in systemSounds:
|
||||
if s and f:
|
||||
generate(s, f)
|
||||
os.chdir("..")
|
||||
for s, f in sounds:
|
||||
if s and f:
|
||||
generate(s, f)
|
14
tools/release23/tts_common.py
Normal file
14
tools/release23/tts_common.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
NO_ALTERNATE = 1024
|
||||
PROMPT_CUSTOM_BASE = 256
|
||||
PROMPT_SYSTEM_BASE = 0
|
||||
board = "taranis"
|
||||
|
||||
import sys
|
||||
|
||||
def filename(idx, alternate=0):
|
||||
ext = ".wav"
|
||||
if isinstance(idx, int):
|
||||
result = "%04d%s" % (idx, ext)
|
||||
elif board in ('sky9x', 'taranis'):
|
||||
result = idx + ext
|
||||
return result
|
Loading…
Add table
Add a link
Reference in a new issue