From d064ba013615d6d8fea71f0a09ab2cdacf0b795d Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Tue, 22 Mar 2016 15:49:45 +0400 Subject: [PATCH 01/98] Simu compilation --- radio/src/targets/simu/simpgmspace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index d79130eae..2c930e562 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -38,7 +38,7 @@ #include #endif -uint8_t MCUCSR, MCUSR; +uint8_t MCUCSR, MCUSR, MCUCR; volatile uint8_t pina=0xff, pinb=0xff, pinc=0xff, pind, pine=0xff, pinf=0xff, ping=0xff, pinh=0xff, pinj=0, pinl=0; uint8_t portb, portc, porth=0, dummyport; uint16_t dummyport16; From 74992a69dc2b203c1e07e4f619f0398aa5872b81 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Tue, 22 Mar 2016 16:15:11 +0400 Subject: [PATCH 02/98] Default AVR fuse settings changed to disable JTAG interface (#3379 part 2) --- companion/src/radiointerface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/companion/src/radiointerface.cpp b/companion/src/radiointerface.cpp index c609444d2..2bfec44ab 100644 --- a/companion/src/radiointerface.cpp +++ b/companion/src/radiointerface.cpp @@ -191,7 +191,7 @@ void resetAvrdudeFuses(bool eepromProtect, ProgressWidget *progress) QStringList str; if (bcd.getMCU() == "m2560") { args << "-B8"; - QString erStr = eepromProtect ? "hfuse:w:0x11:m" : "hfuse:w:0x19:m"; + QString erStr = eepromProtect ? "hfuse:w:0x51:m" : "hfuse:w:0x59:m"; str << "-U" << "lfuse:w:0xD7:m" << "-U" << erStr << "-U" << "efuse:w:0xFC:m"; //use hfuse = 0x81 to prevent eeprom being erased with every flashing } @@ -220,7 +220,7 @@ void resetAvrdudeFuses(bool eepromProtect, ProgressWidget *progress) lfuses = "lfuse:w:0x3F:m"; } - QString erStr = eepromProtect ? "hfuse:w:0x81:m" : "hfuse:w:0x89:m"; + QString erStr = eepromProtect ? "hfuse:w:0xC1:m" : "hfuse:w:0xC9:m"; str << "-U" << lfuses << "-U" << erStr << "-U" << "efuse:w:0xFF:m"; //use hfuse = 0x81 to prevent eeprom being erased with every flashing } From 5691395dcf6c15e0fa4a22f711e0045570856b66 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 22 Mar 2016 19:36:43 +0100 Subject: [PATCH 03/98] [Horus] Google tests added --- radio/src/audio_arm.cpp | 2 +- radio/src/storage/rambackup.cpp | 14 -- radio/src/storage/sdcard_raw.h | 7 + radio/src/tests/eeprom.cpp | 27 +++- radio/src/tests/frsky.cpp | 24 ++-- radio/src/tests/gtests.h | 6 +- radio/src/tests/lcd.cpp | 29 ++-- radio/src/tests/mixer.cpp | 22 +-- radio/src/tests/switches.cpp | 234 +++----------------------------- 9 files changed, 99 insertions(+), 266 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index a9b409425..985a18b36 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -319,7 +319,7 @@ void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event) { char * str = getModelAudioPath(filename); -#if defined(PCBTARANIS) +#if defined(PCBTARANIS) || defined(PCBHORUS) *str++ = 'L'; if (index >= 9) { div_t qr = div(index+1, 10); diff --git a/radio/src/storage/rambackup.cpp b/radio/src/storage/rambackup.cpp index d61c8e4ea..b5a57c832 100644 --- a/radio/src/storage/rambackup.cpp +++ b/radio/src/storage/rambackup.cpp @@ -34,11 +34,6 @@ PACK(struct RamBackupUncompressed { Backup::RamBackupUncompressed ramBackupUncompressed __DMA; -PACK(struct RamBackup { - uint16_t size; - uint8_t data[4094]; -}); - #if defined(SIMU) RamBackup _ramBackup; RamBackup * ramBackup = &_ramBackup; @@ -52,15 +47,6 @@ void rambackupWrite() copyModelData(&ramBackupUncompressed.model, &g_model); ramBackup->size = compress(ramBackup->data, 4094, (const uint8_t *)&ramBackupUncompressed, sizeof(ramBackupUncompressed)); TRACE("RamBackupWrite sdsize=%d backupsize=%d rlcsize=%d", sizeof(ModelData)+sizeof(RadioData), sizeof(Backup::RamBackupUncompressed), ramBackup->size); - -#if 0 - // TODO move this code to non regression tests - Backup::RamBackupUncompressed ramBackupRestored; - if (uncompress((uint8_t *)&ramBackupRestored, sizeof(ramBackupRestored), ramBackup->data, ramBackup->size) != sizeof(ramBackupUncompressed)) - TRACE("ERROR uncompress"); - if (memcmp(&ramBackupUncompressed, &ramBackupRestored, sizeof(ramBackupUncompressed)) != 0) - TRACE("ERROR restore"); -#endif } bool rambackupRestore() diff --git a/radio/src/storage/sdcard_raw.h b/radio/src/storage/sdcard_raw.h index d5a21b461..0043a2970 100644 --- a/radio/src/storage/sdcard_raw.h +++ b/radio/src/storage/sdcard_raw.h @@ -30,4 +30,11 @@ const char * readModel(const char * filename, uint8_t * buffer, uint32_t size); const char * loadModel(const char * filename); const char * createModel(); +PACK(struct RamBackup { + uint16_t size; + uint8_t data[4094]; +}); + +extern RamBackup * ramBackup; + #endif // _SDCARD_RAW_H_ diff --git a/radio/src/tests/eeprom.cpp b/radio/src/tests/eeprom.cpp index 6e7f806bf..35fca53a0 100644 --- a/radio/src/tests/eeprom.cpp +++ b/radio/src/tests/eeprom.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -20,7 +20,30 @@ #include "gtests.h" -#if !defined(PCBSKY9X) +#if !defined(EEPROM) && defined(SDCARD) +namespace Backup { +#define BACKUP +#include "datastructs.h" +PACK(struct RamBackupUncompressed { + ModelData model; + RadioData radio; +}); +#undef BACKUP +}; +extern Backup::RamBackupUncompressed ramBackupUncompressed; +TEST(Storage, BackupAndRestore) +{ + + rambackupWrite(); + Backup::RamBackupUncompressed ramBackupRestored; + if (uncompress((uint8_t *)&ramBackupRestored, sizeof(ramBackupRestored), ramBackup->data, ramBackup->size) != sizeof(ramBackupUncompressed)) + TRACE("ERROR uncompress"); + if (memcmp(&ramBackupUncompressed, &ramBackupRestored, sizeof(ramBackupUncompressed)) != 0) + TRACE("ERROR restore"); +} +#endif + +#if defined(EEPROM_RLC) TEST(Eeprom, 100_random_writes) { eepromFile = NULL; // in memory diff --git a/radio/src/tests/frsky.cpp b/radio/src/tests/frsky.cpp index 18dbab3e1..189f35bb6 100644 --- a/radio/src/tests/frsky.cpp +++ b/radio/src/tests/frsky.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -82,7 +82,7 @@ TEST(FrSky, FrskyValueWithMinAveraging) { /* The following expected[] array is filled - with values that correspond to 4 elements + with values that correspond to 4 elements long averaging buffer. If length of averaging buffer is changed, this values must be adjusted @@ -91,7 +91,7 @@ TEST(FrSky, FrskyValueWithMinAveraging) int testPos = 0; //test of averaging FrskyValueWithMin testVal; - testVal.value = 0; + testVal.value = 0; testVal.set(10); EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), 10); EXPECT_EQ(testVal.value, expected[testPos++]); @@ -162,16 +162,16 @@ TEST(FrSky, HubAltNegative) // first trigger hi precision, by setting AP above 9 processHubPacket(BARO_ALT_BP_ID, -1); // set value of -1.35m processHubPacket(BARO_ALT_AP_ID, 35); - EXPECT_EQ(telemetryItems[0].value, -13); + EXPECT_EQ(telemetryItems[0].value, -13); processHubPacket(BARO_ALT_BP_ID, 12); // set value of 12.35m processHubPacket(BARO_ALT_AP_ID, 35); - EXPECT_EQ(telemetryItems[0].value, 123); + EXPECT_EQ(telemetryItems[0].value, 123); // now test with the AP less than 10 to check if hiprecision is still active processHubPacket(BARO_ALT_BP_ID, 12); // set value of 12.05m processHubPacket(BARO_ALT_AP_ID, 05); - EXPECT_EQ(telemetryItems[0].value, 120); + EXPECT_EQ(telemetryItems[0].value, 120); } #endif // #if defined(FRSKY) && defined(CPUARM) @@ -250,7 +250,7 @@ TEST(FrSkySPORT, frskySetCellVoltage) generateSportCellPacket(packet, 3, 0, _V(405), _V(300)); processSportPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); processSportPacket(packet); - + EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 405); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 300); @@ -262,10 +262,10 @@ TEST(FrSkySPORT, frskySetCellVoltage) generateSportCellPacket(packet, 3, 0, _V(405), _V(250)); processSportPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); processSportPacket(packet); - + generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); processSportPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); processSportPacket(packet); - + EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 410); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 420); @@ -326,7 +326,10 @@ TEST(FrSkySPORT, frskySetCellVoltage) //display test lcdClear(); + +#if !defined(COLORLCD) g_model.frsky.voltsSource = FRSKY_VOLTS_SOURCE_A1; +#endif } TEST(FrSkySPORT, StrangeCellsBug) @@ -401,7 +404,10 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors) //display test lcdClear(); + +#if !defined(COLORLCD) g_model.frsky.voltsSource = FRSKY_VOLTS_SOURCE_A1; +#endif } void generateSportFasVoltagePacket(uint8_t * packet, uint32_t voltage) diff --git a/radio/src/tests/gtests.h b/radio/src/tests/gtests.h index dfc5dd8d5..5dd7db858 100644 --- a/radio/src/tests/gtests.h +++ b/radio/src/tests/gtests.h @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -35,7 +35,7 @@ extern uint16_t anaInValues[NUM_STICKS+NUM_POTS]; void doMixerCalculations(); -#if defined(PCBTARANIS) +#if defined(PCBTARANIS) || defined(PCBHORUS) #define RADIO_RESET() \ g_eeGeneral.switchConfig = 0x00007bff #else @@ -44,7 +44,7 @@ void doMixerCalculations(); inline void SYSTEM_RESET() { -#if defined(CPUARM) +#if defined(CPUARM) && defined(EEPROM) memset(modelHeaders, 0, sizeof(modelHeaders)); #endif generalDefault(); diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index 1f27bad18..3a1a6794b 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -96,6 +96,9 @@ bool checkScreenshot(const QString & test) return true; } +#if defined(COLORLCD) +// TODO +#else TEST(outdezNAtt, test_unsigned) { lcdClear(); @@ -113,7 +116,6 @@ TEST(outdezNAtt, testBigNumbers) } #endif // #if defined(CPUARM) - TEST(Lcd, Invers_0_0) { lcdClear(); @@ -204,7 +206,7 @@ TEST(Lcd, Smlsize) bool invert = false; for(int i=0; i<3; i++) { - lcdDrawText(40+(4*i), 0+(4*i), "ABC", SMLSIZE|(invert?INVERS:0)); + lcdDrawText(40+(4*i), 0+(4*i), "ABC", SMLSIZE|(invert?INVERS:0)); invert = !invert; } @@ -221,7 +223,7 @@ TEST(Lcd, Stdsize) bool invert = false; for(int i=0; i<3; i++) { - lcdDrawText(40+(4*i), 0+(4*i), "ABC", (invert?INVERS:0)); + lcdDrawText(40+(4*i), 0+(4*i), "ABC", (invert?INVERS:0)); invert = !invert; } @@ -238,7 +240,7 @@ TEST(Lcd, Midsize) bool invert = false; for(int i=0; i<3; i++) { - lcdDrawText(40+(4*i), 0+(4*i), "ABC", MIDSIZE|(invert?INVERS:0)); + lcdDrawText(40+(4*i), 0+(4*i), "ABC", MIDSIZE|(invert?INVERS:0)); invert = !invert; } @@ -255,7 +257,7 @@ TEST(Lcd, Dblsize) bool invert = false; for(int i=0; i<3; i++) { - lcdDrawText(10+(4*i), 30+(4*i), "ABC", DBLSIZE|(invert?INVERS:0)); + lcdDrawText(10+(4*i), 30+(4*i), "ABC", DBLSIZE|(invert?INVERS:0)); invert = !invert; } @@ -329,11 +331,11 @@ public: }; ~TestBuffer() { if (buf) delete[] buf; }; uint8_t * buffer() { return buf + padding; }; - void leakCheck() const { + void leakCheck() const { uint8_t paddingCompareBuf[padding]; memset(paddingCompareBuf, 0xA5, padding); if (memcmp(buf, paddingCompareBuf, padding) != 0) { - ADD_FAILURE() << "buffer leaked low"; + ADD_FAILURE() << "buffer leaked low"; }; memset(paddingCompareBuf, 0x5A, padding); if (memcmp(buf+padding+size, paddingCompareBuf, padding) != 0) { @@ -397,33 +399,33 @@ TEST(Lcd, lcdDrawBitmapLoadAndDisplay) TEST(Lcd, lcdDrawLine) { int start, length, xOffset; - uint8_t pattern; + uint8_t pattern; lcdClear(); start = 5; - pattern = SOLID; + pattern = SOLID; length = 40; xOffset = 0; lcdDrawLine(start+(length>0?1:-1)+xOffset, start, start+(length>0?1:-1)+xOffset+length, start, pattern, 0); lcdDrawLine(start+xOffset, start+(length>0?1:-1), start+xOffset, start+(length>0?1:-1)+length, pattern, 0); start = 10; - pattern = DOTTED; + pattern = DOTTED; length = 40; xOffset = 0; lcdDrawLine(start+(length>0?1:-1)+xOffset, start, start+(length>0?1:-1)+xOffset+length, start, pattern, 0); lcdDrawLine(start+xOffset, start+(length>0?1:-1), start+xOffset, start+(length>0?1:-1)+length, pattern, 0); start = 55; - pattern = SOLID; + pattern = SOLID; length = -40; xOffset = 80; lcdDrawLine(start+(length>0?1:-1)+xOffset, start, start+(length>0?1:-1)+xOffset+length, start, pattern, 0); lcdDrawLine(start+xOffset, start+(length>0?1:-1), start+xOffset, start+(length>0?1:-1)+length, pattern, 0); start = 50; - pattern = DOTTED; + pattern = DOTTED; length = -40; xOffset = 80; lcdDrawLine(start+(length>0?1:-1)+xOffset, start, start+(length>0?1:-1)+xOffset+length, start, pattern, 0); @@ -459,3 +461,4 @@ TEST(Lcd, lcdDrawLine) EXPECT_TRUE(checkScreenshot("lcdDrawLine")); } #endif +#endif diff --git a/radio/src/tests/mixer.cpp b/radio/src/tests/mixer.cpp index 1ffa3ff95..be2c50173 100644 --- a/radio/src/tests/mixer.cpp +++ b/radio/src/tests/mixer.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -19,7 +19,7 @@ */ #include "gtests.h" -#include "../templates.h" +#include "templates.h" #define CHECK_NO_MOVEMENT(channel, value, duration) \ for (int i=1; i<=(duration); i++) { \ @@ -173,7 +173,7 @@ TEST(Trims, throttleTrimWithZeroWeightOnThrottle) MODEL_RESET(); modelDefault(0); g_model.thrTrim = 1; -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) // the input already exists ExpoData *expo = expoAddress(THR_STICK); #else @@ -252,7 +252,7 @@ TEST(Trims, invertedThrottlePlusthrottleTrimWithZeroWeightOnThrottle) modelDefault(0); g_model.throttleReversed = 1; g_model.thrTrim = 1; -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) // the input already exists ExpoData *expo = expoAddress(THR_STICK); #else @@ -325,7 +325,7 @@ TEST(Trims, invertedThrottlePlusthrottleTrimWithZeroWeightOnThrottle) EXPECT_EQ(channelOutputs[2], 0); } -#if !defined(PCBTARANIS) +#if !defined(VIRTUALINPUTS) TEST(Trims, greaterTrimLink) { MODEL_RESET(); @@ -395,7 +395,7 @@ TEST(Trims, InstantTrim) EXPECT_EQ(25, getTrimValue(0, AIL_STICK)); } -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) TEST(Trims, InstantTrimNegativeCurve) { MODEL_RESET(); @@ -639,7 +639,7 @@ TEST(Mixer, SlowOnSwitch) g_model.mixData[0].speedDown = SLOW_STEP*5; s_mixer_first_run_done = true; - + evalFlightModeMixes(e_perout_mode_normal, 0); EXPECT_EQ(chans[0], 0); @@ -747,7 +747,7 @@ TEST(Mixer, SlowOnSwitchSource) g_model.mixData[0].weight = 100; g_model.mixData[0].speedUp = SLOW_STEP*5; g_model.mixData[0].speedDown = SLOW_STEP*5; -#if defined(PCBTARANIS) +#if defined(PCBTARANIS) || defined(PCBHORUS) g_eeGeneral.switchConfig = 0x03; #endif @@ -818,7 +818,7 @@ TEST(Mixer, SlowAndDelayOnReplace3POSSource) g_model.mixData[0].speedDown = SLOW_STEP*5; s_mixer_first_run_done = true; - + simuSetSwitch(3, -1); CHECK_SLOW_MOVEMENT(0, -1, 250); EXPECT_EQ(chans[0], -CHANNEL_MAX); @@ -866,7 +866,7 @@ TEST(Mixer, SlowOnSwitchReplace) } #endif -#if !defined(PCBTARANIS) +#if !defined(VIRTUALINPUTS) TEST(Mixer, NoTrimOnInactiveMix) { MODEL_RESET(); @@ -982,7 +982,7 @@ TEST(Heli, Mode2Test) } #endif -#if defined(HELI) && !defined(PCBTARANIS) +#if defined(HELI) && !defined(VIRTUALINPUTS) TEST(Heli, SimpleTest) { MODEL_RESET(); diff --git a/radio/src/tests/switches.cpp b/radio/src/tests/switches.cpp index 19499ed55..ae629965f 100644 --- a/radio/src/tests/switches.cpp +++ b/radio/src/tests/switches.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -20,7 +20,7 @@ #include "gtests.h" -#if !defined(PCBTARANIS) +#if !defined(VIRTUALINPUTS) TEST(getSwitch, undefCSW) { MODEL_RESET(); @@ -45,9 +45,9 @@ TEST(getSwitch, circularCSW) } #endif -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) -void setLogicalSwitch(int index, uint16_t _func, int16_t _v1, int16_t _v2, int16_t _v3 = 0, uint8_t _delay = 0, uint8_t _duration = 0, int8_t _andsw = 0) +void setLogicalSwitch(int index, uint16_t _func, int16_t _v1, int16_t _v2, int16_t _v3 = 0, uint8_t _delay = 0, uint8_t _duration = 0, int8_t _andsw = 0) { g_model.logicalSw[index].func = _func; g_model.logicalSw[index].v1 = _v1; @@ -89,7 +89,7 @@ TEST(getSwitch, OldTypeStickyCSW) EXPECT_EQ(getSwitch(SWSRC_SW1), false); EXPECT_EQ(getSwitch(SWSRC_SW2), false); } -#endif // #if defined(PCBTARANIS) +#endif // #if defined(VIRTUALINPUTS) TEST(getSwitch, nullSW) { @@ -97,207 +97,6 @@ TEST(getSwitch, nullSW) EXPECT_EQ(getSwitch(0), true); } -#if 0 -TEST(getSwitch, DISABLED_VfasWithDelay) -{ - MODEL_RESET(); - MIXER_RESET(); - memclear(&frskyData, sizeof(frskyData)); - /* - Test for logical switch: - L1 Vfas < 9.6 Delay (0.5s) - - (gdb) print Open9xX9D::g_model.logicalSw[0] - $3 = {v1 = -39 '\331', v2 = 96, v3 = 0, func = 4 '\004', delay = 5 '\005', duration = 0 '\000', andsw = 0 '\000'} - */ - g_model.logicalSw[0] = {int8_t(MIXSRC_FIRST_TELEM+TELEM_VFAS-1), 96, 0, 4, 5, 0, 0}; - frskyData.hub.vfas = 150; //unit is 100mV - - //telemetry streaming is FALSE, so L1 should be FALSE no matter what value Vfas has - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - //every logicalSwitchesTimerTick() represents 100ms - //so now after 5 ticks we should still have a FALSE value - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - //now turn on telemetry - EXPECT_EQ(TELEMETRY_STREAMING(), false); - TELEMETRY_RSSI() = 50; - EXPECT_EQ(TELEMETRY_STREAMING(), true); - - //vfas is 15.0V so L1 should still be FALSE - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - //now reduce vfas to 9.5V and L1 should become TRUE after 0.5s - frskyData.hub.vfas = 95; - evalLogicalSwitches(); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), true); - - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), true); - - - //now stop telemetry, L1 should become FALSE immediatelly - TELEMETRY_RSSI() = 0; - EXPECT_EQ(TELEMETRY_STREAMING(), false); - evalLogicalSwitches(); - - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); -} - -TEST(getSwitch, DISABLED_RssiWithDuration) -{ - MODEL_RESET(); - MIXER_RESET(); - memclear(&frskyData, sizeof(frskyData)); - /* - Test for logical switch: - L1 RSSI > 10 Duration (0.5s) - - (gdb) print Open9xX9D::g_model.logicalSw[0] - $1 = {v1 = -55 '\311', v2 = 10, v3 = 0, func = 3 '\003', delay = 0 '\000', duration = 5 '\005', andsw = 0 '\000'} - */ - - g_model.logicalSw[0] = {int8_t(MIXSRC_FIRST_TELEM+TELEM_RSSI_RX-1), 10, 0, 3, 0, 5, 0}; - - EXPECT_EQ(TELEMETRY_STREAMING(), false); - - evalLogicalSwitches(); - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - //now set RSSI to 5, L1 should still be FALSE - TELEMETRY_RSSI() = 5; - evalLogicalSwitches(); - EXPECT_EQ(TELEMETRY_STREAMING(), true); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - //now set RSSI to 100, L1 should become TRUE for 0.5s - TELEMETRY_RSSI() = 100; - evalLogicalSwitches(); - EXPECT_EQ(TELEMETRY_STREAMING(), true); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), true); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), true); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), true); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), true); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - //repeat telemetry streaming OFF and ON to test for duration processing - TELEMETRY_RSSI() = 0; - evalLogicalSwitches(); - EXPECT_EQ(TELEMETRY_STREAMING(), false); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); - - //now set RSSI to 100, L1 should become TRUE for 0.5s - TELEMETRY_RSSI() = 100; - evalLogicalSwitches(); - EXPECT_EQ(TELEMETRY_STREAMING(), true); - - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), true); - - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - logicalSwitchesTimerTick(); - evalLogicalSwitches(); - EXPECT_EQ(getSwitch(SWSRC_SW1), false); -} -#endif // #if defined(PCBTARANIS) && defined(FRSKY) - - #if !defined(CPUARM) TEST(getSwitch, recursiveSW) { @@ -329,7 +128,7 @@ TEST(getSwitch, recursiveSW) } #endif // #if !defined(CPUARM) -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) TEST(getSwitch, inputWithTrim) { MODEL_RESET(); @@ -350,7 +149,7 @@ TEST(getSwitch, inputWithTrim) } #endif -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) TEST(evalLogicalSwitches, playFile) { SYSTEM_RESET(); @@ -361,14 +160,23 @@ TEST(evalLogicalSwitches, playFile) extern uint64_t sdAvailableLogicalSwitchAudioFiles; sdAvailableLogicalSwitchAudioFiles = 0xffffffffffffffff; char filename[AUDIO_FILENAME_MAXLEN+1]; + +#if defined(EEPROM) +#define MODELNAME "MODEL01" +#else +#define MODELNAME "Model00" +#endif + isAudioFileReferenced((LOGICAL_SWITCH_AUDIO_CATEGORY << 24) + (0 << 16) + AUDIO_EVENT_OFF, filename); - EXPECT_EQ(strcmp(filename, "/SOUNDS/en/MODEL01/L1-off.wav"), 0); + EXPECT_EQ(strcmp(filename, "/SOUNDS/en/" MODELNAME "/L1-off.wav"), 0); isAudioFileReferenced((LOGICAL_SWITCH_AUDIO_CATEGORY << 24) + (0 << 16) + AUDIO_EVENT_ON, filename); - EXPECT_EQ(strcmp(filename, "/SOUNDS/en/MODEL01/L1-on.wav"), 0); + EXPECT_EQ(strcmp(filename, "/SOUNDS/en/" MODELNAME "/L1-on.wav"), 0); isAudioFileReferenced((LOGICAL_SWITCH_AUDIO_CATEGORY << 24) + (31 << 16) + AUDIO_EVENT_OFF, filename); - EXPECT_EQ(strcmp(filename, "/SOUNDS/en/MODEL01/L32-off.wav"), 0); + EXPECT_EQ(strcmp(filename, "/SOUNDS/en/" MODELNAME "/L32-off.wav"), 0); isAudioFileReferenced((LOGICAL_SWITCH_AUDIO_CATEGORY << 24) + (31 << 16) + AUDIO_EVENT_ON, filename); - EXPECT_EQ(strcmp(filename, "/SOUNDS/en/MODEL01/L32-on.wav"), 0); + EXPECT_EQ(strcmp(filename, "/SOUNDS/en/" MODELNAME "/L32-on.wav"), 0); + +#undef MODELNAME } TEST(getSwitch, edgeInstant) @@ -443,7 +251,7 @@ TEST(getSwitch, edgeInstant) EXPECT_EQ(getSwitch(SWSRC_SW1), false); EXPECT_EQ(getSwitch(SWSRC_SW2), false); - // now bug #2939 + // now bug #2939 // SF is kept up and SA is toggled simuSetSwitch(0, -1); //SA down simuSetSwitch(5, 1); //SF up From a05fa1738fa6d741630f55cf9a8dd69e992a6558 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 22 Mar 2016 19:38:23 +0100 Subject: [PATCH 04/98] [Horus] Return to 6 chars wav names to track the shutdown bug without having to reconfigure the model --- radio/src/dataconstants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 09bee8e97..55ede0d44 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -158,7 +158,7 @@ enum CurveType { #define LEN_CHANNEL_NAME 6 #define LEN_INPUT_NAME 4 #define LEN_CURVE_NAME 3 - #define LEN_CFN_NAME 10 + #define LEN_CFN_NAME 6 #define MAX_CURVES 32 #define NUM_POINTS 512 #elif defined(PCBFLAMENCO) From 43c70780b1e05cda02791772d01dcea9c9418973 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 22 Mar 2016 20:25:22 +0100 Subject: [PATCH 05/98] Compilation fix --- radio/src/targets/simu/simpgmspace.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index 647c73115..1b150a7e8 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -396,7 +396,7 @@ extern OS_MutexID audioMutex; #define WDRF 0 void * simuMain(void * args = NULL); -extern uint8_t MCUCSR, MCUSR; +extern uint8_t MCUCSR, MCUSR, MCUCR; typedef unsigned int U32; typedef unsigned long long U64; From ad5b17900ba84a4692a6d9b83840b774a41786a5 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Mon, 21 Mar 2016 05:48:55 +0100 Subject: [PATCH 06/98] Fix building OpenTX under OS X The clang.index python library does not look in the default path where the library is installed --- radio/util/generate_datacopy.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/radio/util/generate_datacopy.py b/radio/util/generate_datacopy.py index f4c6e7068..22e87d6d9 100644 --- a/radio/util/generate_datacopy.py +++ b/radio/util/generate_datacopy.py @@ -7,6 +7,10 @@ import clang.cindex import time import os +if sys.platform == "darwin": + clang.cindex.Config.set_library_file('/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib') + + structs = [] def build_struct(cursor): From bff45a4b2a3f42855d9ce266c08755095d92d042 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 22 Mar 2016 22:43:00 +0100 Subject: [PATCH 07/98] [Horus] Tx battery and audio volume added in the topbar --- radio/src/bitmaps/horus/CMakeLists.txt | 3 +- radio/src/bitmaps/horus/mask_txbat.png | Bin 0 -> 601 bytes .../bitmaps/horus/volume/mask_volume_0.png | Bin 0 -> 866 bytes .../bitmaps/horus/volume/mask_volume_1.png | Bin 0 -> 833 bytes .../bitmaps/horus/volume/mask_volume_2.png | Bin 0 -> 922 bytes .../bitmaps/horus/volume/mask_volume_3.png | Bin 0 -> 1012 bytes .../bitmaps/horus/volume/mask_volume_4.png | Bin 0 -> 1213 bytes .../horus/volume/mask_volume_scale.png | Bin 0 -> 604 bytes radio/src/gui/horus/bitmaps.cpp | 28 ++++++++++++++++++ radio/src/gui/horus/bitmaps.h | 7 +++++ radio/src/gui/horus/gui.h | 4 +-- radio/src/gui/horus/topbar.cpp | 26 ++++++++++++++-- radio/src/gui/horus/topbar.h | 2 +- radio/src/gui/taranis/view_main.cpp | 7 +++-- 14 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 radio/src/bitmaps/horus/mask_txbat.png create mode 100644 radio/src/bitmaps/horus/volume/mask_volume_0.png create mode 100644 radio/src/bitmaps/horus/volume/mask_volume_1.png create mode 100644 radio/src/bitmaps/horus/volume/mask_volume_2.png create mode 100644 radio/src/bitmaps/horus/volume/mask_volume_3.png create mode 100644 radio/src/bitmaps/horus/volume/mask_volume_4.png create mode 100644 radio/src/bitmaps/horus/volume/mask_volume_scale.png diff --git a/radio/src/bitmaps/horus/CMakeLists.txt b/radio/src/bitmaps/horus/CMakeLists.txt index 4b32dcc23..d73c6f533 100644 --- a/radio/src/bitmaps/horus/CMakeLists.txt +++ b/radio/src/bitmaps/horus/CMakeLists.txt @@ -16,4 +16,5 @@ add_bitmaps_target(horus_slider_masks "${RADIO_SRC_DIRECTORY}/bitmaps/horus/slid add_bitmaps_target(horus_layouts_masks "${RADIO_SRC_DIRECTORY}/gui/horus/layouts/*.png" 480 8bits) add_bitmaps_target(horus_themes_bitmaps "${RADIO_SRC_DIRECTORY}/gui/horus/themes/*.png" 480 5/6/5) add_bitmaps_target(horus_fonts ${RADIO_SRC_DIRECTORY}/fonts/horus/*.png 480 8bits) -add_dependencies(horus_bitmaps horus_calibration_bitmaps horus_alpha_bitmaps horus_alpha_calibration_bitmaps horus_masks horus_slider_masks horus_themes_bitmaps horus_layouts_masks horus_fonts) +add_bitmaps_target(horus_volume_masks ${RADIO_SRC_DIRECTORY}/bitmaps/horus/volume/*.png 480 8bits) +add_dependencies(horus_bitmaps horus_volume_masks horus_calibration_bitmaps horus_alpha_bitmaps horus_alpha_calibration_bitmaps horus_masks horus_slider_masks horus_themes_bitmaps horus_layouts_masks horus_fonts) diff --git a/radio/src/bitmaps/horus/mask_txbat.png b/radio/src/bitmaps/horus/mask_txbat.png new file mode 100644 index 0000000000000000000000000000000000000000..fd59391909622330e0a5cfd8db19de74edd4a0c3 GIT binary patch literal 601 zcmV-f0;c_mP)|W zK~zY`y_K)4B2gHI-#If1PH+bd2Ad{}1_cdjFe!prtI=W*3?hi=pJ2BLMiERCjDkT$ zWQvC224RDvXRaWK;J3jadtGnZ9ru9)GjQPf-Z|fyPavWX06*}I_~n@ZTwpDxbdx^B zhGAenpW|>i000z4K_C!-%jL3GO+=h-Y`0rVCX;ka`B<4uhB$w0vjWb(7I8kGF&>X! ziknWSIGs+G2A2L5-*LHIu-om|O_GFsJ`bDC_D`}{EQVUG_FKGOuTd(MP^nZPir2n! zI-Qu!W|pQ*rBV+uh=>;o1p+|LW|NA=A^{+u&qr1hi9{Y}49>YJ%Q68Vx7$tKZkLwJ zC51vE%f+%Rli%+rUDrR^X0s8F$0LHlAga|WR8>Vd90uncR>K%WB9Xvuw-eaCk$Sxz zMxznp@i@xmGTsdXfMha>;c$q-V1RnPj!Y)=cCiEis;Z*ZYC+R9q*5vL`~A1bE|&`o z!??a^n)V5Ryk0Lg8V$;3vm}b*Te{lg@elwqP1D4Fzc(EY$IEZ>-PcJ{6oqoR96FuO z^Y}1LwA<}(JCiZ?SD#uCgy$i#TCFIZP7`D7CApPrGMPLQ3q-{4V^P<2EEbDzD~(2@ naJ$`>&0~RxegaVNf8oCX(5aUEEgtrK00000NkvXXu0mjfkZ%43 literal 0 HcmV?d00001 diff --git a/radio/src/bitmaps/horus/volume/mask_volume_0.png b/radio/src/bitmaps/horus/volume/mask_volume_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ae5b6ae75208a016d87cde1a4aa80d66b4ca50 GIT binary patch literal 866 zcmV-o1D*VdP)U1lFff3}$H(s>^OJO4XKQOK4a4Bs*%^buAj9D>Ez4pg5@B0g8%@*vY%5s5 zfS;eAsVE8!!=R>V1dy-h=4M`8TyT4Pn}dUc-v`cSvkZkoTwPt|^z`&E(4SRaUe07P z$-cfmCX>nH!HGnIkw}Cc9UZ*Czh^~71p!b|6t1tY)93T$;gge-JUBRDAP^`X+}PO2 z{r!D*cXu-uixB{2S!OnyrPJx;+}s?uwzk;W*-2TJX;~I~dwYulJ8av=&CLy}tE(YN z5=_$s0H~@8Q54~Fx!`iSFgiL4P1E4@dU1Jq2~E=w2n0}7RfY5O^MWt62w;Z zs)8ii+uPywdLhd)Zf|c93b7!HSddU{H?+f4wRpP%Q{)D!`* zw6v7N!^8R5*Vfj)6!mXl%d*(h)5G!calXC1@$T-98yg#WsIKdLeSPKP;vxZ16h$5% z9~TcM$y_eSg@pyy)zz`Tzn?ohJM?%w)ODSiOeVi>d3l*FEiJsdx+)kfkbnP=ZQI86 s^)+5zUf_1SA&TPH&-9c275rc7AJYu^c)o-TVE_OC07*qoM6N<$f+o#>@&Et; literal 0 HcmV?d00001 diff --git a/radio/src/bitmaps/horus/volume/mask_volume_1.png b/radio/src/bitmaps/horus/volume/mask_volume_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe0636ba2bfa7bd0851b1fea553d2c14cda8818 GIT binary patch literal 833 zcmV-H1HSx;P)g~!K6-ENDbqq@e&#@QR8J& zN|T+P4P_~R1EpqTIi+ld#aY?Rf@sQuh;%S0lS2~?4;c*2eDCJoxm>#Gp6Pz;**x_; zpXc}VyhtSD0BrcbxmSLopWtjZi)b{8jg1XB91eKBUewms=1rEr>Rex6M@2;i=H}*L zx7#6v!1(w$Mn*<(cXyW`nWW&mL?RK^*VofDO`e{fa(;fE3kwT;etu>+9A;Zv8-@5V zQmzOy@I+{N?lgTg?3UPLJmNPRmAJAW| zxVV^xVQ^qzfQN^N*5UpAeJ(C8vbVRFH#awQI-LZ->gsBSLLv6_^yKiVsVT0mu5x;M z+B)3Y+Dcv5+27yK&CN{$U}?J>R~J-Og{EoP+uK7R5C8yNTwLJz_!#MQ+R~wx-`?JkOeW!UI+4j_psFeW z;QIO+0HEtSc6N4Pnr3d0q9~B%FK^=aVO3R8Q&WTO?QIkk6ri!O5wa{}ZEX$FXcUEo zg%CnuWn~2bAW0HRN=hI}k~J6rd_Es^T}N|sGY$?8;P?9h0PXGV@Or(ds;a{I`8fc< z@Ao4Xi=ncz(h>}kBAHAw5D3sP40d#MFdmQ7X0v^|PDMpU+}+*f(9jSK!?1q191aJT zmX_dhxzOF+jc_=Ot*tGzw6x?F=ytmii9~R8bOc3F;BvXFSNwh{>2#WXeSI7o8)GV! z;_dA%&(6;H^z_7FFv!l%PCh(5SgDr$^U3^`Y&OeaFvzm9GB!0ead2>u<>lp^n3&+> zoaKRxY!{PLv&pRumCwF%%hz#&0tAqy65`;dxpX&r`q0)AO$H+^Z{`FsSDmjDd-ze%nu5O!>p;PVLTq^+1VNA=H}@4`}z9%%0M8%=H_O~ za!$zKNX`ML(`nl6cHZ3FaBOUh0J5*Tx|*?AjKN@#LqkK~1`8x*00vc6;rIKINF+cK zUa$9)JB5XX*xug8`1m-cr>CJP3X;hroKB}!qmv*hA08fZadDBIot?bDzo*%3CID7e zR&rrsfgK$k+0MOQFW1)AI59E7U@%BYlBg)k-&x(%)WlFI#P05HZf$K50E>%@`S$ik ztJTW>{(jo+b^@RzNlc|ubh%tqRh2fIjkB|}n!!2%I6XauBuM~(+uK_JKwDcI^m;uc zNy5Rw0X!ZL0O0EC3MVHgP!t7%AYgKG5>r!CNT<`9yw<(Hzax=Iz-%@nlgU7@*8>3V z?(P5pp->2WdwYn-em-Pb#`5wq06-7~6crUg5QJ=!!NEbStgL7Q1AxorLMRkMLqh|Oj*j4V zy8!?#EiG_39H^+Mz{SM{0Kn~bBNmIHyu3V{WOa2FMx#*^7$oIHB0-PG!)P>0r_;&H z%S##zhMYYHz=DDT?(grjx3`zkXf$V9GMS9_;WC*_SXx?w#bQBwdpiPw0CskE(Ae0R zEzoMUA{-9m`1ly2D8gc~Y7RaN?YK9-b}u)e;YJv}`vEiL8f=qR6`pT7$wKc39rITDY@ waeaM_+S*!(qNvTz-zzDQyak|fB)={B2S(3gIdZz>9RL6T07*qoM6N<$f_5vczyJUM literal 0 HcmV?d00001 diff --git a/radio/src/bitmaps/horus/volume/mask_volume_3.png b/radio/src/bitmaps/horus/volume/mask_volume_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb9421f21cf7b9e391c155ec83710710da69c2b GIT binary patch literal 1012 zcmVc}&8!v8awB(K zP%hfEbpMdEj2ZjZnvAQt*tydI^yo`E}c#%Npfy(jsV!z z)%AVw{{B7}78a<}>FD?SsZb~gfCU8wv|6ofYHEtZ2L}hay1L4tp&{CAHY$}$Mj{cC zWOH*f0np)ad=Fe%SxLLyPQ6}Fm&-)}%*e>#>+363Diuv86H7`;2!KkZlA%zDTCJ9` zSd4{*g`Aq2B1xW~pEEf*nN?L)UxFn7aB^}2rBVq1@cDcIfcpA+Bqb$5sZ?TbZx3d( z831s7eU0PeV?-hm2!eo-kr9lJjv^cmBRe}ACX)%9o0~W|I7m3ulDD@v+}+(lp->@_=dkX-t+wIui-iFufjVDQ^Qb;6!ZDMo<5(C5{ZNWxW2wllDxXQVpdib0ZPhCss1xEJUmQ`#X^tALyblghpJR6x?Ct`5w^6nu&1Yop-_nT_xC(IJLB{7Gbbk}Syxxb$H&J{!Qa$JFiFN@ zF-}fSGBY!iWo2bF8jZ}#%3^gUwBNu00000zQ&EJjT% z#cU<+6hx?1(Xtk`uti8A6=Vg0$SkIo24#Mr8||BkCi~E4WN=VsqEV;eo!{Nu-l);K z7cTb?XK^^s^Zd^9aQ++vn33ev|EswDZ)gTMola|PY)m5~Bg)CiQDtSNN=i!pQB~74 zb>qej6&4oC>-DZ41jP77Po6xXprC-`$B%RM>QydYyhuew1t(9QWN~rv*YFIDj*cP; z!!Q^c8d@zRmH~eF@FBZ)?IIKkF+Dv^Z*MPm@7`s3d6|KM0m{qEiN!MRN;n)Q91a5z zjYi4I$w3l@g@r6FE&U$6va&*HX(@AabDTPL3Q5-5xpODMU=W|rM_XH42KdmSL*(Y> z5{*UyxO3-@m3!vQnYF>DY0}r%$K}hH>F)0S3Hp6)+_;fIAi&Y1M|tz+4bPuHXLxuR zfZMlkBZ=15R;#+#>qQdl)~#b|YAO@_^5skJ-MdFkO%2g#6qn0|B(`tgPG4UihYugN z;AhXC6G&pyrcHeN_Ko7=Vw#(qDJ?BU5^lGfL?VIL>m{8|vt!2&u3ftZz=sbXSigQf z<>loT;q>X#R@bw$vliGUN$=jhliTf8QKw6sW)K7anK zw{PDnnM}$s3|+WzL6mzmYZy;R7wjA z3v#(!GEGwsheMJyKR+)?^85XI`t+$np^%kix7%g2*(6C#O-*vSTvpMJjt)uE_3PIq zNkv6Ps;;hS}A8SFT*4rl!W)7ZnxZbUHCj69AvjXT1@h&-Y{0Uawbvzh8Uy?9uDjuT@`PFG;GZ zs#0ZTrM7L`rca+fNs{X8>lF+JwRP)OYXXCVgUZg%w)T7X?o~VBv@QrI&0|)r> z<;$Aj)zsSBYBk_+I7p>ZnP7l)I!#Yc51Th{X7}#hG&D4jpPx@xR~KKue*ITafT^h| zwrtsgBsx1g0b&La({KLcP$;BuIIOa=GTH6+wZi@=(=@fbysWIOEE$FoH-Lzw>_2Ay bw~GA*KEX)5X!RSa00000NkvXXu0mjf=4M9A literal 0 HcmV?d00001 diff --git a/radio/src/bitmaps/horus/volume/mask_volume_scale.png b/radio/src/bitmaps/horus/volume/mask_volume_scale.png new file mode 100644 index 0000000000000000000000000000000000000000..301f847dd04174671d56e4a3cd4d560ffe305789 GIT binary patch literal 604 zcmV-i0;BzjP)tGay-`w8f(4j@hkU?Au{Rsv)i=>mKuF^kH z7bmy=2}g0zp<8k2=peS#(Lm``C^TFlAY@5~HfTwoJ6xMdxXY*Sb~xwb;pIJ?&jS8P zD(h#J{QiU*1!q~N>+5S(t5tcP_w^7EV_4(y7)e-`#naQ%S0k}8a2SS!VF*AJMeOeG zB8h6X%4)UxKJd}e5w>j;MG*jZcXvoa5|@{kX2FxmgwbdO!0qiVl4!TvdEfIqBvB|7 z@O|GLxZm%yx3|ap`#S)~$Hz$G;o$**AP6XxN=TyFY?=daHXC}q9{qkFfW>0L&dv^p zhllyh#l=PL`t|kI40x*`2uRZufU~nRBr%;%0hrBZdDh)-*DQEGpL2C}1;B7PL=xxc z=Xt+guOkV^arpT7FbBTBzo*e?y-Bd3|tj zpd?8YhM^>>)oRIc97)n(Ffe<$w(eeDUa%|+NjyJ4=l#>uQzYTKE|@$ZTO~=t$;k<> z>#|%f0eF0T#Bm%XVcYiifWK0^-Oe*E7K^Oc>z@JpzR&*tK9cBkIsmZ+#QK5%ILk7n qX{u7GB+IfA3wV=M`R_}!ivI$bb&2loeFE740000drawTopbarBackground(NULL); // USB icon - if (usbPlugged()) { - lcdDrawBitmapPattern(LCD_W-102, 8, LBM_TOPMENU_USB, MENU_TITLE_COLOR); + if (1/*usbPlugged()*/) { + lcdDrawBitmapPattern(LCD_W-98, 8, LBM_TOPMENU_USB, MENU_TITLE_COLOR); } // RSSI @@ -68,6 +68,26 @@ void drawTopBar() lcdDrawSolidFilledRect(LCD_W-90 + i * 6, 38 - height, 4, height, TELEMETRY_RSSI() >= rssiBarsValue[i] ? MENU_TITLE_COLOR : MENU_TITLE_DISABLE_COLOR); } + /* Audio volume */ + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_SCALE, MENU_TITLE_DISABLE_COLOR); + if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet) + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_0, MENU_TITLE_COLOR); + else if (requiredSpeakerVolume < 7) + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_1, MENU_TITLE_COLOR); + else if (requiredSpeakerVolume < 13) + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_2, MENU_TITLE_COLOR); + else if (requiredSpeakerVolume < 19) + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_3, MENU_TITLE_COLOR); + else + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_4, MENU_TITLE_COLOR); + + /* Tx battery */ + uint8_t bars = limit(0, 6 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin), 5); + lcdDrawBitmapPattern(LCD_W-130, 24, LBM_TOPMENU_TXBATT, MENU_TITLE_COLOR); + for (unsigned int i = 0; i < 5; i++) { + lcdDrawSolidFilledRect(LCD_W-122+4*i, 30, 2, 8, i >= bars ? MENU_TITLE_DISABLE_COLOR : MENU_TITLE_COLOR); + } + topbar->refresh(); #if 0 diff --git a/radio/src/gui/horus/topbar.h b/radio/src/gui/horus/topbar.h index 93d8aaadf..649074f60 100644 --- a/radio/src/gui/horus/topbar.h +++ b/radio/src/gui/horus/topbar.h @@ -25,7 +25,7 @@ #define MAX_TOPBAR_ZONES 5 #define MAX_TOPBAR_OPTIONS 0 -#define TOPBAR_ZONE_WIDTH 60 +#define TOPBAR_ZONE_WIDTH 70 #define TOPBAR_ZONE_MARGIN 3 class Topbar: public WidgetsContainer diff --git a/radio/src/gui/taranis/view_main.cpp b/radio/src/gui/taranis/view_main.cpp index 9d2cf4197..261daaac5 100644 --- a/radio/src/gui/taranis/view_main.cpp +++ b/radio/src/gui/taranis/view_main.cpp @@ -273,11 +273,14 @@ void displayTopBar() } /* Audio volume */ + TRACE("%d", requiredSpeakerVolume); if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet) LCD_ICON(BAR_VOLUME_X, BAR_Y, ICON_SPEAKER0); - else if (requiredSpeakerVolume < 10) + else if (requiredSpeakerVolume <= 6) LCD_ICON(BAR_VOLUME_X, BAR_Y, ICON_SPEAKER1); - else if (requiredSpeakerVolume < 20) + else if (requiredSpeakerVolume <= 12) + LCD_ICON(BAR_VOLUME_X, BAR_Y, ICON_SPEAKER2); + else if (requiredSpeakerVolume <= 18) LCD_ICON(BAR_VOLUME_X, BAR_Y, ICON_SPEAKER2); else LCD_ICON(BAR_VOLUME_X, BAR_Y, ICON_SPEAKER3); From c6b2e128027104d67fd562d0b8eebeab77430f0b Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Thu, 18 Feb 2016 22:28:14 +0400 Subject: [PATCH 08/98] Removed a few legacy timer limitations, fix non-working limit (fix #3301) --- companion/src/eeprominterface.h | 4 +++- companion/src/firmwares/opentx/opentxinterface.cpp | 10 ++++++++++ companion/src/firmwares/opentx/opentxinterface.h | 2 ++ companion/src/modeledit/customfunctions.cpp | 2 +- companion/src/modeledit/setup.cpp | 12 ++++++++---- companion/src/modeledit/setup_timer.ui | 6 +++--- radio/src/gui/9x/lcd.cpp | 6 +++++- radio/src/gui/9x/menu_model_custom_functions.cpp | 2 +- radio/src/gui/9x/menu_model_setup.cpp | 5 ++++- .../src/gui/taranis/menu_model_custom_functions.cpp | 4 ++-- radio/src/gui/taranis/menu_model_setup.cpp | 8 ++++---- 11 files changed, 43 insertions(+), 18 deletions(-) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 7d56bbc51..da8862c87 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -1626,7 +1626,9 @@ class Firmware { } virtual int getCapability(const Capability) = 0; - + + virtual QTime getMaxTimerStart() = 0; + virtual bool isTelemetrySourceAvailable(int source) = 0; virtual int isAvailable(PulsesProtocol proto, int port=0) = 0; diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index f583dab63..21d77fcd4 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -813,6 +813,16 @@ int OpenTxFirmware::getCapability(const Capability capability) } } +QTime OpenTxFirmware::getMaxTimerStart() +{ + if (IS_TARANIS(board)) + return QTime(23, 59, 59); + else if (IS_ARM(board)) + return QTime(8, 59, 59); + else + return QTime(0, 59, 59); +} + bool OpenTxFirmware::isTelemetrySourceAvailable(int source) { if (IS_TARANIS(board) && (source == TELEMETRY_SOURCE_RSSI_TX)) diff --git a/companion/src/firmwares/opentx/opentxinterface.h b/companion/src/firmwares/opentx/opentxinterface.h index 41c1bf6a2..32a28e722 100644 --- a/companion/src/firmwares/opentx/opentxinterface.h +++ b/companion/src/firmwares/opentx/opentxinterface.h @@ -118,6 +118,8 @@ class OpenTxFirmware: public Firmware { virtual QString getFirmwareUrl(); virtual int getCapability(const Capability); + + virtual QTime getMaxTimerStart(); virtual bool isTelemetrySourceAvailable(int source); diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index aa9c8073f..cdcadfe3f 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -397,7 +397,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) else if (func>=FuncSetTimer1 && func<=FuncSetTimer3) { if (modified) cfn.param = QTimeS(fswtchParamTime[i]->time()).seconds(); fswtchParamTime[i]->setMinimumTime(QTime(0, 0, 0)); - fswtchParamTime[i]->setMaximumTime(QTime(0, 59, 59)); + fswtchParamTime[i]->setMaximumTime(firmware->getMaxTimerStart()); fswtchParamTime[i]->setTime(QTimeS(cfn.param)); widgetsMask |= CUSTOM_FUNCTION_TIME_PARAM + CUSTOM_FUNCTION_ENABLE; } diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index bf3ffff4e..351500a85 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -42,6 +42,8 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge ui->countdownBeep->addItem(tr("Voice"), TimerData::COUNTDOWN_VOICE); ui->countdownBeep->addItem(tr("Haptic"), TimerData::COUNTDOWN_HAPTIC); } + + ui->value->setMaximumTime(firmware->getMaxTimerStart()); ui->persistent->setField(timer.persistent, this); ui->persistent->addItem(tr("Not persistent"), 0); @@ -66,9 +68,11 @@ TimerPanel::~TimerPanel() void TimerPanel::update() { - int min = timer.val / 60; - int sec = timer.val % 60; - ui->value->setTime(QTime(0, min, sec)); + int hour = timer.val / 3600; + int min = (timer.val - (hour * 3600)) / 60; + int sec = (timer.val - (hour * 3600)) % 60; + + ui->value->setTime(QTime(hour, min, sec)); if (firmware->getCapability(PermTimers)) { int sign = 1; @@ -94,7 +98,7 @@ QWidget * TimerPanel::getLastFocus() void TimerPanel::on_value_editingFinished() { - timer.val = ui->value->time().minute()*60 + ui->value->time().second(); + timer.val = ui->value->time().hour()*3600 + ui->value->time().minute()*60 + ui->value->time().second(); emit modified(); } diff --git a/companion/src/modeledit/setup_timer.ui b/companion/src/modeledit/setup_timer.ui index b7066d0d9..137428c4a 100644 --- a/companion/src/modeledit/setup_timer.ui +++ b/companion/src/modeledit/setup_timer.ui @@ -18,7 +18,7 @@ - -1 + 6 0 @@ -39,10 +39,10 @@ true - QDateTimeEdit::MinuteSection + QDateTimeEdit::HourSection - mm:ss + hh:mm:ss diff --git a/radio/src/gui/9x/lcd.cpp b/radio/src/gui/9x/lcd.cpp index ec0d97b75..c20d4ae4b 100644 --- a/radio/src/gui/9x/lcd.cpp +++ b/radio/src/gui/9x/lcd.cpp @@ -609,7 +609,7 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2 #if defined(CPUARM) char separator = ':'; - if (tme >= 3600 && (~att & DBLSIZE)) { + if (tme >= 3600) { qr = div(qr.quot, 60); separator = CHR_HOUR; } @@ -617,6 +617,10 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2 #define separator ':' #endif lcdDrawNumber(x, y, qr.quot, att|LEADING0|LEFT, 2); +#if defined(CPUARM) + if (separator == CHR_HOUR) + att &= ~DBLSIZE; +#endif #if defined(CPUARM) && defined(RTCLOCK) if (att&TIMEBLINK) lcdDrawChar(lcdLastPos, y, separator, BLINK); diff --git a/radio/src/gui/9x/menu_model_custom_functions.cpp b/radio/src/gui/9x/menu_model_custom_functions.cpp index efe7194eb..a298cc2be 100644 --- a/radio/src/gui/9x/menu_model_custom_functions.cpp +++ b/radio/src/gui/9x/menu_model_custom_functions.cpp @@ -196,7 +196,7 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu #endif #if defined(CPUARM) else if (func == FUNC_SET_TIMER) { - val_max = 59*60+59; + val_max = 539*60+59; putsTimer(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr); } #endif diff --git a/radio/src/gui/9x/menu_model_setup.cpp b/radio/src/gui/9x/menu_model_setup.cpp index da2c2852c..c25f4eaa0 100644 --- a/radio/src/gui/9x/menu_model_setup.cpp +++ b/radio/src/gui/9x/menu_model_setup.cpp @@ -205,13 +205,14 @@ void menuModelSetup(uint8_t event) break; } case 1: - CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59); + CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 539); // 8:59 timer->start = qr.rem + qr.quot*60; break; case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; timer->start -= qr.rem ; if ((int16_t)timer->start < 0) timer->start=0; + if ((int16_t)timer->start > 5999) timer->start=32399; // 8:59:59 break; } } @@ -285,6 +286,8 @@ void menuModelSetup(uint8_t event) case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; timer->start -= qr.rem ; + if ((int16_t)timer->start < 0) timer->start=0; + if ((int32_t)timer->start > 3599) timer->start=3599; // 59:59 break; } } diff --git a/radio/src/gui/taranis/menu_model_custom_functions.cpp b/radio/src/gui/taranis/menu_model_custom_functions.cpp index f2d41fb4b..d0fdd2ae5 100644 --- a/radio/src/gui/taranis/menu_model_custom_functions.cpp +++ b/radio/src/gui/taranis/menu_model_custom_functions.cpp @@ -267,8 +267,8 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu lcdDrawTextAtIndex(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr); } else if (func == FUNC_SET_TIMER) { - val_max = 59*60+59; - putsTimer(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr); + val_max = 539*60+59; //8:59:59 + putsTimer(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR, attr); } else if (func == FUNC_PLAY_SOUND) { val_max = AU_SPECIAL_SOUND_LAST-AU_SPECIAL_SOUND_FIRST-1; diff --git a/radio/src/gui/taranis/menu_model_setup.cpp b/radio/src/gui/taranis/menu_model_setup.cpp index b62e980f3..7f8bf1e46 100644 --- a/radio/src/gui/taranis/menu_model_setup.cpp +++ b/radio/src/gui/taranis/menu_model_setup.cpp @@ -122,9 +122,8 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, uint8_t event) TimerData * timer = &g_model.timers[timerIdx]; drawStringWithIndex(0*FW, y, STR_TIMER, timerIdx+1); putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, menuHorizontalPosition==0 ? attr : 0); - - putsTimer(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, menuHorizontalPosition==1 ? attr : 0, menuHorizontalPosition==2 ? attr : 0); - if (attr && menuHorizontalPosition < 0) lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, LCD_W-MODEL_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH+1, FH+1); + putsTimer(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, menuHorizontalPosition==1 ? attr|TIMEHOUR : TIMEHOUR, menuHorizontalPosition==2 ? attr|TIMEHOUR : TIMEHOUR); + if (attr && menuHorizontalPosition < 0) drawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 11*FW, FH+1); if (attr && s_editMode>0) { div_t qr = div(timer->start, 60); switch (menuHorizontalPosition) { @@ -148,13 +147,14 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, uint8_t event) break; } case 1: - CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59); + qr.quot = checkIncDec(event, qr.quot, 0, 1439, EE_MODEL | NO_INCDEC_MARKS); // 23h59 timer->start = qr.rem + qr.quot*60; break; case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; timer->start -= qr.rem ; if ((int16_t)timer->start < 0) timer->start=0; + if ((int32_t)timer->start > 86399) timer->start=86399; // 23h59:59 break; } } From 8931b76143953f7f0c9b0d05fb02af01456dd766 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 23 Mar 2016 16:51:03 +0400 Subject: [PATCH 09/98] Horus part --- radio/src/gui/horus/menu_model_setup.cpp | 2 +- radio/src/gui/taranis/menu_model_setup.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/horus/menu_model_setup.cpp b/radio/src/gui/horus/menu_model_setup.cpp index 645a9d04d..d5c2f3738 100644 --- a/radio/src/gui/horus/menu_model_setup.cpp +++ b/radio/src/gui/horus/menu_model_setup.cpp @@ -104,7 +104,7 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, evt_t event) } drawStringWithIndex(MENUS_MARGIN_LEFT, y, STR_TIMER, timerIdx+1); putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, (menuHorizontalPosition<=0 ? attr : 0)); - putsTimer(MODEL_SETUP_2ND_COLUMN+50, y, timer->start, (menuHorizontalPosition!=0 ? attr : 0)); + putsTimer(MODEL_SETUP_2ND_COLUMN+50, y, timer->start, (menuHorizontalPosition==1 ? attr|TIMEHOUR : TIMEHOUR)); if (attr && s_editMode>0) { switch (menuHorizontalPosition) { case 0: diff --git a/radio/src/gui/taranis/menu_model_setup.cpp b/radio/src/gui/taranis/menu_model_setup.cpp index 7f8bf1e46..08eafc445 100644 --- a/radio/src/gui/taranis/menu_model_setup.cpp +++ b/radio/src/gui/taranis/menu_model_setup.cpp @@ -123,7 +123,7 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, uint8_t event) drawStringWithIndex(0*FW, y, STR_TIMER, timerIdx+1); putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, menuHorizontalPosition==0 ? attr : 0); putsTimer(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, menuHorizontalPosition==1 ? attr|TIMEHOUR : TIMEHOUR, menuHorizontalPosition==2 ? attr|TIMEHOUR : TIMEHOUR); - if (attr && menuHorizontalPosition < 0) drawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 11*FW, FH+1); + if (attr && menuHorizontalPosition < 0) lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 11*FW, FH+1); if (attr && s_editMode>0) { div_t qr = div(timer->start, 60); switch (menuHorizontalPosition) { From 82ccb70ebdd6ef8b82ca4d250c2c0d2ba4ae9200 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 23 Mar 2016 16:56:12 +0400 Subject: [PATCH 10/98] Wasted flash --- radio/src/opentx.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index dac1c4f38..dd8503884 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -2667,7 +2667,6 @@ int main() MCUCR = 0x80 ; // Must be done twice #elif defined(PCBSTD) uint8_t mcusr = MCUCSR; - MCUCSR = 0; MCUCSR = 0x80 ; // Disable JTAG port that can interfere with POT3 MCUCSR = 0x80 ; // Must be done twice #endif From cd434829110071cf180af9429be2b769c903e81e Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 23 Mar 2016 19:37:25 +0400 Subject: [PATCH 11/98] Elapsed timer visualization (fix #3383) --- radio/src/gui/horus/menu_model_setup.cpp | 2 +- radio/src/gui/horus/widgets/timer.cpp | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/horus/menu_model_setup.cpp b/radio/src/gui/horus/menu_model_setup.cpp index d5c2f3738..c6e9796f9 100644 --- a/radio/src/gui/horus/menu_model_setup.cpp +++ b/radio/src/gui/horus/menu_model_setup.cpp @@ -100,7 +100,7 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, evt_t event) { TimerData * timer = &g_model.timers[timerIdx]; if (attr && menuHorizontalPosition < 0) { - lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN-INVERT_HORZ_MARGIN, y-INVERT_VERT_MARGIN+1, 90+2*INVERT_HORZ_MARGIN, INVERT_LINE_HEIGHT, TEXT_INVERTED_BGCOLOR); + lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN-INVERT_HORZ_MARGIN, y-INVERT_VERT_MARGIN+1, 115+2*INVERT_HORZ_MARGIN, INVERT_LINE_HEIGHT, TEXT_INVERTED_BGCOLOR); } drawStringWithIndex(MENUS_MARGIN_LEFT, y, STR_TIMER, timerIdx+1); putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, (menuHorizontalPosition<=0 ? attr : 0)); diff --git a/radio/src/gui/horus/widgets/timer.cpp b/radio/src/gui/horus/widgets/timer.cpp index f7e433912..41137f721 100644 --- a/radio/src/gui/horus/widgets/timer.cpp +++ b/radio/src/gui/horus/widgets/timer.cpp @@ -45,8 +45,13 @@ void TimerWidget::refresh() TimerState & timerState = timersStates[index]; if (zone.w >= 180 && zone.h >= 70) { - lcdDrawBitmapPattern(zone.x, zone.y, LBM_TIMER_BACKGROUND, MAINVIEW_PANES_COLOR); - if (timerData.start) { + if (timerState.val >= 0 || !(timerState.val % 2)) { + lcdDrawBitmapPattern(zone.x, zone.y, LBM_TIMER_BACKGROUND, MAINVIEW_PANES_COLOR); + } + else { + lcdDrawBitmapPattern(zone.x, zone.y, LBM_TIMER_BACKGROUND, HEADER_BGCOLOR); + } + if (timerData.start && timerState.val >= 0) { lcdDrawBitmapPatternPie( zone.x + 2, zone.y + 3, LBM_RSCALE, MAINVIEW_GRAPHICS_COLOR, 0, @@ -67,21 +72,24 @@ void TimerWidget::refresh() drawStringWithIndex(zone.x + 137, zone.y + 17, "TMR", index + 1, SMLSIZE | TEXT_COLOR); } else { - drawStringWithIndex(zone.x, zone.y, "TMR", index + 1, SMLSIZE | TEXT_INVERTED_COLOR); + if (timerState.val < 0 && timerState.val % 2) { + lcdDrawSolidFilledRect(zone.x, zone.y, zone.w, zone.h, HEADER_ICON_BGCOLOR); + } + drawStringWithIndex(zone.x + 2, zone.y, "TMR", index + 1, SMLSIZE | TEXT_INVERTED_COLOR); if (zone.w > 100 && zone.h > 40) { if (abs(timerState.val) >= 3600) { - putsTimer(zone.x, zone.y + 16, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT | TIMEHOUR); + putsTimer(zone.x + 3, zone.y + 16, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT | TIMEHOUR); } else { - putsTimer(zone.x, zone.y + 16, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT | MIDSIZE); + putsTimer(zone.x + 3, zone.y + 16, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT | MIDSIZE); } } else { if (abs(timerState.val) >= 3600) { - putsTimer(zone.x, zone.y + 14, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT | SMLSIZE | TIMEHOUR); + putsTimer(zone.x + 3, zone.y + 14, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT | SMLSIZE | TIMEHOUR); } else { - putsTimer(zone.x, zone.y + 14, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT); + putsTimer(zone.x + 3, zone.y + 14, abs(timerState.val), TEXT_INVERTED_COLOR | LEFT); } } } From e5e3bb499715c0733b0e811c729d4a709cbafb4e Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 23 Mar 2016 21:13:57 +0400 Subject: [PATCH 12/98] Missing translations --- radio/src/translations/cz.h.txt | 3 +++ radio/src/translations/de.h.txt | 3 +++ radio/src/translations/es.h.txt | 3 +++ radio/src/translations/fi.h.txt | 3 +++ radio/src/translations/fr.h.txt | 3 +++ radio/src/translations/it.h.txt | 3 +++ radio/src/translations/nl.h.txt | 3 +++ radio/src/translations/pl.h.txt | 3 +++ radio/src/translations/pt.h.txt | 3 +++ 9 files changed, 27 insertions(+) diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index b1fe15e82..493eaf8c6 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -744,7 +744,9 @@ #define TR_ALARMSDISABLED "Alarmy jsou zakázány" #define TR_PRESSANYKEY TR("\006Stiskni klávesu", "Stiskni klávesu") #define TR_BADEEPROMDATA TR("\006Chyba dat EEPROM", "Chyba dat EEPROM") +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING TR("\004Formatování EEPROM", "Formatování EEPROM") +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "Přetekla EEPROM" #define TR_MENURADIOSETUP "NASTAVENÍ RÁDIA" #define TR_MENUDATEANDTIME "DATUM A čAS" @@ -823,6 +825,7 @@ #define TR_INCOMPATIBLE "Nekompatibilní" #define TR_WARNING "KONTROLA" #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "Aktualizuji EEPROM" #define TR_THROTTLEWARN "PLYNU" #define TR_ALARMSWARN "ALARMU" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 321fc1b39..7bf9004f2 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -748,7 +748,9 @@ #define TR_ALARMSDISABLED "Alarme ausgeschaltet" #define TR_PRESSANYKEY TR("Taste drücken",CENTER"Taste drücken") #define TR_BADEEPROMDATA "EEPROM ungültig" +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING "EEPROM Initialisieren" +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "EEPROM Überlauf" #define TR_MENURADIOSETUP TR("SENDER-EINSTELLEN", "SENDER-GRUNDEINSTELLUNGEN") #define TR_MENUDATEANDTIME "DATUM UND ZEIT" @@ -827,6 +829,7 @@ #define TR_INCOMPATIBLE "Nicht kompatibel" #define TR_WARNING "WARNUNG" #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converting" #define TR_THROTTLEWARN "GAS" #define TR_ALARMSWARN "ALARM" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index c6deea85c..5f5dbff06 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -705,7 +705,9 @@ #define TR_ALARMSDISABLED "Alarmas Desact." #define TR_PRESSANYKEY TR("\010Pulsa una Tecla", "Pulsa una Tecla") #define TR_BADEEPROMDATA "Datos EEprom mal" +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING "Formateo EEPROM" +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "Desborde EEPROM" #define TR_MENURADIOSETUP "CONFIGURACION" #define TR_MENUDATEANDTIME "FECHA Y HORA" @@ -779,6 +781,7 @@ #define TR_INCOMPATIBLE "Incompatible" #define TR_WARNING "AVISO" #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converting" #define TR_THROTTLEWARN "ACELERADOR" #define TR_ALARMSWARN "ALARMAS" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index fa54885ce..48155d955 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -705,7 +705,9 @@ #define TR_ALARMSDISABLED "Alarms Disabled" #define TR_PRESSANYKEY TR("\010Press any Key", "Press any Key") #define TR_BADEEPROMDATA "Bad FINSKA Data" +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING "Formatting FINSKA" +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "FINSKA overflow" #define TR_MENURADIOSETUP "RADIO SETUP" #define TR_MENUDATEANDTIME "DATE AND TIME" @@ -779,6 +781,7 @@ #define TR_INCOMPATIBLE "Incompatible" #define TR_WARNING "WARNING" #define TR_EEPROMWARN "FINSKA" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converting" #define TR_THROTTLEWARN "THROTTLE" #define TR_ALARMSWARN "ALARMS" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 9512a5ae0..2adb9da8f 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -743,7 +743,9 @@ #define TR_ALARMSDISABLED "Alarmes Désactivées" #define TR_PRESSANYKEY TR("Touche pour continuer", "Touche pour continuer") #define TR_BADEEPROMDATA "EEPROM corrompue" +#define TR_BAD_RADIO_DATA "Réglages radio corrompus" #define TR_EEPROMFORMATTING "Formatage EEPROM" +#define TR_STORAGE_FORMAT "Préparation stockage" #define TR_EEPROMOVERFLOW "Dépassement EEPROM" #define TR_MENURADIOSETUP "CONFIG RADIO" #define TR_MENUDATEANDTIME "DATE ET HEURE" @@ -814,6 +816,7 @@ #define TR_INCOMPATIBLE "Incompatible" #define TR_WARNING "ALERTE" #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STOCKAGE" #define TR_EEPROM_CONVERTING "Conversion EEPROM" #define TR_THROTTLEWARN "GAZ" #define TR_ALARMSWARN "SON" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 5f1e170be..664430253 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -746,7 +746,9 @@ #define TR_ALARMSDISABLED "Avvisi Disattivati!" #define TR_PRESSANYKEY "\010Premi un tasto" #define TR_BADEEPROMDATA "Dati corrotti!" +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING "Formatto EEPROM..." +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "EEPROM Piena" #define TR_MENURADIOSETUP "CONFIGURATX" #define TR_MENUDATEANDTIME "DATA E ORA" @@ -825,6 +827,7 @@ #define TR_INCOMPATIBLE "Incompatibile" #define TR_WARNING "AVVISO" #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "Conversione EEPROM" #define TR_THROTTLEWARN "MOTORE" #define TR_ALARMSWARN "ALLARMI" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index fa31e3cdc..0473c1b98 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -762,7 +762,9 @@ #define TR_ALARMSDISABLED "Alarm uitgeschakeld" #define TR_PRESSANYKEY TR("\010Druk een Toets", "Druk een Toets") #define TR_BADEEPROMDATA "EEPROM Ongeldig" +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING "EEPROM Initialiseren" +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "EEPROM Overflow" #define TR_MENURADIOSETUP TR("ZENDER-INSTELLEN", "ZENDER-BASISINSTELLENGEN") @@ -844,6 +846,7 @@ #define TR_INCOMPATIBLE "Niet compatibel" #define TR_WARNING TR("WARNING","WAARSCHUWING") #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converteren" #define TR_THROTTLEWARN "GAS" #define TR_ALARMSWARN "ALARM" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 1b4a86b7e..e9684f1d4 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -747,7 +747,9 @@ #define TR_ALARMSDISABLED "Alarmy wyłączone" #define TR_PRESSANYKEY TR("\010Wciśnij jakiś klawisz","Wciśnij jakiś klawisz") #define TR_BADEEPROMDATA "\006Błąd danych EEPROM" +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING "\004Formatowanie EEPROM" +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "Przeładowany EEPROM" #define TR_MENURADIOSETUP "USTAWIENIA RADIA" #define TR_MENUDATEANDTIME "DATA I CZAS" @@ -826,6 +828,7 @@ #define TR_INCOMPATIBLE "Niekompatybilne" #define TR_WARNING "UWAGA" #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "Konwersja EEPROM" #define TR_THROTTLEWARN "GAZ" #define TR_ALARMSWARN "ALARM" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index be11c63a3..92eb7f4c1 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -699,7 +699,9 @@ #define TR_ALARMSDISABLED "Desabilita Alarmes" #define TR_PRESSANYKEY "\010Pressione Tecla" #define TR_BADEEPROMDATA "EEPRON INVALIDA" +#define TR_BAD_RADIO_DATA "Bad Radio Data" #define TR_EEPROMFORMATTING "Formatando EEPROM" +#define TR_STORAGE_FORMAT "Storage Preparation" #define TR_EEPROMOVERFLOW "EEPROM CHEIA" #define TR_MENURADIOSETUP "AJUSTAR RADIO" #define TR_MENUDATEANDTIME "DATA E HORA" @@ -773,6 +775,7 @@ #define TR_INCOMPATIBLE "Incompativel" #define TR_WARNING "AVISO" #define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" #define TR_EEPROM_CONVERTING "EEPROM Converting" #define TR_THROTTLEWARN "ACELERAD" #define TR_ALARMSWARN "ALARMES" From ea41a59da7f54c252de89716c227c7859e46ac5a Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 23 Mar 2016 22:16:27 +0400 Subject: [PATCH 13/98] Translation fixes --- radio/src/gui/horus/menu_general_calib.cpp | 6 +-- radio/src/gui/horus/menu_general_hardware.cpp | 2 +- radio/src/translations.cpp | 4 +- radio/src/translations.h | 5 ++- radio/src/translations/cz.h.txt | 24 ++++++++--- radio/src/translations/de.h.txt | 18 +++++++-- radio/src/translations/en.h.txt | 6 ++- radio/src/translations/es.h.txt | 31 ++++++++++---- radio/src/translations/fi.h.txt | 31 ++++++++++---- radio/src/translations/fr.h.txt | 40 ++++++++++++------- radio/src/translations/it.h.txt | 26 ++++++++---- radio/src/translations/nl.h.txt | 26 +++++++----- radio/src/translations/pl.h.txt | 26 ++++++++---- radio/src/translations/pt.h.txt | 31 ++++++++++---- radio/src/translations/se.h.txt | 12 ++++-- 15 files changed, 209 insertions(+), 79 deletions(-) diff --git a/radio/src/gui/horus/menu_general_calib.cpp b/radio/src/gui/horus/menu_general_calib.cpp index 1bb663188..088c062eb 100644 --- a/radio/src/gui/horus/menu_general_calib.cpp +++ b/radio/src/gui/horus/menu_general_calib.cpp @@ -124,14 +124,14 @@ bool menuCommonCalib(evt_t event) // START CALIBRATION if (!READ_ONLY()) { lcdDrawText(50, 3, STR_MENUCALIBRATION, MENU_TITLE_COLOR); - lcdDrawText(50, 3+FH, "Press [Enter] to start", MENU_TITLE_COLOR); + lcdDrawText(50, 3+FH, STR_MENUTOSTART, MENU_TITLE_COLOR); } break; case CALIB_SET_MIDPOINT: // SET MIDPOINT lcdDrawText(50, 3, STR_MENUCALIBRATION, MENU_TITLE_COLOR); - lcdDrawText(50, 3+FH, "Please center sticks and press [Enter]", MENU_TITLE_COLOR); + lcdDrawText(50, 3+FH, STR_SETMIDPOINT, MENU_TITLE_COLOR); for (int i=0; i 50) { g_eeGeneral.calib[i].mid = reusableBuffer.calib.midVals[i]; diff --git a/radio/src/gui/horus/menu_general_hardware.cpp b/radio/src/gui/horus/menu_general_hardware.cpp index 291da19f1..56a594c68 100644 --- a/radio/src/gui/horus/menu_general_hardware.cpp +++ b/radio/src/gui/horus/menu_general_hardware.cpp @@ -178,7 +178,7 @@ bool menuGeneralHardware(evt_t event) #endif case ITEM_SETUP_HW_BAT_CAL: - lcdDrawText(MENUS_MARGIN_LEFT, y, "Battery cal."); + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BATT_CALIB); lcdDrawNumber(HW_SETTINGS_COLUMN, y, getBatteryVoltage(), attr|LEFT|PREC2, 0, NULL, "V"); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.txVoltageCalibration, -127, 127); break; diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 5a78c6151..a0e66feab 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -126,7 +126,9 @@ const pm_char STR_POPUPS[] PROGMEM = TR_POPUPS; #if !defined(OFS_EXIT) const pm_char STR_EXIT[] PROGMEM = TR_EXIT; #endif -const pm_char STR_MENUWHENDONE[] PROGMEM = TR_MENUWHENDONE; +#if !defined(PCBHORUS) + const pm_char STR_MENUWHENDONE[] PROGMEM = TR_MENUWHENDONE; +#endif const pm_char STR_FREE[] PROGMEM = TR_FREE; const pm_char STR_DELETEMODEL[] PROGMEM = TR_DELETEMODEL; const pm_char STR_COPYINGMODEL[] PROGMEM = TR_COPYINGMODEL; diff --git a/radio/src/translations.h b/radio/src/translations.h index d679589c7..f0e3c04fd 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -328,7 +328,10 @@ extern const pm_char STR_POPUPS[]; extern const pm_char STR_EXIT[]; #endif -extern const pm_char STR_MENUWHENDONE[]; +#if !defined(PCBHORUS) + extern const pm_char STR_MENUWHENDONE[]; +#endif + extern const pm_char STR_FREE[]; #define LEN_FREE PSIZE(TR_FREE) extern const pm_char STR_DELETEMODEL[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 493eaf8c6..c0fede4ec 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -460,7 +460,13 @@ #define TR_STICKS_VSRCRAW TR("Směr""Výšk""Plyn""Křid", "\307Směr""\307Výšk""\307Plyn""\307Křid") #define TR_TRIMS_VSRCRAW TR("TrmS""TrmV""TrmP""TrmK", "\313Směr""\313Výšk""\313Plyn""\313Křid") -#if defined(PCBTARANIS) && defined(REV9E) +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) #define TR_POTS_VSRCRAW "\310S1\0 ""\310S2\0 ""\310S3\0 ""\310S4\0 ""\311LS\0 ""\311RS\0 ""\311LS2 ""\311RS2 " #define TR_SW_VSRCRAW "\312SA\0 ""\312SB\0 ""\312SC\0 ""\312SD\0 ""\312SE\0 ""\312SF\0 ""\312SG\0 ""\312SH\0 ""\312SI\0 ""\312SJ\0 ""\312SK\0 ""\312SL\0 ""\312SM\0 ""\312SN\0 ""\312SO\0 ""\312SP\0 ""\312SQ\0 ""\312SR\0 " #elif defined(PCBTARANIS) @@ -497,7 +503,9 @@ #define TR_ON_ONE_SWITCHES "ZAP""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -703,14 +711,18 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART TR_ENTER " = START" #define TR_SETMIDPOINT "Nastav páky na střed" #define TR_MOVESTICKSPOTS "Hýbej pákami/poty" #else - #define TR_MENUTOSTART CENTER "\011" TR_ENTER " = START" - #define TR_SETMIDPOINT CENTER "\004Nastav páky na střed" - #define TR_MOVESTICKSPOTS TR(CENTER "\006Hýbej pákami/poty", "\014Hýbej pákami i potenciometry") + #define TR_MENUTOSTART CENTER "\011" TR_ENTER " = START" + #define TR_SETMIDPOINT CENTER "\004Nastav páky na střed" + #define TR_MOVESTICKSPOTS TR(CENTER "\006Hýbej pákami/poty", "\014Hýbej pákami i potenciometry") #endif #define TR_RXBATT "Rx Bat.:" #define TR_TXnRX "Tx:\0Rx:" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 7bf9004f2..f1e5184a1 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -464,7 +464,13 @@ #define TR_STICKS_VSRCRAW TR("Sei\0""Höh\0""Gas\0""Qur\0", "\307Sei""\307Höh""\307Gas""\307Qur") #define TR_TRIMS_VSRCRAW TR("TrmS""TrmH""TrmG""TrmQ", "\313Sei""\313Höh""\313Gas""\313Qur") -#if defined(PCBTARANIS) && defined(REV9E) +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" #elif defined(PCBTARANIS) @@ -501,7 +507,9 @@ #define TR_ON_ONE_SWITCHES "ON\0""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -707,7 +715,11 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim - +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART CENTER"\007"TR_ENTER" zum Start" #define TR_SETMIDPOINT CENTER"\002Knüppel+Potis auf Mitte" #define TR_MOVESTICKSPOTS CENTER"\003Knüppel+Potis bewegen" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index d8c4015fc..b2f02bde8 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -724,7 +724,11 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART TR_ENTER " TO START" #define TR_SETMIDPOINT "CENTER STICKS/SLIDERS" #define TR_MOVESTICKSPOTS "MOVE STICKS/POTS" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 5f5dbff06..2cc8db163 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -449,9 +449,18 @@ #define LEN_VSWITCHES "\003" #define LEN_VSRCRAW "\004" -#if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" #else #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " #define TR_SW_VSRCRAW "3POS" @@ -483,7 +492,9 @@ #define TR_ON_ONE_SWITCHES "ON\0""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -670,9 +681,15 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\010" TR_ENTER " EMPEZAR" -#define TR_SETMIDPOINT TR(CENTER "\007STICKS AL CENTRO",CENTER "\010STICKS AL CENTRO") -#define TR_MOVESTICKSPOTS CENTER "\006MOVER STICKS/POTS" +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#else + #define TR_MENUTOSTART CENTER "\010" TR_ENTER " EMPEZAR" + #define TR_SETMIDPOINT TR(CENTER "\007STICKS AL CENTRO",CENTER "\010STICKS AL CENTRO") + #define TR_MOVESTICKSPOTS CENTER "\006MOVER STICKS/POTS" +#endif #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 48155d955..ffb873f9c 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -449,9 +449,18 @@ #define LEN_VSWITCHES "\003" #define LEN_VSRCRAW "\004" -#if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" #else #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " #define TR_SW_VSRCRAW "3POS" @@ -483,7 +492,9 @@ #define TR_ON_ONE_SWITCHES "ON\0""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -670,9 +681,15 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\010" TR_ENTER " TO START" -#define TR_SETMIDPOINT TR(CENTER "\004SET STICKS MIDPOINT",CENTER "\004CENTER STICKS/SLIDERS") -#define TR_MOVESTICKSPOTS CENTER "\006MOVE STICKS/POTS" +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#else + #define TR_MENUTOSTART CENTER "\010" TR_ENTER " TO START" + #define TR_SETMIDPOINT TR(CENTER "\004SET STICKS MIDPOINT",CENTER "\004CENTER STICKS/SLIDERS") + #define TR_MOVESTICKSPOTS CENTER "\006MOVE STICKS/POTS" +#endif #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 2adb9da8f..50beee0ef 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -459,7 +459,13 @@ #define TR_STICKS_VSRCRAW TR("Dir\0""Prf\0""Gaz\0""Ail\0", "\307Dir""\307Prf""\307Gaz""\307Ail") #define TR_TRIMS_VSRCRAW TR("TrmD""TrmP""TrmG""TrmA", "\313Dir""\313Prf""\313Gaz""\313Ail") -#if defined(PCBTARANIS) && defined(REV9E) +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" #elif defined(PCBTARANIS) @@ -496,7 +502,9 @@ #define TR_ON_ONE_SWITCHES "ON\0""Un" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -653,7 +661,7 @@ #define TR_GV "VG" #define TR_ACHANNEL "A" #define TR_RANGE INDENT "Plage" -#define TR_CENTER INDENT "Center" +#define TR_CENTER INDENT "Centre" #define TR_BAR "Barre" #define TR_ALARM INDENT "Alarme" #define TR_USRDATA "Données" @@ -693,7 +701,7 @@ #define TR_GPS "GPS" #define TR_RXCHANNELORD TR("Ordre voies RX","Ordre des voies préféré") #define TR_STICKS "Manches" -#define TR_POTS "Potentios" +#define TR_POTS TR("Potentios", "Potentiomètres") #define TR_SWITCHES "Inters" #define TR_SWITCHES_DELAY "Délai inters son" #define TR_SLAVE "Elève" @@ -702,7 +710,11 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Presser [Enter] pour commencer" + #define TR_SETMIDPOINT "Centrer manches/pots/sliders et presser [Enter]" + #define TR_MOVESTICKSPOTS "Bouger manches/pots/sliders et presser [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART TR_ENTER " POUR DEBUT" #define TR_SETMIDPOINT "REGLER NEUTRES" #define TR_MOVESTICKSPOTS "BOUGER STICKS/POTS" @@ -911,7 +923,7 @@ #define TR_RESET_TELEMETRY TR("Réinit. Télém.", "Réinit. Télémesure") #define TR_STATISTICS "Statistiques" #define TR_ABOUT_US "A propos" -#define TR_SETUP_SCREENS "Setup screens" +#define TR_SETUP_SCREENS "Configuration écrans" #define TR_AND_SWITCH "ET suppl." #define TR_SF "FS" #define TR_GF "FG" @@ -1068,7 +1080,7 @@ #define TR_SCALE "Echelle" #define TR_VIEW_CHANNELS "Voir Voies" #define TR_VIEW_NOTES "Voir Notes" -#define TR_MODEL_SELECT "Model Select" +#define TR_MODEL_SELECT "Sélection modèle" #define TR_MODS_FORBIDDEN "Modifications désactivées!" #define TR_UNLOCKED "Déverrouillé" #define TR_ID "ID" @@ -1093,10 +1105,10 @@ #define TR_STOP_DISCOVER_SENSORS INDENT "Terminer découverte" #define TR_DELETE_ALL_SENSORS TR(INDENT "Suppr. tous capteurs",INDENT "Supprimer tous capteurs") #define TR_CONFIRMDELETE TR("Tout effacer?","Vraiment tout effacer?") -#define TR_SELECT_WIDGET "Select widget" -#define TR_REMOVE_WIDGET "Remove widget" -#define TR_WIDGET_SETTINGS "Widget settings" -#define TR_REMOVE_SCREEN "Remove screen" +#define TR_SELECT_WIDGET "Sélect. widget" +#define TR_REMOVE_WIDGET "Supprimer widget" +#define TR_WIDGET_SETTINGS "Réglages widget" +#define TR_REMOVE_SCREEN "Supprimer écran" #define TR_MENU_INPUTS "\314Entrées" #define TR_MENU_LUA "\322Scripts Lua" @@ -1106,13 +1118,13 @@ #define TR_MENU_HELI "\316Cyclique" #define TR_MENU_TRIMS "\313Trims" #define TR_MENU_SWITCHES "\312Inters" -#define TR_MENU_LOGICAL_SWITCHES "\312Logical Switches" +#define TR_MENU_LOGICAL_SWITCHES "\312Inters logiques" #define TR_MENU_TRAINER "\317Ecolage" #define TR_MENU_CHANNELS "\320Canaux" #define TR_MENU_GVARS "\311Vars. glob." #define TR_MENU_TELEMETRY "\321Télémesure" -#define TR_MENU_OTHER "Other" -#define TR_MENU_INVERT "Invert" +#define TR_MENU_OTHER "Autres" +#define TR_MENU_INVERT "Inverser" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 664430253..13e07cbcd 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -461,8 +461,14 @@ #define TR_STICKS_VSRCRAW TR("Dir\0""Ele\0""Mot\0""Ale\0", "\307Dir""\307Ele""\307Mot""\307Ale") #define TR_TRIMS_VSRCRAW TR("TrmR""TrmE""TrmT""TrmA", "\313Dir""\313Ele""\313Mot""\313Ale") - -#if defined(PCBTARANIS) && defined(REV9E) + +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" #elif defined(PCBTARANIS) @@ -499,7 +505,9 @@ #define TR_ON_ONE_SWITCHES "ON\0""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -705,14 +713,18 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART TR_ENTER " TO START" #define TR_SETMIDPOINT "CENTRA STICKS/SLIDERS" #define TR_MOVESTICKSPOTS "MUOVI STICKS/POTS" #else - #define TR_MENUTOSTART CENTER"\011" TR_ENTER " per Cal." - #define TR_SETMIDPOINT CENTER"\012SETTA CENTRO" - #define TR_MOVESTICKSPOTS CENTER"\010MUOVI STICK/POT" + #define TR_MENUTOSTART CENTER"\011" TR_ENTER " per Cal." + #define TR_SETMIDPOINT CENTER"\012SETTA CENTRO" + #define TR_MOVESTICKSPOTS CENTER"\010MUOVI STICK/POT" #endif #define TR_RXBATT "Batt Rx:" #define TR_TXnRX "Tx:\0Rx:" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 0473c1b98..2139a4dc1 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -461,8 +461,14 @@ #define TR_STICKS_VSRCRAW TR("Rud\0""Ele\0""Thr\0""Ail\0", "\307Rud""\307Ele""\307Thr""\307Ail") #define TR_TRIMS_VSRCRAW TR("TrmR""TrmE""TrmT""TrmA", "\313Rud""\313Ele""\313Thr""\313Ail") - -#if defined(PCBTARANIS) && defined(REV9E) + +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" #elif defined(PCBTARANIS) @@ -503,16 +509,12 @@ #define TR_ON_ONE_SWITCHES "ON\0""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES - - #else - - - - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES #endif @@ -721,7 +723,11 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim - +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART TR_ENTER " VOOR START" #define TR_SETMIDPOINT "CENTREER STICKS/SLIDERS" #define TR_MOVESTICKSPOTS "BEWEEG STICKS/POTS" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index e9684f1d4..0dbc2a164 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -462,8 +462,14 @@ #define TR_STICKS_VSRCRAW TR("SK \0""SW \0""Gaz\0""Lot\0", "\307SK ""\307SW ""\307Gaz""\307Lot") #define TR_TRIMS_VSRCRAW TR("TrSK""TrSW""TrGA""TrLO", "\313SK ""\313SW ""\313Gaz""\313Lot") - -#if defined(PCBTARANIS) && defined(REV9E) + +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\310S4\0""\311LS\0""\311RS\0""\311LS2""\311RS2" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" #elif defined(PCBTARANIS) @@ -500,7 +506,9 @@ #define TR_ON_ONE_SWITCHES "ON\0""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -706,14 +714,18 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trym- +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART TR_ENTER " KALIBRUJ" #define TR_SETMIDPOINT "Centruj drażki/potencj" - #define TR_MOVESTICKSPOTS "Poruszaj drążkami/pot" + #define TR_MOVESTICKSPOTS "Poruszaj drążkami/pot" #else #define TR_MENUTOSTART CENTER "\010" TR_ENTER " KALIBRUJ" - #define TR_SETMIDPOINT TR(CENTER "\002Cenruj drążki/potencj",CENTER "\010Ustaw drązki/potencj na środku") - #define TR_MOVESTICKSPOTS "Poruszaj drążkami/pot" + #define TR_SETMIDPOINT TR(CENTER "\002Cenruj drążki/potencj",CENTER "\010Ustaw drązki/potencj na środku") + #define TR_MOVESTICKSPOTS "Poruszaj drążkami/pot" #endif #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 92eb7f4c1..167326cc9 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -443,9 +443,18 @@ #define LEN_VSWITCHES "\003" #define LEN_VSRCRAW "\004" -#if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" #else #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " #define TR_SW_VSRCRAW "3POS" @@ -477,7 +486,9 @@ #define TR_ON_ONE_SWITCHES "ON\0""One" -#if defined(PCBTARANIS) +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) // only special switches here #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES #else @@ -664,9 +675,15 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER"\011" TR_ENTER " INICIAR" -#define TR_SETMIDPOINT TR(CENTER"\005CENTRAR STICK/POT",CENTER"\006CENTRAR STICK/POT") -#define TR_MOVESTICKSPOTS TR(CENTER"\005MOVER STICKS/POTs",CENTER"\006MOVER STICKS/POTs") +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#else + #define TR_MENUTOSTART CENTER"\011" TR_ENTER " INICIAR" + #define TR_SETMIDPOINT TR(CENTER"\005CENTRAR STICK/POT",CENTER"\006CENTRAR STICK/POT") + #define TR_MOVESTICKSPOTS TR(CENTER"\005MOVER STICKS/POTs",CENTER"\006MOVER STICKS/POTs") +#endif #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 1cbbce4ae..09e1ec1ec 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -723,14 +723,18 @@ #define TR_CAL "Kalib." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#if defined(COLORLCD) +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) #define TR_MENUTOSTART TR_ENTER " Startar " #define TR_SETMIDPOINT "Centrera Allt" #define TR_MOVESTICKSPOTS "Rör Spakar/Rattar" #else - #define TR_MENUTOSTART CENTER "\011" TR_ENTER " Startar " - #define TR_SETMIDPOINT TR(CENTER "\012Centrera Allt",CENTER "\013Centrera Allt") - #define TR_MOVESTICKSPOTS TR(CENTER "\005Rör Spakar/Rattar",CENTER "\006Rör Spakar/Rattar") + #define TR_MENUTOSTART CENTER "\011" TR_ENTER " Startar " + #define TR_SETMIDPOINT TR(CENTER "\012Centrera Allt",CENTER "\013Centrera Allt") + #define TR_MOVESTICKSPOTS TR(CENTER "\005Rör Spakar/Rattar",CENTER "\006Rör Spakar/Rattar") #endif #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" From c5a5fa243013912e265da986d3be03198f45da17 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 23 Mar 2016 22:20:01 +0400 Subject: [PATCH 14/98] Horus got forgotten --- companion/src/firmwares/opentx/opentxinterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 21d77fcd4..2dacafe0b 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -815,7 +815,7 @@ int OpenTxFirmware::getCapability(const Capability capability) QTime OpenTxFirmware::getMaxTimerStart() { - if (IS_TARANIS(board)) + if (IS_TARANIS(board) || IS_HORUS(board)) return QTime(23, 59, 59); else if (IS_ARM(board)) return QTime(8, 59, 59); From d831d1428c68d220607f810f161d60638af1bf3b Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Wed, 23 Mar 2016 19:49:35 +0100 Subject: [PATCH 15/98] Re #3371: Horus batery voltage adjusted based on measurements with a precise volt-meter --- radio/src/targets/horus/board_horus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/targets/horus/board_horus.cpp b/radio/src/targets/horus/board_horus.cpp index f930c45bf..5cbaf2d12 100644 --- a/radio/src/targets/horus/board_horus.cpp +++ b/radio/src/targets/horus/board_horus.cpp @@ -270,5 +270,5 @@ void checkTrainerSettings() uint16_t getBatteryVoltage() { int32_t instant_vbat = anaIn(TX_VOLTAGE); // using filtered ADC value on purpose - return (uint16_t)((instant_vbat * (1000 + g_eeGeneral.txVoltageCalibration) ) / 1637); + return (uint16_t)((instant_vbat * (1000 + g_eeGeneral.txVoltageCalibration) ) / 1629); } From c58217a82c7ae1e4b0a1127d083dce5abdae4baf Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 23 Mar 2016 22:46:21 +0100 Subject: [PATCH 16/98] TODO added for Kilrah, I am not sure this line is useful --- radio/src/gui/9x/menu_model_setup.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/9x/menu_model_setup.cpp b/radio/src/gui/9x/menu_model_setup.cpp index c25f4eaa0..fb660986d 100644 --- a/radio/src/gui/9x/menu_model_setup.cpp +++ b/radio/src/gui/9x/menu_model_setup.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" #if defined(CPUARM) uint8_t g_moduleIdx; @@ -286,7 +286,7 @@ void menuModelSetup(uint8_t event) case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; timer->start -= qr.rem ; - if ((int16_t)timer->start < 0) timer->start=0; + if ((int16_t)timer->start < 0) timer->start=0; // TODO is it really needed? if ((int32_t)timer->start > 3599) timer->start=3599; // 59:59 break; } From 3d0bf81bfda2f9a9d7ef5663f01df654000616ce Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 23 Mar 2016 22:47:45 +0100 Subject: [PATCH 17/98] [AVR boards] TTS option was missing in CMakeLists.txt --- radio/src/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index d7a9efc27..4c7bddf22 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -561,6 +561,7 @@ else() option(BOLD "Bold font" ON) option(BATTGRAPH "Battery graph" OFF) option(HAPTIC "Haptic support" OFF) + set(TTS "EN" CACHE STRING "TTS language") set(LCD "DEFAULT" CACHE STRING "LCD type (DEFAULT/ST7565P/ST7565R/ERC12864FSF/ST7920)") set(LUA NO) set(PULSES_SRC pulses_avr.cpp) @@ -584,6 +585,13 @@ else() if(VOICE) add_definitions(-DVOICE) set(TARGET_SRC ${TARGET_SRC} voice.cpp) + foreach(LANGUAGE ${TTS_LANGUAGES}) + string(TOUPPER ${LANGUAGE} LANGUAGE_CAPITALIZED) + if(TTS STREQUAL ${LANGUAGE_CAPITALIZED}) + add_definitions(-DTTS_${LANGUAGE_CAPITALIZED}) + set(SRC ${SRC} translations/tts_${LANGUAGE}.cpp) + endif() + endforeach() endif() if(GRAPHICS) add_definitions(-DGRAPHICS) From fd57db6068afe0f0f796ebe24b76437ba1937d73 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 23 Mar 2016 23:20:40 +0100 Subject: [PATCH 18/98] =?UTF-8?q?[Horus]=C2=A0Curve=20bug=20when=20drawing?= =?UTF-8?q?=20negative=20X=20or=20negative=20Y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- radio/src/gui/horus/menu_model_curves.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/horus/menu_model_curves.cpp b/radio/src/gui/horus/menu_model_curves.cpp index 938edebcc..e5d3feabc 100644 --- a/radio/src/gui/horus/menu_model_curves.cpp +++ b/radio/src/gui/horus/menu_model_curves.cpp @@ -250,7 +250,7 @@ bool menuModelCurveOne(evt_t event) lcdDrawSolidFilledRect(point.x, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, 2, 2*CURVE_SIDE_WIDTH+2, CURVE_CURSOR_COLOR); char text[5]; - strAppendUnsigned(text, points[i]); + strAppendSigned(text, points[i]); if (point.x >= CURVE_CENTER_X) { drawCurveVerticalScale(point.x-15); @@ -273,7 +273,7 @@ bool menuModelCurveOne(evt_t event) drawCurvePoint(point.x-3, point.y-4, CURVE_CURSOR_COLOR); - strAppendUnsigned(text, x); + strAppendSigned(text, x); drawCurveCoord(limit(CURVE_CENTER_X-CURVE_SIDE_WIDTH-1, point.x-CURVE_COORD_WIDTH/2, CURVE_CENTER_X+CURVE_SIDE_WIDTH-CURVE_COORD_WIDTH+1), CURVE_CENTER_Y+CURVE_SIDE_WIDTH+2, text, selectionMode==1); if (s_editMode > 0) { From 20ab3a324b7ba2c3a2bfe65c1afe2f0a9c5eac72 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 23 Mar 2016 23:20:59 +0100 Subject: [PATCH 19/98] CMake warning fix --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 769cadd08..cefa43c8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ message(STATUS "OpenTX ${VERSION}") cmake_minimum_required(VERSION 2.8) cmake_policy(SET CMP0020 NEW) cmake_policy(SET CMP0023 OLD) +cmake_policy(SET CMP0043 NEW) set(CMAKE_CXX_STANDARD 11) From e3d70817ea5649f6f38ca84bc76d196285353b67 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 23 Mar 2016 23:46:49 +0100 Subject: [PATCH 20/98] Build script converted to python and added to git --- radio/util/build.py | 179 +++++++++++++++++++++++ radio/util/fwoptions.py | 308 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 487 insertions(+) create mode 100644 radio/util/build.py create mode 100644 radio/util/fwoptions.py diff --git a/radio/util/build.py b/radio/util/build.py new file mode 100644 index 000000000..a3c286874 --- /dev/null +++ b/radio/util/build.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python + +import os +import sys +from fwoptions import * + +# Board types +BOARD_9X = 0 +BOARD_GRUVIN9X = 1 +BOARD_SKY9X = 2 +BOARD_TARANIS = 3 +BOARD_HORUS = 4 + +# Board families +BOARD_FAMILY_AVR = 0 +BOARD_FAMILY_ARM = 1 + +srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.." +filename = sys.argv[1] +root, ext = os.path.splitext(filename) +options = root.split("-") + +if options[0] != "opentx": + sys.exit("Invalid firmware"); + +filename = "opentx-" +optcount = 1 + +command_options = {} + +if options[optcount] == "9x": + command_options["PCB"] = "9X" + firmware_options = options_9x + maxsize = 65536 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR +elif options[optcount] == "9xr": + command_options["PCB"] = "9XR" + firmware_options = options_9x + maxsize = 65536 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR +elif options[optcount] == "9x128": + command_options["PCB"] = "9X128" + command_options["FRSKY_STICKS"] = "YES" + firmware_options = options_9x128 + maxsize = 65536*2 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR +elif options[optcount] == "9xr128": + command_options["PCB"] = "9XR128" + command_options["FRSKY_STICKS"] = "YES" + firmware_options = options_9x128 + maxsize = 65536*2 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR +elif options[optcount] == "gruvin9x": + command_options["PCB"] = "GRUVIN9X" + command_options["EXT"] = "FRSKY" + firmware_options = options_gruvin9x + maxsize = 65536*4 + board = BOARD_GRUVIN9X + board_family = BOARD_FAMILY_AVR +elif options[optcount] == "mega2560": + command_options["PCB"] = "MEGA2560" + command_options["EXT"] = "FRSKY" + firmware_options = options_mega2560 + maxsize = 65536*4 + board = BOARD_GRUVIN9X + board_family = BOARD_FAMILY_AVR +elif options[optcount] == "sky9x": + command_options["PCB"] = "SKY9X" + firmware_options = options_sky9x + maxsize = 65536*4 + board = BOARD_SKY9X + board_family = BOARD_FAMILY_ARM +elif options[optcount] == "9xrpro": + command_options["PCB"] = "9XRPRO" + command_options["SDCARD"] = "YES" + firmware_options = options_sky9x + maxsize = 65536*4 + board = BOARD_SKY9X + board_family = BOARD_FAMILY_ARM +elif options[optcount] == "ar9x": + command_options["PCB"] = "AR9X" + command_options["SDCARD"] = "YES" + command_options["HARDWARE_VOLUME"] = "NO" + firmware_options = options_ar9x + maxsize = 65536*4 + board = BOARD_SKY9X + board_family = BOARD_FAMILY_ARM +elif options[optcount] == "taranis": + command_options["PCB"] = "TARANIS" + firmware_options = options_taranis + maxsize = 65536*8 + board = BOARD_TARANIS + board_family = BOARD_FAMILY_ARM +elif options[optcount] == "taranisplus": + command_options["PCB"] = "TARANIS" + command_options["PCBREV"] = "REVPLUS" + firmware_options = options_taranisplus + maxsize = 65536*8 + board = BOARD_TARANIS + board_family = BOARD_FAMILY_ARM +elif options[optcount] == "taranisx9e": + command_options["PCB"] = "TARANIS" + command_options["PCBREV"] = "REV9E" + firmware_options = options_taranisx9e + maxsize = 65536*8 + board = BOARD_TARANIS + board_family = BOARD_FAMILY_ARM +elif options[optcount] == "horus": + command_options["PCB"] = "HORUS" + firmware_options = options_horus + maxsize = 2*1024*1024 + board = BOARD_HORUS + board_family = BOARD_FAMILY_ARM +else: + sys.exit("Unknown board") + +filename += options[optcount] +optcount += 1 + +# The firmware options +for opt, value in firmware_options.items(): + found = False + for i in range(optcount, len(options)): + if options[i] == opt: + found = True + break + + if found: + optvalue = value[1]; + filename += "-" + opt; + else: + optvalue = value[2] + + if optvalue != None: + command_options[value[0]] = optvalue + +# The firmware display language +language = "" +for key in languages: + if key == options[-1]: + language = key +if not language: + sys.exit("Invalid language") +command_options["TRANSLATIONS"] = language.upper() +filename += "-" + language + +if board_family == BOARD_FAMILY_ARM: + ext = ".bin" +else: + ext = ".hex" +filename += ext +firmware = "firmware" + ext + +# Launch CMake +cmd = "cmake" +for opt, value in command_options.items(): + cmd += " -D%s=%s" % (opt, value) +cmd += " " + srcdir +if "OPENTX_VERSION_SUFFIX" in os.environ: + cmd += ' -DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"] +print cmd +os.system(cmd) + +# Launch make firmware +cmd = "make firmware" +os.system(cmd) + +# Check binary size +if board_family == BOARD_FAMILY_ARM: + size = os.stat(firmware).st_size +else: + os.system("avr-size -A %s | grep Total | cut -f2- -d \" \" > ./size" % firmware) + size = file("./size").read().strip() +if int(size) > maxsize: + exit("Invalid size") diff --git a/radio/util/fwoptions.py b/radio/util/fwoptions.py new file mode 100644 index 000000000..24f910a52 --- /dev/null +++ b/radio/util/fwoptions.py @@ -0,0 +1,308 @@ +#!/usr/bin/env python + +languages = ( + "en", + "fr", + "se", + "it", + "cz", + "de", + "pt", + "es", + "pl", + "nl" +) + +tts_avr = { + "ttsen": ("TTS", "EN", None), + "ttsfr": ("TTS", "FR", None), + "ttsit": ("TTS", "IT", None), + "ttscz": ("TTS", "CZ", None), + "ttsde": ("TTS", "DE", None), + "ttspt": ("TTS", "PT", None), +} + +options_9x_ext = { + "nmea": ("EXT", "NMEA", None), + "frsky": ("EXT", "FRSKY", None), + "telemetrez": ("EXT", "TELEMETREZ", None), + "jeti": ("EXT", "JETI", None), + "ardupilot": ("EXT", "ARDUPILOT", None), + "mavlink": ("EXT", "MAVLINK", None), +} + +options_9x = { + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nosplash": ("SPLASH", "NO", "YES"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "audio": ("AUDIO", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "haptic": ("HAPTIC", "YES", "NO"), + "pwmbl": ("PWM_BACKLIGHT", "YES", "NO"), + "turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"), + "acurStats": ("ACCURAT_THROTTLE_STATS", "YES", "NO"), + "arithOvfl": ("ARITHMETIC_OVERFLOW_CHECK", "YES", "NO"), + # "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "PPM ", "NO"), + "potscroll": ("NAVIGATION", "POTS ", "NO"), + "rotenc": ("NAVIGATION", "ROTENC ", "NO"), + "sp22": ("SP22", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5 ", None), + "thrtrace": ("THR_TRACE", "YES", "NO"), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "nogps": ("GPS", "NO", "YES"), + "nogauges": ("GAUGES", "NO", "YES"), + "novario": ("VARIO", "NO", "YES"), + "nowshh": ("WS_HOW_HIGH", "NO", "YES"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE ", None), + "fasoffset": ("FAS_OFFSET", "YES", "NO"), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "stickrev": ("FRSKY_STICKS", "YES", "NO") +} + +options_9x.update(options_9x_ext) +options_9x.update(tts_avr) + +options_9x128 = { + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nosplash": ("SPLASH", "NO", "YES"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "audio": ("AUDIO", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "haptic": ("HAPTIC", "YES", "NO"), + "pwmbl": ("PWM_BACKLIGHT", "YES", "NO"), + "turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"), + # "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "PPM", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "rotenc": ("NAVIGATION", "ROTENC", "NO"), + "sp22": ("SP22", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "thrtrace": ("THR_TRACE", "YES", "NO"), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "nogps": ("GPS", "NO", "YES"), + "nogauges": ("GAUGES", "NO", "YES"), + "novario": ("VARIO", "NO", "YES"), + "nowshh": ("WS_HOW_HIGH", "NO", "YES"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") +} + +options_9x128.update(options_9x_ext) +options_9x128.update(tts_avr) + +options_gruvin9x = { + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "sdcard": ("SDCARD", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "SERIAL", "NO"), + "DSM2PPM": ("DSM2", "PPM", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") +} + +options_gruvin9x.update(tts_avr) + +options_mega2560 = { + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "PWR": ("PWRMANAGE", "YES", "NO"), + "sdcard": ("SDCARD", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "SERIAL", "NO"), + "DSM2PPM": ("DSM2", "PPM", "NO"), + "ST7565R": ("LCD", "ST7565R", None), + "ERC12864FSF": ("LCD", "ERC12864FSF", None), + "ST7920": ("LCD", "ST7920", None), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") +} + +options_mega2560.update(tts_avr) + +options_sky9x = { + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "bluetooth": ("BLUETOOTH", "YES", "NO"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") +} + +options_ar9x = { + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "bluetooth": ("BLUETOOTH", "YES", "NO"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + # "rtc": ("RTCLOCK", "YES", "NO"), + # "volume": ("HARDWARE_VOLUME", "YES", "NO") # Renove HARDWARE_VOLUME=NO in the commandline below when activating! +} + +options_taranis = { + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "haptic": ("HAPTIC", "YES", "NO"), + "nogvars": ("GVARS", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), + "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), + "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), + "timer3": ("TIMERS", "3", "2"), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") +} + +options_taranisplus = { + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "SWR": ("SWR", "YES", "NO"), + "nogvars": ("GVARS", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), + "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), + "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), + "timer3": ("TIMERS", "3", None), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") +} + +options_taranisx9e = { + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "SWR": ("SWR", "YES", "NO"), + "nogvars": ("GVARS", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), + "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), + "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), + "timer3": ("TIMERS", "3", None), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), + "horussticks": ("STICKS", "HORUS", "STANDARD") +} + +options_horus = { + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "nogvars": ("GVARS", "NO", "YES"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "timer3": ("TIMERS", "3", "2"), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") +} From 31fa16bf87258b81fcf4fa4536f9f8ab58abf96c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 21:41:43 +0100 Subject: [PATCH 21/98] [Horus] Bold font added --- cmake/Bitmaps.cmake | 1 + radio/src/bitmaps/horus/CMakeLists.txt | 3 +- radio/src/fonts.h | 2 +- radio/src/fonts/horus/font_dblsize.specs | 2 +- radio/src/fonts/horus/font_midsize.specs | 2 +- radio/src/fonts/horus/font_smlsize.specs | 2 +- radio/src/fonts/horus/font_stdsize.specs | 2 +- radio/src/fonts/horus/font_tinsize.specs | 2 +- radio/src/fonts/horus/font_xxlsize.specs | 2 +- radio/src/gui/horus/fonts.cpp | 50 +++++++++++-------- radio/src/gui/horus/lcd.h | 2 +- .../src/gui/horus/menu_model_flightmodes.cpp | 2 +- .../gui/horus/menu_model_logical_switches.cpp | 2 +- radio/src/gui/horus/menu_model_mixes.cpp | 2 +- radio/util/font2png.py | 2 - 15 files changed, 43 insertions(+), 35 deletions(-) diff --git a/cmake/Bitmaps.cmake b/cmake/Bitmaps.cmake index f91402e81..16c54a462 100644 --- a/cmake/Bitmaps.cmake +++ b/cmake/Bitmaps.cmake @@ -19,4 +19,5 @@ macro(add_truetype_font_target radio name font size bold) COMMAND ${RADIO_DIRECTORY}/util/font2png.py ${font} ${size} ${bold} ${target} WORKING_DIRECTORY ${RADIO_SRC_DIRECTORY} ) + set(ttf_horus_fonts_targets ${ttf_horus_fonts_targets} ttf_${radio}_${name}) endmacro(add_truetype_font_target) \ No newline at end of file diff --git a/radio/src/bitmaps/horus/CMakeLists.txt b/radio/src/bitmaps/horus/CMakeLists.txt index d73c6f533..d1b5ab591 100644 --- a/radio/src/bitmaps/horus/CMakeLists.txt +++ b/radio/src/bitmaps/horus/CMakeLists.txt @@ -1,10 +1,11 @@ add_truetype_font_target(horus tinsize "DejaVu Sans" 9 False) add_truetype_font_target(horus smlsize "DejaVu Sans" 13 False) add_truetype_font_target(horus stdsize "DejaVu Sans" 16 False) +add_truetype_font_target(horus stdsizebold "DejaVu Sans" 16 True) add_truetype_font_target(horus midsize "DejaVu Sans" 24 False) add_truetype_font_target(horus dblsize "DejaVu Sans" 32 True) add_truetype_font_target(horus xxlsize "DejaVu Sans" 48 False) -add_custom_target(ttf_horus_fonts DEPENDS ttf_horus_tinsize ttf_horus_smlsize ttf_horus_stdsize ttf_horus_midsize ttf_horus_dblsize ttf_horus_xxlsize) +add_custom_target(ttf_horus_fonts DEPENDS ${ttf_horus_fonts_targets}) add_bitmaps_target(horus_bitmaps "${RADIO_SRC_DIRECTORY}/bitmaps/horus/bmp_*.png" 480 5/6/5) add_bitmaps_target(horus_calibration_bitmaps "${RADIO_SRC_DIRECTORY}/bitmaps/horus/calibration/bmp_*.png" 480 5/6/5) diff --git a/radio/src/fonts.h b/radio/src/fonts.h index d8b05c65e..44f8bbc42 100644 --- a/radio/src/fonts.h +++ b/radio/src/fonts.h @@ -24,7 +24,7 @@ #if defined(COLORLCD) extern const uint16_t * const fontspecsTable[16]; -extern const pm_uchar * const fontsTable[16]; +extern const uint8_t * const fontsTable[16]; #else diff --git a/radio/src/fonts/horus/font_dblsize.specs b/radio/src/fonts/horus/font_dblsize.specs index ad91b19dc..6c7696489 100644 --- a/radio/src/fonts/horus/font_dblsize.specs +++ b/radio/src/fonts/horus/font_dblsize.specs @@ -1 +1 @@ -{ 0,4,14,28,54,76,110,139,146,160,173,193,217,228,242,251,266,289,310,331,352,375,397,420,441,464,487,497,508,532,556,580,598,613,641,665,689,715,736,757,783,808,818,832,859,880,910,935,963,987,1015,1040,1062,1087,1112,1140,1178,1206,1234,1258,1272,1287,1300,1324,1343,1356,1378,1401,1420,1443,1466,1484,1507,1529,1539,1553,1576,1586,1618,1640,1663,1686,1709,1726,1746,1764,1786,1810,1841,1865,1889,1909,1933,1936,1960,1988,2015,2033,2051,2074,2097,2120,2143,2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171 } \ No newline at end of file +0,4,14,28,54,76,110,139,146,160,173,193,217,228,242,251,266,289,310,331,352,375,397,420,441,464,487,497,508,532,556,580,598,613,641,665,689,715,736,757,783,808,818,832,859,880,910,935,963,987,1015,1040,1062,1087,1112,1140,1178,1206,1234,1258,1272,1287,1300,1324,1343,1356,1378,1401,1420,1443,1466,1484,1507,1529,1539,1553,1576,1586,1618,1640,1663,1686,1709,1726,1746,1764,1786,1810,1841,1865,1889,1909,1933,1936,1960,1988,2015,2033,2051,2074,2097,2120,2143,2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171 \ No newline at end of file diff --git a/radio/src/fonts/horus/font_midsize.specs b/radio/src/fonts/horus/font_midsize.specs index 3b0bd0cc7..1cd304764 100644 --- a/radio/src/fonts/horus/font_midsize.specs +++ b/radio/src/fonts/horus/font_midsize.specs @@ -1 +1 @@ -{ 0,4,10,20,41,56,80,100,106,115,125,140,159,167,177,184,196,212,227,242,258,274,290,306,322,338,354,361,369,388,407,426,440,451,471,487,505,524,539,553,572,589,595,605,623,638,658,675,695,710,730,747,763,782,799,819,845,864,883,901,910,922,931,950,967,976,991,1006,1020,1036,1052,1064,1080,1095,1101,1110,1125,1131,1154,1169,1185,1200,1216,1227,1241,1253,1268,1285,1306,1323,1340,1354,1373,1376,1395,1416,1437,1452,1467,1484,1501,1518,1535,1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557 } \ No newline at end of file +0,4,10,20,41,56,80,100,106,115,125,140,159,167,177,184,196,212,227,242,258,274,290,306,322,338,354,361,369,388,407,426,440,451,471,487,505,524,539,553,572,589,595,605,623,638,658,675,695,710,730,747,763,782,799,819,845,864,883,901,910,922,931,950,967,976,991,1006,1020,1036,1052,1064,1080,1095,1101,1110,1125,1131,1154,1169,1185,1200,1216,1227,1241,1253,1268,1285,1306,1323,1340,1354,1373,1376,1395,1416,1437,1452,1467,1484,1501,1518,1535,1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557 \ No newline at end of file diff --git a/radio/src/fonts/horus/font_smlsize.specs b/radio/src/fonts/horus/font_smlsize.specs index 726016a97..99d668d7a 100644 --- a/radio/src/fonts/horus/font_smlsize.specs +++ b/radio/src/fonts/horus/font_smlsize.specs @@ -1 +1 @@ -{ 0,4,8,13,23,31,44,55,58,63,67,75,85,88,94,97,103,112,120,128,137,146,154,163,171,180,189,192,195,205,215,225,232,238,248,256,266,276,284,291,301,310,313,318,327,335,345,354,365,373,384,393,402,412,421,431,445,455,465,475,479,485,489,499,508,513,521,529,537,546,555,561,570,578,581,586,594,597,609,617,626,634,643,649,657,663,671,680,692,701,710,718,728,729,739,751,763,771,779,789,799,809,819,830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830 } \ No newline at end of file +0,4,8,13,23,31,44,55,58,63,67,75,85,88,94,97,103,112,120,128,137,146,154,163,171,180,189,192,195,205,215,225,232,238,248,256,266,276,284,291,301,310,313,318,327,335,345,354,365,373,384,393,402,412,421,431,445,455,465,475,479,485,489,499,508,513,521,529,537,546,555,561,570,578,581,586,594,597,609,617,626,634,643,649,657,663,671,680,692,701,710,718,728,729,739,751,763,771,779,789,799,809,819,830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830 \ No newline at end of file diff --git a/radio/src/fonts/horus/font_stdsize.specs b/radio/src/fonts/horus/font_stdsize.specs index fe043dfda..6d123dc23 100644 --- a/radio/src/fonts/horus/font_stdsize.specs +++ b/radio/src/fonts/horus/font_stdsize.specs @@ -1 +1 @@ -{ 0,4,7,13,26,35,51,63,66,71,76,85,97,101,107,111,118,128,137,146,155,166,175,185,194,204,214,218,222,234,246,258,266,273,285,295,307,319,329,338,351,362,366,372,383,392,405,416,429,439,452,463,473,485,496,508,525,537,549,561,566,573,578,590,601,607,617,627,636,646,656,663,673,682,685,690,700,703,718,727,737,747,757,764,773,780,789,799,813,823,833,842,854,855,867,881,895,904,913,924,935,946,957,971, 986, 1001, 1016, 1031, 1046, 1061, 1076, 1091, 1106, 1121, 1136, 1151, 1166 } \ No newline at end of file +0,4,7,13,26,35,51,63,66,71,76,85,97,101,107,111,118,128,137,146,155,166,175,185,194,204,214,218,222,234,246,258,266,273,285,295,307,319,329,338,351,362,366,372,383,392,405,416,429,439,452,463,473,485,496,508,525,537,549,561,566,573,578,590,601,607,617,627,636,646,656,663,673,682,685,690,700,703,718,727,737,747,757,764,773,780,789,799,813,823,833,842,854,855,867,881,895,904,913,924,935,946,957,971, 986, 1001, 1016, 1031, 1046, 1061, 1076, 1091, 1106, 1121, 1136, 1151, 1166 \ No newline at end of file diff --git a/radio/src/fonts/horus/font_tinsize.specs b/radio/src/fonts/horus/font_tinsize.specs index b1482da70..e880969ed 100644 --- a/radio/src/fonts/horus/font_tinsize.specs +++ b/radio/src/fonts/horus/font_tinsize.specs @@ -1 +1 @@ -{ 0,4,7,12,20,26,36,44,47,51,55,61,69,72,76,79,84,91,97,103,109,116,122,129,135,142,149,151,154,162,170,178,184,189,197,204,211,219,226,232,240,247,250,254,262,268,276,283,291,298,306,313,320,328,335,343,353,360,368,375,379,384,388,396,403,407,413,420,426,432,439,444,450,456,459,463,470,473,482,488,495,502,508,513,519,524,530,537,545,552,559,565,573,574,582,591,600,606,612,619,626,633,640,648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648 } \ No newline at end of file +0,4,7,12,20,26,36,44,47,51,55,61,69,72,76,79,84,91,97,103,109,116,122,129,135,142,149,151,154,162,170,178,184,189,197,204,211,219,226,232,240,247,250,254,262,268,276,283,291,298,306,313,320,328,335,343,353,360,368,375,379,384,388,396,403,407,413,420,426,432,439,444,450,456,459,463,470,473,482,488,495,502,508,513,519,524,530,537,545,552,559,565,573,574,582,591,600,606,612,619,626,633,640,648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648 \ No newline at end of file diff --git a/radio/src/fonts/horus/font_xxlsize.specs b/radio/src/fonts/horus/font_xxlsize.specs index fd3f7bb0d..edcd5fb4f 100644 --- a/radio/src/fonts/horus/font_xxlsize.specs +++ b/radio/src/fonts/horus/font_xxlsize.specs @@ -1 +1 @@ -{ 0,4,12,29,66,93,137,173,181,195,210,235,269,280,296,305,325,353,378,404,431,460,487,515,542,570,598,607,618,652,686,720,743,762,798,827,859,893,920,944,979,1010,1019,1035,1067,1093,1129,1160,1197,1224,1261,1292,1320,1354,1384,1420,1468,1502,1536,1568,1582,1602,1616,1650,1679,1695,1722,1749,1774,1802,1830,1850,1878,1904,1912,1925,1952,1960,2002,2028,2056,2083,2111,2130,2154,2174,2200,2229,2268,2297,2326,2351,2385,2388,2422,2461,2500,2525,2550,2581,2612,2643,2674,2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714 } \ No newline at end of file +0,4,12,29,66,93,137,173,181,195,210,235,269,280,296,305,325,353,378,404,431,460,487,515,542,570,598,607,618,652,686,720,743,762,798,827,859,893,920,944,979,1010,1019,1035,1067,1093,1129,1160,1197,1224,1261,1292,1320,1354,1384,1420,1468,1502,1536,1568,1582,1602,1616,1650,1679,1695,1722,1749,1774,1802,1830,1850,1878,1904,1912,1925,1952,1960,2002,2028,2056,2083,2111,2130,2154,2174,2200,2229,2268,2297,2326,2351,2385,2388,2422,2461,2500,2525,2550,2581,2612,2643,2674,2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714 \ No newline at end of file diff --git a/radio/src/gui/horus/fonts.cpp b/radio/src/gui/horus/fonts.cpp index a2ad4a5a9..14f1801bd 100644 --- a/radio/src/gui/horus/fonts.cpp +++ b/radio/src/gui/horus/fonts.cpp @@ -18,55 +18,63 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" -const uint16_t font_tinsize_specs[] PROGMEM = +uint16_t font_tinsize_specs[] = { #include "font_tinsize.specs" -; +}; -const pm_uchar font_tinsize[] PROGMEM = { +pm_uchar font_tinsize[] = { #include "font_tinsize.lbm" }; -const uint16_t font_smlsize_specs[] PROGMEM = +uint16_t font_smlsize_specs[] = { #include "font_smlsize.specs" -; +}; -const pm_uchar font_smlsize[] PROGMEM = { +pm_uchar font_smlsize[] = { #include "font_smlsize.lbm" }; -const uint16_t font_stdsize_specs[] PROGMEM = +uint16_t font_stdsize_specs[] = { #include "font_stdsize.specs" -; +}; -const pm_uchar font_stdsize[] PROGMEM = { +pm_uchar font_stdsize[] = { #include "font_stdsize.lbm" }; -const uint16_t font_midsize_specs[] PROGMEM = +uint16_t font_midsize_specs[] = { #include "font_midsize.specs" -; +}; -const pm_uchar font_midsize[] PROGMEM = { +pm_uchar font_midsize[] = { #include "font_midsize.lbm" }; -const uint16_t font_dblsize_specs[] PROGMEM = +uint16_t font_dblsize_specs[] = { #include "font_dblsize.specs" -; +}; -const pm_uchar font_dblsize[] PROGMEM = { +pm_uchar font_dblsize[] = { #include "font_dblsize.lbm" }; -const uint16_t font_xxlsize_specs[] PROGMEM = +uint16_t font_xxlsize_specs[] = { #include "font_xxlsize.specs" -; +}; -const pm_uchar font_xxlsize[] PROGMEM = { +pm_uchar font_xxlsize[] = { #include "font_xxlsize.lbm" }; -const uint16_t * const fontspecsTable[16] = { font_stdsize_specs, font_tinsize_specs, font_smlsize_specs, font_midsize_specs, font_dblsize_specs, font_xxlsize_specs }; -const pm_uchar * const fontsTable[16] = { font_stdsize, font_tinsize, font_smlsize, font_midsize, font_dblsize, font_xxlsize }; +uint16_t font_stdsizebold_specs[] = { +#include "font_stdsizebold.specs" +}; + +pm_uchar font_stdsizebold[] = { +#include "font_stdsizebold.lbm" +}; + +const uint16_t * const fontspecsTable[16] = { font_stdsize_specs, font_tinsize_specs, font_smlsize_specs, font_midsize_specs, font_dblsize_specs, font_xxlsize_specs, font_stdsizebold_specs }; +const uint8_t * const fontsTable[16] = { font_stdsize, font_tinsize, font_smlsize, font_midsize, font_dblsize, font_xxlsize, font_stdsizebold }; diff --git a/radio/src/gui/horus/lcd.h b/radio/src/gui/horus/lcd.h index 9d3c1dd74..dac3167fb 100644 --- a/radio/src/gui/horus/lcd.h +++ b/radio/src/gui/horus/lcd.h @@ -38,7 +38,6 @@ #define lcdint_t int32_t #define BSS 0x00 -#define BOLD 0x00 /* lcd common flags */ #define BLINK 0x01 @@ -69,6 +68,7 @@ #define MIDSIZE 0x0300 #define DBLSIZE 0x0400 #define XXLSIZE 0x0500 +#define BOLD 0x0600 #define VERTICAL 0x0800 #define TIMEBLINK 0x1000 diff --git a/radio/src/gui/horus/menu_model_flightmodes.cpp b/radio/src/gui/horus/menu_model_flightmodes.cpp index 27912e0c2..1e58efca7 100644 --- a/radio/src/gui/horus/menu_model_flightmodes.cpp +++ b/radio/src/gui/horus/menu_model_flightmodes.cpp @@ -127,7 +127,7 @@ bool menuModelFlightModesAll(evt_t event) FlightModeData *p = flightModeAddress(k); - putsFlightMode(MENUS_MARGIN_LEFT, y, k+1, (getFlightMode()==k ? 0/*BOLD*/ : 0) | ((sub==k && menuHorizontalPosition<0) ? INVERS : 0)); + putsFlightMode(MENUS_MARGIN_LEFT, y, k+1, (getFlightMode()==k ? BOLD : 0) | ((sub==k && menuHorizontalPosition<0) ? INVERS : 0)); for (int j=0; j0) ? BLINK|INVERS : INVERS) : 0); diff --git a/radio/src/gui/horus/menu_model_logical_switches.cpp b/radio/src/gui/horus/menu_model_logical_switches.cpp index 7c98e1854..9b3f8e2b5 100644 --- a/radio/src/gui/horus/menu_model_logical_switches.cpp +++ b/radio/src/gui/horus/menu_model_logical_switches.cpp @@ -109,7 +109,7 @@ bool menuModelLogicalSwitches(evt_t event) // CSW name unsigned int sw = SWSRC_SW1+k; - putsSwitches(MENUS_MARGIN_LEFT, y, sw, (getSwitch(sw) ? 0/*BOLD*/ : 0) | ((sub==k && CURSOR_ON_LINE()) ? INVERS : 0)); + putsSwitches(MENUS_MARGIN_LEFT, y, sw, (getSwitch(sw) ? BOLD : 0) | ((sub==k && CURSOR_ON_LINE()) ? INVERS : 0)); // CSW func lcdDrawTextAtIndex(CSW_1ST_COLUMN, y, STR_VCSWFUNC, cs->func, horz==0 ? attr : 0); diff --git a/radio/src/gui/horus/menu_model_mixes.cpp b/radio/src/gui/horus/menu_model_mixes.cpp index 203c45ff2..fb2cfe776 100644 --- a/radio/src/gui/horus/menu_model_mixes.cpp +++ b/radio/src/gui/horus/menu_model_mixes.cpp @@ -162,7 +162,7 @@ enum MixFields { MIX_FIELD_COUNT }; -void gvarWeightItem(coord_t x, coord_t y, MixData *md, uint8_t attr, evt_t event) +void gvarWeightItem(coord_t x, coord_t y, MixData *md, LcdFlags attr, evt_t event) { u_int8int16_t weight; MD_WEIGHT_TO_UNION(md, weight); diff --git a/radio/util/font2png.py b/radio/util/font2png.py index 43482dd62..da05af48d 100755 --- a/radio/util/font2png.py +++ b/radio/util/font2png.py @@ -89,11 +89,9 @@ def createFontBitmap(filename, fontname, fontsize, fontbold, foreground, backgro image.save(filename + ".png") if coordsfile: with open(filename + ".specs", "w") as f: - f.write("{ ") f.write(",".join(str(tmp) for tmp in coords)) for i in range(1, 14): f.write(", %d" % (int(coords[-1]) + i * (extraWidth / 12))) - f.write(" }") return coords if __name__ == "__main__": From d6dfdea6e2204a2a22260da663a26060d79c7a92 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 21:42:32 +0100 Subject: [PATCH 22/98] [9x] Simu compilation fix when VOICE option enabled --- radio/src/targets/9x/voice.cpp | 42 ++++++++++++++-------------- radio/src/targets/simu/simpgmspace.h | 1 + 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/radio/src/targets/9x/voice.cpp b/radio/src/targets/9x/voice.cpp index ca5b1aac4..d122a65ca 100644 --- a/radio/src/targets/9x/voice.cpp +++ b/radio/src/targets/9x/voice.cpp @@ -1,24 +1,24 @@ -/* - * 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" +/* + * 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" struct t_voice Voice ; diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index 1b150a7e8..ea07a9885 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -327,6 +327,7 @@ extern void rxPdcUsart( void (*pChProcess)(uint8_t x) ); #define FE0 0 #define ISR(x, ...) void x() +#define asm(...) #if defined(CPUARM) extern uint32_t Master_frequency; From d5931d2129f50d5380bb4f0ba1c1ebcb60552200 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 21:43:00 +0100 Subject: [PATCH 23/98] TTS language is "en" by default --- radio/src/opentx.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index dd8503884..d44aced1e 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -300,6 +300,8 @@ void generalDefault() #endif #if defined(CPUARM) + g_eeGeneral.ttsLanguage[0] = 'e'; + g_eeGeneral.ttsLanguage[1] = 'n'; g_eeGeneral.wavVolume = 2; g_eeGeneral.backgroundVolume = 1; #endif From f979fd7289a17a5b440f4fc752650b9e93f97655 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 21:43:22 +0100 Subject: [PATCH 24/98] Cosmetics --- radio/util/build.py | 184 +++++++------- radio/util/fwoptions.py | 521 ++++++++++++++++++++-------------------- 2 files changed, 354 insertions(+), 351 deletions(-) diff --git a/radio/util/build.py b/radio/util/build.py index a3c286874..1517a9857 100644 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -29,122 +29,122 @@ optcount = 1 command_options = {} if options[optcount] == "9x": - command_options["PCB"] = "9X" - firmware_options = options_9x - maxsize = 65536 - board = BOARD_9X - board_family = BOARD_FAMILY_AVR + command_options["PCB"] = "9X" + firmware_options = options_9x + maxsize = 65536 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR elif options[optcount] == "9xr": - command_options["PCB"] = "9XR" - firmware_options = options_9x - maxsize = 65536 - board = BOARD_9X - board_family = BOARD_FAMILY_AVR + command_options["PCB"] = "9XR" + firmware_options = options_9x + maxsize = 65536 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR elif options[optcount] == "9x128": - command_options["PCB"] = "9X128" - command_options["FRSKY_STICKS"] = "YES" - firmware_options = options_9x128 - maxsize = 65536*2 - board = BOARD_9X - board_family = BOARD_FAMILY_AVR + command_options["PCB"] = "9X128" + command_options["FRSKY_STICKS"] = "YES" + firmware_options = options_9x128 + maxsize = 65536 * 2 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR elif options[optcount] == "9xr128": - command_options["PCB"] = "9XR128" - command_options["FRSKY_STICKS"] = "YES" - firmware_options = options_9x128 - maxsize = 65536*2 - board = BOARD_9X - board_family = BOARD_FAMILY_AVR + command_options["PCB"] = "9XR128" + command_options["FRSKY_STICKS"] = "YES" + firmware_options = options_9x128 + maxsize = 65536 * 2 + board = BOARD_9X + board_family = BOARD_FAMILY_AVR elif options[optcount] == "gruvin9x": - command_options["PCB"] = "GRUVIN9X" - command_options["EXT"] = "FRSKY" - firmware_options = options_gruvin9x - maxsize = 65536*4 - board = BOARD_GRUVIN9X - board_family = BOARD_FAMILY_AVR + command_options["PCB"] = "GRUVIN9X" + command_options["EXT"] = "FRSKY" + firmware_options = options_gruvin9x + maxsize = 65536 * 4 + board = BOARD_GRUVIN9X + board_family = BOARD_FAMILY_AVR elif options[optcount] == "mega2560": - command_options["PCB"] = "MEGA2560" - command_options["EXT"] = "FRSKY" - firmware_options = options_mega2560 - maxsize = 65536*4 - board = BOARD_GRUVIN9X - board_family = BOARD_FAMILY_AVR + command_options["PCB"] = "MEGA2560" + command_options["EXT"] = "FRSKY" + firmware_options = options_mega2560 + maxsize = 65536 * 4 + board = BOARD_GRUVIN9X + board_family = BOARD_FAMILY_AVR elif options[optcount] == "sky9x": - command_options["PCB"] = "SKY9X" - firmware_options = options_sky9x - maxsize = 65536*4 - board = BOARD_SKY9X - board_family = BOARD_FAMILY_ARM + command_options["PCB"] = "SKY9X" + firmware_options = options_sky9x + maxsize = 65536 * 4 + board = BOARD_SKY9X + board_family = BOARD_FAMILY_ARM elif options[optcount] == "9xrpro": - command_options["PCB"] = "9XRPRO" - command_options["SDCARD"] = "YES" - firmware_options = options_sky9x - maxsize = 65536*4 - board = BOARD_SKY9X - board_family = BOARD_FAMILY_ARM + command_options["PCB"] = "9XRPRO" + command_options["SDCARD"] = "YES" + firmware_options = options_sky9x + maxsize = 65536 * 4 + board = BOARD_SKY9X + board_family = BOARD_FAMILY_ARM elif options[optcount] == "ar9x": - command_options["PCB"] = "AR9X" - command_options["SDCARD"] = "YES" - command_options["HARDWARE_VOLUME"] = "NO" - firmware_options = options_ar9x - maxsize = 65536*4 - board = BOARD_SKY9X - board_family = BOARD_FAMILY_ARM + command_options["PCB"] = "AR9X" + command_options["SDCARD"] = "YES" + command_options["HARDWARE_VOLUME"] = "NO" + firmware_options = options_ar9x + maxsize = 65536 * 4 + board = BOARD_SKY9X + board_family = BOARD_FAMILY_ARM elif options[optcount] == "taranis": - command_options["PCB"] = "TARANIS" - firmware_options = options_taranis - maxsize = 65536*8 - board = BOARD_TARANIS - board_family = BOARD_FAMILY_ARM + command_options["PCB"] = "TARANIS" + firmware_options = options_taranis + maxsize = 65536 * 8 + board = BOARD_TARANIS + board_family = BOARD_FAMILY_ARM elif options[optcount] == "taranisplus": - command_options["PCB"] = "TARANIS" - command_options["PCBREV"] = "REVPLUS" - firmware_options = options_taranisplus - maxsize = 65536*8 - board = BOARD_TARANIS - board_family = BOARD_FAMILY_ARM + command_options["PCB"] = "TARANIS" + command_options["PCBREV"] = "REVPLUS" + firmware_options = options_taranisplus + maxsize = 65536 * 8 + board = BOARD_TARANIS + board_family = BOARD_FAMILY_ARM elif options[optcount] == "taranisx9e": - command_options["PCB"] = "TARANIS" - command_options["PCBREV"] = "REV9E" - firmware_options = options_taranisx9e - maxsize = 65536*8 - board = BOARD_TARANIS - board_family = BOARD_FAMILY_ARM + command_options["PCB"] = "TARANIS" + command_options["PCBREV"] = "REV9E" + firmware_options = options_taranisx9e + maxsize = 65536 * 8 + board = BOARD_TARANIS + board_family = BOARD_FAMILY_ARM elif options[optcount] == "horus": - command_options["PCB"] = "HORUS" - firmware_options = options_horus - maxsize = 2*1024*1024 - board = BOARD_HORUS - board_family = BOARD_FAMILY_ARM + command_options["PCB"] = "HORUS" + firmware_options = options_horus + maxsize = 2 * 1024 * 1024 + board = BOARD_HORUS + board_family = BOARD_FAMILY_ARM else: - sys.exit("Unknown board") + sys.exit("Unknown board") filename += options[optcount] optcount += 1 # The firmware options for opt, value in firmware_options.items(): - found = False - for i in range(optcount, len(options)): - if options[i] == opt: - found = True - break + found = False + for i in range(optcount, len(options)): + if options[i] == opt: + found = True + break - if found: - optvalue = value[1]; - filename += "-" + opt; - else: - optvalue = value[2] + if found: + optvalue = value[1]; + filename += "-" + opt; + else: + optvalue = value[2] - if optvalue != None: - command_options[value[0]] = optvalue + if optvalue != None: + command_options[value[0]] = optvalue # The firmware display language language = "" for key in languages: - if key == options[-1]: - language = key + if key == options[-1]: + language = key if not language: - sys.exit("Invalid language") + sys.exit("Invalid language") command_options["TRANSLATIONS"] = language.upper() filename += "-" + language @@ -158,10 +158,10 @@ firmware = "firmware" + ext # Launch CMake cmd = "cmake" for opt, value in command_options.items(): - cmd += " -D%s=%s" % (opt, value) + cmd += " -D%s=%s" % (opt, value) cmd += " " + srcdir if "OPENTX_VERSION_SUFFIX" in os.environ: - cmd += ' -DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"] + cmd += ' -DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"] print cmd os.system(cmd) diff --git a/radio/util/fwoptions.py b/radio/util/fwoptions.py index 24f910a52..8f6c91fe4 100644 --- a/radio/util/fwoptions.py +++ b/radio/util/fwoptions.py @@ -1,308 +1,311 @@ #!/usr/bin/env python languages = ( - "en", - "fr", - "se", - "it", - "cz", - "de", - "pt", - "es", - "pl", - "nl" + "en", + "fr", + "se", + "it", + "cz", + "de", + "pt", + "es", + "pl", + "nl" ) -tts_avr = { - "ttsen": ("TTS", "EN", None), - "ttsfr": ("TTS", "FR", None), - "ttsit": ("TTS", "IT", None), - "ttscz": ("TTS", "CZ", None), - "ttsde": ("TTS", "DE", None), - "ttspt": ("TTS", "PT", None), +tts_languages = { + "en", + "fr", + "it", + "cz", + "de", + "pt" } +tts_avr = { + "tts%s" % language: ("TTS", language.upper(), None) for language in tts_languages + } options_9x_ext = { - "nmea": ("EXT", "NMEA", None), - "frsky": ("EXT", "FRSKY", None), - "telemetrez": ("EXT", "TELEMETREZ", None), - "jeti": ("EXT", "JETI", None), - "ardupilot": ("EXT", "ARDUPILOT", None), - "mavlink": ("EXT", "MAVLINK", None), + "nmea": ("EXT", "NMEA", None), + "frsky": ("EXT", "FRSKY", None), + "telemetrez": ("EXT", "TELEMETREZ", None), + "jeti": ("EXT", "JETI", None), + "ardupilot": ("EXT", "ARDUPILOT", None), + "mavlink": ("EXT", "MAVLINK", None), } options_9x = { - "heli": ("HELI", "YES", "NO"), - "templates": ("TEMPLATES", "YES", "NO"), - "nosplash": ("SPLASH", "NO", "YES"), - "nofp": ("FLIGHT_MODES", "NO", "YES"), - "nocurves": ("CURVES", "NO", "YES"), - "audio": ("AUDIO", "YES", "NO"), - "voice": ("VOICE", "YES", "NO"), - "haptic": ("HAPTIC", "YES", "NO"), - "pwmbl": ("PWM_BACKLIGHT", "YES", "NO"), - "turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"), - "acurStats": ("ACCURAT_THROTTLE_STATS", "YES", "NO"), - "arithOvfl": ("ARITHMETIC_OVERFLOW_CHECK", "YES", "NO"), - # "PXX": ("PXX", "YES", "NO"), - "DSM2": ("DSM2", "PPM ", "NO"), - "potscroll": ("NAVIGATION", "POTS ", "NO"), - "rotenc": ("NAVIGATION", "ROTENC ", "NO"), - "sp22": ("SP22", "YES", "NO"), - "autosource": ("AUTOSOURCE", "YES", "NO"), - "autoswitch": ("AUTOSWITCH", "YES", "NO"), - "dblkeys": ("DBLKEYS", "YES", "NO"), - "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "gvars": ("GVARS", "YES", "NO"), - "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), - "nographics": ("GRAPHICS", "NO", "YES"), - "battgraph": ("BATTGRAPH", "YES", "NO"), - "nobold": ("BOLD", "NO", "YES"), - "sqt5font": ("FONT", "SQT5 ", None), - "thrtrace": ("THR_TRACE", "YES", "NO"), - "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), - "imperial": ("UNITS", "IMPERIAL", "METRIC"), - "nogps": ("GPS", "NO", "YES"), - "nogauges": ("GAUGES", "NO", "YES"), - "novario": ("VARIO", "NO", "YES"), - "nowshh": ("WS_HOW_HIGH", "NO", "YES"), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE ", None), - "fasoffset": ("FAS_OFFSET", "YES", "NO"), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), - "stickrev": ("FRSKY_STICKS", "YES", "NO") + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nosplash": ("SPLASH", "NO", "YES"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "audio": ("AUDIO", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "haptic": ("HAPTIC", "YES", "NO"), + "pwmbl": ("PWM_BACKLIGHT", "YES", "NO"), + "turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"), + "acurStats": ("ACCURAT_THROTTLE_STATS", "YES", "NO"), + "arithOvfl": ("ARITHMETIC_OVERFLOW_CHECK", "YES", "NO"), + # "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "PPM ", "NO"), + "potscroll": ("NAVIGATION", "POTS ", "NO"), + "rotenc": ("NAVIGATION", "ROTENC ", "NO"), + "sp22": ("SP22", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5 ", None), + "thrtrace": ("THR_TRACE", "YES", "NO"), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "nogps": ("GPS", "NO", "YES"), + "nogauges": ("GAUGES", "NO", "YES"), + "novario": ("VARIO", "NO", "YES"), + "nowshh": ("WS_HOW_HIGH", "NO", "YES"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE ", None), + "fasoffset": ("FAS_OFFSET", "YES", "NO"), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "stickrev": ("FRSKY_STICKS", "YES", "NO") } options_9x.update(options_9x_ext) options_9x.update(tts_avr) options_9x128 = { - "heli": ("HELI", "YES", "NO"), - "templates": ("TEMPLATES", "YES", "NO"), - "nosplash": ("SPLASH", "NO", "YES"), - "nofp": ("FLIGHT_MODES", "NO", "YES"), - "nocurves": ("CURVES", "NO", "YES"), - "audio": ("AUDIO", "YES", "NO"), - "voice": ("VOICE", "YES", "NO"), - "haptic": ("HAPTIC", "YES", "NO"), - "pwmbl": ("PWM_BACKLIGHT", "YES", "NO"), - "turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"), - # "PXX": ("PXX", "YES", "NO"), - "DSM2": ("DSM2", "PPM", "NO"), - "potscroll": ("NAVIGATION", "POTS", "NO"), - "rotenc": ("NAVIGATION", "ROTENC", "NO"), - "sp22": ("SP22", "YES", "NO"), - "autosource": ("AUTOSOURCE", "YES", "NO"), - "autoswitch": ("AUTOSWITCH", "YES", "NO"), - "dblkeys": ("DBLKEYS", "YES", "NO"), - "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "gvars": ("GVARS", "YES", "NO"), - "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), - "nographics": ("GRAPHICS", "NO", "YES"), - "battgraph": ("BATTGRAPH", "YES", "NO"), - "nobold": ("BOLD", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "thrtrace": ("THR_TRACE", "YES", "NO"), - "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), - "imperial": ("UNITS", "IMPERIAL", "METRIC"), - "nogps": ("GPS", "NO", "YES"), - "nogauges": ("GAUGES", "NO", "YES"), - "novario": ("VARIO", "NO", "YES"), - "nowshh": ("WS_HOW_HIGH", "NO", "YES"), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nosplash": ("SPLASH", "NO", "YES"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "audio": ("AUDIO", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "haptic": ("HAPTIC", "YES", "NO"), + "pwmbl": ("PWM_BACKLIGHT", "YES", "NO"), + "turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"), + # "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "PPM", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "rotenc": ("NAVIGATION", "ROTENC", "NO"), + "sp22": ("SP22", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "thrtrace": ("THR_TRACE", "YES", "NO"), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "nogps": ("GPS", "NO", "YES"), + "nogauges": ("GAUGES", "NO", "YES"), + "novario": ("VARIO", "NO", "YES"), + "nowshh": ("WS_HOW_HIGH", "NO", "YES"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") } options_9x128.update(options_9x_ext) options_9x128.update(tts_avr) options_gruvin9x = { - "heli": ("HELI", "YES", "NO"), - "templates": ("TEMPLATES", "YES", "NO"), - "nofp": ("FLIGHT_MODES", "NO", "YES"), - "nocurves": ("CURVES", "NO", "YES"), - "sdcard": ("SDCARD", "YES", "NO"), - "voice": ("VOICE", "YES", "NO"), - "PXX": ("PXX", "YES", "NO"), - "DSM2": ("DSM2", "SERIAL", "NO"), - "DSM2PPM": ("DSM2", "PPM", "NO"), - "potscroll": ("NAVIGATION", "POTS", "NO"), - "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "gvars": ("GVARS", "YES", "NO"), - "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), - "autosource": ("AUTOSOURCE", "YES", "NO"), - "autoswitch": ("AUTOSWITCH", "YES", "NO"), - "dblkeys": ("DBLKEYS", "YES", "NO"), - "nographics": ("GRAPHICS", "NO", "YES"), - "battgraph": ("BATTGRAPH", "YES", "NO"), - "nobold": ("BOLD", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), - "imperial": ("UNITS", "IMPERIAL", "METRIC"), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "sdcard": ("SDCARD", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "SERIAL", "NO"), + "DSM2PPM": ("DSM2", "PPM", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") } options_gruvin9x.update(tts_avr) options_mega2560 = { - "heli": ("HELI", "YES", "NO"), - "templates": ("TEMPLATES", "YES", "NO"), - "nofp": ("FLIGHT_MODES", "NO", "YES"), - "nocurves": ("CURVES", "NO", "YES"), - "PWR": ("PWRMANAGE", "YES", "NO"), - "sdcard": ("SDCARD", "YES", "NO"), - "voice": ("VOICE", "YES", "NO"), - "PXX": ("PXX", "YES", "NO"), - "DSM2": ("DSM2", "SERIAL", "NO"), - "DSM2PPM": ("DSM2", "PPM", "NO"), - "ST7565R": ("LCD", "ST7565R", None), - "ERC12864FSF": ("LCD", "ERC12864FSF", None), - "ST7920": ("LCD", "ST7920", None), - "potscroll": ("NAVIGATION", "POTS", "NO"), - "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "gvars": ("GVARS", "YES", "NO"), - "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), - "autosource": ("AUTOSOURCE", "YES", "NO"), - "autoswitch": ("AUTOSWITCH", "YES", "NO"), - "dblkeys": ("DBLKEYS", "YES", "NO"), - "nographics": ("GRAPHICS", "NO", "YES"), - "battgraph": ("BATTGRAPH", "YES", "NO"), - "nobold": ("BOLD", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), - "imperial": ("UNITS", "IMPERIAL", "METRIC"), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "PWR": ("PWRMANAGE", "YES", "NO"), + "sdcard": ("SDCARD", "YES", "NO"), + "voice": ("VOICE", "YES", "NO"), + "PXX": ("PXX", "YES", "NO"), + "DSM2": ("DSM2", "SERIAL", "NO"), + "DSM2PPM": ("DSM2", "PPM", "NO"), + "ST7565R": ("LCD", "ST7565R", None), + "ERC12864FSF": ("LCD", "ERC12864FSF", None), + "ST7920": ("LCD", "ST7920", None), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") } options_mega2560.update(tts_avr) options_sky9x = { - "heli": ("HELI", "YES", "NO"), - "templates": ("TEMPLATES", "YES", "NO"), - "nofp": ("FLIGHT_MODES", "NO", "YES"), - "nocurves": ("CURVES", "NO", "YES"), - "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "gvars": ("GVARS", "YES", "NO"), - "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), - "potscroll": ("NAVIGATION", "POTS", "NO"), - "autosource": ("AUTOSOURCE", "YES", "NO"), - "autoswitch": ("AUTOSWITCH", "YES", "NO"), - "dblkeys": ("DBLKEYS", "YES", "NO"), - "nographics": ("GRAPHICS", "NO", "YES"), - "battgraph": ("BATTGRAPH", "YES", "NO"), - "nobold": ("BOLD", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "imperial": ("UNITS", "IMPERIAL", "METRIC"), - "bluetooth": ("BLUETOOTH", "YES", "NO"), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "bluetooth": ("BLUETOOTH", "YES", "NO"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES") } options_ar9x = { - "heli": ("HELI", "YES", "NO"), - "templates": ("TEMPLATES", "YES", "NO"), - "nofp": ("FLIGHT_MODES", "NO", "YES"), - "nocurves": ("CURVES", "NO", "YES"), - "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "gvars": ("GVARS", "YES", "NO"), - "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), - "potscroll": ("NAVIGATION", "POTS", "NO"), - "autosource": ("AUTOSOURCE", "YES", "NO"), - "autoswitch": ("AUTOSWITCH", "YES", "NO"), - "dblkeys": ("DBLKEYS", "YES", "NO"), - "nographics": ("GRAPHICS", "NO", "YES"), - "battgraph": ("BATTGRAPH", "YES", "NO"), - "nobold": ("BOLD", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "imperial": ("UNITS", "IMPERIAL", "METRIC"), - "bluetooth": ("BLUETOOTH", "YES", "NO"), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), - # "rtc": ("RTCLOCK", "YES", "NO"), - # "volume": ("HARDWARE_VOLUME", "YES", "NO") # Renove HARDWARE_VOLUME=NO in the commandline below when activating! + "heli": ("HELI", "YES", "NO"), + "templates": ("TEMPLATES", "YES", "NO"), + "nofp": ("FLIGHT_MODES", "NO", "YES"), + "nocurves": ("CURVES", "NO", "YES"), + "ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "gvars": ("GVARS", "YES", "NO"), + "symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"), + "potscroll": ("NAVIGATION", "POTS", "NO"), + "autosource": ("AUTOSOURCE", "YES", "NO"), + "autoswitch": ("AUTOSWITCH", "YES", "NO"), + "dblkeys": ("DBLKEYS", "YES", "NO"), + "nographics": ("GRAPHICS", "NO", "YES"), + "battgraph": ("BATTGRAPH", "YES", "NO"), + "nobold": ("BOLD", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "imperial": ("UNITS", "IMPERIAL", "METRIC"), + "bluetooth": ("BLUETOOTH", "YES", "NO"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + # "rtc": ("RTCLOCK", "YES", "NO"), + # "volume": ("HARDWARE_VOLUME", "YES", "NO") # Renove HARDWARE_VOLUME=NO in the commandline below when activating! } options_taranis = { - "noheli": ("HELI", "NO", "YES"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), - "haptic": ("HAPTIC", "YES", "NO"), - "nogvars": ("GVARS", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), - "massstorage": ("USB", "MASSSTORAGE", None), - "cli": ("USB", "SERIAL", None), - "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), - "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), - "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), - "timer3": ("TIMERS", "3", "2"), - "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "haptic": ("HAPTIC", "YES", "NO"), + "nogvars": ("GVARS", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), + "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), + "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), + "timer3": ("TIMERS", "3", "2"), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") } options_taranisplus = { - "noheli": ("HELI", "NO", "YES"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), - "SWR": ("SWR", "YES", "NO"), - "nogvars": ("GVARS", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), - "massstorage": ("USB", "MASSSTORAGE", None), - "cli": ("USB", "SERIAL", None), - "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), - "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), - "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), - "timer3": ("TIMERS", "3", None), - "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "SWR": ("SWR", "YES", "NO"), + "nogvars": ("GVARS", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), + "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), + "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), + "timer3": ("TIMERS", "3", None), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") } options_taranisx9e = { - "noheli": ("HELI", "NO", "YES"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), - "SWR": ("SWR", "YES", "NO"), - "nogvars": ("GVARS", "NO", "YES"), - "sqt5font": ("FONT", "SQT5", None), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), - "massstorage": ("USB", "MASSSTORAGE", None), - "cli": ("USB", "SERIAL", None), - "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), - "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), - "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), - "timer3": ("TIMERS", "3", None), - "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), - "horussticks": ("STICKS", "HORUS", "STANDARD") + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "SWR": ("SWR", "YES", "NO"), + "nogvars": ("GVARS", "NO", "YES"), + "sqt5font": ("FONT", "SQT5", None), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "mixersmon": ("MIXERS_MONITOR", "YES", "NO"), + "internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"), + "shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"), + "timer3": ("TIMERS", "3", None), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"), + "horussticks": ("STICKS", "HORUS", "STANDARD") } options_horus = { - "noheli": ("HELI", "NO", "YES"), - "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), - "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), - "nogvars": ("GVARS", "NO", "YES"), - "faimode": ("FAI", "YES", None), - "faichoice": ("FAI", "CHOICE", None), - "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), - "massstorage": ("USB", "MASSSTORAGE", None), - "cli": ("USB", "SERIAL", None), - "timer3": ("TIMERS", "3", "2"), - "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") + "noheli": ("HELI", "NO", "YES"), + "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), + "lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"), + "nogvars": ("GVARS", "NO", "YES"), + "faimode": ("FAI", "YES", None), + "faichoice": ("FAI", "CHOICE", None), + "nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"), + "massstorage": ("USB", "MASSSTORAGE", None), + "cli": ("USB", "SERIAL", None), + "timer3": ("TIMERS", "3", "2"), + "eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO") } From b4bf833667cbedcb9b19e704802643d7ab727288 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 21:45:48 +0100 Subject: [PATCH 25/98] Compilation fix on older CMake versions --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cefa43c8d..79ea8adaa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,9 @@ message(STATUS "OpenTX ${VERSION}") cmake_minimum_required(VERSION 2.8) cmake_policy(SET CMP0020 NEW) cmake_policy(SET CMP0023 OLD) -cmake_policy(SET CMP0043 NEW) +if(POLICY CMP0043) + cmake_policy(SET CMP0043 NEW) +endif() set(CMAKE_CXX_STANDARD 11) From 497f699331322dc73a05e656273f852f6e0457fb Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 21:52:49 +0100 Subject: [PATCH 26/98] gtests enabled for Horus --- radio/util/commit-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/util/commit-tests.sh b/radio/util/commit-tests.sh index cf3599151..67b3c75df 100755 --- a/radio/util/commit-tests.sh +++ b/radio/util/commit-tests.sh @@ -84,4 +84,4 @@ rm -rf * cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=NO -DUSB=SERIAL -DCLI=YES -DDEBUG=YES ${SRCDIR} make -j2 firmware make -j2 simu -#make -j2 gtests ; ./gtests +make -j2 gtests ; ./gtests From c1cd54ee6aeab9e3c5fc782f065d6bf44b15bb51 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 22:11:08 +0100 Subject: [PATCH 27/98] [Horus] Missing font --- radio/src/fonts/horus/font_stdsizebold.png | Bin 0 -> 17277 bytes radio/src/fonts/horus/font_stdsizebold.specs | 1 + 2 files changed, 1 insertion(+) create mode 100644 radio/src/fonts/horus/font_stdsizebold.png create mode 100644 radio/src/fonts/horus/font_stdsizebold.specs diff --git a/radio/src/fonts/horus/font_stdsizebold.png b/radio/src/fonts/horus/font_stdsizebold.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e1ee817330dfbb472435d99db1ba1c0ec34bc4 GIT binary patch literal 17277 zcmYj(2Q=3G`@g-jclIc5vQze+$==y3BxFX2Y>|1JWo0Lutn59?i0mzdkdp0xdA{d& z&i_8=>B-4``+VM?>wR6X^%kkAu5<&B77qml<%Wu~yfz97#xM9gDGnO^X^n}6g#V$t z%c|(&;NZ+IYb?Q+xUR}Z?kFgPUDyAiBDn}}qM$ILsL0FcK7YIG?=4Nui7K zeR#Hdae6uVxx>LqGG?Q^Y5Mv#pZ3pZ)|Deak7n3jQ80Zp+D_>Ge}BCk*EBXhUFm-9 zJl}Y6n9|~ZRwvK0?ABnylhV8TOsZ{R!AwIV)+n)anQ0@P-#RQjymu%~@alx{>YvQ6 z`Fzm-ea`=Vo=B|#8T<^VwyLazaR#t|@ zWlFpdy??*rOH5Q$f@*%%Q(++?8#}w1sj1Y|RE~x}P2PJ1H*QRPlMF&gKHqPfpEvCu zprD|@!opHT)I6O%n)qN)Dr;&w4_ETy#S80xs=}(IvC>lRM~@yod^pVOe`meu<46Cq zqdVc9LE)yly1F_#ti(7&LqnIf^iTe`Z0GlucV|B#k;vokJw1vK9z1X!o|`kNG$d&C z5zl=8e$~9WMw5d87uV&+YO&Chcl*z z_Qo0r zK4he%ZWpJXcB{U=zVHUe(cDm7#C(f?Q$s_;n>XtI{{C)m0@X9Y*hKOyqoePYjObfj zmph20&iDUpjh~+S!mTFXc|>?q*lBmBwv@v0>hfZH@*@`q$H?R)AtB+L=x8A!AtyJX z5ZRp8)~h&Xxq!=)$AsbIHW!lqr%B1lzR#~;9>3;9n3w|Z9vc}M$>tDWX{(Npk9S)g z6luLz&yt*P@^<0a;G>T=C^x%U>nD>{*40g_tMgJ*8#-9+-55$6uYUZM-@0dNdiv=? zbDB@g=H@0;9s7f1dwcuyKjRuEJl>O~Mx}4`_4Ky3w+jmjy!IB}d2XH@Zn$>C)qlyj z$IHZoLbN+wz0u3~@_aqT-1lgQ^Ti>QReXH>!NI}a!e>D~KG$c@(gYu?_r9S|^Q<^j zp1ZA<>Uw^BfQpV~(%=?KT=nF8*>v^ejI^}%A3uKn{3-Bt9*VtKr;wD4%$D~;ftm6( zykn%yv`O!SzKn{s^(xfPmrRLAhKBYwHbSmTZK3#7RxS!GqfmT%^G*Num*tK%)BZic z>F?{ShgFAlcpVk>b9?*a$B)npmAjwP?CSm!u_ch%x^Xt(j@9VaKJt*tHW zpf6v(j2Apamx}98ydA98COepX$NSe@q<1CUT6A=DR1_XPJ-va!cett3<72*UDspnC z*}6OI?D>t2Gd(?aL#h0$y|D)Ca;M?Xe$6%DQ}KxVpVpL=40LpKeErHRBt*`D&1?fd zLdEQWm$~)=zTo|_JZrl{Mv9TeRmEP-1*AF;ZPjTP)((XbS{=Tft*~)4RZe?l7 z!ic7^q~zyFj@$Diuzj;1QD4a!Vl*V@X-1w(JUYjDBmp_IxBwifNHTzT-6)DTfb@umjLKVRxaWqw9CHAh;(9%LB z`gcW;9RJ{O93CCzXJWFLtAEDfT5Y^~cv4VM0NbBd)Pp1O4mlN-lDz!+K`$fpna0LO zJ3BiD28N)ZAk!u<_9&@Gfwi@s^70{b2jcEOhT!SpGIxgExOvZcuF7`MtogYN&UA&P zT!!$|)EI8VitOy{Kw|g@%14i8AEfZmOZuhWJ%%kU2i3uBb9sJJpXYx#d=Ewn9pMHn zI9d?Xojbd*HM-0!&u*)~z5n8fo4IRt_QjXCA|b?;hSxt6YNP(TgH-$;KyqbCyimlU zk@P!;73V@A3e?|~Y#xbu|7!L-`5hNWTtE>2_U+sUgYvEM!Y5CjxXjkY7%k4tHP_cu z2W)R|%V86T6EU`UY$dd`TpsPt8f_<$u5E0*@bP)pFn9KE55DDt+rZ}NdyRLZ3ON1! z{SNbuwNX^sgfCxS!R?U9UY;LnaB*=>Xo&m%+00dVz0mrS=%t?2=l-U+M?reWJ~8JS zIra7TZ{H3l9&7Y`68AmhU@vfIX9xBllr^_;O@t@M?c0yLqbOkgjVmnLTk~9A^5*8| z!mU4p{qpFO^U3jXNLU!`P2jdkC?UD~4J`@*EOia*FQ|~_)XNbKWul()XH)ycXZB|xS+mEK; zf*2%xou;e0M@INKIUS}dEMZ{u^z;N{-S|0{|5}q{sIPBiVq*T23uAaE|Gj%J_m_ei z8cy1R&~M(n=`vRzM1OpFw%2-b^yoN-yBxOP(a!WIm&Juf&+S;L%lnVNyv4+)gm%Zy z!m{$^omlJn?+36TIX~brQE?mc*$$AKn=hW9pECv=w}1JH2+A*4zRLWwDkxbltElRD%eiUFBRp}dO@kCru5JZE# zX3ZS`b^(9bEF?)YS?C=f&AKcX!Q7dnv^eL?hv`%02(8e4XNteM3(DtFjeUEGpx4e+ z>uTEha79gx&EN5_Ux^6ciFvD=ngXzak9ILIFlhBV5jgCEZCPO6`Bmy_$kAuI%GOP3 zY;=^woLU;zqqw-(>7lu~Is2~RqeqMN&))YB4yW?J?|&Z%_1*sl%L2ZCNU@`{^Pn^# zfs{i?KtNkJT#w_?#!`E*2@e%*!^^9dx#}bWmlPh;3KN!i7{ALo!x{Ig5iZkJm|UH+ zgc8_qMLku^D$AgqL)#h%pZW6T&EH~#<436KmzO7nzb9dXj*g6=cxFoaBff87GiK#} zrCeHB$+Z{n?Ci`TW;lStTiW}*KA3h7OaNJboyw?a1gTbI9h_*5`l=+MD9f_nE$VczBTGg=!u{ znakw>Sn^YKS!~gBI|GbUkOVuNfvh)Kq~j^rlLI+Xr?;K1gQK0Yme1)HbiZTW`}H>s(q z$;rFY+mo{YzcyqEc!>`UAnm2WzkHgj@Qtrot4SP9QTYW0q_T=JwE3HVGVZzjx(sAh zdZWxn%JC8=PT^5rP7bP649wJd0=|t$3Pm42=(yF?)Oc);l zp?<%Yo0pfCLRpG?Y-)xR(!UB01|V!J=6LM$xA zCgYsU0uTp~FI&*e%w7SYlEdv8@Xh+Xi00=dh{DLWmoWp#A zQTp*CIvQHKNj22c^6u_ui}qJVMMdf9=}=@whK6eCLR;_#%^<%a?NHgAurRFi7O&m( z;$jD5W7_;bhsE4Q#4VSnPgEV$)Cf)tn<*pZtL*q0V!f9;FpG#OC=_sl+R-w4x+2Mz zM?!GPgznx2l+O9@%c#4>@%}PEM0oz#gme)xF}8ZvTGQpNm+8b-k01Az3ckGblZ~jX zlqY>0dyDjX<0LmXE&q6ma3Ix&`=D zztr&A)>uB&gZaw~iirg-gEAZ8-=}|{1W5-{iZti~o$??--}lr~#mC1FvZ1A>hVHu! zi|OFt0I*D&rO|N$@govGJ{aqn6AWTPcBq}Ak`hs`9qRMlsY+Ha^tYS!Ce8rAp>Q=L zuJQ8a3R(Z);Oodptx7k2{Yl_p&rsuD6Vi*8nluQov#-z8KC!9vDA|e9F0n9|8 z7!8z^l;%kTzvi2$ey{`lhI>PZJ{a9cgMUI_hpqQGc~IMkmG%9=fNIfDZWS!8!rftb z@GsAHKLL=ddGei56^aa%oAA-$@874;s5gc)!tIEE?Bq4q!Zhs6=y!bD5rX@C5_m~Y zaiw*yY(MO+>$gKi!lJ+^^Z7B9riuEeR;NI%-6f`Xby){%JsY7b%*#uZ8CqL=caGa) zIQ_2Xjla<_0cmMzLx_R6a`X=mcgrZQqYVwMt@evZNilLK0x09<)nJLw#{CBntrS}V zK<|Bw9l*$V^lET1*q#V3u0lV8w*`IJ%M40k4avb)-Tr?J@R$(8>HV1)^f!K8j3#*G^{&VTzxTZLuk8#<8=gbDPaj!^uAYmDRRS)1?(tDNk3cWv#@ z&U7`DwWx@Q!;>f8KfkF&Do5%jf897d@l$mO2xuuNxHThdxg0zIOIclA{h_4fRVz2* z0p|^vLY{}P6+_}+{tA|_udUSpXKQY5hI#+U*!T^j)Fo7&s`F2%gQKG(sM~=(3Alez zQQwIYJph_jRaK(Cf9&=2;L8t74Vpf>l#BVmQNzQ-c?~N91F(=t)%@lEUaLJZtRV!n zLLB1abkX6UbPy2{y*%2X$sAlg2+SM?UI|qO^jmqGm6a8j8Maq`QbAr`9MOQ&{*hU= zT}-YR06$a@x3)l3RjddVTeyw3-0oA^rN)rB%}sl{3+TksIiEjEkh)N|5F=}WZF_ih zwOZ_gY6MgoJtyj;?t4}k(9$4rNOU>o05 zRbkbQH;KcA?W^?I#zwk7TP8RgBguy}5<|JRx>`_|1A%yjr|jIWl1V&v&GmgQ&l^&% zUsQ3TljcTADJgripUPo7(h*`iAxlscJ3Bh8MspPaL&rTTtgEAZxtehV^h8q?K*eJ+ zvP2*Wg@uKHXyJXaJ}mdOU_=tp-6#I?is%OOARQkailisXz#Ke-QXd*MzpCA&q@-+R zM;8~O$HmI$YYh2GxxEfRW?UblMabvw>^LdJoGT!jo_yz7QU_M1wum~hhck(F{%UDk zno->d@c`%KSJPg$!0Q3D7tA3{3VBJ%NMz0c?l+Dqdh~K*S)ABjIp=YkCjg)0XK8=- zRph~J3W=k5+gZs0B&8bKY2cRK9H2iZy9Gq+clwtas6HpBHC2oa8Ge{WM31nARl6bn_ zKXwC{_b>)7dk*Ra8{W%*+JxYS`i@qV^-ZySJ&YuP;^VWecE4BywV{KT!(-#P`m($G>mr zGrul=MbS4n_~GT%C7(kDqSUw+PaVp;z5dxMD1`uKKf?r2-2#$sVrmMUAGDMG^Aq>U z^-QUkJf9K+K{wM#w6p8e?N?3w?PISSo;7 zSF3;kNwfK(p;8#=iMKVvZd1_G;$?b-5GyGu*`uz_z_#r)PcpB>aFTgc=M>bc7MoB} z!3XUVXxyu}^o)!|o+~RW*&V=-KQ}i|etd-e^3&5fh?~5 zE@wWB-$2qIA3%fn31n`28~=%>fwX1_4jfa8uiPP8)asn@iHY5RYpsd zd}#Z1ZH}@yX&`EXdIcmY=@XwtTVUPO*<7tRp+GM@cW00y*jSjD^b)?h9OPl4q0lHb zvLr8{vAGsOt7&OzAt52ryn;RlJg$DEtG8E7RMgnW2njnnIayRp48EIQs6@Ni1Liw7 zEl6@)TsJ|_S}M#6u=+bPHz&@;h5z8spFd0EX7#R?8L_B#%OD{G{465SP1Z(`M(Tew zo&a7Cln0T17(dVJdCHhni{}7=$^+(oH|UYaiP32wld-hRWXuI zFj@?;CDx@|WH@rGxU=7eUw%f3lutk+G0lEM15q;_geio34V#EL9*}EJ!>j-~3E0wE zhD!@40?~m78!&|U&Yh3-_4R<$u`x047*$~ycu=q zJoX$}FE8OFkL}4Dsv}}rIyz+Br1t$;0=7{*<{`>#QIV0jcz9@MM9kM+Pbn6s=Yf8*xMN_56U!RcIpJ;>DYO0l_b=QXgpo9Hvc1v8MaJPk?kqJM zLeLVhKbpldNMvLDRa(kG4Q7De;Eo^kLeQ(UCN2X5nA*V-=-1cfNXskf#PTiWKf=f7X399t6~ zsH)r72UFxupxtof1Ii2PX}9tLiT%`ao|&=tKFU7vrT}QE9g%XEpI28@9N6S z%ab2vvIxT|@KxqP<|mz=odM*abjV@UnFhxsmR`*3^v@PI?h>$Xko~d~jtQiX=~4#o z^7FU*WP`;pBA53Vbfpkf4GoQ&ZJ73bJ=?j_FIKv6?HU>zMMcAwgq|P%cu26Xc-srM zQYkStb)O?+sCYw)bcRSxpm+PgT4cah)=vu)ZEdulqyX6dj95-6b<=STV-%f{KwY(I zr|+=k{{gyEl_mgg&Fbo^k-z5eW?e>}wVO|8YJ%M3$Eay&mUFQXb`59m0w2?*%f(e% z;Kn^7*gzM=%CE`G!}!7Dp?Z4wRVwF8sZn({nqT#%9(I5s@WrlWJVL@-A+8N`Yinyi ze>zedM#zTa+5c3MG||rj4uc54Q$@{l--` zDzGg}5pkg~y=41x@4Zvg11d^13a-@JJPeC)2DBy@9E zcXw;IzVmaxAn7&_Hy^kW0F#(#sK*T7Cni8Y9G#zkM{#UzVS)0a=$^}h_!;#+4RDv0 z!DwAdm|TZupM5>|7Ubl0Xry*&|16kK;$-R^x#~}?&ttP@D@9} zmMQ=UcuD6lAyo}Z4cphr=kf zi7L%h3+z8-@acS`r-K7$sw1yyqdX^4nXM`+4Jf$&`9^y%_A>Et^bJNyle$h~LUqZ> z19TG;6C7sfKS^UTH}BB`e1rK29{@-eXbM0A`wQ!p2b$AJE(20o&CZxGs&5I}s!DI@ za6>_{ym@G%SL9@A$^3j_8{C(P7jZ3g>LB}L<)Q&P7zdz%g8`VXV z3;Mny3JgTAzdt9`20n5isM~7h^bHIcr2^rIg~i2@ z?X!U?yygQ~iGKg)yaRzTA9jc?NMBgD_qr5nnMNZO#C1%hE}VjC5uD=aEXD=_rYw24yL0toWx z{2K*ZjkotvWhdT>xNr9AQjXz}$R7JiK56OB(}dnXGzqgT`R!ZKVr+FCa^_BGK7yiM z3WWs%(|&GaQxoeJnv~%!IyyT2aCeKt7?6s)K|L^uU|L$p9%XN!)Pq(2>i122Oi@o>|+=isG+Qk9+vRYIvGQm z5@GM z8_dp;uMfE?J4qFBPEIzm4i67U6C?Uu1#jNW05<}B5|RZTm_~6jQjr4yn9<&kkB*|6 zM$Vlo+nSn~fO{Ugpb-)WIt@4qjMb?qBu}dnhj7jT6#-Tv9M_wgo$ahyTszcWkF;O~ z1q!s6=r?b$ys=DvUBkOi=RjWHiOpqa^88;G!26Y*l!OF5g^i`9CFtGo%J#A(F_@2uonZzCI zZfX7W9Qk15@%`WnJYLV;HDDuU_mlSU5K^Z1lVt341bGysI@rM)nd1Grf+}pJH5h1M zA0#9s2s=$JZES=`iXZ!3&NaAGyv$D0#&c#;GZo%91fNYWR}HzZx2{X+Q<|7K4rX*yfg#lWTZZ7Xk8XdPYX4 z3-GEWXRt-OxK&jUzb)fIB;xrV_dYfUC5$w737gU=lMBtn`~k*9+X*5aNQ^4=mC% zDtvab2&qZ@bR@ESpkiRz6^nqnO+dT5w-@>%tEgyWS=le>G~nC=AV?Z>X*t1ap@T=u z_Zl^s#}x15N3+kgXmiY$lvTzgVU=%izoidKI;B3o!_Cc+592$VySGLoDW^N~_3QB~ zlo2&>m#iamcW7aX+4`1LsBNg#fblalM9`}3=a8xuzX>xF?P}Bi|Rq z!r%eWs!KD2`JunUQ({oOmhUCDIOX(E`%Tka=>4)FP62cATG->rH+-ojUsqde3S;e5 zSP+!pltSt%9foV?#|bp_Yqj!>R>+<>$v{spXfYJbUT`ATC3$b;x{7v$$-j-ll3 zvxo4dXxI?Kiox){PbexXYIsAIDO+=Not$6P!zrwLr(DyhVP2Z*A@`N6ZgTHx|FBuM zC=yeS#is3c2rvV{)T5)L*?nt=C%on@HrhsX7%;;dDTj*w%dH@2uo+^*pD9hH!?4Po zWD*OVyLLF*b!#G#k} zvT>n0!7@NETPQbg1$HVY=B9%MJDsn3Dfb*fl}Z)Gp&5$?BoS3h1uZDhcEdp4cJcEI z5X44_LyobFxbubB+1bU#{UG%K8%kkT?0y^T2N}g6a;vdCm85vvk?Cn8eVw?pG+d=L zmC>Eu-5lacf2SNsoQyJ}Y}W%0u8Z`Qn{<3rsjwL+$EnbH>vcv>6^cuuo(u&7e`va` zEs#REAYwo^p>J$V`}jk7IT6D>5RU^%4YM?ZGBN~fKY(HjNbvq!_-y4LM3TYa zkah|=l~OC%RiUsX{tgasjqazY^3bghPKhI zSbxCDwzl~olj`gjFjgD!nWKNlEGUWS)mD8xoQ}z?{;+B~DT(|o^~;lWDx=OF=xwPg zpr$}vV%4qT$z-Xeq`Zd4S8#54jBAR(LF9Nn(5)eLu?Fsh-EewI2||+%H?#v#Q?28K zYT1ef*tBgZ;Lf;MTB7p0g31Vbo3C%<$B(gvJ>5G-~A z8BS9(4rDHt#9P`%FtxxB{zP~pjrp;()XmM!@yQc#9cHQ@Yq+}~g1i+M7pL`JQRYp; zYbsu#-DI9#U~j<=+&_g5^>=IhHa9l`GBSi15+xPFK+~;$TC+=Qv;m8S-hc1jCwL~H z)v&X%dF(CBkB{p(zhcX!MXn2!V~`3Cnu7>1UVw>>9lZYxBp(QCD33n-`K=iK;&BB= z5v(yJf#kDPRDmEF7`>oAK0Y3LCq^|V0BvDzYN{Tp9u#u$SX*F2fUX6(F_2YyR89bo zg%HD9Lci_m>4EIa1GWUX573V~7_j2bjY&9I3k6Y*2*ZpXDJfz9afR;P8L*PLdhk4* z5k)F(413UogI{+d~_i1nj+ptpqTSSzb9KBs#ZG?&;anR~hQ>m3t*LQd6DJbs3c7*Sa zVUVB|{=^iLO-9l~TxL|=v$!Y)E4%p&Krq*Zn~e>dQ)B2)v$h(CaR#Y?(t?6(-4bF7 z9AaWk3a=?4s6#A*W!T_mD=&{>$hj;RT3AqAjEhGYBt3FHG%n82r|mAf`Kco1fuNOM z^r9>sW#hPg{*_Y;sQP*DJ_1~vihn(ToB1!IN!f1QY6-YVCtlgvd7GMg?RZ*yVNcU{ z;xIo*=H}$!cz$&$p&SB~sA!-)r2*JuMMXvb13?!?*0{7;ZW392AQHnUv;;^xHiwZLGSv^H~35p zkeuV>CD(pEE_1061Jf`L1{z>4;B*iyz<+Gu^s%HQs`epaU5~FT-ymw!gNF}ocSrdA zj`zW%`LVtZQj-Tn2lkI{-MUqEw5@|SB;I~5x_?h+Q-0DLt^ghu+Cw0398cVR(9zMK zzXCWE=G_Fn58TOp63AiQV`fHm6!Jb}LoF^QZ1)g`lO2OYE|6k%$%Zy?fpe z!?CKQ))sp;T&My9(Q{v4xS=R{7QLTWF{$^TSpj!|^=JTK2^pV2F$(68H05C8R|jH! zq|A({0VThF{i-^9yBr{^R%pbgj^eZoCJd`2imZclY-#h==2ia?&6o3G4Bw$#rJA`& zQ<3aWsH+}}8|(HEp<>3EjsUqG2W#`o@Xz2}b*twj?tG(cU(y>XB(A&XD`bX}h6a(Y z7KC!Z<46~BNN8$m`tX745MP_5qEwKCloTzo6Kp5*=I0Pmp_lE;Q%Ouc^9r;})J_L% zl9ZHJRz~P^4~o_`MZVxDk$4PX^Pf#{1LX~Fb%C)d%`gRH7$iYvJypQ+Ji~zi3qk3z zv#|kE4mxL!^2z2XYoAXw)M5UE6i8oP|17YB7yS+&UhAQtBb|al2}l;kG(R67_{~>f z{DH{~c3++IJl@S`&+gMb#B4LbR16+m@Aw1|yI_-C??}mVSa_%vl-c)+F{0kT-Xqr9Ee0xC^n*k0Ok$U4LXq^BMTdb8RR*D(mk25 zUIy6~gt#wX)Ir7t8S5yr9=ylx@8#>iRE$6s@%Fwv_i=G?nR>7eEF8ovh^XS>;u^L1 z`B+)8aCJ-UG|AzBHXha9E8Y9t$oV&{*W<^Jq3cwLb2Z@0;$(eIxfn6r1iuydEyy_# zJZ-~QG&g?;csVcTXcr98`8yHMP>B zqW%5-w*58@ti&bIO;eJRD!v_7Iij$C>=zwJKRdnnx5$j82ngC4!(CgO^n~~fuTIJJ zkui);W;Pa&S4(&0H%7IKVZ$b|T0A)jdAFJ9l z^(uf7^dNjj+zu&o34nJJvS%N&MZe`K!orI6lQuGh9_89 z3Ce6R6`437DJCQ0l*vYpC$l$r`hfEx>>PajPR=QaD1tS^^>sYdbuG7MQc6r z?HfdvAo>wBJq4x_6fC^-=8VxX{f+FOJX!sYc!H6rny*Yfa+f@`5Ndzm^IH>ZTIasv zj~{Q8-FV5rOXd|!ae%KQJcu~ESK#0AvxNHTg6+VF4Guyxb(Wug@q6-@=E!KD)8xMuV;)ED4 zawA*jTZtzH{U5(JVw7Nw_(s1HE6sT5MT(8*@59l_i)FTVD=P(|A@76u0Y6VcUS2Ij z_{PWhr3fV&5pKf-l(H|IT9HYCX?^5*G9b<{y`>`zr!X@FT!+62)E(B-i2`8!`sOB1 zu5gb&6R@bSNm%Qmn?b8NAa6P~^e?*_hGoyp7!w;?SUdj60oN|MFFrZh3!ETuNCkCh zmS+by4$uB2Acah1h@1aye*OaD zPVg?``tM+dPR=<4D6|H9;?X6)G#}TUJ9mYILIy055^ie|(o9RP_futMc}5Uo5J-jA z)Zp2No$UQ%h{oUl0tz(%q$W_$Qd99t>0x()1uvuW0^lDAu0zAa;3aGtwxhYbD5w@| za?lCbL_p7VLP^m@z`tl0L&Cc-j>{6vX41&6T2nCw=3qbnE$pBiaKO0nq$NAs?+Xdl zfWHQyOD9tzP5bB45=#GjW@nkn&t8x&0wm?^pLbo5}*e}~?ox3~iS?&+^=X}0->q9%3!qM5WZWbPb400mw$^Faz!Hxm)CIGTj}>KP zHKGCcHj1ABthvP&fE2Wjejr&_`{3zQPn+xMg{t`S)2VmYXjoO==izY%C{o1g?cov9 z-s-()mTe_1t_WeztSrW=ULMm%X*KcfH`nG5m$m9)l%|eO@WReeZ;+i&G=&l>y;CZ1 zwmzw}Wp-jQ860p?W@{YCN*@!y#ynt{`T`=_1;DqxnOc0ha1?5vj#A1&lpXDHwlgcQ z)mfKTaP(?*5g&_+P&USRm25fl!6Z@?9`w-CId~H|cmZP90_e4plKZq=a2|rhL5*71 z3&^#m6&yFXc@v*CkSrZU1cWgcXYRzi_40@k)SZuWcWm}+Q7!r;ZjmsBKq$Sc z=(&mtuD!*HUx1xmfij!ys7b&6Bh{i(LvF=IN}w21v8bbaszuyRtRbZ+`}xJ(Jd71n zD*4(TPL^8JAg8|WwyHFYCgTj@!wr?)uUdA!U#O84W(P4Q898GEgK*R=&4i?+kkjX> zp8;UK$l)HMzHp#@0_;`}eEy(@!t~qejw4vMnQvRBR zI3SU8{Gau5r+27zoP%?*B4^mY|Q6Z8TI39F6xG1=& zyj-cAMc>$X;+iu-MSVzEQ=#N5QDeZbcUzBwpot)T0SibfpeL=m-ltxW#o3y!zAa8j zJgB!;30(aK9-izT3MF#)I^L#9Ecp8YN!+l&suUdBV3hFfD!oPd8aR31z$YqN+7dRk zSZ%;oCV4Nxoxes-xj6A4L0zAifp$YYQvp)eRIDZm1kz*lYxY{s2yJp82MY=D=4Nq% zv@L-0Tz9yr6OlD0`ubsKnD;^AIX$g&S(FqOrmVqA4KkuswguS2|A_}bLl3Ohj(hoS)h$qmmb)~DaZmnf zPeZzuA+~o+SxXgCU3|Uo!MNa-1+_H4A8uWNm!?mHn}`mhXu?u^{QGy<-SSx+3h$Zk z=~LGAqL^~x6+;*{v=wI1h$H}Ih#luFN6=tir&@P(AznMliemc=R5>XrDZdp6<#&pL z%SWm^(ZCt$iC{{6dt@I0%LCie5^3kcGu6;BySyMIFXkc@_= zI?Uuo8&G}P&?hw-h!VlY$G2usSbScu!@diohG=z~T+cex8)0c)>dYshe#L{pH)E*s zbbVsPlk&R6n_^G-SDp4lZ6l#-;{TFFOXe8Rg5+d$%?M$v5avf!xB5MGoCR_bL8u@d$=gr~dQ z=3e2Wo?zlK!&w6KBslIxO>iFuYLqq^S56glo5UC9D1G%GLI$)|A%_Z1Y#K=+Y&^iZ z!4_Ss2iM7y<>jDB3Q8m(G9i9`nMa?Ci#bc^wN7MlDr;+>ju*s0p1bTawg38n*TMn= znrk+OyG`~-Gjnq(2#Y};(_+r9g)|Bjus>jB4dwhecz*md02h$~lmdcPV80)~?ssVw zLgo`FQ3HdfqN1v~XJtpOmuZlwAy0w~eZ(gyczATgAmYXrHvGQ%a-|zzEd&+CF(enk zj4^4|%#t_|)ooSqHE)j2sXmeMWT_)?_F*ECWk1gT-n#33xJfR^-s)83=jZQyACAUu z_y2-Q&Dh&<+m`Q5Y^=8?0gko)E9m8VWt6p#T-nOQ`~cezYSF#o;^DN?Oe|x zO`DdIGHlusMzrO_X|Tp6(Ffd#nLts808u2tE=;;oiBBk6T3V&U`G9-Dur^AQApr-Y zwyLV*pOm0rHE0R&z#vI!oj?ouH}Fhx3KS^xtgWpJ)!(&wFu#TaZSchqiXXVx;20O{ zLO`S6WAVk|kC-=a2)U$k!2<+-&I8#%GBS673~;CluKRC_c|c@TlqgVh;97x-vbMKx z7vhrL3S_|8n7uw;2*<6!5>^nB^HuE! z10B_N(lGbZxy!*7UM(XFtEC<+ReB>lhMPCfAo3z6CKfE9VQ$_ENE77a1kV}{Ztid6 z z8^zj)*L5V5x`P<62ReQa4Xj~68mY}QiFjpmGs5NO#h~uw;$qfToE*+|mweL75@Le5 zNkbEv&0h;53o42X5o(>e@4#U zpr?PwEEmQxqk$|@wB_$piVXe*&vdB~Qg#JZysEaG!L-bvQ>(HiK(CTXK%+Y>Z#l(7 zdY2I0%GX68FX2&dy5ZV?FQXriRCj(-S@;q*v$wFFt}L>MuP_bMui`Xww#r>q)|JdRPN6=t<0mICDb-ih2^sxylcIO5Ey z8VKgq&8b>4=ofl+h3=3AG0xD&(KqyBz~ZR_s*85uEE-?#7zm6f2yIn}N%Ta2{x&w& z;c?0mZx3oW^$bAZ#r}DNqw9u1mD#ym-_#`dP6VlGq`H+O7jFE?d3fUx>~W~{h%GGX z@&l@3?ww~$P37D>9@03d54xqKZI`+C-(shNHvQR0&&TYcB#DBqJ{zg$)>vq<8Jrhm zyyr}(Q!fgMcW|Y?khZ;HBgMsYfwG4jRFy*(3P&{!uu4TC%^rc_)dP!$UW?~EDT7H` z{3>Dv+Zw8>XxrOxaYloTjkhdl<+ao;7C+kTN?=S*jQK~ zMnjC8K>MwLc`P8Ondxb;YhNp{ykU@-fwQG{$C>gh*8!Ga*3tgdLiTZ`x(yHomy&7? z3=D)qfkPBA)cjW8inQR8FTtKj9+kp zg8b}3P`0rlCnfEuLF?)5C6fgON;9Vbr%l(I~E;Y4p z;}FgVaSwKr&r_ikbB7Pe-@N)Yi-WUa_4ExC5N*c8$B&7QHk=)~@cj1u`xU@w5EvjHuvK@e0^+H^r6rsI zg0==>Gc)igQ&Pa_pRRlQ=m%Oc3*;Bv-QB_Q1VRZDbu=@O_;ojkh!D#r!@&R(WWYQU zyn)d0@TSJbg2F!_LQ)Uwo76#+XmVNp7TLJJLNH^&i z7%1VWsHy3a|2WtS1Lb06#cIk!#`)I=4Oy58@PdO?a6}g5IG})rTlKm!*4C^w?_m_% zGw5RiRRIO5q(l{D_5OYpBpdq`CJrtxYDyF+yntZfnsPMonAyOP1)>K^6NIx?Aw~dM zKuEuVnF4lCIUCJ{c{rRV8yFayoV4>&q$K{v7OxEX%Jnb#;J|?42X29`5G~- zuMWVu{=EPI)(sy#7`#r;!huHM)sSq_VtMIy|0>HJPG-S@C~MFO2YMl~xB`+0$XG;- zlHVpLL7#zRY~gP=AbjNJ>8WR60MC`=bvJyO@a_QwZ`khfI@sE-L(-S~&K+BwcGCto zOx8ny;z?@ckdW$qIBy8MN-yb7c|n04jAY0U!CGj*Y675#lh^2tY0_@}if|VT`Ts9p+36MAe3}q*`qUlSM>C2A*z~$RUsrhLCME zD3H_>VPRo`Xs2PryNrYN5x68EGN7|4Au(2lkBMHvS*0JlkTpI7V_WJ`;{|V^AvYlb z0UR8yl4h#+IlN`(=g=dCl2;YDwq~PmwhlTf`1=rbi9Z<&a6p`8y@A~b9S`Qv%SJJ7fIt%nI?xC&hb1npEVPXX%$-PKu3insB_<}m zeM@)q=8Mxm4m>Gmz#!N0-r1cCQj2=n!;uHk+-m9TAZAt53sPAy9ihv>aF~Uoq>zqY z_f3S8SrAcD&k)`P2oGCf$b!x&35m3|u@U$A-8D7_M-|>gjpf1ohy4IKfe+c)Z4(oB z`S^%GGmtL}7VSvIf?qP_f+V(rcH`u99?J9Q`b=mkH(WXURtP>Go?&FE5lr59VPQS+ z3l4yvfz3hDayviR^vDkmEY>n z(@Ifh-dYAHuZ-B!4;C>jFv0Hv0X`}sB2I7QvOEWJ^>oPqLHUCo3SOc@2><)!hfi>7O(yv%bN-y literal 0 HcmV?d00001 diff --git a/radio/src/fonts/horus/font_stdsizebold.specs b/radio/src/fonts/horus/font_stdsizebold.specs new file mode 100644 index 000000000..bf410b509 --- /dev/null +++ b/radio/src/fonts/horus/font_stdsizebold.specs @@ -0,0 +1 @@ +0,4,9,16,29,40,57,72,76,83,89,99,111,117,124,129,136,148,159,169,179,191,202,213,223,235,247,252,257,269,281,293,302,309,323,335,347,360,370,380,393,405,410,417,430,440,455,467,481,493,507,519,530,542,554,568,587,601,615,627,634,641,647,659,668,675,686,697,707,719,731,740,752,763,768,775,786,791,807,818,830,841,853,861,871,880,891,903,919,931,943,953,965,966,978,992,1006,1015,1024,1035,1046,1057,1068,1082, 1097, 1112, 1127, 1142, 1157, 1172, 1187, 1202, 1217, 1232, 1247, 1262, 1277 \ No newline at end of file From 641fdc5160c628059dff6c3bc93b28a98fc8e353 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 22:25:46 +0100 Subject: [PATCH 28/98] VC++ compilation fix --- radio/src/targets/simu/simpgmspace.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index ea07a9885..b72e5681f 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -327,7 +327,10 @@ extern void rxPdcUsart( void (*pChProcess)(uint8_t x) ); #define FE0 0 #define ISR(x, ...) void x() + +#if !defined(WIN32) && defined(__GNUC__) #define asm(...) +#endif #if defined(CPUARM) extern uint32_t Master_frequency; From 1809addbb31b38ed35e4e91d4cb5e2b12be1e00d Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 24 Mar 2016 23:04:39 +0100 Subject: [PATCH 29/98] Later ... --- radio/util/commit-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/util/commit-tests.sh b/radio/util/commit-tests.sh index 67b3c75df..2a78fa28a 100755 --- a/radio/util/commit-tests.sh +++ b/radio/util/commit-tests.sh @@ -84,4 +84,4 @@ rm -rf * cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=NO -DUSB=SERIAL -DCLI=YES -DDEBUG=YES ${SRCDIR} make -j2 firmware make -j2 simu -make -j2 gtests ; ./gtests +# make -j2 gtests ; ./gtests From 4b6bcc6a0eedf1fb9234f28f7420a46e834d09e9 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 25 Mar 2016 11:46:34 +0400 Subject: [PATCH 30/98] 9x timer start edit fix --- radio/src/gui/9x/menu_model_setup.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/9x/menu_model_setup.cpp b/radio/src/gui/9x/menu_model_setup.cpp index fb660986d..cd6c2fc82 100644 --- a/radio/src/gui/9x/menu_model_setup.cpp +++ b/radio/src/gui/9x/menu_model_setup.cpp @@ -285,8 +285,9 @@ void menuModelSetup(uint8_t event) break; case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; - timer->start -= qr.rem ; - if ((int16_t)timer->start < 0) timer->start=0; // TODO is it really needed? + if (timer->start >= qr.rem) { + timer->start -= qr.rem ; + } if ((int32_t)timer->start > 3599) timer->start=3599; // 59:59 break; } From bc70acb55d2c3f013ae9f0db4ff83bb8601b5d48 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 25 Mar 2016 14:13:22 +0400 Subject: [PATCH 31/98] [Horus] Reduce GPIO speed where possible for noise reduction - no more audio noise now :) --- radio/src/targets/horus/adc_driver.cpp | 4 ++-- radio/src/targets/horus/audio_driver.cpp | 2 +- radio/src/targets/horus/haptic_driver.cpp | 2 +- radio/src/targets/horus/keys_driver.cpp | 2 +- radio/src/targets/horus/lcd_driver.cpp | 8 ++++---- radio/src/targets/horus/led_driver.cpp | 4 ++-- radio/src/targets/horus/pulses_driver.cpp | 14 +++++++------- radio/src/targets/horus/pwr_driver.cpp | 6 +++--- radio/src/targets/horus/serial2_driver.cpp | 2 +- radio/src/targets/horus/telemetry_driver.cpp | 2 +- radio/src/targets/horus/trainer_driver.cpp | 2 +- radio/src/targets/horus/usb_bsp.c | 4 ++-- 12 files changed, 26 insertions(+), 26 deletions(-) diff --git a/radio/src/targets/horus/adc_driver.cpp b/radio/src/targets/horus/adc_driver.cpp index 1d8c8f158..b8f0f9bcb 100644 --- a/radio/src/targets/horus/adc_driver.cpp +++ b/radio/src/targets/horus/adc_driver.cpp @@ -45,7 +45,7 @@ static void ADS7952_Init() SPI_InitTypeDef SPI_InitStructure; GPIO_InitStructure.GPIO_Pin = ADC_SPI_PIN_MISO|ADC_SPI_PIN_SCK|ADC_SPI_PIN_MOSI; - GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed =GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; @@ -54,7 +54,7 @@ static void ADS7952_Init() GPIO_InitStructure.GPIO_Pin = ADC_SPI_PIN_CS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(ADC_SPI_GPIO, &GPIO_InitStructure); diff --git a/radio/src/targets/horus/audio_driver.cpp b/radio/src/targets/horus/audio_driver.cpp index 28147dd9a..a0cb14262 100644 --- a/radio/src/targets/horus/audio_driver.cpp +++ b/radio/src/targets/horus/audio_driver.cpp @@ -84,7 +84,7 @@ void audioSpiInit(void) SPI_InitTypeDef SPI_InitStructure; GPIO_InitStructure.GPIO_Pin = AUDIO_SPI_MISO_GPIO_PIN; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; diff --git a/radio/src/targets/horus/haptic_driver.cpp b/radio/src/targets/horus/haptic_driver.cpp index a097575c8..f989834ae 100644 --- a/radio/src/targets/horus/haptic_driver.cpp +++ b/radio/src/targets/horus/haptic_driver.cpp @@ -38,7 +38,7 @@ void hapticInit(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = HAPTIC_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(HAPTIC_GPIO, &GPIO_InitStructure); diff --git a/radio/src/targets/horus/keys_driver.cpp b/radio/src/targets/horus/keys_driver.cpp index 4bb75a3f3..ac2dc2aa6 100644 --- a/radio/src/targets/horus/keys_driver.cpp +++ b/radio/src/targets/horus/keys_driver.cpp @@ -195,7 +195,7 @@ void keysInit() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; diff --git a/radio/src/targets/horus/lcd_driver.cpp b/radio/src/targets/horus/lcd_driver.cpp index afea6185e..e48882b21 100644 --- a/radio/src/targets/horus/lcd_driver.cpp +++ b/radio/src/targets/horus/lcd_driver.cpp @@ -75,7 +75,7 @@ static void LCD_AF_GPIOConfig(void) GPIO_PinAFConfig(GPIOI,GPIO_PinSource14,GPIO_AF_LTDC); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14; - GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed =GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType =GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL; @@ -113,7 +113,7 @@ static void LCD_AF_GPIOConfig(void) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 ; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; @@ -125,7 +125,7 @@ static void LCD_Backlight_Config(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LCD_GPIO_PIN_BL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(LCD_GPIO_BL, &GPIO_InitStructure); @@ -137,7 +137,7 @@ static void LCD_NRSTConfig(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LCD_GPIO_PIN_NRST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(LCD_GPIO_NRST, &GPIO_InitStructure); diff --git a/radio/src/targets/horus/led_driver.cpp b/radio/src/targets/horus/led_driver.cpp index 037827c47..e9e5ddeb0 100644 --- a/radio/src/targets/horus/led_driver.cpp +++ b/radio/src/targets/horus/led_driver.cpp @@ -25,7 +25,7 @@ void ledOn() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LED_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(LED_GPIO, &GPIO_InitStructure); @@ -36,7 +36,7 @@ void ledOff() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LED_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(LED_GPIO, &GPIO_InitStructure); diff --git a/radio/src/targets/horus/pulses_driver.cpp b/radio/src/targets/horus/pulses_driver.cpp index f65565bc5..3db61e347 100644 --- a/radio/src/targets/horus/pulses_driver.cpp +++ b/radio/src/targets/horus/pulses_driver.cpp @@ -131,7 +131,7 @@ static void intmoduleNoneStart() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); @@ -217,7 +217,7 @@ static void extmoduleNoneStart() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); @@ -261,7 +261,7 @@ static void extmoduleCrossfireStart() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); @@ -314,7 +314,7 @@ void intmodulePxxStart() GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); @@ -372,7 +372,7 @@ void extmodulePxxStart() GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); @@ -432,7 +432,7 @@ static void extmoduleDsm2Start() GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); @@ -490,7 +490,7 @@ static void extmodulePpmStart() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); diff --git a/radio/src/targets/horus/pwr_driver.cpp b/radio/src/targets/horus/pwr_driver.cpp index 8cf940775..c711acdda 100644 --- a/radio/src/targets/horus/pwr_driver.cpp +++ b/radio/src/targets/horus/pwr_driver.cpp @@ -26,7 +26,7 @@ void pwrInit() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = PWR_ON_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(PWR_GPIO, &GPIO_InitStructure); @@ -64,7 +64,7 @@ void pwrOff() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = AUDIO_SHUTDOWN_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(AUDIO_SHUTDOWN_GPIO, &GPIO_InitStructure); @@ -100,7 +100,7 @@ void pwrResetHandler() GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = PWR_ON_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(PWR_GPIO, &GPIO_InitStructure); diff --git a/radio/src/targets/horus/serial2_driver.cpp b/radio/src/targets/horus/serial2_driver.cpp index 7cb617592..d849d62c0 100644 --- a/radio/src/targets/horus/serial2_driver.cpp +++ b/radio/src/targets/horus/serial2_driver.cpp @@ -36,7 +36,7 @@ void uart3Setup(unsigned int baudrate, bool dma) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(SERIAL_GPIO, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = baudrate; diff --git a/radio/src/targets/horus/telemetry_driver.cpp b/radio/src/targets/horus/telemetry_driver.cpp index 5edd40fca..20d33883c 100644 --- a/radio/src/targets/horus/telemetry_driver.cpp +++ b/radio/src/targets/horus/telemetry_driver.cpp @@ -46,7 +46,7 @@ void telemetryPortInit(uint32_t baudrate) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(TELEMETRY_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = TELEMETRY_DIR_GPIO_PIN; diff --git a/radio/src/targets/horus/trainer_driver.cpp b/radio/src/targets/horus/trainer_driver.cpp index 0df472d99..f78c50d54 100644 --- a/radio/src/targets/horus/trainer_driver.cpp +++ b/radio/src/targets/horus/trainer_driver.cpp @@ -196,7 +196,7 @@ void init_sbus_on_heartbeat_capture() GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 100000; diff --git a/radio/src/targets/horus/usb_bsp.c b/radio/src/targets/horus/usb_bsp.c index 27e31e9f7..87791feae 100644 --- a/radio/src/targets/horus/usb_bsp.c +++ b/radio/src/targets/horus/usb_bsp.c @@ -42,7 +42,7 @@ void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev) /* Configure DM and DP Pins */ GPIO_InitStructure.GPIO_Pin = USB_GPIO_PIN_DM | USB_GPIO_PIN_DP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; @@ -53,7 +53,7 @@ void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev) /* Configure VBUS Pin */ GPIO_InitStructure.GPIO_Pin = USB_GPIO_PIN_VBUS; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; From ecff71b0448e9a8979c0e811ce55151d894a9509 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 12:54:35 +0100 Subject: [PATCH 32/98] Cosmetics --- radio/src/lua/api_general.cpp | 30 +++++++----------------------- radio/src/lua/api_lcd.cpp | 30 +++++++----------------------- radio/src/lua/api_model.cpp | 30 +++++++----------------------- radio/src/lua/interface.cpp | 30 +++++++----------------------- radio/src/lua/lua_api.h | 30 +++++++----------------------- 5 files changed, 35 insertions(+), 115 deletions(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 5b04c0978..a3478fa11 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1,27 +1,12 @@ /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -31,7 +16,6 @@ * 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 diff --git a/radio/src/lua/api_lcd.cpp b/radio/src/lua/api_lcd.cpp index 862798c6c..62a07c169 100644 --- a/radio/src/lua/api_lcd.cpp +++ b/radio/src/lua/api_lcd.cpp @@ -1,27 +1,12 @@ /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -31,7 +16,6 @@ * 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 diff --git a/radio/src/lua/api_model.cpp b/radio/src/lua/api_model.cpp index d2e4dd691..f350630f9 100644 --- a/radio/src/lua/api_model.cpp +++ b/radio/src/lua/api_model.cpp @@ -1,27 +1,12 @@ /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -31,7 +16,6 @@ * 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 diff --git a/radio/src/lua/interface.cpp b/radio/src/lua/interface.cpp index 42e446446..a75cc28b0 100644 --- a/radio/src/lua/interface.cpp +++ b/radio/src/lua/interface.cpp @@ -1,27 +1,12 @@ /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -31,7 +16,6 @@ * 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 diff --git a/radio/src/lua/lua_api.h b/radio/src/lua/lua_api.h index 5e93a3188..9aa231e22 100644 --- a/radio/src/lua/lua_api.h +++ b/radio/src/lua/lua_api.h @@ -1,27 +1,12 @@ /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -31,7 +16,6 @@ * 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. - * */ #ifndef _LUA_API_H_ From dd76e9d8bf14bcb63c2e127808ab6fda837d21bc Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Fri, 25 Mar 2016 14:04:30 +0100 Subject: [PATCH 33/98] Also backup members inside unions, the code is a bit more complicated since unions can have structs or simple types. --- radio/src/storage/datacopy.cpp | 11 ++++- radio/util/generate_datacopy.py | 71 ++++++++++++++++++++++++++------- 2 files changed, 66 insertions(+), 16 deletions(-) diff --git a/radio/src/storage/datacopy.cpp b/radio/src/storage/datacopy.cpp index 239db541d..1fc1a9730 100644 --- a/radio/src/storage/datacopy.cpp +++ b/radio/src/storage/datacopy.cpp @@ -1,4 +1,4 @@ -//This file was auto-generated by generate_datacopy.py script on Wed Mar 16 20:12:19 2016. Do not edit this file! +//This file was auto-generated by generate_datacopy.py script on Fri Mar 25 14:01:12 2016. Do not edit this file! @@ -77,6 +77,7 @@ void copyCustomFunctionData(A * dest, B * src) { dest->swtch = src->swtch; dest->func = src->func; + copyCustomFunctionData_all(&dest->CustomFunctionData_all, &src->CustomFunctionData_all); dest->active = src->active; } @@ -305,3 +306,11 @@ void copyRadioData(A * dest, B * src) dest->potsConfig = src->potsConfig; } +template +void copyCustomFunctionData_all(A * dest, B * src) +{ + dest->val = src->val; + dest->mode = src->mode; + dest->param = src->param; +} + diff --git a/radio/util/generate_datacopy.py b/radio/util/generate_datacopy.py index 22e87d6d9..9d1d9f7e4 100644 --- a/radio/util/generate_datacopy.py +++ b/radio/util/generate_datacopy.py @@ -12,33 +12,74 @@ if sys.platform == "darwin": structs = [] +extrastructs = [] + +def build_struct(cursor, anonymousUnion=False): + if not anonymousUnion: + structs.append(cursor.spelling) + print("template \nvoid copy%s(A * dest, B * src)\n{" % cursor.spelling) -def build_struct(cursor): - structs.append(cursor.spelling) - print("template \nvoid copy%s(A * dest, B * src)\n{" % cursor.spelling) for c in cursor.get_children(): - if c.kind == clang.cindex.CursorKind.FIELD_DECL: - if c.type.get_array_size() > 0: - if c.type.get_array_element_type().spelling in structs: - print(" for (int i=0; i<%d; i++) {" % c.type.get_array_size()) - print(" copy%s(&dest->%s[i], &src->%s[i]);" % (c.type.get_array_element_type().spelling, c.spelling, c.spelling)) - print(" }") + if c.kind == clang.cindex.CursorKind.UNION_DECL: + if c.spelling: + raise "Cannot handle non anonymous unions" + + copiedUnionMember = False + for uc in c.get_children(): + if not uc.spelling or uc.kind == clang.cindex.CursorKind.PACKED_ATTR: + # Ignore + pass else: - print(" memcpy(dest->%s, src->%s, sizeof(dest->%s));" % (c.spelling, c.spelling, c.spelling)) - elif c.type.get_declaration().spelling in structs: - print(" copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, c.spelling, c.spelling)) - else: - print(" dest->%s = src->%s;" % (c.spelling, c.spelling)) - print("}\n") + # per default we copy only the first member of a union and warn if there are more + # members (declare the other members NOBACKUP) + if copiedUnionMember: + print ("Warning more than one union member (%s) in anynomous union inside struct %s, consider NOBACKUP statements" % (uc.spelling, cursor.spelling), file=sys.stderr) + else: + copy_decl(uc, uc.spelling) + copiedUnionMember = True + + elif c.kind == clang.cindex.CursorKind.FIELD_DECL: + copy_decl(c, c.spelling) + + + if not anonymousUnion: + print("}\n") def build(cursor): result = [] for c in cursor.get_children(): if c.kind == clang.cindex.CursorKind.STRUCT_DECL: build_struct(c) + for c, spelling in extrastructs: + print("template \nvoid copy%s(A * dest, B * src)\n{" % spelling) + build_struct(c, True) + print ("}\n") + return result +def copy_decl(c, spelling): + childs = [ch for ch in c.get_children()] + if c.type.get_array_size() > 0: + if c.type.get_array_element_type().spelling in structs: + print(" for (int i=0; i<%d; i++) {" % c.type.get_array_size()) + print(" copy%s(&dest->%s[i], &src->%s[i]);" % (c.type.get_array_element_type().spelling, spelling, spelling)) + print(" }") + else: + print(" memcpy(dest->%s, src->%s, sizeof(dest->%s));" % (spelling, spelling, spelling)) + elif c.type.kind == clang.cindex.TypeKind.UNEXPOSED and len(childs)==1 and childs[0].kind == clang.cindex.CursorKind.STRUCT_DECL: + # inline declared structs + spelling = c.semantic_parent.semantic_parent.spelling + "_" + spelling + + extrastructs.append((childs[0], spelling)) + print(" copy%s(&dest->%s, &src->%s);" % (spelling, spelling, spelling)) + + elif c.type.get_declaration().spelling in structs: + print(" copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, spelling, spelling)) + else: + print(" dest->%s = src->%s;" % (spelling, spelling)) + + def header(): print("//This file was auto-generated by %s script on %s. Do not edit this file!\n\n\n" % (os.path.basename(sys.argv[0]), time.asctime())) From f073c9fe856b84ac02f4ad647817f66eacfa8ad9 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 15:30:03 +0100 Subject: [PATCH 34/98] Dockerfile commited --- radio/util/Dockerfile | 18 ++++++++++++++ radio/util/build.py | 55 ++++++++++++++++++++++++++++++------------- 2 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 radio/util/Dockerfile diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile new file mode 100644 index 000000000..803dddf6d --- /dev/null +++ b/radio/util/Dockerfile @@ -0,0 +1,18 @@ +# An Debian image for compiling OpenTX 2.2 + +FROM debian:jessie +MAINTAINER bsongis + +RUN apt-get update && + apt-get install -y software-properties-common wget lib32z1 lib32ncurses5 git cmake gcc avr-libc build-essential libfox-1.6-dev python-qt4 +RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && + tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && + mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi +ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin + +ADD http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb gcc-avr_4.7.2-2_amd64.deb +ADD http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb libmpc2_0.9-4_amd64.deb +RUN dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb + +VOLUME ["/opentx"] +ENTRYPOINT ["python", "/opentx/code/radio/util/build.py"] diff --git a/radio/util/build.py b/radio/util/build.py index 1517a9857..1bbe6e5bb 100644 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -2,8 +2,17 @@ import os import sys +import subprocess +import shutil from fwoptions import * +# Error codes +INVALID_FIRMWARE = -1 +UNKNOWN_BOARD = -2 +INVALID_LANGUAGE = -3 +COMPILATION_ERROR = -4 +FIRMWARE_SIZE_TOO_BIG = -5 + # Board types BOARD_9X = 0 BOARD_GRUVIN9X = 1 @@ -15,13 +24,16 @@ BOARD_HORUS = 4 BOARD_FAMILY_AVR = 0 BOARD_FAMILY_ARM = 1 +if len(sys.argv) != 2: + exit(INVALID_FIRMWARE) + srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.." filename = sys.argv[1] root, ext = os.path.splitext(filename) options = root.split("-") -if options[0] != "opentx": - sys.exit("Invalid firmware"); +if len(options) < 2 or options[0] != "opentx": + exit(INVALID_FIRMWARE) filename = "opentx-" optcount = 1 @@ -116,7 +128,7 @@ elif options[optcount] == "horus": board = BOARD_HORUS board_family = BOARD_FAMILY_ARM else: - sys.exit("Unknown board") + exit(UNKNOWN_BOARD) filename += options[optcount] optcount += 1 @@ -144,7 +156,7 @@ for key in languages: if key == options[-1]: language = key if not language: - sys.exit("Invalid language") + exit(INVALID_LANGUAGE) command_options["TRANSLATIONS"] = language.upper() filename += "-" + language @@ -156,24 +168,35 @@ filename += ext firmware = "firmware" + ext # Launch CMake -cmd = "cmake" +cmd = ["cmake"] for opt, value in command_options.items(): - cmd += " -D%s=%s" % (opt, value) -cmd += " " + srcdir + cmd.append("-D%s=%s" % (opt, value)) if "OPENTX_VERSION_SUFFIX" in os.environ: - cmd += ' -DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"] -print cmd -os.system(cmd) + cmd.append('-DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"]) +cmd.append(srcdir) +proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +output, error = proc.communicate() +if proc.returncode != 0: + file("%s.err" % filename, "w").write(output + error) + exit(COMPILATION_ERROR) # Launch make firmware -cmd = "make firmware" -os.system(cmd) +cmd = ["make", "firmware"] +proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +output, error = proc.communicate() +if proc.returncode != 0: + file("%s.err" % filename, "w").write(output + error) + exit(COMPILATION_ERROR) # Check binary size if board_family == BOARD_FAMILY_ARM: size = os.stat(firmware).st_size else: - os.system("avr-size -A %s | grep Total | cut -f2- -d \" \" > ./size" % firmware) - size = file("./size").read().strip() -if int(size) > maxsize: - exit("Invalid size") + size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % firmware, shell=True) + size = int(size.strip()) +if size > maxsize: + exit(FIRMWARE_SIZE_TOO_BIG) + +# Copy binary to the binaries directory +shutil.copyfile(firmware, filename) +print filename From 34f9bc0b638ccc59a1732f1566301f6b2ba15022 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 15:39:55 +0100 Subject: [PATCH 35/98] Dockerfile commited --- radio/util/Dockerfile | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index 803dddf6d..175c36cfe 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -3,11 +3,23 @@ FROM debian:jessie MAINTAINER bsongis -RUN apt-get update && - apt-get install -y software-properties-common wget lib32z1 lib32ncurses5 git cmake gcc avr-libc build-essential libfox-1.6-dev python-qt4 -RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && - tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && +RUN apt-get update && apt-get install -y \ + software-properties-common + wget + lib32z1 + lib32ncurses5 + git + cmake + gcc + avr-libc + build-essential + libfox-1.6-dev + python-qt4 + +RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ + tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi + ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin ADD http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb gcc-avr_4.7.2-2_amd64.deb From a681c341a2f30681c7c6cf8309ff7a28a6a32c1d Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 15:43:16 +0100 Subject: [PATCH 36/98] Dockerfile commited --- radio/util/Dockerfile | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index 175c36cfe..e569cbfdc 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -4,27 +4,26 @@ FROM debian:jessie MAINTAINER bsongis RUN apt-get update && apt-get install -y \ - software-properties-common - wget - lib32z1 - lib32ncurses5 - git - cmake - gcc - avr-libc - build-essential - libfox-1.6-dev + software-properties-common \ + wget \ + lib32z1 \ + lib32ncurses5 \ + git \ + cmake \ + gcc \ + avr-libc \ + build-essential \ + libfox-1.6-dev \ python-qt4 RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi +RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb gcc-avr_4.7.2-2_amd64.deb && \ + wget -q http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb libmpc2_0.9-4_amd64.deb && \ + dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb + ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin - -ADD http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb gcc-avr_4.7.2-2_amd64.deb -ADD http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb libmpc2_0.9-4_amd64.deb -RUN dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb - VOLUME ["/opentx"] ENTRYPOINT ["python", "/opentx/code/radio/util/build.py"] From 884e1feee4ca9e95c6187b54c9bc813966a1d93c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 15:47:48 +0100 Subject: [PATCH 37/98] Dockerfile commited --- radio/util/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index e569cbfdc..836c69bc4 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -20,8 +20,8 @@ RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-updat tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi -RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb gcc-avr_4.7.2-2_amd64.deb && \ - wget -q http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb libmpc2_0.9-4_amd64.deb && \ +RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb && \ + wget -q http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb && \ dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin From ccfcfa85d00a2a6f286813de414381931252cb15 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 15:56:21 +0100 Subject: [PATCH 38/98] Dockerfile commited --- radio/util/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index 836c69bc4..3662ae74a 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -26,4 +26,6 @@ RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_ ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin VOLUME ["/opentx"] + +WORKDIR /opentx/binaries ENTRYPOINT ["python", "/opentx/code/radio/util/build.py"] From 862199f8227618676ad9d00f054166290fa922e8 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 16:23:12 +0100 Subject: [PATCH 39/98] Dockerfile commited --- radio/util/Dockerfile | 2 -- radio/util/build.py | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index 3662ae74a..836c69bc4 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -26,6 +26,4 @@ RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_ ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin VOLUME ["/opentx"] - -WORKDIR /opentx/binaries ENTRYPOINT ["python", "/opentx/code/radio/util/build.py"] diff --git a/radio/util/build.py b/radio/util/build.py index 1bbe6e5bb..69d24a10a 100644 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -28,7 +28,7 @@ if len(sys.argv) != 2: exit(INVALID_FIRMWARE) srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.." -filename = sys.argv[1] +directory, filename = os.path.split(sys.argv[1]) root, ext = os.path.splitext(filename) options = root.split("-") @@ -198,5 +198,5 @@ if size > maxsize: exit(FIRMWARE_SIZE_TOO_BIG) # Copy binary to the binaries directory -shutil.copyfile(firmware, filename) +shutil.copyfile(firmware, os.path.join(directory, filename)) print filename From 7501608aca5b985eb6e632e3525d8f04a988f3a4 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 16:53:09 +0100 Subject: [PATCH 40/98] Build output now saved in a .out file ... so that we can grep for warnings! --- radio/util/build.py | 70 +++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/radio/util/build.py b/radio/util/build.py index 69d24a10a..ea1b60598 100644 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -167,36 +167,50 @@ else: filename += ext firmware = "firmware" + ext -# Launch CMake -cmd = ["cmake"] -for opt, value in command_options.items(): - cmd.append("-D%s=%s" % (opt, value)) -if "OPENTX_VERSION_SUFFIX" in os.environ: - cmd.append('-DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"]) -cmd.append(srcdir) -proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -output, error = proc.communicate() -if proc.returncode != 0: - file("%s.err" % filename, "w").write(output + error) +path = os.path.join(directory, filename) +outpath = path + ".out" +errpath = path + ".err" + +if os.path.isfile(errpath): exit(COMPILATION_ERROR) -# Launch make firmware -cmd = ["make", "firmware"] -proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -output, error = proc.communicate() -if proc.returncode != 0: - file("%s.err" % filename, "w").write(output + error) - exit(COMPILATION_ERROR) +if not os.path.isfile(path): + # Launch CMake + cmd = ["cmake"] + for opt, value in command_options.items(): + cmd.append("-D%s=%s" % (opt, value)) + if "OPENTX_VERSION_SUFFIX" in os.environ: + cmd.append('-DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"]) + cmd.append(srcdir) + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output, error = proc.communicate() + if proc.returncode == 0: + file(outpath, "a").write(output + error) + else: + file(errpath, "w").write(output + error) + exit(COMPILATION_ERROR) -# Check binary size -if board_family == BOARD_FAMILY_ARM: - size = os.stat(firmware).st_size -else: - size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % firmware, shell=True) - size = int(size.strip()) -if size > maxsize: - exit(FIRMWARE_SIZE_TOO_BIG) + # Launch make firmware + cmd = ["make", "firmware"] + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output, error = proc.communicate() + if proc.returncode == 0: + file(outpath, "a").write(output + error) + else: + file(errpath, "w").write(output + error) + exit(COMPILATION_ERROR) + + # Check binary size + if board_family == BOARD_FAMILY_ARM: + size = os.stat(firmware).st_size + else: + size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % firmware, shell=True) + size = int(size.strip()) + if size > maxsize: + exit(FIRMWARE_SIZE_TOO_BIG) + + # Copy binary to the binaries directory + shutil.copyfile(firmware, path) -# Copy binary to the binaries directory -shutil.copyfile(firmware, os.path.join(directory, filename)) print filename +exit(0) \ No newline at end of file From 2bb63e664463345e44570ebd6fc229fc3352aac3 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 25 Mar 2016 20:37:34 +0400 Subject: [PATCH 41/98] Header data is useful --- radio/src/targets/horus/system_stm32f4xx.c | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/radio/src/targets/horus/system_stm32f4xx.c b/radio/src/targets/horus/system_stm32f4xx.c index 3ec7176f5..393603fc2 100644 --- a/radio/src/targets/horus/system_stm32f4xx.c +++ b/radio/src/targets/horus/system_stm32f4xx.c @@ -17,6 +17,116 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ + +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @version V1.1.0 + * @date 21-March-2015 + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F4xx devices, + * and is generated by the clock configuration tool + * stm32f4xx_Clock_Configuration_V1.1.0.xls + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f4xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f4xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f4xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F40xx/41xx/427x/437x devices + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 168000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 168000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 12000000 + *----------------------------------------------------------------------------- + * PLL_M | 12 + *----------------------------------------------------------------------------- + * PLL_N | 336 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 7 + *----------------------------------------------------------------------------- + * PLLI2S_N | NA + *----------------------------------------------------------------------------- + * PLLI2S_R | NA + *----------------------------------------------------------------------------- + * I2S input clock | NA + *----------------------------------------------------------------------------- + * VDD(V) | 3.3 + *----------------------------------------------------------------------------- + * Main regulator output voltage | Scale1 mode + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 5 + *----------------------------------------------------------------------------- + * Prefetch Buffer | ON + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2013 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ /** @addtogroup CMSIS * @{ From a2928c5d79c814d3c2cefdac03c9186870bc44f2 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 25 Mar 2016 20:50:34 +0400 Subject: [PATCH 42/98] [Horus] Clock is 168MHz, not 180... --- radio/src/targets/horus/system_stm32f4xx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/radio/src/targets/horus/system_stm32f4xx.c b/radio/src/targets/horus/system_stm32f4xx.c index 393603fc2..5c609ffac 100644 --- a/radio/src/targets/horus/system_stm32f4xx.c +++ b/radio/src/targets/horus/system_stm32f4xx.c @@ -23,7 +23,7 @@ * @file system_stm32f4xx.c * @author MCD Application Team * @version V1.1.0 - * @date 21-March-2015 + * @date 25-March-2016 * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. * This file contains the system clock configuration for STM32F4xx devices, * and is generated by the clock configuration tool @@ -199,7 +199,7 @@ * @{ */ - uint32_t SystemCoreClock = 180000000; + uint32_t SystemCoreClock = 168000000; __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; @@ -426,7 +426,7 @@ static void SetSysClock(void) } /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_PRFTEN |FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; + FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; /* Select the main PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); From c2786d36c9ce187df9233a8d3e1af00157b69f67 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 19:12:24 +0100 Subject: [PATCH 43/98] More compilation server errors --- companion/src/mainwindow.cpp | 15 ++++++++++++--- radio/util/build.py | 14 +++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index d93c05a5a..be359f1d3 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -360,16 +360,25 @@ void MainWindow::firmwareDownloadAccepted() int errnum = hline.mid(6).toInt(); switch(errnum) { case 1: - errormsg = tr("Not enough memory for all the selected firmware options"); + errormsg = tr("Not enough flash available on this board for all the selected options"); break; case 2: - errormsg = tr("Compilation server termporary failure, try later"); + errormsg = tr("Compilation server temporary failure, try later"); break; case 3: errormsg = tr("Compilation server too busy, try later"); break; case 4: - errormsg = tr("Compilation server requires registration, please check OpenTX web site"); + errormsg = tr("Compilation error"); + break; + case 5: + errormsg = tr("Invalid firmware"); + break; + case 6: + errormsg = tr("Invalid board"); + break; + case 7: + errormsg = tr("Invalid language"); break; default: errormsg = tr("Unknown server failure, try later"); diff --git a/radio/util/build.py b/radio/util/build.py index ea1b60598..1eb4ec30c 100644 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -7,11 +7,11 @@ import shutil from fwoptions import * # Error codes -INVALID_FIRMWARE = -1 -UNKNOWN_BOARD = -2 -INVALID_LANGUAGE = -3 -COMPILATION_ERROR = -4 -FIRMWARE_SIZE_TOO_BIG = -5 +FIRMWARE_SIZE_TOO_BIG = 1 +COMPILATION_ERROR = 4 +INVALID_FIRMWARE = 5 +INVALID_BOARD = 6 +INVALID_LANGUAGE = 7 # Board types BOARD_9X = 0 @@ -128,7 +128,7 @@ elif options[optcount] == "horus": board = BOARD_HORUS board_family = BOARD_FAMILY_ARM else: - exit(UNKNOWN_BOARD) + exit(INVALID_BOARD) filename += options[optcount] optcount += 1 @@ -147,7 +147,7 @@ for opt, value in firmware_options.items(): else: optvalue = value[2] - if optvalue != None: + if optvalue is not None: command_options[value[0]] = optvalue # The firmware display language From 69fc1b9354a3278244b7091125f19a87328d2f17 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 22:48:00 +0100 Subject: [PATCH 44/98] We won't start the bad simulator --- .../src/simulation/simulatorinterface.cpp | 4 +++- compile.bat | 18 +++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/companion/src/simulation/simulatorinterface.cpp b/companion/src/simulation/simulatorinterface.cpp index 6793dbbfa..146c153d9 100644 --- a/companion/src/simulation/simulatorinterface.cpp +++ b/companion/src/simulation/simulatorinterface.cpp @@ -69,7 +69,7 @@ void registerSimulators() } } -SimulatorFactory *getSimulatorFactory(const QString &name) +SimulatorFactory * getSimulatorFactory(const QString & name) { QString simuName = name; while(1) { @@ -85,6 +85,8 @@ SimulatorFactory *getSimulatorFactory(const QString &name) if (pos <= 0) break; simuName = simuName.mid(0, pos); + if (simuName.count('-') == 0) + break; } return NULL; } diff --git a/compile.bat b/compile.bat index 9121027aa..94d22efe3 100644 --- a/compile.bat +++ b/compile.bat @@ -13,29 +13,29 @@ cd build SET COMMON_OPTIONS=-DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DALLOW_NIGHTLY_BUILDS=YES -DVERSION_SUFFIX=%1 cmake %COMMON_OPTIONS% -DPCB=9X %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=GRUVIN9X %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=MEGA2560 %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=SKY9X %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=9XRPRO %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=TARANIS %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=TARANIS -DPCBREV=REVPLUS %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=TARANIS -DPCBREV=REV9E %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release cmake %COMMON_OPTIONS% -DPCB=HORUS %CODE_DIR% -"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release +"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\libsimulator.vcxproj /t:Rebuild /p:Configuration=Release "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" companion\src\installer.vcxproj /t:Rebuild /p:Configuration=Release From 47f083e1c8bf75b31c4004f690e5d4bb0ca04bb9 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 25 Mar 2016 22:50:45 +0100 Subject: [PATCH 45/98] Now we will try to build simulators the same way --- radio/src/targets/simu/CMakeLists.txt | 5 +-- radio/util/build.py | 56 +++++++++++++++------------ 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index ad2c7034d..8a3c123c7 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -8,15 +8,14 @@ add_definitions(-DSIMU) remove_definitions(-DCLI) if(Qt5Widgets_FOUND) - string(TOLOWER ${TRANSLATIONS} TRANSLATION_LOWERCASE) - set(SIMULATOR_FLAVOUR opentx-${FLAVOUR}-${TRANSLATION_LOWERCASE}) + set(SIMULATOR_FLAVOUR opentx-${FLAVOUR}) set(SIMULATOR_TARGET ${SIMULATOR_FLAVOUR}-simulator) add_definitions(-DSIMULATOR_FLAVOUR="${SIMULATOR_FLAVOUR}") include_directories(${COMPANION_SRC_DIRECTORY} ${COMPANION_SRC_DIRECTORY}/simulation) add_library(${SIMULATOR_TARGET} SHARED ${SIMU_SRC} opentxsimulator.cpp) add_dependencies(${SIMULATOR_TARGET} ${FIRMWARE_DEPENDENCIES}) qt5_use_modules(${SIMULATOR_TARGET} Core) - add_custom_target(opentx-simulator DEPENDS ${SIMULATOR_TARGET}) + add_custom_target(libsimulator DEPENDS ${SIMULATOR_TARGET}) endif() if(MSVC) diff --git a/radio/util/build.py b/radio/util/build.py index 1eb4ec30c..242907d0d 100644 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -24,20 +24,18 @@ BOARD_HORUS = 4 BOARD_FAMILY_AVR = 0 BOARD_FAMILY_ARM = 1 -if len(sys.argv) != 2: +if len(sys.argv) != 3: exit(INVALID_FIRMWARE) -srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.." -directory, filename = os.path.split(sys.argv[1]) +what = sys.argv[1] +directory, filename = os.path.split(sys.argv[2]) root, ext = os.path.splitext(filename) options = root.split("-") if len(options) < 2 or options[0] != "opentx": exit(INVALID_FIRMWARE) -filename = "opentx-" optcount = 1 - command_options = {} if options[optcount] == "9x": @@ -130,7 +128,19 @@ elif options[optcount] == "horus": else: exit(INVALID_BOARD) -filename += options[optcount] +if what == "firmware": + if board_family == BOARD_FAMILY_ARM: + ext = ".bin" + else: + ext = ".hex" + target = "firmware" + ext + filename = "opentx" +elif what == "libsimulator": + ext = ".so" + target = "libopentx-" + options[optcount] + "-simulator.so" + filename = "libopentx" + +filename += "-" + options[optcount] optcount += 1 # The firmware options @@ -158,15 +168,9 @@ for key in languages: if not language: exit(INVALID_LANGUAGE) command_options["TRANSLATIONS"] = language.upper() -filename += "-" + language - -if board_family == BOARD_FAMILY_ARM: - ext = ".bin" -else: - ext = ".hex" -filename += ext -firmware = "firmware" + ext +filename += "-" + language + ext +srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.." path = os.path.join(directory, filename) outpath = path + ".out" errpath = path + ".err" @@ -190,8 +194,8 @@ if not os.path.isfile(path): file(errpath, "w").write(output + error) exit(COMPILATION_ERROR) - # Launch make firmware - cmd = ["make", "firmware"] + # Launch make + cmd = ["make", what] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = proc.communicate() if proc.returncode == 0: @@ -200,17 +204,19 @@ if not os.path.isfile(path): file(errpath, "w").write(output + error) exit(COMPILATION_ERROR) - # Check binary size - if board_family == BOARD_FAMILY_ARM: - size = os.stat(firmware).st_size - else: - size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % firmware, shell=True) - size = int(size.strip()) - if size > maxsize: - exit(FIRMWARE_SIZE_TOO_BIG) + if what == "firmware": + # Check binary size + if board_family == BOARD_FAMILY_ARM: + size = os.stat(firmware).st_size + else: + size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % firmware, shell=True) + size = int(size.strip()) + if size > maxsize: + exit(FIRMWARE_SIZE_TOO_BIG) + # Copy binary to the binaries directory - shutil.copyfile(firmware, path) + shutil.copyfile(target, path) print filename exit(0) \ No newline at end of file From 210ee69101e01d3c0bfbc6e7af7747f5c622252d Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 10:49:16 +0100 Subject: [PATCH 46/98] Travis fix --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index c8d72a914..8603c0676 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,12 +9,12 @@ before_install: - sudo add-apt-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise main' --yes - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add - - sudo apt-get update -qq - - rsync -av firmware.diydrones.com::Tools/Travis/*.deb ExtraPackages +# - rsync -av firmware.diydrones.com::Tools/Travis/*.deb ExtraPackages install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 - - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" - - export CXX="g++-5" CC="gcc-5" +# - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" +# - export CXX="g++-5" CC="gcc-5" script: - ./radio/util/commit-tests.sh . From ca47684e36f37d7efb8a40a8469f67d93219441c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 11:26:17 +0100 Subject: [PATCH 47/98] Travis fix --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8603c0676..43573a94c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,9 @@ install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 # - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" # - export CXX="g++-5" CC="gcc-5" + - wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb | dpkg --install - + - wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | dpkg --install - + - wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | dpkg --install - script: - ./radio/util/commit-tests.sh . From 4bf837b21f840a3c5a8d864d1ae9b867aa303a02 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 11:36:29 +0100 Subject: [PATCH 48/98] Travis again --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 43573a94c..b7d022269 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,9 +15,9 @@ install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 # - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" # - export CXX="g++-5" CC="gcc-5" - - wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb | dpkg --install - - - wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | dpkg --install - - - wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | dpkg --install - + - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb | dpkg --install - + - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | dpkg --install - + - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | dpkg --install - script: - ./radio/util/commit-tests.sh . From d609158b27d5cbb40a086891389f6b3a26de83b5 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 12:29:40 +0100 Subject: [PATCH 49/98] Travis again --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b7d022269..6c187a995 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,9 +15,9 @@ install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 # - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" # - export CXX="g++-5" CC="gcc-5" - - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb | dpkg --install - - - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | dpkg --install - - - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | dpkg --install - + - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb | sudo dpkg --install - + - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | sudo dpkg --install - + - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | sudo dpkg --install - script: - ./radio/util/commit-tests.sh . From 02730382892b029a2e2f3631ab0592eb8cd54391 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 12:48:47 +0100 Subject: [PATCH 50/98] Python build script fix --- radio/util/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/util/build.py b/radio/util/build.py index 242907d0d..814755eab 100644 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -209,7 +209,7 @@ if not os.path.isfile(path): if board_family == BOARD_FAMILY_ARM: size = os.stat(firmware).st_size else: - size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % firmware, shell=True) + size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % target, shell=True) size = int(size.strip()) if size > maxsize: exit(FIRMWARE_SIZE_TOO_BIG) From e774fe091cd193301a0e09e69515db9dbdb8d693 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 13:13:42 +0100 Subject: [PATCH 51/98] Travis again --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6c187a995..92993f141 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,9 +15,9 @@ install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 # - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" # - export CXX="g++-5" CC="gcc-5" - - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb | sudo dpkg --install - - - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | sudo dpkg --install - - - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | sudo dpkg --install - + - sudo wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb && dpkg --install gcc-avr_1%253a4.8-2.1_amd64.deb + # - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | sudo dpkg --install - + # - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | sudo dpkg --install - script: - ./radio/util/commit-tests.sh . From 06cdc6ba7bc6c837539876c71dd291af60be8a0e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 13:24:18 +0100 Subject: [PATCH 52/98] Travis again --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 92993f141..bb2d5b59f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 # - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" # - export CXX="g++-5" CC="gcc-5" - - sudo wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb && dpkg --install gcc-avr_1%253a4.8-2.1_amd64.deb + - sudo wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb && sudo dpkg --install gcc-avr_1%253a4.8-2.1_amd64.deb # - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | sudo dpkg --install - # - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | sudo dpkg --install - From 42f1515b2f92b455f8a381ac55e0a0bd68809c9c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 14:04:47 +0100 Subject: [PATCH 53/98] Travis again --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index bb2d5b59f..a410ef0f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,8 +15,8 @@ install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 # - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" # - export CXX="g++-5" CC="gcc-5" - - sudo wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb && sudo dpkg --install gcc-avr_1%253a4.8-2.1_amd64.deb - # - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb | sudo dpkg --install - + - wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb && sudo dpkg --install gcc-avr_1%3a4.8-2.1_amd64.deb + - wget --quiet http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb && sudo dpkg --install avr-libc_1%3a1.8.0-4.1_all.deb # - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | sudo dpkg --install - script: From 1c9a5ed75348a3d788d5c2d0370bdf7f047dac59 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 14:13:50 +0100 Subject: [PATCH 54/98] Travis again --- .travis.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index a410ef0f5..975a1b37c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,9 +15,12 @@ install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 # - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" # - export CXX="g++-5" CC="gcc-5" - - wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb && sudo dpkg --install gcc-avr_1%3a4.8-2.1_amd64.deb - - wget --quiet http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb && sudo dpkg --install avr-libc_1%3a1.8.0-4.1_all.deb - # - sudo wget --quiet --output-document=- http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb | sudo dpkg --install - + - wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb + - wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpfr4_3.1.2-1_amd64.deb + - wget --quiet http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb + - wget --quiet http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb + - wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpc3_1.0.1-1ubuntu1_amd64.deb + - sudo dpkg --install gcc-avr_1%3a4.8-2.1_amd64.deb avr-libc_1%3a1.8.0-4.1_all.deb libmpfr4_3.1.2-1_amd64.deb binutils-avr_2.23.1-2.1_amd64.deb libmpc3_1.0.1-1ubuntu1_amd64.deb script: - ./radio/util/commit-tests.sh . From dfd4a04220d10343f0da20fa1bd355ae30aa6802 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 15:48:42 +0100 Subject: [PATCH 55/98] Revert "Also backup members inside unions," This reverts commit dd76e9d8bf14bcb63c2e127808ab6fda837d21bc. --- radio/src/storage/datacopy.cpp | 11 +---- radio/util/generate_datacopy.py | 71 +++++++-------------------------- 2 files changed, 16 insertions(+), 66 deletions(-) diff --git a/radio/src/storage/datacopy.cpp b/radio/src/storage/datacopy.cpp index 1fc1a9730..239db541d 100644 --- a/radio/src/storage/datacopy.cpp +++ b/radio/src/storage/datacopy.cpp @@ -1,4 +1,4 @@ -//This file was auto-generated by generate_datacopy.py script on Fri Mar 25 14:01:12 2016. Do not edit this file! +//This file was auto-generated by generate_datacopy.py script on Wed Mar 16 20:12:19 2016. Do not edit this file! @@ -77,7 +77,6 @@ void copyCustomFunctionData(A * dest, B * src) { dest->swtch = src->swtch; dest->func = src->func; - copyCustomFunctionData_all(&dest->CustomFunctionData_all, &src->CustomFunctionData_all); dest->active = src->active; } @@ -306,11 +305,3 @@ void copyRadioData(A * dest, B * src) dest->potsConfig = src->potsConfig; } -template -void copyCustomFunctionData_all(A * dest, B * src) -{ - dest->val = src->val; - dest->mode = src->mode; - dest->param = src->param; -} - diff --git a/radio/util/generate_datacopy.py b/radio/util/generate_datacopy.py index 9d1d9f7e4..22e87d6d9 100644 --- a/radio/util/generate_datacopy.py +++ b/radio/util/generate_datacopy.py @@ -12,74 +12,33 @@ if sys.platform == "darwin": structs = [] -extrastructs = [] - -def build_struct(cursor, anonymousUnion=False): - if not anonymousUnion: - structs.append(cursor.spelling) - print("template \nvoid copy%s(A * dest, B * src)\n{" % cursor.spelling) +def build_struct(cursor): + structs.append(cursor.spelling) + print("template \nvoid copy%s(A * dest, B * src)\n{" % cursor.spelling) for c in cursor.get_children(): - if c.kind == clang.cindex.CursorKind.UNION_DECL: - if c.spelling: - raise "Cannot handle non anonymous unions" - - copiedUnionMember = False - for uc in c.get_children(): - if not uc.spelling or uc.kind == clang.cindex.CursorKind.PACKED_ATTR: - # Ignore - pass + if c.kind == clang.cindex.CursorKind.FIELD_DECL: + if c.type.get_array_size() > 0: + if c.type.get_array_element_type().spelling in structs: + print(" for (int i=0; i<%d; i++) {" % c.type.get_array_size()) + print(" copy%s(&dest->%s[i], &src->%s[i]);" % (c.type.get_array_element_type().spelling, c.spelling, c.spelling)) + print(" }") else: - # per default we copy only the first member of a union and warn if there are more - # members (declare the other members NOBACKUP) - if copiedUnionMember: - print ("Warning more than one union member (%s) in anynomous union inside struct %s, consider NOBACKUP statements" % (uc.spelling, cursor.spelling), file=sys.stderr) - else: - copy_decl(uc, uc.spelling) - copiedUnionMember = True - - elif c.kind == clang.cindex.CursorKind.FIELD_DECL: - copy_decl(c, c.spelling) - - - if not anonymousUnion: - print("}\n") + print(" memcpy(dest->%s, src->%s, sizeof(dest->%s));" % (c.spelling, c.spelling, c.spelling)) + elif c.type.get_declaration().spelling in structs: + print(" copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, c.spelling, c.spelling)) + else: + print(" dest->%s = src->%s;" % (c.spelling, c.spelling)) + print("}\n") def build(cursor): result = [] for c in cursor.get_children(): if c.kind == clang.cindex.CursorKind.STRUCT_DECL: build_struct(c) - for c, spelling in extrastructs: - print("template \nvoid copy%s(A * dest, B * src)\n{" % spelling) - build_struct(c, True) - print ("}\n") - return result -def copy_decl(c, spelling): - childs = [ch for ch in c.get_children()] - if c.type.get_array_size() > 0: - if c.type.get_array_element_type().spelling in structs: - print(" for (int i=0; i<%d; i++) {" % c.type.get_array_size()) - print(" copy%s(&dest->%s[i], &src->%s[i]);" % (c.type.get_array_element_type().spelling, spelling, spelling)) - print(" }") - else: - print(" memcpy(dest->%s, src->%s, sizeof(dest->%s));" % (spelling, spelling, spelling)) - elif c.type.kind == clang.cindex.TypeKind.UNEXPOSED and len(childs)==1 and childs[0].kind == clang.cindex.CursorKind.STRUCT_DECL: - # inline declared structs - spelling = c.semantic_parent.semantic_parent.spelling + "_" + spelling - - extrastructs.append((childs[0], spelling)) - print(" copy%s(&dest->%s, &src->%s);" % (spelling, spelling, spelling)) - - elif c.type.get_declaration().spelling in structs: - print(" copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, spelling, spelling)) - else: - print(" dest->%s = src->%s;" % (spelling, spelling)) - - def header(): print("//This file was auto-generated by %s script on %s. Do not edit this file!\n\n\n" % (os.path.basename(sys.argv[0]), time.asctime())) From e1b7848a91df7b9c854d68d44c9f8754c40bab6e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 16:13:00 +0100 Subject: [PATCH 56/98] Cosmetics --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 975a1b37c..a108c9eaa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,12 +9,10 @@ before_install: - sudo add-apt-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise main' --yes - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add - - sudo apt-get update -qq -# - rsync -av firmware.diydrones.com::Tools/Travis/*.deb ExtraPackages install: - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 -# - sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS" -# - export CXX="g++-5" CC="gcc-5" + - export CXX="g++-5" CC="gcc-5" - wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb - wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpfr4_3.1.2-1_amd64.deb - wget --quiet http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb From a70cbe6a0d67a2263e8d95480aa15e0763552ed7 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 16:32:57 +0100 Subject: [PATCH 57/98] Companion now able to use .dfu files for flashing radio firmware --- companion/src/flashfirmwaredialog.cpp | 2 +- companion/src/flashfirmwaredialog.h | 3 ++- companion/src/radiointerface.cpp | 14 ++++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/companion/src/flashfirmwaredialog.cpp b/companion/src/flashfirmwaredialog.cpp index a6ee513ca..9ce7efe70 100644 --- a/companion/src/flashfirmwaredialog.cpp +++ b/companion/src/flashfirmwaredialog.cpp @@ -124,7 +124,7 @@ void FlashFirmwareDialog::on_firmwareLoad_clicked() QString fileName = QFileDialog::getOpenFileName(this, tr("Open Firmware File"), g.flashDir(), FLASH_FILES_FILTER); if (!fileName.isEmpty()) { fwName = fileName; - if (!fwName.isEmpty() && !FirmwareInterface(fwName).isValid()) { + if (!fwName.isEmpty() && !fwName.endsWith(".dfu") && !FirmwareInterface(fwName).isValid()) { QMessageBox::warning(this, tr("Warning"), tr("%1 may not be a valid firmware file").arg(fwName)); } updateUI(); diff --git a/companion/src/flashfirmwaredialog.h b/companion/src/flashfirmwaredialog.h index 78a70f397..883ec429d 100644 --- a/companion/src/flashfirmwaredialog.h +++ b/companion/src/flashfirmwaredialog.h @@ -8,9 +8,10 @@ #define HEX_FILES_FILTER "HEX files (*.hex);;" #define BIN_FILES_FILTER "BIN files (*.bin);;" +#define DFU_FILES_FILTER "DFU files (*.dfu);;" #define EEPE_FILES_FILTER "EEPE EEPROM files (*.eepe);;" #define EEPROM_FILES_FILTER "EEPE files (*.eepe *.bin *.hex);;" EEPE_FILES_FILTER BIN_FILES_FILTER HEX_FILES_FILTER -#define FLASH_FILES_FILTER "FLASH files (*.bin *.hex);;" BIN_FILES_FILTER HEX_FILES_FILTER +#define FLASH_FILES_FILTER "FLASH files (*.bin *.hex *.dfu);;" BIN_FILES_FILTER HEX_FILES_FILTER DFU_FILES_FILTER #define EXTERNAL_EEPROM_FILES_FILTER "EEPROM files (*.bin *.hex);;" BIN_FILES_FILTER HEX_FILES_FILTER #define ER9X_EEPROM_FILE_TYPE "ER9X_EEPROM_FILE" #define EEPE_EEPROM_FILE_HEADER "EEPE EEPROM FILE" diff --git a/companion/src/radiointerface.cpp b/companion/src/radiointerface.cpp index 2bfec44ab..7dec64b7c 100644 --- a/companion/src/radiointerface.cpp +++ b/companion/src/radiointerface.cpp @@ -62,18 +62,20 @@ QStringList getAvrdudeArgs(const QString &cmd, const QString &filename) QStringList getDfuArgs(const QString & cmd, const QString & filename) { - QStringList arguments; + QStringList args; burnConfigDialog bcd; QString memory = "0x08000000"; if (cmd == "-U") { memory.append(QString(":%1").arg(MAX_FSIZE)); } - arguments << bcd.getDFUArgs() << "--dfuse-address" << memory; // removed for Horus, is it really needed? << "-d" << "0483:df11"; + args << bcd.getDFUArgs(); + if (!filename.endsWith(".dfu")) { + args << "--dfuse-address" << memory; + } + // removed for Horus, is it really needed? args << "-d" << "0483:df11"; QString fullcmd = cmd + filename; - - arguments << "" << fullcmd; - - return arguments; + args << "" << fullcmd; + return args; } QStringList getSambaArgs(const QString &tcl) From 6ceb575d1ed17332a8fe7c2eab66d9dd0a113880 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 16:34:12 +0100 Subject: [PATCH 58/98] DFU-UTIL "-d 0483:df11" again there --- companion/src/radiointerface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/radiointerface.cpp b/companion/src/radiointerface.cpp index 7dec64b7c..dc8d1359a 100644 --- a/companion/src/radiointerface.cpp +++ b/companion/src/radiointerface.cpp @@ -72,7 +72,7 @@ QStringList getDfuArgs(const QString & cmd, const QString & filename) if (!filename.endsWith(".dfu")) { args << "--dfuse-address" << memory; } - // removed for Horus, is it really needed? args << "-d" << "0483:df11"; + args << "-d" << "0483:df11"; QString fullcmd = cmd + filename; args << "" << fullcmd; return args; From c2412ca05e92a6bb9cdc39489fed243b9ceb49d4 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 23:04:39 +0100 Subject: [PATCH 59/98] Python scripts with the executable flag --- radio/util/build.py | 0 radio/util/fwoptions.py | 0 radio/util/generate_datacopy.py | 0 radio/util/tts_cz.py | 0 radio/util/tts_de.py | 0 radio/util/tts_en.py | 0 radio/util/tts_es.py | 0 radio/util/tts_fr.py | 0 radio/util/tts_it.py | 0 radio/util/tts_pt.py | 0 10 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 radio/util/build.py mode change 100644 => 100755 radio/util/fwoptions.py mode change 100644 => 100755 radio/util/generate_datacopy.py mode change 100644 => 100755 radio/util/tts_cz.py mode change 100644 => 100755 radio/util/tts_de.py mode change 100644 => 100755 radio/util/tts_en.py mode change 100644 => 100755 radio/util/tts_es.py mode change 100644 => 100755 radio/util/tts_fr.py mode change 100644 => 100755 radio/util/tts_it.py mode change 100644 => 100755 radio/util/tts_pt.py diff --git a/radio/util/build.py b/radio/util/build.py old mode 100644 new mode 100755 diff --git a/radio/util/fwoptions.py b/radio/util/fwoptions.py old mode 100644 new mode 100755 diff --git a/radio/util/generate_datacopy.py b/radio/util/generate_datacopy.py old mode 100644 new mode 100755 diff --git a/radio/util/tts_cz.py b/radio/util/tts_cz.py old mode 100644 new mode 100755 diff --git a/radio/util/tts_de.py b/radio/util/tts_de.py old mode 100644 new mode 100755 diff --git a/radio/util/tts_en.py b/radio/util/tts_en.py old mode 100644 new mode 100755 diff --git a/radio/util/tts_es.py b/radio/util/tts_es.py old mode 100644 new mode 100755 diff --git a/radio/util/tts_fr.py b/radio/util/tts_fr.py old mode 100644 new mode 100755 diff --git a/radio/util/tts_it.py b/radio/util/tts_it.py old mode 100644 new mode 100755 diff --git a/radio/util/tts_pt.py b/radio/util/tts_pt.py old mode 100644 new mode 100755 From 8c636e31d9fcbcea0328e43e14c481bd6a7fe36a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 26 Mar 2016 23:06:54 +0100 Subject: [PATCH 60/98] Dockerfile updated --- radio/util/Dockerfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index 836c69bc4..9d095ef72 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -14,7 +14,12 @@ RUN apt-get update && apt-get install -y \ avr-libc \ build-essential \ libfox-1.6-dev \ - python-qt4 + python-qt4 \ + qt5-default \ + qttools5-dev \ + qtmultimedia5-dev \ + qttools5-dev-tools \ + libsdl1.2-dev RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ @@ -24,6 +29,5 @@ RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_ wget -q http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb && \ dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb -ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin VOLUME ["/opentx"] -ENTRYPOINT ["python", "/opentx/code/radio/util/build.py"] +ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin:/opentx/code/radio/util From 8d5e5b2d011534d8381aa7e0a5d13ce558e89bc9 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 27 Mar 2016 09:54:41 +0200 Subject: [PATCH 61/98] Warnings fixed on VC++ 2015 --- radio/src/opentx.h | 4 ++-- radio/src/targets/simu/CMakeLists.txt | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index b9da6c379..cc7a82a65 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -222,8 +222,8 @@ #endif #if defined(SIMU) - #ifndef FORCEINLINE - #define FORCEINLINE + #if !defined(FORCEINLINE) + #define FORCEINLINE inline #endif #if !defined(NOINLINE) #define NOINLINE diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index 8a3c123c7..8f8b45d82 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -20,7 +20,6 @@ endif() if(MSVC) set(CMAKE_CXX_FLAGS "/EHsc /LD") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE:MULTIPLE") include_directories(${PROJECT_SOURCE_DIR}/winbuild C:/Programs/pthreads/Pre-built.2/include C:/Programs/msinttypes C:/Programs/dirent/include) target_link_libraries(${SIMULATOR_TARGET} PRIVATE C:/Programs/pthreads/Pre-built.2/lib/pthreadVC2.lib) else() From 7ec0dd8a40a5b4f748893a0cc77f0e6de028a526 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 27 Mar 2016 10:18:31 +0200 Subject: [PATCH 62/98] Qt4 was still required for gtests --- radio/src/tests/CMakeLists.txt | 6 ++---- radio/src/tests/gtests.cpp | 2 +- radio/src/tests/lcd.cpp | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/radio/src/tests/CMakeLists.txt b/radio/src/tests/CMakeLists.txt index 16cde69a2..860442512 100644 --- a/radio/src/tests/CMakeLists.txt +++ b/radio/src/tests/CMakeLists.txt @@ -4,9 +4,6 @@ set(GTEST_SRCDIR /usr/src/gtest) if(EXISTS "${GTEST_SRCDIR}/src/gtest-all.cc") add_library(gtests-lib STATIC EXCLUDE_FROM_ALL ${GTEST_SRCDIR}/src/gtest-all.cc ) target_include_directories(gtests-lib PUBLIC ${GTEST_INCDIR} PUBLIC ${GTEST_SRCDIR}) - - find_package(Qt4 4.8.1 REQUIRED) - include(${QT_USE_FILE}) add_definitions(-DSIMU) set(TESTS_PATH ${RADIO_SRC_DIRECTORY}) configure_file(${RADIO_SRC_DIRECTORY}/tests/location.h.in ${CMAKE_CURRENT_BINARY_DIR}/location.h @ONLY) @@ -19,8 +16,9 @@ if(EXISTS "${GTEST_SRCDIR}/src/gtest-all.cc") file(GLOB TEST_SRC_FILES ${RADIO_SRC_DIRECTORY}/tests/*.cpp) add_executable(gtests EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp) + qt5_use_modules(gtests Core Widgets) add_dependencies(gtests ${FIRMWARE_DEPENDENCIES} gtests-lib) - target_link_libraries(gtests gtests-lib ${QT_LIBRARIES} pthread) + target_link_libraries(gtests gtests-lib pthread) message("Added optional gtests target") else() message("WARNING: can't find gtests source, gtest target will not be available!") diff --git a/radio/src/tests/gtests.cpp b/radio/src/tests/gtests.cpp index c8be129a3..dbec8f7a6 100644 --- a/radio/src/tests/gtests.cpp +++ b/radio/src/tests/gtests.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include +#include #include "gtests.h" int32_t lastAct = 0; diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index 3a1a6794b..2c7d47765 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -20,8 +20,8 @@ #include #include -#include -#include +#include +#include #include #include From 1fba706bdbd5b8c0a275a9d50a3bed23aad8ac27 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 27 Mar 2016 10:33:32 +0200 Subject: [PATCH 63/98] Compilation fixes --- radio/src/opentx.cpp | 2 +- radio/src/targets/9x/board_stock.cpp | 42 +++++++++---------- radio/src/targets/gruvin9x/board_gruvin9x.cpp | 2 +- radio/src/targets/mega2560/board_mega2560.cpp | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index d44aced1e..dabb7ea2c 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -921,7 +921,7 @@ getvalue_t convert8bitsTelemValue(uint8_t channel, ls_telemetry_value_t value) #endif #if defined(FRSKY)&& !defined(CPUARM) -FORCEINLINE void convertUnit(getvalue_t & val, uint8_t & unit) +void convertUnit(getvalue_t & val, uint8_t & unit) { if (IS_IMPERIAL_ENABLE()) { if (unit == UNIT_TEMPERATURE) { diff --git a/radio/src/targets/9x/board_stock.cpp b/radio/src/targets/9x/board_stock.cpp index 05d39fca2..64824144f 100644 --- a/radio/src/targets/9x/board_stock.cpp +++ b/radio/src/targets/9x/board_stock.cpp @@ -1,23 +1,23 @@ -/* - * 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. - */ - +/* + * 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" #if defined(ROTARY_ENCODER_NAVIGATION) @@ -279,7 +279,7 @@ uint8_t trimDown(uint8_t idx) return trimHelper(~PIND, idx); } -FORCEINLINE void readKeysAndTrims() +void readKeysAndTrims() { uint8_t enuk = KEY_MENU; diff --git a/radio/src/targets/gruvin9x/board_gruvin9x.cpp b/radio/src/targets/gruvin9x/board_gruvin9x.cpp index 75dc10ff4..11d4f5d2e 100644 --- a/radio/src/targets/gruvin9x/board_gruvin9x.cpp +++ b/radio/src/targets/gruvin9x/board_gruvin9x.cpp @@ -240,7 +240,7 @@ uint8_t trimDown(uint8_t idx) return (in & pgm_read_byte(crossTrim+idx)); } -FORCEINLINE void readKeysAndTrims() +void readKeysAndTrims() { uint8_t enuk = KEY_MENU; diff --git a/radio/src/targets/mega2560/board_mega2560.cpp b/radio/src/targets/mega2560/board_mega2560.cpp index 1496e3f60..8cd8e97c4 100644 --- a/radio/src/targets/mega2560/board_mega2560.cpp +++ b/radio/src/targets/mega2560/board_mega2560.cpp @@ -165,7 +165,7 @@ uint8_t trimDown(uint8_t idx) return (in & pgm_read_byte(crossTrim+idx)); } -FORCEINLINE void readKeysAndTrims() +void readKeysAndTrims() { uint8_t enuk = KEY_MENU; From 2c256e9e736a7147cb1945b4196d7e993b021241 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 27 Mar 2016 10:46:19 +0200 Subject: [PATCH 64/98] Avoids generating all bitmaps one time per CPU during compilation --- cmake/Bitmaps.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/Bitmaps.cmake b/cmake/Bitmaps.cmake index 16c54a462..145aeff0f 100644 --- a/cmake/Bitmaps.cmake +++ b/cmake/Bitmaps.cmake @@ -1,4 +1,5 @@ macro(add_bitmaps_target targetname filter width format) + set(bitmaps_files) file(GLOB bitmaps ${filter}) foreach(bitmap ${bitmaps}) get_filename_component(target ${bitmap} NAME_WE) From fef78a1b9792ab80665519ff6889d9774c855139 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 27 Mar 2016 10:49:04 +0200 Subject: [PATCH 65/98] Compilation fix --- radio/src/bitmaps/horus/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/bitmaps/horus/CMakeLists.txt b/radio/src/bitmaps/horus/CMakeLists.txt index d1b5ab591..9289b19ec 100644 --- a/radio/src/bitmaps/horus/CMakeLists.txt +++ b/radio/src/bitmaps/horus/CMakeLists.txt @@ -18,4 +18,4 @@ add_bitmaps_target(horus_layouts_masks "${RADIO_SRC_DIRECTORY}/gui/horus/layouts add_bitmaps_target(horus_themes_bitmaps "${RADIO_SRC_DIRECTORY}/gui/horus/themes/*.png" 480 5/6/5) add_bitmaps_target(horus_fonts ${RADIO_SRC_DIRECTORY}/fonts/horus/*.png 480 8bits) add_bitmaps_target(horus_volume_masks ${RADIO_SRC_DIRECTORY}/bitmaps/horus/volume/*.png 480 8bits) -add_dependencies(horus_bitmaps horus_volume_masks horus_calibration_bitmaps horus_alpha_bitmaps horus_alpha_calibration_bitmaps horus_masks horus_slider_masks horus_themes_bitmaps horus_layouts_masks horus_fonts) +add_dependencies(horus_bitmaps horus_calibration_bitmaps horus_button_bitmaps horus_alpha_bitmaps horus_alpha_calibration_bitmaps horus_masks horus_slider_masks horus_layouts_masks horus_themes_bitmaps horus_fonts horus_volume_masks) From 2c00a3437f4e344815fc457d62a17164e86a3abd Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 27 Mar 2016 12:56:48 +0200 Subject: [PATCH 66/98] Checkscreenshot simplification --- radio/src/tests/lcd.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index 2c7d47765..60e31a5d4 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -82,18 +82,11 @@ bool checkScreenshot(const QString & test) QImage buffer(LCD_W, LCD_H, QImage::Format_RGB32); QPainter p(&buffer); doPaint(p); + QString filename(QString("%1_%2x%3.png").arg(test).arg(LCD_W).arg(LCD_H)); - buffer.save("/tmp/" + filename); - QFile screenshot("/tmp/" + filename); - if (!screenshot.open(QIODevice::ReadOnly)) - return false; - QFile reference( TESTS_PATH "/tests/" + filename); - if (!reference.open(QIODevice::ReadOnly)) - return false; - if (reference.readAll() != screenshot.readAll()) - return false; - screenshot.remove(); - return true; + QImage reference(TESTS_PATH "/tests/" + filename); + + return buffer == reference; } #if defined(COLORLCD) From 7e4b5d97e35f4d384266536ac2fb30dc16d1f2ea Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 27 Mar 2016 17:48:24 +0200 Subject: [PATCH 67/98] Compilation fix --- radio/src/targets/gruvin9x/board_gruvin9x.cpp | 2 +- radio/src/targets/mega2560/board_mega2560.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/targets/gruvin9x/board_gruvin9x.cpp b/radio/src/targets/gruvin9x/board_gruvin9x.cpp index 11d4f5d2e..772039990 100644 --- a/radio/src/targets/gruvin9x/board_gruvin9x.cpp +++ b/radio/src/targets/gruvin9x/board_gruvin9x.cpp @@ -164,7 +164,7 @@ void pwrOff() #endif } -FORCEINLINE uint8_t keyDown() +uint8_t keyDown() { return ((~PINL) & 0x3F) || ROTENC_DOWN(); } diff --git a/radio/src/targets/mega2560/board_mega2560.cpp b/radio/src/targets/mega2560/board_mega2560.cpp index 8cd8e97c4..8b2e63437 100644 --- a/radio/src/targets/mega2560/board_mega2560.cpp +++ b/radio/src/targets/mega2560/board_mega2560.cpp @@ -87,7 +87,7 @@ void pwrOff() PORTH &= ~0x10; // PortH-4 set to 0 } -FORCEINLINE uint8_t keyDown() +uint8_t keyDown() { return ((~PINL) & 0x3F) || ROTENC_DOWN(); } From 485d30f65b388f0599b2d7f001f2dc7881c291cd Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 27 Mar 2016 22:38:05 +0200 Subject: [PATCH 68/98] SysTick was configured wrong for Horus --- radio/src/thirdparty/CoOS/OsConfig.h | 66 ++++++++++++++-------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/radio/src/thirdparty/CoOS/OsConfig.h b/radio/src/thirdparty/CoOS/OsConfig.h index ffc41ca1a..2c2fb2db5 100644 --- a/radio/src/thirdparty/CoOS/OsConfig.h +++ b/radio/src/thirdparty/CoOS/OsConfig.h @@ -1,39 +1,39 @@ /** ******************************************************************************* * @file OsConfig.h - * @version V1.1.6 - * @date 2014.05.23 + * @version V1.1.6 + * @date 2014.05.23 * @brief This file use by user to configuration CooCox CoOS. * @note Ensure you have knew every item before modify this file. ******************************************************************************* * @copy * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. * - *

© COPYRIGHT 2014 CooCox

+ *

© COPYRIGHT 2014 CooCox

******************************************************************************* */ @@ -60,18 +60,18 @@ Max number of tasks that can be running. /*!< Idle task stack size(word). */ -#if CFG_CHIP_TYPE == 3 -#define CFG_IDLE_STACK_SIZE (58) -#else +#if CFG_CHIP_TYPE == 3 +#define CFG_IDLE_STACK_SIZE (58) +#else #define CFG_IDLE_STACK_SIZE (25) -#endif +#endif /*!< System frequency (Hz). */ -#if defined(PCBFLAMENCO) || (defined(PCBTARANIS) && defined(REV9E)) +#if defined(PCBFLAMENCO) || (defined(PCBTARANIS) && defined(REV9E)) || defined(PCBHORUS) #define CFG_CPU_FREQ (168000000) -#elif defined(PCBTARANIS) || defined(PCBHORUS) +#elif defined(PCBTARANIS) #define CFG_CPU_FREQ (120000000) #else #define CFG_CPU_FREQ (36000000) // TODO check if really correct for sky9x? From 746dc450fa4ae3e44f228b9dc8ca5a24cc7b8fe7 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 11:24:35 +0200 Subject: [PATCH 69/98] Telemetry files split --- companion/src/simulation/simulatorimport.h | 2 +- radio/src/CMakeLists.txt | 4 +- radio/src/gui/9x/menu_model_telemetry.cpp | 4 +- radio/src/gui/9x/view_telemetry.cpp | 46 +- radio/src/logs.cpp | 48 +- radio/src/maths.cpp | 30 +- radio/src/mixer.cpp | 50 +- radio/src/opentx.h | 21 +- radio/src/simu.cpp | 2 +- .../targets/common_avr/telemetry_driver.cpp | 4 +- radio/src/telemetry/frsky.cpp | 519 +-------- radio/src/telemetry/frsky.h | 209 ++-- radio/src/telemetry/frsky_d.cpp | 188 ++-- radio/src/telemetry/frsky_d_arm.cpp | 8 +- radio/src/telemetry/frsky_sport.cpp | 20 +- radio/src/telemetry/mavlink.h | 54 +- radio/src/telemetry/telemetry.cpp | 989 +++++++----------- radio/src/telemetry/telemetry.h | 145 +-- radio/src/telemetry/telemetry_holders.cpp | 77 ++ radio/src/telemetry/telemetry_holders.h | 54 + radio/src/telemetry/telemetry_sensors.cpp | 693 ++++++++++++ radio/src/telemetry/telemetry_sensors.h | 115 ++ radio/src/tests/frsky.cpp | 34 +- radio/src/tests/gtests.h | 2 +- radio/src/vario.cpp | 4 +- 25 files changed, 1713 insertions(+), 1609 deletions(-) create mode 100644 radio/src/telemetry/telemetry_holders.cpp create mode 100644 radio/src/telemetry/telemetry_holders.h create mode 100644 radio/src/telemetry/telemetry_sensors.cpp create mode 100644 radio/src/telemetry/telemetry_sensors.h diff --git a/companion/src/simulation/simulatorimport.h b/companion/src/simulation/simulatorimport.h index 0a8d7b08f..5bf52b265 100644 --- a/companion/src/simulation/simulatorimport.h +++ b/companion/src/simulation/simulatorimport.h @@ -23,7 +23,7 @@ #ifdef INIT_IMPORT #undef INIT_IMPORT #ifdef FRSKY -frskyStreaming = 20; +telemetryStreaming = 20; #endif #endif diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 4c7bddf22..31dfafc44 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -512,6 +512,8 @@ if(ARCH STREQUAL ARM) tasks_arm.cpp audio_arm.cpp telemetry/telemetry.cpp + telemetry/telemetry_holders.cpp + telemetry/telemetry_sensors.cpp telemetry/frsky.cpp telemetry/frsky_d_arm.cpp telemetry/frsky_sport.cpp @@ -637,7 +639,7 @@ else() option(GPS "GPS support" ON) option(VARIO "Vario support" ON) add_definitions(-DFRSKY) - set(SRC ${SRC} telemetry/frsky.cpp telemetry/frsky_d.cpp) + set(SRC ${SRC} telemetry/telemetry.cpp telemetry/telemetry_holders.cpp telemetry/frsky.cpp telemetry/frsky_d.cpp) set(FIRMWARE_SRC ${FIRMWARE_SRC} targets/common_avr/telemetry_driver.cpp) set(GUI_SRC ${GUI_SRC} view_telemetry.cpp) if(FRSKY_HUB) diff --git a/radio/src/gui/9x/menu_model_telemetry.cpp b/radio/src/gui/9x/menu_model_telemetry.cpp index 53aa9d29d..8d26418ed 100644 --- a/radio/src/gui/9x/menu_model_telemetry.cpp +++ b/radio/src/gui/9x/menu_model_telemetry.cpp @@ -609,7 +609,7 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_A2_LABEL: lcd_putsLeft(y, STR_ACHANNEL); lcdDrawNumber(2*FW, y, ch+1, 0); - putsTelemetryChannelValue(TELEM_COL2+6*FW, y, dest, frskyData.analog[ch].value, LEFT); + putsTelemetryChannelValue(TELEM_COL2+6*FW, y, dest, telemetryData.analog[ch].value, LEFT); break; case ITEM_TELEMETRY_A1_RANGE: @@ -739,7 +739,7 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_FAS_OFFSET: lcd_putsLeft(y, STR_FAS_OFFSET); lcdDrawNumber(TELEM_COL2, y, g_model.frsky.fasOffset, attr|LEFT|PREC1); - lcdDrawNumber(TELEM_COL2+6*FW, y, frskyData.hub.current, LEFT|PREC1); + lcdDrawNumber(TELEM_COL2+6*FW, y, telemetryData.hub.current, LEFT|PREC1); lcdDrawChar(TELEM_COL2+8*FW, y, 'A'); if (attr) g_model.frsky.fasOffset = checkIncDec(event, g_model.frsky.fasOffset, -120, 120, EE_MODEL); break; diff --git a/radio/src/gui/9x/view_telemetry.cpp b/radio/src/gui/9x/view_telemetry.cpp index 805813d72..816bc6d90 100644 --- a/radio/src/gui/9x/view_telemetry.cpp +++ b/radio/src/gui/9x/view_telemetry.cpp @@ -38,7 +38,7 @@ void displayRssiLine() lcdDrawSolidHorizontalLine(0, 55, 128, 0); // separator uint8_t rssi; #if !defined(CPUARM) - rssi = min((uint8_t)99, frskyData.rssi[1].value); + rssi = min((uint8_t)99, telemetryData.rssi[1].value); lcd_putsLeft(STATUS_BAR_Y, STR_TX); lcdDrawNumber(4*FW+1, STATUS_BAR_Y, rssi, LEADING0, 2); lcdDrawRect(BAR_LEFT+1, 57, 38, 7); lcdDrawFilledRect(BAR_LEFT+1, 58, 4*rssi/11, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID); @@ -59,17 +59,17 @@ void displayRssiLine() void displayGpsTime() { uint8_t att = (TELEMETRY_STREAMING() ? LEFT|LEADING0 : LEFT|LEADING0|BLINK); - lcdDrawNumber(CENTER_OFS+6*FW+7, STATUS_BAR_Y, frskyData.hub.hour, att, 2); + lcdDrawNumber(CENTER_OFS+6*FW+7, STATUS_BAR_Y, telemetryData.hub.hour, att, 2); lcdDrawChar(CENTER_OFS+8*FW+4, STATUS_BAR_Y, ':', att); - lcdDrawNumber(CENTER_OFS+9*FW+2, STATUS_BAR_Y, frskyData.hub.min, att, 2); + lcdDrawNumber(CENTER_OFS+9*FW+2, STATUS_BAR_Y, telemetryData.hub.min, att, 2); lcdDrawChar(CENTER_OFS+11*FW-1, STATUS_BAR_Y, ':', att); - lcdDrawNumber(CENTER_OFS+12*FW-3, STATUS_BAR_Y, frskyData.hub.sec, att, 2); + lcdDrawNumber(CENTER_OFS+12*FW-3, STATUS_BAR_Y, telemetryData.hub.sec, att, 2); lcdInvertLastLine(); } void displayGpsCoord(uint8_t y, char direction, int16_t bp, int16_t ap) { - if (frskyData.hub.gpsFix >= 0) { + if (telemetryData.hub.gpsFix >= 0) { if (!direction) direction = '-'; lcdDrawNumber(TELEM_2ND_COLUMN, y, bp / 100, LEFT); // ddd before '.' lcdDrawChar(lcdLastPos, y, '@'); @@ -107,9 +107,9 @@ void displayVoltageScreenLine(uint8_t y, uint8_t index) { drawStringWithIndex(0, y, STR_A, index+1, 0); if (TELEMETRY_STREAMING()) { - putsTelemetryChannelValue(3*FW+6*FW+4, y-FH, index+TELEM_A1-1, frskyData.analog[index].value, DBLSIZE); - lcdDrawChar(12*FW-1, y-FH, '<'); putsTelemetryChannelValue(17*FW, y-FH, index+TELEM_A1-1, frskyData.analog[index].min, NO_UNIT); - lcdDrawChar(12*FW, y, '>'); putsTelemetryChannelValue(17*FW, y, index+TELEM_A1-1, frskyData.analog[index].max, NO_UNIT); + putsTelemetryChannelValue(3*FW+6*FW+4, y-FH, index+TELEM_A1-1, telemetryData.analog[index].value, DBLSIZE); + lcdDrawChar(12*FW-1, y-FH, '<'); putsTelemetryChannelValue(17*FW, y-FH, index+TELEM_A1-1, telemetryData.analog[index].min, NO_UNIT); + lcdDrawChar(12*FW, y, '>'); putsTelemetryChannelValue(17*FW, y, index+TELEM_A1-1, telemetryData.analog[index].max, NO_UNIT); } } #endif @@ -142,10 +142,10 @@ void displayVoltagesScreen() break; #if defined(FRSKY_HUB) case FRSKY_VOLTS_SOURCE_FAS: - putsTelemetryChannelValue(3*FW+6*FW+4, FH, TELEM_VFAS-1, frskyData.hub.vfas, DBLSIZE); + putsTelemetryChannelValue(3*FW+6*FW+4, FH, TELEM_VFAS-1, telemetryData.hub.vfas, DBLSIZE); break; case FRSKY_VOLTS_SOURCE_CELLS: - putsTelemetryChannelValue(3*FW+6*FW+4, FH, TELEM_CELLS_SUM-1, frskyData.hub.cellsSum, DBLSIZE); + putsTelemetryChannelValue(3*FW+6*FW+4, FH, TELEM_CELLS_SUM-1, telemetryData.hub.cellsSum, DBLSIZE); break; #endif } @@ -159,13 +159,13 @@ void displayVoltagesScreen() break; #if defined(FRSKY_HUB) case FRSKY_CURRENT_SOURCE_FAS: - putsTelemetryChannelValue(3*FW+6*FW+4, 3*FH, TELEM_CURRENT-1, frskyData.hub.current, DBLSIZE); + putsTelemetryChannelValue(3*FW+6*FW+4, 3*FH, TELEM_CURRENT-1, telemetryData.hub.current, DBLSIZE); break; #endif } - putsTelemetryChannelValue(4, 5*FH, TELEM_POWER-1, frskyData.hub.power, LEFT|DBLSIZE); - putsTelemetryChannelValue(3*FW+4+4*FW+6*FW+FW, 5*FH, TELEM_CONSUMPTION-1, frskyData.hub.currentConsumption, DBLSIZE); + putsTelemetryChannelValue(4, 5*FH, TELEM_POWER-1, telemetryData.hub.power, LEFT|DBLSIZE); + putsTelemetryChannelValue(3*FW+4+4*FW+6*FW+FW, 5*FH, TELEM_CONSUMPTION-1, telemetryData.hub.currentConsumption, DBLSIZE); } else { displayVoltageScreenLine(analog > 0 ? 5*FH : 4*FH, analog ? 2-analog : 0); @@ -174,11 +174,11 @@ void displayVoltagesScreen() #if defined(FRSKY_HUB) // Cells voltage - if (frskyData.hub.cellsCount > 0) { + if (telemetryData.hub.cellsCount > 0) { uint8_t y = 1*FH; - for (uint8_t k=0; k frskyData.hub.pilotLatitude) ? lat - frskyData.hub.pilotLatitude : frskyData.hub.pilotLatitude - lat; + uint32_t angle = (lat > telemetryData.hub.pilotLatitude) ? lat - telemetryData.hub.pilotLatitude : telemetryData.hub.pilotLatitude - lat; uint32_t dist = EARTH_RADIUS * angle / 1000000; uint32_t result = dist*dist; - angle = (lng > frskyData.hub.pilotLongitude) ? lng - frskyData.hub.pilotLongitude : frskyData.hub.pilotLongitude - lng; - dist = frskyData.hub.distFromEarthAxis * angle / 1000000; + angle = (lng > telemetryData.hub.pilotLongitude) ? lng - telemetryData.hub.pilotLongitude : telemetryData.hub.pilotLongitude - lng; + dist = telemetryData.hub.distFromEarthAxis * angle / 1000000; result += dist*dist; dist = abs(TELEMETRY_BARO_ALT_AVAILABLE() ? TELEMETRY_RELATIVE_BARO_ALT_BP : TELEMETRY_RELATIVE_GPS_ALT_BP); result += dist*dist; - frskyData.hub.gpsDistance = isqrt32(result); - if (frskyData.hub.gpsDistance > frskyData.hub.maxGpsDistance) - frskyData.hub.maxGpsDistance = frskyData.hub.gpsDistance; + telemetryData.hub.gpsDistance = isqrt32(result); + if (telemetryData.hub.gpsDistance > telemetryData.hub.maxGpsDistance) + telemetryData.hub.maxGpsDistance = telemetryData.hub.gpsDistance; } #endif diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 0aa5b9f17..2fdb56b87 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -370,39 +370,39 @@ getvalue_t getValue(mixsrc_t i) } } #elif defined(FRSKY) - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_TX) return frskyData.rssi[1].value; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_RX) return frskyData.rssi[0].value; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A1) return frskyData.analog[TELEM_ANA_A1].value; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A2) return frskyData.analog[TELEM_ANA_A2].value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_TX) return telemetryData.rssi[1].value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_RX) return telemetryData.rssi[0].value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A1) return telemetryData.analog[TELEM_ANA_A1].value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A2) return telemetryData.analog[TELEM_ANA_A2].value; #if defined(FRSKY_SPORT) - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ALT) return frskyData.hub.baroAltitude; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ALT) return telemetryData.hub.baroAltitude; #elif defined(FRSKY_HUB) || defined(WS_HOW_HIGH) else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ALT) return TELEMETRY_RELATIVE_BARO_ALT_BP; #endif #if defined(FRSKY_HUB) - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RPM) return frskyData.hub.rpm; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_FUEL) return frskyData.hub.fuelLevel; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T1) return frskyData.hub.temperature1; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T2) return frskyData.hub.temperature2; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RPM) return telemetryData.hub.rpm; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_FUEL) return telemetryData.hub.fuelLevel; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T1) return telemetryData.hub.temperature1; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T2) return telemetryData.hub.temperature2; else if (i==MIXSRC_FIRST_TELEM-1+TELEM_SPEED) return TELEMETRY_GPS_SPEED_BP; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DIST) return frskyData.hub.gpsDistance; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DIST) return telemetryData.hub.gpsDistance; else if (i==MIXSRC_FIRST_TELEM-1+TELEM_GPSALT) return TELEMETRY_RELATIVE_GPS_ALT_BP; else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CELL) return (int16_t)TELEMETRY_MIN_CELL_VOLTAGE; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM) return (int16_t)frskyData.hub.cellsSum; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VFAS) return (int16_t)frskyData.hub.vfas; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CURRENT) return (int16_t)frskyData.hub.current; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CONSUMPTION) return frskyData.hub.currentConsumption; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_POWER) return frskyData.hub.power; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCx) return frskyData.hub.accelX; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCy) return frskyData.hub.accelY; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCz) return frskyData.hub.accelZ; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_HDG) return frskyData.hub.gpsCourse_bp; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VSPEED) return frskyData.hub.varioSpeed; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ASPEED) return frskyData.hub.airSpeed; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DTE) return frskyData.hub.dTE; - else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1) return frskyData.analog[TELEM_ANA_A1].min; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2) return frskyData.analog[TELEM_ANA_A2].min; - else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_CSW_MAX) return *(((int16_t*)(&frskyData.hub.minAltitude))+i-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT)); + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM) return (int16_t)telemetryData.hub.cellsSum; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VFAS) return (int16_t)telemetryData.hub.vfas; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CURRENT) return (int16_t)telemetryData.hub.current; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CONSUMPTION) return telemetryData.hub.currentConsumption; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_POWER) return telemetryData.hub.power; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCx) return telemetryData.hub.accelX; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCy) return telemetryData.hub.accelY; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCz) return telemetryData.hub.accelZ; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_HDG) return telemetryData.hub.gpsCourse_bp; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VSPEED) return telemetryData.hub.varioSpeed; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ASPEED) return telemetryData.hub.airSpeed; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DTE) return telemetryData.hub.dTE; + else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1) return telemetryData.analog[TELEM_ANA_A1].min; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2) return telemetryData.analog[TELEM_ANA_A2].min; + else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_CSW_MAX) return *(((int16_t*)(&telemetryData.hub.minAltitude))+i-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT)); #endif #endif else return 0; diff --git a/radio/src/opentx.h b/radio/src/opentx.h index cc7a82a65..55d3f157a 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1301,26 +1301,7 @@ void evalFunctions(); extern volatile rotenc_t g_rotenc[1]; #endif -#if defined(CPUARM) - #include "telemetry/telemetry.h" -#endif - -#if defined (FRSKY) - // FrSky Telemetry - #include "telemetry/frsky.h" -#elif defined(JETI) - // Jeti-DUPLEX Telemetry - #include "telemetry/jeti.h" -#elif defined(ARDUPILOT) - // ArduPilot Telemetry - #include "telemetry/ardupilot.h" -#elif defined(NMEA) - // NMEA Telemetry - #include "telemetry/nmea.h" -#elif defined(MAVLINK) - // Mavlink Telemetry - #include "telemetry/mavlink.h" -#endif +#include "telemetry/telemetry.h" #if defined(CPUARM) uint16_t crc16(uint8_t * buf, uint32_t len); diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 57f7c4201..c9adee146 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -524,7 +524,7 @@ int main(int argc,char **argv) #endif #if defined(FRSKY) && !defined(FRSKY_SPORT) - frskyStreaming = 1; + telemetryStreaming = 1; #endif printf("Model size = %d\n", (int)sizeof(g_model)); diff --git a/radio/src/targets/common_avr/telemetry_driver.cpp b/radio/src/targets/common_avr/telemetry_driver.cpp index 2388f3794..da3ebbdfc 100644 --- a/radio/src/targets/common_avr/telemetry_driver.cpp +++ b/radio/src/targets/common_avr/telemetry_driver.cpp @@ -33,7 +33,7 @@ void telemetryEnableRx(void) UCSRB_N(TLM_USART) |= (1 << RXCIE_N(TLM_USART)); // enable Interrupt } -void processSerialData(uint8_t data); +void processFrskyTelemetryData(uint8_t data); extern uint8_t frskyRxBufferCount; // TODO not driver, change name ISR(USART_RX_vect_N(TLM_USART)) @@ -82,7 +82,7 @@ ISR(USART_RX_vect_N(TLM_USART)) frskyRxBufferCount = 0; } else { - processSerialData(data); + processFrskyTelemetryData(data); } cli() ; diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 934dc5437..345002f56 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -18,113 +18,14 @@ * GNU General Public License for more details. */ -#include "../opentx.h" +#include "opentx.h" -uint8_t frskyStreaming = 0; - -#if defined(WS_HOW_HIGH) -uint8_t frskyUsrStreaming = 0; -#endif - -uint8_t link_counter = 0; - -#define FRSKY_RX_PACKET_SIZE 19 uint8_t frskyRxBuffer[FRSKY_RX_PACKET_SIZE]; // Receive buffer. 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) - -#if !defined(CPUARM) && !defined(PCBFLAMENCO) -uint8_t frskyTxBuffer[FRSKY_TX_PACKET_SIZE]; -#endif - -#if !defined(CPUARM) -uint8_t frskyTxBufferCount = 0; -#endif - -#if defined(CPUARM) -uint8_t telemetryState = TELEMETRY_INIT; -#endif - uint8_t frskyRxBufferCount = 0; -FrskyData frskyData; - -#if defined(CPUARM) -uint8_t telemetryProtocol = 255; -#if defined(REVX) -uint8_t serialInversion = 0; -#endif -#define IS_FRSKY_D_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_D) -#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_SPORT) -#else -#define IS_FRSKY_D_PROTOCOL() (true) -#define IS_FRSKY_SPORT_PROTOCOL() (false) -#endif - -#if defined(CPUARM) -void FrskyValueWithMin::reset() -{ - memclear(this, sizeof(*this)); -} -#endif - -void FrskyValueWithMin::set(uint8_t value) -{ -#if defined(CPUARM) - if (this->value == 0) { - memset(values, value, TELEMETRY_AVERAGE_COUNT); - this->value = value; - } - else { - //calculate the average from values[] and value - //also shift readings in values [] array - unsigned int sum = values[0]; - for (int i=0; ivalue = sum/(TELEMETRY_AVERAGE_COUNT+1); - } -#else - if (this->value == 0) { - this->value = value; - } - else { - sum += value; - if (link_counter == 0) { - this->value = sum / (IS_FRSKY_D_PROTOCOL() ? FRSKY_D_AVERAGING : FRSKY_SPORT_AVERAGING); - sum = 0; - } - } -#endif - - if (!min || value < min) { - min = value; - } -} - -void FrskyValueWithMinMax::set(uint8_t value, uint8_t unit) -{ - FrskyValueWithMin::set(value); - if (unit != UNIT_VOLTS) { - this->value = value; - } - if (!max || value > max) { - max = value; - } -} - #if !defined(CPUARM) -uint16_t getChannelRatio(source_t channel) -{ - return (uint16_t)g_model.frsky.channels[channel].ratio << g_model.frsky.channels[channel].multiplier; -} - -lcdint_t applyChannelRatio(source_t channel, lcdint_t val) -{ - return ((int32_t)val+g_model.frsky.channels[channel].offset) * getChannelRatio(channel) * 2 / 51; -} +uint8_t frskyTxBuffer[FRSKY_TX_PACKET_SIZE]; +uint8_t frskyTxBufferCount = 0; #endif #if defined(TELEMETREZ) @@ -138,7 +39,7 @@ extern uint8_t TrotCount; extern uint8_t TezRotary; #endif -NOINLINE void processSerialData(uint8_t data) +NOINLINE void processFrskyTelemetryData(uint8_t data) { static uint8_t dataState = STATE_DATA_IDLE; @@ -166,8 +67,7 @@ NOINLINE void processSerialData(uint8_t data) } #endif - switch (dataState) - { + switch (dataState) { case STATE_DATA_START: if (data == START_STOP) { if (IS_FRSKY_SPORT_PROTOCOL()) { @@ -262,412 +162,23 @@ NOINLINE void processSerialData(uint8_t data) #endif } -void telemetryWakeup() -{ -#if defined(CPUARM) - uint8_t requiredTelemetryProtocol = MODEL_TELEMETRY_PROTOCOL(); -#if defined(REVX) - uint8_t requiredSerialInversion = g_model.moduleData[EXTERNAL_MODULE].invertedSerial; - if (telemetryProtocol != requiredTelemetryProtocol || serialInversion != requiredSerialInversion) { - serialInversion = requiredSerialInversion; -#else - if (telemetryProtocol != requiredTelemetryProtocol) { -#endif - telemetryInit(requiredTelemetryProtocol); - telemetryProtocol = requiredTelemetryProtocol; - } -#endif - -#if defined(CPUSTM32) - uint8_t data; -#if defined(LOG_TELEMETRY) && !defined(SIMU) - static tmr10ms_t lastTime = 0; - tmr10ms_t newTime = get_tmr10ms(); - struct gtm utm; - gettime(&utm); -#endif - while (telemetryFifo.pop(data)) { - processSerialData(data); -#if defined(LOG_TELEMETRY) && !defined(SIMU) - extern FIL g_telemetryFile; - if (lastTime != newTime) { - f_printf(&g_telemetryFile, "\r\n%4d-%02d-%02d,%02d:%02d:%02d.%02d0: %02X", utm.tm_year+1900, utm.tm_mon+1, utm.tm_mday, utm.tm_hour, utm.tm_min, utm.tm_sec, g_ms100, data); - lastTime = newTime; - } - else { - f_printf(&g_telemetryFile, " %02X", data); - } -#endif - } -#elif defined(PCBSKY9X) - if (telemetryProtocol == PROTOCOL_FRSKY_D_SECONDARY) { - uint8_t data; - while (telemetrySecondPortReceive(data)) { - processSerialData(data); - } - } - else { - // Receive serial data here - rxPdcUsart(processSerialData); - } -#endif - -#if !defined(CPUARM) - if (IS_FRSKY_D_PROTOCOL()) { - // Attempt to transmit any waiting Fr-Sky alarm set packets every 50ms (subject to packet buffer availability) - static uint8_t frskyTxDelay = 5; - if (frskyAlarmsSendState && (--frskyTxDelay == 0)) { - frskyTxDelay = 5; // 50ms -#if !defined(SIMU) - frskyDSendNextAlarm(); -#endif - } - } -#endif - -#if defined(CPUARM) - for (int i=0; i 0x33) -#else - #define FRSKY_BAD_ANTENNA() (frskyData.swr.value > 0x33) -#endif - -#if defined(CPUARM) - static tmr10ms_t alarmsCheckTime = 0; - #define SCHEDULE_NEXT_ALARMS_CHECK(seconds) alarmsCheckTime = get_tmr10ms() + (100*(seconds)) - if (int32_t(get_tmr10ms() - alarmsCheckTime) > 0) { - - SCHEDULE_NEXT_ALARMS_CHECK(1/*second*/); - - uint8_t now = TelemetryItem::now(); - bool sensor_lost = false; - for (int i=0; i TELEMETRY_VALUE_OLD_THRESHOLD) { - sensor_lost = true; - telemetryItems[i].lastReceived = TELEMETRY_VALUE_OLD; - TelemetrySensor * sensor = & g_model.telemetrySensors[i]; - if (sensor->unit == UNIT_DATETIME) { - telemetryItems[i].datetime.datestate = 0; - telemetryItems[i].datetime.timestate = 0; - } - } - } - } - if (sensor_lost && TELEMETRY_STREAMING()) { - audioEvent(AU_SENSOR_LOST); - } - -#if defined(PCBTARANIS) - if ((g_model.moduleData[INTERNAL_MODULE].rfProtocol != RF_PROTO_OFF || g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) && FRSKY_BAD_ANTENNA()) { - AUDIO_SWR_RED(); - POPUP_WARNING(STR_ANTENNAPROBLEM); - SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); - } -#endif - - if (TELEMETRY_STREAMING()) { - if (getRssiAlarmValue(1) && TELEMETRY_RSSI() < getRssiAlarmValue(1)) { - AUDIO_RSSI_RED(); - SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); - } - else if (getRssiAlarmValue(0) && TELEMETRY_RSSI() < getRssiAlarmValue(0)) { - AUDIO_RSSI_ORANGE(); - SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); - } - } - } - - if (TELEMETRY_STREAMING()) { - if (telemetryState == TELEMETRY_KO) { - AUDIO_TELEMETRY_BACK(); - } - telemetryState = TELEMETRY_OK; - } - else if (telemetryState == TELEMETRY_OK) { - telemetryState = TELEMETRY_KO; - AUDIO_TELEMETRY_LOST(); - } -#endif -} - -void telemetryInterrupt10ms() -{ -#if defined(CPUARM) -#elif defined(FRSKY_HUB) - uint16_t voltage = 0; /* unit: 1/10 volts */ - for (uint8_t i=0; i>1) * (voltage>>1)) / 25; - - frskyData.hub.currentPrescale += current; - if (frskyData.hub.currentPrescale >= 3600) { - frskyData.hub.currentConsumption += 1; - frskyData.hub.currentPrescale -= 3600; - } -#endif - } - -#if !defined(CPUARM) - if (frskyData.hub.power > frskyData.hub.maxPower) { - frskyData.hub.maxPower = frskyData.hub.power; - } -#endif - } - -#if defined(WS_HOW_HIGH) - if (frskyUsrStreaming > 0) { - frskyUsrStreaming--; - } -#endif - - if (frskyStreaming > 0) { - frskyStreaming--; - } - else { -#if !defined(SIMU) -#if defined(CPUARM) - frskyData.rssi.reset(); -#else - frskyData.rssi[0].set(0); - frskyData.rssi[1].set(0); -#endif -#endif - } -} - -void telemetryReset() -{ - memclear(&frskyData, sizeof(frskyData)); - -#if defined(CPUARM) - for (int index=0; index Cell number + Cell voltage - uint8_t battnumber = ((frskyData.hub.volts & 0x00F0) >> 4); + uint8_t battnumber = ((telemetryData.hub.volts & 0x00F0) >> 4); if (battnumber < 12) { - if (frskyData.hub.cellsCount < battnumber+1) { - frskyData.hub.cellsCount = battnumber+1; + if (telemetryData.hub.cellsCount < battnumber+1) { + telemetryData.hub.cellsCount = battnumber+1; } - uint8_t cellVolts = (uint8_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 10); - frskyData.hub.cellVolts[battnumber] = cellVolts; - if (!frskyData.hub.minCellVolts || cellVolts> 8) + ((telemetryData.hub.volts & 0x000F) << 8))) / 10); + telemetryData.hub.cellVolts[battnumber] = cellVolts; + if (!telemetryData.hub.minCellVolts || cellVolts * luaInputTelemetryFifo = NULL; -Fifo * luaOutputTelemetryFifo = NULL; -#endif diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index a5187bbfe..2ede667a1 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -21,7 +21,7 @@ #ifndef _FRSKY_H_ #define _FRSKY_H_ -#include +#include "telemetry_holders.h" #define FRSKY_SPORT_BAUDRATE 57600 #define FRSKY_D_BAUDRATE 9600 @@ -161,59 +161,9 @@ #define DATA_ID_SP2UH 0x45 // 5 #define DATA_ID_SP2UR 0xC6 // 6 - -// Global Fr-Sky telemetry data variables -extern uint8_t frskyStreaming; // >0 (true) == data is streaming in. 0 = nodata detected for some time - -#if defined(WS_HOW_HIGH) -extern uint8_t frskyUsrStreaming; -#endif - -extern uint8_t link_counter; - -#if defined(CPUARM) -enum TelemetryStates { - TELEMETRY_INIT, - TELEMETRY_OK, - TELEMETRY_KO -}; - -extern uint8_t telemetryState; -#endif - -#if defined(CPUARM) -#define TELEMETRY_AVERAGE_COUNT 3 // we actually average one more reading! -#define RAW_FRSKY_MINMAX(v) v.values[TELEMETRY_AVERAGE_COUNT-1] -class FrskyValueWithMin { - public: - uint8_t value; // fitered value (average of last TELEMETRY_AVERAGE_COUNT+1 values) - uint8_t min; - uint8_t values[TELEMETRY_AVERAGE_COUNT]; - void set(uint8_t value); - void reset(); -}; -#else -#define RAW_FRSKY_MINMAX(v) v.value -class FrskyValueWithMin { - public: - uint8_t value; - uint8_t min; - uint16_t sum; - void set(uint8_t value); -}; -#endif - -class FrskyValueWithMinMax: public FrskyValueWithMin { - public: - uint8_t max; - void set(uint8_t value, uint8_t unit); -}; - -#if defined(CPUARM) - - -#elif defined(FRSKY_HUB) -PACK(struct FrskySerialData { +#if !defined(CPUARM) +#if defined(FRSKY_HUB) +PACK(struct FrskyTelemetryData { int16_t baroAltitudeOffset; // spare reused int16_t gpsAltitude_bp; // 0x01 before punct int16_t temperature1; // 0x02 -20 .. 250 deg. celcius @@ -291,7 +241,7 @@ PACK(struct FrskySerialData { int16_t dTE; }); #elif defined(WS_HOW_HIGH) -PACK(struct FrskySerialData { +PACK(struct FrskyTelemetryData { int16_t baroAltitude_bp; // 0..9,999 meters int16_t baroAltitudeOffset; int16_t minAltitude; @@ -305,7 +255,7 @@ PACK(struct FrskySerialData { #endif }); #elif defined(VARIO) -PACK(struct FrskySerialData { +PACK(struct FrskyTelemetryData { int16_t varioSpeed; // Vertical speed in cm/s uint16_t currentConsumption; uint16_t currentPrescale; @@ -313,41 +263,17 @@ PACK(struct FrskySerialData { uint16_t maxPower; }); #else -PACK(struct FrskySerialData { +PACK(struct FrskyTelemetryData { uint16_t currentConsumption; uint16_t currentPrescale; uint16_t power; uint16_t maxPower; }); #endif - -enum TelemAnas { - TELEM_ANA_A1, - TELEM_ANA_A2, -#if defined(CPUARM) - TELEM_ANA_A3, - TELEM_ANA_A4, -#endif - TELEM_ANA_COUNT -}; - -#if defined(CPUARM) -struct FrskyData { - FrskyValueWithMin swr; // TODO Min not needed - FrskyValueWithMin rssi; // TODO Min not needed - uint16_t xjtVersion; - bool varioHighPrecision; -}; -#else -struct FrskyData { - FrskyValueWithMinMax analog[TELEM_ANA_COUNT]; - FrskyValueWithMin rssi[2]; - FrskySerialData hub; -}; #endif #if defined(PCBTARANIS) && defined(REVPLUS) - #define IS_VALID_XJT_VERSION() (frskyData.xjtVersion != 0 && frskyData.xjtVersion != 0xff) + #define IS_VALID_XJT_VERSION() (telemetryData.xjtVersion != 0 && telemetryData.xjtVersion != 0xff) #else #define IS_VALID_XJT_VERSION() (1) #endif @@ -364,101 +290,99 @@ enum AlarmLevel { #define ALARM_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3) #if defined(CPUARM) - #define TELEMETRY_STREAMING() (frskyData.rssi.value > 0) - #define TELEMETRY_RSSI() (frskyData.rssi.value) - #define TELEMETRY_RSSI_MIN() (frskyData.rssi.min) + #define TELEMETRY_STREAMING() (telemetryData.rssi.value > 0) + #define TELEMETRY_RSSI() (telemetryData.rssi.value) + #define TELEMETRY_RSSI_MIN() (telemetryData.rssi.min) #define TELEMETRY_CELL_VOLTAGE_MUTLIPLIER 1 - #define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp - #define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap + #define TELEMETRY_GPS_SPEED_BP telemetryData.hub.gpsSpeed_bp + #define TELEMETRY_GPS_SPEED_AP telemetryData.hub.gpsSpeed_ap - #define TELEMETRY_ABSOLUTE_GPS_ALT (frskyData.hub.gpsAltitude) - #define TELEMETRY_RELATIVE_GPS_ALT (frskyData.hub.gpsAltitude + frskyData.hub.gpsAltitudeOffset) + #define TELEMETRY_ABSOLUTE_GPS_ALT (telemetryData.hub.gpsAltitude) + #define TELEMETRY_RELATIVE_GPS_ALT (telemetryData.hub.gpsAltitude + telemetryData.hub.gpsAltitudeOffset) #define TELEMETRY_RELATIVE_GPS_ALT_BP (TELEMETRY_RELATIVE_GPS_ALT / 100) - #define TELEMETRY_RELATIVE_BARO_ALT_BP (frskyData.hub.baroAltitude / 100) - #define TELEMETRY_RELATIVE_BARO_ALT_AP (frskyData.hub.baroAltitude % 100) + #define TELEMETRY_RELATIVE_BARO_ALT_BP (telemetryData.hub.baroAltitude / 100) + #define TELEMETRY_RELATIVE_BARO_ALT_AP (telemetryData.hub.baroAltitude % 100) - #define TELEMETRY_BARO_ALT_PREPARE() div_t baroAltitudeDivision = div(getConvertedTelemetryValue(frskyData.hub.baroAltitude, UNIT_DIST), 100) + #define TELEMETRY_BARO_ALT_PREPARE() div_t baroAltitudeDivision = div(getConvertedTelemetryValue(telemetryData.hub.baroAltitude, UNIT_DIST), 100) #define TELEMETRY_BARO_ALT_FORMAT "%c%d.%02d," - #define TELEMETRY_BARO_ALT_ARGS frskyData.hub.baroAltitude < 0 ? '-' : ' ', abs(baroAltitudeDivision.quot), abs(baroAltitudeDivision.rem), + #define TELEMETRY_BARO_ALT_ARGS telemetryData.hub.baroAltitude < 0 ? '-' : ' ', abs(baroAltitudeDivision.quot), abs(baroAltitudeDivision.rem), #define TELEMETRY_GPS_ALT_FORMAT "%c%d.%02d," - #define TELEMETRY_GPS_ALT_ARGS frskyData.hub.gpsAltitude < 0 ? '-' : ' ', abs(frskyData.hub.gpsAltitude / 100), abs(frskyData.hub.gpsAltitude % 100), + #define TELEMETRY_GPS_ALT_ARGS telemetryData.hub.gpsAltitude < 0 ? '-' : ' ', abs(telemetryData.hub.gpsAltitude / 100), abs(telemetryData.hub.gpsAltitude % 100), #define TELEMETRY_SPEED_UNIT (IS_IMPERIAL_ENABLE() ? SPEED_UNIT_IMP : SPEED_UNIT_METR) #define TELEMETRY_GPS_SPEED_FORMAT "%d," - #define TELEMETRY_GPS_SPEED_ARGS frskyData.hub.gpsSpeed_bp, + #define TELEMETRY_GPS_SPEED_ARGS telemetryData.hub.gpsSpeed_bp, #if defined(CPUARM) - #define TELEMETRY_CELLS_ARGS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100, TELEMETRY_CELL_VOLTAGE(6)/100, TELEMETRY_CELL_VOLTAGE(6)%100, TELEMETRY_CELL_VOLTAGE(7)/100, TELEMETRY_CELL_VOLTAGE(7)%100, TELEMETRY_CELL_VOLTAGE(8)/100, TELEMETRY_CELL_VOLTAGE(8)%100, TELEMETRY_CELL_VOLTAGE(9)/100, TELEMETRY_CELL_VOLTAGE(9)%100, TELEMETRY_CELL_VOLTAGE(10)/100, TELEMETRY_CELL_VOLTAGE(10)%100, TELEMETRY_CELL_VOLTAGE(11)/100, TELEMETRY_CELL_VOLTAGE(11)%100, + #define TELEMETRY_CELLS_ARGS telemetryData.hub.cellsSum / 10, telemetryData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100, TELEMETRY_CELL_VOLTAGE(6)/100, TELEMETRY_CELL_VOLTAGE(6)%100, TELEMETRY_CELL_VOLTAGE(7)/100, TELEMETRY_CELL_VOLTAGE(7)%100, TELEMETRY_CELL_VOLTAGE(8)/100, TELEMETRY_CELL_VOLTAGE(8)%100, TELEMETRY_CELL_VOLTAGE(9)/100, TELEMETRY_CELL_VOLTAGE(9)%100, TELEMETRY_CELL_VOLTAGE(10)/100, TELEMETRY_CELL_VOLTAGE(10)%100, TELEMETRY_CELL_VOLTAGE(11)/100, TELEMETRY_CELL_VOLTAGE(11)%100, #define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," #define TELEMETRY_CELLS_LABEL "Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6,Cell 7,Cell 8,Cell 9,Cell 10,Cell 11,Cell 12," #else - #define TELEMETRY_CELLS_ARGS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100, + #define TELEMETRY_CELLS_ARGS telemetryData.hub.cellsSum / 10, telemetryData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100, #define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," #define TELEMETRY_CELLS_LABEL "Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6," #endif #define TELEMETRY_CURRENT_FORMAT "%d.%d," - #define TELEMETRY_CURRENT_ARGS frskyData.hub.current / 10, frskyData.hub.current % 10, + #define TELEMETRY_CURRENT_ARGS telemetryData.hub.current / 10, telemetryData.hub.current % 10, #define TELEMETRY_VFAS_FORMAT "%d.%d," - #define TELEMETRY_VFAS_ARGS frskyData.hub.vfas / 10, frskyData.hub.vfas % 10, + #define TELEMETRY_VFAS_ARGS telemetryData.hub.vfas / 10, telemetryData.hub.vfas % 10, #define TELEMETRY_VSPEED_FORMAT "%c%d.%02d," - #define TELEMETRY_VSPEED_ARGS frskyData.hub.varioSpeed < 0 ? '-' : ' ', abs(frskyData.hub.varioSpeed / 100), abs(frskyData.hub.varioSpeed % 100), + #define TELEMETRY_VSPEED_ARGS telemetryData.hub.varioSpeed < 0 ? '-' : ' ', abs(telemetryData.hub.varioSpeed / 100), abs(telemetryData.hub.varioSpeed % 100), #define TELEMETRY_ASPEED_FORMAT "%d.%d," - #define TELEMETRY_ASPEED_ARGS frskyData.hub.airSpeed / 10, frskyData.hub.airSpeed % 10, + #define TELEMETRY_ASPEED_ARGS telemetryData.hub.airSpeed / 10, telemetryData.hub.airSpeed % 10, #define TELEMETRY_OPENXSENSOR() (0) #else - #define TELEMETRY_STREAMING() (frskyStreaming > 0) - #define TELEMETRY_RSSI() (frskyData.rssi[0].value) - #define TELEMETRY_RSSI_MIN() (frskyData.rssi[0].min) + #define TELEMETRY_STREAMING() (telemetryStreaming > 0) + #define TELEMETRY_RSSI() (telemetryData.rssi[0].value) + #define TELEMETRY_RSSI_MIN() (telemetryData.rssi[0].min) #define TELEMETRY_CELL_VOLTAGE_MUTLIPLIER 2 - #define TELEMETRY_BARO_ALT_AVAILABLE() (frskyData.hub.baroAltitudeOffset) + #define TELEMETRY_BARO_ALT_AVAILABLE() (telemetryData.hub.baroAltitudeOffset) #define TELEMETRY_BARO_ALT_UNIT (IS_IMPERIAL_ENABLE() ? LENGTH_UNIT_IMP : LENGTH_UNIT_METR) - #define TELEMETRY_RELATIVE_BARO_ALT_BP frskyData.hub.baroAltitude_bp - #define TELEMETRY_RELATIVE_BARO_ALT_AP frskyData.hub.baroAltitude_ap - #define TELEMETRY_RELATIVE_GPS_ALT_BP frskyData.hub.gpsAltitude_bp - #define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp - #define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap + #define TELEMETRY_RELATIVE_BARO_ALT_BP telemetryData.hub.baroAltitude_bp + #define TELEMETRY_RELATIVE_BARO_ALT_AP telemetryData.hub.baroAltitude_ap + #define TELEMETRY_RELATIVE_GPS_ALT_BP telemetryData.hub.gpsAltitude_bp + #define TELEMETRY_GPS_SPEED_BP telemetryData.hub.gpsSpeed_bp + #define TELEMETRY_GPS_SPEED_AP telemetryData.hub.gpsSpeed_ap #define TELEMETRY_BARO_ALT_PREPARE() #define TELEMETRY_BARO_ALT_FORMAT "%d," - #define TELEMETRY_BARO_ALT_ARGS frskyData.hub.baroAltitude_bp, + #define TELEMETRY_BARO_ALT_ARGS telemetryData.hub.baroAltitude_bp, #define TELEMETRY_GPS_ALT_FORMAT "%d," - #define TELEMETRY_GPS_ALT_ARGS frskyData.hub.gpsAltitude_bp, + #define TELEMETRY_GPS_ALT_ARGS telemetryData.hub.gpsAltitude_bp, #define TELEMETRY_SPEED_UNIT (IS_IMPERIAL_ENABLE() ? SPEED_UNIT_IMP : SPEED_UNIT_METR) #define TELEMETRY_GPS_SPEED_FORMAT "%d," - #define TELEMETRY_GPS_SPEED_ARGS frskyData.hub.gpsSpeed_bp, + #define TELEMETRY_GPS_SPEED_ARGS telemetryData.hub.gpsSpeed_bp, #if defined(CPUARM) - #define TELEMETRY_CELLS_ARGS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, frskyData.hub.cellVolts[0]*2/100, frskyData.hub.cellVolts[0]*2%100, frskyData.hub.cellVolts[1]*2/100, frskyData.hub.cellVolts[1]*2%100, frskyData.hub.cellVolts[2]*2/100, frskyData.hub.cellVolts[2]*2%100, frskyData.hub.cellVolts[3]*2/100, frskyData.hub.cellVolts[3]*2%100, frskyData.hub.cellVolts[4]*2/100, frskyData.hub.cellVolts[4]*2%100, frskyData.hub.cellVolts[5]*2/100, frskyData.hub.cellVolts[5]*2%100, frskyData.hub.cellVolts[6]*2/100, frskyData.hub.cellVolts[6]*2%100, frskyData.hub.cellVolts[7]*2/100, frskyData.hub.cellVolts[7]*2%100, frskyData.hub.cellVolts[8]*2/100, frskyData.hub.cellVolts[8]*2%100, frskyData.hub.cellVolts[9]*2/100, frskyData.hub.cellVolts[9]*2%100, frskyData.hub.cellVolts[10]*2/100, frskyData.hub.cellVolts[10]*2%100, frskyData.hub.cellVolts[11]*2/100, frskyData.hub.cellVolts[11]*2%100, + #define TELEMETRY_CELLS_ARGS telemetryData.hub.cellsSum / 10, telemetryData.hub.cellsSum % 10, telemetryData.hub.cellVolts[0]*2/100, telemetryData.hub.cellVolts[0]*2%100, telemetryData.hub.cellVolts[1]*2/100, telemetryData.hub.cellVolts[1]*2%100, telemetryData.hub.cellVolts[2]*2/100, telemetryData.hub.cellVolts[2]*2%100, telemetryData.hub.cellVolts[3]*2/100, telemetryData.hub.cellVolts[3]*2%100, telemetryData.hub.cellVolts[4]*2/100, telemetryData.hub.cellVolts[4]*2%100, telemetryData.hub.cellVolts[5]*2/100, telemetryData.hub.cellVolts[5]*2%100, telemetryData.hub.cellVolts[6]*2/100, telemetryData.hub.cellVolts[6]*2%100, telemetryData.hub.cellVolts[7]*2/100, telemetryData.hub.cellVolts[7]*2%100, telemetryData.hub.cellVolts[8]*2/100, telemetryData.hub.cellVolts[8]*2%100, telemetryData.hub.cellVolts[9]*2/100, telemetryData.hub.cellVolts[9]*2%100, telemetryData.hub.cellVolts[10]*2/100, telemetryData.hub.cellVolts[10]*2%100, telemetryData.hub.cellVolts[11]*2/100, telemetryData.hub.cellVolts[11]*2%100, #define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," #define TELEMETRY_CELLS_LABEL "Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6,Cell 7,Cell 8,Cell 9,Cell 10,Cell 11,Cell 12," #else - #define TELEMETRY_CELLS_ARGS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, frskyData.hub.cellVolts[0]*2/100, frskyData.hub.cellVolts[0]*2%100, frskyData.hub.cellVolts[1]*2/100, frskyData.hub.cellVolts[1]*2%100, frskyData.hub.cellVolts[2]*2/100, frskyData.hub.cellVolts[2]*2%100, frskyData.hub.cellVolts[3]*2/100, frskyData.hub.cellVolts[3]*2%100, frskyData.hub.cellVolts[4]*2/100, frskyData.hub.cellVolts[4]*2%100, frskyData.hub.cellVolts[5]*2/100, frskyData.hub.cellVolts[5]*2%100, + #define TELEMETRY_CELLS_ARGS telemetryData.hub.cellsSum / 10, telemetryData.hub.cellsSum % 10, telemetryData.hub.cellVolts[0]*2/100, telemetryData.hub.cellVolts[0]*2%100, telemetryData.hub.cellVolts[1]*2/100, telemetryData.hub.cellVolts[1]*2%100, telemetryData.hub.cellVolts[2]*2/100, telemetryData.hub.cellVolts[2]*2%100, telemetryData.hub.cellVolts[3]*2/100, telemetryData.hub.cellVolts[3]*2%100, telemetryData.hub.cellVolts[4]*2/100, telemetryData.hub.cellVolts[4]*2%100, telemetryData.hub.cellVolts[5]*2/100, telemetryData.hub.cellVolts[5]*2%100, #define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," #define TELEMETRY_CELLS_LABEL "Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6," #endif #define TELEMETRY_CURRENT_FORMAT "%d.%02d," - #define TELEMETRY_CURRENT_ARGS frskyData.hub.current / 100, frskyData.hub.current % 100, + #define TELEMETRY_CURRENT_ARGS telemetryData.hub.current / 100, telemetryData.hub.current % 100, #define TELEMETRY_VFAS_FORMAT "%d.%d," - #define TELEMETRY_VFAS_ARGS frskyData.hub.vfas / 10, frskyData.hub.vfas % 10, + #define TELEMETRY_VFAS_ARGS telemetryData.hub.vfas / 10, telemetryData.hub.vfas % 10, #define TELEMETRY_VSPEED_FORMAT "%c%d.%02d," - #define TELEMETRY_VSPEED_ARGS frskyData.hub.varioSpeed < 0 ? '-' : ' ', frskyData.hub.varioSpeed / 100, frskyData.hub.varioSpeed % 100, + #define TELEMETRY_VSPEED_ARGS telemetryData.hub.varioSpeed < 0 ? '-' : ' ', telemetryData.hub.varioSpeed / 100, telemetryData.hub.varioSpeed % 100, #define TELEMETRY_ASPEED_FORMAT "%d.%d," - #define TELEMETRY_ASPEED_ARGS frskyData.hub.airSpeed / 10, frskyData.hub.airSpeed % 10, + #define TELEMETRY_ASPEED_ARGS telemetryData.hub.airSpeed / 10, telemetryData.hub.airSpeed % 10, #if defined(FRSKY_HUB) - #define TELEMETRY_OPENXSENSOR() (frskyData.hub.openXsensor) + #define TELEMETRY_OPENXSENSOR() (telemetryData.hub.openXsensor) #else #define TELEMETRY_OPENXSENSOR() (0) #endif #endif -#define TELEMETRY_CELL_VOLTAGE(k) (frskyData.hub.cellVolts[k] * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER) -#define TELEMETRY_MIN_CELL_VOLTAGE (frskyData.hub.minCellVolts * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER) - -extern FrskyData frskyData; +#define TELEMETRY_CELL_VOLTAGE(k) (telemetryData.hub.cellVolts[k] * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER) +#define TELEMETRY_MIN_CELL_VOLTAGE (telemetryData.hub.minCellVolts * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER) #define START_STOP 0x7e #define BYTESTUFF 0x7d @@ -476,6 +400,8 @@ enum FrSkyDataState { #endif }; +#define FRSKY_RX_PACKET_SIZE 19 + #if defined(CPUARM) #define frskySendAlarms() #else @@ -523,6 +449,39 @@ void telemetryInit(void); void telemetryInterrupt10ms(); +enum TelemetryProtocol +{ + TELEM_PROTO_FRSKY_D, + TELEM_PROTO_FRSKY_SPORT, +}; + +enum TelemAnas { + TELEM_ANA_A1, + TELEM_ANA_A2, +#if defined(CPUARM) + TELEM_ANA_A3, + TELEM_ANA_A4, +#endif + TELEM_ANA_COUNT +}; + +#if defined(CPUARM) +struct TelemetryData { + TelemetryValueWithMin swr; // TODO Min not needed + TelemetryValueWithMin rssi; // TODO Min not needed + uint16_t xjtVersion; + bool varioHighPrecision; +}; +#else +struct TelemetryData { + TelemetryValueWithMinMax analog[TELEM_ANA_COUNT]; + TelemetryValueWithMin rssi[2]; + FrskyTelemetryData hub; +}; +#endif + +extern TelemetryData telemetryData; + #if defined(CPUARM) typedef uint16_t frskyCellVoltage_t; #elif defined(FRSKY_HUB) @@ -535,7 +494,7 @@ void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts); void frskyUpdateCells(); #endif -void processSerialData(uint8_t data); +void processFrskyTelemetryData(uint8_t data); #if defined(PCBTARANIS) inline uint8_t modelTelemetryProtocol() diff --git a/radio/src/telemetry/frsky_d.cpp b/radio/src/telemetry/frsky_d.cpp index a16b6ff7d..98adf0a3d 100644 --- a/radio/src/telemetry/frsky_d.cpp +++ b/radio/src/telemetry/frsky_d.cpp @@ -23,10 +23,10 @@ #if (defined(FRSKY_HUB) || defined(WS_HOW_HIGH)) void checkMinMaxAltitude() { - if (TELEMETRY_RELATIVE_BARO_ALT_BP > frskyData.hub.maxAltitude) - frskyData.hub.maxAltitude = TELEMETRY_RELATIVE_BARO_ALT_BP; - if (TELEMETRY_RELATIVE_BARO_ALT_BP < frskyData.hub.minAltitude) - frskyData.hub.minAltitude = TELEMETRY_RELATIVE_BARO_ALT_BP; + if (TELEMETRY_RELATIVE_BARO_ALT_BP > telemetryData.hub.maxAltitude) + telemetryData.hub.maxAltitude = TELEMETRY_RELATIVE_BARO_ALT_BP; + if (TELEMETRY_RELATIVE_BARO_ALT_BP < telemetryData.hub.minAltitude) + telemetryData.hub.minAltitude = TELEMETRY_RELATIVE_BARO_ALT_BP; } #endif @@ -71,148 +71,148 @@ void parseTelemHubByte(uint8_t byte) state = TS_IDLE; #if defined(GPS) - if ((uint8_t)structPos == offsetof(FrskySerialData, gpsLatitude_bp)) { + if ((uint8_t)structPos == offsetof(FrskyTelemetryData, gpsLatitude_bp)) { if (lowByte || byte) - frskyData.hub.gpsFix = 1; - else if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLatitude_bp > 1) - frskyData.hub.gpsFix = 0; + telemetryData.hub.gpsFix = 1; + else if (telemetryData.hub.gpsFix > 0 && telemetryData.hub.gpsLatitude_bp > 1) + telemetryData.hub.gpsFix = 0; } - else if ((uint8_t)structPos == offsetof(FrskySerialData, gpsLongitude_bp)) { + else if ((uint8_t)structPos == offsetof(FrskyTelemetryData, gpsLongitude_bp)) { if (lowByte || byte) - frskyData.hub.gpsFix = 1; - else if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLongitude_bp > 1) - frskyData.hub.gpsFix = 0; + telemetryData.hub.gpsFix = 1; + else if (telemetryData.hub.gpsFix > 0 && telemetryData.hub.gpsLongitude_bp > 1) + telemetryData.hub.gpsFix = 0; } - if ((uint8_t)structPos == offsetof(FrskySerialData, gpsAltitude_bp) || - ((uint8_t)structPos >= offsetof(FrskySerialData, gpsAltitude_ap) && (uint8_t)structPos <= offsetof(FrskySerialData, gpsLatitudeNS) && (uint8_t)structPos != offsetof(FrskySerialData, baroAltitude_bp) && (uint8_t)structPos != offsetof(FrskySerialData, baroAltitude_ap))) { + if ((uint8_t)structPos == offsetof(FrskyTelemetryData, gpsAltitude_bp) || + ((uint8_t)structPos >= offsetof(FrskyTelemetryData, gpsAltitude_ap) && (uint8_t)structPos <= offsetof(FrskyTelemetryData, gpsLatitudeNS) && (uint8_t)structPos != offsetof(FrskyTelemetryData, baroAltitude_bp) && (uint8_t)structPos != offsetof(FrskyTelemetryData, baroAltitude_ap))) { // If we don't have a fix, we may discard the value - if (frskyData.hub.gpsFix <= 0) + if (telemetryData.hub.gpsFix <= 0) return; } #endif // #if defined(GPS) - ((uint8_t*)&frskyData.hub)[structPos] = lowByte; - ((uint8_t*)&frskyData.hub)[structPos+1] = byte; + ((uint8_t*)&telemetryData.hub)[structPos] = lowByte; + ((uint8_t*)&telemetryData.hub)[structPos+1] = byte; switch ((uint8_t)structPos) { - case offsetof(FrskySerialData, rpm): - frskyData.hub.rpm *= (uint8_t)60/(g_model.frsky.blades+2); - if (frskyData.hub.rpm > frskyData.hub.maxRpm) - frskyData.hub.maxRpm = frskyData.hub.rpm; + case offsetof(FrskyTelemetryData, rpm): + telemetryData.hub.rpm *= (uint8_t)60/(g_model.frsky.blades+2); + if (telemetryData.hub.rpm > telemetryData.hub.maxRpm) + telemetryData.hub.maxRpm = telemetryData.hub.rpm; break; - case offsetof(FrskySerialData, temperature1): - if (frskyData.hub.temperature1 > frskyData.hub.maxTemperature1) - frskyData.hub.maxTemperature1 = frskyData.hub.temperature1; + case offsetof(FrskyTelemetryData, temperature1): + if (telemetryData.hub.temperature1 > telemetryData.hub.maxTemperature1) + telemetryData.hub.maxTemperature1 = telemetryData.hub.temperature1; break; - case offsetof(FrskySerialData, temperature2): - if (frskyData.hub.temperature2 > frskyData.hub.maxTemperature2) - frskyData.hub.maxTemperature2 = frskyData.hub.temperature2; + case offsetof(FrskyTelemetryData, temperature2): + if (telemetryData.hub.temperature2 > telemetryData.hub.maxTemperature2) + telemetryData.hub.maxTemperature2 = telemetryData.hub.temperature2; break; - case offsetof(FrskySerialData, current): + case offsetof(FrskyTelemetryData, current): #if defined(FAS_OFFSET) || !defined(CPUM64) - if ((int16_t)frskyData.hub.current > 0 && ((int16_t)frskyData.hub.current + g_model.frsky.fasOffset) > 0) - frskyData.hub.current += g_model.frsky.fasOffset; + if ((int16_t)telemetryData.hub.current > 0 && ((int16_t)telemetryData.hub.current + g_model.frsky.fasOffset) > 0) + telemetryData.hub.current += g_model.frsky.fasOffset; else - frskyData.hub.current = 0; + telemetryData.hub.current = 0; #endif - if (frskyData.hub.current > frskyData.hub.maxCurrent) - frskyData.hub.maxCurrent = frskyData.hub.current; + if (telemetryData.hub.current > telemetryData.hub.maxCurrent) + telemetryData.hub.maxCurrent = telemetryData.hub.current; break; - case offsetof(FrskySerialData, currentConsumption): + case offsetof(FrskyTelemetryData, currentConsumption): // we receive data from openXsensor. stops the calculation of consumption and power - frskyData.hub.openXsensor = 1; + telemetryData.hub.openXsensor = 1; break; - case offsetof(FrskySerialData, volts_ap): + case offsetof(FrskyTelemetryData, volts_ap): #if defined(FAS_BSS) - frskyData.hub.vfas = (frskyData.hub.volts_bp * 10 + frskyData.hub.volts_ap); + telemetryData.hub.vfas = (telemetryData.hub.volts_bp * 10 + telemetryData.hub.volts_ap); #else - frskyData.hub.vfas = ((frskyData.hub.volts_bp * 100 + frskyData.hub.volts_ap * 10) * 21) / 110; + telemetryData.hub.vfas = ((telemetryData.hub.volts_bp * 100 + telemetryData.hub.volts_ap * 10) * 21) / 110; #endif - /* TODO later if (!frskyData.hub.minVfas || frskyData.hub.minVfas > frskyData.hub.vfas) - frskyData.hub.minVfas = frskyData.hub.vfas; */ + /* TODO later if (!telemetryData.hub.minVfas || telemetryData.hub.minVfas > telemetryData.hub.vfas) + telemetryData.hub.minVfas = telemetryData.hub.vfas; */ break; - case offsetof(FrskySerialData, baroAltitude_bp): + case offsetof(FrskyTelemetryData, baroAltitude_bp): // First received barometer altitude => Altitude offset - if (!frskyData.hub.baroAltitudeOffset) - frskyData.hub.baroAltitudeOffset = -frskyData.hub.baroAltitude_bp; - frskyData.hub.baroAltitude_bp += frskyData.hub.baroAltitudeOffset; + if (!telemetryData.hub.baroAltitudeOffset) + telemetryData.hub.baroAltitudeOffset = -telemetryData.hub.baroAltitude_bp; + telemetryData.hub.baroAltitude_bp += telemetryData.hub.baroAltitudeOffset; checkMinMaxAltitude(); break; #if defined(GPS) - case offsetof(FrskySerialData, gpsAltitude_ap): - if (!frskyData.hub.gpsAltitudeOffset) - frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp; - frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset; - if (!frskyData.hub.baroAltitudeOffset) { - if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude) - frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp; - if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude) - frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp; + case offsetof(FrskyTelemetryData, gpsAltitude_ap): + if (!telemetryData.hub.gpsAltitudeOffset) + telemetryData.hub.gpsAltitudeOffset = -telemetryData.hub.gpsAltitude_bp; + telemetryData.hub.gpsAltitude_bp += telemetryData.hub.gpsAltitudeOffset; + if (!telemetryData.hub.baroAltitudeOffset) { + if (telemetryData.hub.gpsAltitude_bp > telemetryData.hub.maxAltitude) + telemetryData.hub.maxAltitude = telemetryData.hub.gpsAltitude_bp; + if (telemetryData.hub.gpsAltitude_bp < telemetryData.hub.minAltitude) + telemetryData.hub.minAltitude = telemetryData.hub.gpsAltitude_bp; } - if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) { + if (!telemetryData.hub.pilotLatitude && !telemetryData.hub.pilotLongitude) { // First received GPS position => Pilot GPS position getGpsPilotPosition(); } - else if (frskyData.hub.gpsDistNeeded || menuHandlers[menuLevel] == menuTelemetryFrsky) { + else if (telemetryData.hub.gpsDistNeeded || menuHandlers[menuLevel] == menuTelemetryFrsky) { getGpsDistance(); } break; - case offsetof(FrskySerialData, gpsSpeed_bp): + case offsetof(FrskyTelemetryData, gpsSpeed_bp): // Speed => Max speed - if (frskyData.hub.gpsSpeed_bp > frskyData.hub.maxGpsSpeed) - frskyData.hub.maxGpsSpeed = frskyData.hub.gpsSpeed_bp; + if (telemetryData.hub.gpsSpeed_bp > telemetryData.hub.maxGpsSpeed) + telemetryData.hub.maxGpsSpeed = telemetryData.hub.gpsSpeed_bp; break; #endif - case offsetof(FrskySerialData, volts): + case offsetof(FrskyTelemetryData, volts): frskyUpdateCells(); break; #if defined(GPS) - case offsetof(FrskySerialData, hour): - frskyData.hub.hour = ((uint8_t)(frskyData.hub.hour + g_eeGeneral.timezone + 24)) % 24; + case offsetof(FrskyTelemetryData, hour): + telemetryData.hub.hour = ((uint8_t)(telemetryData.hub.hour + g_eeGeneral.timezone + 24)) % 24; break; #endif - case offsetof(FrskySerialData, accelX): - case offsetof(FrskySerialData, accelY): - case offsetof(FrskySerialData, accelZ): - *(int16_t*)(&((uint8_t*)&frskyData.hub)[structPos]) /= 10; + case offsetof(FrskyTelemetryData, accelX): + case offsetof(FrskyTelemetryData, accelY): + case offsetof(FrskyTelemetryData, accelZ): + *(int16_t*)(&((uint8_t*)&telemetryData.hub)[structPos]) /= 10; break; #if 0 - case offsetof(FrskySerialData, gpsAltitude_bp): - case offsetof(FrskySerialData, fuelLevel): - case offsetof(FrskySerialData, gpsLongitude_bp): - case offsetof(FrskySerialData, gpsLatitude_bp): - case offsetof(FrskySerialData, gpsCourse_bp): - case offsetof(FrskySerialData, day): - case offsetof(FrskySerialData, year): - case offsetof(FrskySerialData, sec): - case offsetof(FrskySerialData, gpsSpeed_ap): - case offsetof(FrskySerialData, gpsLongitude_ap): - case offsetof(FrskySerialData, gpsLatitude_ap): - case offsetof(FrskySerialData, gpsCourse_ap): - case offsetof(FrskySerialData, gpsLongitudeEW): - case offsetof(FrskySerialData, gpsLatitudeNS): - case offsetof(FrskySerialData, varioSpeed): - case offsetof(FrskySerialData, power): /* because sent by openXsensor */ - case offsetof(FrskySerialData, vfas): - case offsetof(FrskySerialData, volts_bp): + case offsetof(FrskyTelemetryData, gpsAltitude_bp): + case offsetof(FrskyTelemetryData, fuelLevel): + case offsetof(FrskyTelemetryData, gpsLongitude_bp): + case offsetof(FrskyTelemetryData, gpsLatitude_bp): + case offsetof(FrskyTelemetryData, gpsCourse_bp): + case offsetof(FrskyTelemetryData, day): + case offsetof(FrskyTelemetryData, year): + case offsetof(FrskyTelemetryData, sec): + case offsetof(FrskyTelemetryData, gpsSpeed_ap): + case offsetof(FrskyTelemetryData, gpsLongitude_ap): + case offsetof(FrskyTelemetryData, gpsLatitude_ap): + case offsetof(FrskyTelemetryData, gpsCourse_ap): + case offsetof(FrskyTelemetryData, gpsLongitudeEW): + case offsetof(FrskyTelemetryData, gpsLatitudeNS): + case offsetof(FrskyTelemetryData, varioSpeed): + case offsetof(FrskyTelemetryData, power): /* because sent by openXsensor */ + case offsetof(FrskyTelemetryData, vfas): + case offsetof(FrskyTelemetryData, volts_bp): break; default: - *((uint16_t *)(((uint8_t*)&frskyData.hub) + structPos)) = previousValue; + *((uint16_t *)(((uint8_t*)&telemetryData.hub) + structPos)) = previousValue; break; #endif } @@ -222,16 +222,16 @@ void parseTelemHubByte(uint8_t byte) #if defined(WS_HOW_HIGH) void parseTelemWSHowHighByte(uint8_t byte) { - if (frskyUsrStreaming < (WSHH_TIMEOUT10ms - 10)) { - ((uint8_t*)&frskyData.hub)[offsetof(FrskySerialData, baroAltitude_bp)] = byte; + if (wshhStreaming < (WSHH_TIMEOUT10ms - 10)) { + ((uint8_t*)&telemetryData.hub)[offsetof(FrskyTelemetryData, baroAltitude_bp)] = byte; checkMinMaxAltitude(); } else { // At least 100mS passed since last data received - ((uint8_t*)&frskyData.hub)[offsetof(FrskySerialData, baroAltitude_bp)+1] = byte; + ((uint8_t*)&telemetryData.hub)[offsetof(FrskyTelemetryData, baroAltitude_bp)+1] = byte; } // baroAltitude_bp unit here is feet! - frskyUsrStreaming = WSHH_TIMEOUT10ms; // reset counter + wshhStreaming = WSHH_TIMEOUT10ms; // reset counter } #endif @@ -242,16 +242,16 @@ void frskyDProcessPacket(uint8_t *packet) { case LINKPKT: // A1/A2/RSSI values { - frskyData.analog[TELEM_ANA_A1].set(packet[1], g_model.frsky.channels[TELEM_ANA_A1].type); - frskyData.analog[TELEM_ANA_A2].set(packet[2], g_model.frsky.channels[TELEM_ANA_A2].type); - frskyData.rssi[0].set(packet[3]); - frskyData.rssi[1].set(packet[4] / 2); - frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected + telemetryData.analog[TELEM_ANA_A1].set(packet[1], g_model.frsky.channels[TELEM_ANA_A1].type); + telemetryData.analog[TELEM_ANA_A2].set(packet[2], g_model.frsky.channels[TELEM_ANA_A2].type); + telemetryData.rssi[0].set(packet[3]); + telemetryData.rssi[1].set(packet[4] / 2); + telemetryStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected link_counter += 256 / FRSKY_D_AVERAGING; #if defined(VARIO) uint8_t varioSource = g_model.frsky.varioSource - VARIO_SOURCE_A1; if (varioSource < 2) { - frskyData.hub.varioSpeed = applyChannelRatio(varioSource, frskyData.analog[varioSource].value); + telemetryData.hub.varioSpeed = applyChannelRatio(varioSource, telemetryData.analog[varioSource].value); } #endif break; diff --git a/radio/src/telemetry/frsky_d_arm.cpp b/radio/src/telemetry/frsky_d_arm.cpp index d2172da01..1e476b7b0 100644 --- a/radio/src/telemetry/frsky_d_arm.cpp +++ b/radio/src/telemetry/frsky_d_arm.cpp @@ -73,8 +73,8 @@ void frskyDProcessPacket(uint8_t *packet) setTelemetryValue(TELEM_PROTO_FRSKY_D, D_A1_ID, 0, 0, packet[1], UNIT_VOLTS, 0); setTelemetryValue(TELEM_PROTO_FRSKY_D, D_A2_ID, 0, 0, packet[2], UNIT_VOLTS, 0); setTelemetryValue(TELEM_PROTO_FRSKY_D, D_RSSI_ID, 0, 0, packet[3], UNIT_RAW, 0); - frskyData.rssi.set(packet[3]); - frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected + telemetryData.rssi.set(packet[3]); + telemetryStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected break; } @@ -178,8 +178,8 @@ void processHubPacket(uint8_t id, int16_t value) } else if (id == BARO_ALT_AP_ID) { if (lastId == BARO_ALT_BP_ID) { - if (data > 9 || frskyData.varioHighPrecision) { - frskyData.varioHighPrecision = true; + if (data > 9 || telemetryData.varioHighPrecision) { + telemetryData.varioHighPrecision = true; data /= 10; // map hi precision vario into low precision. Altitude is stored in 0.1m anyways } data = (int16_t)lastValue * 10 + (((int16_t)lastValue < 0) ? -data : data); diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index ba77828bf..a9cd0d17c 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -212,32 +212,32 @@ void processSportPacket(uint8_t * packet) uint32_t data = SPORT_DATA_S32(packet); if (id == RSSI_ID) { - frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected + telemetryStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected data = SPORT_DATA_U8(packet); if (data == 0) - frskyData.rssi.reset(); + telemetryData.rssi.reset(); else - frskyData.rssi.set(data); + telemetryData.rssi.set(data); } #if defined(PCBTARANIS) && defined(REVPLUS) else if (id == XJT_VERSION_ID) { - frskyData.xjtVersion = HUB_DATA_U16(packet); + telemetryData.xjtVersion = HUB_DATA_U16(packet); if (!IS_VALID_XJT_VERSION()) { - frskyData.swr.set(0x00); + telemetryData.swr.set(0x00); } } else if (id == SWR_ID) { if (IS_VALID_XJT_VERSION()) - frskyData.swr.set(SPORT_DATA_U8(packet)); + telemetryData.swr.set(SPORT_DATA_U8(packet)); else - frskyData.swr.set(0x00); + telemetryData.swr.set(0x00); } #else else if (id == XJT_VERSION_ID) { - frskyData.xjtVersion = HUB_DATA_U16(packet); + telemetryData.xjtVersion = HUB_DATA_U16(packet); } else if (id == SWR_ID) { - frskyData.swr.set(SPORT_DATA_U8(packet)); + telemetryData.swr.set(SPORT_DATA_U8(packet)); } #endif @@ -339,7 +339,7 @@ bool sportWaitState(SportUpdateState state, int timeout) for (int i=timeout/2; i>=0; i--) { uint8_t byte ; while (telemetryGetByte(&byte)) { - processSerialData(byte); + processFrskyTelemetryData(byte); } if (sportUpdateState == state) { return true; diff --git a/radio/src/telemetry/mavlink.h b/radio/src/telemetry/mavlink.h index 8c80b3bf7..fb2281259 100644 --- a/radio/src/telemetry/mavlink.h +++ b/radio/src/telemetry/mavlink.h @@ -1,29 +1,29 @@ -/* - * 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. - */ - +/* + * 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. + */ + /*! \file mavlink.h * Mavlink include file */ -#ifndef _MAVLINK_H_ -#define _MAVLINK_H_ +#ifndef _MAVLINK_H_ +#define _MAVLINK_H_ #define MAVLINK_USE_CONVENIENCE_FUNCTIONS #define MAVLINK_COMM_NUM_BUFFERS 1 @@ -32,11 +32,11 @@ #include "targets/common_avr/serial_driver.h" #include "opentx.h" -extern int8_t mav_heartbeat; +extern int8_t mav_heartbeat; extern mavlink_system_t mavlink_system; -#define LEN_STATUSTEXT 20 -extern char mav_statustext[LEN_STATUSTEXT]; - +#define LEN_STATUSTEXT 20 +extern char mav_statustext[LEN_STATUSTEXT]; + extern void SERIAL_start_uart_send(); extern void SERIAL_end_uart_send(); extern void SERIAL_send_uart_bytes(const uint8_t * buf, uint16_t len); @@ -321,5 +321,5 @@ inline uint8_t getPrecisMavlinParamsValue(uint8_t idx) { void lcd_outdezFloat(uint8_t x, uint8_t y, float val, uint8_t precis, uint8_t mode); #endif -#endif // _MAVLINK_H_ +#endif // _MAVLINK_H_ diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 5b723fcfd..70e58474f 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -18,676 +18,435 @@ * GNU General Public License for more details. */ -#include "../opentx.h" +#include "opentx.h" -TelemetryItem telemetryItems[MAX_SENSORS]; -uint8_t allowNewSensors; +uint8_t telemetryStreaming = 0; -void TelemetryItem::gpsReceived() +#if defined(WS_HOW_HIGH) +uint8_t wshhStreaming = 0; +#endif + +uint8_t link_counter = 0; + +#if defined(CPUARM) +uint8_t telemetryState = TELEMETRY_INIT; +#endif + +TelemetryData telemetryData; + +#if defined(CPUARM) +uint8_t telemetryProtocol = 255; +#if defined(REVX) +uint8_t serialInversion = 0; +#endif +#endif + +#if defined(PCBSKY9X) && defined(REVX) +uint8_t serialInversion = 0; +#endif + +#if !defined(CPUARM) +uint16_t getChannelRatio(source_t channel) { - if (!distFromEarthAxis) { - gps.extractLatitudeLongitude(&pilotLatitude, &pilotLongitude); - uint32_t lat = pilotLatitude / 10000; - uint32_t angle2 = (lat*lat) / 10000; - uint32_t angle4 = angle2 * angle2; - distFromEarthAxis = 139*(((uint32_t)10000000-((angle2*(uint32_t)123370)/81)+(angle4/25))/12500); - } - lastReceived = now(); + return (uint16_t)g_model.frsky.channels[channel].ratio << g_model.frsky.channels[channel].multiplier; } -void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32_t unit, uint32_t prec) +lcdint_t applyChannelRatio(source_t channel, lcdint_t val) { - int32_t newVal = val; + return ((int32_t)val+g_model.frsky.channels[channel].offset) * getChannelRatio(channel) * 2 / 51; +} +#endif - if (unit == UNIT_CELLS) { - uint32_t data = uint32_t(newVal); - uint8_t cellsCount = (data >> 24); - uint8_t cellIndex = ((data >> 16) & 0x0F); - uint16_t cellValue = (data & 0xFFFF); - if (cellsCount == 0) { - cellsCount = (cellIndex >= cells.count ? cellIndex + 1 : cells.count); - if (cellsCount != cells.count) { - clear(); - cells.count = cellsCount; - // we skip this round as we are not sure we received all cells values - return; - } - } - else if (cellsCount != cells.count) { - clear(); - cells.count = cellsCount; - } - cells.values[cellIndex].set(cellValue); - if (cellIndex+1 == cells.count) { - newVal = 0; - for (int i=0; i> 24); - datetime.month = (uint8_t) ((data & 0x00ff0000) >> 16); - datetime.day = (uint8_t) ((data & 0x0000ff00) >> 8); - if (datetime.year != 0) { - datetime.datestate = 1; - } -#if defined(RTCLOCK) - if (g_eeGeneral.adjustRTC && (datetime.datestate == 1)) { - struct gtm t; - gettime(&t); - t.tm_year = datetime.year+4; - t.tm_mon = datetime.month-1; - t.tm_mday = datetime.day; - rtcSetTime(&t); - } #endif - } - else { - datetime.hour = ((uint8_t) ((data & 0xff000000) >> 24) + g_eeGeneral.timezone + 24) % 24; - datetime.min = (uint8_t) ((data & 0x00ff0000) >> 16); - datetime.sec = (uint16_t) ((data & 0x0000ff00) >> 8); - if (datetime.datestate == 1) { - datetime.timestate = 1; - } -#if defined(RTCLOCK) - if (g_eeGeneral.adjustRTC && datetime.datestate == 1) { - struct gtm t; - gettime(&t); - if (abs((t.tm_hour-datetime.hour)*3600 + (t.tm_min-datetime.min)*60 + (t.tm_sec-datetime.sec)) > 20) { - // we adjust RTC only if difference is > 20 seconds - t.tm_hour = datetime.hour; - t.tm_min = datetime.min; - t.tm_sec = datetime.sec; - g_rtcTime = gmktime(&t); // update local timestamp and get wday calculated - rtcSetTime(&t); - } - } -#endif - } - if (datetime.year == 0) { - return; - } - newVal = 0; } - else if (unit == UNIT_GPS) { - uint32_t gps_long_lati_data = uint32_t(newVal); - uint32_t gps_long_lati_b1w, gps_long_lati_a1w; - gps_long_lati_b1w = (gps_long_lati_data & 0x3fffffff) / 10000; - gps_long_lati_a1w = (gps_long_lati_data & 0x3fffffff) % 10000; - switch ((gps_long_lati_data & 0xc0000000) >> 30) { - case 0: - gps.latitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); - gps.latitude_ap = gps_long_lati_a1w; - gps.latitudeNS = 'N'; - break; - case 1: - gps.latitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); - gps.latitude_ap = gps_long_lati_a1w; - gps.latitudeNS = 'S'; - break; - case 2: - gps.longitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); - gps.longitude_ap = gps_long_lati_a1w; - gps.longitudeEW = 'E'; - break; - case 3: - gps.longitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); - gps.longitude_ap = gps_long_lati_a1w; - gps.longitudeEW = 'W'; - break; - } - if (gps.longitudeEW && gps.latitudeNS) { - gpsReceived(); - } - return; - } - else if (unit >= UNIT_GPS_LONGITUDE && unit <= UNIT_GPS_LATITUDE_NS) { - uint32_t data = uint32_t(newVal); - switch (unit) { - case UNIT_GPS_LONGITUDE: - gps.longitude_bp = data >> 16; - gps.longitude_ap = data & 0xFFFF; - break; - case UNIT_GPS_LATITUDE: - gps.latitude_bp = data >> 16; - gps.latitude_ap = data & 0xFFFF; - break; - case UNIT_GPS_LONGITUDE_EW: - gps.longitudeEW = data; - break; - case UNIT_GPS_LATITUDE_NS: - gps.latitudeNS = data; - break; - } - if (gps.longitudeEW && gps.latitudeNS && gps.longitude_ap && gps.latitude_ap) { - gpsReceived(); - } - return; - } - else if (unit == UNIT_DATETIME_YEAR) { - datetime.year = newVal; - return; - } - else if (unit == UNIT_DATETIME_DAY_MONTH) { - uint32_t data = uint32_t(newVal); - datetime.month = data >> 8; - datetime.day = data & 0xFF; - datetime.datestate = 1; - return; - } - else if (unit == UNIT_DATETIME_HOUR_MIN) { - uint32_t data = uint32_t(newVal); - datetime.hour = ((data & 0xFF) + g_eeGeneral.timezone + 24) % 24; - datetime.min = data >> 8; - } - else if (unit == UNIT_DATETIME_SEC) { - datetime.sec = newVal & 0xFF; - datetime.timestate = 1; - newVal = 0; - } - else if (unit == UNIT_RPMS) { - if (sensor.custom.ratio != 0) { - newVal = (newVal * sensor.custom.offset) / sensor.custom.ratio; +#elif defined(PCBSKY9X) + if (telemetryProtocol == PROTOCOL_FRSKY_D_SECONDARY) { + uint8_t data; + while (telemetrySecondPortReceive(data)) { + processFrskyTelemetryData(data); } } else { - newVal = sensor.getValue(newVal, unit, prec); - if (sensor.autoOffset) { - if (!isAvailable()) { - std.offsetAuto = -newVal; - } - newVal += std.offsetAuto; - } - else if (sensor.filter) { - if (!isAvailable()) { - for (int i=0; i valueMax) { - valueMax = newVal; - if (sensor.unit == UNIT_VOLTS) { - valueMin = newVal; // the batt was changed +#if !defined(CPUARM) + if (IS_FRSKY_D_PROTOCOL()) { + // Attempt to transmit any waiting Fr-Sky alarm set packets every 50ms (subject to packet buffer availability) + static uint8_t frskyTxDelay = 5; + if (frskyAlarmsSendState && (--frskyTxDelay == 0)) { + frskyTxDelay = 5; // 50ms +#if !defined(SIMU) + frskyDSendNextAlarm(); +#endif } } +#endif +#if defined(CPUARM) for (int i=0; i 0x33) +#else + #define FRSKY_BAD_ANTENNA() (telemetryData.swr.value > 0x33) +#endif + +#if defined(CPUARM) + static tmr10ms_t alarmsCheckTime = 0; + #define SCHEDULE_NEXT_ALARMS_CHECK(seconds) alarmsCheckTime = get_tmr10ms() + (100*(seconds)) + if (int32_t(get_tmr10ms() - alarmsCheckTime) > 0) { + + SCHEDULE_NEXT_ALARMS_CHECK(1/*second*/); + + uint8_t now = TelemetryItem::now(); + bool sensor_lost = false; + for (int i=0; i TELEMETRY_VALUE_OLD_THRESHOLD) { + sensor_lost = true; + telemetryItems[i].lastReceived = TELEMETRY_VALUE_OLD; + TelemetrySensor * sensor = & g_model.telemetrySensors[i]; + if (sensor->unit == UNIT_DATETIME) { + telemetryItems[i].datetime.datestate = 0; + telemetryItems[i].datetime.timestate = 0; + } + } + } + } + if (sensor_lost && TELEMETRY_STREAMING()) { + audioEvent(AU_SENSOR_LOST); + } + +#if defined(PCBTARANIS) + if ((g_model.moduleData[INTERNAL_MODULE].rfProtocol != RF_PROTO_OFF || g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) && FRSKY_BAD_ANTENNA()) { + AUDIO_SWR_RED(); + POPUP_WARNING(STR_ANTENNAPROBLEM); + SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); + } +#endif + + if (TELEMETRY_STREAMING()) { + if (getRssiAlarmValue(1) && TELEMETRY_RSSI() < getRssiAlarmValue(1)) { + AUDIO_RSSI_RED(); + SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); + } + else if (getRssiAlarmValue(0) && TELEMETRY_RSSI() < getRssiAlarmValue(0)) { + AUDIO_RSSI_ORANGE(); + SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); + } } } - value = newVal; - lastReceived = now(); + if (TELEMETRY_STREAMING()) { + if (telemetryState == TELEMETRY_KO) { + AUDIO_TELEMETRY_BACK(); + } + telemetryState = TELEMETRY_OK; + } + else if (telemetryState == TELEMETRY_OK) { + telemetryState = TELEMETRY_KO; + AUDIO_TELEMETRY_LOST(); + } +#endif } -bool TelemetryItem::isAvailable() +void telemetryInterrupt10ms() { - return (lastReceived != TELEMETRY_VALUE_UNAVAILABLE); -} +#if defined(FRSKY_HUB) && !defined(CPUARM) + uint16_t voltage = 0; /* unit: 1/10 volts */ + for (uint8_t i=0; i= 3600) { - currentItem.consumption.prescale -= 3600; - setValue(sensor, value+1, sensor.unit, sensor.prec); - } - lastReceived = now(); } - break; +#else + // power calculation + uint8_t channel = g_model.frsky.voltsSource; + if (channel <= FRSKY_VOLTS_SOURCE_A2) { + voltage = applyChannelRatio(channel, telemetryData.analog[channel].value) / 10; + } - default: - break; +#if defined(FRSKY_HUB) + else if (channel == FRSKY_VOLTS_SOURCE_FAS) { + voltage = telemetryData.hub.vfas; + } +#endif + +#if defined(FRSKY_HUB) + uint16_t current = telemetryData.hub.current; /* unit: 1/10 amps */ +#else + uint16_t current = 0; +#endif + + channel = g_model.frsky.currentSource - FRSKY_CURRENT_SOURCE_A1; + if (channel < MAX_FRSKY_A_CHANNELS) { + current = applyChannelRatio(channel, telemetryData.analog[channel].value) / 10; + } + + telemetryData.hub.power = ((current>>1) * (voltage>>1)) / 25; + + telemetryData.hub.currentPrescale += current; + if (telemetryData.hub.currentPrescale >= 3600) { + telemetryData.hub.currentConsumption += 1; + telemetryData.hub.currentPrescale -= 3600; + } +#endif + } + +#if !defined(CPUARM) + if (telemetryData.hub.power > telemetryData.hub.maxPower) { + telemetryData.hub.maxPower = telemetryData.hub.power; + } +#endif + } + +#if defined(WS_HOW_HIGH) + if (wshhStreaming > 0) { + wshhStreaming--; + } +#endif + + if (telemetryStreaming > 0) { + telemetryStreaming--; + } + else { +#if !defined(SIMU) +#if defined(CPUARM) + telemetryData.rssi.reset(); +#else + telemetryData.rssi[0].set(0); + telemetryData.rssi[1].set(0); +#endif +#endif } } -void TelemetryItem::eval(const TelemetrySensor & sensor) +void telemetryReset() { - switch (sensor.formula) { - case TELEM_FORMULA_CELL: - if (sensor.cell.source) { - TelemetryItem & cellsItem = telemetryItems[sensor.cell.source-1]; - if (cellsItem.isOld()) { - lastReceived = TELEMETRY_VALUE_OLD; - } - else { - unsigned int index = sensor.cell.index; - if (index == TELEM_CELL_INDEX_LOWEST || index == TELEM_CELL_INDEX_HIGHEST || index == TELEM_CELL_INDEX_DELTA) { - unsigned int lowest=0, highest=0; - for (int i=0; i cellsItem.cells.values[highest-1].value) - highest = i+1; - } - else { - lowest = highest = 0; - } - } - if (lowest) { - switch (index) { - case TELEM_CELL_INDEX_LOWEST: - setValue(sensor, cellsItem.cells.values[lowest-1].value, UNIT_VOLTS, 2); - break; - case TELEM_CELL_INDEX_HIGHEST: - setValue(sensor, cellsItem.cells.values[highest-1].value, UNIT_VOLTS, 2); - break; - case TELEM_CELL_INDEX_DELTA: - setValue(sensor, cellsItem.cells.values[highest-1].value - cellsItem.cells.values[lowest-1].value, UNIT_VOLTS, 2); - break; - } - } - } - else { - index -= 1; - if (index < cellsItem.cells.count && cellsItem.cells.values[index].state) { - setValue(sensor, cellsItem.cells.values[index].value, UNIT_VOLTS, 2); - } - } - } - } - break; + memclear(&telemetryData, sizeof(telemetryData)); - case TELEM_FORMULA_DIST: - if (sensor.dist.gps) { - TelemetryItem gpsItem = telemetryItems[sensor.dist.gps-1]; - TelemetryItem * altItem = NULL; - if (!gpsItem.isAvailable()) { - return; - } - else if (gpsItem.isOld()) { - lastReceived = TELEMETRY_VALUE_OLD; - return; - } - if (sensor.dist.alt) { - altItem = &telemetryItems[sensor.dist.alt-1]; - if (!altItem->isAvailable()) { - return; - } - else if (altItem->isOld()) { - lastReceived = TELEMETRY_VALUE_OLD; - return; - } - } - uint32_t latitude, longitude; - gpsItem.gps.extractLatitudeLongitude(&latitude, &longitude); +#if defined(CPUARM) + for (int index=0; index gpsItem.pilotLatitude) ? latitude - gpsItem.pilotLatitude : gpsItem.pilotLatitude - latitude; - uint32_t dist = EARTH_RADIUS * angle / 1000000; - uint32_t result = dist*dist; + telemetryStreaming = 0; // reset counter only if valid frsky packets are being detected + link_counter = 0; - angle = (longitude > gpsItem.pilotLongitude) ? longitude - gpsItem.pilotLongitude : gpsItem.pilotLongitude - longitude; - dist = gpsItem.distFromEarthAxis * angle / 1000000; - result += dist*dist; +#if defined(CPUARM) + telemetryState = TELEMETRY_INIT; +#endif - if (altItem) { - dist = abs(altItem->value) / g_model.telemetrySensors[sensor.dist.alt-1].getPrecDivisor(); - result += dist*dist; - } +#if defined(FRSKY_HUB) && !defined(CPUARM) + telemetryData.hub.gpsLatitude_bp = 2; + telemetryData.hub.gpsLongitude_bp = 2; + telemetryData.hub.gpsFix = -1; +#endif - setValue(sensor, isqrt32(result), UNIT_METERS); - } - break; +#if defined(SIMU) - case TELEM_FORMULA_ADD: - case TELEM_FORMULA_AVERAGE: - case TELEM_FORMULA_MIN: - case TELEM_FORMULA_MAX: - case TELEM_FORMULA_MULTIPLY: +#if defined(CPUARM) + telemetryData.swr.value = 30; + telemetryData.rssi.value = 75; +#else + telemetryData.rssi[0].value = 75; + telemetryData.rssi[1].value = 75; + telemetryData.analog[TELEM_ANA_A1].set(120, UNIT_VOLTS); + telemetryData.analog[TELEM_ANA_A2].set(240, UNIT_VOLTS); +#endif + +#if !defined(CPUARM) + telemetryData.hub.fuelLevel = 75; + telemetryData.hub.rpm = 12000; + telemetryData.hub.vfas = 100; + telemetryData.hub.minVfas = 90; + +#if defined(GPS) + telemetryData.hub.gpsFix = 1; + telemetryData.hub.gpsLatitude_bp = 4401; + telemetryData.hub.gpsLatitude_ap = 7710; + telemetryData.hub.gpsLongitude_bp = 1006; + telemetryData.hub.gpsLongitude_ap = 8872; + telemetryData.hub.gpsSpeed_bp = 200; //in knots + telemetryData.hub.gpsSpeed_ap = 0; + getGpsPilotPosition(); + + telemetryData.hub.gpsLatitude_bp = 4401; + telemetryData.hub.gpsLatitude_ap = 7455; + telemetryData.hub.gpsLongitude_bp = 1006; + telemetryData.hub.gpsLongitude_ap = 9533; + getGpsDistance(); +#endif + + telemetryData.hub.airSpeed = 1000; // 185.1 km/h + + telemetryData.hub.cellsCount = 6; + telemetryData.hub.cellVolts[0] = 410/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER; + telemetryData.hub.cellVolts[1] = 420/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER; + telemetryData.hub.cellVolts[2] = 430/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER; + telemetryData.hub.cellVolts[3] = 440/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER; + telemetryData.hub.cellVolts[4] = 450/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER; + telemetryData.hub.cellVolts[5] = 460/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER; + telemetryData.hub.minCellVolts = 250/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER; + telemetryData.hub.minCell = 300; //unit 10mV + telemetryData.hub.minCells = 220; //unit 100mV + //telemetryData.hub.cellsSum = 261; //calculated from cellVolts[] + + telemetryData.hub.gpsAltitude_bp = 50; + telemetryData.hub.baroAltitude_bp = 50; + telemetryData.hub.minAltitude = 10; + telemetryData.hub.maxAltitude = 500; + + telemetryData.hub.accelY = 100; + telemetryData.hub.temperature1 = -30; + telemetryData.hub.maxTemperature1 = 100; + + telemetryData.hub.current = 55; + telemetryData.hub.maxCurrent = 65; +#endif +#endif + +/*Add some default sensor values to the simulator*/ +#if defined(CPUARM) && defined(SIMU) + for (int i=0; i(value, sensorValue)); - else if (sensor.formula == TELEM_FORMULA_MAX) - value = (count==1 ? sensorValue : max(value, sensorValue)); - else - value += sensorValue; - } - } - } - if (sensor.formula == TELEM_FORMULA_AVERAGE) { - if (count == 0) { - if (available) - lastReceived = TELEMETRY_VALUE_OLD; - return; - } - else { - value = (value + count/2) / count; - } - } - else if (sensor.formula == TELEM_FORMULA_MULTIPLY) { - if (count == 0) - return; - value = convertTelemetryValue(value, sensor.unit, mulprec, sensor.unit, sensor.prec); - } - setValue(sensor, value, sensor.unit, sensor.prec); - break; - } - - default: - break; - } -} - -void delTelemetryIndex(uint8_t index) -{ - memclear(&g_model.telemetrySensors[index], sizeof(TelemetrySensor)); - telemetryItems[index].clear(); - storageDirty(EE_MODEL); -} - -int availableTelemetryIndex() -{ - for (int index=0; index=0; index--) { - TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index]; - if (telemetrySensor.isAvailable()) { - return index; - } - } - return -1; -} - -void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec) -{ - bool available = false; - - for (int index=0; index= 0) { - switch (protocol) { -#if defined(FRSKY_SPORT) - case TELEM_PROTO_FRSKY_SPORT: - frskySportSetDefault(index, id, subId, instance); + case RSSI_ID: + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, RSSI_ID, 0, sensor.instance , 75, UNIT_RAW, 0); break; + case ADC1_ID: + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, ADC1_ID, 0, sensor.instance, 100, UNIT_RAW, 0); + break; + case ADC2_ID: + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, ADC2_ID, 0, sensor.instance, 245, UNIT_RAW, 0); + break; + case SWR_ID: + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, SWR_ID, 0, sensor.instance, 30, UNIT_RAW, 0); + break; + case BATT_ID: + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, BATT_ID, 0, sensor.instance, 100, UNIT_RAW, 0); + break; + } + } #endif -#if defined(FRSKY) - case TELEM_PROTO_FRSKY_D: - frskyDSetDefault(index, id); - break; +} + +#if defined(CPUARM) +// we don't reset the telemetry here as we would also reset the consumption after model load +void telemetryInit(uint8_t protocol) +{ + if (protocol == PROTOCOL_FRSKY_D) { + telemetryPortInit(FRSKY_D_BAUDRATE); + } +#if defined(CROSSFIRE) + else if (protocol == PROTOCOL_PULSES_CROSSFIRE) { + telemetryPortInit(CROSSFIRE_BAUDRATE); + telemetryPortSetDirectionOutput(); + } #endif - default: - return; - } - telemetryItems[index].setValue(g_model.telemetrySensors[index], value, unit, prec); + else if (protocol == PROTOCOL_FRSKY_D_SECONDARY) { + telemetryPortInit(0); + serial2TelemetryInit(PROTOCOL_FRSKY_D_SECONDARY); } else { - POPUP_WARNING(STR_TELEMETRYFULL); + telemetryPortInit(FRSKY_SPORT_BAUDRATE); } -} -void TelemetrySensor::init(const char * label, uint8_t unit, uint8_t prec) -{ - memclear(this->label, TELEM_LABEL_LEN); - strncpy(this->label, label, TELEM_LABEL_LEN); - this->unit = unit; - if (prec > 1 && (IS_DISTANCE_UNIT(unit) || IS_SPEED_UNIT(unit))) { - // 2 digits precision is not needed here - prec = 1; - } - this->prec = prec; -} - -void TelemetrySensor::init(uint16_t id) -{ - char label[4]; - label[0] = hex2zchar((id & 0xf000) >> 12); - label[1] = hex2zchar((id & 0x0f00) >> 8); - label[2] = hex2zchar((id & 0x00f0) >> 4); - label[3] = hex2zchar((id & 0x000f) >> 0); - init(label); -} - -bool TelemetrySensor::isAvailable() const -{ - return ZLEN(label) > 0; -} - -PACK(typedef struct { - uint8_t unitFrom; - uint8_t unitTo; - int16_t multiplier; - int16_t divisor; -}) UnitConversionRule; - -const UnitConversionRule unitConversionTable[] = { - /* unitFrom unitTo multiplier divisor */ - { UNIT_METERS, UNIT_FEET, 105, 32}, - { UNIT_METERS_PER_SECOND, UNIT_FEET_PER_SECOND, 105, 32}, - - { UNIT_KTS, UNIT_KMH, 1852, 1000}, // 1 knot = 1.85200 kilometers per hour - { UNIT_KTS, UNIT_MPH, 1151, 1000}, // 1 knot = 1.15077945 miles per hour - { UNIT_KTS, UNIT_METERS_PER_SECOND, 1000, 1944}, // 1 knot = 0.514444444 meters / second (divide with 1.94384449) - { UNIT_KTS, UNIT_FEET_PER_SECOND, 1688, 1000}, // 1 knot = 1.68780986 feet per second - - { UNIT_KMH, UNIT_KTS, 1000, 1852}, // 1 km/h = 0.539956803 knots (divide with 1.85200) - { UNIT_KMH, UNIT_MPH, 1000, 1609}, // 1 km/h = 0.621371192 miles per hour (divide with 1.60934400) - { UNIT_KMH, UNIT_METERS_PER_SECOND, 10, 36}, // 1 km/h = 0.277777778 meters / second (divide with 3.6) - { UNIT_KMH, UNIT_FEET_PER_SECOND, 911, 1000}, // 1 km/h = 0.911344415 feet per second - - { UNIT_MILLILITERS, UNIT_FLOZ, 100, 2957}, - { 0, 0, 0, 0} // termination -}; - -int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec) -{ - for (int i=prec; idivisor) { - if (p->unitFrom == unit && p->unitTo == destUnit) { - value = (value * (int32_t)p->multiplier) / (int32_t)p->divisor; - break; - } - ++p; - } + clearMFP(); } - - for (int i=destPrec; iprec == 2) { - value *= 10; - prec = 2; - } - else { - prec = 1; - } - value = (custom.ratio * value + 122) / 255; - } - - value = convertTelemetryValue(value, unit, prec, this->unit, this->prec); - - if (type == TELEM_TYPE_CUSTOM) { - value += custom.offset; - if (value < 0 && onlyPositive) { - value = 0; - } - } - - return value; + telemetryPortInit(); } +#endif -bool TelemetrySensor::isConfigurable() const +NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) { - if (type == TELEM_TYPE_CALCULATED) { - if (formula >= TELEM_FORMULA_CELL) { - return false; - } - } - else { - if (unit >= UNIT_FIRST_VIRTUAL) { - return false; - } - } - return true; + return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value); } -bool TelemetrySensor::isPrecConfigurable() const -{ - if (isConfigurable()) { - return true; - } - else if (unit == UNIT_CELLS) { - return true; - } - else { - return false; - } -} - -int32_t TelemetrySensor::getPrecMultiplier() const -{ - /* - Important: the return type must be signed, otherwise - mathematic operations with a negative telemetry value won't work - */ - if (prec == 2) return 1; - if (prec == 1) return 10; - return 100; -} - -int32_t TelemetrySensor::getPrecDivisor() const -{ - if (prec == 2) return 100; - if (prec == 1) return 10; - return 1; -} +#if defined(LUA) +Fifo * luaInputTelemetryFifo = NULL; +Fifo * luaOutputTelemetryFifo = NULL; +#endif diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index 36b3f695d..7ceb1e218 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -21,12 +21,41 @@ #ifndef _TELEMETRY_H_ #define _TELEMETRY_H_ -enum TelemetryProtocol -{ - TELEM_PROTO_FRSKY_D, - TELEM_PROTO_FRSKY_SPORT, -}; +#if defined (FRSKY) + // FrSky Telemetry + #include "frsky.h" +#elif defined(JETI) + // Jeti-DUPLEX Telemetry + #include "jeti.h" +#elif defined(ARDUPILOT) + // ArduPilot Telemetry + #include "ardupilot.h" +#elif defined(NMEA) + // NMEA Telemetry + #include "nmea.h" +#elif defined(MAVLINK) + // Mavlink Telemetry + #include "mavlink.h" +#endif +extern uint8_t telemetryStreaming; // >0 (true) == data is streaming in. 0 = no data detected for some time + +#if defined(WS_HOW_HIGH) +extern uint8_t wshhStreaming; +#endif + +extern uint8_t link_counter; + +#if defined(CPUARM) +enum TelemetryStates { + TELEMETRY_INIT, + TELEMETRY_OK, + TELEMETRY_KO +}; +extern uint8_t telemetryState; +#endif + +#if defined(CPUARM) #define TELEMETRY_VALUE_TIMER_CYCLE 200 /*20 seconds*/ #define TELEMETRY_VALUE_OLD_THRESHOLD 150 /*15 seconds*/ #define TELEMETRY_VALUE_UNAVAILABLE 255 @@ -60,108 +89,32 @@ PACK(struct CellValue } }); -class TelemetryItem -{ - public: - union { - int32_t value; // value, stored as uint32_t but interpreted accordingly to type - uint32_t distFromEarthAxis; - }; - - union { - int32_t valueMin; // min store - uint32_t pilotLongitude; - }; - - union { - int32_t valueMax; // max store - uint32_t pilotLatitude; - }; - - uint8_t lastReceived; // for detection of sensor loss - - union { - struct { - int32_t offsetAuto; - int32_t filterValues[TELEMETRY_AVERAGE_COUNT]; - } std; - struct { - uint16_t prescale; - } consumption; - struct { - uint8_t count; - CellValue values[6]; - } cells; - struct { - uint8_t datestate; - uint16_t year; - uint8_t month; - uint8_t day; - uint8_t timestate; - uint8_t hour; - uint8_t min; - uint8_t sec; - } datetime; - struct { - uint16_t longitude_bp; - uint16_t longitude_ap; - char longitudeEW; - uint16_t latitude_bp; - uint16_t latitude_ap; - char latitudeNS; - // pilot longitude is stored in min - // pilot latitude is stored in max - // distFromEarthAxis is stored in value - void extractLatitudeLongitude(uint32_t * latitude, uint32_t * longitude) - { - div_t qr = div(latitude_bp, 100); - *latitude = ((uint32_t)(qr.quot) * 1000000) + (((uint32_t)(qr.rem) * 10000 + latitude_ap) * 5) / 3; - qr = div(longitude_bp, 100); - *longitude = ((uint32_t)(qr.quot) * 1000000) + (((uint32_t)(qr.rem) * 10000 + longitude_ap) * 5) / 3; - } - } gps; - }; - - static uint8_t now() - { - return (get_tmr10ms() / 10) % TELEMETRY_VALUE_TIMER_CYCLE; - } - - TelemetryItem() - { - clear(); - } - - void clear() - { - memset(this, 0, sizeof(*this)); - lastReceived = TELEMETRY_VALUE_UNAVAILABLE; - } - - void eval(const TelemetrySensor & sensor); - void per10ms(const TelemetrySensor & sensor); - - void setValue(const TelemetrySensor & sensor, int32_t newVal, uint32_t unit, uint32_t prec=0); - bool isAvailable(); - bool isFresh(); - bool isOld(); - void gpsReceived(); -}; - -extern TelemetryItem telemetryItems[MAX_SENSORS]; -extern uint8_t allowNewSensors; - void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec); void delTelemetryIndex(uint8_t index); int availableTelemetryIndex(); int lastUsedTelemetryIndex(); + int32_t getTelemetryValue(uint8_t index, uint8_t & prec); int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec); void frskySportSetDefault(int index, uint16_t id, uint8_t subId, uint8_t instance); void frskyDSetDefault(int index, uint16_t id); +#endif #define IS_DISTANCE_UNIT(unit) ((unit) == UNIT_METERS || (unit) == UNIT_FEET) #define IS_SPEED_UNIT(unit) ((unit) >= UNIT_KTS && (unit) <= UNIT_MPH) +#if defined(CPUARM) +extern uint8_t telemetryProtocol; +#define IS_FRSKY_D_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_D) +#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_FRSKY_SPORT) +#else +#define IS_FRSKY_D_PROTOCOL() (true) +#define IS_FRSKY_SPORT_PROTOCOL() (false) +#endif + +#if defined(CPUARM) + #include "telemetry_sensors.h" +#endif + #endif // _TELEMETRY_H_ diff --git a/radio/src/telemetry/telemetry_holders.cpp b/radio/src/telemetry/telemetry_holders.cpp new file mode 100644 index 000000000..edcbc14d2 --- /dev/null +++ b/radio/src/telemetry/telemetry_holders.cpp @@ -0,0 +1,77 @@ +/* + * 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" + +#if defined(CPUARM) +void TelemetryValueWithMin::reset() +{ + memclear(this, sizeof(*this)); +} +#endif + +void TelemetryValueWithMin::set(uint8_t value) +{ +#if defined(CPUARM) + if (this->value == 0) { + memset(values, value, TELEMETRY_AVERAGE_COUNT); + this->value = value; + } + else { + //calculate the average from values[] and value + //also shift readings in values [] array + unsigned int sum = values[0]; + for (int i=0; ivalue = sum/(TELEMETRY_AVERAGE_COUNT+1); + } +#else + if (this->value == 0) { + this->value = value; + } + else { + sum += value; + if (link_counter == 0) { + this->value = sum / (IS_FRSKY_D_PROTOCOL() ? FRSKY_D_AVERAGING : FRSKY_SPORT_AVERAGING); + sum = 0; + } + } +#endif + + if (!min || value < min) { + min = value; + } +} + +void TelemetryValueWithMinMax::set(uint8_t value, uint8_t unit) +{ + TelemetryValueWithMin::set(value); + if (unit != UNIT_VOLTS) { + this->value = value; + } + if (!max || value > max) { + max = value; + } +} diff --git a/radio/src/telemetry/telemetry_holders.h b/radio/src/telemetry/telemetry_holders.h new file mode 100644 index 000000000..1068686d9 --- /dev/null +++ b/radio/src/telemetry/telemetry_holders.h @@ -0,0 +1,54 @@ +/* + * 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. + */ + +#ifndef _TELEMETRY_HOLDERS_H_ +#define _TELEMETRY_HOLDERS_H_ + +#include + +#if defined(CPUARM) +#define TELEMETRY_AVERAGE_COUNT 3 // we actually average one more reading! +#define RAW_FRSKY_MINMAX(v) v.values[TELEMETRY_AVERAGE_COUNT-1] +class TelemetryValueWithMin { + public: + uint8_t value; // fitered value (average of last TELEMETRY_AVERAGE_COUNT+1 values) + uint8_t min; + uint8_t values[TELEMETRY_AVERAGE_COUNT]; + void set(uint8_t value); + void reset(); +}; +#else +#define RAW_FRSKY_MINMAX(v) v.value +class TelemetryValueWithMin { + public: + uint8_t value; + uint8_t min; + uint16_t sum; + void set(uint8_t value); +}; +#endif + +class TelemetryValueWithMinMax: public TelemetryValueWithMin { + public: + uint8_t max; + void set(uint8_t value, uint8_t unit); +}; + +#endif // _TELEMETRY_HOLDERS_H_ \ No newline at end of file diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp new file mode 100644 index 000000000..294c2a951 --- /dev/null +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -0,0 +1,693 @@ +/* + * 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" + +TelemetryItem telemetryItems[MAX_SENSORS]; +uint8_t allowNewSensors; + +void TelemetryItem::gpsReceived() +{ + if (!distFromEarthAxis) { + gps.extractLatitudeLongitude(&pilotLatitude, &pilotLongitude); + uint32_t lat = pilotLatitude / 10000; + uint32_t angle2 = (lat*lat) / 10000; + uint32_t angle4 = angle2 * angle2; + distFromEarthAxis = 139*(((uint32_t)10000000-((angle2*(uint32_t)123370)/81)+(angle4/25))/12500); + } + lastReceived = now(); +} + +void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32_t unit, uint32_t prec) +{ + int32_t newVal = val; + + if (unit == UNIT_CELLS) { + uint32_t data = uint32_t(newVal); + uint8_t cellsCount = (data >> 24); + uint8_t cellIndex = ((data >> 16) & 0x0F); + uint16_t cellValue = (data & 0xFFFF); + if (cellsCount == 0) { + cellsCount = (cellIndex >= cells.count ? cellIndex + 1 : cells.count); + if (cellsCount != cells.count) { + clear(); + cells.count = cellsCount; + // we skip this round as we are not sure we received all cells values + return; + } + } + else if (cellsCount != cells.count) { + clear(); + cells.count = cellsCount; + } + cells.values[cellIndex].set(cellValue); + if (cellIndex+1 == cells.count) { + newVal = 0; + for (int i=0; i> 24); + datetime.month = (uint8_t) ((data & 0x00ff0000) >> 16); + datetime.day = (uint8_t) ((data & 0x0000ff00) >> 8); + if (datetime.year != 0) { + datetime.datestate = 1; + } +#if defined(RTCLOCK) + if (g_eeGeneral.adjustRTC && (datetime.datestate == 1)) { + struct gtm t; + gettime(&t); + t.tm_year = datetime.year+4; + t.tm_mon = datetime.month-1; + t.tm_mday = datetime.day; + rtcSetTime(&t); + } +#endif + } + else { + datetime.hour = ((uint8_t) ((data & 0xff000000) >> 24) + g_eeGeneral.timezone + 24) % 24; + datetime.min = (uint8_t) ((data & 0x00ff0000) >> 16); + datetime.sec = (uint16_t) ((data & 0x0000ff00) >> 8); + if (datetime.datestate == 1) { + datetime.timestate = 1; + } +#if defined(RTCLOCK) + if (g_eeGeneral.adjustRTC && datetime.datestate == 1) { + struct gtm t; + gettime(&t); + if (abs((t.tm_hour-datetime.hour)*3600 + (t.tm_min-datetime.min)*60 + (t.tm_sec-datetime.sec)) > 20) { + // we adjust RTC only if difference is > 20 seconds + t.tm_hour = datetime.hour; + t.tm_min = datetime.min; + t.tm_sec = datetime.sec; + g_rtcTime = gmktime(&t); // update local timestamp and get wday calculated + rtcSetTime(&t); + } + } +#endif + } + if (datetime.year == 0) { + return; + } + newVal = 0; + } + else if (unit == UNIT_GPS) { + uint32_t gps_long_lati_data = uint32_t(newVal); + uint32_t gps_long_lati_b1w, gps_long_lati_a1w; + gps_long_lati_b1w = (gps_long_lati_data & 0x3fffffff) / 10000; + gps_long_lati_a1w = (gps_long_lati_data & 0x3fffffff) % 10000; + switch ((gps_long_lati_data & 0xc0000000) >> 30) { + case 0: + gps.latitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + gps.latitude_ap = gps_long_lati_a1w; + gps.latitudeNS = 'N'; + break; + case 1: + gps.latitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + gps.latitude_ap = gps_long_lati_a1w; + gps.latitudeNS = 'S'; + break; + case 2: + gps.longitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + gps.longitude_ap = gps_long_lati_a1w; + gps.longitudeEW = 'E'; + break; + case 3: + gps.longitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + gps.longitude_ap = gps_long_lati_a1w; + gps.longitudeEW = 'W'; + break; + } + if (gps.longitudeEW && gps.latitudeNS) { + gpsReceived(); + } + return; + } + else if (unit >= UNIT_GPS_LONGITUDE && unit <= UNIT_GPS_LATITUDE_NS) { + uint32_t data = uint32_t(newVal); + switch (unit) { + case UNIT_GPS_LONGITUDE: + gps.longitude_bp = data >> 16; + gps.longitude_ap = data & 0xFFFF; + break; + case UNIT_GPS_LATITUDE: + gps.latitude_bp = data >> 16; + gps.latitude_ap = data & 0xFFFF; + break; + case UNIT_GPS_LONGITUDE_EW: + gps.longitudeEW = data; + break; + case UNIT_GPS_LATITUDE_NS: + gps.latitudeNS = data; + break; + } + if (gps.longitudeEW && gps.latitudeNS && gps.longitude_ap && gps.latitude_ap) { + gpsReceived(); + } + return; + } + else if (unit == UNIT_DATETIME_YEAR) { + datetime.year = newVal; + return; + } + else if (unit == UNIT_DATETIME_DAY_MONTH) { + uint32_t data = uint32_t(newVal); + datetime.month = data >> 8; + datetime.day = data & 0xFF; + datetime.datestate = 1; + return; + } + else if (unit == UNIT_DATETIME_HOUR_MIN) { + uint32_t data = uint32_t(newVal); + datetime.hour = ((data & 0xFF) + g_eeGeneral.timezone + 24) % 24; + datetime.min = data >> 8; + } + else if (unit == UNIT_DATETIME_SEC) { + datetime.sec = newVal & 0xFF; + datetime.timestate = 1; + newVal = 0; + } + else if (unit == UNIT_RPMS) { + if (sensor.custom.ratio != 0) { + newVal = (newVal * sensor.custom.offset) / sensor.custom.ratio; + } + } + else { + newVal = sensor.getValue(newVal, unit, prec); + if (sensor.autoOffset) { + if (!isAvailable()) { + std.offsetAuto = -newVal; + } + newVal += std.offsetAuto; + } + else if (sensor.filter) { + if (!isAvailable()) { + for (int i=0; i valueMax) { + valueMax = newVal; + if (sensor.unit == UNIT_VOLTS) { + valueMin = newVal; // the batt was changed + } + } + + for (int i=0; i= 3600) { + currentItem.consumption.prescale -= 3600; + setValue(sensor, value+1, sensor.unit, sensor.prec); + } + lastReceived = now(); + } + break; + + default: + break; + } +} + +void TelemetryItem::eval(const TelemetrySensor & sensor) +{ + switch (sensor.formula) { + case TELEM_FORMULA_CELL: + if (sensor.cell.source) { + TelemetryItem & cellsItem = telemetryItems[sensor.cell.source-1]; + if (cellsItem.isOld()) { + lastReceived = TELEMETRY_VALUE_OLD; + } + else { + unsigned int index = sensor.cell.index; + if (index == TELEM_CELL_INDEX_LOWEST || index == TELEM_CELL_INDEX_HIGHEST || index == TELEM_CELL_INDEX_DELTA) { + unsigned int lowest=0, highest=0; + for (int i=0; i cellsItem.cells.values[highest-1].value) + highest = i+1; + } + else { + lowest = highest = 0; + } + } + if (lowest) { + switch (index) { + case TELEM_CELL_INDEX_LOWEST: + setValue(sensor, cellsItem.cells.values[lowest-1].value, UNIT_VOLTS, 2); + break; + case TELEM_CELL_INDEX_HIGHEST: + setValue(sensor, cellsItem.cells.values[highest-1].value, UNIT_VOLTS, 2); + break; + case TELEM_CELL_INDEX_DELTA: + setValue(sensor, cellsItem.cells.values[highest-1].value - cellsItem.cells.values[lowest-1].value, UNIT_VOLTS, 2); + break; + } + } + } + else { + index -= 1; + if (index < cellsItem.cells.count && cellsItem.cells.values[index].state) { + setValue(sensor, cellsItem.cells.values[index].value, UNIT_VOLTS, 2); + } + } + } + } + break; + + case TELEM_FORMULA_DIST: + if (sensor.dist.gps) { + TelemetryItem gpsItem = telemetryItems[sensor.dist.gps-1]; + TelemetryItem * altItem = NULL; + if (!gpsItem.isAvailable()) { + return; + } + else if (gpsItem.isOld()) { + lastReceived = TELEMETRY_VALUE_OLD; + return; + } + if (sensor.dist.alt) { + altItem = &telemetryItems[sensor.dist.alt-1]; + if (!altItem->isAvailable()) { + return; + } + else if (altItem->isOld()) { + lastReceived = TELEMETRY_VALUE_OLD; + return; + } + } + uint32_t latitude, longitude; + gpsItem.gps.extractLatitudeLongitude(&latitude, &longitude); + + uint32_t angle = (latitude > gpsItem.pilotLatitude) ? latitude - gpsItem.pilotLatitude : gpsItem.pilotLatitude - latitude; + uint32_t dist = EARTH_RADIUS * angle / 1000000; + uint32_t result = dist*dist; + + angle = (longitude > gpsItem.pilotLongitude) ? longitude - gpsItem.pilotLongitude : gpsItem.pilotLongitude - longitude; + dist = gpsItem.distFromEarthAxis * angle / 1000000; + result += dist*dist; + + if (altItem) { + dist = abs(altItem->value) / g_model.telemetrySensors[sensor.dist.alt-1].getPrecDivisor(); + result += dist*dist; + } + + setValue(sensor, isqrt32(result), UNIT_METERS); + } + break; + + case TELEM_FORMULA_ADD: + case TELEM_FORMULA_AVERAGE: + case TELEM_FORMULA_MIN: + case TELEM_FORMULA_MAX: + case TELEM_FORMULA_MULTIPLY: + { + int32_t value=0, count=0, available=0, maxitems=4, mulprec=0; + if (sensor.formula == TELEM_FORMULA_MULTIPLY) { + maxitems = 2; + value = 1; + } + for (int i=0; i(value, sensorValue)); + else if (sensor.formula == TELEM_FORMULA_MAX) + value = (count==1 ? sensorValue : max(value, sensorValue)); + else + value += sensorValue; + } + } + } + if (sensor.formula == TELEM_FORMULA_AVERAGE) { + if (count == 0) { + if (available) + lastReceived = TELEMETRY_VALUE_OLD; + return; + } + else { + value = (value + count/2) / count; + } + } + else if (sensor.formula == TELEM_FORMULA_MULTIPLY) { + if (count == 0) + return; + value = convertTelemetryValue(value, sensor.unit, mulprec, sensor.unit, sensor.prec); + } + setValue(sensor, value, sensor.unit, sensor.prec); + break; + } + + default: + break; + } +} + +void delTelemetryIndex(uint8_t index) +{ + memclear(&g_model.telemetrySensors[index], sizeof(TelemetrySensor)); + telemetryItems[index].clear(); + storageDirty(EE_MODEL); +} + +int availableTelemetryIndex() +{ + for (int index=0; index=0; index--) { + TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index]; + if (telemetrySensor.isAvailable()) { + return index; + } + } + return -1; +} + +void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec) +{ + bool available = false; + + for (int index=0; index= 0) { + switch (protocol) { +#if defined(FRSKY_SPORT) + case TELEM_PROTO_FRSKY_SPORT: + frskySportSetDefault(index, id, subId, instance); + break; +#endif +#if defined(FRSKY) + case TELEM_PROTO_FRSKY_D: + frskyDSetDefault(index, id); + break; +#endif + default: + return; + } + telemetryItems[index].setValue(g_model.telemetrySensors[index], value, unit, prec); + } + else { + POPUP_WARNING(STR_TELEMETRYFULL); + } +} + +void TelemetrySensor::init(const char * label, uint8_t unit, uint8_t prec) +{ + memclear(this->label, TELEM_LABEL_LEN); + strncpy(this->label, label, TELEM_LABEL_LEN); + this->unit = unit; + if (prec > 1 && (IS_DISTANCE_UNIT(unit) || IS_SPEED_UNIT(unit))) { + // 2 digits precision is not needed here + prec = 1; + } + this->prec = prec; +} + +void TelemetrySensor::init(uint16_t id) +{ + char label[4]; + label[0] = hex2zchar((id & 0xf000) >> 12); + label[1] = hex2zchar((id & 0x0f00) >> 8); + label[2] = hex2zchar((id & 0x00f0) >> 4); + label[3] = hex2zchar((id & 0x000f) >> 0); + init(label); +} + +bool TelemetrySensor::isAvailable() const +{ + return ZLEN(label) > 0; +} + +PACK(typedef struct { + uint8_t unitFrom; + uint8_t unitTo; + int16_t multiplier; + int16_t divisor; +}) UnitConversionRule; + +const UnitConversionRule unitConversionTable[] = { + /* unitFrom unitTo multiplier divisor */ + { UNIT_METERS, UNIT_FEET, 105, 32}, + { UNIT_METERS_PER_SECOND, UNIT_FEET_PER_SECOND, 105, 32}, + + { UNIT_KTS, UNIT_KMH, 1852, 1000}, // 1 knot = 1.85200 kilometers per hour + { UNIT_KTS, UNIT_MPH, 1151, 1000}, // 1 knot = 1.15077945 miles per hour + { UNIT_KTS, UNIT_METERS_PER_SECOND, 1000, 1944}, // 1 knot = 0.514444444 meters / second (divide with 1.94384449) + { UNIT_KTS, UNIT_FEET_PER_SECOND, 1688, 1000}, // 1 knot = 1.68780986 feet per second + + { UNIT_KMH, UNIT_KTS, 1000, 1852}, // 1 km/h = 0.539956803 knots (divide with 1.85200) + { UNIT_KMH, UNIT_MPH, 1000, 1609}, // 1 km/h = 0.621371192 miles per hour (divide with 1.60934400) + { UNIT_KMH, UNIT_METERS_PER_SECOND, 10, 36}, // 1 km/h = 0.277777778 meters / second (divide with 3.6) + { UNIT_KMH, UNIT_FEET_PER_SECOND, 911, 1000}, // 1 km/h = 0.911344415 feet per second + + { UNIT_MILLILITERS, UNIT_FLOZ, 100, 2957}, + { 0, 0, 0, 0} // termination +}; + +int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec) +{ + for (int i=prec; idivisor) { + if (p->unitFrom == unit && p->unitTo == destUnit) { + value = (value * (int32_t)p->multiplier) / (int32_t)p->divisor; + break; + } + ++p; + } + } + + for (int i=destPrec; iprec == 2) { + value *= 10; + prec = 2; + } + else { + prec = 1; + } + value = (custom.ratio * value + 122) / 255; + } + + value = convertTelemetryValue(value, unit, prec, this->unit, this->prec); + + if (type == TELEM_TYPE_CUSTOM) { + value += custom.offset; + if (value < 0 && onlyPositive) { + value = 0; + } + } + + return value; +} + +bool TelemetrySensor::isConfigurable() const +{ + if (type == TELEM_TYPE_CALCULATED) { + if (formula >= TELEM_FORMULA_CELL) { + return false; + } + } + else { + if (unit >= UNIT_FIRST_VIRTUAL) { + return false; + } + } + return true; +} + +bool TelemetrySensor::isPrecConfigurable() const +{ + if (isConfigurable()) { + return true; + } + else if (unit == UNIT_CELLS) { + return true; + } + else { + return false; + } +} + +int32_t TelemetrySensor::getPrecMultiplier() const +{ + /* + Important: the return type must be signed, otherwise + mathematic operations with a negative telemetry value won't work + */ + if (prec == 2) return 1; + if (prec == 1) return 10; + return 100; +} + +int32_t TelemetrySensor::getPrecDivisor() const +{ + if (prec == 2) return 100; + if (prec == 1) return 10; + return 1; +} diff --git a/radio/src/telemetry/telemetry_sensors.h b/radio/src/telemetry/telemetry_sensors.h new file mode 100644 index 000000000..26747076b --- /dev/null +++ b/radio/src/telemetry/telemetry_sensors.h @@ -0,0 +1,115 @@ +/* + * 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. + */ + +#ifndef _TELEMETRY_SENSORS_H_ +#define _TELEMETRY_SENSORS_H_ + +class TelemetryItem +{ + public: + union { + int32_t value; // value, stored as uint32_t but interpreted accordingly to type + uint32_t distFromEarthAxis; + }; + + union { + int32_t valueMin; // min store + uint32_t pilotLongitude; + }; + + union { + int32_t valueMax; // max store + uint32_t pilotLatitude; + }; + + uint8_t lastReceived; // for detection of sensor loss + + union { + struct { + int32_t offsetAuto; + int32_t filterValues[TELEMETRY_AVERAGE_COUNT]; + } std; + struct { + uint16_t prescale; + } consumption; + struct { + uint8_t count; + CellValue values[6]; + } cells; + struct { + uint8_t datestate; + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t timestate; + uint8_t hour; + uint8_t min; + uint8_t sec; + } datetime; + struct { + uint16_t longitude_bp; + uint16_t longitude_ap; + char longitudeEW; + uint16_t latitude_bp; + uint16_t latitude_ap; + char latitudeNS; + // pilot longitude is stored in min + // pilot latitude is stored in max + // distFromEarthAxis is stored in value + void extractLatitudeLongitude(uint32_t * latitude, uint32_t * longitude) + { + div_t qr = div(latitude_bp, 100); + *latitude = ((uint32_t)(qr.quot) * 1000000) + (((uint32_t)(qr.rem) * 10000 + latitude_ap) * 5) / 3; + qr = div(longitude_bp, 100); + *longitude = ((uint32_t)(qr.quot) * 1000000) + (((uint32_t)(qr.rem) * 10000 + longitude_ap) * 5) / 3; + } + } gps; + }; + + static uint8_t now() + { + return (get_tmr10ms() / 10) % TELEMETRY_VALUE_TIMER_CYCLE; + } + + TelemetryItem() + { + clear(); + } + + void clear() + { + memset(this, 0, sizeof(*this)); + lastReceived = TELEMETRY_VALUE_UNAVAILABLE; + } + + void eval(const TelemetrySensor & sensor); + void per10ms(const TelemetrySensor & sensor); + + void setValue(const TelemetrySensor & sensor, int32_t newVal, uint32_t unit, uint32_t prec=0); + bool isAvailable(); + bool isFresh(); + bool isOld(); + void gpsReceived(); +}; + +extern TelemetryItem telemetryItems[MAX_SENSORS]; +extern uint8_t allowNewSensors; + +#endif // _TELEMETRY_SENSORS_H_ diff --git a/radio/src/tests/frsky.cpp b/radio/src/tests/frsky.cpp index 189f35bb6..3872e0ad6 100644 --- a/radio/src/tests/frsky.cpp +++ b/radio/src/tests/frsky.cpp @@ -34,7 +34,7 @@ void displayVoltagesScreen(); TEST(FrSky, gpsNfuel) { g_model.frsky.usrProto = 1; - frskyData.hub.gpsFix = 1; + telemetryData.hub.gpsFix = 1; uint8_t pkt1[] = { 0xfd, 0x07, 0x00, 0x5e, 0x14, 0x2c, 0x00, 0x5e, 0x1c, 0x03 }; uint8_t pkt2[] = { 0xfd, 0x07, 0x00, 0x00, 0x5e, 0x13, 0x38, 0x0c, 0x5e, 0x1b }; @@ -50,14 +50,14 @@ TEST(FrSky, gpsNfuel) frskyDProcessPacket(pkt5); frskyDProcessPacket(pkt6); frskyDProcessPacket(pkt7); - EXPECT_EQ(frskyData.hub.gpsCourse_bp, 44); - EXPECT_EQ(frskyData.hub.gpsCourse_ap, 03); - EXPECT_EQ(frskyData.hub.gpsLongitude_bp / 100, 120); - EXPECT_EQ(frskyData.hub.gpsLongitude_bp % 100, 15); - EXPECT_EQ(frskyData.hub.gpsLongitude_ap, 0x2698); - EXPECT_EQ(frskyData.hub.gpsLatitudeNS, 'N'); - EXPECT_EQ(frskyData.hub.gpsLongitudeEW, 'E'); - EXPECT_EQ(frskyData.hub.fuelLevel, 100); + EXPECT_EQ(telemetryData.hub.gpsCourse_bp, 44); + EXPECT_EQ(telemetryData.hub.gpsCourse_ap, 03); + EXPECT_EQ(telemetryData.hub.gpsLongitude_bp / 100, 120); + EXPECT_EQ(telemetryData.hub.gpsLongitude_bp % 100, 15); + EXPECT_EQ(telemetryData.hub.gpsLongitude_ap, 0x2698); + EXPECT_EQ(telemetryData.hub.gpsLatitudeNS, 'N'); + EXPECT_EQ(telemetryData.hub.gpsLongitudeEW, 'E'); + EXPECT_EQ(telemetryData.hub.fuelLevel, 100); } TEST(FrSky, dateNtime) @@ -68,17 +68,17 @@ TEST(FrSky, dateNtime) frskyDProcessPacket(pkt1); frskyDProcessPacket(pkt2); frskyDProcessPacket(pkt3); - EXPECT_EQ(frskyData.hub.day, 15); - EXPECT_EQ(frskyData.hub.month, 07); - EXPECT_EQ(frskyData.hub.year, 11); - EXPECT_EQ(frskyData.hub.hour, 06); - EXPECT_EQ(frskyData.hub.min, 18); - EXPECT_EQ(frskyData.hub.sec, 50); + EXPECT_EQ(telemetryData.hub.day, 15); + EXPECT_EQ(telemetryData.hub.month, 07); + EXPECT_EQ(telemetryData.hub.year, 11); + EXPECT_EQ(telemetryData.hub.hour, 06); + EXPECT_EQ(telemetryData.hub.min, 18); + EXPECT_EQ(telemetryData.hub.sec, 50); } #endif #if defined(FRSKY) && defined(CPUARM) -TEST(FrSky, FrskyValueWithMinAveraging) +TEST(FrSky, TelemetryValueWithMinAveraging) { /* The following expected[] array is filled @@ -90,7 +90,7 @@ TEST(FrSky, FrskyValueWithMinAveraging) uint8_t expected[] = { 10, 12, 17, 25, 35, 45, 55, 65, 75, 85, 92, 97, 100, 100, 100, 100, 100}; int testPos = 0; //test of averaging - FrskyValueWithMin testVal; + TelemetryValueWithMin testVal; testVal.value = 0; testVal.set(10); EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), 10); diff --git a/radio/src/tests/gtests.h b/radio/src/tests/gtests.h index 5dd7db858..07e7a14e8 100644 --- a/radio/src/tests/gtests.h +++ b/radio/src/tests/gtests.h @@ -79,7 +79,7 @@ inline void MIXER_RESET() inline void TELEMETRY_RESET() { #if defined(FRSKY) - memclear(&frskyData, sizeof(frskyData)); + memclear(&telemetryData, sizeof(telemetryData)); TELEMETRY_RSSI() = 100; #endif #if defined(CPUARM) && defined(FRSKY) diff --git a/radio/src/vario.cpp b/radio/src/vario.cpp index 67f195e4e..2d81568e9 100644 --- a/radio/src/vario.cpp +++ b/radio/src/vario.cpp @@ -80,7 +80,7 @@ void varioWakeup() if (isFunctionActive(FUNCTION_VARIO)) { #if defined(AUDIO) cli(); - int16_t verticalSpeed = frskyData.hub.varioSpeed; + int16_t verticalSpeed = telemetryData.hub.varioSpeed; sei(); #if defined(PCBSTD) @@ -126,7 +126,7 @@ void varioWakeup() #elif defined(BUZZER) // && !defined(AUDIO) - int8_t verticalSpeed = limit((int16_t)-100, (int16_t)(frskyData.hub.varioSpeed/10), (int16_t)+100); + int8_t verticalSpeed = limit((int16_t)-100, (int16_t)(telemetryData.hub.varioSpeed/10), (int16_t)+100); uint16_t interval; if (verticalSpeed == 0) { From d73b34e1a97be56996b1cb8621bc779a4150ed45 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 11:25:47 +0200 Subject: [PATCH 70/98] [Crossfire] Back to 400kHz, at least for Taranis (no DMA on RX) --- radio/src/pulses/pulses_arm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/pulses/pulses_arm.h b/radio/src/pulses/pulses_arm.h index 7dc7277b7..9a8fb4091 100644 --- a/radio/src/pulses/pulses_arm.h +++ b/radio/src/pulses/pulses_arm.h @@ -68,7 +68,7 @@ PACK(struct Dsm2PulsesData { }); #endif -#define CROSSFIRE_BAUDRATE 921600 +#define CROSSFIRE_BAUDRATE 400000 #define CROSSFIRE_FRAME_LEN 25 #define CROSSFIRE_CHANNELS_COUNT 16 PACK(struct CrossfirePulsesData { From 7c1db4c4dc3eb72949de34b31cc8035db684f3e5 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 11:26:57 +0200 Subject: [PATCH 71/98] Less files in .gitignore (they are now visible in case of in source compilation) --- radio/src/translations/.gitignore | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 radio/src/translations/.gitignore diff --git a/radio/src/translations/.gitignore b/radio/src/translations/.gitignore deleted file mode 100644 index e270edda0..000000000 --- a/radio/src/translations/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -/en.h -/cz.h -/de.h -/es.h -/fi.h -/fr.h -/it.h -/nl.h -/pl.h -/pt.h -/se.h From af87c57d1dc1a7fd9300ef936482c6489ca65719 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 17:23:35 +0200 Subject: [PATCH 72/98] Translations files cosmetics (no CRLF / standard header / translation author, start at line 45) --- radio/src/translations/cz.h.txt | 39 +- radio/src/translations/de.h.txt | 2339 +++++++++++++++--------------- radio/src/translations/en.h.txt | 41 +- radio/src/translations/es.h.txt | 37 +- radio/src/translations/fi.h.txt | 41 +- radio/src/translations/fr.h.txt | 41 +- radio/src/translations/it.h.txt | 2334 +++++++++++++++--------------- radio/src/translations/nl.h.txt | 43 +- radio/src/translations/pl.h.txt | 41 +- radio/src/translations/pt.h.txt | 2241 +++++++++++++++-------------- radio/src/translations/se.h.txt | 2363 +++++++++++++++---------------- 11 files changed, 4727 insertions(+), 4833 deletions(-) diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index c0fede4ec..84d5f6b50 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -1,16 +1,12 @@ /* - * Authors (alphabetical order) - * - Bertrand Songis - * - Bernet Andre - * - Kjell Kernen - * - Martin Hotar - * - Romolo Manfredini + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -21,10 +17,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * - * - * - * + */ + +// CZ translations author: Martin Hotar + +/* * !!!!! DO NOT EDIT cz.h - EDIT cz.h.txt INSTEAD !!!!!!! * * In order to make translations easier cz.h.txt is parsed and national @@ -33,7 +30,9 @@ * * !!!!! DO NOT EDIT cz.h - EDIT cz.h.txt INSTEAD !!!!!!! */ -/* Formatting octal codes available in TR_ strings: + +/* + * Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) * \036 -newline * \035 -horizontal tab (ARM only) @@ -43,14 +42,6 @@ - - - - - - - - // NON ZERO TERMINATED STRINGS #define LEN_OFFON "\003" #define TR_OFFON "VYP""ZAP" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index f1e5184a1..5cfabed45 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -1,1174 +1,1165 @@ -/* German checked 27.09.2015 r096 opentx V2.1.4 für X9D,X9D+, X9E, Th9, 9XR, 9XR-Pro - * Authors (alphabetical order) - * - Bertrand Songis - * - Bernet Andre - * - Helle - * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ - * - * 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. - * - * - * - * !!!!! DO NOT EDIT de.h - EDIT de.h.txt INSTEAD !!!!!!! - * - * In order to make translations easier de.h.txt is parsed and national - * characters are replaced by bitmap codes. The result is de.h. - * - * See translate.py in the util folder for the list of character codes - * - * !!!!! DO NOT EDIT de.h - EDIT de.h.txt INSTEAD !!!!!!! - */ - /* Formatting octal codes available in TR_ strings: - * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline - * \035 -horizontal tab (ARM only) - * \001 to \034 -extended spacing (value * FW/2) - * \0 -ends current string - */ - - - - - - - - - - - - - - -// NON ZERO TERMINATED STRINGS -#define LEN_OFFON "\003" -#define TR_OFFON "AUS""EIN" - -#define LEN_MMMINV "\003" -#define TR_MMMINV "---""INV" - -#define LEN_NCHANNELS "\004" -#define TR_NCHANNELS "\0014CH\0016CH\0018CH10CH12CH14CH16CH" - -#define LEN_VBEEPMODE "\005" -#define TR_VBEEPMODE "Stumm""Alarm""NoKey""Alle\0" - -#define LEN_VBEEPLEN "\005" -#define TR_VBEEPLEN "0====""=0===""==0==""===0=""====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 - -#define LEN_TRNMODE "\003" -#define TR_TRNMODE "AUS"" +="" :=" - -#define LEN_TRNCHN "\003" -#define TR_TRNCHN "CH1CH2CH3CH4" - -#define LEN_UART3MODES "\015" -#define TR_UART3MODES "AUS\0 ""S-Port Mirror""Telemetrie\0 ""SBUS Schüler\0""Debug\0" - -#define LEN_SWTYPES "\006" -#define TR_SWTYPES "Kein\0 ""Taster""2POS\0 ""3POS\0" - -#define LEN_POTTYPES "\017" -#define TR_POTTYPES "Kein\0 ""Poti mit Raste ""Stufen-Schalter""Poti ohne Raste\0" - -#define LEN_SLIDERTYPES "\006" -#define TR_SLIDERTYPES "Keine\0""Slider" - -#define LEN_DATETIME "\005" -#define TR_DATETIME "DATE:""ZEIT:" - -#define LEN_VLCD "\006" -#define TR_VLCD "NormalOptrex" - -#define LEN_VPERSISTENT "\014" -#define TR_VPERSISTENT "AUS\0 ""Flugzeit\0 ""Manuell Ruck" - -#define LEN_COUNTRYCODES TR("\002", "\007") -#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0") - -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF" - -#if defined(MODULE_D16_EU_ONLY_SUPPORT) - #define LEN_XJT_PROTOCOLS "\007" - #define TR_XJT_PROTOCOLS "AUS\0 ""D16-EU\0""D8\0 ""LR12-EU" -#else - #define LEN_XJT_PROTOCOLS "\004" - #define TR_XJT_PROTOCOLS "AUS\0""X16\0""D8\0 ""LR12" -#endif - -#define LEN_DSM_PROTOCOLS "\004" -#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" //LP45 =Low Power 4 und 5 Kanal - -#define LEN_VTRIMINC TR("\007", "\014") // ursprüglich "\006", "\013" -#define TR_VTRIMINC TR("Expo ""ExFein ""Fein ""Mittel ""Grob ", "Exponentiell""Extrafein ""Fein ""Mittel ""Grob ") - -#define LEN_VDISPLAYTRIMS "\006" -#define TR_VDISPLAYTRIMS "Nein\0 ""Kurz\0 ""Ja\0" //Trimmwerte Keine, kurze Anzeigen, Ja - -#define LEN_VBEEPCOUNTDOWN "\006" -#define TR_VBEEPCOUNTDOWN "Kein\0 Pieps\0StimmeHaptik" - -#define LEN_VVARIOCENTER "\006" -#define TR_VVARIOCENTER "Ton\0 ""Ruhe " - -#define LEN_CURVE_TYPES "\010" -#define TR_CURVE_TYPES " Nur Y "" X und Y" //"Standard""Custom\0" - -#define LEN_RETA123 "\001" - -#if defined(PCBHORUS) - #define TR_RETA123 "SHGQ12345LR" -#elif defined(PCBFLAMENCO) - #define TR_RETA123 "SHGQ123LR" -#elif defined(PCBTARANIS) && defined(REV9E) - #define TR_RETA123 "SHGQ1234LRLR" -#elif defined(PCBTARANIS) || defined(REVX) - #define TR_RETA123 "SHGQ123LR" -#elif defined(PCBSKY9X) - #define TR_RETA123 "SHGQ123a" -#elif defined(CPUM2560) - #define TR_RETA123 "SHGQ123ab" -#else - #define TR_RETA123 "SHGQ123" -#endif - -#define LEN_VPROTOS "\006" - -#if defined(PXX) - #define TR_PXX "PXX\0 " -#elif defined(DSM2) || defined(IRPROTOS) - #define TR_PXX "[PXX]\0" -#else - #define TR_PXX -#endif - -#if defined(DSM2) - #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " -#elif defined(IRPROTOS) - #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" -#else - #define TR_DSM2 -#endif - -#if defined(IRPROTOS) - #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" -#else - #define TR_IRPROTOS -#endif - -#if defined(CPUARM) - #define TR_XPPM -#else - #define TR_XPPM "PPM16\0""PPMsim" -#endif - -#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS - -#define LEN_POSNEG "\003" -#define TR_POSNEG "POS""NEG" - -#if defined(PCBSKY9X) && defined(REVX) - #define LEN_VOUTPUT_TYPE "\011" - #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" -#endif - -#define LEN_VCURVEFUNC "\003" -#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" - -#define LEN_VMLTPX "\010" -#define TR_VMLTPX "Addiere ""Multipl.""Ersetze " - -#define LEN_VMLTPX2 "\002" -#define TR_VMLTPX2 "+=""*="":=" - -#define LEN_VMIXTRIMS "\003" -#define TR_VMIXTRIMS "AUS""EIN""Sei""Höh""Gas""Que" //Mixer Trim Werte - -#if LCD_W >= 212 - #define TR_CSWTIMER "Takt\0" // TIM = Takt = Taktgenerator - #define TR_CSWSTICKY "SRFF\0" // Sticky = RS-Flip-Flop - #define TR_CSWRANGE "Range" // Range = Bereichsabfrage von bis - #define TR_CSWSTAY "Puls\0" // Edge = einstellbarer Impuls -#else - #define TR_CSWTIMER "Takt\0" // TIM = Takt = Taktgenerator - #define TR_CSWSTICKY "SRFF\0" // Sticky = RS-Flip-Flop - #if defined(CPUARM) - #define TR_CSWRANGE "Rnge\0" // Range= Bereichsabfrage von bis - #define TR_CSWSTAY "Puls\0" // Edge = einstellbarer Impuls - #else - #define TR_CSWRANGE - #define TR_CSWSTAY - #endif -#endif - -#if defined(CPUARM) -#define TR_CSWEQUAL "a=x\0 " -#else -#define TR_CSWEQUAL -#endif - -#define LEN_VCSWFUNC "\005" -#if defined(CPUARM) -#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 - #define TR_SF_SAFETY "Override\0 " //"Override\0 " -#elif defined(OVERRIDE_CHANNEL_FUNCTION) - #define TR_SF_SAFETY "Overr.\0 " //"Overr.\0 " -#else - #define TR_SF_SAFETY "---\0 " -#endif - -#if defined(PCBTARANIS) - #define TR_SF_SCREENSHOT "Screenshot" -#else - #define TR_SF_SCREENSHOT -#endif - -#define TR_SF_RESERVE "[Reserve]\0" - -#if defined(CPUARM) - #define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_SCREENSHOT TR_SF_TEST -#elif defined(PCBGRUVIN9X) - #define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_TEST -#else - #define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "LCD Licht\0" TR_SF_TEST -#endif - -#define LEN_VFSWRESET TR("\004", "\011") - -#if defined(FRSKY) - #define TR_FSW_RESET_TELEM TR("Telm", "Telemetrie") -#else - #define TR_FSW_RESET_TELEM -#endif - -#if ROTARY_ENCODERS == 2 - #define TR_FSW_RESET_ROTENC TR("DGa\0""DGb\0", "DrehGb A\0""DrehGb B\0") -#elif ROTARY_ENCODERS == 1 - #define TR_FSW_RESET_ROTENC TR("D.G.", "DrehGb\0 ") -#else - #define TR_FSW_RESET_ROTENC -#endif - -#if LCD_W >= 212 - #define TR_FSW_RESET_TIMERS "Timer 1\0 ""Timer 2\0 ""Timer 3\0 " -#elif defined(CPUARM) - #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2""Tmr3" -#else - #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2" -#endif - -#define TR_VFSWRESET TR(TR_FSW_RESET_TIMERS "All\0" TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC, TR_FSW_RESET_TIMERS "All\0 " TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC) - -#define LEN_FUNCSOUNDS TR("\004", "\006") -#define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Piep1\0""Piep2\0""Piep3\0""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") - -#define LEN_VTELEMCHNS TR("\004", "\005") - -#if defined(CPUARM) - #define TR_TELEM_RESERVE TR("[--]", "[---]") - #define TR_TELEM_TIME TR("Zeit", "Zeit\0") - #define TR_SWR TR("SWR\0", "SWR\0 ") - #define TR_RX_BATT TR("[NA]", "[NA]\0") - #define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ") - #define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ") -#else - #define TR_TELEM_RESERVE - #define TR_TELEM_TIME - #define TR_SWR - #define TR_RX_BATT - #define TR_A3_A4 - #define TR_A3_A4_MIN -#endif - -#define TR_ASPD_MAX TR("ASp+", "ASpd+") - -#if LCD_W >= 212 - #define TR_TELEM_RSSI_RX "RSSI\0" -#else - #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") -#endif - -#if defined(CPUARM) - #define TR_TELEM_TIMERS TR("Tmr1""Tmr2""Tmr3", "Tmr1\0""Tmr2\0""Tmr3\0") -#else - #define TR_TELEM_TIMERS TR("Tmr1""Tmr2", "Tmr1\0""Tmr2\0") -#endif - -#if LCD_W >= 212 - #define TR_VTELEMCHNS "---\0 ""Akku\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Cells""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Zeit\0" -#else - #define TR_VTELEMCHNS "---\0""Akku" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Zeit" -#endif - -#define LENGTH_UNIT_IMP "ft\0" -#define SPEED_UNIT_IMP "mph" -#define LENGTH_UNIT_METR "m\0 " -#define SPEED_UNIT_METR "kmh" - -#if defined(CPUARM) - #define LEN_VUNITSSYSTEM TR("\006", "\012") - #define TR_VUNITSSYSTEM TR("Metrik""Imper.", "Metrisch\0 ""Imperial\0 ") - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" -#else - #if defined(IMPERIAL_UNITS) - #define LENGTH_UNIT LENGTH_UNIT_IMP - #define SPEED_UNIT SPEED_UNIT_IMP - #else - #define LENGTH_UNIT LENGTH_UNIT_METR - #define SPEED_UNIT SPEED_UNIT_METR - #endif - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " -#endif - -#define STR_V (STR_VTELEMUNIT+1) -#define STR_A (STR_VTELEMUNIT+4) - -#define LEN_VALARM "\003" -#define TR_VALARM "---""Glb""Org""Rot" - -#define LEN_VALARMFN "\001" -#define TR_VALARMFN "<>" - -#define LEN_VTELPROTO "\007" -#define TR_VTELPROTO "Kein\0 ""Hub\0 ""WSHHigh" - -#if defined(CPUARM) - #define LEN_AMPSRC TR("\003", "\005") - #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells") - #define LEN_VOLTSRC TR("\003", "\005") - #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells") -#else - #define LEN_AMPSRC TR("\003", "\005") - #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells") -#endif - -#define LEN_VARIOSRC "\004" -#if defined(FRSKY_SPORT) - #define TR_VARIOSRC "Vspd""A1\0 ""A2\0 ""dTE\0" -#else - #define TR_VARIOSRC "Alt\0""Alt+""Vspd""A1\0 ""A2\0 " -#endif - -#if defined(CPUARM) - #define LEN_VTELEMSCREENTYPE "\007" - #define TR_VTELEMSCREENTYPE " None "" Werte "" Balken"" Script" -#else - #define LEN_VTELEMSCREENTYPE "\007" - #define TR_VTELEMSCREENTYPE " Werte "" Balken" -#endif - -#define LEN_GPSFORMAT "\004" -#define TR_GPSFORMAT "GMS\0""NMEA" //Koordinatenanzeige - -#define LEN2_VTEMPLATES 15 // max String Länge für Menü (original=13) -#define LEN_VTEMPLATES "\017" // max String Länge 15+cr+lf -#define TR_VTEMPLATES "Misch. Lösch.\0 ""Einfach. 4-CH\0 ""Fixe Gassperre\0""V-Leitwerk\0 ""Delta Mischer\0 ""eCCPM\0 ""Hubschrauber\0 ""Servo Tester\0 " - -#define LEN_VSWASHTYPE "\004" -#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" - -#define LEN_VKEYS "\005" -#define TR_VKEYS TR("Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0", "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus") - -#define LEN_VRENCODERS "\003" -#define TR_VRENCODERS "DGa""DGb" //Digitalgeber a und b = Drehgeber - -#define LEN_VSWITCHES "\003" -#define LEN_VSRCRAW "\004" - -#define TR_STICKS_VSRCRAW TR("Sei\0""Höh\0""Gas\0""Qur\0", "\307Sei""\307Höh""\307Gas""\307Qur") -#define TR_TRIMS_VSRCRAW TR("TrmS""TrmH""TrmG""TrmQ", "\313Sei""\313Höh""\313Gas""\313Qur") - -#if defined(PCBHORUS) - #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#elif defined(PCBFLAMENCO) - #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " -#elif defined(PCBTARANIS) && defined(REV9E) - #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" -#elif defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#else - #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " - #define TR_SW_VSRCRAW "3POS" - #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" -#endif - -#if defined(CPUARM) - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" -#else - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" -#endif - -#define TR_TRIMS_SWITCHES TR("tSl""tSr""tHd""tHu""tGd""tGu""tQl""tQr", "\313Sl""\313Sr""\313Hd""\313Hu""\313Gd""\313Gu""\313Ql""\313Qr") - -#if defined(PCBSKY9X) - #define TR_ROTARY_ENCODERS "DGa\0" - #define TR_ROTENC_SWITCHES "DGa" -#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) - #define TR_ROTARY_ENCODERS "DGa\0""DGb\0" - #define TR_ROTENC_SWITCHES "DGa""DGb" -#else - #define TR_ROTARY_ENCODERS - #define TR_ROTENC_SWITCHES -#endif - -#if !defined(PCBTARANIS) - #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" -#endif - -#define TR_ON_ONE_SWITCHES "ON\0""One" - -#if defined(PCBFLAMENCO) - #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(PCBTARANIS) || defined(PCBHORUS) - // only special switches here - #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES -#else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES -#endif - -#if defined(HELI) -#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" -#else -#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" -#endif - -#if defined(CPUARM) - #define TR_RESERVE_VSRCRAW "[--]" - #define TR_EXTRA_VSRCRAW "Batt""Time" TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW "Tmr1""Tmr2""Tmr3" -#else - #define TR_EXTRA_VSRCRAW -#endif - -#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW - -#define LEN_VTMRMODES "\003" -#define TR_VTMRMODES "AUS""EIN""GSs""GS%""GSt" - -#define LEN_VTRAINERMODES "\022" -#define TR_VTRAINERMODES "Lehrer/Buchse\0 ""Schüler/Buchse\0 ""Lehrer/SBUS Modul\0""Lehrer/CPPM Modul\0""Lehrer/Batterie\0" - -#define LEN_VFAILSAFE "\015" // "\013" original -#define TR_VFAILSAFE "Kein Failsafe""Halte Pos.\0 ""Kanäle\0 ""Kein Signal\0 ""Empfänger\0 " - -#if defined(MAVLINK) - #define LEN_MAVLINK_BAUDS "\006" - #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" - #define LEN_MAVLINK_AC_MODES "\011" - #define TR_MAVLINK_AC_MODES "Stabilize""Acro ""Alt Hold ""Auto ""Guided ""Loiter ""RTL ""Circle ""Pos Hold ""Land ""OF Loiter""Toy A ""Toy M ""INVALID " - #define LEN_MAVLINK_AP_MODES "\015" - #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " -#endif - -#define LEN_VSENSORTYPES "\012" -#define TR_VSENSORTYPES "Sensor\0 ""Berechnung" - -#define LEN_VFORMULAS "\014" // "\10" ursprünglich -#define TR_VFORMULAS "Addieren\0 ""Mittelwert\0 ""Min\0 ""Max\0 ""Multiplizier""Gesamt\0 ""Zelle\0 ""Verbrauch\0 ""Distanz\0 " - -#define LEN_VPREC "\004" // "\005" Prec0 Prec1 Prec2 ursprünglich -#define TR_VPREC "0.--""0.0 ""0.00" - -#define LEN_VCELLINDEX "\012" // "\007" ursprünglich -#define TR_VCELLINDEX "Niedrigst\0""1. Zelle\0 ""2. Zelle\0 ""3. Zelle\0 ""4. Zelle\0 ""5. Zelle\0 ""6. Zelle\0 ""Höchster\0 ""Differenz\0" - -// ZERO TERMINATED STRINGS -#if defined(COLORLCD) - #define INDENT "\007" - #define LEN_INDENT 1 - #define INDENT_WIDTH 12 - #define BREAKSPACE "\036" -#else - #define INDENT "\001" - #define LEN_INDENT 1 - #define INDENT_WIDTH (FW/2) - #define BREAKSPACE " " -#endif - -#if defined(PCBTARANIS) - #define TR_ENTER "[ENTER]" -#else - #define TR_ENTER "[MENU]" -#endif - -#define TR_EXIT "[EXIT]" - -#if defined(PCBTARANIS) - #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER -#else - #define TR_POPUPS TR_ENTER "\010" TR_EXIT - #define OFS_EXIT sizeof(TR_ENTER) -#endif - -#define TR_MENUWHENDONE CENTER"\010"TR_ENTER" > Weiter" -#define TR_FREE "frei" -#define TR_DELETEMODEL "Modell löschen?" -#define TR_COPYINGMODEL "Kopiere Modell" -#define TR_MOVINGMODEL "Schiebe Modell" -#define TR_LOADINGMODEL "Lade Modell..." -#define TR_NAME "Name" -#define TR_MODELNAME "Modellname" -#define TR_PHASENAME "Phase-Name" -#define TR_MIXNAME "Mix-Name" -#define TR_INPUTNAME "Input-Name" -#if defined(VIRTUALINPUTS) - #define TR_EXPONAME "Info-Name" -#else - #define TR_EXPONAME "Info-Name" // Expo Name -#endif -#define TR_BITMAP "Modellfoto" -#define TR_TIMER TR("Timer", "Timer ") // für Timer1 Timer2 Timer3 -#define TR_ELIMITS TR("Erw. Limit", "Erw. Wege auf 150%") -#define TR_ETRIMS TR("Erw. Trims", "Erw. Trim auf 100%") -#define TR_TRIMINC TR("Trim Schr.", "Trimmschritte") -#define TR_DISPLAY_TRIMS TR("Trim anzeig", "Trimwerte anzeigen") -#define TR_TTRACE TR("Gasquelle", INDENT "Gas-Timerquelle") -#define TR_TTRIM TR("Gastrim", INDENT "Gas-Leerlauftrim") -#define TR_BEEPCTR TR("Mitt.Piep", "Mittelstell. -Pieps") -#define TR_USE_GLOBAL_FUNCS TR("Glob. Funkt.", "Globale Funkt verw.") -#if defined(PCBSKY9X) && defined(REVX) - #define TR_OUTPUT_TYPE INDENT "Output" -#endif -#define TR_PROTO TR(INDENT "Protok.", INDENT "Protokoll") -#if defined(CPUARM) - #define TR_PPMFRAME INDENT "PPM frame" -#else - #define TR_PPMFRAME "PPM frame" -#endif -#define TR_MS "ms" -#define TR_SWITCH TR("Schalt.", "Schalter") -#define TR_TRIMS "Trims" -#define TR_FADEIN "Langs. Ein" -#define TR_FADEOUT "Langs. Aus" -#define TR_DEFAULT "(Normal)" -#define TR_CHECKTRIMS CENTER"\006Check\012Trims" -#define OFS_CHECKTRIMS CENTER_OFS+(9*FW) -#define TR_SWASHTYPE TR("Typ Taumelsch", "Typ Taumelscheibe") -#define TR_COLLECTIVE TR("Kollekt. Pitch", "Kollekt. Pitch Quelle") -#define TR_AILERON "Roll Quelle" -#define TR_ELEVATOR "Nick Quelle" -#define TR_SWASHRING TR("Ring Begrenz", "Ring Begrenzung") -#define TR_ELEDIRECTION TR("Nick Richtung", "Nick Servo Richtung") -#define TR_AILDIRECTION TR("Roll Richtung", "Roll Servo Richtung") -#define TR_COLDIRECTION TR("Pitch Richtung", "Pitch Servo Richtung") -#define TR_MODE INDENT "Modus" -#define TR_NOFREEEXPO "Expos voll!" -#define TR_NOFREEMIXER "Mischer voll!" -#define TR_SOURCE INDENT "Quelle" -#define TR_WEIGHT "Gewicht" -#define TR_EXPO TR("Expo", "Exponential") -#define TR_SIDE "Seite" -#define TR_DIFFERENTIAL "Diff" -#define TR_OFFSET INDENT "Offset" -#define TR_TRIM "Trim" -#define TR_DREX "DRex" -#define DREX_CHBOX_OFFSET 30 -#define TR_CURVE "Kurve" -#define TR_FLMODE TR("Phase", "Phasen") -#define TR_MIXWARNING "Warnung" -#define TR_OFF "AUS" -#define TR_MULTPX "Wirkung" -#define TR_DELAYDOWN "Verz. Dn" -#define TR_DELAYUP "Verz. Up" -#define TR_SLOWDOWN "Langs.Dn" -#define TR_SLOWUP "Langs.Up" -#define TR_MIXER "MISCHER" -#define TR_CV "KV" -#define TR_GV "GV" -#define TR_ACHANNEL TR("A\004gemessen", "A\004Kanal gemessen =>") //9XR-Pro -#define TR_RANGE TR(INDENT "Bereich", INDENT "Variobereich m/s") // 9XR-Pro -#define TR_CENTER TR(INDENT "Mitte m/s", INDENT "Variomitte m/s") -#define TR_BAR "Streifen" -#define TR_ALARM TR(INDENT "Alarme ", INDENT "Ein bei Alarm") //9XR-Pro -#define TR_USRDATA "Daten berechnen aus" -#define TR_BLADES TR(INDENT "Prop", INDENT "Prop-Blätter") //9XR-Pro -#define TR_SCREEN "Telm-Bild " -#define TR_SOUND_LABEL "----Töne---------" -#define TR_LENGTH INDENT "Dauer" -#define TR_BEEP_LENGTH INDENT "Beep-Länge" -#define TR_SPKRPITCH INDENT "Beep-Freq. +/-" -#define TR_HAPTIC_LABEL "----Haptik-------" //9XR-Pro -#define TR_HAPTICSTRENGTH INDENT "Stärke" -#define TR_CONTRAST "LCD-Kontrast" -#define TR_ALARMS_LABEL "----Alarm wenn---" -#define TR_BATTERY_RANGE TR("Akku Bereich", "Akku Spgs-Bereich") // Symbol Akku Ladezustand -#define TR_BATTERYWARNING INDENT "Akkuspg kleiner" -#define TR_INACTIVITYALARM TR(INDENT "Inaktivität", INDENT "Inaktivität nach") //9XR-Pro -#define TR_MEMORYWARNING INDENT "Speicher voll" -#define TR_ALARMWARNING TR(INDENT "Alle Töne aus?", INDENT "Alle Töne ganz aus?") -#define TR_RENAVIG "Drehgeb. Navig." -#define TR_THROTTLE_LABEL "----Gas-Kontrolle----" -#define TR_THROTTLEREVERSE TR("Gas invers", INDENT "Vollgas hinten?") //Änderung wg TH9x, Taranis -#define TR_TIMER_NAME INDENT "Name" -#define TR_MINUTEBEEP TR(INDENT "Min-Alarm", INDENT "Minuten-Alarm") -#define TR_BEEPCOUNTDOWN INDENT "Countdown" -#define TR_PERSISTENT TR(INDENT "Permanent", INDENT "Permanent") -#define TR_BACKLIGHT_LABEL "----LCD-Beleuchtg----" -#define TR_BLDELAY INDENT "Dauer" -#define TR_BLONBRIGHTNESS INDENT "An-Helligkeit" -#define TR_BLOFFBRIGHTNESS INDENT "Aus-Helligkeit" -#define TR_BLCOLOR INDENT "Farbe" -#define TR_SPLASHSCREEN TR("Startbild Ein", "Startbild Ein für") -#define TR_THROTTLEWARNING TR("Gasalarm", INDENT "Gas Alarm") -#define TR_SWITCHWARNING TR("Sch. Alarm", INDENT "Schalter-Alarm") -#define TR_POTWARNING TR("Pot Warn.", INDENT "Poti-Warnung") -#define TR_TIMEZONE TR("Zeitzone", "GPS-Zeitzone +/-Std") -#define TR_ADJUST_RTC INDENT "Uhrzeit per GPS setzen" -#define TR_GPS "----GPS--------------" -#define TR_RXCHANNELORD TR("Kanalanordnung", "Kanalvoreinstellung") -#define TR_STICKS "Knüppel" -#define TR_POTS "Potis" -#define TR_SWITCHES "Schalter" -#define TR_SWITCHES_DELAY TR("Sw. Mitte Delay", "Schaltermitte Verz.") //Schalter Mitten verzögern Anpassung -#define TR_SLAVE TR("Schüler PPM1-16", "Schüler PPM1-16 als Ausgang") -#define TR_MODESRC " Modus\003% Quelle" -#define TR_MULTIPLIER "Multiplikator" -#define TR_CAL "Kal." -#define TR_VTRIM "Trim - +" -#define TR_BG "BG:" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] to start" - #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" - #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART CENTER"\007"TR_ENTER" zum Start" - #define TR_SETMIDPOINT CENTER"\002Knüppel+Potis auf Mitte" - #define TR_MOVESTICKSPOTS CENTER"\003Knüppel+Potis bewegen" -#else - #define TR_MENUTOSTART CENTER"\007"TR_ENTER" zum Start" - #define TR_SETMIDPOINT TR(CENTER "\002Knüppel+Potis auf Mitte", CENTER "\002Knüppel+Potis auf Mitte") - #define TR_MOVESTICKSPOTS CENTER"\003Knüppel+Potis bewegen" -#endif -#define TR_RXBATT "Rx Akku:" -#define TR_TXnRX "Tx:\0Rx:" -#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" -#define STR_US (STR_TMR1LATMAXUS+13) -#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" -#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" - -#if defined(CPUARM) - #define TR_TMIXMAXMS "Tmix max" - #define TR_FREESTACKMINB "Free Stack" -#else - #define TR_TMIXMAXMS "Tmix max\037\124ms" - #define TR_FREESTACKMINB "Free Stack\037\124b" -#endif - -#define TR_MENUTORESET CENTER TR_ENTER" für Reset" -#define TR_PPM_TRAINER "TR" //old #define TR_PPM "PPM" -#define TR_CH "CH" -#define TR_MODEL "MODELL" -#define TR_FP "FP" -#define TR_MIX "MIX" -#define TR_EEPROMLOWMEM "EEPROM voll" -#define TR_ALERT "WARNUNG" -#define TR_PRESSANYKEYTOSKIP TR("Taste drücken",CENTER"Taste drücken") -#define TR_THROTTLENOTIDLE "Gas nicht Null!" -#define TR_ALARMSDISABLED "Alarme ausgeschaltet" -#define TR_PRESSANYKEY TR("Taste drücken",CENTER"Taste drücken") -#define TR_BADEEPROMDATA "EEPROM ungültig" -#define TR_BAD_RADIO_DATA "Bad Radio Data" -#define TR_EEPROMFORMATTING "EEPROM Initialisieren" -#define TR_STORAGE_FORMAT "Storage Preparation" -#define TR_EEPROMOVERFLOW "EEPROM Überlauf" -#define TR_MENURADIOSETUP TR("SENDER-EINSTELLEN", "SENDER-GRUNDEINSTELLUNGEN") -#define TR_MENUDATEANDTIME "DATUM UND ZEIT" -#define TR_MENUTRAINER TR("LEHRER/SCHÜLER", "LEHRER/SCHÜLER") -#define TR_MENUGLOBALFUNCS "GLOBALE FUNKTIONEN" -#define TR_MENUVERSION "VERSION" -#define TR_MENUDIAG TR("Schalt.", "Schalter-Test") -#define TR_MENUANA "Analog-Test" -#define TR_MENUCALIBRATION TR("KALIB. ANALOG", "KALIBRIERUNG Knüppel+Potis") -#if defined(COLORLCD) - #define TR_TRIMS2OFFSETS "Trims => Subtrims" -#else - #define TR_TRIMS2OFFSETS "\006Trims => Subtrims" -#endif -#define TR_MENUMODELSEL TR("MODELLE", "MODELL WÄHLEN") -#define TR_MENUSETUP TR("MODELL-EINSTELLUNG", "MODELL-EINSTELLUNGEN") -#define TR_MENUFLIGHTPHASE "FLUGPHASE" -#define TR_MENUFLIGHTPHASES "FLUGPHASEN" -#define TR_MENUHELISETUP TR("HELI TS-Mischer", "HELI TS-Mischer CYC1-3") - -#if defined(PCBTARANIS) - #define TR_MENUINPUTS "INPUTS" - #define TR_MENULIMITS "SERVOWEGE" -#else - #define TR_MENUINPUTS TR("DR/EXPO", "DUALRATE/EXPO") - #define TR_MENULIMITS TR("GRENZEN", "SERVOWEGE") -#endif - -#define TR_MENUCURVES "KURVEN" -#define TR_MENUCURVE "KURVE" -#define TR_MENULOGICALSWITCH "LOGIKSCHALTER" -#define TR_MENULOGICALSWITCHES "LOGIKSCHALTER" -#define TR_MENUCUSTOMFUNC TR("SPEZ.-FUNKTIONEN", "SPEZIAL-FUNKTIONEN") -#define TR_MENUCUSTOMSCRIPTS "LUA-SCRIPTE" -#define TR_MENUTELEMETRY "TELEMETRIE" -#define TR_MENUTEMPLATES "VORLAGEN" -#define TR_MENUSTAT "STAT" -#define TR_MENUDEBUG "DEBUG" -#if defined(CPUARM) - #define TR_RXNUM TR(INDENT "Empf Nr.", INDENT "Modell-Match-Nr.") -#else - #define TR_RXNUM "Empf Nr." -#endif -#define TR_SYNCMENU "Sync [MENU]" -#define TR_LIMIT INDENT "Grenzen" -#define TR_MINRSSI "Min. RSSI" -#define TR_LATITUDE "Breite:" -#define TR_LONGITUDE "Länge:" -#define TR_GPSCOORD TR("GPS-Koord.", "GPS-Koordinaten-Format") -#define TR_VARIO TR("----Vario--------", "----Variometer----") //9XR-Pro -#define TR_PITCH_AT_ZERO INDENT "Niedrigster Ton" -#define TR_PITCH_AT_MAX INDENT "Höchster Ton" -#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 "Akku Spg messen" -#define TR_CURRENT_CALIB "Strom abgl." -#define TR_VOLTAGE TR(INDENT "Spg", INDENT "Spannungsquelle") //9XR-Pro -#define TR_CURRENT TR(INDENT "Strom", INDENT "Stromquelle") -#define TR_SELECT_MODEL "Modell Wählen" -#define TR_CREATE_CATEGORY "Create Category" -#define TR_RENAME_CATEGORY "Rename Category" -#define TR_DELETE_CATEGORY "Delete Category" -#define TR_CREATE_MODEL "Neues Modell" -#define TR_DUPLICATE_MODEL "Duplicate Model" -#define TR_CHANGE_CATEGORY "Change category" -#define TR_COPY_MODEL "Kopiere Modell" -#define TR_MOVE_MODEL "Verschiebe Modell" -#define TR_BACKUP_MODEL "Modell auf SD-Karte" //9XR-Pro -#define TR_DELETE_MODEL "Modell Löschen" // TODO merged into DELETEMODEL? -#define TR_RESTORE_MODEL "Modell Restore" -#define TR_SDCARD_ERROR "SD-Kartenfehler" -#define TR_NO_SDCARD "Keine SD-Karte" -#define TR_SDCARD_FULL "SD-Karte voll" -#define TR_INCOMPATIBLE "Nicht kompatibel" -#define TR_WARNING "WARNUNG" -#define TR_EEPROMWARN "EEPROM" -#define TR_STORAGE_WARNING "STORAGE" -#define TR_EEPROM_CONVERTING "EEPROM Converting" -#define TR_THROTTLEWARN "GAS" -#define TR_ALARMSWARN "ALARM" -#define TR_SWITCHWARN "SCHALTER" -#define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NO_FAILSAFE TR("Failsafe not set", "Failsafe nicht programmiert") -#define TR_KEYSTUCK "Taste klemmt" //Key stuck=Taste klemmt -#define TR_INVERT_THR TR("Gas umkehren?", "Vollgas hinten?") // Th9x 9XR -#define TR_SPEAKER_VOLUME INDENT "Lautstärke" -#define TR_LCD "Bildschirm" -#define TR_BRIGHTNESS INDENT "Helligkeit" -#define TR_CPU_TEMP "CPU-Temp.\016>" -#define TR_CPU_CURRENT "Strom\022>" -#define TR_CPU_MAH "Verbrauch" -#define TR_COPROC "CoProz." -#define TR_COPROC_TEMP "MB Temp. \016>" -#define TR_CAPAWARNING INDENT "Kapaz. niedrig" // wg 9XR-Pro -#define TR_TEMPWARNING INDENT "Temp. größer" //wg 9XR-Pro -#define TR_FUNC "Funktion" -#define TR_V1 "V1" -#define TR_V2 "V2" -#define TR_DURATION "Dauer" -#define TR_DELAY "Verzög." -#define TR_SD_CARD "SD-Karte" -#define TR_SDHC_CARD "SDHC-Karte" -#define TR_NO_SOUNDS_ON_SD "Keine Töne auf SD" -#define TR_NO_MODELS_ON_SD "Kein Modell auf SD" -#define TR_NO_BITMAPS_ON_SD "Keine Bitmaps auf SD" -#define TR_NO_SCRIPTS_ON_SD "Keine Scripte auf SD" -#define TR_SCRIPT_SYNTAX_ERROR "Script Syntax Fehler" -#define TR_SCRIPT_PANIC "Script panic" //?? -#define TR_SCRIPT_KILLED "Script killed" //?? -#define TR_SCRIPT_ERROR "Unbekannter Fehler" -#define TR_PLAY_FILE "Spielen" -#define TR_DELETE_FILE "Löschen" -#define TR_COPY_FILE "Kopieren" -#define TR_RENAME_FILE "Umbenennen" -#define TR_ASSIGN_BITMAP "Bitmap zuordnen" -#define TR_EXECUTE_FILE "Execute" -#define TR_REMOVED " gelöscht" -#define TR_SD_INFO "Information" -#define TR_SD_FORMAT "Formatieren" -#define TR_NA "N/V" //NV=Nicht Verfügbar Kurz-Meldung -#define TR_HARDWARE TR("Hardware einst. ", "Namen und Hardware einst.") -#define TR_FORMATTING "Formatierung..." -#define TR_TEMP_CALIB "Temp. abgl." -#define TR_TIME "Uhrzeit:" -#define TR_BAUDRATE "BT Baudrate" -#define TR_SD_INFO_TITLE "SD-INFO" -#define TR_SD_TYPE "Typ:" -#define TR_SD_SPEED "Geschw:" -#define TR_SD_SECTORS "Sectoren:" -#define TR_SD_SIZE "Größe:" -#define TR_TYPE INDENT "Type" -#define TR_GLOBAL_VARS "Globale Variablen" -#define TR_GVARS "GLOBALE V." -#define TR_GLOBAL_VAR "Globale Variable" -#define TR_MENUGLOBALVARS "GLOBALE VARIABLEN" -#define TR_OWN "Eigen" -#define TR_DATE "Datum:" -#define TR_ROTARY_ENCODER "Drehgeber" -#define TR_CHANNELS_MONITOR "Kanal-Monitor==>" -#define TR_MIXERS_MONITOR "==>Mischer Monitor" -#define TR_PATH_TOO_LONG "Pfad zu Lang" -#define TR_VIEW_TEXT "View Text" -#define TR_FLASH_BOOTLOADER "Flash BootLoader selbst" // -#define TR_FLASH_EXTERNAL_DEVICE "Flash externes Gerät" -#define TR_FLASH_INTERNAL_MODULE "Flash internes XJT-Modul" -#define TR_WRITING "\032Writing..." // -#define TR_CONFIRM_FORMAT "Formatieren bestätigen?" -#define TR_INTERNALRF "----Internes HF-Modul----------" -#define TR_EXTERNALRF TR("---Externes HF-Modul---", "----Externes HF-Modul----------") //9XR-Pro -#define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe Mode") -#define TR_FAILSAFESET "Failsafe setzen" -#define TR_MENUSENSOR "SENSOR" -#define TR_SENSOR "SENSOR" -#define TR_COUNTRYCODE "Landescode" -#define TR_VOICELANG "Sprach-Ansage" -#define TR_UNITSSYSTEM "Einheiten" -#define TR_EDIT "Zeile Editieren" -#define TR_INSERT_BEFORE "Neue Zeile davor" -#define TR_INSERT_AFTER "Neue Zeile danach" -#define TR_COPY "Zeile kopieren" -#define TR_MOVE "Zeile verschieben" -#define TR_PASTE "Zeile einfügen" -#define TR_DELETE "Zeile löschen" -#define TR_INSERT "Neue Zeile" -#define TR_RESET_FLIGHT "Reset Flugdaten" -#define TR_RESET_TIMER1 "Reset Timer1" -#define TR_RESET_TIMER2 "Reset Timer2" -#define TR_RESET_TIMER3 "Reset Timer3" -#define TR_RESET_TELEMETRY "Reset Telemetrie" -#define TR_STATISTICS "Statistik und Gas" -#define TR_ABOUT_US "Die Programmierer" -#define TR_SETUP_SCREENS "Setup screens" -#define TR_AND_SWITCH "UND Schalt" //UND mit weiterem Schaltern -#define TR_SF "SF" //Spezial Funktionen -#define TR_GF "GF" // Globale Funktionen -#define TR_SPEAKER INDENT "Lautspr" -#define TR_BUZZER INDENT "Summer" -#define TR_BYTES "Bytes" -#define TR_MODULE_BIND TR("Bind","[Bind]") //9XR-Pro -#define TR_MODULE_RANGE TR("Rang", "[Range]") //9XR-Pro -#define TR_RESET_BTN TR("[Reset]", "[Reset Trim]") -#define TR_SET "[Set]" -#define TR_TRAINER "----DSC Buchse PPM In/Out------" //DSC Buchse Trainer Buchse -#define TR_ANTENNAPROBLEM CENTER "TX-Antennenproblem!" -#define TR_MODELIDUSED TR("ID schon benutzt", "Modell-ID schon benutzt") -#define TR_MODULE INDENT "Modul-Typ" -#define TR_TELEMETRY_TYPE TR("Typ", "Telemetrytyp") -#define TR_TELEMETRY_SENSORS "----Sensoren----" -#define TR_VALUE "Wert" -#define TR_TOPLCDTIMER "Top LCD Timer" -#define TR_UNIT "Einheit" -#define TR_TELEMETRY_NEWSENSOR INDENT "Sensor hinzufügen ..." -#define TR_CHANNELRANGE TR(INDENT "Kanäle", INDENT "Ausgangs Kanäle") //wg 9XR-Pro -#define TR_LOWALARM INDENT "Vor-Alarm bei" -#define TR_CRITICALALARM INDENT "Kritisch-Alarm" -#define TR_ENABLE_POPUP "Freigabe Popup-Fenster" -#define TR_DISABLE_POPUP "Sperren Popup-Fenster" -#define TR_POPUP "Popup" -#define TR_MIN "Min" -#define TR_MAX "Max" -#define TR_CURVE_PRESET "Gerade 0 11 22 33 45" -#define TR_PRESET "Preset" -#define TR_MIRROR "Spiegeln" -#define TR_CLEAR "Löschen" -#define TR_RESET "Servowerte rücksetzen" -#define TR_RESET_SUBMENU TR("Reset Werte ==>", "Reset=>Timer Flug Telem") -#define TR_COUNT "Punkte" -#define TR_PT "Pt" -#define TR_PTS "Pts" -#define TR_SMOOTH "Runden" -#define TR_COPY_STICKS_TO_OFS "Kopie Stick to Servo-Mitte" -#define TR_COPY_TRIMS_TO_OFS "Kopie Trimm to Servo-Mitte" // "Trim to Subtrim" -#define TR_INCDEC "Inc/Decrement" -#define TR_GLOBALVAR "Global Var" -#define TR_MIXSOURCE "Mixer Quelle" -#define TR_CONSTANT "Konstant" -#define TR_PERSISTENT_MAH TR(INDENT "Spr. mAh", INDENT "Speichern mAh") //9XR-Pro -#define TR_PREFLIGHT TR("---Vorflug-Checkliste--", "----Vorflug-Checkliste----") -#define TR_CHECKLIST TR(INDENT "Checkliste", INDENT "Checkliste anzeigen") //9XR-Pro -#define TR_FAS_OFFSET TR(INDENT "FAS-Ofs", INDENT "FAS-Offset") -#define TR_UART3MODE "Serieller Port" -#define TR_SCRIPT "Lua-Script" -#define TR_INPUTS "Inputs" -#define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "\002[ENTER Long] Backup EEPROM->SD-Karte" -#define TR_FACTORYRESET "\004[MENU Long] ALLES komplett löschen" -#define TR_CONFIRMRESET "ALLE Modelle + Einst. löschen?" -#define TR_TO_MANY_LUA_SCRIPTS "Zu viele Lua-Scripte!!" - -#if defined(MAVLINK) - #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" - #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" - #define TR_MAVMENUSETUP_TITLE "Mavlink Setup" - #define TR_MAVLINK_BAUD_LABEL "Baudrate" - #define TR_MAVLINK_INFOS "INFOS" - #define TR_MAVLINK_MODE "MODE" - #define TR_MAVLINK_CUR_MODE "Current Mode" - #define TR_MAVLINK_ARMED "Armed" - #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" - #define TR_MAVLINK_BATTERY_LABEL "Flugakku-Status" - #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" - #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" - #define TR_MAVLINK_NAV_MENU_TITLE "NAV" - #define TR_MAVLINK_COURSE "Course" - #define TR_MAVLINK_HEADING "Heading" - #define TR_MAVLINK_BEARING "Bearing" - #define TR_MAVLINK_ALTITUDE "Altitude" - #define TR_MAVLINK_GPS "GPS" - #define TR_MAVLINK_NO_FIX "NO Fix" - #define TR_MAVLINK_SAT "SAT" - #define TR_MAVLINK_HDOP "HDOP" - #define TR_MAVLINK_LAT "LAT" - #define TR_MAVLINK_LON "LON" -#endif - -// Taranis Info Zeile Anzeigen -#define TR_PHASES_HEADERS { " Name ", " Schalter ", " Trim Seite ", " Trim Höhe ", " Trim Gas ", " Trim Quer ", " Fade In ", " Fade Out " } -#define TR_LIMITS_HEADERS { " Name ", " Mitte ", " Min ", " Max ", " Richtung ", " Kurve ", " PPM-Mitte ", " Mitte-Mode " } -#define TR_CSW_HEADERS { " Funktion ", " Var1 ", " Var2 ", " Var2 ", " UND-Schalter ", " Dauer ", " Verzögerung " } - -//Taranis About screen -#define TR_ABOUTUS "Über OpenTx" - -#define TR_ABOUT_OPENTX_1 "OpenTX ist Open Source," -#define TR_ABOUT_OPENTX_2 "nicht kommerziell, ohne" -#define TR_ABOUT_OPENTX_3 "Funktionsgarantie, frei" -#define TR_ABOUT_OPENTX_4 "verfügbar. Unterstützung" -#define TR_ABOUT_OPENTX_5 "durch Spenden willkommen" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX Hauptauthor" -#define TR_ABOUT_BERTRAND_3 "Companion9x-Mitentwickler" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code- und Treiber-Guru" -#define TR_ABOUT_MIKE_3 "Wohl einer der Besten." -#define TR_ABOUT_MIKE_4 "Sehr inspirierend." - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion9x-Hauptentwickler" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funktionalität und Tests," -#define TR_ABOUT_ANDRE_3 "Debugging, Dokumentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Openrcforums Webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org Hauptautor" -#define TR_ABOUT_KJELL_3 "Author von OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Grafikdesigner" - -#if defined(PCBTARANIS) - #define TR_ABOUT_HARDWARE_1 "Firma FrSky " - #define TR_ABOUT_HARDWARE_2 "Hardware-Design/-Produktion" - #define TR_ABOUT_HARDWARE_3 "Firmware-Vertrieb" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x Design/Produktion" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Vorgänger-Projekte" -#define TR_ABOUT_PARENTS_2 "Ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - -#define TR_CHR_SHORT 's' // Taste short -#define TR_CHR_LONG 'l' // Taste long -#define TR_CHR_TOGGLE 't' // Taste als togglefunktion = Ein Aus Ein -#define TR_CHR_HOUR 'h' // Stunden -#define TR_CHR_INPUT 'I' // Values between A-I will work - -#define TR_BEEP_VOLUME "Beep-Lautst." -#define TR_WAV_VOLUME "Wave-Lautst." -#define TR_VARIO_VOLUME "Vario-Lautst." -#define TR_BG_VOLUME "Hintergr-Lautst." - -#define TR_TOP_BAR "----Infozeile----" -#define TR_ALTITUDE INDENT "Höhenanzeige" -#define TR_SCALE "Skalierer" -#define TR_VIEW_CHANNELS "Zeige Kanäle" -#define TR_VIEW_NOTES "Zeige Notizen" -#define TR_MODEL_SELECT "Model Select" -#define TR_MODS_FORBIDDEN "Veränderungen verboten!" -#define TR_UNLOCKED "Entsperrt" -#define TR_ID "ID" -#define TR_PRECISION "Prezision" -#define TR_RATIO "Umrechnung" //Faktor, Mulitplikator, Teiler 0,1 bis 10,0 -#define TR_FORMULA "Formel" -#define TR_CELLINDEX "Zellenindex" -#define TR_LOGS "Log Daten" -#define TR_OPTIONS "Optionen" - -#define TR_ALTSENSOR "Höhen Sensor" -#define TR_CELLSENSOR "Zellen Sensor" -#define TR_GPSSENSOR "GPS Sensor" -#define TR_CURRENTSENSOR "Sensor" -#define TR_AUTOOFFSET "Auto Offset" -#define TR_ONLYPOSITIVE "Nur Positiv" -#define TR_FILTER "Filter aktiv" -#define TR_TELEMETRYFULL "Telemetriezeilen voll!" -#define TR_INVERTED_SERIAL INDENT "Invert." -#define TR_IGNORE_INSTANCE TR(INDENT "Keine ID", INDENT "Keine Multisen-ID") //unklar -#define TR_DISCOVER_SENSORS INDENT "Start Sensorsuche" -#define TR_STOP_DISCOVER_SENSORS INDENT "Stop Sensorsuche" -#define TR_DELETE_ALL_SENSORS INDENT "Lösche alle Sensoren" -#define TR_CONFIRMDELETE "Wirklich alle löschen?" -#define TR_SELECT_WIDGET "Select widget" -#define TR_REMOVE_WIDGET "Remove widget" -#define TR_WIDGET_SETTINGS "Widget settings" -#define TR_REMOVE_SCREEN "Remove screen" -// ----------------------------- Symbole für Auswahlliste---------- -#define TR_MENU_INPUTS "\314Inputs" -#define TR_MENU_LUA "\322Lua Scripte" -#define TR_MENU_STICKS "\307Knüppel" -#define TR_MENU_POTS "\310Potis" -#define TR_MENU_MAX "\315MAX" -#define TR_MENU_HELI "\316Heli-TS CYC1-3" -#define TR_MENU_TRIMS "\313Trimmung" -#define TR_MENU_SWITCHES "\312Schalter" -#define TR_MENU_LOGICAL_SWITCHES "\312Log. Schalter" -#define TR_MENU_TRAINER "\317Trainer" -#define TR_MENU_CHANNELS "\320Kanäle" -#define TR_MENU_GVARS "\311Glob. Vars" -#define TR_MENU_TELEMETRY "\321Telemetrie" -#define TR_MENU_OTHER " Weitere" -#define TR_MENU_INVERT "Invertieren" -// ---------------------------------------------------------------- -#define ZSTR_RSSI "RSSI" -#define ZSTR_SWR "SWR" -#define ZSTR_A1 "A1" -#define ZSTR_A2 "A2" -#define ZSTR_A3 "A3" -#define ZSTR_A4 "A4" -#define ZSTR_BATT "RxBt" -#define ZSTR_ALT "Alt" -#define ZSTR_TEMP1 "Tmp1" -#define ZSTR_TEMP2 "Tmp2" -#define ZSTR_RPM "RPM" -#define ZSTR_FUEL "Fuel" -#define ZSTR_VSPD "VSpd" -#define ZSTR_ACCX "AccX" -#define ZSTR_ACCY "AccY" -#define ZSTR_ACCZ "AccZ" -#define ZSTR_CURR "Curr" -#define ZSTR_VFAS "VFAS" -#define ZSTR_ASPD "ASpd" -#define ZSTR_GSPD "GSpd" -#define ZSTR_HDG "Hdg" -#define ZSTR_CELLS "Cels" -#define ZSTR_GPSALT "GAlt" -#define ZSTR_GPSDATETIME "Date" -#define ZSTR_GPS "GPS" -#define ZSTR_BATT1_VOLTAGE "RB1V" -#define ZSTR_BATT2_VOLTAGE "RB2V" -#define ZSTR_BATT1_CURRENT "RB1A" -#define ZSTR_BATT2_CURRENT "RB2A" -#define ZSTR_BATT1_CONSUMPTION "RB1C" -#define ZSTR_BATT2_CONSUMPTION "RB2C" -#define ZSTR_RB_STATE "RBS" -#define ZSTR_CHANS_STATE "RBCS" +/* + * 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. + * + */ + +// DE translations author: who? + +/* + * !!!!! DO NOT EDIT de.h - EDIT de.h.txt INSTEAD !!!!!!! + * + * In order to make translations easier de.h.txt is parsed and national + * characters are replaced by bitmap codes. The result is de.h. + * + * See translate.py in the util folder for the list of character codes + * + * !!!!! DO NOT EDIT de.h - EDIT de.h.txt INSTEAD !!!!!!! + */ + +/* + * Formatting octal codes available in TR_ strings: + * \037\x -sets LCD x-coord (x value in octal) + * \036 -newline + * \035 -horizontal tab (ARM only) + * \001 to \034 -extended spacing (value * FW/2) + * \0 -ends current string + */ + + +// NON ZERO TERMINATED STRINGS +#define LEN_OFFON "\003" +#define TR_OFFON "AUS""EIN" + +#define LEN_MMMINV "\003" +#define TR_MMMINV "---""INV" + +#define LEN_NCHANNELS "\004" +#define TR_NCHANNELS "\0014CH\0016CH\0018CH10CH12CH14CH16CH" + +#define LEN_VBEEPMODE "\005" +#define TR_VBEEPMODE "Stumm""Alarm""NoKey""Alle\0" + +#define LEN_VBEEPLEN "\005" +#define TR_VBEEPLEN "0====""=0===""==0==""===0=""====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 + +#define LEN_TRNMODE "\003" +#define TR_TRNMODE "AUS"" +="" :=" + +#define LEN_TRNCHN "\003" +#define TR_TRNCHN "CH1CH2CH3CH4" + +#define LEN_UART3MODES "\015" +#define TR_UART3MODES "AUS\0 ""S-Port Mirror""Telemetrie\0 ""SBUS Schüler\0""Debug\0" + +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "Kein\0 ""Taster""2POS\0 ""3POS\0" + +#define LEN_POTTYPES "\017" +#define TR_POTTYPES "Kein\0 ""Poti mit Raste ""Stufen-Schalter""Poti ohne Raste\0" + +#define LEN_SLIDERTYPES "\006" +#define TR_SLIDERTYPES "Keine\0""Slider" + +#define LEN_DATETIME "\005" +#define TR_DATETIME "DATE:""ZEIT:" + +#define LEN_VLCD "\006" +#define TR_VLCD "NormalOptrex" + +#define LEN_VPERSISTENT "\014" +#define TR_VPERSISTENT "AUS\0 ""Flugzeit\0 ""Manuell Ruck" + +#define LEN_COUNTRYCODES TR("\002", "\007") +#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0") + +#define LEN_TARANIS_PROTOCOLS "\004" +#define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF" + +#if defined(MODULE_D16_EU_ONLY_SUPPORT) + #define LEN_XJT_PROTOCOLS "\007" + #define TR_XJT_PROTOCOLS "AUS\0 ""D16-EU\0""D8\0 ""LR12-EU" +#else + #define LEN_XJT_PROTOCOLS "\004" + #define TR_XJT_PROTOCOLS "AUS\0""X16\0""D8\0 ""LR12" +#endif + +#define LEN_DSM_PROTOCOLS "\004" +#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" //LP45 =Low Power 4 und 5 Kanal + +#define LEN_VTRIMINC TR("\007", "\014") // ursprüglich "\006", "\013" +#define TR_VTRIMINC TR("Expo ""ExFein ""Fein ""Mittel ""Grob ", "Exponentiell""Extrafein ""Fein ""Mittel ""Grob ") + +#define LEN_VDISPLAYTRIMS "\006" +#define TR_VDISPLAYTRIMS "Nein\0 ""Kurz\0 ""Ja\0" //Trimmwerte Keine, kurze Anzeigen, Ja + +#define LEN_VBEEPCOUNTDOWN "\006" +#define TR_VBEEPCOUNTDOWN "Kein\0 Pieps\0StimmeHaptik" + +#define LEN_VVARIOCENTER "\006" +#define TR_VVARIOCENTER "Ton\0 ""Ruhe " + +#define LEN_CURVE_TYPES "\010" +#define TR_CURVE_TYPES " Nur Y "" X und Y" //"Standard""Custom\0" + +#define LEN_RETA123 "\001" + +#if defined(PCBHORUS) + #define TR_RETA123 "SHGQ12345LR" +#elif defined(PCBFLAMENCO) + #define TR_RETA123 "SHGQ123LR" +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_RETA123 "SHGQ1234LRLR" +#elif defined(PCBTARANIS) || defined(REVX) + #define TR_RETA123 "SHGQ123LR" +#elif defined(PCBSKY9X) + #define TR_RETA123 "SHGQ123a" +#elif defined(CPUM2560) + #define TR_RETA123 "SHGQ123ab" +#else + #define TR_RETA123 "SHGQ123" +#endif + +#define LEN_VPROTOS "\006" + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" +#else + #define TR_PXX +#endif + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" +#else + #define TR_DSM2 +#endif + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" +#else + #define TR_IRPROTOS +#endif + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS + +#define LEN_POSNEG "\003" +#define TR_POSNEG "POS""NEG" + +#if defined(PCBSKY9X) && defined(REVX) + #define LEN_VOUTPUT_TYPE "\011" + #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" +#endif + +#define LEN_VCURVEFUNC "\003" +#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" + +#define LEN_VMLTPX "\010" +#define TR_VMLTPX "Addiere ""Multipl.""Ersetze " + +#define LEN_VMLTPX2 "\002" +#define TR_VMLTPX2 "+=""*="":=" + +#define LEN_VMIXTRIMS "\003" +#define TR_VMIXTRIMS "AUS""EIN""Sei""Höh""Gas""Que" //Mixer Trim Werte + +#if LCD_W >= 212 + #define TR_CSWTIMER "Takt\0" // TIM = Takt = Taktgenerator + #define TR_CSWSTICKY "SRFF\0" // Sticky = RS-Flip-Flop + #define TR_CSWRANGE "Range" // Range = Bereichsabfrage von bis + #define TR_CSWSTAY "Puls\0" // Edge = einstellbarer Impuls +#else + #define TR_CSWTIMER "Takt\0" // TIM = Takt = Taktgenerator + #define TR_CSWSTICKY "SRFF\0" // Sticky = RS-Flip-Flop + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" // Range= Bereichsabfrage von bis + #define TR_CSWSTAY "Puls\0" // Edge = einstellbarer Impuls + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + +#if defined(CPUARM) +#define TR_CSWEQUAL "a=x\0 " +#else +#define TR_CSWEQUAL +#endif + +#define LEN_VCSWFUNC "\005" +#if defined(CPUARM) +#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 + #define TR_SF_SAFETY "Override\0 " //"Override\0 " +#elif defined(OVERRIDE_CHANNEL_FUNCTION) + #define TR_SF_SAFETY "Overr.\0 " //"Overr.\0 " +#else + #define TR_SF_SAFETY "---\0 " +#endif + +#if defined(PCBTARANIS) + #define TR_SF_SCREENSHOT "Screenshot" +#else + #define TR_SF_SCREENSHOT +#endif + +#define TR_SF_RESERVE "[Reserve]\0" + +#if defined(CPUARM) + #define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_SCREENSHOT TR_SF_TEST +#elif defined(PCBGRUVIN9X) + #define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_TEST +#else + #define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "LCD Licht\0" TR_SF_TEST +#endif + +#define LEN_VFSWRESET TR("\004", "\011") + +#if defined(FRSKY) + #define TR_FSW_RESET_TELEM TR("Telm", "Telemetrie") +#else + #define TR_FSW_RESET_TELEM +#endif + +#if ROTARY_ENCODERS == 2 + #define TR_FSW_RESET_ROTENC TR("DGa\0""DGb\0", "DrehGb A\0""DrehGb B\0") +#elif ROTARY_ENCODERS == 1 + #define TR_FSW_RESET_ROTENC TR("D.G.", "DrehGb\0 ") +#else + #define TR_FSW_RESET_ROTENC +#endif + +#if LCD_W >= 212 + #define TR_FSW_RESET_TIMERS "Timer 1\0 ""Timer 2\0 ""Timer 3\0 " +#elif defined(CPUARM) + #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2""Tmr3" +#else + #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2" +#endif + +#define TR_VFSWRESET TR(TR_FSW_RESET_TIMERS "All\0" TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC, TR_FSW_RESET_TIMERS "All\0 " TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC) + +#define LEN_FUNCSOUNDS TR("\004", "\006") +#define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Piep1\0""Piep2\0""Piep3\0""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") + +#define LEN_VTELEMCHNS TR("\004", "\005") + +#if defined(CPUARM) + #define TR_TELEM_RESERVE TR("[--]", "[---]") + #define TR_TELEM_TIME TR("Zeit", "Zeit\0") + #define TR_SWR TR("SWR\0", "SWR\0 ") + #define TR_RX_BATT TR("[NA]", "[NA]\0") + #define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ") + #define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ") +#else + #define TR_TELEM_RESERVE + #define TR_TELEM_TIME + #define TR_SWR + #define TR_RX_BATT + #define TR_A3_A4 + #define TR_A3_A4_MIN +#endif + +#define TR_ASPD_MAX TR("ASp+", "ASpd+") + +#if LCD_W >= 212 + #define TR_TELEM_RSSI_RX "RSSI\0" +#else + #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") +#endif + +#if defined(CPUARM) + #define TR_TELEM_TIMERS TR("Tmr1""Tmr2""Tmr3", "Tmr1\0""Tmr2\0""Tmr3\0") +#else + #define TR_TELEM_TIMERS TR("Tmr1""Tmr2", "Tmr1\0""Tmr2\0") +#endif + +#if LCD_W >= 212 + #define TR_VTELEMCHNS "---\0 ""Akku\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Cells""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Zeit\0" +#else + #define TR_VTELEMCHNS "---\0""Akku" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Zeit" +#endif + +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + +#if defined(CPUARM) + #define LEN_VUNITSSYSTEM TR("\006", "\012") + #define TR_VUNITSSYSTEM TR("Metrik""Imper.", "Metrisch\0 ""Imperial\0 ") + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" +#else + #if defined(IMPERIAL_UNITS) + #define LENGTH_UNIT LENGTH_UNIT_IMP + #define SPEED_UNIT SPEED_UNIT_IMP + #else + #define LENGTH_UNIT LENGTH_UNIT_METR + #define SPEED_UNIT SPEED_UNIT_METR + #endif + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " +#endif + +#define STR_V (STR_VTELEMUNIT+1) +#define STR_A (STR_VTELEMUNIT+4) + +#define LEN_VALARM "\003" +#define TR_VALARM "---""Glb""Org""Rot" + +#define LEN_VALARMFN "\001" +#define TR_VALARMFN "<>" + +#define LEN_VTELPROTO "\007" +#define TR_VTELPROTO "Kein\0 ""Hub\0 ""WSHHigh" + +#if defined(CPUARM) + #define LEN_AMPSRC TR("\003", "\005") + #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells") + #define LEN_VOLTSRC TR("\003", "\005") + #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells") +#else + #define LEN_AMPSRC TR("\003", "\005") + #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells") +#endif + +#define LEN_VARIOSRC "\004" +#if defined(FRSKY_SPORT) + #define TR_VARIOSRC "Vspd""A1\0 ""A2\0 ""dTE\0" +#else + #define TR_VARIOSRC "Alt\0""Alt+""Vspd""A1\0 ""A2\0 " +#endif + +#if defined(CPUARM) + #define LEN_VTELEMSCREENTYPE "\007" + #define TR_VTELEMSCREENTYPE " None "" Werte "" Balken"" Script" +#else + #define LEN_VTELEMSCREENTYPE "\007" + #define TR_VTELEMSCREENTYPE " Werte "" Balken" +#endif + +#define LEN_GPSFORMAT "\004" +#define TR_GPSFORMAT "GMS\0""NMEA" //Koordinatenanzeige + +#define LEN2_VTEMPLATES 15 // max String Länge für Menü (original=13) +#define LEN_VTEMPLATES "\017" // max String Länge 15+cr+lf +#define TR_VTEMPLATES "Misch. Lösch.\0 ""Einfach. 4-CH\0 ""Fixe Gassperre\0""V-Leitwerk\0 ""Delta Mischer\0 ""eCCPM\0 ""Hubschrauber\0 ""Servo Tester\0 " + +#define LEN_VSWASHTYPE "\004" +#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" + +#define LEN_VKEYS "\005" +#define TR_VKEYS TR("Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0", "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus") + +#define LEN_VRENCODERS "\003" +#define TR_VRENCODERS "DGa""DGb" //Digitalgeber a und b = Drehgeber + +#define LEN_VSWITCHES "\003" +#define LEN_VSRCRAW "\004" + +#define TR_STICKS_VSRCRAW TR("Sei\0""Höh\0""Gas\0""Qur\0", "\307Sei""\307Höh""\307Gas""\307Qur") +#define TR_TRIMS_VSRCRAW TR("TrmS""TrmH""TrmG""TrmQ", "\313Sei""\313Höh""\313Gas""\313Qur") + +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#else + #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " + #define TR_SW_VSRCRAW "3POS" + #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" +#endif + +#if defined(CPUARM) + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" +#else + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" +#endif + +#define TR_TRIMS_SWITCHES TR("tSl""tSr""tHd""tHu""tGd""tGu""tQl""tQr", "\313Sl""\313Sr""\313Hd""\313Hu""\313Gd""\313Gu""\313Ql""\313Qr") + +#if defined(PCBSKY9X) + #define TR_ROTARY_ENCODERS "DGa\0" + #define TR_ROTENC_SWITCHES "DGa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "DGa\0""DGb\0" + #define TR_ROTENC_SWITCHES "DGa""DGb" +#else + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if !defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#define TR_ON_ONE_SWITCHES "ON\0""One" + +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) + // only special switches here + #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES +#endif + +#if defined(HELI) +#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" +#else +#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" +#endif + +#if defined(CPUARM) + #define TR_RESERVE_VSRCRAW "[--]" + #define TR_EXTRA_VSRCRAW "Batt""Time" TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW "Tmr1""Tmr2""Tmr3" +#else + #define TR_EXTRA_VSRCRAW +#endif + +#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW + +#define LEN_VTMRMODES "\003" +#define TR_VTMRMODES "AUS""EIN""GSs""GS%""GSt" + +#define LEN_VTRAINERMODES "\022" +#define TR_VTRAINERMODES "Lehrer/Buchse\0 ""Schüler/Buchse\0 ""Lehrer/SBUS Modul\0""Lehrer/CPPM Modul\0""Lehrer/Batterie\0" + +#define LEN_VFAILSAFE "\015" // "\013" original +#define TR_VFAILSAFE "Kein Failsafe""Halte Pos.\0 ""Kanäle\0 ""Kein Signal\0 ""Empfänger\0 " + +#if defined(MAVLINK) + #define LEN_MAVLINK_BAUDS "\006" + #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" + #define LEN_MAVLINK_AC_MODES "\011" + #define TR_MAVLINK_AC_MODES "Stabilize""Acro ""Alt Hold ""Auto ""Guided ""Loiter ""RTL ""Circle ""Pos Hold ""Land ""OF Loiter""Toy A ""Toy M ""INVALID " + #define LEN_MAVLINK_AP_MODES "\015" + #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " +#endif + +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Sensor\0 ""Berechnung" + +#define LEN_VFORMULAS "\014" // "\10" ursprünglich +#define TR_VFORMULAS "Addieren\0 ""Mittelwert\0 ""Min\0 ""Max\0 ""Multiplizier""Gesamt\0 ""Zelle\0 ""Verbrauch\0 ""Distanz\0 " + +#define LEN_VPREC "\004" // "\005" Prec0 Prec1 Prec2 ursprünglich +#define TR_VPREC "0.--""0.0 ""0.00" + +#define LEN_VCELLINDEX "\012" // "\007" ursprünglich +#define TR_VCELLINDEX "Niedrigst\0""1. Zelle\0 ""2. Zelle\0 ""3. Zelle\0 ""4. Zelle\0 ""5. Zelle\0 ""6. Zelle\0 ""Höchster\0 ""Differenz\0" + +// ZERO TERMINATED STRINGS +#if defined(COLORLCD) + #define INDENT "\007" + #define LEN_INDENT 1 + #define INDENT_WIDTH 12 + #define BREAKSPACE "\036" +#else + #define INDENT "\001" + #define LEN_INDENT 1 + #define INDENT_WIDTH (FW/2) + #define BREAKSPACE " " +#endif + +#if defined(PCBTARANIS) + #define TR_ENTER "[ENTER]" +#else + #define TR_ENTER "[MENU]" +#endif + +#define TR_EXIT "[EXIT]" + +#if defined(PCBTARANIS) + #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER +#else + #define TR_POPUPS TR_ENTER "\010" TR_EXIT + #define OFS_EXIT sizeof(TR_ENTER) +#endif + +#define TR_MENUWHENDONE CENTER"\010"TR_ENTER" > Weiter" +#define TR_FREE "frei" +#define TR_DELETEMODEL "Modell löschen?" +#define TR_COPYINGMODEL "Kopiere Modell" +#define TR_MOVINGMODEL "Schiebe Modell" +#define TR_LOADINGMODEL "Lade Modell..." +#define TR_NAME "Name" +#define TR_MODELNAME "Modellname" +#define TR_PHASENAME "Phase-Name" +#define TR_MIXNAME "Mix-Name" +#define TR_INPUTNAME "Input-Name" +#if defined(VIRTUALINPUTS) + #define TR_EXPONAME "Info-Name" +#else + #define TR_EXPONAME "Info-Name" // Expo Name +#endif +#define TR_BITMAP "Modellfoto" +#define TR_TIMER TR("Timer", "Timer ") // für Timer1 Timer2 Timer3 +#define TR_ELIMITS TR("Erw. Limit", "Erw. Wege auf 150%") +#define TR_ETRIMS TR("Erw. Trims", "Erw. Trim auf 100%") +#define TR_TRIMINC TR("Trim Schr.", "Trimmschritte") +#define TR_DISPLAY_TRIMS TR("Trim anzeig", "Trimwerte anzeigen") +#define TR_TTRACE TR("Gasquelle", INDENT "Gas-Timerquelle") +#define TR_TTRIM TR("Gastrim", INDENT "Gas-Leerlauftrim") +#define TR_BEEPCTR TR("Mitt.Piep", "Mittelstell. -Pieps") +#define TR_USE_GLOBAL_FUNCS TR("Glob. Funkt.", "Globale Funkt verw.") +#if defined(PCBSKY9X) && defined(REVX) + #define TR_OUTPUT_TYPE INDENT "Output" +#endif +#define TR_PROTO TR(INDENT "Protok.", INDENT "Protokoll") +#if defined(CPUARM) + #define TR_PPMFRAME INDENT "PPM frame" +#else + #define TR_PPMFRAME "PPM frame" +#endif +#define TR_MS "ms" +#define TR_SWITCH TR("Schalt.", "Schalter") +#define TR_TRIMS "Trims" +#define TR_FADEIN "Langs. Ein" +#define TR_FADEOUT "Langs. Aus" +#define TR_DEFAULT "(Normal)" +#define TR_CHECKTRIMS CENTER"\006Check\012Trims" +#define OFS_CHECKTRIMS CENTER_OFS+(9*FW) +#define TR_SWASHTYPE TR("Typ Taumelsch", "Typ Taumelscheibe") +#define TR_COLLECTIVE TR("Kollekt. Pitch", "Kollekt. Pitch Quelle") +#define TR_AILERON "Roll Quelle" +#define TR_ELEVATOR "Nick Quelle" +#define TR_SWASHRING TR("Ring Begrenz", "Ring Begrenzung") +#define TR_ELEDIRECTION TR("Nick Richtung", "Nick Servo Richtung") +#define TR_AILDIRECTION TR("Roll Richtung", "Roll Servo Richtung") +#define TR_COLDIRECTION TR("Pitch Richtung", "Pitch Servo Richtung") +#define TR_MODE INDENT "Modus" +#define TR_NOFREEEXPO "Expos voll!" +#define TR_NOFREEMIXER "Mischer voll!" +#define TR_SOURCE INDENT "Quelle" +#define TR_WEIGHT "Gewicht" +#define TR_EXPO TR("Expo", "Exponential") +#define TR_SIDE "Seite" +#define TR_DIFFERENTIAL "Diff" +#define TR_OFFSET INDENT "Offset" +#define TR_TRIM "Trim" +#define TR_DREX "DRex" +#define DREX_CHBOX_OFFSET 30 +#define TR_CURVE "Kurve" +#define TR_FLMODE TR("Phase", "Phasen") +#define TR_MIXWARNING "Warnung" +#define TR_OFF "AUS" +#define TR_MULTPX "Wirkung" +#define TR_DELAYDOWN "Verz. Dn" +#define TR_DELAYUP "Verz. Up" +#define TR_SLOWDOWN "Langs.Dn" +#define TR_SLOWUP "Langs.Up" +#define TR_MIXER "MISCHER" +#define TR_CV "KV" +#define TR_GV "GV" +#define TR_ACHANNEL TR("A\004gemessen", "A\004Kanal gemessen =>") //9XR-Pro +#define TR_RANGE TR(INDENT "Bereich", INDENT "Variobereich m/s") // 9XR-Pro +#define TR_CENTER TR(INDENT "Mitte m/s", INDENT "Variomitte m/s") +#define TR_BAR "Streifen" +#define TR_ALARM TR(INDENT "Alarme ", INDENT "Ein bei Alarm") //9XR-Pro +#define TR_USRDATA "Daten berechnen aus" +#define TR_BLADES TR(INDENT "Prop", INDENT "Prop-Blätter") //9XR-Pro +#define TR_SCREEN "Telm-Bild " +#define TR_SOUND_LABEL "----Töne---------" +#define TR_LENGTH INDENT "Dauer" +#define TR_BEEP_LENGTH INDENT "Beep-Länge" +#define TR_SPKRPITCH INDENT "Beep-Freq. +/-" +#define TR_HAPTIC_LABEL "----Haptik-------" //9XR-Pro +#define TR_HAPTICSTRENGTH INDENT "Stärke" +#define TR_CONTRAST "LCD-Kontrast" +#define TR_ALARMS_LABEL "----Alarm wenn---" +#define TR_BATTERY_RANGE TR("Akku Bereich", "Akku Spgs-Bereich") // Symbol Akku Ladezustand +#define TR_BATTERYWARNING INDENT "Akkuspg kleiner" +#define TR_INACTIVITYALARM TR(INDENT "Inaktivität", INDENT "Inaktivität nach") //9XR-Pro +#define TR_MEMORYWARNING INDENT "Speicher voll" +#define TR_ALARMWARNING TR(INDENT "Alle Töne aus?", INDENT "Alle Töne ganz aus?") +#define TR_RENAVIG "Drehgeb. Navig." +#define TR_THROTTLE_LABEL "----Gas-Kontrolle----" +#define TR_THROTTLEREVERSE TR("Gas invers", INDENT "Vollgas hinten?") //Änderung wg TH9x, Taranis +#define TR_TIMER_NAME INDENT "Name" +#define TR_MINUTEBEEP TR(INDENT "Min-Alarm", INDENT "Minuten-Alarm") +#define TR_BEEPCOUNTDOWN INDENT "Countdown" +#define TR_PERSISTENT TR(INDENT "Permanent", INDENT "Permanent") +#define TR_BACKLIGHT_LABEL "----LCD-Beleuchtg----" +#define TR_BLDELAY INDENT "Dauer" +#define TR_BLONBRIGHTNESS INDENT "An-Helligkeit" +#define TR_BLOFFBRIGHTNESS INDENT "Aus-Helligkeit" +#define TR_BLCOLOR INDENT "Farbe" +#define TR_SPLASHSCREEN TR("Startbild Ein", "Startbild Ein für") +#define TR_THROTTLEWARNING TR("Gasalarm", INDENT "Gas Alarm") +#define TR_SWITCHWARNING TR("Sch. Alarm", INDENT "Schalter-Alarm") +#define TR_POTWARNING TR("Pot Warn.", INDENT "Poti-Warnung") +#define TR_TIMEZONE TR("Zeitzone", "GPS-Zeitzone +/-Std") +#define TR_ADJUST_RTC INDENT "Uhrzeit per GPS setzen" +#define TR_GPS "----GPS--------------" +#define TR_RXCHANNELORD TR("Kanalanordnung", "Kanalvoreinstellung") +#define TR_STICKS "Knüppel" +#define TR_POTS "Potis" +#define TR_SWITCHES "Schalter" +#define TR_SWITCHES_DELAY TR("Sw. Mitte Delay", "Schaltermitte Verz.") //Schalter Mitten verzögern Anpassung +#define TR_SLAVE TR("Schüler PPM1-16", "Schüler PPM1-16 als Ausgang") +#define TR_MODESRC " Modus\003% Quelle" +#define TR_MULTIPLIER "Multiplikator" +#define TR_CAL "Kal." +#define TR_VTRIM "Trim - +" +#define TR_BG "BG:" +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) + #define TR_MENUTOSTART CENTER"\007"TR_ENTER" zum Start" + #define TR_SETMIDPOINT CENTER"\002Knüppel+Potis auf Mitte" + #define TR_MOVESTICKSPOTS CENTER"\003Knüppel+Potis bewegen" +#else + #define TR_MENUTOSTART CENTER"\007"TR_ENTER" zum Start" + #define TR_SETMIDPOINT TR(CENTER "\002Knüppel+Potis auf Mitte", CENTER "\002Knüppel+Potis auf Mitte") + #define TR_MOVESTICKSPOTS CENTER"\003Knüppel+Potis bewegen" +#endif +#define TR_RXBATT "Rx Akku:" +#define TR_TXnRX "Tx:\0Rx:" +#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" +#define STR_US (STR_TMR1LATMAXUS+13) +#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" +#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" + +#if defined(CPUARM) + #define TR_TMIXMAXMS "Tmix max" + #define TR_FREESTACKMINB "Free Stack" +#else + #define TR_TMIXMAXMS "Tmix max\037\124ms" + #define TR_FREESTACKMINB "Free Stack\037\124b" +#endif + +#define TR_MENUTORESET CENTER TR_ENTER" für Reset" +#define TR_PPM_TRAINER "TR" //old #define TR_PPM "PPM" +#define TR_CH "CH" +#define TR_MODEL "MODELL" +#define TR_FP "FP" +#define TR_MIX "MIX" +#define TR_EEPROMLOWMEM "EEPROM voll" +#define TR_ALERT "WARNUNG" +#define TR_PRESSANYKEYTOSKIP TR("Taste drücken",CENTER"Taste drücken") +#define TR_THROTTLENOTIDLE "Gas nicht Null!" +#define TR_ALARMSDISABLED "Alarme ausgeschaltet" +#define TR_PRESSANYKEY TR("Taste drücken",CENTER"Taste drücken") +#define TR_BADEEPROMDATA "EEPROM ungültig" +#define TR_BAD_RADIO_DATA "Bad Radio Data" +#define TR_EEPROMFORMATTING "EEPROM Initialisieren" +#define TR_STORAGE_FORMAT "Storage Preparation" +#define TR_EEPROMOVERFLOW "EEPROM Überlauf" +#define TR_MENURADIOSETUP TR("SENDER-EINSTELLEN", "SENDER-GRUNDEINSTELLUNGEN") +#define TR_MENUDATEANDTIME "DATUM UND ZEIT" +#define TR_MENUTRAINER TR("LEHRER/SCHÜLER", "LEHRER/SCHÜLER") +#define TR_MENUGLOBALFUNCS "GLOBALE FUNKTIONEN" +#define TR_MENUVERSION "VERSION" +#define TR_MENUDIAG TR("Schalt.", "Schalter-Test") +#define TR_MENUANA "Analog-Test" +#define TR_MENUCALIBRATION TR("KALIB. ANALOG", "KALIBRIERUNG Knüppel+Potis") +#if defined(COLORLCD) + #define TR_TRIMS2OFFSETS "Trims => Subtrims" +#else + #define TR_TRIMS2OFFSETS "\006Trims => Subtrims" +#endif +#define TR_MENUMODELSEL TR("MODELLE", "MODELL WÄHLEN") +#define TR_MENUSETUP TR("MODELL-EINSTELLUNG", "MODELL-EINSTELLUNGEN") +#define TR_MENUFLIGHTPHASE "FLUGPHASE" +#define TR_MENUFLIGHTPHASES "FLUGPHASEN" +#define TR_MENUHELISETUP TR("HELI TS-Mischer", "HELI TS-Mischer CYC1-3") + +#if defined(PCBTARANIS) + #define TR_MENUINPUTS "INPUTS" + #define TR_MENULIMITS "SERVOWEGE" +#else + #define TR_MENUINPUTS TR("DR/EXPO", "DUALRATE/EXPO") + #define TR_MENULIMITS TR("GRENZEN", "SERVOWEGE") +#endif + +#define TR_MENUCURVES "KURVEN" +#define TR_MENUCURVE "KURVE" +#define TR_MENULOGICALSWITCH "LOGIKSCHALTER" +#define TR_MENULOGICALSWITCHES "LOGIKSCHALTER" +#define TR_MENUCUSTOMFUNC TR("SPEZ.-FUNKTIONEN", "SPEZIAL-FUNKTIONEN") +#define TR_MENUCUSTOMSCRIPTS "LUA-SCRIPTE" +#define TR_MENUTELEMETRY "TELEMETRIE" +#define TR_MENUTEMPLATES "VORLAGEN" +#define TR_MENUSTAT "STAT" +#define TR_MENUDEBUG "DEBUG" +#if defined(CPUARM) + #define TR_RXNUM TR(INDENT "Empf Nr.", INDENT "Modell-Match-Nr.") +#else + #define TR_RXNUM "Empf Nr." +#endif +#define TR_SYNCMENU "Sync [MENU]" +#define TR_LIMIT INDENT "Grenzen" +#define TR_MINRSSI "Min. RSSI" +#define TR_LATITUDE "Breite:" +#define TR_LONGITUDE "Länge:" +#define TR_GPSCOORD TR("GPS-Koord.", "GPS-Koordinaten-Format") +#define TR_VARIO TR("----Vario--------", "----Variometer----") //9XR-Pro +#define TR_PITCH_AT_ZERO INDENT "Niedrigster Ton" +#define TR_PITCH_AT_MAX INDENT "Höchster Ton" +#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 "Akku Spg messen" +#define TR_CURRENT_CALIB "Strom abgl." +#define TR_VOLTAGE TR(INDENT "Spg", INDENT "Spannungsquelle") //9XR-Pro +#define TR_CURRENT TR(INDENT "Strom", INDENT "Stromquelle") +#define TR_SELECT_MODEL "Modell Wählen" +#define TR_CREATE_CATEGORY "Create Category" +#define TR_RENAME_CATEGORY "Rename Category" +#define TR_DELETE_CATEGORY "Delete Category" +#define TR_CREATE_MODEL "Neues Modell" +#define TR_DUPLICATE_MODEL "Duplicate Model" +#define TR_CHANGE_CATEGORY "Change category" +#define TR_COPY_MODEL "Kopiere Modell" +#define TR_MOVE_MODEL "Verschiebe Modell" +#define TR_BACKUP_MODEL "Modell auf SD-Karte" //9XR-Pro +#define TR_DELETE_MODEL "Modell Löschen" // TODO merged into DELETEMODEL? +#define TR_RESTORE_MODEL "Modell Restore" +#define TR_SDCARD_ERROR "SD-Kartenfehler" +#define TR_NO_SDCARD "Keine SD-Karte" +#define TR_SDCARD_FULL "SD-Karte voll" +#define TR_INCOMPATIBLE "Nicht kompatibel" +#define TR_WARNING "WARNUNG" +#define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" +#define TR_EEPROM_CONVERTING "EEPROM Converting" +#define TR_THROTTLEWARN "GAS" +#define TR_ALARMSWARN "ALARM" +#define TR_SWITCHWARN "SCHALTER" +#define TR_FAILSAFEWARN "FAILSAFE" +#define TR_NO_FAILSAFE TR("Failsafe not set", "Failsafe nicht programmiert") +#define TR_KEYSTUCK "Taste klemmt" //Key stuck=Taste klemmt +#define TR_INVERT_THR TR("Gas umkehren?", "Vollgas hinten?") // Th9x 9XR +#define TR_SPEAKER_VOLUME INDENT "Lautstärke" +#define TR_LCD "Bildschirm" +#define TR_BRIGHTNESS INDENT "Helligkeit" +#define TR_CPU_TEMP "CPU-Temp.\016>" +#define TR_CPU_CURRENT "Strom\022>" +#define TR_CPU_MAH "Verbrauch" +#define TR_COPROC "CoProz." +#define TR_COPROC_TEMP "MB Temp. \016>" +#define TR_CAPAWARNING INDENT "Kapaz. niedrig" // wg 9XR-Pro +#define TR_TEMPWARNING INDENT "Temp. größer" //wg 9XR-Pro +#define TR_FUNC "Funktion" +#define TR_V1 "V1" +#define TR_V2 "V2" +#define TR_DURATION "Dauer" +#define TR_DELAY "Verzög." +#define TR_SD_CARD "SD-Karte" +#define TR_SDHC_CARD "SDHC-Karte" +#define TR_NO_SOUNDS_ON_SD "Keine Töne auf SD" +#define TR_NO_MODELS_ON_SD "Kein Modell auf SD" +#define TR_NO_BITMAPS_ON_SD "Keine Bitmaps auf SD" +#define TR_NO_SCRIPTS_ON_SD "Keine Scripte auf SD" +#define TR_SCRIPT_SYNTAX_ERROR "Script Syntax Fehler" +#define TR_SCRIPT_PANIC "Script panic" //?? +#define TR_SCRIPT_KILLED "Script killed" //?? +#define TR_SCRIPT_ERROR "Unbekannter Fehler" +#define TR_PLAY_FILE "Spielen" +#define TR_DELETE_FILE "Löschen" +#define TR_COPY_FILE "Kopieren" +#define TR_RENAME_FILE "Umbenennen" +#define TR_ASSIGN_BITMAP "Bitmap zuordnen" +#define TR_EXECUTE_FILE "Execute" +#define TR_REMOVED " gelöscht" +#define TR_SD_INFO "Information" +#define TR_SD_FORMAT "Formatieren" +#define TR_NA "N/V" //NV=Nicht Verfügbar Kurz-Meldung +#define TR_HARDWARE TR("Hardware einst. ", "Namen und Hardware einst.") +#define TR_FORMATTING "Formatierung..." +#define TR_TEMP_CALIB "Temp. abgl." +#define TR_TIME "Uhrzeit:" +#define TR_BAUDRATE "BT Baudrate" +#define TR_SD_INFO_TITLE "SD-INFO" +#define TR_SD_TYPE "Typ:" +#define TR_SD_SPEED "Geschw:" +#define TR_SD_SECTORS "Sectoren:" +#define TR_SD_SIZE "Größe:" +#define TR_TYPE INDENT "Type" +#define TR_GLOBAL_VARS "Globale Variablen" +#define TR_GVARS "GLOBALE V." +#define TR_GLOBAL_VAR "Globale Variable" +#define TR_MENUGLOBALVARS "GLOBALE VARIABLEN" +#define TR_OWN "Eigen" +#define TR_DATE "Datum:" +#define TR_ROTARY_ENCODER "Drehgeber" +#define TR_CHANNELS_MONITOR "Kanal-Monitor==>" +#define TR_MIXERS_MONITOR "==>Mischer Monitor" +#define TR_PATH_TOO_LONG "Pfad zu Lang" +#define TR_VIEW_TEXT "View Text" +#define TR_FLASH_BOOTLOADER "Flash BootLoader selbst" // +#define TR_FLASH_EXTERNAL_DEVICE "Flash externes Gerät" +#define TR_FLASH_INTERNAL_MODULE "Flash internes XJT-Modul" +#define TR_WRITING "\032Writing..." // +#define TR_CONFIRM_FORMAT "Formatieren bestätigen?" +#define TR_INTERNALRF "----Internes HF-Modul----------" +#define TR_EXTERNALRF TR("---Externes HF-Modul---", "----Externes HF-Modul----------") //9XR-Pro +#define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe Mode") +#define TR_FAILSAFESET "Failsafe setzen" +#define TR_MENUSENSOR "SENSOR" +#define TR_SENSOR "SENSOR" +#define TR_COUNTRYCODE "Landescode" +#define TR_VOICELANG "Sprach-Ansage" +#define TR_UNITSSYSTEM "Einheiten" +#define TR_EDIT "Zeile Editieren" +#define TR_INSERT_BEFORE "Neue Zeile davor" +#define TR_INSERT_AFTER "Neue Zeile danach" +#define TR_COPY "Zeile kopieren" +#define TR_MOVE "Zeile verschieben" +#define TR_PASTE "Zeile einfügen" +#define TR_DELETE "Zeile löschen" +#define TR_INSERT "Neue Zeile" +#define TR_RESET_FLIGHT "Reset Flugdaten" +#define TR_RESET_TIMER1 "Reset Timer1" +#define TR_RESET_TIMER2 "Reset Timer2" +#define TR_RESET_TIMER3 "Reset Timer3" +#define TR_RESET_TELEMETRY "Reset Telemetrie" +#define TR_STATISTICS "Statistik und Gas" +#define TR_ABOUT_US "Die Programmierer" +#define TR_SETUP_SCREENS "Setup screens" +#define TR_AND_SWITCH "UND Schalt" //UND mit weiterem Schaltern +#define TR_SF "SF" //Spezial Funktionen +#define TR_GF "GF" // Globale Funktionen +#define TR_SPEAKER INDENT "Lautspr" +#define TR_BUZZER INDENT "Summer" +#define TR_BYTES "Bytes" +#define TR_MODULE_BIND TR("Bind","[Bind]") //9XR-Pro +#define TR_MODULE_RANGE TR("Rang", "[Range]") //9XR-Pro +#define TR_RESET_BTN TR("[Reset]", "[Reset Trim]") +#define TR_SET "[Set]" +#define TR_TRAINER "----DSC Buchse PPM In/Out------" //DSC Buchse Trainer Buchse +#define TR_ANTENNAPROBLEM CENTER "TX-Antennenproblem!" +#define TR_MODELIDUSED TR("ID schon benutzt", "Modell-ID schon benutzt") +#define TR_MODULE INDENT "Modul-Typ" +#define TR_TELEMETRY_TYPE TR("Typ", "Telemetrytyp") +#define TR_TELEMETRY_SENSORS "----Sensoren----" +#define TR_VALUE "Wert" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Einheit" +#define TR_TELEMETRY_NEWSENSOR INDENT "Sensor hinzufügen ..." +#define TR_CHANNELRANGE TR(INDENT "Kanäle", INDENT "Ausgangs Kanäle") //wg 9XR-Pro +#define TR_LOWALARM INDENT "Vor-Alarm bei" +#define TR_CRITICALALARM INDENT "Kritisch-Alarm" +#define TR_ENABLE_POPUP "Freigabe Popup-Fenster" +#define TR_DISABLE_POPUP "Sperren Popup-Fenster" +#define TR_POPUP "Popup" +#define TR_MIN "Min" +#define TR_MAX "Max" +#define TR_CURVE_PRESET "Gerade 0 11 22 33 45" +#define TR_PRESET "Preset" +#define TR_MIRROR "Spiegeln" +#define TR_CLEAR "Löschen" +#define TR_RESET "Servowerte rücksetzen" +#define TR_RESET_SUBMENU TR("Reset Werte ==>", "Reset=>Timer Flug Telem") +#define TR_COUNT "Punkte" +#define TR_PT "Pt" +#define TR_PTS "Pts" +#define TR_SMOOTH "Runden" +#define TR_COPY_STICKS_TO_OFS "Kopie Stick to Servo-Mitte" +#define TR_COPY_TRIMS_TO_OFS "Kopie Trimm to Servo-Mitte" // "Trim to Subtrim" +#define TR_INCDEC "Inc/Decrement" +#define TR_GLOBALVAR "Global Var" +#define TR_MIXSOURCE "Mixer Quelle" +#define TR_CONSTANT "Konstant" +#define TR_PERSISTENT_MAH TR(INDENT "Spr. mAh", INDENT "Speichern mAh") //9XR-Pro +#define TR_PREFLIGHT TR("---Vorflug-Checkliste--", "----Vorflug-Checkliste----") +#define TR_CHECKLIST TR(INDENT "Checkliste", INDENT "Checkliste anzeigen") //9XR-Pro +#define TR_FAS_OFFSET TR(INDENT "FAS-Ofs", INDENT "FAS-Offset") +#define TR_UART3MODE "Serieller Port" +#define TR_SCRIPT "Lua-Script" +#define TR_INPUTS "Inputs" +#define TR_OUTPUTS "Outputs" +#define TR_EEBACKUP "\002[ENTER Long] Backup EEPROM->SD-Karte" +#define TR_FACTORYRESET "\004[MENU Long] ALLES komplett löschen" +#define TR_CONFIRMRESET "ALLE Modelle + Einst. löschen?" +#define TR_TO_MANY_LUA_SCRIPTS "Zu viele Lua-Scripte!!" + +#if defined(MAVLINK) + #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" + #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" + #define TR_MAVMENUSETUP_TITLE "Mavlink Setup" + #define TR_MAVLINK_BAUD_LABEL "Baudrate" + #define TR_MAVLINK_INFOS "INFOS" + #define TR_MAVLINK_MODE "MODE" + #define TR_MAVLINK_CUR_MODE "Current Mode" + #define TR_MAVLINK_ARMED "Armed" + #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" + #define TR_MAVLINK_BATTERY_LABEL "Flugakku-Status" + #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" + #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" + #define TR_MAVLINK_NAV_MENU_TITLE "NAV" + #define TR_MAVLINK_COURSE "Course" + #define TR_MAVLINK_HEADING "Heading" + #define TR_MAVLINK_BEARING "Bearing" + #define TR_MAVLINK_ALTITUDE "Altitude" + #define TR_MAVLINK_GPS "GPS" + #define TR_MAVLINK_NO_FIX "NO Fix" + #define TR_MAVLINK_SAT "SAT" + #define TR_MAVLINK_HDOP "HDOP" + #define TR_MAVLINK_LAT "LAT" + #define TR_MAVLINK_LON "LON" +#endif + +// Taranis Info Zeile Anzeigen +#define TR_PHASES_HEADERS { " Name ", " Schalter ", " Trim Seite ", " Trim Höhe ", " Trim Gas ", " Trim Quer ", " Fade In ", " Fade Out " } +#define TR_LIMITS_HEADERS { " Name ", " Mitte ", " Min ", " Max ", " Richtung ", " Kurve ", " PPM-Mitte ", " Mitte-Mode " } +#define TR_CSW_HEADERS { " Funktion ", " Var1 ", " Var2 ", " Var2 ", " UND-Schalter ", " Dauer ", " Verzögerung " } + +//Taranis About screen +#define TR_ABOUTUS "Über OpenTx" + +#define TR_ABOUT_OPENTX_1 "OpenTX ist Open Source," +#define TR_ABOUT_OPENTX_2 "nicht kommerziell, ohne" +#define TR_ABOUT_OPENTX_3 "Funktionsgarantie, frei" +#define TR_ABOUT_OPENTX_4 "verfügbar. Unterstützung" +#define TR_ABOUT_OPENTX_5 "durch Spenden willkommen" + +#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" +#define TR_ABOUT_BERTRAND_2 "OpenTX Hauptauthor" +#define TR_ABOUT_BERTRAND_3 "Companion9x-Mitentwickler" + +#define TR_ABOUT_MIKE_1 "Mike Blandford" +#define TR_ABOUT_MIKE_2 "Code- und Treiber-Guru" +#define TR_ABOUT_MIKE_3 "Wohl einer der Besten." +#define TR_ABOUT_MIKE_4 "Sehr inspirierend." + +#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" +#define TR_ABOUT_ROMOLO_2 "Companion9x-Hauptentwickler" +#define TR_ABOUT_ROMOLO_3 "" + +#define TR_ABOUT_ANDRE_1 "Andre Bernet" +#define TR_ABOUT_ANDRE_2 "Funktionalität und Tests," +#define TR_ABOUT_ANDRE_3 "Debugging, Dokumentation" + +#define TR_ABOUT_ROB_1 "Rob Thomson" +#define TR_ABOUT_ROB_2 "Openrcforums Webmaster" + +#define TR_ABOUT_KJELL_1 "Kjell Kernen" +#define TR_ABOUT_KJELL_2 "www.open-tx.org Hauptautor" +#define TR_ABOUT_KJELL_3 "Author von OpenTX Recorder" +#define TR_ABOUT_KJELL_4 "Companion contributor" + +#define TR_ABOUT_MARTIN_1 "Martin Hotar" +#define TR_ABOUT_MARTIN_2 "Grafikdesigner" + +#if defined(PCBTARANIS) + #define TR_ABOUT_HARDWARE_1 "Firma FrSky " + #define TR_ABOUT_HARDWARE_2 "Hardware-Design/-Produktion" + #define TR_ABOUT_HARDWARE_3 "Firmware-Vertrieb" +#else + #define TR_ABOUT_HARDWARE_1 "Brent Nelson" + #define TR_ABOUT_HARDWARE_2 "Sky9x Design/Produktion" + #define TR_ABOUT_HARDWARE_3 "" +#endif + +#define TR_ABOUT_PARENTS_1 "Vorgänger-Projekte" +#define TR_ABOUT_PARENTS_2 "Ersky9x (Mike Blandford)" +#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" +#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" + +#define TR_CHR_SHORT 's' // Taste short +#define TR_CHR_LONG 'l' // Taste long +#define TR_CHR_TOGGLE 't' // Taste als togglefunktion = Ein Aus Ein +#define TR_CHR_HOUR 'h' // Stunden +#define TR_CHR_INPUT 'I' // Values between A-I will work + +#define TR_BEEP_VOLUME "Beep-Lautst." +#define TR_WAV_VOLUME "Wave-Lautst." +#define TR_VARIO_VOLUME "Vario-Lautst." +#define TR_BG_VOLUME "Hintergr-Lautst." + +#define TR_TOP_BAR "----Infozeile----" +#define TR_ALTITUDE INDENT "Höhenanzeige" +#define TR_SCALE "Skalierer" +#define TR_VIEW_CHANNELS "Zeige Kanäle" +#define TR_VIEW_NOTES "Zeige Notizen" +#define TR_MODEL_SELECT "Model Select" +#define TR_MODS_FORBIDDEN "Veränderungen verboten!" +#define TR_UNLOCKED "Entsperrt" +#define TR_ID "ID" +#define TR_PRECISION "Prezision" +#define TR_RATIO "Umrechnung" //Faktor, Mulitplikator, Teiler 0,1 bis 10,0 +#define TR_FORMULA "Formel" +#define TR_CELLINDEX "Zellenindex" +#define TR_LOGS "Log Daten" +#define TR_OPTIONS "Optionen" + +#define TR_ALTSENSOR "Höhen Sensor" +#define TR_CELLSENSOR "Zellen Sensor" +#define TR_GPSSENSOR "GPS Sensor" +#define TR_CURRENTSENSOR "Sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_ONLYPOSITIVE "Nur Positiv" +#define TR_FILTER "Filter aktiv" +#define TR_TELEMETRYFULL "Telemetriezeilen voll!" +#define TR_INVERTED_SERIAL INDENT "Invert." +#define TR_IGNORE_INSTANCE TR(INDENT "Keine ID", INDENT "Keine Multisen-ID") //unklar +#define TR_DISCOVER_SENSORS INDENT "Start Sensorsuche" +#define TR_STOP_DISCOVER_SENSORS INDENT "Stop Sensorsuche" +#define TR_DELETE_ALL_SENSORS INDENT "Lösche alle Sensoren" +#define TR_CONFIRMDELETE "Wirklich alle löschen?" +#define TR_SELECT_WIDGET "Select widget" +#define TR_REMOVE_WIDGET "Remove widget" +#define TR_WIDGET_SETTINGS "Widget settings" +#define TR_REMOVE_SCREEN "Remove screen" +// ----------------------------- Symbole für Auswahlliste---------- +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua Scripte" +#define TR_MENU_STICKS "\307Knüppel" +#define TR_MENU_POTS "\310Potis" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Heli-TS CYC1-3" +#define TR_MENU_TRIMS "\313Trimmung" +#define TR_MENU_SWITCHES "\312Schalter" +#define TR_MENU_LOGICAL_SWITCHES "\312Log. Schalter" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Kanäle" +#define TR_MENU_GVARS "\311Glob. Vars" +#define TR_MENU_TELEMETRY "\321Telemetrie" +#define TR_MENU_OTHER " Weitere" +#define TR_MENU_INVERT "Invertieren" +// ---------------------------------------------------------------- +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP1 "Tmp1" +#define ZSTR_TEMP2 "Tmp2" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" +#define ZSTR_BATT1_VOLTAGE "RB1V" +#define ZSTR_BATT2_VOLTAGE "RB2V" +#define ZSTR_BATT1_CURRENT "RB1A" +#define ZSTR_BATT2_CURRENT "RB2A" +#define ZSTR_BATT1_CONSUMPTION "RB1C" +#define ZSTR_BATT2_CONSUMPTION "RB2C" +#define ZSTR_RB_STATE "RBS" +#define ZSTR_CHANS_STATE "RBCS" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index b2f02bde8..8a6e47b40 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -1,27 +1,12 @@ /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -32,6 +17,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * + */ + + + +/* * !!!!! DO NOT EDIT en.h - EDIT en.h.txt INSTEAD !!!!!!! * * In order to make translations easier en.h.txt is parsed and national @@ -41,9 +31,8 @@ * !!!!! DO NOT EDIT en.h - EDIT en.h.txt INSTEAD !!!!!!! */ - - -/* Formatting octal codes available in TR_ strings: +/* + * Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) * \036 -newline * \035 -horizontal tab (ARM only) @@ -51,6 +40,8 @@ * \0 -ends current string */ + + // NON ZERO TERMINATED STRINGS #define LEN_OFFON "\003" #define TR_OFFON "OFF""ON\0" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 2cc8db163..09df0af3a 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -1,17 +1,12 @@ /* - * Authors (alphabetical order) - * - Bertrand Songis - * - Bernet Andre - * - Jose Moreno - * - Kjell Kernen - * - Martin Hotar - * - Romolo Manfredini + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -22,8 +17,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * - * + */ + +// ES translations author: Jose Moreno + +/* * !!!!! DO NOT EDIT es.h - EDIT es.h.txt INSTEAD !!!!!!! * * In order to make translations easier es.h.txt is parsed and national @@ -33,7 +31,8 @@ * * !!!!! DO NOT EDIT es.h - EDIT es.h.txt INSTEAD !!!!!!! */ - /* Formatting octal codes available in TR_ strings: + +/* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) * \036 -newline * \035 -horizontal tab (ARM only) @@ -43,14 +42,6 @@ - - - - - - - - // NON ZERO TERMINATED STRINGS #define LEN_OFFON "\003" #define TR_OFFON "OFF""ON\0" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index ffb873f9c..a1f96a504 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -1,16 +1,12 @@ -/* - * Authors (alphabetical order) - * - Bertrand Songis - * - Bernet Andre - * - Kjell Kernen - * - Martin Hotar - * - Romolo Manfredini +/* + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -21,9 +17,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * - * - * + */ + +// FI translations author: who? + +/* * !!!!! DO NOT EDIT fi.h - EDIT fi.h.txt INSTEAD !!!!!!! * * In order to make translations easier fi.h.txt is parsed and national @@ -33,7 +31,9 @@ * * !!!!! DO NOT EDIT fi.h - EDIT fi.h.txt INSTEAD !!!!!!! */ - /* Formatting octal codes available in TR_ strings: + +/* + * Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) * \036 -newline * \035 -horizontal tab (ARM only) @@ -42,15 +42,6 @@ */ - - - - - - - - - // NON ZERO TERMINATED STRINGS #define LEN_OFFON "\003" #define TR_OFFON "POI""PÄÄ" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 50beee0ef..ec285a68e 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1,13 +1,12 @@ -/* - * Authors (alphabetical order) - * - Andre Bernet - * - Bertrand Songis +/* + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -18,9 +17,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * - * - * + */ + +// FR translations author: Andre Bernet + +/* * !!!!! DO NOT EDIT fr.h - EDIT fr.h.txt INSTEAD !!!!!!! * * In order to make translations easier fr.h.txt is parsed and national @@ -30,7 +31,9 @@ * * !!!!! DO NOT EDIT fr.h - EDIT fr.h.txt INSTEAD !!!!!!! */ - /* Formatting octal codes available in TR_ strings: + +/* + * Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) * \036 -newline * \035 -horizontal tab (ARM only) @@ -39,18 +42,6 @@ */ - - - - - - - - - - - - // NON ZERO TERMINATED STRINGS #define LEN_OFFON "\003" #define TR_OFFON "OFF""ON\0" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 13e07cbcd..d3079fa3d 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -1,1173 +1,1161 @@ -/* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer - * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ - * - * 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. - * - * - * - * !!!!! DO NOT EDIT it.h - EDIT it.h.txt INSTEAD !!!!!!! - * - * In order to make translations easier it.h.txt is parsed and national - * characters are replaced by bitmap codes. The result is it.h. - * - * See translate.py in the util folder for the list of character codes - * - * !!!!! DO NOT EDIT it.h - EDIT it.h.txt INSTEAD !!!!!!! - */ - - - - /* Formatting octal codes available in TR_ strings: - * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline - * \035 -horizontal tab (ARM only) - * \001 to \034 -extended spacing (value * FW/2) - * \0 -ends current string - */ - -// NON ZERO TERMINATED STRINGS -#define LEN_OFFON "\003" -#define TR_OFFON "OFF""ON\0" - -#define LEN_MMMINV "\003" -#define TR_MMMINV "---""INV" - -#define LEN_NCHANNELS "\004" -#define TR_NCHANNELS "\0014CH\0016CH\0018CH10CH12CH14CH16CH" - -#define LEN_VBEEPMODE TR("\005", "\010") -#define TR_VBEEPMODE TR("Silen""Avvis""Notst""Tutti","Silente ""Avvisi\0 ""No Tasti""Tutti\0 ") - -#define LEN_VBEEPLEN "\005" -#define TR_VBEEPLEN "+Cort""Corta""Media""Lunga""+Lung" - -#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") - -#define LEN_TRNMODE "\003" -#define TR_TRNMODE "off"" +="" :=" - -#define LEN_TRNCHN "\003" -#define TR_TRNCHN "ch1ch2ch3ch4" - -#define LEN_UART3MODES "\016" -#define TR_UART3MODES "OFF\0 ""Replica S-Port""Telemetria\0 ""SBUS Trainer\0 ""Debug\0" - -#define LEN_SWTYPES "\006" -#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" - -#define LEN_POTTYPES "\017" -#define TR_POTTYPES "None\0 ""Pot. con centro""Inter. Multipos""Potenziometro\0 " - -#define LEN_SLIDERTYPES "\006" -#define TR_SLIDERTYPES "Niente""Slider" - -#define LEN_DATETIME "\005" -#define TR_DATETIME "DATA:""ORA :" - -#define LEN_VLCD "\006" -#define TR_VLCD "NormalOptrex" - -#define LEN_VPERSISTENT "\015" -#define TR_VPERSISTENT "NO\0 ""Volo\0 ""Reset Manuale" - -#define LEN_COUNTRYCODES TR("\002", "\007") -#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europa\0") - -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF" - -#define LEN_XJT_PROTOCOLS "\004" -#define TR_XJT_PROTOCOLS "OFF\0""D16\0""D8\0 ""LR12" - -#define LEN_DSM_PROTOCOLS "\004" -#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" - -#define LEN_VTRIMINC "\006" -#define TR_VTRIMINC "Exp ""ExFine""Fine ""Medio ""Ampio " - -#define LEN_VDISPLAYTRIMS "\006" -#define TR_VDISPLAYTRIMS "No\0 ""Cambio""Si\0 " - -#define LEN_VBEEPCOUNTDOWN "\006" -#define TR_VBEEPCOUNTDOWN "NienteSuoni\0Voce\0 Vibra\0" - -#define LEN_VVARIOCENTER "\006" -#define TR_VVARIOCENTER "Tono\0 ""Silent" - -#define LEN_CURVE_TYPES "\010" -#define TR_CURVE_TYPES "Fisso\0 ""Modific." - -#define LEN_RETA123 "\001" - -#if defined(PCBHORUS) - #define TR_RETA123 "DEMA12345LR" -#elif defined(PCBFLAMENCO) - #define TR_RETA123 "DEMA123LR" -#elif defined(PCBTARANIS) && defined(REV9E) - #define TR_RETA123 "DEMA123SDSD" -#elif defined(PCBTARANIS) || defined(REVX) - #define TR_RETA123 "DEMA123SD" -#elif defined(PCBSKY9X) - #define TR_RETA123 "DEMA123a" -#elif defined(CPUM2560) - #define TR_RETA123 "DEMA123ab" -#else - #define TR_RETA123 "DEMA123" -#endif - -#define LEN_VPROTOS "\006" - -#if defined(PXX) - #define TR_PXX "PXX\0 " -#elif defined(DSM2) || defined(IRPROTOS) - #define TR_PXX "[PXX]\0" -#else - #define TR_PXX -#endif - -#if defined(DSM2) - #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " -#elif defined(IRPROTOS) - #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" -#else - #define TR_DSM2 -#endif - -#if defined(IRPROTOS) - #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" -#else - #define TR_IRPROTOS -#endif - -#if defined(CPUARM) - #define TR_XPPM -#else - #define TR_XPPM "PPM16\0""PPMsim" -#endif - -#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS - -#define LEN_POSNEG "\003" -#define TR_POSNEG "POS""NEG" - -#if defined(PCBSKY9X) && defined(REVX) - #define LEN_VOUTPUT_TYPE "\011" - #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" -#endif - -#define LEN_VCURVEFUNC "\003" -#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" - -#define LEN_VMLTPX "\005" -#define TR_VMLTPX "Add. ""Molt.""Sost." - -#define LEN_VMLTPX2 "\002" -#define TR_VMLTPX2 "+=""*="":=" - -#define LEN_VMIXTRIMS "\003" -#define TR_VMIXTRIMS "OFF""ON ""Dir""Ele""Mot""Ale" - -#if LCD_W >= 212 - #define TR_CSWTIMER "Timer" - #define TR_CSWSTICKY "Stcky" - #define TR_CSWRANGE "Campo" - #define TR_CSWSTAY "Edge\0" -#else - #define TR_CSWTIMER "Tim\0 " - #define TR_CSWSTICKY "Glue\0" - #if defined(CPUARM) - #define TR_CSWRANGE "Rnge\0" - #define TR_CSWSTAY "Edge\0" - #else - #define TR_CSWRANGE - #define TR_CSWSTAY - #endif -#endif - -#if defined(CPUARM) - #define TR_CSWEQUAL "a=x\0 " -#else - #define TR_CSWEQUAL -#endif - -#define LEN_VCSWFUNC "\005" -#if defined(CPUARM) -#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 - #define TR_SF_SAFETY "Blocco\0 " -#elif defined(OVERRIDE_CHANNEL_FUNCTION) - #define TR_SF_SAFETY "Blocco\0 " -#else - #define TR_SF_SAFETY "---\0 " -#endif - -#if defined(PCBTARANIS) - #define TR_SF_SCREENSHOT "Screenshot\0 " -#else - #define TR_SF_SCREENSHOT -#endif - -#define TR_SF_RESERVE "[riserva] \0" - -#if defined(CPUARM) - #define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_SCREENSHOT TR_SF_TEST -#elif defined(PCBGRUVIN9X) - #define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_TEST -#else - #define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "Retroillum.\0 " TR_SF_TEST -#endif - -#define LEN_VFSWRESET TR("\004", "\011") - -#if defined(FRSKY) - #define TR_FSW_RESET_TELEM TR("Telm", "Telemetr.") -#else - #define TR_FSW_RESET_TELEM -#endif - -#if ROTARY_ENCODERS == 2 - #define TR_FSW_RESET_ROTENC TR("REa\0""REb\0", "EncRot A\0""EncRot B\0") -#elif ROTARY_ENCODERS == 1 - #define TR_FSW_RESET_ROTENC TR("R.E.", "EncRot\0 ") -#else - #define TR_FSW_RESET_ROTENC -#endif - -#if LCD_W >= 212 - #define TR_FSW_RESET_TIMERS "Timer 1\0 ""Timer 2\0 ""Timer 3\0 " -#elif defined(CPUARM) - #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2""Tmr3" -#else - #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2" -#endif - -#define TR_VFSWRESET TR(TR_FSW_RESET_TIMERS "All\0" TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC, TR_FSW_RESET_TIMERS "Tutto\0 " TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC) - -#define LEN_FUNCSOUNDS TR("\004", "\006") -#define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Beep1 ""Beep2 ""Beep3 ""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") - -#define LEN_VTELEMCHNS TR("\004", "\005") - -#if defined(CPUARM) - #define TR_TELEM_RESERVE TR("[--]", "[---]") - #define TR_TELEM_TIME TR("Ora\0", "Ora\0 ") - #define TR_SWR TR("SWR\0", "SWR\0 ") - #define TR_RX_BATT TR("RxBt", "BatRx") - #define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ") - #define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ") -#else - #define TR_TELEM_RESERVE - #define TR_TELEM_TIME - #define TR_SWR - #define TR_RX_BATT - #define TR_A3_A4 - #define TR_A3_A4_MIN -#endif - -#define TR_ASPD_MAX TR("ASp+", "ASpd+") - -#if LCD_W >= 212 - #define TR_TELEM_RSSI_RX "RSSI\0" -#else - #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") -#endif - -#if defined(CPUARM) - #define TR_TELEM_TIMERS TR("Tmr1""Tmr2""Tmr3", "Tmr1\0""Tmr2\0""Tmr3\0") -#else - #define TR_TELEM_TIMERS TR("Tmr1""Tmr2", "Tmr1\0""Tmr2\0") -#endif - -#if LCD_W >= 212 - #define TR_VTELEMCHNS "---\0 ""Batt\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Celle""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Ora\0 " -#else - #define TR_VTELEMCHNS "---\0""Batt" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Ora\0" -#endif - -#define LENGTH_UNIT_IMP "ft\0" -#define SPEED_UNIT_IMP "mph" -#define LENGTH_UNIT_METR "m\0 " -#define SPEED_UNIT_METR "kmh" - -#if defined(CPUARM) - #define LEN_VUNITSSYSTEM TR("\006", "\011") - #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metriche\0""Imperiali") - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" -#else - #if defined(IMPERIAL_UNITS) - #define LENGTH_UNIT LENGTH_UNIT_IMP - #define SPEED_UNIT SPEED_UNIT_IMP - #else - #define LENGTH_UNIT LENGTH_UNIT_METR - #define SPEED_UNIT SPEED_UNIT_METR - #endif - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " -#endif - -#define STR_V (STR_VTELEMUNIT+1) -#define STR_A (STR_VTELEMUNIT+4) - -#define LEN_VALARM "\003" -#define TR_VALARM "---""Gia""Ara""Ros" - -#define LEN_VALARMFN "\001" -#define TR_VALARMFN "<>" - -#define LEN_VTELPROTO "\007" -#define TR_VTELPROTO "---\0 ""Hub\0 ""WSHHigh" - -#if defined(CPUARM) - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Celle\0 ") - #define LEN_VOLTSRC TR("\003", "\007") - #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Celle\0 ") -#else - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Celle\0 ") -#endif - -#define LEN_VARIOSRC "\005" -#if defined(FRSKY_SPORT) - #define TR_VARIOSRC "Vario""A1\0 ""A2\0" -#else - #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" -#endif - -#if defined(CPUARM) - #define LEN_VTELEMSCREENTYPE "\006" - #define TR_VTELEMSCREENTYPE "Niente""Valori""Barre\0""Script" -#else - #define LEN_VTELEMSCREENTYPE "\006" - #define TR_VTELEMSCREENTYPE "Valori""Barre\0" -#endif - -#define LEN_GPSFORMAT "\004" -#define TR_GPSFORMAT "HMS NMEA" - -#define LEN2_VTEMPLATES 13 -#define LEN_VTEMPLATES "\015" -#define TR_VTEMPLATES "Canc. Mixer\0 ""Semplice 4CH\0""Sticky-T-Cut\0""Coda-V \0""Elevoni\0 ""Delta\0 ""eCCPM\0 ""Setup Heli\0 ""Test Servo\0 " - -#define LEN_VSWASHTYPE "\004" -#define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" - -#define LEN_VKEYS "\005" -#define TR_VKEYS TR("Menù\0""EXIT\0""DN\0 ""UP\0 ""SX\0 ""DX\0 ", "Menu\0""Esci\0""Enter""Pag.\0""Più\0 ""Meno") - -#define LEN_VRENCODERS "\003" -#define TR_VRENCODERS "REa""REb" - -#define LEN_VSWITCHES "\003" -#define LEN_VSRCRAW "\004" - -#define TR_STICKS_VSRCRAW TR("Dir\0""Ele\0""Mot\0""Ale\0", "\307Dir""\307Ele""\307Mot""\307Ale") -#define TR_TRIMS_VSRCRAW TR("TrmR""TrmE""TrmT""TrmA", "\313Dir""\313Ele""\313Mot""\313Ale") - -#if defined(PCBHORUS) - #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#elif defined(PCBFLAMENCO) - #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " -#elif defined(PCBTARANIS) && defined(REV9E) - #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" -#elif defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#else - #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " - #define TR_SW_VSRCRAW "3POS" - #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" -#endif - -#if defined(CPUARM) - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" -#else - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" -#endif - -#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") - -#if defined(PCBSKY9X) - #define TR_ROTARY_ENCODERS "REa\0" - #define TR_ROTENC_SWITCHES "REa" -#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) - #define TR_ROTARY_ENCODERS "REa\0""REb\0" - #define TR_ROTENC_SWITCHES "REa""REb" -#else - #define TR_ROTARY_ENCODERS - #define TR_ROTENC_SWITCHES -#endif - -#if !defined(PCBTARANIS) - #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" -#endif - -#define TR_ON_ONE_SWITCHES "ON\0""One" - -#if defined(PCBFLAMENCO) - #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(PCBTARANIS) || defined(PCBHORUS) - // only special switches here - #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES -#else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES -#endif - -#if defined(HELI) -#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" -#else -#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" -#endif - -#if defined(CPUARM) - #define TR_RESERVE_VSRCRAW "[--]" - #define TR_EXTRA_VSRCRAW "Batt""Time" TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW "Tmr1""Tmr2""Tmr3" -#else - #define TR_EXTRA_VSRCRAW -#endif - -#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW - -#define LEN_VTMRMODES "\003" -#define TR_VTMRMODES "OFF""ABS""MOs""MO%""MOt" - -#define LEN_VTRAINERMODES "\022" -#define TR_VTRAINERMODES "Maestro/Jack\0 ""Allievo/Jack\0 ""Master/Modulo SBUS""Master/Modulo CPPM""Master/Batteria\0 " - -#define LEN_VFAILSAFE "\013" -#define TR_VFAILSAFE "Non settato""Mantieni\0 ""Personali\0 ""No impulsi\0""Ricevente\0 " - -#if defined(MAVLINK) - #define LEN_MAVLINK_BAUDS "\006" - #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" - #define LEN_MAVLINK_AC_MODES "\011" - #define TR_MAVLINK_AC_MODES "Stabilize""Acro ""Alt Hold ""Auto ""Guided ""Loiter ""RTL ""Circle ""Pos Hold ""Land ""OF Loiter""Toy A ""Toy M ""INVALID " - #define LEN_MAVLINK_AP_MODES "\015" - #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Inizializza ""INVALID " -#endif - -#define LEN_VSENSORTYPES "\012" -#define TR_VSENSORTYPES "Custom\0 ""Calcolato\0" - -#define LEN_VFORMULAS "\011" -#define TR_VFORMULAS "Somma\0 ""Media\0 ""Min\0 ""Max\0 ""Moltipl\0 ""Totalizza""Cella\0 ""Consumo\0 ""Distanza\0" - -#define LEN_VPREC "\004" -#define TR_VPREC "0.--""0.0 ""0.00" - -#define LEN_VCELLINDEX "\010" -#define TR_VCELLINDEX "Minore\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Maggiore""Delta\0" - -// ZERO TERMINATED STRINGS -#if defined(COLORLCD) - #define INDENT "\007" - #define LEN_INDENT 1 - #define INDENT_WIDTH 12 - #define BREAKSPACE "\036" -#else - #define INDENT "\001" - #define LEN_INDENT 1 - #define INDENT_WIDTH (FW/2) - #define BREAKSPACE " " -#endif - -#if defined(PCBTARANIS) - #define TR_ENTER "[ENTER]" -#else - #define TR_ENTER "[Menù]" -#endif - -#define TR_EXIT "[EXIT]" - -#if defined(PCBTARANIS) - #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER -#else - #define TR_POPUPS TR_ENTER "\010" TR_EXIT - #define OFS_EXIT sizeof(TR_ENTER) -#endif - -#define TR_MENUWHENDONE CENTER "\007" TR_ENTER " Conferma" -#define TR_FREE "disp" -#define TR_DELETEMODEL "Elimina modello?" -#define TR_COPYINGMODEL "Copia in corso.." -#define TR_MOVINGMODEL "Spostamento..." -#define TR_LOADINGMODEL "Caricamento..." -#define TR_NAME "Nome" -#define TR_MODELNAME "Nome modello" -#define TR_PHASENAME "Nome fase" -#define TR_MIXNAME "Nome mix" -#define TR_INPUTNAME "Nome Ingr." -#if defined(VIRTUALINPUTS) - #define TR_EXPONAME "Nome expo" -#else - #define TR_EXPONAME "Nome Expo" -#endif -#define TR_BITMAP "Immagine" -#define TR_TIMER TR("Timer","Timer ") -#define TR_ELIMITS TR("Limiti.E","Limiti Estesi") -#define TR_ETRIMS TR("Trim Ext","Trim Estesi") -#define TR_TRIMINC "Passo Trim" -#define TR_DISPLAY_TRIMS "Mostra Trims" -#define TR_TTRACE TR("T-Source", INDENT "Sorgente Motore") -#define TR_TTRIM TR("T-Trim", INDENT "Trim Motore") -#define TR_BEEPCTR TR("Ctr Beep","Beep al centro") -#define TR_USE_GLOBAL_FUNCS "Usa Funz Globali" -#if defined(PCBSKY9X) && defined(REVX) - #define TR_OUTPUT_TYPE INDENT "Output" -#endif -#define TR_PROTO TR(INDENT "Proto", INDENT "Protocollo") -#if defined(CPUARM) - #define TR_PPMFRAME INDENT "PPM frame" -#else - #define TR_PPMFRAME "PPM frame" -#endif -#define TR_MS "ms" -#define TR_SWITCH "Inter." -#define TR_TRIMS "Trims" -#define TR_FADEIN "Diss.In" -#define TR_FADEOUT "Diss.Out" -#define TR_DEFAULT "(Predefinita)" -#define TR_CHECKTRIMS CENTER "\006Check\012Trims" -#define OFS_CHECKTRIMS CENTER_OFS+(9*FW) -#define TR_SWASHTYPE "Tipo Ciclico" -#define TR_COLLECTIVE TR("Collettivo","Origine Collettivo") -#define TR_AILERON "Lateral cyc. source" -#define TR_ELEVATOR "Long. cyc. source" -#define TR_SWASHRING "Anello Ciclico" -#define TR_ELEDIRECTION TR("Direzione ELE","Direzione Long. cyc.") -#define TR_AILDIRECTION TR("Direzione AIL","Direzione Lateral cyc.") -#define TR_COLDIRECTION TR("Direzione PIT","Direzione Coll. Passo") -#define TR_MODE INDENT"Modo" -#define TR_NOFREEEXPO "Expo pieni!" -#define TR_NOFREEMIXER "Mixer pieni!" -#define TR_SOURCE INDENT"Sorg." -#define TR_WEIGHT "Peso" -#define TR_EXPO "Espo" -#define TR_SIDE "Lato" -#define TR_DIFFERENTIAL "Differ" -#define TR_OFFSET INDENT"Offset" -#define TR_TRIM "Trim" -#define TR_DREX "DRex" -#define DREX_CHBOX_OFFSET 30 -#define TR_CURVE "Curva" -#define TR_FLMODE "Fase" -#define TR_MIXWARNING "Avviso" -#define TR_OFF "OFF" -#define TR_MULTPX "MultPx" -#define TR_DELAYDOWN "Post.Giù " -#define TR_DELAYUP "Post.Sù" -#define TR_SLOWDOWN "Rall.Giù " -#define TR_SLOWUP "Rall.Sù" -#define TR_MIXER "MIXER" -#define TR_CV "CV" -#define TR_GV "GV" -#define TR_ACHANNEL "A\002ingresso" -#define TR_RANGE TR(INDENT"Inter.", INDENT"Intervallo") -#define TR_CENTER INDENT "Centro" -#define TR_BAR "Barra" -#define TR_ALARM TR(INDENT"Allar.", INDENT"Allarme") -#define TR_USRDATA "Dati" -#define TR_BLADES INDENT"Pale" -#define TR_SCREEN "Schermo " -#define TR_SOUND_LABEL "Suono" -#define TR_LENGTH INDENT"Durata" -#define TR_BEEP_LENGTH INDENT "Lung. Beep" -#define TR_SPKRPITCH INDENT"Tono" -#define TR_HAPTIC_LABEL "Vibraz" -#define TR_HAPTICSTRENGTH INDENT"Forza" -#define TR_CONTRAST "Contrasto" -#define TR_ALARMS_LABEL "Allarmi" -#define TR_BATTERY_RANGE TR("Interv. Batt", "Intervallo batteria") -#define TR_BATTERYWARNING INDENT"Avviso batteria" -#define TR_INACTIVITYALARM INDENT"Inattivita'" -#define TR_MEMORYWARNING INDENT"Avviso memoria" -#define TR_ALARMWARNING INDENT"Spegni suono" -#define TR_RENAVIG "Navig EncRot " -#define TR_THROTTLE_LABEL "Motore" -#define TR_THROTTLEREVERSE TR("Mot inv.", INDENT "Motore Inverso") -#define TR_TIMER_NAME INDENT "Nome" -#define TR_MINUTEBEEP INDENT"Minuto" -#define TR_BEEPCOUNTDOWN TR(INDENT"Conto rov", INDENT"Conto rovescia") -#define TR_PERSISTENT TR(INDENT"Persist.", INDENT"Persistente") -#define TR_BACKLIGHT_LABEL TR("Retroillum.", "Retroilluminazione") -#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_BLCOLOR INDENT "Colore" -#define TR_SPLASHSCREEN TR("Schermo avvio", "Schermata di avvio") -#define TR_THROTTLEWARNING TR("All. Mot.", INDENT "Allarme Motore") -#define TR_SWITCHWARNING TR("Avv. Int.", INDENT "Avviso Interr.") -#define TR_POTWARNING TR("Avv. Pot.", INDENT "Avviso Pot.") -#define TR_TIMEZONE "Ora locale" -#define TR_ADJUST_RTC INDENT "Aggiusta RTC" -#define TR_GPS "GPS" -#define TR_RXCHANNELORD "Ordine ch RX" -#define TR_STICKS "Sticks" -#define TR_POTS "Pot." -#define TR_SWITCHES "Interutt." -#define TR_SWITCHES_DELAY "Ritardo voce FV" -#define TR_SLAVE "Allievo" -#define TR_MODESRC "Modo\006% Origine" -#define TR_MULTIPLIER "Moltiplica" -#define TR_CAL "Cal" -#define TR_VTRIM "Trim- +" -#define TR_BG "BG:" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] to start" - #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" - #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " TO START" - #define TR_SETMIDPOINT "CENTRA STICKS/SLIDERS" - #define TR_MOVESTICKSPOTS "MUOVI STICKS/POTS" -#else - #define TR_MENUTOSTART CENTER"\011" TR_ENTER " per Cal." - #define TR_SETMIDPOINT CENTER"\012SETTA CENTRO" - #define TR_MOVESTICKSPOTS CENTER"\010MUOVI STICK/POT" -#endif -#define TR_RXBATT "Batt Rx:" -#define TR_TXnRX "Tx:\0Rx:" -#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" -#define STR_US (STR_TMR1LATMAXUS+13) -#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" -#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" - -#if defined(CPUARM) - #define TR_TMIXMAXMS "Tmix max" - #define TR_FREESTACKMINB "Free Stack" -#else - #define TR_TMIXMAXMS "Tmix max\037\124ms" - #define TR_FREESTACKMINB "Free Stack\037\124b" -#endif - -#define TR_MENUTORESET CENTER TR_ENTER" x Azzerare" -#define TR_PPM_TRAINER "TR" -#define TR_CH "CH" -#define TR_MODEL "MODELLO" -#define TR_FP "FV" -#define TR_MIX "MIX" -#define TR_EEPROMLOWMEM "EEPROM quasi piena!" -#define TR_ALERT "\016ALERT" -#define TR_PRESSANYKEYTOSKIP "\010Premi un tasto" -#define TR_THROTTLENOTIDLE TR("Motore non in posiz.","Motore non in posizione") -#define TR_ALARMSDISABLED "Avvisi Disattivati!" -#define TR_PRESSANYKEY "\010Premi un tasto" -#define TR_BADEEPROMDATA "Dati corrotti!" -#define TR_BAD_RADIO_DATA "Bad Radio Data" -#define TR_EEPROMFORMATTING "Formatto EEPROM..." -#define TR_STORAGE_FORMAT "Storage Preparation" -#define TR_EEPROMOVERFLOW "EEPROM Piena" -#define TR_MENURADIOSETUP "CONFIGURATX" -#define TR_MENUDATEANDTIME "DATA E ORA" -#define TR_MENUTRAINER "MAESTRO/ALLIEVO" -#define TR_MENUGLOBALFUNCS "FUNZIONI GLOBALI" -#define TR_MENUVERSION "VERSIONE" -#define TR_MENUDIAG "DIAG" -#define TR_MENUANA "ANAS" -#define TR_MENUCALIBRATION "CALIBRAZIONE" -#if defined(COLORLCD) - #define TR_TRIMS2OFFSETS "Trims >> Subtrims" -#else - #define TR_TRIMS2OFFSETS "\006Trim => Offset " -#endif -#define TR_MENUMODELSEL "MODELLI" -#define TR_MENUSETUP "CONFIGURA" -#define TR_MENUFLIGHTPHASE "FASE DI VOLO" -#define TR_MENUFLIGHTPHASES "FASI DI VOLO" -#define TR_MENUHELISETUP "CONFIGURA ELI" - -#if defined(VIRTUALINPUTS) - #define TR_MENUINPUTS "INGRESSI" - #define TR_MENULIMITS "USCITE" -#else - #define TR_MENUINPUTS "DR/ESPO" - #define TR_MENULIMITS "LIMITI" -#endif - -#define TR_MENUCURVES "CURVE" -#define TR_MENUCURVE "CURVA" -#define TR_MENULOGICALSWITCH "INTER. PERSON." -#define TR_MENULOGICALSWITCHES TR("INTER. LOGICI","INTERRUTTORI LOGICI") -#define TR_MENUCUSTOMFUNC TR("FUNZ. SPECIALI","FUNZIONI SPECIALI") -#define TR_MENUCUSTOMSCRIPTS "SCRIPTS UTENTE" -#define TR_MENUTELEMETRY "TELEMETRIA" -#define TR_MENUTEMPLATES "ESEMPI GUIDA" -#define TR_MENUSTAT "STATO" -#define TR_MENUDEBUG "DEBUG" -#if defined(CPUARM) - #define TR_RXNUM TR(INDENT "RxNum", INDENT "Ricevente No.") -#else - #define TR_RXNUM "RxNum" -#endif -#define TR_SYNCMENU "[Sync]" -#define TR_LIMIT INDENT "Limiti" -#define TR_MINRSSI "Min Rssi" -#define TR_LATITUDE "Latitud." -#define TR_LONGITUDE "Longitud." -#define TR_GPSCOORD TR("GPS Coords", INDENT "Formato Coordinate") -#define TR_VARIO TR("Vario", "Variometro") -#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." -#define TR_CURRENT_CALIB "Calibra corr." -#define TR_VOLTAGE TR(INDENT "Voltagg.",INDENT "Voltaggio") -#define TR_CURRENT TR(INDENT "Corrente",INDENT "Corrente") -#define TR_SELECT_MODEL "Scegli Memo." -#define TR_CREATE_CATEGORY "Create Category" -#define TR_RENAME_CATEGORY "Rename Category" -#define TR_DELETE_CATEGORY "Delete Category" -#define TR_CREATE_MODEL "Crea Modello" -#define TR_DUPLICATE_MODEL "Duplicate Model" -#define TR_CHANGE_CATEGORY "Change category" -#define TR_COPY_MODEL "Copia Modello" -#define TR_MOVE_MODEL "Sposta Modello" -#define TR_BACKUP_MODEL "Salva Modello" -#define TR_DELETE_MODEL TR("Elim. Modello","Elimina Modello") // TODO merged into DELETEMODEL? -#define TR_RESTORE_MODEL TR("Ripr. Modello","Ripristina Modello") -#define TR_SDCARD_ERROR "Errore SD" -#define TR_NO_SDCARD "No SDCARD" -#define TR_SDCARD_FULL "SD Card Piena" -#define TR_INCOMPATIBLE "Incompatibile" -#define TR_WARNING "AVVISO" -#define TR_EEPROMWARN "EEPROM" -#define TR_STORAGE_WARNING "STORAGE" -#define TR_EEPROM_CONVERTING "Conversione EEPROM" -#define TR_THROTTLEWARN "MOTORE" -#define TR_ALARMSWARN "ALLARMI" -#define TR_SWITCHWARN "CONTROLLI" -#define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NO_FAILSAFE "Failsafe non settato" -#define TR_KEYSTUCK "Tasto bloccato" -#define TR_INVERT_THR "Inverti Mot?" -#define TR_SPEAKER_VOLUME "Volume Audio" -#define TR_LCD "LCD" -#define TR_BRIGHTNESS INDENT "Luminosità" -#define TR_CPU_TEMP "Temp CPU \016>" -#define TR_CPU_CURRENT "Corrente\022>" -#define TR_CPU_MAH "Consumo" -#define TR_COPROC "CoProc." -#define TR_COPROC_TEMP "Temp. MB \016>" -#define TR_CAPAWARNING INDENT "CapacitàLow" -#define TR_TEMPWARNING INDENT "Temp. Alta" -#define TR_FUNC "Funz" -#define TR_V1 "V1" -#define TR_V2 "V2" -#define TR_DURATION "Durata" -#define TR_DELAY "Ritardo" -#define TR_SD_CARD "SD Card" -#define TR_SDHC_CARD "SD-HC Card" -#define TR_NO_SOUNDS_ON_SD "No Suoni su SD" -#define TR_NO_MODELS_ON_SD "No Model. su SD" -#define TR_NO_BITMAPS_ON_SD "No Immag. su SD" -#define TR_NO_SCRIPTS_ON_SD "No Scripts su SD" -#define TR_SCRIPT_SYNTAX_ERROR "Script errore sintassi" -#define TR_SCRIPT_PANIC "Script panic" -#define TR_SCRIPT_KILLED "Script fermato" -#define TR_SCRIPT_ERROR "Errore sconosciuto" -#define TR_PLAY_FILE "Suona" -#define TR_DELETE_FILE "Elimina" -#define TR_COPY_FILE "Copia" -#define TR_RENAME_FILE "Rinomomina" -#define TR_ASSIGN_BITMAP "Assegna Immagine" -#define TR_EXECUTE_FILE "Esegui" -#define TR_REMOVED " rimosso" -#define TR_SD_INFO "Informazioni" -#define TR_SD_FORMAT "Format" -#define TR_NA "N/A" -#define TR_HARDWARE "HARDWARE" -#define TR_FORMATTING "Formattazione." -#define TR_TEMP_CALIB "Temp. Calib" -#define TR_TIME "Ora" -#define TR_BAUDRATE "BT Baudrate" -#define TR_SD_INFO_TITLE "SD INFO" -#define TR_SD_TYPE "Tipo:" -#define TR_SD_SPEED "Veloc.:" -#define TR_SD_SECTORS "Settori:" -#define TR_SD_SIZE "Dimens:" -#define TR_TYPE INDENT "Tipo" -#define TR_GLOBAL_VARS "Variabili Globali" -#define TR_GVARS "V.GLOBALI" -#define TR_GLOBAL_VAR "Variabile globale" -#define TR_MENUGLOBALVARS "VARIABILI GLOBALI" -#define TR_OWN "Fase" -#define TR_DATE "Data" -#define TR_ROTARY_ENCODER "R.Encs" -#define TR_CHANNELS_MONITOR "MONITOR CANALI" -#define TR_MIXERS_MONITOR "MONITOR MIXER" -#define TR_PATH_TOO_LONG "Path troppo lungo" -#define TR_VIEW_TEXT "Vedi testo" -#define TR_FLASH_BOOTLOADER "Flash BootLoader" -#define TR_FLASH_EXTERNAL_DEVICE "Progr. Dispositivo Esterno" -#define TR_FLASH_INTERNAL_MODULE "Progr. Modulo Interno" -#define TR_WRITING "\032Scrivendo..." -#define TR_CONFIRM_FORMAT "Confermi Format?" -#define TR_INTERNALRF "Modulo Interno" -#define TR_EXTERNALRF "Modulo esterno" -#define TR_FAILSAFE "Modo failsafe" -#define TR_FAILSAFESET TR("FAILSAFE","IMPOSTAZIONI FAILSAFE") -#define TR_MENUSENSOR "SENSOR" -#define TR_SENSOR "SENSOR" -#define TR_COUNTRYCODE TR("Codice Paese","Standard 2.4Ghz") -#define TR_VOICELANG "Lingua Voce" -#define TR_UNITSSYSTEM "Unità" -#define TR_EDIT "Modifica" -#define TR_INSERT_BEFORE "Inserisci prima" -#define TR_INSERT_AFTER "Inserisci dopo" -#define TR_COPY "Copia" -#define TR_MOVE "Sposta" -#define TR_PASTE "Incolla" -#define TR_DELETE "Elimina" -#define TR_INSERT TR("Inser.","Inserisci") -#define TR_RESET_FLIGHT "Azzera volo" -#define TR_RESET_TIMER1 "Azzera Timer1" -#define TR_RESET_TIMER2 "Azzera Timer2" -#define TR_RESET_TIMER3 "Azzera Timer3" -#define TR_RESET_TELEMETRY "Azzera Telemetria" -#define TR_STATISTICS "Statistiche" -#define TR_ABOUT_US "Info su" -#define TR_SETUP_SCREENS "Setup screens" -#define TR_AND_SWITCH "Inter. AND" -#define TR_SF "CF" -#define TR_GF "GF" -#define TR_SPEAKER INDENT"Speaker" -#define TR_BUZZER INDENT"Buzzer" -#define TR_BYTES "Bytes" -#define TR_MODULE_BIND "[Bind]" -#define TR_MODULE_RANGE "[Range]" -#define TR_RESET_BTN "[Reset]" -#define TR_SET "[Set]" -#define TR_TRAINER TR("Trainer","Maestro/Allievo") -#define TR_ANTENNAPROBLEM CENTER "Problemi antenna TX!" -#define TR_MODELIDUSED TR("ID già usato","ID Modello già usato") -#define TR_MODULE INDENT "Modulo" -#define TR_TELEMETRY_TYPE "Tipo Telemetria" -#define TR_TELEMETRY_SENSORS "Sensori" -#define TR_VALUE "Valore" -#define TR_TOPLCDTIMER "Timer LCD Sup." -#define TR_UNIT "Unita" -#define TR_TELEMETRY_NEWSENSOR INDENT "Aggiungi nuovo sensore..." -#define TR_CHANNELRANGE INDENT "Numero Canali" -#define TR_LOWALARM INDENT "Allarme Basso" -#define TR_CRITICALALARM INDENT "Allarme Critico" -#define TR_ENABLE_POPUP "Abilita Popup" -#define TR_DISABLE_POPUP "Disabilita Popup" -#define TR_POPUP "Popup" -#define TR_MIN "Min" -#define TR_MAX "Max" -#define TR_CURVE_PRESET "Preimpostate..." -#define TR_PRESET "Preimpostate" -#define TR_MIRROR "Mirror" -#define TR_CLEAR "Cancella" -#define TR_RESET "Azzera" -#define TR_RESET_SUBMENU "Azzera..." -#define TR_COUNT "Punti" -#define TR_PT "pt" -#define TR_PTS "pti" -#define TR_SMOOTH "Smussa" -#define TR_COPY_STICKS_TO_OFS "Copia Stick su Offset" -#define TR_COPY_TRIMS_TO_OFS "Copia Trim in Subtrim" -#define TR_INCDEC "Inc/Decrementa" -#define TR_GLOBALVAR "Var Globale" -#define TR_MIXSOURCE "Sorgente Mixer" -#define TR_CONSTANT "Constante" -#define TR_PERSISTENT_MAH INDENT "Memo mAh" -#define TR_PREFLIGHT "Controlli Prevolo" -#define TR_CHECKLIST INDENT "Mostra Checklist" -#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") -#define TR_UART3MODE "Porta Seriale" -#define TR_SCRIPT "Script" -#define TR_INPUTS "Ingresso" -#define TR_OUTPUTS "Uscita" -#define TR_EEBACKUP "\004[ENTER Lungo] per copiare la EEPROM" -#define TR_FACTORYRESET "\012[MENU Lungo]: Inizializza dati" -#define TR_CONFIRMRESET "Resettare TUTTI i dati?" -#define TR_TO_MANY_LUA_SCRIPTS "Troppi Scripts Lua!" - -#if defined(MAVLINK) - #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" - #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" - #define TR_MAVMENUSETUP_TITLE "Setta Mavlink" - #define TR_MAVLINK_BAUD_LABEL "Baudrate" - #define TR_MAVLINK_INFOS "INFOS" - #define TR_MAVLINK_MODE "MODO" - #define TR_MAVLINK_CUR_MODE "Modo Corrente" - #define TR_MAVLINK_ARMED "Armato" - #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" - #define TR_MAVLINK_BATTERY_LABEL "Stato batteria di volo" - #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" - #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" - #define TR_MAVLINK_NAV_MENU_TITLE "NAV" - #define TR_MAVLINK_COURSE "Course" - #define TR_MAVLINK_HEADING "Heading" - #define TR_MAVLINK_BEARING "Bearing" - #define TR_MAVLINK_ALTITUDE "Altitudine" - #define TR_MAVLINK_GPS "GPS" - #define TR_MAVLINK_NO_FIX "NO Fix" - #define TR_MAVLINK_SAT "SAT" - #define TR_MAVLINK_HDOP "HDOP" - #define TR_MAVLINK_LAT "LAT" - #define TR_MAVLINK_LON "LON" -#endif - -// Taranis column headers -#define TR_PHASES_HEADERS { " Nome ", " Inter. ", " Trim Deriva ", " Trim Elevator ", " Trim Motore ", " Trim Alettoni ", " Disolv. In ", " Dissolv. Out " } -#define TR_LIMITS_HEADERS { " Nome ", " Offset ", " Min ", " Max ", " Direzione ", " Curve ", " Centro PPM ", " Simmetria " } -#define TR_CSW_HEADERS { " Funzione ", " V1 ", " V2 ", " V2 ", " Inter. AND ", " Durata ", " Ritardo " } - -// About screen -#define TR_ABOUTUS TR(" INFO ", "INFO SU") - -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001e'\001open\001source,\001non", "OpenTX e' open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commerciale, fornito senza") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "garanzie. E' stato sviluppato") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "gratuitamente. Il supporto") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "mediante donazioni e' gradito!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Autore principale OpenTX" -#define TR_ABOUT_BERTRAND_3 "Co-autore Companion9x" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Guru codice e driver" -#define TR_ABOUT_MIKE_3 "esperto a basso livello" -#define TR_ABOUT_MIKE_4 "Ispiratore" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Autore Companion9x" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funzionalità, usabilità," -#define TR_ABOUT_ANDRE_3 "debugging, documentazione" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster openrcforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphic Designer" - -#if defined(PCBTARANIS) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #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" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Progetti correlati" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - -#define TR_CHR_SHORT 's' -#define TR_CHR_LONG 'l' -#define TR_CHR_TOGGLE 't' -#define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work - -#define TR_BEEP_VOLUME "Volume Beep" -#define TR_WAV_VOLUME "Volume Wav" -#define TR_VARIO_VOLUME "Volume Vario" -#define TR_BG_VOLUME "Volume Sf" - -#define TR_TOP_BAR "Barra sup." -#define TR_ALTITUDE INDENT "Altitudine" -#define TR_SCALE "Scala" -#define TR_VIEW_CHANNELS "Vedi Canali" -#define TR_VIEW_NOTES "Vedi Note" -#define TR_MODEL_SELECT "Model Select" -#define TR_MODS_FORBIDDEN "Modifica proibita!" -#define TR_UNLOCKED "Sbloccato" -#define TR_ID "ID" -#define TR_PRECISION "Precisione" -#define TR_RATIO "Ratio" -#define TR_FORMULA "Formula" -#define TR_CELLINDEX "Indice cella" -#define TR_LOGS "Logs" -#define TR_OPTIONS "Opzioni" - -#define TR_ALTSENSOR "Sensore Alt" -#define TR_CELLSENSOR "Sensore Cell" -#define TR_GPSSENSOR "Sensore GPS" -#define TR_CURRENTSENSOR "Sensore" -#define TR_AUTOOFFSET "Auto Offset" -#define TR_ONLYPOSITIVE "Positivo" -#define TR_FILTER "Filtro" -#define TR_TELEMETRYFULL "Tutti gli slot sono pieni!" -//TODO: translation -#define TR_INVERTED_SERIAL INDENT "Invert" -#define TR_IGNORE_INSTANCE TR(INDENT "No inst.","Ignora instanza") -#define TR_DISCOVER_SENSORS INDENT "Cerca nuovi sensori" -#define TR_STOP_DISCOVER_SENSORS INDENT "Ferma ricerca.." -#define TR_DELETE_ALL_SENSORS INDENT "Elimina tutti i sensori" -#define TR_CONFIRMDELETE "Confermi eliminazione?" -#define TR_SELECT_WIDGET "Select widget" -#define TR_REMOVE_WIDGET "Remove widget" -#define TR_WIDGET_SETTINGS "Widget settings" -#define TR_REMOVE_SCREEN "Remove screen" - -#define TR_MENU_INPUTS "\314Ingressi" -#define TR_MENU_LUA "\322Lua scripts" -#define TR_MENU_STICKS "\307Sticks" -#define TR_MENU_POTS "\310Pots" -#define TR_MENU_MAX "\315MAX" -#define TR_MENU_HELI "\316Ciclico" -#define TR_MENU_TRIMS "\313Trims" -#define TR_MENU_SWITCHES "\312Interrut." -#define TR_MENU_LOGICAL_SWITCHES "\312Interrut. Logici" -#define TR_MENU_TRAINER "\317Trainer" -#define TR_MENU_CHANNELS "\320Canali" -#define TR_MENU_GVARS "\311GVars" -#define TR_MENU_TELEMETRY "\321Telemetry" -#define TR_MENU_OTHER "Altro" -#define TR_MENU_INVERT "Inverti" - -#define ZSTR_RSSI "RSSI" -#define ZSTR_SWR "SWR" -#define ZSTR_A1 "A1" -#define ZSTR_A2 "A2" -#define ZSTR_A3 "A3" -#define ZSTR_A4 "A4" -#define ZSTR_BATT "RxBt" -#define ZSTR_ALT "Alt" -#define ZSTR_TEMP1 "Tmp1" -#define ZSTR_TEMP2 "Tmp2" -#define ZSTR_RPM "RPM" -#define ZSTR_FUEL "Fuel" -#define ZSTR_VSPD "VSpd" -#define ZSTR_ACCX "AccX" -#define ZSTR_ACCY "AccY" -#define ZSTR_ACCZ "AccZ" -#define ZSTR_CURR "Curr" -#define ZSTR_VFAS "VFAS" -#define ZSTR_ASPD "ASpd" -#define ZSTR_GSPD "GSpd" -#define ZSTR_HDG "Hdg" -#define ZSTR_CELLS "Cels" -#define ZSTR_GPSALT "GAlt" -#define ZSTR_GPSDATETIME "Data" -#define ZSTR_GPS "GPS" -#define ZSTR_BATT1_VOLTAGE "RB1V" -#define ZSTR_BATT2_VOLTAGE "RB2V" -#define ZSTR_BATT1_CURRENT "RB1A" -#define ZSTR_BATT2_CURRENT "RB2A" -#define ZSTR_BATT1_CONSUMPTION "RB1C" -#define ZSTR_BATT2_CONSUMPTION "RB2C" -#define ZSTR_RB_STATE "RBS" -#define ZSTR_CHANS_STATE "RBCS" +/* + * 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. + * + */ + +// IT translations author: Romolo Manfredini + +/* + * !!!!! DO NOT EDIT it.h - EDIT it.h.txt INSTEAD !!!!!!! + * + * In order to make translations easier it.h.txt is parsed and national + * characters are replaced by bitmap codes. The result is it.h. + * + * See translate.py in the util folder for the list of character codes + * + * !!!!! DO NOT EDIT it.h - EDIT it.h.txt INSTEAD !!!!!!! + */ + +/* + * Formatting octal codes available in TR_ strings: + * \037\x -sets LCD x-coord (x value in octal) + * \036 -newline + * \035 -horizontal tab (ARM only) + * \001 to \034 -extended spacing (value * FW/2) + * \0 -ends current string + */ + + +// NON ZERO TERMINATED STRINGS +#define LEN_OFFON "\003" +#define TR_OFFON "OFF""ON\0" + +#define LEN_MMMINV "\003" +#define TR_MMMINV "---""INV" + +#define LEN_NCHANNELS "\004" +#define TR_NCHANNELS "\0014CH\0016CH\0018CH10CH12CH14CH16CH" + +#define LEN_VBEEPMODE TR("\005", "\010") +#define TR_VBEEPMODE TR("Silen""Avvis""Notst""Tutti","Silente ""Avvisi\0 ""No Tasti""Tutti\0 ") + +#define LEN_VBEEPLEN "\005" +#define TR_VBEEPLEN "+Cort""Corta""Media""Lunga""+Lung" + +#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") + +#define LEN_TRNMODE "\003" +#define TR_TRNMODE "off"" +="" :=" + +#define LEN_TRNCHN "\003" +#define TR_TRNCHN "ch1ch2ch3ch4" + +#define LEN_UART3MODES "\016" +#define TR_UART3MODES "OFF\0 ""Replica S-Port""Telemetria\0 ""SBUS Trainer\0 ""Debug\0" + +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + +#define LEN_POTTYPES "\017" +#define TR_POTTYPES "None\0 ""Pot. con centro""Inter. Multipos""Potenziometro\0 " + +#define LEN_SLIDERTYPES "\006" +#define TR_SLIDERTYPES "Niente""Slider" + +#define LEN_DATETIME "\005" +#define TR_DATETIME "DATA:""ORA :" + +#define LEN_VLCD "\006" +#define TR_VLCD "NormalOptrex" + +#define LEN_VPERSISTENT "\015" +#define TR_VPERSISTENT "NO\0 ""Volo\0 ""Reset Manuale" + +#define LEN_COUNTRYCODES TR("\002", "\007") +#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europa\0") + +#define LEN_TARANIS_PROTOCOLS "\004" +#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF" + +#define LEN_XJT_PROTOCOLS "\004" +#define TR_XJT_PROTOCOLS "OFF\0""D16\0""D8\0 ""LR12" + +#define LEN_DSM_PROTOCOLS "\004" +#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" + +#define LEN_VTRIMINC "\006" +#define TR_VTRIMINC "Exp ""ExFine""Fine ""Medio ""Ampio " + +#define LEN_VDISPLAYTRIMS "\006" +#define TR_VDISPLAYTRIMS "No\0 ""Cambio""Si\0 " + +#define LEN_VBEEPCOUNTDOWN "\006" +#define TR_VBEEPCOUNTDOWN "NienteSuoni\0Voce\0 Vibra\0" + +#define LEN_VVARIOCENTER "\006" +#define TR_VVARIOCENTER "Tono\0 ""Silent" + +#define LEN_CURVE_TYPES "\010" +#define TR_CURVE_TYPES "Fisso\0 ""Modific." + +#define LEN_RETA123 "\001" + +#if defined(PCBHORUS) + #define TR_RETA123 "DEMA12345LR" +#elif defined(PCBFLAMENCO) + #define TR_RETA123 "DEMA123LR" +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_RETA123 "DEMA123SDSD" +#elif defined(PCBTARANIS) || defined(REVX) + #define TR_RETA123 "DEMA123SD" +#elif defined(PCBSKY9X) + #define TR_RETA123 "DEMA123a" +#elif defined(CPUM2560) + #define TR_RETA123 "DEMA123ab" +#else + #define TR_RETA123 "DEMA123" +#endif + +#define LEN_VPROTOS "\006" + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" +#else + #define TR_PXX +#endif + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" +#else + #define TR_DSM2 +#endif + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" +#else + #define TR_IRPROTOS +#endif + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS + +#define LEN_POSNEG "\003" +#define TR_POSNEG "POS""NEG" + +#if defined(PCBSKY9X) && defined(REVX) + #define LEN_VOUTPUT_TYPE "\011" + #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" +#endif + +#define LEN_VCURVEFUNC "\003" +#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" + +#define LEN_VMLTPX "\005" +#define TR_VMLTPX "Add. ""Molt.""Sost." + +#define LEN_VMLTPX2 "\002" +#define TR_VMLTPX2 "+=""*="":=" + +#define LEN_VMIXTRIMS "\003" +#define TR_VMIXTRIMS "OFF""ON ""Dir""Ele""Mot""Ale" + +#if LCD_W >= 212 + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Campo" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + +#if defined(CPUARM) + #define TR_CSWEQUAL "a=x\0 " +#else + #define TR_CSWEQUAL +#endif + +#define LEN_VCSWFUNC "\005" +#if defined(CPUARM) +#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 + #define TR_SF_SAFETY "Blocco\0 " +#elif defined(OVERRIDE_CHANNEL_FUNCTION) + #define TR_SF_SAFETY "Blocco\0 " +#else + #define TR_SF_SAFETY "---\0 " +#endif + +#if defined(PCBTARANIS) + #define TR_SF_SCREENSHOT "Screenshot\0 " +#else + #define TR_SF_SCREENSHOT +#endif + +#define TR_SF_RESERVE "[riserva] \0" + +#if defined(CPUARM) + #define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_SCREENSHOT TR_SF_TEST +#elif defined(PCBGRUVIN9X) + #define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_TEST +#else + #define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "Retroillum.\0 " TR_SF_TEST +#endif + +#define LEN_VFSWRESET TR("\004", "\011") + +#if defined(FRSKY) + #define TR_FSW_RESET_TELEM TR("Telm", "Telemetr.") +#else + #define TR_FSW_RESET_TELEM +#endif + +#if ROTARY_ENCODERS == 2 + #define TR_FSW_RESET_ROTENC TR("REa\0""REb\0", "EncRot A\0""EncRot B\0") +#elif ROTARY_ENCODERS == 1 + #define TR_FSW_RESET_ROTENC TR("R.E.", "EncRot\0 ") +#else + #define TR_FSW_RESET_ROTENC +#endif + +#if LCD_W >= 212 + #define TR_FSW_RESET_TIMERS "Timer 1\0 ""Timer 2\0 ""Timer 3\0 " +#elif defined(CPUARM) + #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2""Tmr3" +#else + #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2" +#endif + +#define TR_VFSWRESET TR(TR_FSW_RESET_TIMERS "All\0" TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC, TR_FSW_RESET_TIMERS "Tutto\0 " TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC) + +#define LEN_FUNCSOUNDS TR("\004", "\006") +#define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Beep1 ""Beep2 ""Beep3 ""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") + +#define LEN_VTELEMCHNS TR("\004", "\005") + +#if defined(CPUARM) + #define TR_TELEM_RESERVE TR("[--]", "[---]") + #define TR_TELEM_TIME TR("Ora\0", "Ora\0 ") + #define TR_SWR TR("SWR\0", "SWR\0 ") + #define TR_RX_BATT TR("RxBt", "BatRx") + #define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ") + #define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ") +#else + #define TR_TELEM_RESERVE + #define TR_TELEM_TIME + #define TR_SWR + #define TR_RX_BATT + #define TR_A3_A4 + #define TR_A3_A4_MIN +#endif + +#define TR_ASPD_MAX TR("ASp+", "ASpd+") + +#if LCD_W >= 212 + #define TR_TELEM_RSSI_RX "RSSI\0" +#else + #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") +#endif + +#if defined(CPUARM) + #define TR_TELEM_TIMERS TR("Tmr1""Tmr2""Tmr3", "Tmr1\0""Tmr2\0""Tmr3\0") +#else + #define TR_TELEM_TIMERS TR("Tmr1""Tmr2", "Tmr1\0""Tmr2\0") +#endif + +#if LCD_W >= 212 + #define TR_VTELEMCHNS "---\0 ""Batt\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Celle""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Ora\0 " +#else + #define TR_VTELEMCHNS "---\0""Batt" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Ora\0" +#endif + +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + +#if defined(CPUARM) + #define LEN_VUNITSSYSTEM TR("\006", "\011") + #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metriche\0""Imperiali") + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" +#else + #if defined(IMPERIAL_UNITS) + #define LENGTH_UNIT LENGTH_UNIT_IMP + #define SPEED_UNIT SPEED_UNIT_IMP + #else + #define LENGTH_UNIT LENGTH_UNIT_METR + #define SPEED_UNIT SPEED_UNIT_METR + #endif + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " +#endif + +#define STR_V (STR_VTELEMUNIT+1) +#define STR_A (STR_VTELEMUNIT+4) + +#define LEN_VALARM "\003" +#define TR_VALARM "---""Gia""Ara""Ros" + +#define LEN_VALARMFN "\001" +#define TR_VALARMFN "<>" + +#define LEN_VTELPROTO "\007" +#define TR_VTELPROTO "---\0 ""Hub\0 ""WSHHigh" + +#if defined(CPUARM) + #define LEN_AMPSRC TR("\003", "\007") + #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Celle\0 ") + #define LEN_VOLTSRC TR("\003", "\007") + #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Celle\0 ") +#else + #define LEN_AMPSRC TR("\003", "\007") + #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Celle\0 ") +#endif + +#define LEN_VARIOSRC "\005" +#if defined(FRSKY_SPORT) + #define TR_VARIOSRC "Vario""A1\0 ""A2\0" +#else + #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" +#endif + +#if defined(CPUARM) + #define LEN_VTELEMSCREENTYPE "\006" + #define TR_VTELEMSCREENTYPE "Niente""Valori""Barre\0""Script" +#else + #define LEN_VTELEMSCREENTYPE "\006" + #define TR_VTELEMSCREENTYPE "Valori""Barre\0" +#endif + +#define LEN_GPSFORMAT "\004" +#define TR_GPSFORMAT "HMS NMEA" + +#define LEN2_VTEMPLATES 13 +#define LEN_VTEMPLATES "\015" +#define TR_VTEMPLATES "Canc. Mixer\0 ""Semplice 4CH\0""Sticky-T-Cut\0""Coda-V \0""Elevoni\0 ""Delta\0 ""eCCPM\0 ""Setup Heli\0 ""Test Servo\0 " + +#define LEN_VSWASHTYPE "\004" +#define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" + +#define LEN_VKEYS "\005" +#define TR_VKEYS TR("Menù\0""EXIT\0""DN\0 ""UP\0 ""SX\0 ""DX\0 ", "Menu\0""Esci\0""Enter""Pag.\0""Più\0 ""Meno") + +#define LEN_VRENCODERS "\003" +#define TR_VRENCODERS "REa""REb" + +#define LEN_VSWITCHES "\003" +#define LEN_VSRCRAW "\004" + +#define TR_STICKS_VSRCRAW TR("Dir\0""Ele\0""Mot\0""Ale\0", "\307Dir""\307Ele""\307Mot""\307Ale") +#define TR_TRIMS_VSRCRAW TR("TrmR""TrmE""TrmT""TrmA", "\313Dir""\313Ele""\313Mot""\313Ale") + +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#else + #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " + #define TR_SW_VSRCRAW "3POS" + #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" +#endif + +#if defined(CPUARM) + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" +#else + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" +#endif + +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") + +#if defined(PCBSKY9X) + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" +#else + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if !defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#define TR_ON_ONE_SWITCHES "ON\0""One" + +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) + // only special switches here + #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES +#endif + +#if defined(HELI) +#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" +#else +#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" +#endif + +#if defined(CPUARM) + #define TR_RESERVE_VSRCRAW "[--]" + #define TR_EXTRA_VSRCRAW "Batt""Time" TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW "Tmr1""Tmr2""Tmr3" +#else + #define TR_EXTRA_VSRCRAW +#endif + +#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW + +#define LEN_VTMRMODES "\003" +#define TR_VTMRMODES "OFF""ABS""MOs""MO%""MOt" + +#define LEN_VTRAINERMODES "\022" +#define TR_VTRAINERMODES "Maestro/Jack\0 ""Allievo/Jack\0 ""Master/Modulo SBUS""Master/Modulo CPPM""Master/Batteria\0 " + +#define LEN_VFAILSAFE "\013" +#define TR_VFAILSAFE "Non settato""Mantieni\0 ""Personali\0 ""No impulsi\0""Ricevente\0 " + +#if defined(MAVLINK) + #define LEN_MAVLINK_BAUDS "\006" + #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" + #define LEN_MAVLINK_AC_MODES "\011" + #define TR_MAVLINK_AC_MODES "Stabilize""Acro ""Alt Hold ""Auto ""Guided ""Loiter ""RTL ""Circle ""Pos Hold ""Land ""OF Loiter""Toy A ""Toy M ""INVALID " + #define LEN_MAVLINK_AP_MODES "\015" + #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Inizializza ""INVALID " +#endif + +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calcolato\0" + +#define LEN_VFORMULAS "\011" +#define TR_VFORMULAS "Somma\0 ""Media\0 ""Min\0 ""Max\0 ""Moltipl\0 ""Totalizza""Cella\0 ""Consumo\0 ""Distanza\0" + +#define LEN_VPREC "\004" +#define TR_VPREC "0.--""0.0 ""0.00" + +#define LEN_VCELLINDEX "\010" +#define TR_VCELLINDEX "Minore\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Maggiore""Delta\0" + +// ZERO TERMINATED STRINGS +#if defined(COLORLCD) + #define INDENT "\007" + #define LEN_INDENT 1 + #define INDENT_WIDTH 12 + #define BREAKSPACE "\036" +#else + #define INDENT "\001" + #define LEN_INDENT 1 + #define INDENT_WIDTH (FW/2) + #define BREAKSPACE " " +#endif + +#if defined(PCBTARANIS) + #define TR_ENTER "[ENTER]" +#else + #define TR_ENTER "[Menù]" +#endif + +#define TR_EXIT "[EXIT]" + +#if defined(PCBTARANIS) + #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER +#else + #define TR_POPUPS TR_ENTER "\010" TR_EXIT + #define OFS_EXIT sizeof(TR_ENTER) +#endif + +#define TR_MENUWHENDONE CENTER "\007" TR_ENTER " Conferma" +#define TR_FREE "disp" +#define TR_DELETEMODEL "Elimina modello?" +#define TR_COPYINGMODEL "Copia in corso.." +#define TR_MOVINGMODEL "Spostamento..." +#define TR_LOADINGMODEL "Caricamento..." +#define TR_NAME "Nome" +#define TR_MODELNAME "Nome modello" +#define TR_PHASENAME "Nome fase" +#define TR_MIXNAME "Nome mix" +#define TR_INPUTNAME "Nome Ingr." +#if defined(VIRTUALINPUTS) + #define TR_EXPONAME "Nome expo" +#else + #define TR_EXPONAME "Nome Expo" +#endif +#define TR_BITMAP "Immagine" +#define TR_TIMER TR("Timer","Timer ") +#define TR_ELIMITS TR("Limiti.E","Limiti Estesi") +#define TR_ETRIMS TR("Trim Ext","Trim Estesi") +#define TR_TRIMINC "Passo Trim" +#define TR_DISPLAY_TRIMS "Mostra Trims" +#define TR_TTRACE TR("T-Source", INDENT "Sorgente Motore") +#define TR_TTRIM TR("T-Trim", INDENT "Trim Motore") +#define TR_BEEPCTR TR("Ctr Beep","Beep al centro") +#define TR_USE_GLOBAL_FUNCS "Usa Funz Globali" +#if defined(PCBSKY9X) && defined(REVX) + #define TR_OUTPUT_TYPE INDENT "Output" +#endif +#define TR_PROTO TR(INDENT "Proto", INDENT "Protocollo") +#if defined(CPUARM) + #define TR_PPMFRAME INDENT "PPM frame" +#else + #define TR_PPMFRAME "PPM frame" +#endif +#define TR_MS "ms" +#define TR_SWITCH "Inter." +#define TR_TRIMS "Trims" +#define TR_FADEIN "Diss.In" +#define TR_FADEOUT "Diss.Out" +#define TR_DEFAULT "(Predefinita)" +#define TR_CHECKTRIMS CENTER "\006Check\012Trims" +#define OFS_CHECKTRIMS CENTER_OFS+(9*FW) +#define TR_SWASHTYPE "Tipo Ciclico" +#define TR_COLLECTIVE TR("Collettivo","Origine Collettivo") +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" +#define TR_SWASHRING "Anello Ciclico" +#define TR_ELEDIRECTION TR("Direzione ELE","Direzione Long. cyc.") +#define TR_AILDIRECTION TR("Direzione AIL","Direzione Lateral cyc.") +#define TR_COLDIRECTION TR("Direzione PIT","Direzione Coll. Passo") +#define TR_MODE INDENT"Modo" +#define TR_NOFREEEXPO "Expo pieni!" +#define TR_NOFREEMIXER "Mixer pieni!" +#define TR_SOURCE INDENT"Sorg." +#define TR_WEIGHT "Peso" +#define TR_EXPO "Espo" +#define TR_SIDE "Lato" +#define TR_DIFFERENTIAL "Differ" +#define TR_OFFSET INDENT"Offset" +#define TR_TRIM "Trim" +#define TR_DREX "DRex" +#define DREX_CHBOX_OFFSET 30 +#define TR_CURVE "Curva" +#define TR_FLMODE "Fase" +#define TR_MIXWARNING "Avviso" +#define TR_OFF "OFF" +#define TR_MULTPX "MultPx" +#define TR_DELAYDOWN "Post.Giù " +#define TR_DELAYUP "Post.Sù" +#define TR_SLOWDOWN "Rall.Giù " +#define TR_SLOWUP "Rall.Sù" +#define TR_MIXER "MIXER" +#define TR_CV "CV" +#define TR_GV "GV" +#define TR_ACHANNEL "A\002ingresso" +#define TR_RANGE TR(INDENT"Inter.", INDENT"Intervallo") +#define TR_CENTER INDENT "Centro" +#define TR_BAR "Barra" +#define TR_ALARM TR(INDENT"Allar.", INDENT"Allarme") +#define TR_USRDATA "Dati" +#define TR_BLADES INDENT"Pale" +#define TR_SCREEN "Schermo " +#define TR_SOUND_LABEL "Suono" +#define TR_LENGTH INDENT"Durata" +#define TR_BEEP_LENGTH INDENT "Lung. Beep" +#define TR_SPKRPITCH INDENT"Tono" +#define TR_HAPTIC_LABEL "Vibraz" +#define TR_HAPTICSTRENGTH INDENT"Forza" +#define TR_CONTRAST "Contrasto" +#define TR_ALARMS_LABEL "Allarmi" +#define TR_BATTERY_RANGE TR("Interv. Batt", "Intervallo batteria") +#define TR_BATTERYWARNING INDENT"Avviso batteria" +#define TR_INACTIVITYALARM INDENT"Inattivita'" +#define TR_MEMORYWARNING INDENT"Avviso memoria" +#define TR_ALARMWARNING INDENT"Spegni suono" +#define TR_RENAVIG "Navig EncRot " +#define TR_THROTTLE_LABEL "Motore" +#define TR_THROTTLEREVERSE TR("Mot inv.", INDENT "Motore Inverso") +#define TR_TIMER_NAME INDENT "Nome" +#define TR_MINUTEBEEP INDENT"Minuto" +#define TR_BEEPCOUNTDOWN TR(INDENT"Conto rov", INDENT"Conto rovescia") +#define TR_PERSISTENT TR(INDENT"Persist.", INDENT"Persistente") +#define TR_BACKLIGHT_LABEL TR("Retroillum.", "Retroilluminazione") +#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_BLCOLOR INDENT "Colore" +#define TR_SPLASHSCREEN TR("Schermo avvio", "Schermata di avvio") +#define TR_THROTTLEWARNING TR("All. Mot.", INDENT "Allarme Motore") +#define TR_SWITCHWARNING TR("Avv. Int.", INDENT "Avviso Interr.") +#define TR_POTWARNING TR("Avv. Pot.", INDENT "Avviso Pot.") +#define TR_TIMEZONE "Ora locale" +#define TR_ADJUST_RTC INDENT "Aggiusta RTC" +#define TR_GPS "GPS" +#define TR_RXCHANNELORD "Ordine ch RX" +#define TR_STICKS "Sticks" +#define TR_POTS "Pot." +#define TR_SWITCHES "Interutt." +#define TR_SWITCHES_DELAY "Ritardo voce FV" +#define TR_SLAVE "Allievo" +#define TR_MODESRC "Modo\006% Origine" +#define TR_MULTIPLIER "Moltiplica" +#define TR_CAL "Cal" +#define TR_VTRIM "Trim- +" +#define TR_BG "BG:" +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) + #define TR_MENUTOSTART TR_ENTER " TO START" + #define TR_SETMIDPOINT "CENTRA STICKS/SLIDERS" + #define TR_MOVESTICKSPOTS "MUOVI STICKS/POTS" +#else + #define TR_MENUTOSTART CENTER"\011" TR_ENTER " per Cal." + #define TR_SETMIDPOINT CENTER"\012SETTA CENTRO" + #define TR_MOVESTICKSPOTS CENTER"\010MUOVI STICK/POT" +#endif +#define TR_RXBATT "Batt Rx:" +#define TR_TXnRX "Tx:\0Rx:" +#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" +#define STR_US (STR_TMR1LATMAXUS+13) +#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" +#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" + +#if defined(CPUARM) + #define TR_TMIXMAXMS "Tmix max" + #define TR_FREESTACKMINB "Free Stack" +#else + #define TR_TMIXMAXMS "Tmix max\037\124ms" + #define TR_FREESTACKMINB "Free Stack\037\124b" +#endif + +#define TR_MENUTORESET CENTER TR_ENTER" x Azzerare" +#define TR_PPM_TRAINER "TR" +#define TR_CH "CH" +#define TR_MODEL "MODELLO" +#define TR_FP "FV" +#define TR_MIX "MIX" +#define TR_EEPROMLOWMEM "EEPROM quasi piena!" +#define TR_ALERT "\016ALERT" +#define TR_PRESSANYKEYTOSKIP "\010Premi un tasto" +#define TR_THROTTLENOTIDLE TR("Motore non in posiz.","Motore non in posizione") +#define TR_ALARMSDISABLED "Avvisi Disattivati!" +#define TR_PRESSANYKEY "\010Premi un tasto" +#define TR_BADEEPROMDATA "Dati corrotti!" +#define TR_BAD_RADIO_DATA "Bad Radio Data" +#define TR_EEPROMFORMATTING "Formatto EEPROM..." +#define TR_STORAGE_FORMAT "Storage Preparation" +#define TR_EEPROMOVERFLOW "EEPROM Piena" +#define TR_MENURADIOSETUP "CONFIGURATX" +#define TR_MENUDATEANDTIME "DATA E ORA" +#define TR_MENUTRAINER "MAESTRO/ALLIEVO" +#define TR_MENUGLOBALFUNCS "FUNZIONI GLOBALI" +#define TR_MENUVERSION "VERSIONE" +#define TR_MENUDIAG "DIAG" +#define TR_MENUANA "ANAS" +#define TR_MENUCALIBRATION "CALIBRAZIONE" +#if defined(COLORLCD) + #define TR_TRIMS2OFFSETS "Trims >> Subtrims" +#else + #define TR_TRIMS2OFFSETS "\006Trim => Offset " +#endif +#define TR_MENUMODELSEL "MODELLI" +#define TR_MENUSETUP "CONFIGURA" +#define TR_MENUFLIGHTPHASE "FASE DI VOLO" +#define TR_MENUFLIGHTPHASES "FASI DI VOLO" +#define TR_MENUHELISETUP "CONFIGURA ELI" + +#if defined(VIRTUALINPUTS) + #define TR_MENUINPUTS "INGRESSI" + #define TR_MENULIMITS "USCITE" +#else + #define TR_MENUINPUTS "DR/ESPO" + #define TR_MENULIMITS "LIMITI" +#endif + +#define TR_MENUCURVES "CURVE" +#define TR_MENUCURVE "CURVA" +#define TR_MENULOGICALSWITCH "INTER. PERSON." +#define TR_MENULOGICALSWITCHES TR("INTER. LOGICI","INTERRUTTORI LOGICI") +#define TR_MENUCUSTOMFUNC TR("FUNZ. SPECIALI","FUNZIONI SPECIALI") +#define TR_MENUCUSTOMSCRIPTS "SCRIPTS UTENTE" +#define TR_MENUTELEMETRY "TELEMETRIA" +#define TR_MENUTEMPLATES "ESEMPI GUIDA" +#define TR_MENUSTAT "STATO" +#define TR_MENUDEBUG "DEBUG" +#if defined(CPUARM) + #define TR_RXNUM TR(INDENT "RxNum", INDENT "Ricevente No.") +#else + #define TR_RXNUM "RxNum" +#endif +#define TR_SYNCMENU "[Sync]" +#define TR_LIMIT INDENT "Limiti" +#define TR_MINRSSI "Min Rssi" +#define TR_LATITUDE "Latitud." +#define TR_LONGITUDE "Longitud." +#define TR_GPSCOORD TR("GPS Coords", INDENT "Formato Coordinate") +#define TR_VARIO TR("Vario", "Variometro") +#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." +#define TR_CURRENT_CALIB "Calibra corr." +#define TR_VOLTAGE TR(INDENT "Voltagg.",INDENT "Voltaggio") +#define TR_CURRENT TR(INDENT "Corrente",INDENT "Corrente") +#define TR_SELECT_MODEL "Scegli Memo." +#define TR_CREATE_CATEGORY "Create Category" +#define TR_RENAME_CATEGORY "Rename Category" +#define TR_DELETE_CATEGORY "Delete Category" +#define TR_CREATE_MODEL "Crea Modello" +#define TR_DUPLICATE_MODEL "Duplicate Model" +#define TR_CHANGE_CATEGORY "Change category" +#define TR_COPY_MODEL "Copia Modello" +#define TR_MOVE_MODEL "Sposta Modello" +#define TR_BACKUP_MODEL "Salva Modello" +#define TR_DELETE_MODEL TR("Elim. Modello","Elimina Modello") // TODO merged into DELETEMODEL? +#define TR_RESTORE_MODEL TR("Ripr. Modello","Ripristina Modello") +#define TR_SDCARD_ERROR "Errore SD" +#define TR_NO_SDCARD "No SDCARD" +#define TR_SDCARD_FULL "SD Card Piena" +#define TR_INCOMPATIBLE "Incompatibile" +#define TR_WARNING "AVVISO" +#define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" +#define TR_EEPROM_CONVERTING "Conversione EEPROM" +#define TR_THROTTLEWARN "MOTORE" +#define TR_ALARMSWARN "ALLARMI" +#define TR_SWITCHWARN "CONTROLLI" +#define TR_FAILSAFEWARN "FAILSAFE" +#define TR_NO_FAILSAFE "Failsafe non settato" +#define TR_KEYSTUCK "Tasto bloccato" +#define TR_INVERT_THR "Inverti Mot?" +#define TR_SPEAKER_VOLUME "Volume Audio" +#define TR_LCD "LCD" +#define TR_BRIGHTNESS INDENT "Luminosità" +#define TR_CPU_TEMP "Temp CPU \016>" +#define TR_CPU_CURRENT "Corrente\022>" +#define TR_CPU_MAH "Consumo" +#define TR_COPROC "CoProc." +#define TR_COPROC_TEMP "Temp. MB \016>" +#define TR_CAPAWARNING INDENT "CapacitàLow" +#define TR_TEMPWARNING INDENT "Temp. Alta" +#define TR_FUNC "Funz" +#define TR_V1 "V1" +#define TR_V2 "V2" +#define TR_DURATION "Durata" +#define TR_DELAY "Ritardo" +#define TR_SD_CARD "SD Card" +#define TR_SDHC_CARD "SD-HC Card" +#define TR_NO_SOUNDS_ON_SD "No Suoni su SD" +#define TR_NO_MODELS_ON_SD "No Model. su SD" +#define TR_NO_BITMAPS_ON_SD "No Immag. su SD" +#define TR_NO_SCRIPTS_ON_SD "No Scripts su SD" +#define TR_SCRIPT_SYNTAX_ERROR "Script errore sintassi" +#define TR_SCRIPT_PANIC "Script panic" +#define TR_SCRIPT_KILLED "Script fermato" +#define TR_SCRIPT_ERROR "Errore sconosciuto" +#define TR_PLAY_FILE "Suona" +#define TR_DELETE_FILE "Elimina" +#define TR_COPY_FILE "Copia" +#define TR_RENAME_FILE "Rinomomina" +#define TR_ASSIGN_BITMAP "Assegna Immagine" +#define TR_EXECUTE_FILE "Esegui" +#define TR_REMOVED " rimosso" +#define TR_SD_INFO "Informazioni" +#define TR_SD_FORMAT "Format" +#define TR_NA "N/A" +#define TR_HARDWARE "HARDWARE" +#define TR_FORMATTING "Formattazione." +#define TR_TEMP_CALIB "Temp. Calib" +#define TR_TIME "Ora" +#define TR_BAUDRATE "BT Baudrate" +#define TR_SD_INFO_TITLE "SD INFO" +#define TR_SD_TYPE "Tipo:" +#define TR_SD_SPEED "Veloc.:" +#define TR_SD_SECTORS "Settori:" +#define TR_SD_SIZE "Dimens:" +#define TR_TYPE INDENT "Tipo" +#define TR_GLOBAL_VARS "Variabili Globali" +#define TR_GVARS "V.GLOBALI" +#define TR_GLOBAL_VAR "Variabile globale" +#define TR_MENUGLOBALVARS "VARIABILI GLOBALI" +#define TR_OWN "Fase" +#define TR_DATE "Data" +#define TR_ROTARY_ENCODER "R.Encs" +#define TR_CHANNELS_MONITOR "MONITOR CANALI" +#define TR_MIXERS_MONITOR "MONITOR MIXER" +#define TR_PATH_TOO_LONG "Path troppo lungo" +#define TR_VIEW_TEXT "Vedi testo" +#define TR_FLASH_BOOTLOADER "Flash BootLoader" +#define TR_FLASH_EXTERNAL_DEVICE "Progr. Dispositivo Esterno" +#define TR_FLASH_INTERNAL_MODULE "Progr. Modulo Interno" +#define TR_WRITING "\032Scrivendo..." +#define TR_CONFIRM_FORMAT "Confermi Format?" +#define TR_INTERNALRF "Modulo Interno" +#define TR_EXTERNALRF "Modulo esterno" +#define TR_FAILSAFE "Modo failsafe" +#define TR_FAILSAFESET TR("FAILSAFE","IMPOSTAZIONI FAILSAFE") +#define TR_MENUSENSOR "SENSOR" +#define TR_SENSOR "SENSOR" +#define TR_COUNTRYCODE TR("Codice Paese","Standard 2.4Ghz") +#define TR_VOICELANG "Lingua Voce" +#define TR_UNITSSYSTEM "Unità" +#define TR_EDIT "Modifica" +#define TR_INSERT_BEFORE "Inserisci prima" +#define TR_INSERT_AFTER "Inserisci dopo" +#define TR_COPY "Copia" +#define TR_MOVE "Sposta" +#define TR_PASTE "Incolla" +#define TR_DELETE "Elimina" +#define TR_INSERT TR("Inser.","Inserisci") +#define TR_RESET_FLIGHT "Azzera volo" +#define TR_RESET_TIMER1 "Azzera Timer1" +#define TR_RESET_TIMER2 "Azzera Timer2" +#define TR_RESET_TIMER3 "Azzera Timer3" +#define TR_RESET_TELEMETRY "Azzera Telemetria" +#define TR_STATISTICS "Statistiche" +#define TR_ABOUT_US "Info su" +#define TR_SETUP_SCREENS "Setup screens" +#define TR_AND_SWITCH "Inter. AND" +#define TR_SF "CF" +#define TR_GF "GF" +#define TR_SPEAKER INDENT"Speaker" +#define TR_BUZZER INDENT"Buzzer" +#define TR_BYTES "Bytes" +#define TR_MODULE_BIND "[Bind]" +#define TR_MODULE_RANGE "[Range]" +#define TR_RESET_BTN "[Reset]" +#define TR_SET "[Set]" +#define TR_TRAINER TR("Trainer","Maestro/Allievo") +#define TR_ANTENNAPROBLEM CENTER "Problemi antenna TX!" +#define TR_MODELIDUSED TR("ID già usato","ID Modello già usato") +#define TR_MODULE INDENT "Modulo" +#define TR_TELEMETRY_TYPE "Tipo Telemetria" +#define TR_TELEMETRY_SENSORS "Sensori" +#define TR_VALUE "Valore" +#define TR_TOPLCDTIMER "Timer LCD Sup." +#define TR_UNIT "Unita" +#define TR_TELEMETRY_NEWSENSOR INDENT "Aggiungi nuovo sensore..." +#define TR_CHANNELRANGE INDENT "Numero Canali" +#define TR_LOWALARM INDENT "Allarme Basso" +#define TR_CRITICALALARM INDENT "Allarme Critico" +#define TR_ENABLE_POPUP "Abilita Popup" +#define TR_DISABLE_POPUP "Disabilita Popup" +#define TR_POPUP "Popup" +#define TR_MIN "Min" +#define TR_MAX "Max" +#define TR_CURVE_PRESET "Preimpostate..." +#define TR_PRESET "Preimpostate" +#define TR_MIRROR "Mirror" +#define TR_CLEAR "Cancella" +#define TR_RESET "Azzera" +#define TR_RESET_SUBMENU "Azzera..." +#define TR_COUNT "Punti" +#define TR_PT "pt" +#define TR_PTS "pti" +#define TR_SMOOTH "Smussa" +#define TR_COPY_STICKS_TO_OFS "Copia Stick su Offset" +#define TR_COPY_TRIMS_TO_OFS "Copia Trim in Subtrim" +#define TR_INCDEC "Inc/Decrementa" +#define TR_GLOBALVAR "Var Globale" +#define TR_MIXSOURCE "Sorgente Mixer" +#define TR_CONSTANT "Constante" +#define TR_PERSISTENT_MAH INDENT "Memo mAh" +#define TR_PREFLIGHT "Controlli Prevolo" +#define TR_CHECKLIST INDENT "Mostra Checklist" +#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") +#define TR_UART3MODE "Porta Seriale" +#define TR_SCRIPT "Script" +#define TR_INPUTS "Ingresso" +#define TR_OUTPUTS "Uscita" +#define TR_EEBACKUP "\004[ENTER Lungo] per copiare la EEPROM" +#define TR_FACTORYRESET "\012[MENU Lungo]: Inizializza dati" +#define TR_CONFIRMRESET "Resettare TUTTI i dati?" +#define TR_TO_MANY_LUA_SCRIPTS "Troppi Scripts Lua!" + +#if defined(MAVLINK) + #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" + #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" + #define TR_MAVMENUSETUP_TITLE "Setta Mavlink" + #define TR_MAVLINK_BAUD_LABEL "Baudrate" + #define TR_MAVLINK_INFOS "INFOS" + #define TR_MAVLINK_MODE "MODO" + #define TR_MAVLINK_CUR_MODE "Modo Corrente" + #define TR_MAVLINK_ARMED "Armato" + #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" + #define TR_MAVLINK_BATTERY_LABEL "Stato batteria di volo" + #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" + #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" + #define TR_MAVLINK_NAV_MENU_TITLE "NAV" + #define TR_MAVLINK_COURSE "Course" + #define TR_MAVLINK_HEADING "Heading" + #define TR_MAVLINK_BEARING "Bearing" + #define TR_MAVLINK_ALTITUDE "Altitudine" + #define TR_MAVLINK_GPS "GPS" + #define TR_MAVLINK_NO_FIX "NO Fix" + #define TR_MAVLINK_SAT "SAT" + #define TR_MAVLINK_HDOP "HDOP" + #define TR_MAVLINK_LAT "LAT" + #define TR_MAVLINK_LON "LON" +#endif + +// Taranis column headers +#define TR_PHASES_HEADERS { " Nome ", " Inter. ", " Trim Deriva ", " Trim Elevator ", " Trim Motore ", " Trim Alettoni ", " Disolv. In ", " Dissolv. Out " } +#define TR_LIMITS_HEADERS { " Nome ", " Offset ", " Min ", " Max ", " Direzione ", " Curve ", " Centro PPM ", " Simmetria " } +#define TR_CSW_HEADERS { " Funzione ", " V1 ", " V2 ", " V2 ", " Inter. AND ", " Durata ", " Ritardo " } + +// About screen +#define TR_ABOUTUS TR(" INFO ", "INFO SU") + +#define TR_ABOUT_OPENTX_1 TR("OpenTX\001e'\001open\001source,\001non", "OpenTX e' open source, non-") +#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commerciale, fornito senza") +#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "garanzie. E' stato sviluppato") +#define TR_ABOUT_OPENTX_4 TR("Support through donations", "gratuitamente. Il supporto") +#define TR_ABOUT_OPENTX_5 TR("is welcome!", "mediante donazioni e' gradito!") + +#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" +#define TR_ABOUT_BERTRAND_2 "Autore principale OpenTX" +#define TR_ABOUT_BERTRAND_3 "Co-autore Companion9x" + +#define TR_ABOUT_MIKE_1 "Mike Blandford" +#define TR_ABOUT_MIKE_2 "Guru codice e driver" +#define TR_ABOUT_MIKE_3 "esperto a basso livello" +#define TR_ABOUT_MIKE_4 "Ispiratore" + +#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" +#define TR_ABOUT_ROMOLO_2 "Autore Companion9x" +#define TR_ABOUT_ROMOLO_3 "" + +#define TR_ABOUT_ANDRE_1 "Andre Bernet" +#define TR_ABOUT_ANDRE_2 "Funzionalità, usabilità," +#define TR_ABOUT_ANDRE_3 "debugging, documentazione" + +#define TR_ABOUT_ROB_1 "Rob Thomson" +#define TR_ABOUT_ROB_2 "Webmaster openrcforums" + +#define TR_ABOUT_KJELL_1 "Kjell Kernen" +#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" +#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" +#define TR_ABOUT_KJELL_4 "Companion contributor" + +#define TR_ABOUT_MARTIN_1 "Martin Hotar" +#define TR_ABOUT_MARTIN_2 "Graphic Designer" + +#if defined(PCBTARANIS) + #define TR_ABOUT_HARDWARE_1 "FrSky" + #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" + #define TR_ABOUT_HARDWARE_3 "" +#endif + +#define TR_ABOUT_PARENTS_1 "Progetti correlati" +#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" +#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" +#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" + +#define TR_CHR_SHORT 's' +#define TR_CHR_LONG 'l' +#define TR_CHR_TOGGLE 't' +#define TR_CHR_HOUR 'h' +#define TR_CHR_INPUT 'I' // Values between A-I will work + +#define TR_BEEP_VOLUME "Volume Beep" +#define TR_WAV_VOLUME "Volume Wav" +#define TR_VARIO_VOLUME "Volume Vario" +#define TR_BG_VOLUME "Volume Sf" + +#define TR_TOP_BAR "Barra sup." +#define TR_ALTITUDE INDENT "Altitudine" +#define TR_SCALE "Scala" +#define TR_VIEW_CHANNELS "Vedi Canali" +#define TR_VIEW_NOTES "Vedi Note" +#define TR_MODEL_SELECT "Model Select" +#define TR_MODS_FORBIDDEN "Modifica proibita!" +#define TR_UNLOCKED "Sbloccato" +#define TR_ID "ID" +#define TR_PRECISION "Precisione" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Indice cella" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Opzioni" + +#define TR_ALTSENSOR "Sensore Alt" +#define TR_CELLSENSOR "Sensore Cell" +#define TR_GPSSENSOR "Sensore GPS" +#define TR_CURRENTSENSOR "Sensore" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_ONLYPOSITIVE "Positivo" +#define TR_FILTER "Filtro" +#define TR_TELEMETRYFULL "Tutti gli slot sono pieni!" +//TODO: translation +#define TR_INVERTED_SERIAL INDENT "Invert" +#define TR_IGNORE_INSTANCE TR(INDENT "No inst.","Ignora instanza") +#define TR_DISCOVER_SENSORS INDENT "Cerca nuovi sensori" +#define TR_STOP_DISCOVER_SENSORS INDENT "Ferma ricerca.." +#define TR_DELETE_ALL_SENSORS INDENT "Elimina tutti i sensori" +#define TR_CONFIRMDELETE "Confermi eliminazione?" +#define TR_SELECT_WIDGET "Select widget" +#define TR_REMOVE_WIDGET "Remove widget" +#define TR_WIDGET_SETTINGS "Widget settings" +#define TR_REMOVE_SCREEN "Remove screen" + +#define TR_MENU_INPUTS "\314Ingressi" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Ciclico" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Interrut." +#define TR_MENU_LOGICAL_SWITCHES "\312Interrut. Logici" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Canali" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_OTHER "Altro" +#define TR_MENU_INVERT "Inverti" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP1 "Tmp1" +#define ZSTR_TEMP2 "Tmp2" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Data" +#define ZSTR_GPS "GPS" +#define ZSTR_BATT1_VOLTAGE "RB1V" +#define ZSTR_BATT2_VOLTAGE "RB2V" +#define ZSTR_BATT1_CURRENT "RB1A" +#define ZSTR_BATT2_CURRENT "RB2A" +#define ZSTR_BATT1_CONSUMPTION "RB1C" +#define ZSTR_BATT2_CONSUMPTION "RB2C" +#define ZSTR_RB_STATE "RBS" +#define ZSTR_CHANS_STATE "RBCS" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 2139a4dc1..239b26ed2 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -1,29 +1,12 @@ - /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Jean-Pierre van Melis - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -34,6 +17,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * + */ + +// NL translations author: who? + +/* * !!!!! DO NOT EDIT nl.h - EDIT nl.h.txt INSTEAD !!!!!!! * * In order to make translations easier nl.h.txt is parsed and national @@ -43,9 +31,8 @@ * !!!!! DO NOT EDIT nl.h - EDIT nl.h.txt INSTEAD !!!!!!! */ - - -/* Formatting octal codes available in TR_ strings: +/* + * Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) * \036 -newline * \035 -horizontal tab (ARM only) @@ -53,6 +40,8 @@ * \0 -ends current string */ + + // NON ZERO TERMINATED STRINGS #define LEN_OFFON "\003" #define TR_OFFON "UIT""AAN" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 0dbc2a164..1114573f5 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1,28 +1,12 @@ /* - * Authors (alphabetical order) - * - Andre Bernet - * - Andreas Weitl - * - Bertrand Songis - * - Bryan J. Rentoul (Gruvin) - * - Cameron Weeks - * - Erez Raviv - * - Gabriel Birkus - * - Jean-Pierre Parisy - * - Karl Szmutny - * - Michael Blandford - * - Michal Hlavinka - * - Pat Mackenzie - * - Philip Moss - * - Rob Thomson - * - Romolo Manfredini - * - Jacek Drewniak - * - Thomas Husterer + * Copyright (C) OpenTX * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ + * 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 @@ -33,6 +17,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * + */ + +// PL translations author: Jacek Drewniak + +/* * !!!!! DO NOT EDIT pl.h - EDIT pl.h.txt INSTEAD !!!!!!! * * In order to make translations easier pl.h.txt is parsed and national @@ -43,9 +32,8 @@ * */ - - -/* Formatting octal codes available in TR_ strings: +/* + * Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) * \036 -newline * \035 -horizontal tab (ARM only) @@ -53,6 +41,7 @@ * \0 -ends current string */ + // NON ZERO TERMINATED STRINGS #define LEN_OFFON "\003" #define TR_OFFON "WYŁ""ZAŁ" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 167326cc9..3ea2ba070 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -1,1125 +1,1116 @@ -/* - * Authors (alphabetical order) - * - Bertrand Songis - * - Bernet Andre - * - Kjell Kernen - * - Martin Hotar - * - Romolo Manfredini - * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ - * - * 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. - * - * - * - * - * !!!!! DO NOT EDIT pt.h - EDIT pt.h.txt INSTEAD !!!!!!! - * - * In order to make translations easier pt.h.txt is parsed and national - * characters are replaced by bitmap codes. The result is pt.h. - * - * See translate.py in the util folder for the list of character codes - * - * !!!!! DO NOT EDIT pt.h - EDIT pt.h.txt INSTEAD !!!!!!! - */ - /* Formatting octal codes available in TR_ strings: - * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline - * \035 -horizontal tab (ARM only) - * \001 to \034 -extended spacing (value * FW/2) - * \0 -ends current string - */ - - - - - - - - - - - -// NON ZERO TERMINATED STRINGS -#define LEN_OFFON "\003" -#define TR_OFFON "OFF""ON\0" - -#define LEN_MMMINV "\003" -#define TR_MMMINV "---""INV" - -#define LEN_NCHANNELS "\004" -#define TR_NCHANNELS "\0014CH\0016CH\0018CH10CH12CH14CH16CH" - -#define LEN_VBEEPMODE "\005" -#define TR_VBEEPMODE "Mudo ""Alarm""NoKey""Todo " - -#define LEN_VBEEPLEN "\005" -#define TR_VBEEPLEN "0====""=0===""==0==""===0=""====0" - -#define LEN_VRENAVIG "\003" -#define TR_VRENAVIG "No REaREb" - -#define LEN_VBLMODE "\004" -#define TR_VBLMODE "OFF ""Chav""Stks""Tudo""ON\0" - -#define LEN_TRNMODE "\003" -#define TR_TRNMODE "OFF"" +="" :=" - -#define LEN_TRNCHN "\003" -#define TR_TRNCHN "CH1CH2CH3CH4" - -#define LEN_UART3MODES "\017" -#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""Debug\0" - -#define LEN_SWTYPES "\006" -#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" - -#define LEN_POTTYPES "\017" -#define TR_POTTYPES "None\0 ""Pot with detent""Multipos Switch""Pot\0" - -#define LEN_SLIDERTYPES "\006" -#define TR_SLIDERTYPES "Rien\0 ""Slider" - -#define LEN_DATETIME "\005" -#define TR_DATETIME "DATA:""HORA:" - -#define LEN_VLCD "\006" -#define TR_VLCD "NormalOptrex" - -#define LEN_VPERSISTENT "\014" -#define TR_VPERSISTENT "OFF\0 ""Flight\0 ""Manual Reset" - -#define LEN_COUNTRYCODES TR("\002", "\007") -#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europe\0") - -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF" - -#define LEN_XJT_PROTOCOLS "\004" -#define TR_XJT_PROTOCOLS "OFF\0""D16\0""D8\0 ""LR12" - -#define LEN_DSM_PROTOCOLS "\004" -#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" - -#define LEN_VTRIMINC "\006" -#define TR_VTRIMINC "Expo ""ExFino""Fino ""Medio ""Largo " - -#define LEN_VDISPLAYTRIMS "\006" -#define TR_VDISPLAYTRIMS "No\0 ""Change""Yes\0" - -#define LEN_VBEEPCOUNTDOWN "\006" -#define TR_VBEEPCOUNTDOWN "SilentBeeps\0Voice\0Haptic" - -#define LEN_VVARIOCENTER "\006" -#define TR_VVARIOCENTER "Tone\0 ""Silent" - -#define LEN_CURVE_TYPES "\010" -#define TR_CURVE_TYPES "Standard""Custom\0" - -#define LEN_RETA123 "\001" - -#if defined(PCBTARANIS) || defined(REVX) - #define TR_RETA123 "LPMA123LR" -#elif defined(PCBSKY9X) - #define TR_RETA123 "LPMA123a" -#elif defined(CPUM2560) - #define TR_RETA123 "LPMA123ab" -#else - #define TR_RETA123 "LPMA123" -#endif - -#define LEN_VPROTOS "\006" - -#if defined(PXX) - #define TR_PXX "PXX\0 " -#elif defined(DSM2) || defined(IRPROTOS) - #define TR_PXX "[PXX]\0" -#else - #define TR_PXX -#endif - -#if defined(DSM2) - #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " -#elif defined(IRPROTOS) - #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" -#else - #define TR_DSM2 -#endif - -#if defined(IRPROTOS) - #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" -#else - #define TR_IRPROTOS -#endif - -#if defined(CPUARM) - #define TR_XPPM -#else - #define TR_XPPM "PPM16\0""PPMsim" -#endif - -#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS - -#define LEN_POSNEG "\003" -#define TR_POSNEG "POS""NEG" - -#if defined(PCBSKY9X) && defined(REVX) - #define LEN_VOUTPUT_TYPE "\011" - #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" -#endif - -#define LEN_VCURVEFUNC "\003" -#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" - -#define LEN_VMLTPX "\011" -#define TR_VMLTPX "Adicionar""Multipl. ""Trocar\0 0" - -#define LEN_VMLTPX2 "\002" -#define TR_VMLTPX2 "+=""*="":=" - -#define LEN_VMIXTRIMS "\003" -#define TR_VMIXTRIMS "OFF""ON\0""Lem""Pfd""Mot""Ail" - -#if defined(PCBTARANIS) - #define TR_CSWTIMER "Timer" - #define TR_CSWSTICKY "Stcky" - #define TR_CSWRANGE "Range" - #define TR_CSWSTAY "Edge\0" -#else - #define TR_CSWTIMER "Tim\0 " - #define TR_CSWSTICKY "Glue\0" - #if defined(CPUARM) - #define TR_CSWRANGE "Rnge\0" - #define TR_CSWSTAY "Edge\0" - #else - #define TR_CSWRANGE - #define TR_CSWSTAY - #endif -#endif - -#if defined(CPUARM) - #define TR_CSWEQUAL "a=x\0 " -#else - #define TR_CSWEQUAL -#endif - -#define LEN_VCSWFUNC "\005" -#if defined(CPUARM) -#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 - #define TR_VTELEMCHNS "---\0 ""Batt\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Cells""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Time\0" -#else - #define TR_VTELEMCHNS "---\0""Batt" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Time" -#endif - -#define LENGTH_UNIT_IMP "ft\0" -#define SPEED_UNIT_IMP "mph" -#define LENGTH_UNIT_METR "m\0 " -#define SPEED_UNIT_METR "kmh" - -#if defined(CPUARM) - #define LEN_VUNITSSYSTEM TR("\006", "\010") - #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" -#else - #if defined(IMPERIAL_UNITS) - #define LENGTH_UNIT LENGTH_UNIT_IMP - #define SPEED_UNIT SPEED_UNIT_IMP - #else - #define LENGTH_UNIT LENGTH_UNIT_METR - #define SPEED_UNIT SPEED_UNIT_METR - #endif - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " -#endif - -#define STR_V (STR_VTELEMUNIT+1) -#define STR_A (STR_VTELEMUNIT+4) - -#define LEN_VALARM "\003" -#define TR_VALARM "---""Ama""Lar""Ver" - -#define LEN_VALARMFN "\001" -#define TR_VALARMFN "<>" - -#define LEN_VTELPROTO "\007" -#define TR_VTELPROTO "Nada\0 ""Hub\0 ""WSHHigh" - -#if defined(CPUARM) - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") - #define LEN_VOLTSRC TR("\003", "\007") - #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") -#else - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ") -#endif - -#define LEN_VARIOSRC "\005" -#if defined(FRSKY_SPORT) - #define TR_VARIOSRC "Vario""A1\0 ""A2\0" -#else - #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" -#endif - -#define LEN_VTELEMSCREENTYPE "\004" -#define TR_VTELEMSCREENTYPE "Nums""Bars" - -#define LEN_GPSFORMAT "\004" -#define TR_GPSFORMAT "HMS NMEA" - -#define LEN2_VTEMPLATES 13 -#define LEN_VTEMPLATES "\015" -#define TR_VTEMPLATES "Tirar Mixagem""4CH Simples\0 ""Anular Motor\0""V-Tail\0 ""Elevon\\Zagi\0 ""eCCPM\0 ""Mixagem Heli\0""Testar Servos" - -#define LEN_VSWASHTYPE "\004" -#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" - -#define LEN_VKEYS "\005" -#define TR_VKEYS TR("Menu\0""Sair\0""Desce""Sobe\0""Direi""Esqda", "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus") - -#define LEN_VRENCODERS "\003" -#define TR_VRENCODERS "REa""REb" - -#define LEN_VSWITCHES "\003" -#define LEN_VSRCRAW "\004" - -#if defined(PCBHORUS) - #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#elif defined(PCBFLAMENCO) - #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " -#elif defined(PCBTARANIS) && defined(REV9E) - #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" -#elif defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#else - #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " - #define TR_SW_VSRCRAW "3POS" - #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" -#endif - -#if defined(CPUARM) - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" -#else - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" -#endif - -#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313\313d""\313\313u""\313Al""\313Ar") - -#if defined(PCBSKY9X) - #define TR_ROTARY_ENCODERS "REa\0" - #define TR_ROTENC_SWITCHES "REa" -#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) - #define TR_ROTARY_ENCODERS "REa\0""REb\0" - #define TR_ROTENC_SWITCHES "REa""REb" -#else - #define TR_ROTARY_ENCODERS - #define TR_ROTENC_SWITCHES -#endif - -#if !defined(PCBTARANIS) - #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" -#endif - -#define TR_ON_ONE_SWITCHES "ON\0""One" - -#if defined(PCBFLAMENCO) - #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(PCBTARANIS) || defined(PCBHORUS) - // only special switches here - #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES -#else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES -#endif - -#if defined(HELI) -#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" -#else -#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" -#endif - -#define TR_VSRCRAW "---\0""Lem\0""Pfd\0""Mot\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmL" "TrmP" "TrmM" "TrmA" TR_SW_VSRCRAW - -#define LEN_VTMRMODES "\003" -#define TR_VTMRMODES "OFF""ABS""MTs""MT%""MTt" - -#define LEN_VTRAINERMODES "\022" -#define TR_VTRAINERMODES "Master/Jack\0 ""Slave/Jack\0 ""Master/SBUS Module""Master/CPPM Module""Master/Battery\0" - -#define LEN_VFAILSAFE "\011" -#define TR_VFAILSAFE "Not set\0 ""Hold\0 ""Custom\0 ""No pulses""Receiver\0" - -#if defined(MAVLINK) - #define LEN_MAVLINK_BAUDS "\006" - #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" - #define LEN_MAVLINK_AC_MODES "\011" - #define TR_MAVLINK_AC_MODES "Stabilize""Acro ""Alt Hold ""Auto ""Guided ""Loiter ""RTL ""Circle ""Pos Hold ""Land ""OF Loiter""Toy A ""Toy M ""INVALID " - #define LEN_MAVLINK_AP_MODES "\015" - #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " -#endif - -#define LEN_VSENSORTYPES "\012" -#define TR_VSENSORTYPES "Custom\0 ""Calculated" - -#define LEN_VFORMULAS "\010" -#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" - -#define LEN_VPREC "\005" -#define TR_VPREC "PREC0""PREC1""PREC2" - -#define LEN_VCELLINDEX "\007" -#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" - -// ZERO TERMINATED STRINGS -#define INDENT "\001" -#define LEN_INDENT 1 -#define INDENT_WIDTH (FW/2) - -#if defined(PCBTARANIS) - #define TR_ENTER "[ENTER]" -#else - #define TR_ENTER "[MENU]" -#endif - -#define TR_EXIT "[EXIT]" - -#if defined(PCBTARANIS) - #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER -#else - #define TR_POPUPS TR_ENTER "\010" TR_EXIT - #define OFS_EXIT sizeof(TR_ENTER) -#endif - -#define TR_MENUWHENDONE CENTER"\006"TR_ENTER"QDO PRONTO" -#define TR_FREE "Livre" -#define TR_DELETEMODEL "EXCLUI MODELO" -#define TR_COPYINGMODEL "Copiando modelo" -#define TR_MOVINGMODEL "Movendo modelo" -#define TR_LOADINGMODEL "Carregar modelo" -#define TR_NAME "Nome" -#define TR_MODELNAME "Model Name" -#define TR_PHASENAME "Phase Name" -#define TR_MIXNAME "Mix Name" -#define TR_INPUTNAME "Input Name" -#if defined(PCBTARANIS) - #define TR_EXPONAME "Line Name" -#else - #define TR_EXPONAME "Expo Name" -#endif -#define TR_BITMAP "Model Image" -#define TR_TIMER "Cronom" -#define TR_ELIMITS "E.Limits" -#define TR_ETRIMS "E.Trims" -#define TR_TRIMINC "Trim Step" -#define TR_DISPLAY_TRIMS "Display Trims" -#define TR_TTRACE TR("T-Trace", INDENT "T-Trace") -#define TR_TTRIM TR("T-Trim", INDENT "T-Trim") -#define TR_BEEPCTR "Ctr Beep" -#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" -#if defined(PCBSKY9X) && defined(REVX) - #define TR_OUTPUT_TYPE INDENT "Output" -#endif -#define TR_PROTO INDENT"Proto" -#define TR_PPMFRAME "PPM frame" -#define TR_MS "ms" -#define TR_SWITCH "Chave" -#define TR_TRIMS "Trims" -#define TR_FADEIN "Aparecer" -#define TR_FADEOUT "Ocultar" -#define TR_DEFAULT "(default)" -#define TR_CHECKTRIMS "\006Check\012Trims" -#define OFS_CHECKTRIMS (9*FW) -#define TR_SWASHTYPE "Ciclico Tipo" -#define TR_COLLECTIVE "Coletivo" -#define TR_AILERON "Lateral cyc. source" -#define TR_ELEVATOR "Long. cyc. source" -#define TR_SWASHRING "Anel Coletivo" -#define TR_ELEDIRECTION "PFD Sentido" -#define TR_AILDIRECTION "AIL Sentido" -#define TR_COLDIRECTION "COL Sentido" -#define TR_MODE INDENT"Modo" -#define TR_NOFREEEXPO "No free expo!" -#define TR_NOFREEMIXER "No free mixer!" -#define TR_SOURCE INDENT"Fonte" -#define TR_WEIGHT "Quantia" -#define TR_EXPO "Exponen" -#define TR_SIDE "Lado" -#define TR_DIFFERENTIAL "Diferencial" -#define TR_OFFSET INDENT"Desvio" -#define TR_TRIM "Trim" -#define TR_DREX "DRex" -#define DREX_CHBOX_OFFSET 30 -#define TR_CURVE "Curvas" -#define TR_FLMODE "Fase" -#define TR_MIXWARNING "Aviso" -#define TR_OFF "OFF" -#define TR_MULTPX "Aplicar" -#define TR_DELAYDOWN "Atraso Dn" -#define TR_DELAYUP "Atraso Up" -#define TR_SLOWDOWN "Lento Dn" -#define TR_SLOWUP "Lento Up" -#define TR_MIXER "MIXAGENS" -#define TR_CV "CV" -#define TR_GV "GV" -#define TR_ACHANNEL "A\004Canal" -#define TR_RANGE INDENT"Range" -#define TR_CENTER INDENT "Center" -#define TR_BAR "Bar" -#define TR_ALARM INDENT"Alarme" -#define TR_USRDATA "UsrData" -#define TR_BLADES INDENT"Helice" -#define TR_SCREEN "Tela" -#define TR_SOUND_LABEL "Som" -#define TR_LENGTH INDENT"Comprimento" -#define TR_BEEP_LENGTH INDENT "Beep Length" -#define TR_SPKRPITCH INDENT"Pitch" -#define TR_HAPTIC_LABEL "Vibrar" -#define TR_HAPTICSTRENGTH INDENT"Forca" -#define TR_CONTRAST "Contraste" -#define TR_ALARMS_LABEL "Alarmes" -#define TR_BATTERY_RANGE "Battery Range" -#define TR_BATTERYWARNING INDENT"Bateria Baixa" -#define TR_INACTIVITYALARM INDENT"Inactividade" -#define TR_MEMORYWARNING INDENT"Memoria Baixa" -#define TR_ALARMWARNING INDENT"Som Off" -#define TR_RENAVIG "RotEnc Navig" -#define TR_THROTTLE_LABEL "Throttle" -#define TR_THROTTLEREVERSE TR("Inverte Acel.", INDENT "Inverte Acel.") -#define TR_TIMER_NAME INDENT "Name" -#define TR_MINUTEBEEP INDENT "Beep Minuto" -#define TR_BEEPCOUNTDOWN INDENT "Beep Regressivo" -#define TR_PERSISTENT INDENT "Persist." -#define TR_BACKLIGHT_LABEL "Backlight" -#define TR_BLDELAY INDENT "Tempo Backlight" -#define TR_BLONBRIGHTNESS INDENT "ON Brightness" -#define TR_BLOFFBRIGHTNESS INDENT "OFF Brightness" -#define TR_BLCOLOR INDENT "Color" -#define TR_SPLASHSCREEN "Splash screen" -#define TR_THROTTLEWARNING TR("Avisa Acel", INDENT "Avisa Acel") -#define TR_SWITCHWARNING TR("Avisa Chav", INDENT "Avisa Chav") -#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning") -#define TR_TIMEZONE "Time Zone" -#define TR_ADJUST_RTC INDENT "Adjust RTC" -#define TR_GPS "GPS" -#define TR_RXCHANNELORD "Ordem Canal RX" -#define TR_STICKS "Sticks" -#define TR_POTS "Pots" -#define TR_SWITCHES "Switches" -#define TR_SWITCHES_DELAY "Switches Delay" -#define TR_SLAVE "Escravo" -#define TR_MODESRC "Modo\006% Fonte" -#define TR_MULTIPLIER "Multiplicar" -#define TR_CAL "Cal" -#define TR_VTRIM "Trim- +" -#define TR_BG "BG:" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] to start" - #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" - #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" -#else - #define TR_MENUTOSTART CENTER"\011" TR_ENTER " INICIAR" - #define TR_SETMIDPOINT TR(CENTER"\005CENTRAR STICK/POT",CENTER"\006CENTRAR STICK/POT") - #define TR_MOVESTICKSPOTS TR(CENTER"\005MOVER STICKS/POTs",CENTER"\006MOVER STICKS/POTs") -#endif -#define TR_RXBATT "Rx Batt:" -#define TR_TXnRX "Tx:\0Rx:" -#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" -#define STR_US (STR_TMR1LATMAXUS+13) -#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" -#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" - -#if defined(CPUARM) - #define TR_TMIXMAXMS "Tmix max" - #define TR_FREESTACKMINB "Free Stack" -#else - #define TR_TMIXMAXMS "Tmix max\037\124ms" - #define TR_FREESTACKMINB "Pilha Livre\037\124b" -#endif - -#define TR_MENUTORESET CENTER TR_ENTER" Reinicia" -#define TR_PPM_TRAINER "TR" -#define TR_CH "CH" -#define TR_MODEL "MODEL" -#define TR_FP "FP" -#define TR_MIX "MIX" -#define TR_EEPROMLOWMEM "EEPROM BX Memoria" -#define TR_ALERT "\016ALERT" -#define TR_PRESSANYKEYTOSKIP "Pulsar Tecla p/ sair" -#define TR_THROTTLENOTIDLE "**ACELERADOR ATIVO**" -#define TR_ALARMSDISABLED "Desabilita Alarmes" -#define TR_PRESSANYKEY "\010Pressione Tecla" -#define TR_BADEEPROMDATA "EEPRON INVALIDA" -#define TR_BAD_RADIO_DATA "Bad Radio Data" -#define TR_EEPROMFORMATTING "Formatando EEPROM" -#define TR_STORAGE_FORMAT "Storage Preparation" -#define TR_EEPROMOVERFLOW "EEPROM CHEIA" -#define TR_MENURADIOSETUP "AJUSTAR RADIO" -#define TR_MENUDATEANDTIME "DATA E HORA" -#define TR_MENUTRAINER "TRAINER" -#define TR_MENUGLOBALFUNCS "GLOBAL FUNCTIONS" -#define TR_MENUVERSION "VERSAO" -#define TR_MENUDIAG "DIAGNOST" -#define TR_MENUANA "ANALOGICOS" -#define TR_MENUCALIBRATION "CALIBRAGEM" -#define TR_TRIMS2OFFSETS "\006Trims => Offsets" -#define TR_MENUMODELSEL "MODELOS" -#define TR_MENUSETUP "SETUP" -#define TR_MENUFLIGHTPHASE "MODO DE VOO" -#define TR_MENUFLIGHTPHASES "MODOS DE VOO" -#define TR_MENUHELISETUP "HELI SETUP" - - -// Alignment - -#if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_LIMITS_SYMETRICAL) // The right menu titles for the gurus ... - #define TR_MENUINPUTS "STICKS" - #define TR_MENULIMITS "SAIDAS" -#else - #define TR_MENUINPUTS "DR/EXPO" - #define TR_MENULIMITS "LIMITES" -#endif - -#define TR_MENUCURVES "CURVAS" -#define TR_MENUCURVE "CURVA" -#define TR_MENULOGICALSWITCH "CHAVE ESPECIAL" -#define TR_MENULOGICALSWITCHES "CHAVES ESPECIAIS" -#define TR_MENUCUSTOMFUNC "FUNCAO ESPECIAL" -#define TR_MENUCUSTOMSCRIPTS "CUSTOM SCRIPTS" -#define TR_MENUTELEMETRY "TELEMETRIA" -#define TR_MENUTEMPLATES "MODELOS" -#define TR_MENUSTAT "REGISTROS" -#define TR_MENUDEBUG "DEPURAR" -#define TR_RXNUM "RxNum" -#define TR_SYNCMENU "Sync [MENU]" -#define TR_LIMIT INDENT"Limite" -#define TR_MINRSSI "Min Rssi" -#define TR_LATITUDE "Latitude" -#define TR_LONGITUDE "Longitude" -#define TR_GPSCOORD "Gps Coords" -#define TR_VARIO "Vario" -#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" -#define TR_CURRENT_CALIB "Corrente Calib" -#define TR_VOLTAGE INDENT"Volts" -#define TR_CURRENT INDENT"Amperes" -#define TR_SELECT_MODEL "Selec. Modelo" -#define TR_CREATE_CATEGORY "Create Category" -#define TR_RENAME_CATEGORY "Rename Category" -#define TR_DELETE_CATEGORY "Delete Category" -#define TR_CREATE_MODEL "Criar Modelo" -#define TR_DUPLICATE_MODEL "Duplicate Model" -#define TR_CHANGE_CATEGORY "Change category" -#define TR_COPY_MODEL "Copy Model" -#define TR_MOVE_MODEL "Move Model" -#define TR_BACKUP_MODEL "Salvar Modelo" -#define TR_DELETE_MODEL "Apagar Modelo" -#define TR_RESTORE_MODEL "Restaura Modelo" -#define TR_SDCARD_ERROR "SDCARD Erro" -#define TR_NO_SDCARD "Sem SDCARD" -#define TR_SDCARD_FULL "SD Card Full" -#define TR_INCOMPATIBLE "Incompativel" -#define TR_WARNING "AVISO" -#define TR_EEPROMWARN "EEPROM" -#define TR_STORAGE_WARNING "STORAGE" -#define TR_EEPROM_CONVERTING "EEPROM Converting" -#define TR_THROTTLEWARN "ACELERAD" -#define TR_ALARMSWARN "ALARMES" -#define TR_SWITCHWARN "CHAVES" -#define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NO_FAILSAFE "Failsafe not set" -#define TR_KEYSTUCK "Key stuck" -#define TR_INVERT_THR "Inverte Acel?" -#define TR_SPEAKER_VOLUME INDENT "Volume" -#define TR_LCD "LCD" -#define TR_BRIGHTNESS INDENT "Brilho" -#define TR_CPU_TEMP "CPU Temp.\016>" -#define TR_CPU_CURRENT "Current\022>" -#define TR_CPU_MAH "Consumo." -#define TR_COPROC "CoProc." -#define TR_COPROC_TEMP "MB Temp. \016>" -#define TR_CAPAWARNING INDENT "Aviso Capacidade" -#define TR_TEMPWARNING INDENT "Temperat. ALTA" -#define TR_FUNC "Funcao" -#define TR_V1 "V1" -#define TR_V2 "V2" -#define TR_DURATION "Tempo" -#define TR_DELAY "Atraso" -#define TR_SD_CARD "SD CARD" -#define TR_SDHC_CARD "SD-HC CARD" -#define TR_NO_SOUNDS_ON_SD "Sem Som no SD" -#define TR_NO_MODELS_ON_SD "Sem Modelo no SD" -#define TR_NO_BITMAPS_ON_SD "No Bitmaps on SD" -#define TR_NO_SCRIPTS_ON_SD "No Scripts on SD" -#define TR_SCRIPT_SYNTAX_ERROR "Script syntax error" -#define TR_SCRIPT_PANIC "Script panic" -#define TR_SCRIPT_KILLED "Script killed" -#define TR_SCRIPT_ERROR "Unknown error" -#define TR_PLAY_FILE "Play" -#define TR_DELETE_FILE "Apagar" -#define TR_COPY_FILE "Copiar" -#define TR_RENAME_FILE "Renomear" -#define TR_ASSIGN_BITMAP "Assign Bitmap" -#define TR_EXECUTE_FILE "Execute" -#define TR_REMOVED "Remover" -#define TR_SD_INFO "Dados SD" -#define TR_SD_FORMAT "Formatar" -#define TR_NA "N/A" -#define TR_HARDWARE "HARDWARE" -#define TR_FORMATTING "Formatando..." -#define TR_TEMP_CALIB "Temp. Calib" -#define TR_TIME "Time" -#define TR_BAUDRATE "BT Baudrate" -#define TR_SD_INFO_TITLE "SD INFO" -#define TR_SD_TYPE "Tipe" -#define TR_SD_SPEED "Velocidade" -#define TR_SD_SECTORS "Sectores" -#define TR_SD_SIZE "Tamanho" -#define TR_TYPE INDENT "Tipe" -#define TR_GLOBAL_VARS "Variaveis" -#define TR_GVARS "GLOBAL V." -#define TR_GLOBAL_VAR "Global Variable" -#define TR_MENUGLOBALVARS "VARIAVEIS" -#define TR_OWN "Propr." -#define TR_DATE "Data" -#define TR_ROTARY_ENCODER "R.Encs" -#define TR_CHANNELS_MONITOR "CHANNELS MONITOR" -#define TR_MIXERS_MONITOR "MIXERS MONITOR" -#define TR_PATH_TOO_LONG "Path too long" -#define TR_VIEW_TEXT "View text" -#define TR_FLASH_BOOTLOADER "Flash BootLoader" -#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" -#define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" -#define TR_WRITING "\032Writing..." -#define TR_CONFIRM_FORMAT "Confirm Format?" -#define TR_INTERNALRF "Internal RF" -#define TR_EXTERNALRF "External RF" -#define TR_FAILSAFE "Failsafe mode" -#define TR_FAILSAFESET "FAILSAFE SETTINGS" -#define TR_MENUSENSOR "SENSOR" -#define TR_SENSOR "SENSOR" -#define TR_COUNTRYCODE "Country Code" -#define TR_VOICELANG "Voice Language" -#define TR_UNITSSYSTEM "Units" -#define TR_EDIT "Edit" -#define TR_INSERT_BEFORE "Insert Before" -#define TR_INSERT_AFTER "Insert After" -#define TR_COPY "Copy" -#define TR_MOVE "Move" -#define TR_PASTE "Paste" -#define TR_DELETE "Delete" -#define TR_INSERT "Insert" -#define TR_RESET_FLIGHT "Reset Flight" -#define TR_RESET_TIMER1 "Reset Timer1" -#define TR_RESET_TIMER2 "Reset Timer2" -#define TR_RESET_TIMER3 "Reset Timer3" -#define TR_RESET_TELEMETRY "Reset Telemetry" -#define TR_STATISTICS "Statistics" -#define TR_ABOUT_US "About Us" -#define TR_SETUP_SCREENS "Setup screens" -#define TR_AND_SWITCH "AND Switch" -#define TR_SF "CF" -#define TR_GF "GF" -#define TR_SPEAKER INDENT"Speaker" -#define TR_BUZZER INDENT"Buzzer" -#define TR_BYTES "bytes" -#define TR_MODULE_BIND "[Bind]" -#define TR_MODULE_RANGE "[Range]" -#define TR_RESET_BTN "[Reset]" -#define TR_SET "[Set]" -#define TR_TRAINER "Trainer" -#define TR_ANTENNAPROBLEM CENTER "TX Antenna problem!" -#define TR_MODELIDUSED TR("ID already used","Model ID already used") -#define TR_MODULE INDENT "Module" -#define TR_TELEMETRY_TYPE TR("Type", "Telemetry Type") -#define TR_TELEMETRY_SENSORS "Sensors" -#define TR_VALUE "Value" -#define TR_TOPLCDTIMER "Top LCD Timer" -#define TR_UNIT "Unit" -#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." -#define TR_CHANNELRANGE INDENT "Channel Range" -#define TR_LOWALARM INDENT "Low Alarm" -#define TR_CRITICALALARM INDENT "Critical Alarm" -#define TR_ENABLE_POPUP "Enable Popup" -#define TR_DISABLE_POPUP "Disable Popup" -#define TR_POPUP "Popup" -#define TR_MIN "Min" -#define TR_MAX "Max" -#define TR_CURVE_PRESET "Preset..." -#define TR_PRESET "Preset" -#define TR_MIRROR "Mirror" -#define TR_CLEAR "Clear" -#define TR_RESET "Reset" -#define TR_RESET_SUBMENU "Reset..." -#define TR_COUNT "Count" -#define TR_PT "pt" -#define TR_PTS "pts" -#define TR_SMOOTH "Smooth" -#define TR_COPY_STICKS_TO_OFS "Copy Sticks To Offset" -#define TR_COPY_TRIMS_TO_OFS "Copy trims to subtrim" -#define TR_INCDEC "Inc/Decrement" -#define TR_GLOBALVAR "Global Var" -#define TR_MIXSOURCE "Mixer Source" -#define TR_CONSTANT "Constant" -#define TR_PERSISTENT_MAH INDENT "Store mAh" -#define TR_PREFLIGHT "Preflight Checks" -#define TR_CHECKLIST INDENT "Display Checklist" -#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") -#define TR_UART3MODE "Serial port" -#define TR_SCRIPT "Script" -#define TR_INPUTS "Inputs" -#define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" -#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" -#define TR_CONFIRMRESET "Erase ALL models and settings?" -#define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" - -#if defined(MAVLINK) - #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" - #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" - #define TR_MAVMENUSETUP_TITLE "Mavlink Setup" - #define TR_MAVLINK_BAUD_LABEL "Baudrate" - #define TR_MAVLINK_INFOS "INFOS" - #define TR_MAVLINK_MODE "MODE" - #define TR_MAVLINK_CUR_MODE "Current Mode" - #define TR_MAVLINK_ARMED "Armed" - #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" - #define TR_MAVLINK_BATTERY_LABEL "Flight Battery status" - #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" - #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" - #define TR_MAVLINK_NAV_MENU_TITLE "NAV" - #define TR_MAVLINK_COURSE "Course" - #define TR_MAVLINK_HEADING "Heading" - #define TR_MAVLINK_BEARING "Bearing" - #define TR_MAVLINK_ALTITUDE "Altitude" - #define TR_MAVLINK_GPS "GPS" - #define TR_MAVLINK_NO_FIX "NO Fix" - #define TR_MAVLINK_SAT "SAT" - #define TR_MAVLINK_HDOP "HDOP" - #define TR_MAVLINK_LAT "LAT" - #define TR_MAVLINK_LON "LON" -#endif - -// Taranis column headers -#define TR_PHASES_HEADERS { " Name ", " Switch ", " Rudder Trim ", " Elevator Trim ", " Throttle Trim ", " Aileron Trim ", " Fade In ", " Fade Out " } -#define TR_LIMITS_HEADERS { " Name ", " Offset ", " Min ", " Max ", " Direction ", " Curve ", " PPM Center ", " Symmetrical " } -#define TR_CSW_HEADERS { " Function ", " V1 ", " V2 ", " V2 ", " AND Switch ", " Duration ", " Delay " } - -//Taranis About screen -#define TR_ABOUTUS "ABOUT US" - -#define TR_ABOUT_OPENTX_1 "OpenTX is open source, non-" -#define TR_ABOUT_OPENTX_2 "commercial and comes with no" -#define TR_ABOUT_OPENTX_3 "warranties. It was developed" -#define TR_ABOUT_OPENTX_4 "for free. Support through" -#define TR_ABOUT_OPENTX_5 "donations is welcome!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion9x co-developer" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 "Arguably, one of the best" -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion9x main developer" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#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" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - -#define TR_CHR_SHORT 's' -#define TR_CHR_LONG 'l' -#define TR_CHR_TOGGLE 't' -#define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work - -#define TR_BEEP_VOLUME "Beep Volume" -#define TR_WAV_VOLUME "Wav Volume" -#define TR_VARIO_VOLUME "Vario Volume" -#define TR_BG_VOLUME "Bg Volume" - -#define TR_TOP_BAR "Top Bar" -#define TR_ALTITUDE INDENT "Altitude" -#define TR_SCALE "Scale" -#define TR_VIEW_CHANNELS "View Channels" -#define TR_VIEW_NOTES "View Notes" -#define TR_MODEL_SELECT "Model Select" -#define TR_MODS_FORBIDDEN "Modifications forbidden!" -#define TR_UNLOCKED "Unlocked" -#define TR_ID "ID" -#define TR_PRECISION "Precision" -#define TR_RATIO "Ratio" -#define TR_FORMULA "Formula" -#define TR_CELLINDEX "Cell index" -#define TR_LOGS "Logs" -#define TR_OPTIONS "Options" - -#define TR_ALTSENSOR "Alt sensor" -#define TR_CELLSENSOR "Cell sensor" -#define TR_GPSSENSOR "GPS sensor" -#define TR_CURRENTSENSOR "Sensor" -#define TR_AUTOOFFSET "Auto Offset" -#define TR_ONLYPOSITIVE "Positive" -#define TR_FILTER "Filter" -#define TR_TELEMETRYFULL "All telemetry slots full!" -#define TR_INVERTED_SERIAL INDENT "Invert" -#define TR_IGNORE_INSTANCE INDENT "Ignore instance" -#define TR_DISCOVER_SENSORS INDENT "Discover new sensors" -#define TR_STOP_DISCOVER_SENSORS INDENT "Stop discovery" -#define TR_DELETE_ALL_SENSORS INDENT "Delete all sensors" -#define TR_CONFIRMDELETE "Really delete all?" -#define TR_SELECT_WIDGET "Select widget" -#define TR_REMOVE_WIDGET "Remove widget" -#define TR_WIDGET_SETTINGS "Widget settings" -#define TR_REMOVE_SCREEN "Remove screen" - -#define TR_MENU_INPUTS "\314Inputs" -#define TR_MENU_LUA "\322Lua scripts" -#define TR_MENU_STICKS "\307Sticks" -#define TR_MENU_POTS "\310Pots" -#define TR_MENU_MAX "\315MAX" -#define TR_MENU_HELI "\316Cyclic" -#define TR_MENU_TRIMS "\313Trims" -#define TR_MENU_SWITCHES "\312Switches" -#define TR_MENU_LOGICAL_SWITCHES "\312Logical Switches" -#define TR_MENU_TRAINER "\317Trainer" -#define TR_MENU_CHANNELS "\320Channels" -#define TR_MENU_GVARS "\311GVars" -#define TR_MENU_TELEMETRY "\321Telemetry" -#define TR_MENU_OTHER "Other" -#define TR_MENU_INVERT "Invert" - -#define ZSTR_RSSI "RSSI" -#define ZSTR_SWR "SWR" -#define ZSTR_A1 "A1" -#define ZSTR_A2 "A2" -#define ZSTR_A3 "A3" -#define ZSTR_A4 "A4" -#define ZSTR_BATT "RxBt" -#define ZSTR_ALT "Alt" -#define ZSTR_TEMP1 "Tmp1" -#define ZSTR_TEMP2 "Tmp2" -#define ZSTR_RPM "RPM" -#define ZSTR_FUEL "Fuel" -#define ZSTR_VSPD "VSpd" -#define ZSTR_ACCX "AccX" -#define ZSTR_ACCY "AccY" -#define ZSTR_ACCZ "AccZ" -#define ZSTR_CURR "Curr" -#define ZSTR_VFAS "VFAS" -#define ZSTR_ASPD "ASpd" -#define ZSTR_GSPD "GSpd" -#define ZSTR_HDG "Hdg" -#define ZSTR_CELLS "Cels" -#define ZSTR_GPSALT "GAlt" -#define ZSTR_GPSDATETIME "Date" -#define ZSTR_GPS "GPS" -#define ZSTR_BATT1_VOLTAGE "RB1V" -#define ZSTR_BATT2_VOLTAGE "RB2V" -#define ZSTR_BATT1_CURRENT "RB1A" -#define ZSTR_BATT2_CURRENT "RB2A" -#define ZSTR_BATT1_CONSUMPTION "RB1C" -#define ZSTR_BATT2_CONSUMPTION "RB2C" -#define ZSTR_RB_STATE "RBS" -#define ZSTR_CHANS_STATE "RBCS" +/* + * 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. + * + */ + +// PT translations author: who? + +/* + * !!!!! DO NOT EDIT pt.h - EDIT pt.h.txt INSTEAD !!!!!!! + * + * In order to make translations easier pt.h.txt is parsed and national + * characters are replaced by bitmap codes. The result is pt.h. + * + * See translate.py in the util folder for the list of character codes + * + * !!!!! DO NOT EDIT pt.h - EDIT pt.h.txt INSTEAD !!!!!!! + */ + +/* + * Formatting octal codes available in TR_ strings: + * \037\x -sets LCD x-coord (x value in octal) + * \036 -newline + * \035 -horizontal tab (ARM only) + * \001 to \034 -extended spacing (value * FW/2) + * \0 -ends current string + */ + + +// NON ZERO TERMINATED STRINGS +#define LEN_OFFON "\003" +#define TR_OFFON "OFF""ON\0" + +#define LEN_MMMINV "\003" +#define TR_MMMINV "---""INV" + +#define LEN_NCHANNELS "\004" +#define TR_NCHANNELS "\0014CH\0016CH\0018CH10CH12CH14CH16CH" + +#define LEN_VBEEPMODE "\005" +#define TR_VBEEPMODE "Mudo ""Alarm""NoKey""Todo " + +#define LEN_VBEEPLEN "\005" +#define TR_VBEEPLEN "0====""=0===""==0==""===0=""====0" + +#define LEN_VRENAVIG "\003" +#define TR_VRENAVIG "No REaREb" + +#define LEN_VBLMODE "\004" +#define TR_VBLMODE "OFF ""Chav""Stks""Tudo""ON\0" + +#define LEN_TRNMODE "\003" +#define TR_TRNMODE "OFF"" +="" :=" + +#define LEN_TRNCHN "\003" +#define TR_TRNCHN "CH1CH2CH3CH4" + +#define LEN_UART3MODES "\017" +#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""Debug\0" + +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + +#define LEN_POTTYPES "\017" +#define TR_POTTYPES "None\0 ""Pot with detent""Multipos Switch""Pot\0" + +#define LEN_SLIDERTYPES "\006" +#define TR_SLIDERTYPES "Rien\0 ""Slider" + +#define LEN_DATETIME "\005" +#define TR_DATETIME "DATA:""HORA:" + +#define LEN_VLCD "\006" +#define TR_VLCD "NormalOptrex" + +#define LEN_VPERSISTENT "\014" +#define TR_VPERSISTENT "OFF\0 ""Flight\0 ""Manual Reset" + +#define LEN_COUNTRYCODES TR("\002", "\007") +#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europe\0") + +#define LEN_TARANIS_PROTOCOLS "\004" +#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF" + +#define LEN_XJT_PROTOCOLS "\004" +#define TR_XJT_PROTOCOLS "OFF\0""D16\0""D8\0 ""LR12" + +#define LEN_DSM_PROTOCOLS "\004" +#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" + +#define LEN_VTRIMINC "\006" +#define TR_VTRIMINC "Expo ""ExFino""Fino ""Medio ""Largo " + +#define LEN_VDISPLAYTRIMS "\006" +#define TR_VDISPLAYTRIMS "No\0 ""Change""Yes\0" + +#define LEN_VBEEPCOUNTDOWN "\006" +#define TR_VBEEPCOUNTDOWN "SilentBeeps\0Voice\0Haptic" + +#define LEN_VVARIOCENTER "\006" +#define TR_VVARIOCENTER "Tone\0 ""Silent" + +#define LEN_CURVE_TYPES "\010" +#define TR_CURVE_TYPES "Standard""Custom\0" + +#define LEN_RETA123 "\001" + +#if defined(PCBTARANIS) || defined(REVX) + #define TR_RETA123 "LPMA123LR" +#elif defined(PCBSKY9X) + #define TR_RETA123 "LPMA123a" +#elif defined(CPUM2560) + #define TR_RETA123 "LPMA123ab" +#else + #define TR_RETA123 "LPMA123" +#endif + +#define LEN_VPROTOS "\006" + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" +#else + #define TR_PXX +#endif + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" +#else + #define TR_DSM2 +#endif + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" +#else + #define TR_IRPROTOS +#endif + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS + +#define LEN_POSNEG "\003" +#define TR_POSNEG "POS""NEG" + +#if defined(PCBSKY9X) && defined(REVX) + #define LEN_VOUTPUT_TYPE "\011" + #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" +#endif + +#define LEN_VCURVEFUNC "\003" +#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" + +#define LEN_VMLTPX "\011" +#define TR_VMLTPX "Adicionar""Multipl. ""Trocar\0 0" + +#define LEN_VMLTPX2 "\002" +#define TR_VMLTPX2 "+=""*="":=" + +#define LEN_VMIXTRIMS "\003" +#define TR_VMIXTRIMS "OFF""ON\0""Lem""Pfd""Mot""Ail" + +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + +#if defined(CPUARM) + #define TR_CSWEQUAL "a=x\0 " +#else + #define TR_CSWEQUAL +#endif + +#define LEN_VCSWFUNC "\005" +#if defined(CPUARM) +#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 + #define TR_VTELEMCHNS "---\0 ""Batt\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Cells""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Time\0" +#else + #define TR_VTELEMCHNS "---\0""Batt" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 " TR_TELEM_RSSI_RX TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Time" +#endif + +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + +#if defined(CPUARM) + #define LEN_VUNITSSYSTEM TR("\006", "\010") + #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" +#else + #if defined(IMPERIAL_UNITS) + #define LENGTH_UNIT LENGTH_UNIT_IMP + #define SPEED_UNIT SPEED_UNIT_IMP + #else + #define LENGTH_UNIT LENGTH_UNIT_METR + #define SPEED_UNIT SPEED_UNIT_METR + #endif + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " +#endif + +#define STR_V (STR_VTELEMUNIT+1) +#define STR_A (STR_VTELEMUNIT+4) + +#define LEN_VALARM "\003" +#define TR_VALARM "---""Ama""Lar""Ver" + +#define LEN_VALARMFN "\001" +#define TR_VALARMFN "<>" + +#define LEN_VTELPROTO "\007" +#define TR_VTELPROTO "Nada\0 ""Hub\0 ""WSHHigh" + +#if defined(CPUARM) + #define LEN_AMPSRC TR("\003", "\007") + #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") + #define LEN_VOLTSRC TR("\003", "\007") + #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") +#else + #define LEN_AMPSRC TR("\003", "\007") + #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ") +#endif + +#define LEN_VARIOSRC "\005" +#if defined(FRSKY_SPORT) + #define TR_VARIOSRC "Vario""A1\0 ""A2\0" +#else + #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" +#endif + +#define LEN_VTELEMSCREENTYPE "\004" +#define TR_VTELEMSCREENTYPE "Nums""Bars" + +#define LEN_GPSFORMAT "\004" +#define TR_GPSFORMAT "HMS NMEA" + +#define LEN2_VTEMPLATES 13 +#define LEN_VTEMPLATES "\015" +#define TR_VTEMPLATES "Tirar Mixagem""4CH Simples\0 ""Anular Motor\0""V-Tail\0 ""Elevon\\Zagi\0 ""eCCPM\0 ""Mixagem Heli\0""Testar Servos" + +#define LEN_VSWASHTYPE "\004" +#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" + +#define LEN_VKEYS "\005" +#define TR_VKEYS TR("Menu\0""Sair\0""Desce""Sobe\0""Direi""Esqda", "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus") + +#define LEN_VRENCODERS "\003" +#define TR_VRENCODERS "REa""REb" + +#define LEN_VSWITCHES "\003" +#define LEN_VSRCRAW "\004" + +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310S1\0""\3106P\0""\310S2\0""\311S3\0""\311S4\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#else + #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " + #define TR_SW_VSRCRAW "3POS" + #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" +#endif + +#if defined(CPUARM) + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" +#else + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" +#endif + +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313\313d""\313\313u""\313Al""\313Ar") + +#if defined(PCBSKY9X) + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" +#else + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if !defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#define TR_ON_ONE_SWITCHES "ON\0""One" + +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#elif defined(PCBTARANIS) || defined(PCBHORUS) + // only special switches here + #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES +#endif + +#if defined(HELI) +#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3" +#else +#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" +#endif + +#define TR_VSRCRAW "---\0""Lem\0""Pfd\0""Mot\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmL" "TrmP" "TrmM" "TrmA" TR_SW_VSRCRAW + +#define LEN_VTMRMODES "\003" +#define TR_VTMRMODES "OFF""ABS""MTs""MT%""MTt" + +#define LEN_VTRAINERMODES "\022" +#define TR_VTRAINERMODES "Master/Jack\0 ""Slave/Jack\0 ""Master/SBUS Module""Master/CPPM Module""Master/Battery\0" + +#define LEN_VFAILSAFE "\011" +#define TR_VFAILSAFE "Not set\0 ""Hold\0 ""Custom\0 ""No pulses""Receiver\0" + +#if defined(MAVLINK) + #define LEN_MAVLINK_BAUDS "\006" + #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" + #define LEN_MAVLINK_AC_MODES "\011" + #define TR_MAVLINK_AC_MODES "Stabilize""Acro ""Alt Hold ""Auto ""Guided ""Loiter ""RTL ""Circle ""Pos Hold ""Land ""OF Loiter""Toy A ""Toy M ""INVALID " + #define LEN_MAVLINK_AP_MODES "\015" + #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " +#endif + +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + +// ZERO TERMINATED STRINGS +#define INDENT "\001" +#define LEN_INDENT 1 +#define INDENT_WIDTH (FW/2) + +#if defined(PCBTARANIS) + #define TR_ENTER "[ENTER]" +#else + #define TR_ENTER "[MENU]" +#endif + +#define TR_EXIT "[EXIT]" + +#if defined(PCBTARANIS) + #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER +#else + #define TR_POPUPS TR_ENTER "\010" TR_EXIT + #define OFS_EXIT sizeof(TR_ENTER) +#endif + +#define TR_MENUWHENDONE CENTER"\006"TR_ENTER"QDO PRONTO" +#define TR_FREE "Livre" +#define TR_DELETEMODEL "EXCLUI MODELO" +#define TR_COPYINGMODEL "Copiando modelo" +#define TR_MOVINGMODEL "Movendo modelo" +#define TR_LOADINGMODEL "Carregar modelo" +#define TR_NAME "Nome" +#define TR_MODELNAME "Model Name" +#define TR_PHASENAME "Phase Name" +#define TR_MIXNAME "Mix Name" +#define TR_INPUTNAME "Input Name" +#if defined(PCBTARANIS) + #define TR_EXPONAME "Line Name" +#else + #define TR_EXPONAME "Expo Name" +#endif +#define TR_BITMAP "Model Image" +#define TR_TIMER "Cronom" +#define TR_ELIMITS "E.Limits" +#define TR_ETRIMS "E.Trims" +#define TR_TRIMINC "Trim Step" +#define TR_DISPLAY_TRIMS "Display Trims" +#define TR_TTRACE TR("T-Trace", INDENT "T-Trace") +#define TR_TTRIM TR("T-Trim", INDENT "T-Trim") +#define TR_BEEPCTR "Ctr Beep" +#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" +#if defined(PCBSKY9X) && defined(REVX) + #define TR_OUTPUT_TYPE INDENT "Output" +#endif +#define TR_PROTO INDENT"Proto" +#define TR_PPMFRAME "PPM frame" +#define TR_MS "ms" +#define TR_SWITCH "Chave" +#define TR_TRIMS "Trims" +#define TR_FADEIN "Aparecer" +#define TR_FADEOUT "Ocultar" +#define TR_DEFAULT "(default)" +#define TR_CHECKTRIMS "\006Check\012Trims" +#define OFS_CHECKTRIMS (9*FW) +#define TR_SWASHTYPE "Ciclico Tipo" +#define TR_COLLECTIVE "Coletivo" +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" +#define TR_SWASHRING "Anel Coletivo" +#define TR_ELEDIRECTION "PFD Sentido" +#define TR_AILDIRECTION "AIL Sentido" +#define TR_COLDIRECTION "COL Sentido" +#define TR_MODE INDENT"Modo" +#define TR_NOFREEEXPO "No free expo!" +#define TR_NOFREEMIXER "No free mixer!" +#define TR_SOURCE INDENT"Fonte" +#define TR_WEIGHT "Quantia" +#define TR_EXPO "Exponen" +#define TR_SIDE "Lado" +#define TR_DIFFERENTIAL "Diferencial" +#define TR_OFFSET INDENT"Desvio" +#define TR_TRIM "Trim" +#define TR_DREX "DRex" +#define DREX_CHBOX_OFFSET 30 +#define TR_CURVE "Curvas" +#define TR_FLMODE "Fase" +#define TR_MIXWARNING "Aviso" +#define TR_OFF "OFF" +#define TR_MULTPX "Aplicar" +#define TR_DELAYDOWN "Atraso Dn" +#define TR_DELAYUP "Atraso Up" +#define TR_SLOWDOWN "Lento Dn" +#define TR_SLOWUP "Lento Up" +#define TR_MIXER "MIXAGENS" +#define TR_CV "CV" +#define TR_GV "GV" +#define TR_ACHANNEL "A\004Canal" +#define TR_RANGE INDENT"Range" +#define TR_CENTER INDENT "Center" +#define TR_BAR "Bar" +#define TR_ALARM INDENT"Alarme" +#define TR_USRDATA "UsrData" +#define TR_BLADES INDENT"Helice" +#define TR_SCREEN "Tela" +#define TR_SOUND_LABEL "Som" +#define TR_LENGTH INDENT"Comprimento" +#define TR_BEEP_LENGTH INDENT "Beep Length" +#define TR_SPKRPITCH INDENT"Pitch" +#define TR_HAPTIC_LABEL "Vibrar" +#define TR_HAPTICSTRENGTH INDENT"Forca" +#define TR_CONTRAST "Contraste" +#define TR_ALARMS_LABEL "Alarmes" +#define TR_BATTERY_RANGE "Battery Range" +#define TR_BATTERYWARNING INDENT"Bateria Baixa" +#define TR_INACTIVITYALARM INDENT"Inactividade" +#define TR_MEMORYWARNING INDENT"Memoria Baixa" +#define TR_ALARMWARNING INDENT"Som Off" +#define TR_RENAVIG "RotEnc Navig" +#define TR_THROTTLE_LABEL "Throttle" +#define TR_THROTTLEREVERSE TR("Inverte Acel.", INDENT "Inverte Acel.") +#define TR_TIMER_NAME INDENT "Name" +#define TR_MINUTEBEEP INDENT "Beep Minuto" +#define TR_BEEPCOUNTDOWN INDENT "Beep Regressivo" +#define TR_PERSISTENT INDENT "Persist." +#define TR_BACKLIGHT_LABEL "Backlight" +#define TR_BLDELAY INDENT "Tempo Backlight" +#define TR_BLONBRIGHTNESS INDENT "ON Brightness" +#define TR_BLOFFBRIGHTNESS INDENT "OFF Brightness" +#define TR_BLCOLOR INDENT "Color" +#define TR_SPLASHSCREEN "Splash screen" +#define TR_THROTTLEWARNING TR("Avisa Acel", INDENT "Avisa Acel") +#define TR_SWITCHWARNING TR("Avisa Chav", INDENT "Avisa Chav") +#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning") +#define TR_TIMEZONE "Time Zone" +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" +#define TR_RXCHANNELORD "Ordem Canal RX" +#define TR_STICKS "Sticks" +#define TR_POTS "Pots" +#define TR_SWITCHES "Switches" +#define TR_SWITCHES_DELAY "Switches Delay" +#define TR_SLAVE "Escravo" +#define TR_MODESRC "Modo\006% Fonte" +#define TR_MULTIPLIER "Multiplicar" +#define TR_CAL "Cal" +#define TR_VTRIM "Trim- +" +#define TR_BG "BG:" +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#else + #define TR_MENUTOSTART CENTER"\011" TR_ENTER " INICIAR" + #define TR_SETMIDPOINT TR(CENTER"\005CENTRAR STICK/POT",CENTER"\006CENTRAR STICK/POT") + #define TR_MOVESTICKSPOTS TR(CENTER"\005MOVER STICKS/POTs",CENTER"\006MOVER STICKS/POTs") +#endif +#define TR_RXBATT "Rx Batt:" +#define TR_TXnRX "Tx:\0Rx:" +#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" +#define STR_US (STR_TMR1LATMAXUS+13) +#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" +#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" + +#if defined(CPUARM) + #define TR_TMIXMAXMS "Tmix max" + #define TR_FREESTACKMINB "Free Stack" +#else + #define TR_TMIXMAXMS "Tmix max\037\124ms" + #define TR_FREESTACKMINB "Pilha Livre\037\124b" +#endif + +#define TR_MENUTORESET CENTER TR_ENTER" Reinicia" +#define TR_PPM_TRAINER "TR" +#define TR_CH "CH" +#define TR_MODEL "MODEL" +#define TR_FP "FP" +#define TR_MIX "MIX" +#define TR_EEPROMLOWMEM "EEPROM BX Memoria" +#define TR_ALERT "\016ALERT" +#define TR_PRESSANYKEYTOSKIP "Pulsar Tecla p/ sair" +#define TR_THROTTLENOTIDLE "**ACELERADOR ATIVO**" +#define TR_ALARMSDISABLED "Desabilita Alarmes" +#define TR_PRESSANYKEY "\010Pressione Tecla" +#define TR_BADEEPROMDATA "EEPRON INVALIDA" +#define TR_BAD_RADIO_DATA "Bad Radio Data" +#define TR_EEPROMFORMATTING "Formatando EEPROM" +#define TR_STORAGE_FORMAT "Storage Preparation" +#define TR_EEPROMOVERFLOW "EEPROM CHEIA" +#define TR_MENURADIOSETUP "AJUSTAR RADIO" +#define TR_MENUDATEANDTIME "DATA E HORA" +#define TR_MENUTRAINER "TRAINER" +#define TR_MENUGLOBALFUNCS "GLOBAL FUNCTIONS" +#define TR_MENUVERSION "VERSAO" +#define TR_MENUDIAG "DIAGNOST" +#define TR_MENUANA "ANALOGICOS" +#define TR_MENUCALIBRATION "CALIBRAGEM" +#define TR_TRIMS2OFFSETS "\006Trims => Offsets" +#define TR_MENUMODELSEL "MODELOS" +#define TR_MENUSETUP "SETUP" +#define TR_MENUFLIGHTPHASE "MODO DE VOO" +#define TR_MENUFLIGHTPHASES "MODOS DE VOO" +#define TR_MENUHELISETUP "HELI SETUP" + + +// Alignment + +#if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_LIMITS_SYMETRICAL) // The right menu titles for the gurus ... + #define TR_MENUINPUTS "STICKS" + #define TR_MENULIMITS "SAIDAS" +#else + #define TR_MENUINPUTS "DR/EXPO" + #define TR_MENULIMITS "LIMITES" +#endif + +#define TR_MENUCURVES "CURVAS" +#define TR_MENUCURVE "CURVA" +#define TR_MENULOGICALSWITCH "CHAVE ESPECIAL" +#define TR_MENULOGICALSWITCHES "CHAVES ESPECIAIS" +#define TR_MENUCUSTOMFUNC "FUNCAO ESPECIAL" +#define TR_MENUCUSTOMSCRIPTS "CUSTOM SCRIPTS" +#define TR_MENUTELEMETRY "TELEMETRIA" +#define TR_MENUTEMPLATES "MODELOS" +#define TR_MENUSTAT "REGISTROS" +#define TR_MENUDEBUG "DEPURAR" +#define TR_RXNUM "RxNum" +#define TR_SYNCMENU "Sync [MENU]" +#define TR_LIMIT INDENT"Limite" +#define TR_MINRSSI "Min Rssi" +#define TR_LATITUDE "Latitude" +#define TR_LONGITUDE "Longitude" +#define TR_GPSCOORD "Gps Coords" +#define TR_VARIO "Vario" +#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" +#define TR_CURRENT_CALIB "Corrente Calib" +#define TR_VOLTAGE INDENT"Volts" +#define TR_CURRENT INDENT"Amperes" +#define TR_SELECT_MODEL "Selec. Modelo" +#define TR_CREATE_CATEGORY "Create Category" +#define TR_RENAME_CATEGORY "Rename Category" +#define TR_DELETE_CATEGORY "Delete Category" +#define TR_CREATE_MODEL "Criar Modelo" +#define TR_DUPLICATE_MODEL "Duplicate Model" +#define TR_CHANGE_CATEGORY "Change category" +#define TR_COPY_MODEL "Copy Model" +#define TR_MOVE_MODEL "Move Model" +#define TR_BACKUP_MODEL "Salvar Modelo" +#define TR_DELETE_MODEL "Apagar Modelo" +#define TR_RESTORE_MODEL "Restaura Modelo" +#define TR_SDCARD_ERROR "SDCARD Erro" +#define TR_NO_SDCARD "Sem SDCARD" +#define TR_SDCARD_FULL "SD Card Full" +#define TR_INCOMPATIBLE "Incompativel" +#define TR_WARNING "AVISO" +#define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "STORAGE" +#define TR_EEPROM_CONVERTING "EEPROM Converting" +#define TR_THROTTLEWARN "ACELERAD" +#define TR_ALARMSWARN "ALARMES" +#define TR_SWITCHWARN "CHAVES" +#define TR_FAILSAFEWARN "FAILSAFE" +#define TR_NO_FAILSAFE "Failsafe not set" +#define TR_KEYSTUCK "Key stuck" +#define TR_INVERT_THR "Inverte Acel?" +#define TR_SPEAKER_VOLUME INDENT "Volume" +#define TR_LCD "LCD" +#define TR_BRIGHTNESS INDENT "Brilho" +#define TR_CPU_TEMP "CPU Temp.\016>" +#define TR_CPU_CURRENT "Current\022>" +#define TR_CPU_MAH "Consumo." +#define TR_COPROC "CoProc." +#define TR_COPROC_TEMP "MB Temp. \016>" +#define TR_CAPAWARNING INDENT "Aviso Capacidade" +#define TR_TEMPWARNING INDENT "Temperat. ALTA" +#define TR_FUNC "Funcao" +#define TR_V1 "V1" +#define TR_V2 "V2" +#define TR_DURATION "Tempo" +#define TR_DELAY "Atraso" +#define TR_SD_CARD "SD CARD" +#define TR_SDHC_CARD "SD-HC CARD" +#define TR_NO_SOUNDS_ON_SD "Sem Som no SD" +#define TR_NO_MODELS_ON_SD "Sem Modelo no SD" +#define TR_NO_BITMAPS_ON_SD "No Bitmaps on SD" +#define TR_NO_SCRIPTS_ON_SD "No Scripts on SD" +#define TR_SCRIPT_SYNTAX_ERROR "Script syntax error" +#define TR_SCRIPT_PANIC "Script panic" +#define TR_SCRIPT_KILLED "Script killed" +#define TR_SCRIPT_ERROR "Unknown error" +#define TR_PLAY_FILE "Play" +#define TR_DELETE_FILE "Apagar" +#define TR_COPY_FILE "Copiar" +#define TR_RENAME_FILE "Renomear" +#define TR_ASSIGN_BITMAP "Assign Bitmap" +#define TR_EXECUTE_FILE "Execute" +#define TR_REMOVED "Remover" +#define TR_SD_INFO "Dados SD" +#define TR_SD_FORMAT "Formatar" +#define TR_NA "N/A" +#define TR_HARDWARE "HARDWARE" +#define TR_FORMATTING "Formatando..." +#define TR_TEMP_CALIB "Temp. Calib" +#define TR_TIME "Time" +#define TR_BAUDRATE "BT Baudrate" +#define TR_SD_INFO_TITLE "SD INFO" +#define TR_SD_TYPE "Tipe" +#define TR_SD_SPEED "Velocidade" +#define TR_SD_SECTORS "Sectores" +#define TR_SD_SIZE "Tamanho" +#define TR_TYPE INDENT "Tipe" +#define TR_GLOBAL_VARS "Variaveis" +#define TR_GVARS "GLOBAL V." +#define TR_GLOBAL_VAR "Global Variable" +#define TR_MENUGLOBALVARS "VARIAVEIS" +#define TR_OWN "Propr." +#define TR_DATE "Data" +#define TR_ROTARY_ENCODER "R.Encs" +#define TR_CHANNELS_MONITOR "CHANNELS MONITOR" +#define TR_MIXERS_MONITOR "MIXERS MONITOR" +#define TR_PATH_TOO_LONG "Path too long" +#define TR_VIEW_TEXT "View text" +#define TR_FLASH_BOOTLOADER "Flash BootLoader" +#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" +#define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" +#define TR_WRITING "\032Writing..." +#define TR_CONFIRM_FORMAT "Confirm Format?" +#define TR_INTERNALRF "Internal RF" +#define TR_EXTERNALRF "External RF" +#define TR_FAILSAFE "Failsafe mode" +#define TR_FAILSAFESET "FAILSAFE SETTINGS" +#define TR_MENUSENSOR "SENSOR" +#define TR_SENSOR "SENSOR" +#define TR_COUNTRYCODE "Country Code" +#define TR_VOICELANG "Voice Language" +#define TR_UNITSSYSTEM "Units" +#define TR_EDIT "Edit" +#define TR_INSERT_BEFORE "Insert Before" +#define TR_INSERT_AFTER "Insert After" +#define TR_COPY "Copy" +#define TR_MOVE "Move" +#define TR_PASTE "Paste" +#define TR_DELETE "Delete" +#define TR_INSERT "Insert" +#define TR_RESET_FLIGHT "Reset Flight" +#define TR_RESET_TIMER1 "Reset Timer1" +#define TR_RESET_TIMER2 "Reset Timer2" +#define TR_RESET_TIMER3 "Reset Timer3" +#define TR_RESET_TELEMETRY "Reset Telemetry" +#define TR_STATISTICS "Statistics" +#define TR_ABOUT_US "About Us" +#define TR_SETUP_SCREENS "Setup screens" +#define TR_AND_SWITCH "AND Switch" +#define TR_SF "CF" +#define TR_GF "GF" +#define TR_SPEAKER INDENT"Speaker" +#define TR_BUZZER INDENT"Buzzer" +#define TR_BYTES "bytes" +#define TR_MODULE_BIND "[Bind]" +#define TR_MODULE_RANGE "[Range]" +#define TR_RESET_BTN "[Reset]" +#define TR_SET "[Set]" +#define TR_TRAINER "Trainer" +#define TR_ANTENNAPROBLEM CENTER "TX Antenna problem!" +#define TR_MODELIDUSED TR("ID already used","Model ID already used") +#define TR_MODULE INDENT "Module" +#define TR_TELEMETRY_TYPE TR("Type", "Telemetry Type") +#define TR_TELEMETRY_SENSORS "Sensors" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" +#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." +#define TR_CHANNELRANGE INDENT "Channel Range" +#define TR_LOWALARM INDENT "Low Alarm" +#define TR_CRITICALALARM INDENT "Critical Alarm" +#define TR_ENABLE_POPUP "Enable Popup" +#define TR_DISABLE_POPUP "Disable Popup" +#define TR_POPUP "Popup" +#define TR_MIN "Min" +#define TR_MAX "Max" +#define TR_CURVE_PRESET "Preset..." +#define TR_PRESET "Preset" +#define TR_MIRROR "Mirror" +#define TR_CLEAR "Clear" +#define TR_RESET "Reset" +#define TR_RESET_SUBMENU "Reset..." +#define TR_COUNT "Count" +#define TR_PT "pt" +#define TR_PTS "pts" +#define TR_SMOOTH "Smooth" +#define TR_COPY_STICKS_TO_OFS "Copy Sticks To Offset" +#define TR_COPY_TRIMS_TO_OFS "Copy trims to subtrim" +#define TR_INCDEC "Inc/Decrement" +#define TR_GLOBALVAR "Global Var" +#define TR_MIXSOURCE "Mixer Source" +#define TR_CONSTANT "Constant" +#define TR_PERSISTENT_MAH INDENT "Store mAh" +#define TR_PREFLIGHT "Preflight Checks" +#define TR_CHECKLIST INDENT "Display Checklist" +#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") +#define TR_UART3MODE "Serial port" +#define TR_SCRIPT "Script" +#define TR_INPUTS "Inputs" +#define TR_OUTPUTS "Outputs" +#define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" +#define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" + +#if defined(MAVLINK) + #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" + #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" + #define TR_MAVMENUSETUP_TITLE "Mavlink Setup" + #define TR_MAVLINK_BAUD_LABEL "Baudrate" + #define TR_MAVLINK_INFOS "INFOS" + #define TR_MAVLINK_MODE "MODE" + #define TR_MAVLINK_CUR_MODE "Current Mode" + #define TR_MAVLINK_ARMED "Armed" + #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" + #define TR_MAVLINK_BATTERY_LABEL "Flight Battery status" + #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" + #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" + #define TR_MAVLINK_NAV_MENU_TITLE "NAV" + #define TR_MAVLINK_COURSE "Course" + #define TR_MAVLINK_HEADING "Heading" + #define TR_MAVLINK_BEARING "Bearing" + #define TR_MAVLINK_ALTITUDE "Altitude" + #define TR_MAVLINK_GPS "GPS" + #define TR_MAVLINK_NO_FIX "NO Fix" + #define TR_MAVLINK_SAT "SAT" + #define TR_MAVLINK_HDOP "HDOP" + #define TR_MAVLINK_LAT "LAT" + #define TR_MAVLINK_LON "LON" +#endif + +// Taranis column headers +#define TR_PHASES_HEADERS { " Name ", " Switch ", " Rudder Trim ", " Elevator Trim ", " Throttle Trim ", " Aileron Trim ", " Fade In ", " Fade Out " } +#define TR_LIMITS_HEADERS { " Name ", " Offset ", " Min ", " Max ", " Direction ", " Curve ", " PPM Center ", " Symmetrical " } +#define TR_CSW_HEADERS { " Function ", " V1 ", " V2 ", " V2 ", " AND Switch ", " Duration ", " Delay " } + +//Taranis About screen +#define TR_ABOUTUS "ABOUT US" + +#define TR_ABOUT_OPENTX_1 "OpenTX is open source, non-" +#define TR_ABOUT_OPENTX_2 "commercial and comes with no" +#define TR_ABOUT_OPENTX_3 "warranties. It was developed" +#define TR_ABOUT_OPENTX_4 "for free. Support through" +#define TR_ABOUT_OPENTX_5 "donations is welcome!" + +#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" +#define TR_ABOUT_BERTRAND_2 "OpenTX main author" +#define TR_ABOUT_BERTRAND_3 "Companion9x co-developer" + +#define TR_ABOUT_MIKE_1 "Mike Blandford" +#define TR_ABOUT_MIKE_2 "Code and drivers guru" +#define TR_ABOUT_MIKE_3 "Arguably, one of the best" +#define TR_ABOUT_MIKE_4 "Inspirational" + +#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" +#define TR_ABOUT_ROMOLO_2 "Companion9x main developer" +#define TR_ABOUT_ROMOLO_3 "" + +#define TR_ABOUT_ANDRE_1 "Andre Bernet" +#define TR_ABOUT_ANDRE_2 "Functionality, usability," +#define TR_ABOUT_ANDRE_3 "debugging, documentation" + +#define TR_ABOUT_ROB_1 "Rob Thomson" +#define TR_ABOUT_ROB_2 "openrcforums webmaster" + +#define TR_ABOUT_KJELL_1 "Kjell Kernen" +#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" +#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" +#define TR_ABOUT_KJELL_4 "Companion contributor" + +#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" +#else + #define TR_ABOUT_HARDWARE_1 "Brent Nelson" + #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" + #define TR_ABOUT_HARDWARE_3 "" +#endif + +#define TR_ABOUT_PARENTS_1 "Parent projects" +#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" +#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" +#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" + +#define TR_CHR_SHORT 's' +#define TR_CHR_LONG 'l' +#define TR_CHR_TOGGLE 't' +#define TR_CHR_HOUR 'h' +#define TR_CHR_INPUT 'I' // Values between A-I will work + +#define TR_BEEP_VOLUME "Beep Volume" +#define TR_WAV_VOLUME "Wav Volume" +#define TR_VARIO_VOLUME "Vario Volume" +#define TR_BG_VOLUME "Bg Volume" + +#define TR_TOP_BAR "Top Bar" +#define TR_ALTITUDE INDENT "Altitude" +#define TR_SCALE "Scale" +#define TR_VIEW_CHANNELS "View Channels" +#define TR_VIEW_NOTES "View Notes" +#define TR_MODEL_SELECT "Model Select" +#define TR_MODS_FORBIDDEN "Modifications forbidden!" +#define TR_UNLOCKED "Unlocked" +#define TR_ID "ID" +#define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_ONLYPOSITIVE "Positive" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" +#define TR_INVERTED_SERIAL INDENT "Invert" +#define TR_IGNORE_INSTANCE INDENT "Ignore instance" +#define TR_DISCOVER_SENSORS INDENT "Discover new sensors" +#define TR_STOP_DISCOVER_SENSORS INDENT "Stop discovery" +#define TR_DELETE_ALL_SENSORS INDENT "Delete all sensors" +#define TR_CONFIRMDELETE "Really delete all?" +#define TR_SELECT_WIDGET "Select widget" +#define TR_REMOVE_WIDGET "Remove widget" +#define TR_WIDGET_SETTINGS "Widget settings" +#define TR_REMOVE_SCREEN "Remove screen" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_LOGICAL_SWITCHES "\312Logical Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_OTHER "Other" +#define TR_MENU_INVERT "Invert" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP1 "Tmp1" +#define ZSTR_TEMP2 "Tmp2" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" +#define ZSTR_BATT1_VOLTAGE "RB1V" +#define ZSTR_BATT2_VOLTAGE "RB2V" +#define ZSTR_BATT1_CURRENT "RB1A" +#define ZSTR_BATT2_CURRENT "RB2A" +#define ZSTR_BATT1_CONSUMPTION "RB1C" +#define ZSTR_BATT2_CONSUMPTION "RB2C" +#define ZSTR_RB_STATE "RBS" +#define ZSTR_CHANS_STATE "RBCS" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 09e1ec1ec..7718c2671 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -1,1186 +1,1177 @@ -/* - * Authors (alphabetical order) - * - Bertrand Songis - * - Bernet Andre - * - Kjell Kernen - * - Martin Hotar - * - Romolo Manfredini - * - * opentx is based on code named - * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, - * er9x by Erez Raviv: http://code.google.com/p/er9x/, - * and the original (and ongoing) project by - * Thomas Husterer, th9x: http://code.google.com/p/th9x/ - * - * 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. - * - * - * - * - * !!!!! DO NOT EDIT se.h - EDIT se.h.txt INSTEAD !!!!!!! - * - * In order to make translations easier se.h.txt is parsed and national - * characters are replaced by bitmap codes. The result is se.h. - * - * See translate.py in the util folder for the list of character codes - * - * !!!!! DO NOT EDIT se.h - EDIT se.h.txt INSTEAD !!!!!!! - */ - /* Formatting octal codes available in TR_ strings: - * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline - * \035 -horizontal tab (ARM only) - * \001 to \034 -extended spacing (value * FW/2) - * \0 -ends current string - */ - - - - - - - - - - - -// NON ZERO TERMINATED STRINGS -#define LEN_OFFON "\003" -#define TR_OFFON "Av ""På\0" - -#define LEN_MMMINV "\003" -#define TR_MMMINV "---""INV" - -#define LEN_NCHANNELS "\004" -#define TR_NCHANNELS "\0014KN\0016KN\0018KN10KN12KN14KN16KN" - -#define LEN_VBEEPMODE "\005" -#define TR_VBEEPMODE "Tyst\0""Alarm""EjKnp""Alla\0" - -#define LEN_VBEEPLEN "\005" -#define TR_VBEEPLEN "0====""=0===""==0==""===0=""====0" - -#define LEN_VRENAVIG "\003" -#define TR_VRENAVIG "No REaREb" - -#define LEN_VBLMODE TR("\005", "\010") -#define TR_VBLMODE TR("Av\0 ""Knapp""Spak ""Allt ""På\0 ", "Av\0 ""Knappar ""Spakar\0 ""Allt\0 ""På\0 ") - -#define LEN_TRNMODE "\002" -#define TR_TRNMODE "Av""+="":=" - -#define LEN_TRNCHN "\003" -#define TR_TRNCHN "KN1KN2KN3KN4" - -#define LEN_UART3MODES "\022" -#define TR_UART3MODES "Av\0 ""Spegling av S-Port""Telemetri\0 ""SBUS Trainer\0 ""Debug\0" - -#define LEN_SWTYPES "\006" -#define TR_SWTYPES "Ingen\0""Flipp ""2Pos\0 ""3Pos\0" - -#define LEN_POTTYPES "\020" -#define TR_POTTYPES "Ingen\0 ""Mittläges-pot\0 ""Flerlägesväljare""Potentiometer\0" - -#define LEN_SLIDERTYPES "\006" -#define TR_SLIDERTYPES "Ingen\0""Slider" - -#define LEN_DATETIME "\005" -#define TR_DATETIME "DAG: ""TID: " - -#define LEN_VLCD "\006" -#define TR_VLCD "NormalOptrex" - -#define LEN_VPERSISTENT "\014" -#define TR_VPERSISTENT "Av\0 ""Flygning\0 ""Nolla Själv\0" - -#define LEN_COUNTRYCODES TR("\002", "\007") -#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0") - -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF" - -#define LEN_XJT_PROTOCOLS "\004" -#define TR_XJT_PROTOCOLS "Av\0 ""D16\0""D8\0 ""LR12" - -#define LEN_DSM_PROTOCOLS "\004" -#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" - -#define LEN_VTRIMINC TR("\006","\014") -#define TR_VTRIMINC TR("Expo\0 ""xFin\0 ""Fin\0 ""Medium""Grov\0 ","Exponentiell""Extra Fin\0 ""Fin\0 ""Medium\0 ""Grov\0 ") - -#define LEN_VDISPLAYTRIMS "\005" -#define TR_VDISPLAYTRIMS "Nej\0 ""Ändra""Ja\0 " - -#define LEN_VBEEPCOUNTDOWN "\007" -#define TR_VBEEPCOUNTDOWN "Tyst\0 Pip\0 Röst\0 Vibrera" - -#define LEN_VVARIOCENTER "\004" -#define TR_VVARIOCENTER "Pip\0""Tyst" - -#define LEN_CURVE_TYPES "\006" -#define TR_CURVE_TYPES "Normal""Egen\0 " - -#define LEN_RETA123 "\001" - -#if defined(PCBFLAMENCO) - #define TR_RETA123 "RHGS123HV" -#elif defined(PCBTARANIS) && defined(REV9E) - #define TR_RETA123 "RHGS1234HVHV" -#elif defined(PCBTARANIS) || defined(REVX) - #define TR_RETA123 "RHGS123HV" -#elif defined(PCBSKY9X) - #define TR_RETA123 "RHGS123a" -#elif defined(CPUM2560) - #define TR_RETA123 "RHGS123ab" -#else - #define TR_RETA123 "RHGS123" -#endif - -#define LEN_VPROTOS "\006" - -#if defined(PXX) - #define TR_PXX "PXX\0 " -#elif defined(DSM2) || defined(IRPROTOS) - #define TR_PXX "[PXX]\0" -#else - #define TR_PXX -#endif - -#if defined(DSM2) - #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " -#elif defined(IRPROTOS) - #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" -#else - #define TR_DSM2 -#endif - -#if defined(IRPROTOS) - #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" -#else - #define TR_IRPROTOS -#endif - -#if defined(CPUARM) - #define TR_XPPM -#else - #define TR_XPPM "PPM16\0""PPMsim" -#endif - -#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS - -#define LEN_POSNEG "\003" -#define TR_POSNEG "Pos""Neg" - -#if defined(PCBSKY9X) && defined(REVX) - #define LEN_VOUTPUT_TYPE "\011" - #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" -#endif - -#define LEN_VCURVEFUNC "\003" -#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" - -#define LEN_VMLTPX "\010" -#define TR_VMLTPX "Addera ""Förstärk""Ersätt " - -#define LEN_VMLTPX2 "\002" -#define TR_VMLTPX2 "+=""*="":=" - -#define LEN_VMIXTRIMS "\003" -#define TR_VMIXTRIMS "Av\0""På\0""Rod""Hjd""Gas""Ske" - -#if defined(PCBTARANIS) - #define TR_CSWTIMER "Timer" - #define TR_CSWSTICKY "Seg\0 " - #define TR_CSWRANGE "Vidd\0" - #define TR_CSWSTAY "Kant\0" -#else - #define TR_CSWTIMER "Tim\0 " - #define TR_CSWSTICKY "Seg\0 " - #if defined(CPUARM) - #define TR_CSWRANGE "Vidd\0" - #define TR_CSWSTAY "Kant\0" - #else - #define TR_CSWRANGE - #define TR_CSWSTAY - #endif -#endif - -#if defined(CPUARM) - #define TR_CSWEQUAL "a=x\0 " -#else - #define TR_CSWEQUAL -#endif - -#define LEN_VCSWFUNC "\005" -#if defined(CPUARM) -#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 - #define TR_SF_SAFETY "Säkra \0 " -#elif defined(OVERRIDE_CHANNEL_FUNCTION) - #define TR_SF_SAFETY "Säkra \0 " -#else - #define TR_SF_SAFETY "---\0 " -#endif - -#if defined(PCBTARANIS) - #define TR_SF_SCREENSHOT "Skärmbild" -#else - #define TR_SF_SCREENSHOT -#endif - -#define TR_SF_RESERVE "[reserve]\0" - -#if defined(CPUARM) - #define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_SCREENSHOT TR_SF_TEST -#elif defined(PCBGRUVIN9X) - #define TR_VFSWFUNC TR_SF_SAFETY "Trainer \0 ""Sätt Trim\0""Nollställ\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_TEST -#else - #define TR_VFSWFUNC TR_SF_SAFETY "Trainer \0 ""Sätt Trim\0""Nollställ\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "Belysning\0" TR_SF_TEST -#endif - -#define LEN_VFSWRESET TR("\004", "\011") - -#if defined(FRSKY) - #define TR_FSW_RESET_TELEM TR("Telm", "Telemetry") -#else - #define TR_FSW_RESET_TELEM -#endif - -#if ROTARY_ENCODERS == 2 - #define TR_FSW_RESET_ROTENC TR("REa\0""REb\0", "RotEnk A\0""RotEnk B\0") -#elif ROTARY_ENCODERS == 1 - #define TR_FSW_RESET_ROTENC TR("R.E.", "RotEnk\0 ") -#else - #define TR_FSW_RESET_ROTENC -#endif - -#if defined(PCBTARANIS) - #define TR_FSW_RESET_TIMERS "Timer 1\0 ""Timer 2\0 ""Timer 3\0 " -#elif defined(CPUARM) - #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2""Tmr3" -#else - #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2" -#endif - -#define TR_VFSWRESET TR(TR_FSW_RESET_TIMERS "All\0" TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC, TR_FSW_RESET_TIMERS "Alla\0 " TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC) - -#define LEN_FUNCSOUNDS TR("\004", "\006") -#define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Beep1 ""Beep2 ""Beep3 ""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") - -#define LEN_VTELEMCHNS TR("\004", "\005") - -#if defined(CPUARM) - #define TR_TELEM_RESERVE TR("[--]", "[---]") - #define TR_TELEM_TIME TR("Tid\0", "Tid\0 ") - #define TR_SWR TR("SWR\0", "SWR\0 ") - #define TR_RX_BATT TR("[NA]", "[NA]\0") - #define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ") - #define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ") -#else - #define TR_TELEM_RESERVE - #define TR_TELEM_TIME - #define TR_SWR - #define TR_RX_BATT - #define TR_A3_A4 - #define TR_A3_A4_MIN -#endif - -#define TR_ASPD_MAX TR("ASp+", "ASpd+") - -#if defined(PCBTARANIS) - #define TR_TELEM_RSSI_RX "RSSI\0" -#else - #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") -#endif - -#if defined(CPUARM) - #define TR_TELEM_TIMERS TR("Tmr1""Tmr2""Tmr3", "Tmr1\0""Tmr2\0""Tmr3\0") -#else - #define TR_TELEM_TIMERS TR("Tmr1""Tmr2", "Tmr1\0""Tmr2\0") -#endif - -#if LCD_W >= 212 - #define TR_VTELEMCHNS "---\0 ""Batt\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Cells""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Tid\0 " -#else - #define TR_VTELEMCHNS "---\0""Batt" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Tid\0" -#endif - -#define LENGTH_UNIT_IMP "fot" -#define SPEED_UNIT_IMP "mph" -#define LENGTH_UNIT_METR "m\0 " -#define SPEED_UNIT_METR "kmh" - -#if defined(CPUARM) - #define LEN_VUNITSSYSTEM TR("\006", "\010") - #define TR_VUNITSSYSTEM TR("Metri.""Imper.", "Metriska""Imperial") - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" -#else - #if defined(IMPERIAL_UNITS) - #define LENGTH_UNIT LENGTH_UNIT_IMP - #define SPEED_UNIT SPEED_UNIT_IMP - #else - #define LENGTH_UNIT LENGTH_UNIT_METR - #define SPEED_UNIT SPEED_UNIT_METR - #endif - #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " -#endif - -#define STR_V (STR_VTELEMUNIT+1) -#define STR_A (STR_VTELEMUNIT+4) - -#define LEN_VALARM "\003" -#define TR_VALARM "---""Gul""Ora""Röd" - -#define LEN_VALARMFN "\001" -#define TR_VALARMFN "<>" - -#define LEN_VTELPROTO "\007" -#define TR_VTELPROTO "---\0 ""Hub\0 ""WSHHög." - -#if defined(CPUARM) - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") - #define LEN_VOLTSRC TR("\003", "\007") - #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") -#else - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ") -#endif - -#define LEN_VARIOSRC "\005" -#if defined(FRSKY_SPORT) - #define TR_VARIOSRC "Vario""A1\0 ""A2\0" -#else - #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" -#endif - -#if defined(CPUARM) - #define LEN_VTELEMSCREENTYPE "\007" - #define TR_VTELEMSCREENTYPE "Inget\0 ""Siffror""Staplar""Script\0" -#else - #define LEN_VTELEMSCREENTYPE "\007" - #define TR_VTELEMSCREENTYPE "Siffror""Staplar" -#endif - -#define LEN_GPSFORMAT "\004" -#define TR_GPSFORMAT "HMS NMEA" - -#define LEN2_VTEMPLATES 13 -#define LEN_VTEMPLATES "\015" -#define TR_VTEMPLATES "Nolla Mixar\0\0""Enkel 4kanal\0""Gasklippning\0""V-Stjärt \0""Deltavinge \0""eCCPM \0""Helikopter \0""Servotest \0" - -#define LEN_VSWASHTYPE "\004" -#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" - -#if defined(PCBHORUS) -#define LEN_VKEYS "\006" -#define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Upp\0 ""Ned\0 ""Höger\0""Vänst" -#elif defined(PCBTARANIS) -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" -#else -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Ned\0 ""Upp\0 ""Höger""Vänst" -#endif - -#define LEN_VRENCODERS "\003" -#define TR_VRENCODERS "REa""REb" - -#define LEN_VSWITCHES "\003" -#define LEN_VSRCRAW "\004" - - -#define TR_STICKS_VSRCRAW TR("Rod\0""Hjd\0""Gas\0""Ske\0", "\307Rod""\307Hjd""\307Gas""\307Ske") -#define TR_TRIMS_VSRCRAW TR("TrmR""TrmH""TrmG""TrmS", "\313Rod""\313Hjd""\313Gas""\313Ske") - -#if defined(PCBHORUS) - #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#elif defined(PCBFLAMENCO) - #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " -#elif defined(PCBTARANIS) && defined(REV9E) - #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" -#elif defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" -#else - #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " - #define TR_SW_VSRCRAW "3Pos" - #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" -#endif - -#if defined(CPUARM) - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" -#else - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" -#endif - -#define TR_TRIMS_SWITCHES TR("tRv""tRh""tHn""tHu""tGn""tGu""tSv""tSh", "\313Rv""\313Rh""\313Hn""\313Hu""\313Gn""\313Gu""\313Sv""\313Sh") - -#if defined(PCBSKY9X) - #define TR_ROTARY_ENCODERS "REa\0" - #define TR_ROTENC_SWITCHES "REa" -#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) - #define TR_ROTARY_ENCODERS "REa\0""REb\0" - #define TR_ROTENC_SWITCHES "REa""REb" -#else - #define TR_ROTARY_ENCODERS - #define TR_ROTENC_SWITCHES -#endif - - -#if defined(PCBFLAMENCO) - #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB\301""SC1""SC2""SC3""SC4""SC5""SC6""SE\300""SE\301""SF\300""SF-""SF\301" -#elif !defined(PCBTARANIS) && !defined(PCBHORUS) - #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" -#endif - -#define TR_ON_ONE_SWITCHES "På\0""Ett" - - -#if defined(PCBFLAMENCO) - #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "På\0""Ett" -#elif defined(PCBTARANIS) || defined(PCBHORUS) - // only special switches here - #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES -#else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES -#endif - -#if defined(HELI) - #define TR_CYC_VSRCRAW "CYK1""CYK2""CYK3" -#else - #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" -#endif - -#if defined(CPUARM) - #define TR_RESERVE_VSRCRAW "[--]" - #define TR_EXTRA_VSRCRAW "Batt""Tid\0" TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW "Tmr1""Tmr2""Tmr3" -#else - #define TR_EXTRA_VSRCRAW -#endif - -#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "Max\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW - -#define LEN_VTMRMODES "\003" -#define TR_VTMRMODES "Av\0""På\0""GAs""GA%""GAt" - -#define LEN_VTRAINERMODES "\022" -#define TR_VTRAINERMODES "Lärare/Uttag\0 ""Elev./Uttag\0 ""Lärare/SBUS-Modul\0""Lärare/CPPM-Modul\0""Lärare/Batteri\0" - -#define LEN_VFAILSAFE "\011" -#define TR_VFAILSAFE "Ej givet""Lås Servo""Anpassat\0""Pulsfritt""Mottagare" - -#if defined(MAVLINK) - #define LEN_MAVLINK_BAUDS "\006" - #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" - #define LEN_MAVLINK_AC_MODES "\011" - #define TR_MAVLINK_AC_MODES "Stabil ""Akrobat ""Lås Höjd ""Automat ""Guidad ""Hovra ""Flyg Hem ""Cirkla ""Håll Pos.""Landa ""OF Hovra ""Leksak A ""Leksak M ""OGILTIG " - #define LEN_MAVLINK_AP_MODES "\015" - #define TR_MAVLINK_AP_MODES "Manuell ""Cirkla ""Stabilisera ""Övning ""Fly by Wire A""Fly by Wire A""Automatisk ""Flyg Hem ""Hovra ""Guidad ""Initialiserar""OGILTIG " -#endif - -#define LEN_VSENSORTYPES "\010" -#define TR_VSENSORTYPES "Egen\0 ""Beräknad" - -#define LEN_VFORMULAS "\014" -#define TR_VFORMULAS "Addera\0 ""Medelvärde\0 ""Min\0 ""Max\0 ""Multiplicera""Totalsumma\0 ""Cell\0 ""Förbrukning ""Sträcka " - -#define LEN_VPREC "\004" -#define TR_VPREC "0.--""0.0 ""0.00" - -#define LEN_VCELLINDEX "\010" -#define TR_VCELLINDEX "Lägsta\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Högsta\0 ""Skillnad" - -// ZERO TERMINATED STRINGS -#if defined(COLORLCD) - #define INDENT " " - #define LEN_INDENT 3 - #define INDENT_WIDTH 12 - #define BREAKSPACE "\036" -#else - #define INDENT "\001" - #define LEN_INDENT 1 - #define INDENT_WIDTH (FW/2) - #define BREAKSPACE " " -#endif - -#if defined(PCBTARANIS) || defined(PCBFLAMENCO) || defined(PCBHORUS) - #define TR_ENTER "[ENTER]" -#else - #define TR_ENTER "[MENU]" -#endif - -#define TR_EXIT "[EXIT]" - -#if defined(PCBFLAMENCO) - #define TR_POPUPS TR_EXIT "\010" TR_ENTER -#elif defined(PCBTARANIS) - #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER -#else - #define TR_POPUPS TR_ENTER "\010" TR_EXIT - #define OFS_EXIT sizeof(TR_ENTER) -#endif - -#define TR_MENUWHENDONE CENTER "\011" TR_ENTER " Avslutar " -#define TR_FREE "kvar" -#define TR_DELETEMODEL "Radera Modell" -#define TR_COPYINGMODEL "Kopierar Modell " -#define TR_MOVINGMODEL "Flyttar Modell " -#define TR_LOADINGMODEL "Laddar Modell " -#define TR_NAME "Namn" -#define TR_MODELNAME "Modellnamn" -#define TR_PHASENAME "Lägesnamn " -#define TR_MIXNAME "Mixnamn " -#define TR_INPUTNAME "Inputnamn" -#if defined(PCBTARANIS) - #define TR_EXPONAME "Radnamn" -#else - #define TR_EXPONAME "Exponamn" -#endif -#define TR_BITMAP "Modellikon" -#define TR_TIMER TR("Timer","Timer ") -#define TR_ELIMITS TR("Gränser++","Utökade Gränser") -#define TR_ETRIMS TR("Trimmar++","Utökade Trimmar") -#define TR_TRIMINC TR("Trimning","Trimökning") -#define TR_DISPLAY_TRIMS "Display Trims" -#define TR_TTRACE TR("Följ Gas", INDENT "Följ Gas") -#define TR_TTRIM TR("Gastrim", INDENT "Gastrim") -#define TR_BEEPCTR TR("Cent.pip", "Centerpip") -#define TR_USE_GLOBAL_FUNCS TR("Glob. Funk","Globala Funktioner") -#if defined(PCBSKY9X) && defined(REVX) - #define TR_OUTPUT_TYPE INDENT "Output" -#endif -#define TR_PROTO TR(INDENT "Proto", INDENT "Protokoll") -#if defined(CPUARM) - #define TR_PPMFRAME INDENT "PPM-paket" -#else - #define TR_PPMFRAME "PPM-paket" -#endif -#define TR_MS "ms" -#define TR_SWITCH "Brytare" -#define TR_TRIMS "Trimmar" -#define TR_FADEIN "Tona In" -#define TR_FADEOUT "Tona Ut" -#define TR_DEFAULT "Standard" -#define TR_CHECKTRIMS CENTER "\006Kolla\012Trimmar" -#define OFS_CHECKTRIMS CENTER_OFS+(9*FW) -#define TR_SWASHTYPE "Swashtyp" -#define TR_COLLECTIVE "Kollektiv" -#define TR_AILERON "Skevroder-källa" -#define TR_ELEVATOR "Höjdroder-källa" -#define TR_SWASHRING "Swashring" -#define TR_ELEDIRECTION "HöJD Riktning" -#define TR_AILDIRECTION "SKEV Riktning" -#define TR_COLDIRECTION "PITCH Riktn. " -#define TR_MODE INDENT"Läge" -#define TR_NOFREEEXPO "Expo saknas!" -#define TR_NOFREEMIXER "Mixer saknas!" -#define TR_SOURCE INDENT"Källa" -#define TR_WEIGHT "Vikt" -#define TR_EXPO TR("Expo","Exponentiell") -#define TR_SIDE "Sida" -#define TR_DIFFERENTIAL "Diff." -#define TR_OFFSET INDENT"Offset" -#define TR_TRIM "Trim" -#define TR_DREX "DRex" -#define DREX_CHBOX_OFFSET 30 -#define TR_CURVE "Kurva" -#define TR_FLMODE TR("Läge","Flyglägen") -#define TR_MIXWARNING "Varning" -#define TR_OFF "Av " -#define TR_MULTPX "Multpx" -#define TR_DELAYDOWN "Dröj Ned" -#define TR_DELAYUP "Dröj Upp" -#define TR_SLOWDOWN "Trög Ned" -#define TR_SLOWUP "Trög Upp" -#define TR_MIXER "MIXAR" -#define TR_CV "KU" -#define TR_GV "GV" -#define TR_ACHANNEL "A\004kanal " -#define TR_RANGE INDENT"MinMax" -#define TR_CENTER INDENT "Center" -#define TR_BAR "Data" -#define TR_ALARM INDENT"Alarm" -#define TR_USRDATA "Användardata" -#define TR_BLADES INDENT"Blad" -#define TR_SCREEN "Skärm " -#define TR_SOUND_LABEL "Ljud " -#define TR_LENGTH INDENT"Tid" -#define TR_BEEP_LENGTH INDENT "Pip-längd" -#define TR_SPKRPITCH INDENT "Pip-ton" -#define TR_HAPTIC_LABEL "Vibrator" -#define TR_HAPTICSTRENGTH INDENT"Styrka" -#define TR_CONTRAST "Kontrast" -#define TR_ALARMS_LABEL "Alarm" -#define TR_BATTERY_RANGE "Batteri-MinMax" -#define TR_BATTERYWARNING INDENT"Batteri" -#define TR_INACTIVITYALARM INDENT"Inaktivitet" -#define TR_MEMORYWARNING INDENT"Lite Minne" -#define TR_ALARMWARNING INDENT"Ljud Av" -#define TR_RENAVIG "RotEnk Navig" -#define TR_THROTTLE_LABEL "Gas" -#define TR_THROTTLEREVERSE TR("Inv.Gas", INDENT "Inverterad Gas") -#define TR_TIMER_NAME INDENT "Namn" -#define TR_MINUTEBEEP INDENT "Minutpip" -#define TR_BEEPCOUNTDOWN INDENT "Nedräkning" -#define TR_PERSISTENT TR("Jämt på ", INDENT"Alltid På") -#define TR_BACKLIGHT_LABEL "Belysning" -#define TR_BLDELAY INDENT "Av efter" -#define TR_BLONBRIGHTNESS INDENT "På Ljusstyrka" -#define TR_BLOFFBRIGHTNESS INDENT "Av Ljusstyrka" -#define TR_SPLASHSCREEN "Startbild" -#define TR_BLCOLOR INDENT "Color" -#define TR_THROTTLEWARNING TR("Gasvarning", INDENT "Gasvarning") -#define TR_SWITCHWARNING TR("Bryt.varn.", INDENT "Brytarvarning") -#define TR_POTWARNING TR("Rattvarn.", INDENT "Rattvarning") -#define TR_TIMEZONE TR("Tidszon", "GPS Tidszon") -#define TR_ADJUST_RTC INDENT "Adjust RTC" -#define TR_GPS "GPS" -#define TR_RXCHANNELORD "Kanaler i RX" -#define TR_STICKS "Sticks" -#define TR_POTS "Pots" -#define TR_SWITCHES "Switches" -#define TR_SWITCHES_DELAY "Brytarfördröjning" -#define TR_SLAVE "Elev" -#define TR_MODESRC " Läge\004% Källa" -#define TR_MULTIPLIER "Styrka" -#define TR_CAL "Kalib." -#define TR_VTRIM "Trim- +" -#define TR_BG "BG:" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] to start" - #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" - #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " Startar " - #define TR_SETMIDPOINT "Centrera Allt" - #define TR_MOVESTICKSPOTS "Rör Spakar/Rattar" -#else - #define TR_MENUTOSTART CENTER "\011" TR_ENTER " Startar " - #define TR_SETMIDPOINT TR(CENTER "\012Centrera Allt",CENTER "\013Centrera Allt") - #define TR_MOVESTICKSPOTS TR(CENTER "\005Rör Spakar/Rattar",CENTER "\006Rör Spakar/Rattar") -#endif -#define TR_RXBATT "Rx Batt:" -#define TR_TXnRX "Tx:\0Rx:" -#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" -#define STR_US (STR_TMR1LATMAXUS+13) -#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" -#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" - -#if defined(CPUARM) - #define TR_TMIXMAXMS "Tmix max" - #define TR_FREESTACKMINB "Free Stack" -#else - #define TR_TMIXMAXMS "Tmix max\037\124ms" - #define TR_FREESTACKMINB "Free Stack\037\124b" -#endif - -#define TR_MENUTORESET CENTER TR_ENTER " Nollar" -#define TR_PPM_TRAINER "TR" -#define TR_CH "KN" -#define TR_MODEL "Modell" -#define TR_FP "FL" -#define TR_MIX "MIX" -#define TR_EEPROMLOWMEM "Minnesbrist" -#define TR_ALERT "\016OBS" -#define TR_PRESSANYKEYTOSKIP "Tryck ned en knapp" -#define TR_THROTTLENOTIDLE "Gasen är påslagen!" -#define TR_ALARMSDISABLED "Alarmen Avstängda!" -#define TR_PRESSANYKEY "Tryck ned en knapp" -#define TR_BADEEPROMDATA "Minnet kan inte tolkas" -#define TR_BAD_RADIO_DATA "Data från radion kan inte tolkas" -#define TR_EEPROMFORMATTING "Minnet Nollställs" -#define TR_STORAGE_FORMAT "SD-Lagring förbereds" -#define TR_EEPROMOVERFLOW "Minnesfel" -#define TR_MENURADIOSETUP "INSTÄLLNINGAR" -#define TR_MENUDATEANDTIME "DAG OCH TID" -#define TR_MENUTRAINER "TRAINER (PPM IN)" -#define TR_MENUGLOBALFUNCS "GLOBALA FUNKTIONER" -#define TR_MENUVERSION "VERSION" -#define TR_MENUDIAG TR("BRYTARE","TEST AV BRYTARE") -#define TR_MENUANA "ANALOGA VÄRDEN" -#define TR_MENUCALIBRATION "KALIBRERING" -#if defined(COLORLCD) - #define TR_TRIMS2OFFSETS "[Spara Trimvärden]" -#else - #define TR_TRIMS2OFFSETS "\006[Spara Trimvärden]" -#endif -#define TR_MENUMODELSEL TR("MODELL","VÄLJ MODELL") -#define TR_MENUSETUP TR("VÄRDEN","MODELLINSTÄLLNINGAR") -#define TR_MENUFLIGHTPHASE "FLYGLÄGE" -#define TR_MENUFLIGHTPHASES "FLYGLÄGEN" -#define TR_MENUHELISETUP "HELIKOPTER" - -#if defined(VIRTUALINPUTS) - #define TR_MENUINPUTS "INPUT" - #define TR_MENULIMITS "SERVON" -#else - #define TR_MENUINPUTS "SPAKAR" - #define TR_MENULIMITS "SERVON" -#endif - -#define TR_MENUCURVES "KURVOR" -#define TR_MENUCURVE "KURVA" -#define TR_MENULOGICALSWITCH "LOGISK BRYTARE" -#define TR_MENULOGICALSWITCHES "LOGISKA BRYTARE" -#define TR_MENUCUSTOMFUNC "BRYTARFUNKTIONER" -#define TR_MENUCUSTOMSCRIPTS "SPECIALKOD" -#define TR_MENUTELEMETRY "TELEMETRI" -#define TR_MENUTEMPLATES "MALLAR" -#define TR_MENUSTAT "STATISTIK" -#define TR_MENUDEBUG "DEBUG" -#if defined(CPUARM) - #define TR_RXNUM TR(INDENT "RxNum", INDENT "Mottagare Nr.") -#else - #define TR_RXNUM "RxNum" -#endif -#define TR_SYNCMENU "Synk [MENU]" -#define TR_LIMIT INDENT "Nivå" -#define TR_MINRSSI "Min Rssi" -#define TR_LATITUDE "Breddgrad" -#define TR_LONGITUDE "Längdgrad" -#define TR_GPSCOORD TR("GPS-Koordinater", "GPS-koordinatsystem") -#define TR_VARIO TR("Vario", "Variometer") -#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" -#define TR_CURRENT_CALIB "Kalib. Ström" -#define TR_VOLTAGE INDENT"Volt" -#define TR_CURRENT INDENT"Ampere" -#define TR_SELECT_MODEL "Välj Modell" -#define TR_CREATE_CATEGORY "Skapa Kategori" -#define TR_RENAME_CATEGORY "Byt Kat.namn" -#define TR_DELETE_CATEGORY "Ta Bort Kategori" -#define TR_CREATE_MODEL "Skapa Modell" -#define TR_DUPLICATE_MODEL "Dupl. Modell" -#define TR_CHANGE_CATEGORY "Change category" -#define TR_COPY_MODEL "Kopiera Modell" -#define TR_MOVE_MODEL "Flytta Modell" -#define TR_BACKUP_MODEL "Modell-backup" -#define TR_DELETE_MODEL "Ta Bort Modell" -#define TR_RESTORE_MODEL "Återställ Modell" -#define TR_SDCARD_ERROR "SDCARD-fel" -#define TR_NO_SDCARD "SDCARD saknas" -#define TR_SDCARD_FULL "SD-kort Fullt" -#define TR_INCOMPATIBLE "Inkompatibel" -#define TR_WARNING "VARNING" -#define TR_EEPROMWARN "EEPROM" -#define TR_STORAGE_WARNING "LAGRING" -#define TR_EEPROM_CONVERTING "EEPROM Konvertering" -#define TR_THROTTLEWARN "GAS" -#define TR_ALARMSWARN "ALARM" -#define TR_SWITCHWARN "BRYTARE" -#define TR_FAILSAFEWARN "FAILSAFE" -#define TR_NO_FAILSAFE "Failsafe ej given" -#define TR_KEYSTUCK "Knapp-fel" -#define TR_INVERT_THR TR("Invert.Gas?", "Invertera Gasen?") -#define TR_SPEAKER_VOLUME INDENT "Volym" -#define TR_LCD "LCD" -#define TR_BRIGHTNESS INDENT "Ljusstyrka" -#define TR_CPU_TEMP "CPU temp.\016>" -#define TR_CPU_CURRENT "Ström\022>" -#define TR_CPU_MAH "Förbrukn." -#define TR_COPROC "CoProc." -#define TR_COPROC_TEMP "MB temp. \016>" -#define TR_CAPAWARNING INDENT "Låg Kapacitet" -#define TR_TEMPWARNING TR(INDENT "Hög Temp ", INDENT "Hög Temperatur") -#define TR_FUNC "Funk" -#define TR_V1 "V1" -#define TR_V2 "V2" -#define TR_DURATION "Tidlängd" -#define TR_DELAY "Fördröj" -#define TR_SD_CARD "SD-kort" -#define TR_SDHC_CARD "SD/HC-kort" -#define TR_NO_SOUNDS_ON_SD "Inga ljud i SD" -#define TR_NO_MODELS_ON_SD "Ingen modell i SD" -#define TR_NO_BITMAPS_ON_SD "Ikoner saknas på SD" -#define TR_NO_SCRIPTS_ON_SD "Programkod saknas på SD" -#define TR_SCRIPT_SYNTAX_ERROR "Script syntax error" -#define TR_SCRIPT_PANIC "Script panic" -#define TR_SCRIPT_KILLED "Script killed" -#define TR_SCRIPT_ERROR "Unknown error" -#define TR_PLAY_FILE "Spela" -#define TR_DELETE_FILE "Radera" -#define TR_COPY_FILE "Kopia" -#define TR_RENAME_FILE "Byt namn" -#define TR_ASSIGN_BITMAP "Tilldela ikon" -#define TR_EXECUTE_FILE "Utför" -#define TR_REMOVED " raderad" -#define TR_SD_INFO "Information" -#define TR_SD_FORMAT "Format" -#define TR_NA "N/A" -#define TR_HARDWARE "Hårdvara" -#define TR_FORMATTING "Formaterar..." -#define TR_TEMP_CALIB "Temp. kalib." -#define TR_TIME "Tid " -#define TR_BAUDRATE "BT Baudrate" -#define TR_SD_INFO_TITLE "SD INFO" -#define TR_SD_TYPE "Typ: " -#define TR_SD_SPEED "Hastighet:" -#define TR_SD_SECTORS "Sektorer:" -#define TR_SD_SIZE "Strl:" -#define TR_TYPE INDENT "Typ " -#define TR_GLOBAL_VARS "Globala Variabler" -#define TR_GVARS "GLOBAL V." -#define TR_GLOBAL_VAR "Global Variabel" -#define TR_MENUGLOBALVARS "GLOBALA VARIABLER" -#define TR_OWN "Egen" -#define TR_DATE "Datum" -#define TR_ROTARY_ENCODER "R.Enks" -#define TR_CHANNELS_MONITOR "Kanalöversikt" -#define TR_MIXERS_MONITOR "MIXER-SKÄRM" -#define TR_PATH_TOO_LONG "För lång sökväg" -#define TR_VIEW_TEXT "Visa Text" -#define TR_FLASH_BOOTLOADER "Skriv BootLoader" -#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" -#define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" -#define TR_WRITING "\032Skriver..." -#define TR_CONFIRM_FORMAT "Formatera Minnet?" -#define TR_INTERNALRF "Intern Radio" -#define TR_EXTERNALRF "Extern Radiomodul" -#define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafeläge") -#define TR_FAILSAFESET "FailsafeInställning" -#define TR_MENUSENSOR "SENSOR" -#define TR_SENSOR "SENSOR" -#define TR_COUNTRYCODE "Landskod" -#define TR_VOICELANG "Röstspråk" -#define TR_UNITSSYSTEM "Enheter" -#define TR_EDIT "Redigera" -#define TR_INSERT_BEFORE "Addera Före" -#define TR_INSERT_AFTER "Addera Efter" -#define TR_COPY "Kopiera" -#define TR_MOVE "Flytta" -#define TR_PASTE "Infoga" -#define TR_DELETE "Radera" -#define TR_INSERT "Addera" -#define TR_RESET_FLIGHT "Nollställ Flygning" -#define TR_RESET_TIMER1 "Nollställ Timer1" -#define TR_RESET_TIMER2 "Nollställ Timer2" -#define TR_RESET_TIMER3 "Nollställ Timer3" -#define TR_RESET_TELEMETRY "Nollställ Telemetri" -#define TR_STATISTICS "Statistik" -#define TR_ABOUT_US "Om Oss" -#define TR_SETUP_SCREENS "Setup screens" -#define TR_AND_SWITCH "OCH Brytare" -#define TR_SF "BF" -#define TR_GF "GF" -#define TR_SPEAKER INDENT"Högtalare" -#define TR_BUZZER INDENT"Summer" -#define TR_BYTES "byte" -#define TR_MODULE_BIND TR("[Bnd]", "[Bind]") -#define TR_MODULE_RANGE TR("[Tst]", "[Testa]") -#define TR_RESET_BTN "[Nollställ]" -#define TR_SET "[Spara]" -#define TR_TRAINER "Trainer" -#define TR_ANTENNAPROBLEM CENTER "Fel på TX-antennen" -#define TR_MODELIDUSED TR("ID finns redan","ModellID används redan") -#define TR_MODULE INDENT "Modul" -#define TR_TELEMETRY_TYPE "Telemetrityp" -#define TR_TELEMETRY_SENSORS "Sensorer" -#define TR_VALUE "Värde" -#define TR_TOPLCDTIMER "Top LCD Timer" -#define TR_UNIT "Enhet" -#define TR_TELEMETRY_NEWSENSOR INDENT "Lägg till sensor..." -#define TR_CHANNELRANGE INDENT "Kanalområde" -#define TR_LOWALARM INDENT "Låg-alarm" -#define TR_CRITICALALARM INDENT "Kritiskt alarm" -#define TR_ENABLE_POPUP "Slå på Dialog" -#define TR_DISABLE_POPUP "Slå av Dialog" -#define TR_POPUP "Popup" -#define TR_MIN "Min" -#define TR_MAX "Max" -#define TR_CURVE_PRESET "Lutning..." -#define TR_PRESET "Lutning" -#define TR_MIRROR "Spegla" -#define TR_CLEAR "Töm" -#define TR_RESET "Nollställ" -#define TR_RESET_SUBMENU "Nollställ..." -#define TR_COUNT "Antal" -#define TR_PT "pt" -#define TR_PTS "pkt" -#define TR_SMOOTH "Mjuk" -#define TR_COPY_STICKS_TO_OFS "Spara spakar som subtrim" -#define TR_COPY_TRIMS_TO_OFS "Spara trimmar som subtrim" -#define TR_INCDEC "Inkr/Dekrement" -#define TR_GLOBALVAR "Globala Var" -#define TR_MIXSOURCE "Mixer Källa" -#define TR_CONSTANT "Konstant" -#define TR_PERSISTENT_MAH INDENT "Lagra mAh" -#define TR_PREFLIGHT "Startkontroller" -#define TR_CHECKLIST TR(INDENT "Checklista", INDENT "Visa Checklista") -#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") -#define TR_UART3MODE "Serieporten" -#define TR_SCRIPT "Programkod" -#define TR_INPUTS "Input" -#define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "\004[ENTER Lång] säkerhetskopiera EEPROM" -#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" -#define TR_CONFIRMRESET "Erase ALL models and settings?" -#define TR_TO_MANY_LUA_SCRIPTS "För många Lua-scripts!" - -#if defined(MAVLINK) - #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" - #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" - #define TR_MAVMENUSETUP_TITLE "MAVLINKINSTÄLLNINGAR" - #define TR_MAVLINK_BAUD_LABEL "Baudrate" - #define TR_MAVLINK_INFOS "INFOS" - #define TR_MAVLINK_MODE "LÄGE" - #define TR_MAVLINK_CUR_MODE "Nuvarande Läge" - #define TR_MAVLINK_ARMED "Osäkrad" - #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" - #define TR_MAVLINK_BATTERY_LABEL "Status för flygbatteri" - #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" - #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" - #define TR_MAVLINK_NAV_MENU_TITLE "NAV" - #define TR_MAVLINK_COURSE "Kurs" - #define TR_MAVLINK_HEADING "Riktning" - #define TR_MAVLINK_BEARING "Bäring" - #define TR_MAVLINK_ALTITUDE "Höjd" - #define TR_MAVLINK_GPS "GPS" - #define TR_MAVLINK_NO_FIX "EJ Lås" - #define TR_MAVLINK_SAT "SAT" - #define TR_MAVLINK_HDOP "HDOP" - #define TR_MAVLINK_LAT "LAT" - #define TR_MAVLINK_LON "LON" -#endif - -// Taranis column headers -#define TR_PHASES_HEADERS { " Namn ", " Brytare ", " Rodertrim ", " Höjdrodertrim ", " Gastrim ", " Skevrodertrim ", " Tona Upp ", " Tona Ned " } -#define TR_LIMITS_HEADERS { " Namn ", " Subtrim ", " Min ", " Max ", " Riktning ", " Kurva ", " PPM-center ", " Subtrim-läge " } -#define TR_CSW_HEADERS { " Funktion ", " V1 ", " V2 ", " V2 ", " OCH Brytare ", " Tidslängd ", " Fördröj " } -// About screen -#define TR_ABOUTUS "Om Oss" - -#define TR_ABOUT_OPENTX_1 "OpenTX är icke-kommersiell," -#define TR_ABOUT_OPENTX_2 "öppen programvara utan" -#define TR_ABOUT_OPENTX_3 "garantier som uvecklas helt" -#define TR_ABOUT_OPENTX_4 "ideellt. Stöd i form av" -#define TR_ABOUT_OPENTX_5 "donationer välkomnas!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Chefsutvecklare av OpenTX" -#define TR_ABOUT_BERTRAND_3 "Hjälputvecklare av Companion9x" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Kod och drivrutins-guru" -#define TR_ABOUT_MIKE_3 "Stor inspirationskälla" -#define TR_ABOUT_MIKE_4 "" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Chefsutvecklare av Companion9x" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funktionalitet, Användbarhet," -#define TR_ABOUT_ANDRE_3 "Felsökning, Dokumentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster för openRCforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "Utvecklare av www.open-tx.org" -#define TR_ABOUT_KJELL_3 "Utvecklare av OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Hjälputvecklare av Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Grafikdesigner" - -#if defined(PCBFLAMENCO) - #define TR_ABOUT_HARDWARE_1 "XXX" - #define TR_ABOUT_HARDWARE_2 "Hardware designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#elif defined(PCBTARANIS) || defined(PCBHORUS) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #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" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Ursprungsprojekt" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - -#define TR_CHR_SHORT 's' -#define TR_CHR_LONG 'l' -#define TR_CHR_TOGGLE 't' -#define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work - -#define TR_BEEP_VOLUME "Volym Pip" -#define TR_WAV_VOLUME "Volym Wav" -#define TR_VARIO_VOLUME "Volym Vario" -#define TR_BG_VOLUME "Volym Bg" - -#define TR_TOP_BAR "Titelraden" -#define TR_ALTITUDE INDENT "Höjd" -#define TR_SCALE "Skala" -#define TR_VIEW_CHANNELS "Visa Kanaler" -#define TR_VIEW_NOTES "Visa Noteringars" -#define TR_MODEL_SELECT "Välj Modell" -#define TR_MODS_FORBIDDEN "Modifikationer förbjudna!" -#define TR_UNLOCKED "Olåst" -#define TR_ID "ID" -#define TR_PRECISION "Precision" -#define TR_RATIO "Ratio" -#define TR_FORMULA "Formel" -#define TR_CELLINDEX "Cell index" -#define TR_LOGS "Logga" -#define TR_OPTIONS "Options" - -#define TR_ALTSENSOR "Höjdsensor" -#define TR_CELLSENSOR "Cell sensor" -#define TR_GPSSENSOR "GPS sensor" -#define TR_CURRENTSENSOR "Sensor" -#define TR_AUTOOFFSET "Auto Offset" -#define TR_ONLYPOSITIVE "Positiv" -#define TR_FILTER "Filter" -#define TR_TELEMETRYFULL "Alla telemetriplatser upptagna!" -//TODO: translation -#define TR_INVERTED_SERIAL INDENT "Invert" -#define TR_IGNORE_INSTANCE TR(INDENT "Inst.fel", INDENT "Hantera Instansfel") -#define TR_DISCOVER_SENSORS INDENT "Sök nya sensorer" -#define TR_STOP_DISCOVER_SENSORS INDENT "Avbryt sökning" -#define TR_DELETE_ALL_SENSORS INDENT "Ta bort alla sensorer" -#define TR_CONFIRMDELETE "Ta bort alla?" -#define TR_SELECT_WIDGET "Select widget" -#define TR_REMOVE_WIDGET "Remove widget" -#define TR_WIDGET_SETTINGS "Widget settings" -#define TR_REMOVE_SCREEN "Remove screen" - -#define TR_MENU_INPUTS "\314Inputs" -#define TR_MENU_LUA "\322Lua scripts" -#define TR_MENU_STICKS "\307Spakars" -#define TR_MENU_POTS "\310Rattar" -#define TR_MENU_MAX "\315MAX" -#define TR_MENU_HELI "\316Cyclic" -#define TR_MENU_TRIMS "\313Trimm" -#define TR_MENU_SWITCHES "\312Brytare" -#define TR_MENU_LOGICAL_SWITCHES "\312Logiska Brytare" -#define TR_MENU_TRAINER "\317Trainer" -#define TR_MENU_CHANNELS "\320Servon" -#define TR_MENU_GVARS "\311GVars" -#define TR_MENU_TELEMETRY "\321Telemetri" -#define TR_MENU_OTHER "Annat" -#define TR_MENU_INVERT "Invertera" - -#define ZSTR_RSSI "RSSI" -#define ZSTR_SWR "SWR" -#define ZSTR_A1 "A1" -#define ZSTR_A2 "A2" -#define ZSTR_A3 "A3" -#define ZSTR_A4 "A4" -#define ZSTR_BATT "RxBt" -#define ZSTR_ALT "Alt" -#define ZSTR_TEMP1 "Tmp1" -#define ZSTR_TEMP2 "Tmp2" -#define ZSTR_RPM "RPM" -#define ZSTR_FUEL "Fuel" -#define ZSTR_VSPD "VSpd" -#define ZSTR_ACCX "AccX" -#define ZSTR_ACCY "AccY" -#define ZSTR_ACCZ "AccZ" -#define ZSTR_CURR "Curr" -#define ZSTR_VFAS "VFAS" -#define ZSTR_ASPD "ASpd" -#define ZSTR_GSPD "GSpd" -#define ZSTR_HDG "Hdg" -#define ZSTR_CELLS "Cels" -#define ZSTR_GPSALT "GAlt" -#define ZSTR_GPSDATETIME "Date" -#define ZSTR_GPS "GPS" -#define ZSTR_BATT1_VOLTAGE "RB1V" -#define ZSTR_BATT2_VOLTAGE "RB2V" -#define ZSTR_BATT1_CURRENT "RB1A" -#define ZSTR_BATT2_CURRENT "RB2A" -#define ZSTR_BATT1_CONSUMPTION "RB1C" -#define ZSTR_BATT2_CONSUMPTION "RB2C" -#define ZSTR_RB_STATE "RBS" -#define ZSTR_CHANS_STATE "RBCS" +/* + * 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. + * + */ + +// SE translations author: Kjell Kernen + +/* + * !!!!! DO NOT EDIT se.h - EDIT se.h.txt INSTEAD !!!!!!! + * + * In order to make translations easier se.h.txt is parsed and national + * characters are replaced by bitmap codes. The result is se.h. + * + * See translate.py in the util folder for the list of character codes + * + * !!!!! DO NOT EDIT se.h - EDIT se.h.txt INSTEAD !!!!!!! + */ + +/* + * Formatting octal codes available in TR_ strings: + * \037\x -sets LCD x-coord (x value in octal) + * \036 -newline + * \035 -horizontal tab (ARM only) + * \001 to \034 -extended spacing (value * FW/2) + * \0 -ends current string + */ + + +// NON ZERO TERMINATED STRINGS +#define LEN_OFFON "\003" +#define TR_OFFON "Av ""På\0" + +#define LEN_MMMINV "\003" +#define TR_MMMINV "---""INV" + +#define LEN_NCHANNELS "\004" +#define TR_NCHANNELS "\0014KN\0016KN\0018KN10KN12KN14KN16KN" + +#define LEN_VBEEPMODE "\005" +#define TR_VBEEPMODE "Tyst\0""Alarm""EjKnp""Alla\0" + +#define LEN_VBEEPLEN "\005" +#define TR_VBEEPLEN "0====""=0===""==0==""===0=""====0" + +#define LEN_VRENAVIG "\003" +#define TR_VRENAVIG "No REaREb" + +#define LEN_VBLMODE TR("\005", "\010") +#define TR_VBLMODE TR("Av\0 ""Knapp""Spak ""Allt ""På\0 ", "Av\0 ""Knappar ""Spakar\0 ""Allt\0 ""På\0 ") + +#define LEN_TRNMODE "\002" +#define TR_TRNMODE "Av""+="":=" + +#define LEN_TRNCHN "\003" +#define TR_TRNCHN "KN1KN2KN3KN4" + +#define LEN_UART3MODES "\022" +#define TR_UART3MODES "Av\0 ""Spegling av S-Port""Telemetri\0 ""SBUS Trainer\0 ""Debug\0" + +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "Ingen\0""Flipp ""2Pos\0 ""3Pos\0" + +#define LEN_POTTYPES "\020" +#define TR_POTTYPES "Ingen\0 ""Mittläges-pot\0 ""Flerlägesväljare""Potentiometer\0" + +#define LEN_SLIDERTYPES "\006" +#define TR_SLIDERTYPES "Ingen\0""Slider" + +#define LEN_DATETIME "\005" +#define TR_DATETIME "DAG: ""TID: " + +#define LEN_VLCD "\006" +#define TR_VLCD "NormalOptrex" + +#define LEN_VPERSISTENT "\014" +#define TR_VPERSISTENT "Av\0 ""Flygning\0 ""Nolla Själv\0" + +#define LEN_COUNTRYCODES TR("\002", "\007") +#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0") + +#define LEN_TARANIS_PROTOCOLS "\004" +#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF" + +#define LEN_XJT_PROTOCOLS "\004" +#define TR_XJT_PROTOCOLS "Av\0 ""D16\0""D8\0 ""LR12" + +#define LEN_DSM_PROTOCOLS "\004" +#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" + +#define LEN_VTRIMINC TR("\006","\014") +#define TR_VTRIMINC TR("Expo\0 ""xFin\0 ""Fin\0 ""Medium""Grov\0 ","Exponentiell""Extra Fin\0 ""Fin\0 ""Medium\0 ""Grov\0 ") + +#define LEN_VDISPLAYTRIMS "\005" +#define TR_VDISPLAYTRIMS "Nej\0 ""Ändra""Ja\0 " + +#define LEN_VBEEPCOUNTDOWN "\007" +#define TR_VBEEPCOUNTDOWN "Tyst\0 Pip\0 Röst\0 Vibrera" + +#define LEN_VVARIOCENTER "\004" +#define TR_VVARIOCENTER "Pip\0""Tyst" + +#define LEN_CURVE_TYPES "\006" +#define TR_CURVE_TYPES "Normal""Egen\0 " + +#define LEN_RETA123 "\001" + +#if defined(PCBFLAMENCO) + #define TR_RETA123 "RHGS123HV" +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_RETA123 "RHGS1234HVHV" +#elif defined(PCBTARANIS) || defined(REVX) + #define TR_RETA123 "RHGS123HV" +#elif defined(PCBSKY9X) + #define TR_RETA123 "RHGS123a" +#elif defined(CPUM2560) + #define TR_RETA123 "RHGS123ab" +#else + #define TR_RETA123 "RHGS123" +#endif + +#define LEN_VPROTOS "\006" + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" +#else + #define TR_PXX +#endif + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" +#else + #define TR_DSM2 +#endif + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" +#else + #define TR_IRPROTOS +#endif + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS + +#define LEN_POSNEG "\003" +#define TR_POSNEG "Pos""Neg" + +#if defined(PCBSKY9X) && defined(REVX) + #define LEN_VOUTPUT_TYPE "\011" + #define TR_VOUTPUT_TYPE "OpenDrain""PushPull\0" +#endif + +#define LEN_VCURVEFUNC "\003" +#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|" + +#define LEN_VMLTPX "\010" +#define TR_VMLTPX "Addera ""Förstärk""Ersätt " + +#define LEN_VMLTPX2 "\002" +#define TR_VMLTPX2 "+=""*="":=" + +#define LEN_VMIXTRIMS "\003" +#define TR_VMIXTRIMS "Av\0""På\0""Rod""Hjd""Gas""Ske" + +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Seg\0 " + #define TR_CSWRANGE "Vidd\0" + #define TR_CSWSTAY "Kant\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Seg\0 " + #if defined(CPUARM) + #define TR_CSWRANGE "Vidd\0" + #define TR_CSWSTAY "Kant\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + +#if defined(CPUARM) + #define TR_CSWEQUAL "a=x\0 " +#else + #define TR_CSWEQUAL +#endif + +#define LEN_VCSWFUNC "\005" +#if defined(CPUARM) +#define TR_VCSWFUNC "---\0 " TR_CSWEQUAL "a~x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a= 212 + #define TR_SF_SAFETY "Säkra \0 " +#elif defined(OVERRIDE_CHANNEL_FUNCTION) + #define TR_SF_SAFETY "Säkra \0 " +#else + #define TR_SF_SAFETY "---\0 " +#endif + +#if defined(PCBTARANIS) + #define TR_SF_SCREENSHOT "Skärmbild" +#else + #define TR_SF_SCREENSHOT +#endif + +#define TR_SF_RESERVE "[reserve]\0" + +#if defined(CPUARM) + #define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_SCREENSHOT TR_SF_TEST +#elif defined(PCBGRUVIN9X) + #define TR_VFSWFUNC TR_SF_SAFETY "Trainer \0 ""Sätt Trim\0""Nollställ\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_TEST +#else + #define TR_VFSWFUNC TR_SF_SAFETY "Trainer \0 ""Sätt Trim\0""Nollställ\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "Belysning\0" TR_SF_TEST +#endif + +#define LEN_VFSWRESET TR("\004", "\011") + +#if defined(FRSKY) + #define TR_FSW_RESET_TELEM TR("Telm", "Telemetry") +#else + #define TR_FSW_RESET_TELEM +#endif + +#if ROTARY_ENCODERS == 2 + #define TR_FSW_RESET_ROTENC TR("REa\0""REb\0", "RotEnk A\0""RotEnk B\0") +#elif ROTARY_ENCODERS == 1 + #define TR_FSW_RESET_ROTENC TR("R.E.", "RotEnk\0 ") +#else + #define TR_FSW_RESET_ROTENC +#endif + +#if defined(PCBTARANIS) + #define TR_FSW_RESET_TIMERS "Timer 1\0 ""Timer 2\0 ""Timer 3\0 " +#elif defined(CPUARM) + #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2""Tmr3" +#else + #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2" +#endif + +#define TR_VFSWRESET TR(TR_FSW_RESET_TIMERS "All\0" TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC, TR_FSW_RESET_TIMERS "Alla\0 " TR_FSW_RESET_TELEM TR_FSW_RESET_ROTENC) + +#define LEN_FUNCSOUNDS TR("\004", "\006") +#define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Beep1 ""Beep2 ""Beep3 ""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") + +#define LEN_VTELEMCHNS TR("\004", "\005") + +#if defined(CPUARM) + #define TR_TELEM_RESERVE TR("[--]", "[---]") + #define TR_TELEM_TIME TR("Tid\0", "Tid\0 ") + #define TR_SWR TR("SWR\0", "SWR\0 ") + #define TR_RX_BATT TR("[NA]", "[NA]\0") + #define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ") + #define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ") +#else + #define TR_TELEM_RESERVE + #define TR_TELEM_TIME + #define TR_SWR + #define TR_RX_BATT + #define TR_A3_A4 + #define TR_A3_A4_MIN +#endif + +#define TR_ASPD_MAX TR("ASp+", "ASpd+") + +#if defined(PCBTARANIS) + #define TR_TELEM_RSSI_RX "RSSI\0" +#else + #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") +#endif + +#if defined(CPUARM) + #define TR_TELEM_TIMERS TR("Tmr1""Tmr2""Tmr3", "Tmr1\0""Tmr2\0""Tmr3\0") +#else + #define TR_TELEM_TIMERS TR("Tmr1""Tmr2", "Tmr1\0""Tmr2\0") +#endif + +#if LCD_W >= 212 + #define TR_VTELEMCHNS "---\0 ""Batt\0" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Cells""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Tid\0 " +#else + #define TR_VTELEMCHNS "---\0""Batt" TR_TELEM_TIME TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_TIMERS TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Tid\0" +#endif + +#define LENGTH_UNIT_IMP "fot" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + +#if defined(CPUARM) + #define LEN_VUNITSSYSTEM TR("\006", "\010") + #define TR_VUNITSSYSTEM TR("Metri.""Imper.", "Metriska""Imperial") + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" +#else + #if defined(IMPERIAL_UNITS) + #define LENGTH_UNIT LENGTH_UNIT_IMP + #define SPEED_UNIT SPEED_UNIT_IMP + #else + #define LENGTH_UNIT LENGTH_UNIT_METR + #define SPEED_UNIT SPEED_UNIT_METR + #endif + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "V\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 " +#endif + +#define STR_V (STR_VTELEMUNIT+1) +#define STR_A (STR_VTELEMUNIT+4) + +#define LEN_VALARM "\003" +#define TR_VALARM "---""Gul""Ora""Röd" + +#define LEN_VALARMFN "\001" +#define TR_VALARMFN "<>" + +#define LEN_VTELPROTO "\007" +#define TR_VTELPROTO "---\0 ""Hub\0 ""WSHHög." + +#if defined(CPUARM) + #define LEN_AMPSRC TR("\003", "\007") + #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") + #define LEN_VOLTSRC TR("\003", "\007") + #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") +#else + #define LEN_AMPSRC TR("\003", "\007") + #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ") +#endif + +#define LEN_VARIOSRC "\005" +#if defined(FRSKY_SPORT) + #define TR_VARIOSRC "Vario""A1\0 ""A2\0" +#else + #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" +#endif + +#if defined(CPUARM) + #define LEN_VTELEMSCREENTYPE "\007" + #define TR_VTELEMSCREENTYPE "Inget\0 ""Siffror""Staplar""Script\0" +#else + #define LEN_VTELEMSCREENTYPE "\007" + #define TR_VTELEMSCREENTYPE "Siffror""Staplar" +#endif + +#define LEN_GPSFORMAT "\004" +#define TR_GPSFORMAT "HMS NMEA" + +#define LEN2_VTEMPLATES 13 +#define LEN_VTEMPLATES "\015" +#define TR_VTEMPLATES "Nolla Mixar\0\0""Enkel 4kanal\0""Gasklippning\0""V-Stjärt \0""Deltavinge \0""eCCPM \0""Helikopter \0""Servotest \0" + +#define LEN_VSWASHTYPE "\004" +#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" + +#if defined(PCBHORUS) +#define LEN_VKEYS "\006" +#define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Upp\0 ""Ned\0 ""Höger\0""Vänst" +#elif defined(PCBTARANIS) +#define LEN_VKEYS "\005" +#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" +#else +#define LEN_VKEYS "\005" +#define TR_VKEYS "Menu\0""Exit\0""Ned\0 ""Upp\0 ""Höger""Vänst" +#endif + +#define LEN_VRENCODERS "\003" +#define TR_VRENCODERS "REa""REb" + +#define LEN_VSWITCHES "\003" +#define LEN_VSRCRAW "\004" + + +#define TR_STICKS_VSRCRAW TR("Rod\0""Hjd\0""Gas\0""Ske\0", "\307Rod""\307Hjd""\307Gas""\307Ske") +#define TR_TRIMS_VSRCRAW TR("TrmR""TrmH""TrmG""TrmS", "\313Rod""\313Hjd""\313Gas""\313Ske") + +#if defined(PCBHORUS) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#elif defined(PCBFLAMENCO) + #define TR_POTS_VSRCRAW "SD\0 ""LS\0 ""RS\0 " + #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SE\0 ""SF\0 " +#elif defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" +#else + #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " + #define TR_SW_VSRCRAW "3Pos" + #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" +#endif + +#if defined(CPUARM) + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" +#else + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" +#endif + +#define TR_TRIMS_SWITCHES TR("tRv""tRh""tHn""tHu""tGn""tGu""tSv""tSh", "\313Rv""\313Rh""\313Hn""\313Hu""\313Gn""\313Gu""\313Sv""\313Sh") + +#if defined(PCBSKY9X) + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" +#else + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + + +#if defined(PCBFLAMENCO) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB\301""SC1""SC2""SC3""SC4""SC5""SC6""SE\300""SE\301""SF\300""SF-""SF\301" +#elif !defined(PCBTARANIS) && !defined(PCBHORUS) + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#define TR_ON_ONE_SWITCHES "På\0""Ett" + + +#if defined(PCBFLAMENCO) + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "På\0""Ett" +#elif defined(PCBTARANIS) || defined(PCBHORUS) + // only special switches here + #define TR_VSWITCHES "---" TR_TRIMS_SWITCHES TR_ON_ONE_SWITCHES +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW TR_ON_ONE_SWITCHES +#endif + +#if defined(HELI) + #define TR_CYC_VSRCRAW "CYK1""CYK2""CYK3" +#else + #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" +#endif + +#if defined(CPUARM) + #define TR_RESERVE_VSRCRAW "[--]" + #define TR_EXTRA_VSRCRAW "Batt""Tid\0" TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW "Tmr1""Tmr2""Tmr3" +#else + #define TR_EXTRA_VSRCRAW +#endif + +#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "Max\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW + +#define LEN_VTMRMODES "\003" +#define TR_VTMRMODES "Av\0""På\0""GAs""GA%""GAt" + +#define LEN_VTRAINERMODES "\022" +#define TR_VTRAINERMODES "Lärare/Uttag\0 ""Elev./Uttag\0 ""Lärare/SBUS-Modul\0""Lärare/CPPM-Modul\0""Lärare/Batteri\0" + +#define LEN_VFAILSAFE "\011" +#define TR_VFAILSAFE "Ej givet""Lås Servo""Anpassat\0""Pulsfritt""Mottagare" + +#if defined(MAVLINK) + #define LEN_MAVLINK_BAUDS "\006" + #define TR_MAVLINK_BAUDS "4800 ""9600 ""14400 ""19200 ""38400 ""57600 ""76800 ""115200" + #define LEN_MAVLINK_AC_MODES "\011" + #define TR_MAVLINK_AC_MODES "Stabil ""Akrobat ""Lås Höjd ""Automat ""Guidad ""Hovra ""Flyg Hem ""Cirkla ""Håll Pos.""Landa ""OF Hovra ""Leksak A ""Leksak M ""OGILTIG " + #define LEN_MAVLINK_AP_MODES "\015" + #define TR_MAVLINK_AP_MODES "Manuell ""Cirkla ""Stabilisera ""Övning ""Fly by Wire A""Fly by Wire A""Automatisk ""Flyg Hem ""Hovra ""Guidad ""Initialiserar""OGILTIG " +#endif + +#define LEN_VSENSORTYPES "\010" +#define TR_VSENSORTYPES "Egen\0 ""Beräknad" + +#define LEN_VFORMULAS "\014" +#define TR_VFORMULAS "Addera\0 ""Medelvärde\0 ""Min\0 ""Max\0 ""Multiplicera""Totalsumma\0 ""Cell\0 ""Förbrukning ""Sträcka " + +#define LEN_VPREC "\004" +#define TR_VPREC "0.--""0.0 ""0.00" + +#define LEN_VCELLINDEX "\010" +#define TR_VCELLINDEX "Lägsta\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Högsta\0 ""Skillnad" + +// ZERO TERMINATED STRINGS +#if defined(COLORLCD) + #define INDENT " " + #define LEN_INDENT 3 + #define INDENT_WIDTH 12 + #define BREAKSPACE "\036" +#else + #define INDENT "\001" + #define LEN_INDENT 1 + #define INDENT_WIDTH (FW/2) + #define BREAKSPACE " " +#endif + +#if defined(PCBTARANIS) || defined(PCBFLAMENCO) || defined(PCBHORUS) + #define TR_ENTER "[ENTER]" +#else + #define TR_ENTER "[MENU]" +#endif + +#define TR_EXIT "[EXIT]" + +#if defined(PCBFLAMENCO) + #define TR_POPUPS TR_EXIT "\010" TR_ENTER +#elif defined(PCBTARANIS) + #define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER +#else + #define TR_POPUPS TR_ENTER "\010" TR_EXIT + #define OFS_EXIT sizeof(TR_ENTER) +#endif + +#define TR_MENUWHENDONE CENTER "\011" TR_ENTER " Avslutar " +#define TR_FREE "kvar" +#define TR_DELETEMODEL "Radera Modell" +#define TR_COPYINGMODEL "Kopierar Modell " +#define TR_MOVINGMODEL "Flyttar Modell " +#define TR_LOADINGMODEL "Laddar Modell " +#define TR_NAME "Namn" +#define TR_MODELNAME "Modellnamn" +#define TR_PHASENAME "Lägesnamn " +#define TR_MIXNAME "Mixnamn " +#define TR_INPUTNAME "Inputnamn" +#if defined(PCBTARANIS) + #define TR_EXPONAME "Radnamn" +#else + #define TR_EXPONAME "Exponamn" +#endif +#define TR_BITMAP "Modellikon" +#define TR_TIMER TR("Timer","Timer ") +#define TR_ELIMITS TR("Gränser++","Utökade Gränser") +#define TR_ETRIMS TR("Trimmar++","Utökade Trimmar") +#define TR_TRIMINC TR("Trimning","Trimökning") +#define TR_DISPLAY_TRIMS "Display Trims" +#define TR_TTRACE TR("Följ Gas", INDENT "Följ Gas") +#define TR_TTRIM TR("Gastrim", INDENT "Gastrim") +#define TR_BEEPCTR TR("Cent.pip", "Centerpip") +#define TR_USE_GLOBAL_FUNCS TR("Glob. Funk","Globala Funktioner") +#if defined(PCBSKY9X) && defined(REVX) + #define TR_OUTPUT_TYPE INDENT "Output" +#endif +#define TR_PROTO TR(INDENT "Proto", INDENT "Protokoll") +#if defined(CPUARM) + #define TR_PPMFRAME INDENT "PPM-paket" +#else + #define TR_PPMFRAME "PPM-paket" +#endif +#define TR_MS "ms" +#define TR_SWITCH "Brytare" +#define TR_TRIMS "Trimmar" +#define TR_FADEIN "Tona In" +#define TR_FADEOUT "Tona Ut" +#define TR_DEFAULT "Standard" +#define TR_CHECKTRIMS CENTER "\006Kolla\012Trimmar" +#define OFS_CHECKTRIMS CENTER_OFS+(9*FW) +#define TR_SWASHTYPE "Swashtyp" +#define TR_COLLECTIVE "Kollektiv" +#define TR_AILERON "Skevroder-källa" +#define TR_ELEVATOR "Höjdroder-källa" +#define TR_SWASHRING "Swashring" +#define TR_ELEDIRECTION "HöJD Riktning" +#define TR_AILDIRECTION "SKEV Riktning" +#define TR_COLDIRECTION "PITCH Riktn. " +#define TR_MODE INDENT"Läge" +#define TR_NOFREEEXPO "Expo saknas!" +#define TR_NOFREEMIXER "Mixer saknas!" +#define TR_SOURCE INDENT"Källa" +#define TR_WEIGHT "Vikt" +#define TR_EXPO TR("Expo","Exponentiell") +#define TR_SIDE "Sida" +#define TR_DIFFERENTIAL "Diff." +#define TR_OFFSET INDENT"Offset" +#define TR_TRIM "Trim" +#define TR_DREX "DRex" +#define DREX_CHBOX_OFFSET 30 +#define TR_CURVE "Kurva" +#define TR_FLMODE TR("Läge","Flyglägen") +#define TR_MIXWARNING "Varning" +#define TR_OFF "Av " +#define TR_MULTPX "Multpx" +#define TR_DELAYDOWN "Dröj Ned" +#define TR_DELAYUP "Dröj Upp" +#define TR_SLOWDOWN "Trög Ned" +#define TR_SLOWUP "Trög Upp" +#define TR_MIXER "MIXAR" +#define TR_CV "KU" +#define TR_GV "GV" +#define TR_ACHANNEL "A\004kanal " +#define TR_RANGE INDENT"MinMax" +#define TR_CENTER INDENT "Center" +#define TR_BAR "Data" +#define TR_ALARM INDENT"Alarm" +#define TR_USRDATA "Användardata" +#define TR_BLADES INDENT"Blad" +#define TR_SCREEN "Skärm " +#define TR_SOUND_LABEL "Ljud " +#define TR_LENGTH INDENT"Tid" +#define TR_BEEP_LENGTH INDENT "Pip-längd" +#define TR_SPKRPITCH INDENT "Pip-ton" +#define TR_HAPTIC_LABEL "Vibrator" +#define TR_HAPTICSTRENGTH INDENT"Styrka" +#define TR_CONTRAST "Kontrast" +#define TR_ALARMS_LABEL "Alarm" +#define TR_BATTERY_RANGE "Batteri-MinMax" +#define TR_BATTERYWARNING INDENT"Batteri" +#define TR_INACTIVITYALARM INDENT"Inaktivitet" +#define TR_MEMORYWARNING INDENT"Lite Minne" +#define TR_ALARMWARNING INDENT"Ljud Av" +#define TR_RENAVIG "RotEnk Navig" +#define TR_THROTTLE_LABEL "Gas" +#define TR_THROTTLEREVERSE TR("Inv.Gas", INDENT "Inverterad Gas") +#define TR_TIMER_NAME INDENT "Namn" +#define TR_MINUTEBEEP INDENT "Minutpip" +#define TR_BEEPCOUNTDOWN INDENT "Nedräkning" +#define TR_PERSISTENT TR("Jämt på ", INDENT"Alltid På") +#define TR_BACKLIGHT_LABEL "Belysning" +#define TR_BLDELAY INDENT "Av efter" +#define TR_BLONBRIGHTNESS INDENT "På Ljusstyrka" +#define TR_BLOFFBRIGHTNESS INDENT "Av Ljusstyrka" +#define TR_SPLASHSCREEN "Startbild" +#define TR_BLCOLOR INDENT "Color" +#define TR_THROTTLEWARNING TR("Gasvarning", INDENT "Gasvarning") +#define TR_SWITCHWARNING TR("Bryt.varn.", INDENT "Brytarvarning") +#define TR_POTWARNING TR("Rattvarn.", INDENT "Rattvarning") +#define TR_TIMEZONE TR("Tidszon", "GPS Tidszon") +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" +#define TR_RXCHANNELORD "Kanaler i RX" +#define TR_STICKS "Sticks" +#define TR_POTS "Pots" +#define TR_SWITCHES "Switches" +#define TR_SWITCHES_DELAY "Brytarfördröjning" +#define TR_SLAVE "Elev" +#define TR_MODESRC " Läge\004% Källa" +#define TR_MULTIPLIER "Styrka" +#define TR_CAL "Kalib." +#define TR_VTRIM "Trim- +" +#define TR_BG "BG:" +#if defined(PCBHORUS) + #define TR_MENUTOSTART "Press [Enter] to start" + #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" + #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#elif defined(COLORLCD) + #define TR_MENUTOSTART TR_ENTER " Startar " + #define TR_SETMIDPOINT "Centrera Allt" + #define TR_MOVESTICKSPOTS "Rör Spakar/Rattar" +#else + #define TR_MENUTOSTART CENTER "\011" TR_ENTER " Startar " + #define TR_SETMIDPOINT TR(CENTER "\012Centrera Allt",CENTER "\013Centrera Allt") + #define TR_MOVESTICKSPOTS TR(CENTER "\005Rör Spakar/Rattar",CENTER "\006Rör Spakar/Rattar") +#endif +#define TR_RXBATT "Rx Batt:" +#define TR_TXnRX "Tx:\0Rx:" +#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_TMR1LATMAXUS "Tmr1Lat max\037\124us" +#define STR_US (STR_TMR1LATMAXUS+13) +#define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" +#define TR_TMR1JITTERUS "Tmr1 Jitter\037\124us" + +#if defined(CPUARM) + #define TR_TMIXMAXMS "Tmix max" + #define TR_FREESTACKMINB "Free Stack" +#else + #define TR_TMIXMAXMS "Tmix max\037\124ms" + #define TR_FREESTACKMINB "Free Stack\037\124b" +#endif + +#define TR_MENUTORESET CENTER TR_ENTER " Nollar" +#define TR_PPM_TRAINER "TR" +#define TR_CH "KN" +#define TR_MODEL "Modell" +#define TR_FP "FL" +#define TR_MIX "MIX" +#define TR_EEPROMLOWMEM "Minnesbrist" +#define TR_ALERT "\016OBS" +#define TR_PRESSANYKEYTOSKIP "Tryck ned en knapp" +#define TR_THROTTLENOTIDLE "Gasen är påslagen!" +#define TR_ALARMSDISABLED "Alarmen Avstängda!" +#define TR_PRESSANYKEY "Tryck ned en knapp" +#define TR_BADEEPROMDATA "Minnet kan inte tolkas" +#define TR_BAD_RADIO_DATA "Data från radion kan inte tolkas" +#define TR_EEPROMFORMATTING "Minnet Nollställs" +#define TR_STORAGE_FORMAT "SD-Lagring förbereds" +#define TR_EEPROMOVERFLOW "Minnesfel" +#define TR_MENURADIOSETUP "INSTÄLLNINGAR" +#define TR_MENUDATEANDTIME "DAG OCH TID" +#define TR_MENUTRAINER "TRAINER (PPM IN)" +#define TR_MENUGLOBALFUNCS "GLOBALA FUNKTIONER" +#define TR_MENUVERSION "VERSION" +#define TR_MENUDIAG TR("BRYTARE","TEST AV BRYTARE") +#define TR_MENUANA "ANALOGA VÄRDEN" +#define TR_MENUCALIBRATION "KALIBRERING" +#if defined(COLORLCD) + #define TR_TRIMS2OFFSETS "[Spara Trimvärden]" +#else + #define TR_TRIMS2OFFSETS "\006[Spara Trimvärden]" +#endif +#define TR_MENUMODELSEL TR("MODELL","VÄLJ MODELL") +#define TR_MENUSETUP TR("VÄRDEN","MODELLINSTÄLLNINGAR") +#define TR_MENUFLIGHTPHASE "FLYGLÄGE" +#define TR_MENUFLIGHTPHASES "FLYGLÄGEN" +#define TR_MENUHELISETUP "HELIKOPTER" + +#if defined(VIRTUALINPUTS) + #define TR_MENUINPUTS "INPUT" + #define TR_MENULIMITS "SERVON" +#else + #define TR_MENUINPUTS "SPAKAR" + #define TR_MENULIMITS "SERVON" +#endif + +#define TR_MENUCURVES "KURVOR" +#define TR_MENUCURVE "KURVA" +#define TR_MENULOGICALSWITCH "LOGISK BRYTARE" +#define TR_MENULOGICALSWITCHES "LOGISKA BRYTARE" +#define TR_MENUCUSTOMFUNC "BRYTARFUNKTIONER" +#define TR_MENUCUSTOMSCRIPTS "SPECIALKOD" +#define TR_MENUTELEMETRY "TELEMETRI" +#define TR_MENUTEMPLATES "MALLAR" +#define TR_MENUSTAT "STATISTIK" +#define TR_MENUDEBUG "DEBUG" +#if defined(CPUARM) + #define TR_RXNUM TR(INDENT "RxNum", INDENT "Mottagare Nr.") +#else + #define TR_RXNUM "RxNum" +#endif +#define TR_SYNCMENU "Synk [MENU]" +#define TR_LIMIT INDENT "Nivå" +#define TR_MINRSSI "Min Rssi" +#define TR_LATITUDE "Breddgrad" +#define TR_LONGITUDE "Längdgrad" +#define TR_GPSCOORD TR("GPS-Koordinater", "GPS-koordinatsystem") +#define TR_VARIO TR("Vario", "Variometer") +#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" +#define TR_CURRENT_CALIB "Kalib. Ström" +#define TR_VOLTAGE INDENT"Volt" +#define TR_CURRENT INDENT"Ampere" +#define TR_SELECT_MODEL "Välj Modell" +#define TR_CREATE_CATEGORY "Skapa Kategori" +#define TR_RENAME_CATEGORY "Byt Kat.namn" +#define TR_DELETE_CATEGORY "Ta Bort Kategori" +#define TR_CREATE_MODEL "Skapa Modell" +#define TR_DUPLICATE_MODEL "Dupl. Modell" +#define TR_CHANGE_CATEGORY "Change category" +#define TR_COPY_MODEL "Kopiera Modell" +#define TR_MOVE_MODEL "Flytta Modell" +#define TR_BACKUP_MODEL "Modell-backup" +#define TR_DELETE_MODEL "Ta Bort Modell" +#define TR_RESTORE_MODEL "Återställ Modell" +#define TR_SDCARD_ERROR "SDCARD-fel" +#define TR_NO_SDCARD "SDCARD saknas" +#define TR_SDCARD_FULL "SD-kort Fullt" +#define TR_INCOMPATIBLE "Inkompatibel" +#define TR_WARNING "VARNING" +#define TR_EEPROMWARN "EEPROM" +#define TR_STORAGE_WARNING "LAGRING" +#define TR_EEPROM_CONVERTING "EEPROM Konvertering" +#define TR_THROTTLEWARN "GAS" +#define TR_ALARMSWARN "ALARM" +#define TR_SWITCHWARN "BRYTARE" +#define TR_FAILSAFEWARN "FAILSAFE" +#define TR_NO_FAILSAFE "Failsafe ej given" +#define TR_KEYSTUCK "Knapp-fel" +#define TR_INVERT_THR TR("Invert.Gas?", "Invertera Gasen?") +#define TR_SPEAKER_VOLUME INDENT "Volym" +#define TR_LCD "LCD" +#define TR_BRIGHTNESS INDENT "Ljusstyrka" +#define TR_CPU_TEMP "CPU temp.\016>" +#define TR_CPU_CURRENT "Ström\022>" +#define TR_CPU_MAH "Förbrukn." +#define TR_COPROC "CoProc." +#define TR_COPROC_TEMP "MB temp. \016>" +#define TR_CAPAWARNING INDENT "Låg Kapacitet" +#define TR_TEMPWARNING TR(INDENT "Hög Temp ", INDENT "Hög Temperatur") +#define TR_FUNC "Funk" +#define TR_V1 "V1" +#define TR_V2 "V2" +#define TR_DURATION "Tidlängd" +#define TR_DELAY "Fördröj" +#define TR_SD_CARD "SD-kort" +#define TR_SDHC_CARD "SD/HC-kort" +#define TR_NO_SOUNDS_ON_SD "Inga ljud i SD" +#define TR_NO_MODELS_ON_SD "Ingen modell i SD" +#define TR_NO_BITMAPS_ON_SD "Ikoner saknas på SD" +#define TR_NO_SCRIPTS_ON_SD "Programkod saknas på SD" +#define TR_SCRIPT_SYNTAX_ERROR "Script syntax error" +#define TR_SCRIPT_PANIC "Script panic" +#define TR_SCRIPT_KILLED "Script killed" +#define TR_SCRIPT_ERROR "Unknown error" +#define TR_PLAY_FILE "Spela" +#define TR_DELETE_FILE "Radera" +#define TR_COPY_FILE "Kopia" +#define TR_RENAME_FILE "Byt namn" +#define TR_ASSIGN_BITMAP "Tilldela ikon" +#define TR_EXECUTE_FILE "Utför" +#define TR_REMOVED " raderad" +#define TR_SD_INFO "Information" +#define TR_SD_FORMAT "Format" +#define TR_NA "N/A" +#define TR_HARDWARE "Hårdvara" +#define TR_FORMATTING "Formaterar..." +#define TR_TEMP_CALIB "Temp. kalib." +#define TR_TIME "Tid " +#define TR_BAUDRATE "BT Baudrate" +#define TR_SD_INFO_TITLE "SD INFO" +#define TR_SD_TYPE "Typ: " +#define TR_SD_SPEED "Hastighet:" +#define TR_SD_SECTORS "Sektorer:" +#define TR_SD_SIZE "Strl:" +#define TR_TYPE INDENT "Typ " +#define TR_GLOBAL_VARS "Globala Variabler" +#define TR_GVARS "GLOBAL V." +#define TR_GLOBAL_VAR "Global Variabel" +#define TR_MENUGLOBALVARS "GLOBALA VARIABLER" +#define TR_OWN "Egen" +#define TR_DATE "Datum" +#define TR_ROTARY_ENCODER "R.Enks" +#define TR_CHANNELS_MONITOR "Kanalöversikt" +#define TR_MIXERS_MONITOR "MIXER-SKÄRM" +#define TR_PATH_TOO_LONG "För lång sökväg" +#define TR_VIEW_TEXT "Visa Text" +#define TR_FLASH_BOOTLOADER "Skriv BootLoader" +#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" +#define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" +#define TR_WRITING "\032Skriver..." +#define TR_CONFIRM_FORMAT "Formatera Minnet?" +#define TR_INTERNALRF "Intern Radio" +#define TR_EXTERNALRF "Extern Radiomodul" +#define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafeläge") +#define TR_FAILSAFESET "FailsafeInställning" +#define TR_MENUSENSOR "SENSOR" +#define TR_SENSOR "SENSOR" +#define TR_COUNTRYCODE "Landskod" +#define TR_VOICELANG "Röstspråk" +#define TR_UNITSSYSTEM "Enheter" +#define TR_EDIT "Redigera" +#define TR_INSERT_BEFORE "Addera Före" +#define TR_INSERT_AFTER "Addera Efter" +#define TR_COPY "Kopiera" +#define TR_MOVE "Flytta" +#define TR_PASTE "Infoga" +#define TR_DELETE "Radera" +#define TR_INSERT "Addera" +#define TR_RESET_FLIGHT "Nollställ Flygning" +#define TR_RESET_TIMER1 "Nollställ Timer1" +#define TR_RESET_TIMER2 "Nollställ Timer2" +#define TR_RESET_TIMER3 "Nollställ Timer3" +#define TR_RESET_TELEMETRY "Nollställ Telemetri" +#define TR_STATISTICS "Statistik" +#define TR_ABOUT_US "Om Oss" +#define TR_SETUP_SCREENS "Setup screens" +#define TR_AND_SWITCH "OCH Brytare" +#define TR_SF "BF" +#define TR_GF "GF" +#define TR_SPEAKER INDENT"Högtalare" +#define TR_BUZZER INDENT"Summer" +#define TR_BYTES "byte" +#define TR_MODULE_BIND TR("[Bnd]", "[Bind]") +#define TR_MODULE_RANGE TR("[Tst]", "[Testa]") +#define TR_RESET_BTN "[Nollställ]" +#define TR_SET "[Spara]" +#define TR_TRAINER "Trainer" +#define TR_ANTENNAPROBLEM CENTER "Fel på TX-antennen" +#define TR_MODELIDUSED TR("ID finns redan","ModellID används redan") +#define TR_MODULE INDENT "Modul" +#define TR_TELEMETRY_TYPE "Telemetrityp" +#define TR_TELEMETRY_SENSORS "Sensorer" +#define TR_VALUE "Värde" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Enhet" +#define TR_TELEMETRY_NEWSENSOR INDENT "Lägg till sensor..." +#define TR_CHANNELRANGE INDENT "Kanalområde" +#define TR_LOWALARM INDENT "Låg-alarm" +#define TR_CRITICALALARM INDENT "Kritiskt alarm" +#define TR_ENABLE_POPUP "Slå på Dialog" +#define TR_DISABLE_POPUP "Slå av Dialog" +#define TR_POPUP "Popup" +#define TR_MIN "Min" +#define TR_MAX "Max" +#define TR_CURVE_PRESET "Lutning..." +#define TR_PRESET "Lutning" +#define TR_MIRROR "Spegla" +#define TR_CLEAR "Töm" +#define TR_RESET "Nollställ" +#define TR_RESET_SUBMENU "Nollställ..." +#define TR_COUNT "Antal" +#define TR_PT "pt" +#define TR_PTS "pkt" +#define TR_SMOOTH "Mjuk" +#define TR_COPY_STICKS_TO_OFS "Spara spakar som subtrim" +#define TR_COPY_TRIMS_TO_OFS "Spara trimmar som subtrim" +#define TR_INCDEC "Inkr/Dekrement" +#define TR_GLOBALVAR "Globala Var" +#define TR_MIXSOURCE "Mixer Källa" +#define TR_CONSTANT "Konstant" +#define TR_PERSISTENT_MAH INDENT "Lagra mAh" +#define TR_PREFLIGHT "Startkontroller" +#define TR_CHECKLIST TR(INDENT "Checklista", INDENT "Visa Checklista") +#define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") +#define TR_UART3MODE "Serieporten" +#define TR_SCRIPT "Programkod" +#define TR_INPUTS "Input" +#define TR_OUTPUTS "Outputs" +#define TR_EEBACKUP "\004[ENTER Lång] säkerhetskopiera EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" +#define TR_TO_MANY_LUA_SCRIPTS "För många Lua-scripts!" + +#if defined(MAVLINK) + #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" + #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" + #define TR_MAVMENUSETUP_TITLE "MAVLINKINSTÄLLNINGAR" + #define TR_MAVLINK_BAUD_LABEL "Baudrate" + #define TR_MAVLINK_INFOS "INFOS" + #define TR_MAVLINK_MODE "LÄGE" + #define TR_MAVLINK_CUR_MODE "Nuvarande Läge" + #define TR_MAVLINK_ARMED "Osäkrad" + #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" + #define TR_MAVLINK_BATTERY_LABEL "Status för flygbatteri" + #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" + #define TR_MAVLINK_PC_RSSI_LABEL "PC RSSI" + #define TR_MAVLINK_NAV_MENU_TITLE "NAV" + #define TR_MAVLINK_COURSE "Kurs" + #define TR_MAVLINK_HEADING "Riktning" + #define TR_MAVLINK_BEARING "Bäring" + #define TR_MAVLINK_ALTITUDE "Höjd" + #define TR_MAVLINK_GPS "GPS" + #define TR_MAVLINK_NO_FIX "EJ Lås" + #define TR_MAVLINK_SAT "SAT" + #define TR_MAVLINK_HDOP "HDOP" + #define TR_MAVLINK_LAT "LAT" + #define TR_MAVLINK_LON "LON" +#endif + +// Taranis column headers +#define TR_PHASES_HEADERS { " Namn ", " Brytare ", " Rodertrim ", " Höjdrodertrim ", " Gastrim ", " Skevrodertrim ", " Tona Upp ", " Tona Ned " } +#define TR_LIMITS_HEADERS { " Namn ", " Subtrim ", " Min ", " Max ", " Riktning ", " Kurva ", " PPM-center ", " Subtrim-läge " } +#define TR_CSW_HEADERS { " Funktion ", " V1 ", " V2 ", " V2 ", " OCH Brytare ", " Tidslängd ", " Fördröj " } +// About screen +#define TR_ABOUTUS "Om Oss" + +#define TR_ABOUT_OPENTX_1 "OpenTX är icke-kommersiell," +#define TR_ABOUT_OPENTX_2 "öppen programvara utan" +#define TR_ABOUT_OPENTX_3 "garantier som uvecklas helt" +#define TR_ABOUT_OPENTX_4 "ideellt. Stöd i form av" +#define TR_ABOUT_OPENTX_5 "donationer välkomnas!" + +#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" +#define TR_ABOUT_BERTRAND_2 "Chefsutvecklare av OpenTX" +#define TR_ABOUT_BERTRAND_3 "Hjälputvecklare av Companion9x" + +#define TR_ABOUT_MIKE_1 "Mike Blandford" +#define TR_ABOUT_MIKE_2 "Kod och drivrutins-guru" +#define TR_ABOUT_MIKE_3 "Stor inspirationskälla" +#define TR_ABOUT_MIKE_4 "" + +#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" +#define TR_ABOUT_ROMOLO_2 "Chefsutvecklare av Companion9x" +#define TR_ABOUT_ROMOLO_3 "" + +#define TR_ABOUT_ANDRE_1 "Andre Bernet" +#define TR_ABOUT_ANDRE_2 "Funktionalitet, Användbarhet," +#define TR_ABOUT_ANDRE_3 "Felsökning, Dokumentation" + +#define TR_ABOUT_ROB_1 "Rob Thomson" +#define TR_ABOUT_ROB_2 "Webmaster för openRCforums" + +#define TR_ABOUT_KJELL_1 "Kjell Kernen" +#define TR_ABOUT_KJELL_2 "Utvecklare av www.open-tx.org" +#define TR_ABOUT_KJELL_3 "Utvecklare av OpenTX Recorder" +#define TR_ABOUT_KJELL_4 "Hjälputvecklare av Companion" + +#define TR_ABOUT_MARTIN_1 "Martin Hotar" +#define TR_ABOUT_MARTIN_2 "Grafikdesigner" + +#if defined(PCBFLAMENCO) + #define TR_ABOUT_HARDWARE_1 "XXX" + #define TR_ABOUT_HARDWARE_2 "Hardware designer/producer" + #define TR_ABOUT_HARDWARE_3 "" +#elif defined(PCBTARANIS) || defined(PCBHORUS) + #define TR_ABOUT_HARDWARE_1 "FrSky" + #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" + #define TR_ABOUT_HARDWARE_3 "" +#endif + +#define TR_ABOUT_PARENTS_1 "Ursprungsprojekt" +#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" +#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" +#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" + +#define TR_CHR_SHORT 's' +#define TR_CHR_LONG 'l' +#define TR_CHR_TOGGLE 't' +#define TR_CHR_HOUR 'h' +#define TR_CHR_INPUT 'I' // Values between A-I will work + +#define TR_BEEP_VOLUME "Volym Pip" +#define TR_WAV_VOLUME "Volym Wav" +#define TR_VARIO_VOLUME "Volym Vario" +#define TR_BG_VOLUME "Volym Bg" + +#define TR_TOP_BAR "Titelraden" +#define TR_ALTITUDE INDENT "Höjd" +#define TR_SCALE "Skala" +#define TR_VIEW_CHANNELS "Visa Kanaler" +#define TR_VIEW_NOTES "Visa Noteringars" +#define TR_MODEL_SELECT "Välj Modell" +#define TR_MODS_FORBIDDEN "Modifikationer förbjudna!" +#define TR_UNLOCKED "Olåst" +#define TR_ID "ID" +#define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formel" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logga" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Höjdsensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_ONLYPOSITIVE "Positiv" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "Alla telemetriplatser upptagna!" +//TODO: translation +#define TR_INVERTED_SERIAL INDENT "Invert" +#define TR_IGNORE_INSTANCE TR(INDENT "Inst.fel", INDENT "Hantera Instansfel") +#define TR_DISCOVER_SENSORS INDENT "Sök nya sensorer" +#define TR_STOP_DISCOVER_SENSORS INDENT "Avbryt sökning" +#define TR_DELETE_ALL_SENSORS INDENT "Ta bort alla sensorer" +#define TR_CONFIRMDELETE "Ta bort alla?" +#define TR_SELECT_WIDGET "Select widget" +#define TR_REMOVE_WIDGET "Remove widget" +#define TR_WIDGET_SETTINGS "Widget settings" +#define TR_REMOVE_SCREEN "Remove screen" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Spakars" +#define TR_MENU_POTS "\310Rattar" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trimm" +#define TR_MENU_SWITCHES "\312Brytare" +#define TR_MENU_LOGICAL_SWITCHES "\312Logiska Brytare" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Servon" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetri" +#define TR_MENU_OTHER "Annat" +#define TR_MENU_INVERT "Invertera" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP1 "Tmp1" +#define ZSTR_TEMP2 "Tmp2" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" +#define ZSTR_BATT1_VOLTAGE "RB1V" +#define ZSTR_BATT2_VOLTAGE "RB2V" +#define ZSTR_BATT1_CURRENT "RB1A" +#define ZSTR_BATT2_CURRENT "RB2A" +#define ZSTR_BATT1_CONSUMPTION "RB1C" +#define ZSTR_BATT2_CONSUMPTION "RB2C" +#define ZSTR_RB_STATE "RBS" +#define ZSTR_CHANS_STATE "RBCS" From 5a5f192451cfe7698cc2a6178f1eab2d5b6b01d6 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 18:36:29 +0200 Subject: [PATCH 73/98] Remaining trace --- radio/src/gui/taranis/view_main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/radio/src/gui/taranis/view_main.cpp b/radio/src/gui/taranis/view_main.cpp index 261daaac5..20ae019df 100644 --- a/radio/src/gui/taranis/view_main.cpp +++ b/radio/src/gui/taranis/view_main.cpp @@ -273,7 +273,6 @@ void displayTopBar() } /* Audio volume */ - TRACE("%d", requiredSpeakerVolume); if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet) LCD_ICON(BAR_VOLUME_X, BAR_Y, ICON_SPEAKER0); else if (requiredSpeakerVolume <= 6) From a3c175f53753cb9705ea94f861a3dafb378803aa Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 19:07:28 +0200 Subject: [PATCH 74/98] Crossfire telemetry protocol start --- radio/src/CMakeLists.txt | 48 ++++-- radio/src/dataconstants.h | 3 +- .../targets/common_avr/telemetry_driver.cpp | 7 +- radio/src/telemetry/crossfire.cpp | 141 ++++++++++++++++++ radio/src/telemetry/crossfire.h | 29 ++++ radio/src/telemetry/frsky.cpp | 39 +++-- radio/src/telemetry/frsky.h | 32 +--- radio/src/telemetry/telemetry.cpp | 6 + radio/src/telemetry/telemetry.h | 27 +++- radio/src/telemetry/telemetry_sensors.cpp | 5 + radio/src/translations/cz.h.txt | 12 +- radio/src/translations/de.h.txt | 12 +- radio/src/translations/en.h.txt | 12 +- radio/src/translations/es.h.txt | 12 +- radio/src/translations/fi.h.txt | 12 +- radio/src/translations/fr.h.txt | 12 +- radio/src/translations/it.h.txt | 12 +- radio/src/translations/nl.h.txt | 12 +- radio/src/translations/pl.h.txt | 12 +- radio/src/translations/pt.h.txt | 12 +- radio/src/translations/se.h.txt | 12 +- 21 files changed, 396 insertions(+), 73 deletions(-) create mode 100644 radio/src/telemetry/crossfire.cpp create mode 100644 radio/src/telemetry/crossfire.h diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 31dfafc44..548c7f21d 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -407,11 +407,22 @@ if(CPU_FAMILY STREQUAL STM32) STM32_USB_Device_Library/Core/src/usbd_ioreq.c STM32_USB_Device_Library/Core/src/usbd_req.c ) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usb_bsp.c usbd_desc.c usbd_usr.cpp) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usb_bsp.c + usbd_desc.c + usbd_usr.cpp + ) if(USB STREQUAL SERIAL) add_definitions(-DUSB_SERIAL) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usbd_cdc.cpp) - set(STM32USB_SRC ${STM32USB_SRC} STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usbd_cdc.cpp + ) + set(STM32USB_SRC + ${STM32USB_SRC} + STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c + ) elseif(USB STREQUAL MASSSTORAGE) add_definitions(-DUSB_MASS_STORAGE) set(STM32USB_SRC @@ -421,13 +432,22 @@ if(CPU_FAMILY STREQUAL STM32) STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c STM32_USB_Device_Library/Class/msc/src/usbd_msc_core.c ) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usbd_storage_msd.cpp) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usbd_storage_msd.cpp + ) else() add_definitions(-DUSB_JOYSTICK) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usbd_hid_joystick.c) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usbd_hid_joystick.c + ) endif() if(GVARS) - set(GUI_SRC ${GUI_SRC} menu_model_gvars.cpp) + set(GUI_SRC + ${GUI_SRC} + menu_model_gvars.cpp + ) endif() set(FIRMWARE_SRC ${FIRMWARE_SRC} @@ -436,12 +456,22 @@ if(CPU_FAMILY STREQUAL STM32) targets/taranis/configure_pins.cpp ) foreach(FILE ${STM32LIB_SRC}) - set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32LIB_DIR}/${FILE}) + set(FIRMWARE_SRC + ${FIRMWARE_SRC} + ${STM32LIB_DIR}/${FILE} + ) endforeach() foreach(FILE ${STM32USB_SRC}) - set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32USB_DIR}/${FILE}) + set(FIRMWARE_SRC + ${FIRMWARE_SRC} + ${STM32USB_DIR}/${FILE} + ) endforeach() - set(SRC ${SRC} sbus.cpp) + set(SRC + ${SRC} + sbus.cpp + telemetry/crossfire.cpp + ) endif() if(ARCH STREQUAL ARM) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 55ede0d44..499160814 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -346,6 +346,7 @@ enum TelemetryUnit { UNIT_PERCENT, UNIT_MAH, UNIT_WATTS, + UNIT_MILLIWATTS, UNIT_DB, UNIT_RPMS, UNIT_G, @@ -473,7 +474,7 @@ enum TelemetryUnit { UNIT_SECONDS, UNIT_RPMS, UNIT_G, - UNIT_HDG, + UNIT_HDG }; #endif diff --git a/radio/src/targets/common_avr/telemetry_driver.cpp b/radio/src/targets/common_avr/telemetry_driver.cpp index da3ebbdfc..3fa60635c 100644 --- a/radio/src/targets/common_avr/telemetry_driver.cpp +++ b/radio/src/targets/common_avr/telemetry_driver.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" #if defined(FRSKY) @@ -33,9 +33,6 @@ void telemetryEnableRx(void) UCSRB_N(TLM_USART) |= (1 << RXCIE_N(TLM_USART)); // enable Interrupt } -void processFrskyTelemetryData(uint8_t data); -extern uint8_t frskyRxBufferCount; // TODO not driver, change name - ISR(USART_RX_vect_N(TLM_USART)) { uint8_t stat; @@ -79,7 +76,7 @@ ISR(USART_RX_vect_N(TLM_USART)) if (stat & ((1 << FE_N(TLM_USART)) | (1 << DOR_N(TLM_USART)) | (1 << UPE_N(TLM_USART)))) { // discard buffer and start fresh on any comms error - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; } else { processFrskyTelemetryData(data); diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp new file mode 100644 index 000000000..130462ca6 --- /dev/null +++ b/radio/src/telemetry/crossfire.cpp @@ -0,0 +1,141 @@ +/* + * 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" + +struct CrossfireSensor { + const uint8_t id; + const uint8_t subId; + const char * name; + const TelemetryUnit unit; + const uint8_t prec; +}; + +const CrossfireSensor crossfireSensors[] = { + {LINK_STATS_ID, 0, ZSTR_RX_RSSI1, UNIT_DB, 0}, + {LINK_STATS_ID, 1, ZSTR_RX_RSSI2, UNIT_DB, 0}, + {LINK_STATS_ID, 2, ZSTR_RX_QUALITY, UNIT_PERCENT, 0}, + {LINK_STATS_ID, 3, ZSTR_RX_SNR, UNIT_DB, 0}, + {LINK_STATS_ID, 4, ZSTR_ANTENNA, UNIT_RAW, 0}, + {LINK_STATS_ID, 5, ZSTR_RF_MODE, UNIT_RAW, 0}, + {LINK_STATS_ID, 6, ZSTR_TX_POWER, UNIT_MILLIWATTS, 0}, + {LINK_STATS_ID, 7, ZSTR_TX_RSSI, UNIT_DB, 0}, + {LINK_STATS_ID, 8, ZSTR_TX_QUALITY, UNIT_PERCENT, 0}, + {LINK_STATS_ID, 9, ZSTR_TX_SNR, UNIT_DB, 0}, + { 0, 0, NULL, UNIT_RAW, 0} // sentinel +}; + +const CrossfireSensor * getCrossfireSensor(uint8_t id, uint8_t subId=0) +{ + const CrossfireSensor * result = NULL; + for (const CrossfireSensor * sensor = crossfireSensors; sensor->id; sensor++) { + if (id == sensor->id && subId == sensor->subId) { + result = sensor; + break; + } + } + return result; +} + +void processCrossfireTelemetryFrame(uint8_t id, uint8_t subId, uint32_t value) +{ + const CrossfireSensor * sensor = getCrossfireSensor(id, subId); + TelemetryUnit unit = UNIT_RAW; + uint8_t precision = 0; + if (sensor) { + unit = sensor->unit; + precision = sensor->prec; + } + setTelemetryValue(TELEM_PROTO_CROSSFIRE, id, 0, subId, value, unit, precision); +} + +bool checkCrossfireTelemetryFrameCRC() +{ + // uint8_t length = telemetryRxBuffer[1]; + return true; +} + +void processCrossfireTelemetryFrame() +{ + if (!checkCrossfireTelemetryFrameCRC()) { + return; + } + + uint8_t id = telemetryRxBuffer[2]; + switch(id) { + case LINK_STATS_ID: + for (int i=0; i<10; i++) { + processCrossfireTelemetryFrame(id, i, telemetryRxBuffer[3+i]); + } + break; + } +} + +void processCrossfireTelemetryData(uint8_t data) +{ + if (telemetryRxBufferCount == 0 && data != 0x00) { + return; + } + + if (telemetryRxBufferCount == 1 && (data < || data > TELEMETRY_RX_PACKET_SIZE-2)) { + telemetryRxBufferCount = 0; + return; + } + + if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data; + } + else { + TRACE("processCrossfirePacket(): length error "); + DUMP(telemetryRxBuffer, TELEMETRY_RX_PACKET_SIZE); + telemetryRxBufferCount = 0; + } + + if (telemetryRxBufferCount > 4) { + uint8_t length = telemetryRxBuffer[1]; + if (length + 2 == telemetryRxBufferCount) { + processCrossfireTelemetryFrame(); + telemetryRxBufferCount = 0; + } + } +} + +void crossfireSetDefault(int index, uint8_t id, uint8_t subId) +{ + TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index]; + + telemetrySensor.id = id; + telemetrySensor.instance = subId; + + const CrossfireSensor * sensor = getCrossfireSensor(id, subId); + if (sensor) { + TelemetryUnit unit = sensor->unit; + uint8_t prec = min(2, sensor->prec); + telemetrySensor.init(sensor->name, unit, prec); + if (id == LINK_STATS_ID) { + telemetrySensor.logs = true; + } + } + else { + telemetrySensor.init(id); + } + + storageDirty(EE_MODEL); +} \ No newline at end of file diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h new file mode 100644 index 000000000..5fa88a513 --- /dev/null +++ b/radio/src/telemetry/crossfire.h @@ -0,0 +1,29 @@ +/* + * 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. + */ + +#ifndef _CROSSFIRE_H_ +#define _CROSSFIRE_H_ + +#define LINK_STATS_ID 0x14 + +void processCrossfireTelemetryData(uint8_t data); +void crossfireSetDefault(int index, uint8_t id, uint8_t subId); + +#endif // _CROSSFIRE_H_ diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 345002f56..b6f8faf9d 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -20,9 +20,6 @@ #include "opentx.h" -uint8_t frskyRxBuffer[FRSKY_RX_PACKET_SIZE]; // Receive buffer. 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) -uint8_t frskyRxBufferCount = 0; - #if !defined(CPUARM) uint8_t frskyTxBuffer[FRSKY_TX_PACKET_SIZE]; uint8_t frskyTxBufferCount = 0; @@ -39,6 +36,18 @@ extern uint8_t TrotCount; extern uint8_t TezRotary; #endif +// Receive buffer state machine state enum +enum FrSkyDataState { + STATE_DATA_IDLE, + STATE_DATA_START, + STATE_DATA_IN_FRAME, + STATE_DATA_XOR, +#if defined(TELEMETREZ) + STATE_DATA_PRIVATE_LEN, + STATE_DATA_PRIVATE_VALUE +#endif +}; + NOINLINE void processFrskyTelemetryData(uint8_t data) { static uint8_t dataState = STATE_DATA_IDLE; @@ -72,12 +81,12 @@ NOINLINE void processFrskyTelemetryData(uint8_t data) if (data == START_STOP) { if (IS_FRSKY_SPORT_PROTOCOL()) { dataState = STATE_DATA_IN_FRAME ; - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; } } else { - if (frskyRxBufferCount < FRSKY_RX_PACKET_SIZE) { - frskyRxBuffer[frskyRxBufferCount++] = data; + if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data; } dataState = STATE_DATA_IN_FRAME; } @@ -90,30 +99,30 @@ NOINLINE void processFrskyTelemetryData(uint8_t data) else if (data == START_STOP) { if (IS_FRSKY_SPORT_PROTOCOL()) { dataState = STATE_DATA_IN_FRAME ; - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; } else { // end of frame detected - frskyDProcessPacket(frskyRxBuffer); + frskyDProcessPacket(telemetryRxBuffer); dataState = STATE_DATA_IDLE; } break; } - else if (frskyRxBufferCount < FRSKY_RX_PACKET_SIZE) { - frskyRxBuffer[frskyRxBufferCount++] = data; + else if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data; } break; case STATE_DATA_XOR: - if (frskyRxBufferCount < FRSKY_RX_PACKET_SIZE) { - frskyRxBuffer[frskyRxBufferCount++] = data ^ STUFF_MASK; + if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data ^ STUFF_MASK; } dataState = STATE_DATA_IN_FRAME; break; case STATE_DATA_IDLE: if (data == START_STOP) { - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; dataState = STATE_DATA_START; } #if defined(TELEMETREZ) @@ -155,8 +164,8 @@ NOINLINE void processFrskyTelemetryData(uint8_t data) } // switch #if defined(FRSKY_SPORT) - if (IS_FRSKY_SPORT_PROTOCOL() && frskyRxBufferCount >= FRSKY_SPORT_PACKET_SIZE) { - processSportPacket(frskyRxBuffer); + if (IS_FRSKY_SPORT_PROTOCOL() && telemetryRxBufferCount >= FRSKY_SPORT_PACKET_SIZE) { + processSportPacket(telemetryRxBuffer); dataState = STATE_DATA_IDLE; } #endif diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 2ede667a1..3c98da665 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -388,20 +388,6 @@ enum AlarmLevel { #define BYTESTUFF 0x7d #define STUFF_MASK 0x20 -// Receive buffer state machine state enum -enum FrSkyDataState { - STATE_DATA_IDLE, - STATE_DATA_START, - STATE_DATA_IN_FRAME, - STATE_DATA_XOR, -#if defined(TELEMETREZ) - STATE_DATA_PRIVATE_LEN, - STATE_DATA_PRIVATE_VALUE -#endif -}; - -#define FRSKY_RX_PACKET_SIZE 19 - #if defined(CPUARM) #define frskySendAlarms() #else @@ -453,6 +439,7 @@ enum TelemetryProtocol { TELEM_PROTO_FRSKY_D, TELEM_PROTO_FRSKY_SPORT, + TELEM_PROTO_CROSSFIRE, }; enum TelemAnas { @@ -496,23 +483,6 @@ void frskyUpdateCells(); void processFrskyTelemetryData(uint8_t data); -#if defined(PCBTARANIS) - inline uint8_t modelTelemetryProtocol() - { -#if defined(CROSSFIRE) - if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) - return PROTOCOL_PULSES_CROSSFIRE; -#endif - if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) - return g_model.telemetryProtocol; - else - return PROTOCOL_FRSKY_SPORT; - } - #define MODEL_TELEMETRY_PROTOCOL() modelTelemetryProtocol() -#elif defined(CPUARM) - #define MODEL_TELEMETRY_PROTOCOL() g_model.telemetryProtocol -#endif - #if defined(LUA) struct LuaTelemetryValue { diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 70e58474f..da756c6ef 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -21,6 +21,8 @@ #include "opentx.h" uint8_t telemetryStreaming = 0; +uint8_t telemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; // Receive buffer. 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) +uint8_t telemetryRxBufferCount = 0; #if defined(WS_HOW_HIGH) uint8_t wshhStreaming = 0; @@ -60,6 +62,10 @@ lcdint_t applyChannelRatio(source_t channel, lcdint_t val) #if defined(CPUSTM32) void processTelemetryData(uint8_t data) { +#if defined(CROSSFIRE) + if (telemetryProtocol == PROTOCOL_PULSES_CROSSFIRE) + processCrossfireTelemetryData(data); +#endif processFrskyTelemetryData(data); } #endif diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index 7ceb1e218..d14f4f0e7 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -21,7 +21,7 @@ #ifndef _TELEMETRY_H_ #define _TELEMETRY_H_ -#if defined (FRSKY) +#if defined(FRSKY) // FrSky Telemetry #include "frsky.h" #elif defined(JETI) @@ -38,6 +38,10 @@ #include "mavlink.h" #endif +#if defined(CROSSFIRE) + #include "crossfire.h" +#endif + extern uint8_t telemetryStreaming; // >0 (true) == data is streaming in. 0 = no data detected for some time #if defined(WS_HOW_HIGH) @@ -55,6 +59,10 @@ enum TelemetryStates { extern uint8_t telemetryState; #endif +#define TELEMETRY_RX_PACKET_SIZE 19 // 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) +extern uint8_t telemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; +extern uint8_t telemetryRxBufferCount; + #if defined(CPUARM) #define TELEMETRY_VALUE_TIMER_CYCLE 200 /*20 seconds*/ #define TELEMETRY_VALUE_OLD_THRESHOLD 150 /*15 seconds*/ @@ -113,6 +121,23 @@ extern uint8_t telemetryProtocol; #define IS_FRSKY_SPORT_PROTOCOL() (false) #endif +#if defined(CPUSTM32) +inline uint8_t modelTelemetryProtocol() +{ +#if defined(CROSSFIRE) + if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) + return PROTOCOL_PULSES_CROSSFIRE; +#endif + if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) + return g_model.telemetryProtocol; + else + return PROTOCOL_FRSKY_SPORT; +} +#define MODEL_TELEMETRY_PROTOCOL() modelTelemetryProtocol() +#elif defined(CPUARM) +#define MODEL_TELEMETRY_PROTOCOL() g_model.telemetryProtocol +#endif + #if defined(CPUARM) #include "telemetry_sensors.h" #endif diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 294c2a951..292bba9f3 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -529,6 +529,11 @@ void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, u case TELEM_PROTO_FRSKY_D: frskyDSetDefault(index, id); break; +#endif +#if defined(CROSSFIRE) + case TELEM_PROTO_CROSSFIRE: + crossfireSetDefault(index, id, instance); + break; #endif default: return; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 84d5f6b50..451443b5a 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metr.\0""Imper.", "Metrické""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1160,3 +1160,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 5cfabed45..30c5c5e87 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -383,7 +383,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\012") #define TR_VUNITSSYSTEM TR("Metrik""Imper.", "Metrisch\0 ""Imperial\0 ") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1163,3 +1163,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 8a6e47b40..62f4fe04f 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -378,7 +378,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1178,3 +1178,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 09df0af3a..6ea0b7a14 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1120,3 +1120,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index a1f96a504..18f76acfd 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1120,3 +1120,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index ec285a68e..476f1be43 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -378,7 +378,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\012") #define TR_VUNITSSYSTEM TR("Métr.\0""Impér.", "Métriques\0""Impériales") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1150,3 +1150,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index d3079fa3d..65c11566f 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -378,7 +378,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\011") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metriche\0""Imperiali") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1159,3 +1159,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 239b26ed2..b08f7e28f 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -379,7 +379,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metrs.""Engels", "Metrisch\0 ""Engels\0 ") #define LEN_VTELEMUNIT "\003" -#define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" +#define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1174,3 +1174,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 1114573f5..6260b1593 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -380,7 +380,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") /*8 decimal*/ #define TR_VUNITSSYSTEM TR("Metr. ""Imper.", "Metryczn""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1161,3 +1161,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 3ea2ba070..3b3bd29c9 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -370,7 +370,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1114,3 +1114,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 7718c2671..54cde89ab 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metri.""Imper.", "Metriska""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1175,3 +1175,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file From f2fb6b20de44de238019c4ed1b968a35ec535998 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 20:31:42 +0200 Subject: [PATCH 75/98] Crossfire CRC added --- radio/src/crc16.cpp | 55 ++++++++++++++++++++++++++++--- radio/src/opentx.h | 3 +- radio/src/telemetry/crossfire.cpp | 9 +++-- radio/src/tests/crossfire.cpp | 7 ++++ 4 files changed, 65 insertions(+), 9 deletions(-) diff --git a/radio/src/crc16.cpp b/radio/src/crc16.cpp index d9cfbcaf8..56319e271 100644 --- a/radio/src/crc16.cpp +++ b/radio/src/crc16.cpp @@ -20,8 +20,8 @@ #include -/* CRC16 implementation according to CCITT standards */ -static const unsigned short crc16tab[256]= { +// CRC16 implementation according to CCITT standards +static const unsigned short crc16tab[256] = { 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7, 0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef, 0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6, @@ -56,11 +56,56 @@ static const unsigned short crc16tab[256]= { 0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0 }; -uint16_t crc16(uint8_t * buf, uint32_t len) +uint16_t crc16(const uint8_t * buf, uint32_t len) { uint16_t crc = 0; - for (uint32_t counter=0; counter>8) ^ *buf++ ) & 0x00FF]; + for (uint32_t i=0; i>8) ^ *buf++) & 0x00FF]; } return crc; } + +// CRC8 implementation with polynom = x^8+x^7+x^6+x^4+x^2+1 (0xD5) +unsigned char crc8tab[256] = { + 0x00, 0xD5, 0x7F, 0xAA, 0xFE, 0x2B, 0x81, 0x54, + 0x29, 0xFC, 0x56, 0x83, 0xD7, 0x02, 0xA8, 0x7D, + 0x52, 0x87, 0x2D, 0xF8, 0xAC, 0x79, 0xD3, 0x06, + 0x7B, 0xAE, 0x04, 0xD1, 0x85, 0x50, 0xFA, 0x2F, + 0xA4, 0x71, 0xDB, 0x0E, 0x5A, 0x8F, 0x25, 0xF0, + 0x8D, 0x58, 0xF2, 0x27, 0x73, 0xA6, 0x0C, 0xD9, + 0xF6, 0x23, 0x89, 0x5C, 0x08, 0xDD, 0x77, 0xA2, + 0xDF, 0x0A, 0xA0, 0x75, 0x21, 0xF4, 0x5E, 0x8B, + 0x9D, 0x48, 0xE2, 0x37, 0x63, 0xB6, 0x1C, 0xC9, + 0xB4, 0x61, 0xCB, 0x1E, 0x4A, 0x9F, 0x35, 0xE0, + 0xCF, 0x1A, 0xB0, 0x65, 0x31, 0xE4, 0x4E, 0x9B, + 0xE6, 0x33, 0x99, 0x4C, 0x18, 0xCD, 0x67, 0xB2, + 0x39, 0xEC, 0x46, 0x93, 0xC7, 0x12, 0xB8, 0x6D, + 0x10, 0xC5, 0x6F, 0xBA, 0xEE, 0x3B, 0x91, 0x44, + 0x6B, 0xBE, 0x14, 0xC1, 0x95, 0x40, 0xEA, 0x3F, + 0x42, 0x97, 0x3D, 0xE8, 0xBC, 0x69, 0xC3, 0x16, + 0xEF, 0x3A, 0x90, 0x45, 0x11, 0xC4, 0x6E, 0xBB, + 0xC6, 0x13, 0xB9, 0x6C, 0x38, 0xED, 0x47, 0x92, + 0xBD, 0x68, 0xC2, 0x17, 0x43, 0x96, 0x3C, 0xE9, + 0x94, 0x41, 0xEB, 0x3E, 0x6A, 0xBF, 0x15, 0xC0, + 0x4B, 0x9E, 0x34, 0xE1, 0xB5, 0x60, 0xCA, 0x1F, + 0x62, 0xB7, 0x1D, 0xC8, 0x9C, 0x49, 0xE3, 0x36, + 0x19, 0xCC, 0x66, 0xB3, 0xE7, 0x32, 0x98, 0x4D, + 0x30, 0xE5, 0x4F, 0x9A, 0xCE, 0x1B, 0xB1, 0x64, + 0x72, 0xA7, 0x0D, 0xD8, 0x8C, 0x59, 0xF3, 0x26, + 0x5B, 0x8E, 0x24, 0xF1, 0xA5, 0x70, 0xDA, 0x0F, + 0x20, 0xF5, 0x5F, 0x8A, 0xDE, 0x0B, 0xA1, 0x74, + 0x09, 0xDC, 0x76, 0xA3, 0xF7, 0x22, 0x88, 0x5D, + 0xD6, 0x03, 0xA9, 0x7C, 0x28, 0xFD, 0x57, 0x82, + 0xFF, 0x2A, 0x80, 0x55, 0x01, 0xD4, 0x7E, 0xAB, + 0x84, 0x51, 0xFB, 0x2E, 0x7A, 0xAF, 0x05, 0xD0, + 0xAD, 0x78, 0xD2, 0x07, 0x53, 0x86, 0x2C, 0xF9 +}; + +uint8_t crc8(const uint8_t * ptr, uint32_t len) +{ + uint8_t crc = 0; + for (uint32_t i=0; i TELEMETRY_RX_PACKET_SIZE-2)) { + if (telemetryRxBufferCount == 1 && (data < 2 || data > TELEMETRY_RX_PACKET_SIZE-2)) { telemetryRxBufferCount = 0; return; } diff --git a/radio/src/tests/crossfire.cpp b/radio/src/tests/crossfire.cpp index cc7f69e14..317a35676 100644 --- a/radio/src/tests/crossfire.cpp +++ b/radio/src/tests/crossfire.cpp @@ -35,5 +35,12 @@ TEST(Crossfire, createCrossfireFrame) // TODO check } + +TEST(Crossfire, crc8) +{ + uint8_t frame[] = { 0x00, 0x0C, 0x14, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x03, 0x00, 0x00, 0x00, 0xF4 }; + uint8_t crc = crc8(&frame[2], frame[1]-1); + ASSERT_EQ(frame[frame[1]+1], crc); +} #endif From 554f2306960c746c927cb4cf5dbc3e7ce084f66b Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 20:56:48 +0200 Subject: [PATCH 76/98] Prevent from using the internal module when there is a Crossfire module plugged into the bay --- radio/src/gui/gui_helpers.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/radio/src/gui/gui_helpers.cpp b/radio/src/gui/gui_helpers.cpp index cc267cbca..f35f358a7 100644 --- a/radio/src/gui/gui_helpers.cpp +++ b/radio/src/gui/gui_helpers.cpp @@ -457,11 +457,21 @@ bool isSourceAvailableInResetSpecialFunction(int index) bool isModuleAvailable(int module) { +#if defined(CROSSFIRE) + if (module == MODULE_TYPE_CROSSFIRE && g_model.moduleData[INTERNAL_MODULE].rfProtocol != RF_PROTO_OFF) { + return false; + } +#endif return true; } bool isRfProtocolAvailable(int protocol) { +#if defined(CROSSFIRE) + if (protocol != RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) { + return false; + } +#endif #if defined(MODULE_D16_EU_ONLY_SUPPORT) if (protocol == RF_PROTO_D8) { return false; From be1526a86d1095a92dac388bbabdf8203e45bfa3 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 20:57:01 +0200 Subject: [PATCH 77/98] Cosmetics --- radio/src/gui/taranis/menu_model_telemetry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/gui/taranis/menu_model_telemetry.cpp b/radio/src/gui/taranis/menu_model_telemetry.cpp index 601cecbb4..e2950ad3e 100644 --- a/radio/src/gui/taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/taranis/menu_model_telemetry.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" enum menuModelTelemetryItems { ITEM_TELEMETRY_PROTOCOL_TYPE, From 6a2e26272e2073d45a7891362d952c843b463a27 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 23:16:22 +0200 Subject: [PATCH 78/98] [Horus] Unused code removed --- radio/src/gui/horus/bitmapbuffer.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/radio/src/gui/horus/bitmapbuffer.cpp b/radio/src/gui/horus/bitmapbuffer.cpp index 309c35c35..a35c0504f 100644 --- a/radio/src/gui/horus/bitmapbuffer.cpp +++ b/radio/src/gui/horus/bitmapbuffer.cpp @@ -256,7 +256,7 @@ void BitmapBuffer::drawFontPattern(coord_t x, coord_t y, const uint8_t * font, c lcdNextPos = x + width; } -void BitmapBuffer::drawSizedText(coord_t x, coord_t y, const pm_char * s, uint8_t len, LcdFlags flags) +void BitmapBuffer::drawSizedText(coord_t x, coord_t y, const char * s, uint8_t len, LcdFlags flags) { int width = getTextWidth(s, len, flags); int height = getFontHeight(flags); @@ -279,12 +279,6 @@ void BitmapBuffer::drawSizedText(coord_t x, coord_t y, const pm_char * s, uint8_ drawSolidFilledRect(x-INVERT_HORZ_MARGIN, y, width+2*INVERT_HORZ_MARGIN, INVERT_LINE_HEIGHT, TEXT_INVERTED_BGCOLOR); } - char str[256]; - if (flags & ZCHAR) - strcat_zchar(str, s, len); - else - strAppend(str, s, len); - const coord_t orig_x = x; bool setx = false; while (len--) { From 83a7859f6f5a2ad9603ae8391460561fd45790ac Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 23:17:20 +0200 Subject: [PATCH 79/98] Cosmetics --- radio/src/gui/horus/menu_general_version.cpp | 2 +- radio/src/targets/horus/usb_bsp.c | 44 +++++++++--------- radio/src/targets/horus/usb_driver.c | 2 +- radio/src/targets/horus/usbd_cdc.cpp | 42 ++++++++--------- radio/src/targets/horus/usbd_conf.h | 48 ++++++++++---------- 5 files changed, 69 insertions(+), 69 deletions(-) diff --git a/radio/src/gui/horus/menu_general_version.cpp b/radio/src/gui/horus/menu_general_version.cpp index 3acd45539..546bdd8b8 100644 --- a/radio/src/gui/horus/menu_general_version.cpp +++ b/radio/src/gui/horus/menu_general_version.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" bool menuGeneralVersion(evt_t event) { diff --git a/radio/src/targets/horus/usb_bsp.c b/radio/src/targets/horus/usb_bsp.c index 87791feae..a1a2fe25e 100644 --- a/radio/src/targets/horus/usb_bsp.c +++ b/radio/src/targets/horus/usb_bsp.c @@ -1,29 +1,29 @@ -/* - * 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. - */ - +/* + * 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. + */ + /* Includes ------------------------------------------------------------------*/ #include "usb_bsp.h" -#include "../horus/board_horus.h" -#include "../horus/usbd_conf.h" +#include "board_horus.h" +#include "usbd_conf.h" extern uint32_t SystemCoreClock; diff --git a/radio/src/targets/horus/usb_driver.c b/radio/src/targets/horus/usb_driver.c index c0ccf50d0..92905ecf9 100644 --- a/radio/src/targets/horus/usb_driver.c +++ b/radio/src/targets/horus/usb_driver.c @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../horus/board_horus.h" +#include "board_horus.h" #include "STM32_USB-Host-Device_Lib_V2.1.0/Libraries/STM32_USB_OTG_Driver/inc/usb_dcd_int.h" int usbPlugged(void) diff --git a/radio/src/targets/horus/usbd_cdc.cpp b/radio/src/targets/horus/usbd_cdc.cpp index 149868c00..daaa70cfb 100644 --- a/radio/src/targets/horus/usbd_cdc.cpp +++ b/radio/src/targets/horus/usbd_cdc.cpp @@ -1,28 +1,28 @@ -/* - * 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. - */ - +/* + * 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. + */ + #ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED #pragma data_alignment = 4 #endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ -#include "../../opentx.h" +#include "opentx.h" extern "C" { diff --git a/radio/src/targets/horus/usbd_conf.h b/radio/src/targets/horus/usbd_conf.h index d17d4742e..5dcfeeb45 100644 --- a/radio/src/targets/horus/usbd_conf.h +++ b/radio/src/targets/horus/usbd_conf.h @@ -1,29 +1,29 @@ -/* - * 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. - */ - +/* + * 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. + */ + /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef _USBD_CONF_H_ -#define _USBD_CONF_H_ +#ifndef _USBD_CONF_H_ +#define _USBD_CONF_H_ /* Includes ------------------------------------------------------------------*/ -#include "../horus/usb_conf.h" +#include "usb_conf.h" #define USBD_CFG_MAX_NUM 1 #define USBD_ITF_MAX_NUM 1 @@ -57,7 +57,7 @@ #define APP_RX_DATA_SIZE 512 // USB serial port output buffer. TODO: tune this buffer size /* Total size of IN buffer: APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL */ #define APP_FOPS VCP_fops -#endif // _USBD_CONF_H_ +#endif // _USBD_CONF_H_ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ From ed30b5a8ed06965978f07e1a55237431fc5dc19a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 23:17:55 +0200 Subject: [PATCH 80/98] =?UTF-8?q?[Horus]=C2=A0USB=20icon=20only=20displaye?= =?UTF-8?q?d=20when=20USB=20plugged?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- radio/src/gui/horus/topbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/gui/horus/topbar.cpp b/radio/src/gui/horus/topbar.cpp index 5b287784e..3d9139817 100644 --- a/radio/src/gui/horus/topbar.cpp +++ b/radio/src/gui/horus/topbar.cpp @@ -56,7 +56,7 @@ void drawTopBar() theme->drawTopbarBackground(NULL); // USB icon - if (1/*usbPlugged()*/) { + if (usbPlugged()) { lcdDrawBitmapPattern(LCD_W-98, 8, LBM_TOPMENU_USB, MENU_TITLE_COLOR); } From a6a07e971422f52754d1fbb19d574dbe32a218b6 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 23:18:32 +0200 Subject: [PATCH 81/98] [Horus] Speedup when switching from the main view to any other menu --- radio/src/gui/horus/view_main.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/radio/src/gui/horus/view_main.cpp b/radio/src/gui/horus/view_main.cpp index a85cdebe7..a04ca2859 100644 --- a/radio/src/gui/horus/view_main.cpp +++ b/radio/src/gui/horus/view_main.cpp @@ -137,10 +137,6 @@ bool menuMainView(evt_t event) killEvents(KEY_DOWN); break; - case EVT_ENTRY_UP: - LOAD_MODEL_BITMAP(); - break; - case EVT_KEY_LONG(KEY_ENTER): killEvents(event); POPUP_MENU_ADD_ITEM(STR_MODEL_SELECT); @@ -157,17 +153,17 @@ bool menuMainView(evt_t event) case EVT_KEY_LONG(KEY_MODEL): killEvents(event); pushMenu(menuTabModel[0]); - break; + return false; case EVT_KEY_LONG(KEY_RADIO): killEvents(event); pushMenu(menuTabGeneral[0]); - break; + return false; case EVT_KEY_LONG(KEY_TELEM): killEvents(event); pushMenu(menuTabScreensSetup[1]); - break; + return false; case EVT_KEY_BREAK(KEY_PGDN): storageDirty(EE_GENERAL); From 38dbfd130a2fc13cc42b52b9f62cf6ec766b0e5a Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 29 Mar 2016 15:17:01 +0200 Subject: [PATCH 82/98] Fix travis (clang 3.8 -> 3.9) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a108c9eaa..8ebbbddd8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ before_install: - sudo apt-get update -qq install: - - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4 + - sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.9 libclang-3.9-dev python-qt4 - export CXX="g++-5" CC="gcc-5" - wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb - wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpfr4_3.1.2-1_amd64.deb From 86076bbf328703ac445936f20b6ac0fff209b5c6 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Fri, 25 Mar 2016 14:04:30 +0100 Subject: [PATCH 83/98] Also backup members inside unions, the code is a bit more complicated since unions can have structs or simple types. Also change Telemetry sensor to be a struct, since a class with all public is identical to a struct in C++ --- radio/src/datastructs.h | 4 +- radio/src/storage/datacopy.cpp | 35 +++++++++++++++- radio/util/generate_datacopy.py | 74 ++++++++++++++++++++++++++------- 3 files changed, 94 insertions(+), 19 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 89930a61f..c431ee37a 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -622,9 +622,7 @@ PACK(struct MavlinkTelemetryData { */ #if defined(CPUARM) -// TODO struct as others -PACK(class TelemetrySensor { - public: +PACK(struct TelemetrySensor { union { uint16_t id; // data identifier, for FrSky we can reuse existing ones. Source unit is derived from type. uint16_t persistentValue; diff --git a/radio/src/storage/datacopy.cpp b/radio/src/storage/datacopy.cpp index 239db541d..6afc7fb06 100644 --- a/radio/src/storage/datacopy.cpp +++ b/radio/src/storage/datacopy.cpp @@ -1,4 +1,4 @@ -//This file was auto-generated by generate_datacopy.py script on Wed Mar 16 20:12:19 2016. Do not edit this file! +//This file was auto-generated by generate_datacopy.py script on Fri Mar 25 14:17:31 2016. Do not edit this file! @@ -77,6 +77,7 @@ void copyCustomFunctionData(A * dest, B * src) { dest->swtch = src->swtch; dest->func = src->func; + copyCustomFunctionData_all(&dest->all, &src->all); dest->active = src->active; } @@ -165,6 +166,24 @@ void copyFrSkyTelemetryData(A * dest, B * src) } } +template +void copyTelemetrySensor(A * dest, B * src) +{ + dest->id = src->id; + dest->instance = src->instance; + memcpy(dest->label, src->label, sizeof(dest->label)); + dest->type = src->type; + dest->unit = src->unit; + dest->prec = src->prec; + dest->autoOffset = src->autoOffset; + dest->filter = src->filter; + dest->logs = src->logs; + dest->persistent = src->persistent; + dest->onlyPositive = src->onlyPositive; + dest->subId = src->subId; + copyTelemetrySensor_custom(&dest->custom, &src->custom); +} + template void copyModuleData(A * dest, B * src) { @@ -305,3 +324,17 @@ void copyRadioData(A * dest, B * src) dest->potsConfig = src->potsConfig; } +template +void copyCustomFunctionData_all(A * dest, B * src) +{ + dest->val = src->val; + dest->mode = src->mode; + dest->param = src->param; +} + +template +void copyTelemetrySensor_custom(A * dest, B * src) +{ + dest->ratio = src->ratio; + dest->offset = src->offset; +} diff --git a/radio/util/generate_datacopy.py b/radio/util/generate_datacopy.py index 22e87d6d9..493ece838 100755 --- a/radio/util/generate_datacopy.py +++ b/radio/util/generate_datacopy.py @@ -12,33 +12,77 @@ if sys.platform == "darwin": structs = [] +extrastructs = [] + +def build_struct(cursor, anonymousUnion=False): + if not anonymousUnion: + structs.append(cursor.spelling) + print("template \nvoid copy%s(A * dest, B * src)\n{" % cursor.spelling) -def build_struct(cursor): - structs.append(cursor.spelling) - print("template \nvoid copy%s(A * dest, B * src)\n{" % cursor.spelling) for c in cursor.get_children(): - if c.kind == clang.cindex.CursorKind.FIELD_DECL: - if c.type.get_array_size() > 0: - if c.type.get_array_element_type().spelling in structs: - print(" for (int i=0; i<%d; i++) {" % c.type.get_array_size()) - print(" copy%s(&dest->%s[i], &src->%s[i]);" % (c.type.get_array_element_type().spelling, c.spelling, c.spelling)) - print(" }") + if c.kind == clang.cindex.CursorKind.UNION_DECL: + if c.spelling: + raise "Cannot handle non anonymous unions" + + copiedUnionMember = False + for uc in c.get_children(): + if not uc.spelling or uc.kind == clang.cindex.CursorKind.PACKED_ATTR: + # Ignore + pass else: - print(" memcpy(dest->%s, src->%s, sizeof(dest->%s));" % (c.spelling, c.spelling, c.spelling)) - elif c.type.get_declaration().spelling in structs: - print(" copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, c.spelling, c.spelling)) - else: - print(" dest->%s = src->%s;" % (c.spelling, c.spelling)) - print("}\n") + # per default we copy only the first member of a union and warn if there are more + # members (declare the other members NOBACKUP) + if copiedUnionMember: + print ("Warning more than one union member (%s) in anynomous union inside struct %s, consider NOBACKUP statements" % (uc.spelling, cursor.spelling), file=sys.stderr) + else: + copy_decl(uc, uc.spelling) + copiedUnionMember = True + + elif c.kind == clang.cindex.CursorKind.FIELD_DECL: + copy_decl(c, c.spelling) + + + if not anonymousUnion: + print("}\n") def build(cursor): result = [] for c in cursor.get_children(): if c.kind == clang.cindex.CursorKind.STRUCT_DECL: build_struct(c) + for c, spelling in extrastructs: + print("template \nvoid copy%s(A * dest, B * src)\n{" % spelling) + build_struct(c, True) + print ("}\n") + return result +def copy_decl(c, spelling): + childs = [ch for ch in c.get_children()] + if c.type.get_array_size() > 0: + if c.type.get_array_element_type().spelling in structs: + print(" for (int i=0; i<%d; i++) {" % c.type.get_array_size()) + print(" copy%s(&dest->%s[i], &src->%s[i]);" % (c.type.get_array_element_type().spelling, spelling, spelling)) + print(" }") + else: + print(" memcpy(dest->%s, src->%s, sizeof(dest->%s));" % (spelling, spelling, spelling)) + elif c.type.kind == clang.cindex.TypeKind.UNEXPOSED and len(childs)==1 and childs[0].kind == clang.cindex.CursorKind.STRUCT_DECL: + # inline declared structs + if c.semantic_parent.spelling: + spellingFunc = c.semantic_parent.spelling + "_" + spelling + else: + spellingFunc = c.semantic_parent.semantic_parent.spelling + "_" + spelling + + extrastructs.append((childs[0], spellingFunc)) + print(" copy%s(&dest->%s, &src->%s);" % (spellingFunc, spelling, spelling)) + + elif c.type.get_declaration().spelling in structs: + print(" copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, spelling, spelling)) + else: + print(" dest->%s = src->%s;" % (spelling, spelling)) + + def header(): print("//This file was auto-generated by %s script on %s. Do not edit this file!\n\n\n" % (os.path.basename(sys.argv[0]), time.asctime())) From fb5feb8a912593b053b223f25d42f549675e2c14 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 29 Mar 2016 18:10:42 +0200 Subject: [PATCH 84/98] Fix companion build on OS X --- companion/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 4c34b7f2c..a74bb6bc3 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -283,7 +283,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") install(FILES ../targets/linux/45-companion-taranis.rules DESTINATION /lib/udev/rules.d RENAME 45-companion${C9X_NAME_SUFFIX}-taranis.rules) # Linux specific code set(OperatingSystem "Linux") -else() +elseif(WIN32) get_target_property(QtCore_LOCATION Qt5::Core LOCATION) get_filename_component(QT_DLL_DIR ${QtCore_LOCATION} PATH) get_filename_component(SDL_DIR ${SDL_LIBRARY} PATH) From 90f67cd5efbce66be4a361cab035c883624867cb Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 29 Mar 2016 18:53:58 +0200 Subject: [PATCH 85/98] Fix crash of simulator if directory does not exist. --- radio/src/targets/simu/simpgmspace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 2c930e562..a8fee3ef4 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -880,7 +880,7 @@ FRESULT f_opendir (DIR * rep, const TCHAR * name) FRESULT f_closedir (DIR * rep) { TRACE("f_closedir(%p)", rep); - simu::closedir((simu::DIR *)rep->fs); + if (rep->fs) simu::closedir((simu::DIR *)rep->fs); return FR_OK; } From f2eadf0ff0d9a7b1268386e4639f9f50c47151a5 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 29 Mar 2016 20:09:09 +0200 Subject: [PATCH 86/98] [Horus] Introduction of a button to remove an existing view --- radio/src/gui/horus/screens_setup.cpp | 57 +++++++++++++-------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/radio/src/gui/horus/screens_setup.cpp b/radio/src/gui/horus/screens_setup.cpp index b2971561e..f6ca654bb 100644 --- a/radio/src/gui/horus/screens_setup.cpp +++ b/radio/src/gui/horus/screens_setup.cpp @@ -487,18 +487,21 @@ bool menuScreenSetup(int index, evt_t event) currentContainer = currentScreen; bool needsOffsetCheck = (menuVerticalPosition != 0 || menuHorizontalPosition < 0); - const ZoneOption * options = currentScreen->getFactory()->getOptions(); - int optionsCount = getOptionsCount(options); - linesCount = ITEM_SCREEN_SETUP_LAYOUT_OPTION1 + optionsCount; - char title[] = "Main view X"; title[sizeof(title)-2] = '1' + index; menuPageCount = updateMainviewsMenu(); - uint8_t mstate_tab[2 + MAX_LAYOUT_OPTIONS] = { uint8_t(NAVIGATION_LINE_BY_LINE|uint8_t(countRegisteredLayouts-1)), ORPHAN_ROW }; + const ZoneOption * options = currentScreen->getFactory()->getOptions(); + int optionsCount = getOptionsCount(options); + linesCount = ITEM_SCREEN_SETUP_LAYOUT_OPTION1 + optionsCount; + if (menuPageCount > 3) + ++linesCount; + + uint8_t mstate_tab[2 + MAX_LAYOUT_OPTIONS + 1] = { uint8_t(NAVIGATION_LINE_BY_LINE|uint8_t(countRegisteredLayouts-1)), ORPHAN_ROW }; for (int i=0; igetOptionValue(index); + uint8_t o = k - ITEM_SCREEN_SETUP_LAYOUT_OPTION1; + if (o < optionsCount) { + const ZoneOption * option = &options[o]; + ZoneOptionValue * value = currentScreen->getOptionValue(o); if (editZoneOption(y, option, value, attr, EE_MODEL, event)) { currentScreen->update(); } } + else if (menuPageCount > 3 && o == optionsCount) { + drawButton(SCREENS_SETUP_2ND_COLUMN, y, STR_REMOVE_SCREEN, attr); + if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) { + delete currentScreen; + if (index != MAX_CUSTOM_SCREENS-1) { + memmove(&g_model.screenData[index], &g_model.screenData[index + 1], sizeof(CustomScreenData) * (MAX_CUSTOM_SCREENS - index - 1)); + memmove(&customScreens[index], &customScreens[index + 1], sizeof(Layout *) * (MAX_CUSTOM_SCREENS - index - 1)); + } + memset(&g_model.screenData[MAX_CUSTOM_SCREENS-1], 0, sizeof(CustomScreenData)); + customScreens[MAX_CUSTOM_SCREENS-1] = NULL; + chainMenu(menuTabScreensSetup[index > 0 ? index : 1]); + return false; + } + } break; } } } - if (menuVerticalPosition == -1 && index > 0 && event == EVT_KEY_LONG(KEY_ENTER)) { - killEvents(KEY_ENTER); - menuHorizontalPosition = index; - POPUP_MENU_ADD_ITEM(STR_REMOVE_SCREEN); - popupMenuHandler = onScreenSetupMenu; - } - return true; } @@ -592,23 +602,10 @@ bool menuScreenAdd(evt_t event) if (event == EVT_KEY_BREAK(KEY_ENTER)) { customScreens[menuPageCount-2] = registeredLayouts[0]->create(&g_model.screenData[menuPageCount-2].layoutData); s_editMode = 0; + menuHorizontalPosition = -1; return false; } SIMPLE_MENU_WITH_OPTIONS("Add main view", LBM_SCREENS_SETUP_ICONS, menuTabScreensSetup, menuPageCount, menuPageCount-1, 0); return true; } - -void onScreenSetupMenu(const char * result) -{ - if (result == STR_REMOVE_SCREEN) { - delete customScreens[menuHorizontalPosition]; - if (menuHorizontalPosition != MAX_CUSTOM_SCREENS-1) { - memmove(&g_model.screenData[menuHorizontalPosition], &g_model.screenData[menuHorizontalPosition + 1], sizeof(CustomScreenData) * (MAX_CUSTOM_SCREENS - menuHorizontalPosition - 1)); - memmove(&customScreens[menuHorizontalPosition], &customScreens[menuHorizontalPosition + 1], sizeof(Layout *) * (MAX_CUSTOM_SCREENS - menuHorizontalPosition - 1)); - } - memset(&g_model.screenData[MAX_CUSTOM_SCREENS-1], 0, sizeof(CustomScreenData)); - customScreens[MAX_CUSTOM_SCREENS-1] = NULL; - // chainMenu(menuMainviews[menuHorizontalPosition > 0 ? menuHorizontalPosition-1 : 0]); - } -} From 2e6570e20907ad683cdaad5cad8fea3a41508753 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 29 Mar 2016 21:35:33 +0200 Subject: [PATCH 87/98] New script to check AVR firmware size, as it seems it increased over time in the 'next' branch ... --- radio/util/checksize.py | 51 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 radio/util/checksize.py diff --git a/radio/util/checksize.py b/radio/util/checksize.py new file mode 100644 index 000000000..6cc194f61 --- /dev/null +++ b/radio/util/checksize.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python + +import os +import sys +import subprocess + +index = -1 +size = None + +options = sys.argv[1:] +srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.." +buildir = os.getcwd() + +while 1: + sys.stdout.flush() + index += 1 + + os.chdir(srcdir) + cmd = ["git", "reset", "--hard", "origin/next~%d" % index] + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output, error = proc.communicate() + if proc.returncode != 0: + print "HEAD~%d git reset failed" % index + continue + + os.chdir(buildir) + cmd = ["cmake"] + options + [srcdir] + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output, error = proc.communicate() + if proc.returncode != 0: + print "HEAD~%d cmake failed" % index + continue + + cmd = ["make", "-j4", "firmware"] + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output, error = proc.communicate() + if proc.returncode != 0: + print "HEAD~%d make firmware failed" % index + continue + + oldsize = int(subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % "firmware.hex", shell=True)) + if size: + if size > oldsize: + print "HEAD~%d %d: increase by %d bytes" % (index-1, size, size-oldsize) + elif size < oldsize: + print "HEAD~%d %d: decrease by %d bytes" % (index-1, size, oldsize-size) + else: + print "HEAD~%d %d" % (index-1, size) + size = oldsize + + From a2e5efa6c7c5de9ad97dde6571bc7bd4572983a3 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 29 Mar 2016 21:34:13 +0200 Subject: [PATCH 88/98] Make simulator sound functional again in OS X (and probably Linux) The radio/src/simu/CMakeLists.txt was missing the SDL defines/includes required for SDL audio --- CMakeLists.txt | 8 ++++++++ companion/src/CMakeLists.txt | 7 +------ radio/src/targets/simu/CMakeLists.txt | 9 ++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 79ea8adaa..2180c7516 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,14 @@ find_package(Qt5LinguistTools) find_package(Qt5PrintSupport) find_package(Qt5Multimedia) +message(STATUS "Looking for SDL ") +find_package(Sdl) +if(SDL_FOUND) + message("SDL Include Path: " ${SDL_INCLUDE_DIR}) +else() + message("SDL not found! Joysticks support will be disabled. Simulator audio will not work.") +endif() + include(Macros) today(DATE) now(TIME) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index a74bb6bc3..ebb139596 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -25,15 +25,10 @@ if(TABLE_LAYOUT) message(STATUS "Using QTableWidget") endif(TABLE_LAYOUT) -message(STATUS "Looking for SDL ") -find_package(Sdl) if(SDL_FOUND) include_directories(${SDL_INCLUDE_DIR}) - message("SDL Include Path: " ${SDL_INCLUDE_DIR}) - add_definitions(-DJOYSTICKS) add_definitions(-DSIMU_AUDIO) -else() - message("SDL not found! Joysticks support will be disabled. Simulator audio will not work.") + add_definitions(-DJOYSTICKS) endif() message(STATUS "Looking for QT lupdate ") diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index 8f8b45d82..b917969f8 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -7,6 +7,12 @@ set(SIMU_SRC ${SIMU_SRC} simpgmspace.cpp) add_definitions(-DSIMU) remove_definitions(-DCLI) +if(SDL_FOUND) + include_directories(${SDL_INCLUDE_DIR}) + add_definitions(-DSIMU_AUDIO) + add_definitions(-DJOYSTICKS) +endif() + if(Qt5Widgets_FOUND) set(SIMULATOR_FLAVOUR opentx-${FLAVOUR}) set(SIMULATOR_TARGET ${SIMULATOR_FLAVOUR}-simulator) @@ -14,6 +20,7 @@ if(Qt5Widgets_FOUND) include_directories(${COMPANION_SRC_DIRECTORY} ${COMPANION_SRC_DIRECTORY}/simulation) add_library(${SIMULATOR_TARGET} SHARED ${SIMU_SRC} opentxsimulator.cpp) add_dependencies(${SIMULATOR_TARGET} ${FIRMWARE_DEPENDENCIES}) + target_link_libraries(${SIMULATOR_TARGET} ${SDL_LIBRARY}) qt5_use_modules(${SIMULATOR_TARGET} Core) add_custom_target(libsimulator DEPENDS ${SIMULATOR_TARGET}) endif() @@ -30,7 +37,7 @@ if(NOT WIN32) add_executable(simu WIN32 ${SIMU_SRC} ../../simu.cpp) add_dependencies(simu ${FIRMWARE_DEPENDENCIES}) target_include_directories(simu PUBLIC /usr/local/include/fox-1.6 PUBLIC /usr/include/fox-1.6 /opt/local/include/fox-1.6) - target_link_libraries(simu FOX-1.6 pthread) + target_link_libraries(simu FOX-1.6 pthread ${SDL_LIBRARY}) endif() if(APPLE) From 3f4cae8cb1e1d190e7c42eaa7fcee546cc255d6f Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 29 Mar 2016 22:25:56 +0200 Subject: [PATCH 89/98] PPM_UNIT = PERCENT_PREC1 by default (as in 2.1) --- radio/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 548c7f21d..ac867ed73 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -9,7 +9,7 @@ option(CURVES "Curves" ON) option(GVARS "Global variables") option(GUI "GUI enabled" ON) option(SPLASH "Splash enabled" ON) -option(PPM_UNIT "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)" PERCENT_PREC0) +option(PPM_UNIT "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)" PERCENT_PREC1) option(PPM_CENTER_ADJUSTABLE "PPM center adjustable" OFF) option(PPM_LIMITS_SYMETRICAL "PPM limits symetrical" OFF) option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" OFF) From 9cd9616ecee675144c7c680be51048b20b458e0b Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 29 Mar 2016 22:27:27 +0200 Subject: [PATCH 90/98] OVERRIDE_CHANNEL_FUNCTION = YES by default (as in 2.1) --- radio/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index ac867ed73..4a55a63e0 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -12,7 +12,7 @@ option(SPLASH "Splash enabled" ON) option(PPM_UNIT "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)" PERCENT_PREC1) option(PPM_CENTER_ADJUSTABLE "PPM center adjustable" OFF) option(PPM_LIMITS_SYMETRICAL "PPM limits symetrical" OFF) -option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" OFF) +option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" ON) option(DANGEROUS_MODULE_FUNCTIONS "Dangerous module functions (RangeCheck / Bind / Module OFF, etc.) available" OFF) option(FAI "Competition mode (no telemetry)" OFF) option(AUTOSOURCE "Automatic source detection in menus" ON) From 791a2e5f7546d88e913b47b87e9f770aee6add8e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 29 Mar 2016 22:30:38 +0200 Subject: [PATCH 91/98] PPM_UNIT = PERCENT_PREC1 by default (as in 2.1) --- radio/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 4a55a63e0..c834933ed 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -9,7 +9,7 @@ option(CURVES "Curves" ON) option(GVARS "Global variables") option(GUI "GUI enabled" ON) option(SPLASH "Splash enabled" ON) -option(PPM_UNIT "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)" PERCENT_PREC1) +set(PPM_UNIT "PERCENT_PREC1" CACHE STRING "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)") option(PPM_CENTER_ADJUSTABLE "PPM center adjustable" OFF) option(PPM_LIMITS_SYMETRICAL "PPM limits symetrical" OFF) option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" ON) From 9fb5416ac97b46ae9f4a581aebbc71dfdf503f9a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 29 Mar 2016 22:40:29 +0200 Subject: [PATCH 92/98] Makefile removed as it doesn't work anymore. CMake is used instead. --- radio/src/Makefile | 2087 -------------------------------------------- 1 file changed, 2087 deletions(-) delete mode 100644 radio/src/Makefile diff --git a/radio/src/Makefile b/radio/src/Makefile deleted file mode 100644 index 13d356d8d..000000000 --- a/radio/src/Makefile +++ /dev/null @@ -1,2087 +0,0 @@ -# !!!! BETA Makefile !!!! -# !!!! Use at own risk !!!! -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make install = Install the most recently compiled hex file. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - -#----------- INSTALL OPTIONS --------------------------- - -# Data directory we write hex files to. -DATA_DIR = /tmp - -# Backup the old flash (YES, NO) -BACKUP_FLASH = YES - -# Backup the old EEPROM (YES, NO) -BACKUP_EEPROM = YES - -# Restore EEPROM to 9x (YES, NO) (will set BACKUP_EEPROM to YES). -RESTORE_EEPROM = NO - -# Double write OK (YES, NO) -# Set this *if only if* your programmer can correctly write the EEPROM -# and FLASH in one command. If it doesn't, try setting the 9x fuse to -# not erase the eeprom when you erase the flash. -DOUBLE_WRITE_OK = NO - -# Command to read/write FLASH/EEPROM images. Currently -# Must have avrdude interface -AVRDUDE = /usr/local/bin/avrdude - -# Device options for AVRDUDE Command. -AVRDEVICE = -c usbasp -p m64 - -# Delay to start second AVRDUDE command (required by some). -DELAY = 5 - -#----------- BUILD OPTIONS --------------------------- - -# PCB version -# Values: 9X, 9X128, 9X2561, 9XR, 9XR128, 9XR2561, GRUVIN9X, MEGA2560, SKY9X, 9XRPRO, AR9X, TARANIS -# Old values STD and STD128 are mapped to 9X and 9X128 for compatibility -PCB = 9X - -# PCB revision -PCBREV = - -# LCD -# Values: DEFAULT, ST7565P, ST7565R, ERC12864FSF, ST7920 -LCD = DEFAULT - -# Enable JETI-Telemetry or FrSky Telemetry reception on UART0 -# For this option you need to modify your hardware! -# More information at [insertURLhere] -# Values = STD, FRSKY, FRSKY_SPORT, JETI, NMEA, ARDUPILOT, MAVLINK, TELEMETREZ -EXT = STD - -# GUI enabled -# Values = YES, NO -GUI = YES - -# FAI mode -# Values = YES, NO, CHOICE -FAI = NO - -# the latests deliveries for Turnigy 9x transmitters (since 2 years now, 2014) do not stop sending if no pulses are generated. -# This fact totally breaks the nice throttle and switch warning concept, because even we prevent sending pulses the -# transmitter module ignores this, and continues to send the last value or 0 at beginning. And 0 means in the middle of throttle -> 50%. -# To cope with this situation, we need a new concept how to handle throttle and switch warnings. -# if you have a 0 value (50% ) for throttle, while throttle warning is active, you should activate this switch -# Values = YES, NO -TURNIGY_TRANSMITTER_FIX = NO - -# Enable heli menu -# Values = YES, NO -HELI = NO - -# Enable templates menu -# Values = YES, NO -TEMPLATES = $(GUI) - -# Enable navigation with Pots / Sticks / Rotary encoders -# Values = NO -# POT1 (only POT1 available for fields modification), -# POT2 (menus scroll), -# POT3 (cursor down/up), -# POTS (POT1, POT2, POT3), -# STICKS -# ROTENC (Rotary encoder) -NAVIGATION = NO - -# Switches automatic selection -# Values = YES, NO -AUTOSWITCH = NO - -# Stock sticks replaced by FrSky ones -# Values = YES, NO -FRSKY_STICKS = NO - -# Sources automatic selection -# Values = YES, NO -AUTOSOURCE = NO - -# Double keys support (+/- means invert, +/up means max, -/dwn means min, up/down means reset to default) -# Values = YES, NO -DBLKEYS = NO - -# AUDIO Mods -# Values = YES, NO -AUDIO = NO - -# VOICE Mods -# Values = YES, NO -VOICE = NO - -# corrects different rounding for negative values. So instead of -99.9 you will see again -100.0 -# Values = YES, NO -CORRECT_NEGATIVE_VALUES = YES - -# adds additional code to prevent arithmetic overflows. MAX or MIN values stays. Not yet guaranteed!! Just improved -# Values = YES, NO -ARITHMETIC_OVERFLOW_CHECK = NO - -# increases resolution for throttle statistics and throttle counting, in very rare cases. -# this will be only true if an output channel is used for throttle calculation, and this channel has changed limits, e.g. -90% to +80% -# if you use standard limits for throttle or directly the throttle stick you do not need to bother about this option -# not valid for ARM based transmitters like Taranis, They do not have this rounding issue at all -# Values = YES, NO -ACCURAT_THROTTLE_STATS = NO - -# HAPTIC Mods -# Values = YES, NO -HAPTIC = NO - -# SmartieParts 2.2 Backlight support (inverted) -# Values = YES, NO -SP22 = NO - -# Fade Backlight using PWM -# Values = YES, NO -PWM_BACKLIGHT = NO - -# SPLASH on START -# Values = YES, NO, FIXED -SPLASH = $(GUI) - -# GRAPHICS (sliders / checkboxes / bold / batt graph) -GRAPHICS = YES -BOLD = YES -BATTGRAPH = NO - -# FONT TYPE -# Values = STD, SQT5 -FONT = STD - -# PPM center adjustable -# Values = YES, NO -PPM_CENTER_ADJUSTABLE = NO - -# PPM symmetrical limits -# Values = YES, NO -PPM_LIMITS_SYMETRICAL = NO - -# PPM display unit -# Values = PERCENT_PREC1, PERCENT_PREC0, US -PPM_UNIT = PERCENT_PREC1 - -# OverrideCHxx functions enable -# Values = YES, NO -OVERRIDE_CHANNEL_FUNCTION = YES - -# Dangerous functions available in Custom Functions (range test, bind, module off) -# Values = YES, NO -DANGEROUS_MODULE_FUNCTIONS = NO - -# FrSky Hub -# Values = YES, NO -FRSKY_HUB = YES - -# FrSky FAS current sensor offset compensation -# Values = YES, NO -FAS_OFFSET = NO - -# WS HowHigh -# Values = YES, NO -WS_HOW_HIGH = YES - -# Gauges in Telemetry screen -# Values = YES, NO -GAUGES = YES - -# GPS -# Values = YES, NO -GPS = YES - -# Vario -# Values = YES, NO -VARIO = YES - -# RTCLOCK -# Values = YES, NO -# default = YES (means enabled when available) -RTCLOCK = YES - -# Hardware volume -# Values = YES, NO -# default = YES (AR9X board doesn't have a hardware volume control as delivered but it can be fitted optionally) -HARDWARE_VOLUME = YES - -# BLUETOOTH -# Values = YES, NO -BLUETOOTH = NO - -# PXX (FrSky PCM) protocol -PXX = NO - -# DSM2 (Spektrum) protocol -# Values = NO, SERIAL, PPM -DSM2 = NO - -# HUBSAN protocol -# Values = NO, YES -HUBSAN = NO - -# DSM/PPM TX caddy PCB (Gruvin) -# For auto-switching switching between DSM2/X and Fr-Sky transmitter modules -# Values = YES, NO -TX_CADDY = NO - -#IR protocols (SILV / TRAC09 / PICZ / SWIFT) -IRPROTOS = NO - -# TRANSLATIONS -# Values = cz, de, en, fi, fr, it, se, es, pl, pt, nl -TRANSLATIONS = EN - -# TTS -# Values = en, fr, hu -TTS = $(TRANSLATIONS) - -# UNITS -# Values = imperial, metric -UNITS = METRIC - -# Default Tx Mode -# Values = NO / 1 / 2 / 3 / 4 -DEFAULT_MODE = NO - -# EEPROM_PROGRESS_BAR -# Values = YES, NO -EEPROM_PROGRESS_BAR = NO - -# Shutdown confirmation (for boards which have soft power) -# Values = NO, YES -SHUTDOWN_CONFIRMATION = NO - -# Activates the DEBUG Mode (all boards) -# On G9X V4 board, when VOICE=NO: -# PORTH:7 --> Transition LOW to HIGH = start of setupPulses(). Transition HIGH to LOW = end of setupPulses(). -# PORTH:6 --> LOW->HIGH = start of mixer calcs. HIGH->LOW, end of mixer calcs. -# Values = YES, NO -DEBUG = NO - -# Activate Command Line Interpreter -# Values = NO, YES -CLI = NO - -# Activate writing of telemetry received data to telemetry.log file -# Values = YES, NO -LOG_TELEMETRY = NO - -# Timers Count -# Values = 1, 2, 3 (on ARM boards) -TIMERS = 2 - -# Flight Modes -# Values = YES, NO -FLIGHT_MODES = YES - -# Curves -# Values = YES, NO -CURVES = YES - -# Global Vars -# Values = YES, NO -GVARS = NO - -# Enable another 3 positions switch to replace a pot -# Values = NO, POT1, POT2, POT3, -3POS = NO - -# Lua interpreter embedded -# Values = NO, NO_MODEL_SCRIPTS, YES -LUA = NO - -# Menu Lock modes -# Values = NO, READONLY, NOMENUS -MENUS_LOCK = NO - -# USB options in the main image -# Values = JOYSTICK, MASSSTORAGE, SERIAL -# JOYSTICK: The TX will appear as a joystick -# MASSSTORAGE: The TX will appear as a drive -# SERIAL: The TX will appear as a serial port -USB = JOYSTICK - -# Mixers monitor view added to Channels monitor one -# Values = NO, YES -# YES - Adds mixers output view to Channels monitor screen, -# pressing [ENT] switches between views. -# NO - classic Channels monitor -MIXERS_MONITOR = NO - -# Use newlib-nano -# Values = NO, YES -NANO = NO - -# Use custom bin based allocator for Lua -# Values = NO, YES -# YES - use our bin based allocator -# NO - use default Lua allocator -USE_BIN_ALLOCATOR = NO - -# Enable trace of events into Trace Buffer for debugging purposes -# Activating any of these options also activates DEBUG and DEBUG_TRACE_BUFFER -# Values = NO, YES -# TRACE_SD_CARD SD card operations (read, write, etc) -# TRACE_FATFS FatFs file operations -# TRACE_AUDIO Audio processing (not yet implemented) -TRACE_SD_CARD = NO -TRACE_FATFS = NO -TRACE_AUDIO = NO - -# Enable double buffering for LCD. Only for TARANIS PLUS and 9XE targets. -# Activating requires about 6kB of RAM, but it enables menus task to -# immediately start to compose a new LCD image while the current one is -# being written to LCD by DMA. -# If this option is NO, then first function that affects LCD buffer is -# delayed until DMA transfer is finished. -# Values = NO, YES -LCD_DUAL_BUFFER = NO - -# Enable internal module PPM mode for Taranis -# Values = NO, YES -TARANIS_INTERNAL_PPM = NO - -# Support for D16-EU only (no D8, no LR12 which are not EU compatible) -# Value = NO, YES -SUPPORT_D16_EU_ONLY = NO - -# Enable disk IO simulation in simulator -# Simulator will use FatFs module and simulated IO layer that -# uses "./sdcard.image" file as image of SD card. -# This file must contain whole SD card from first to last sector -# Values = NO, YES -SIMU_DISKIO = NO - -# Enable audio in simulator -# Values = NO, YES -SIMU_AUDIO = NO - -# Enable Watchdog test (DANGEROUS) -# Values = NO, YES -WATCHDOG_TEST = NO - -# Treat compiler warnings as errors -# Values = NO, YES -WARNINGS_AS_ERRORS = NO - -# Enable saving of Lua byte-code of all loaded scripts -# Values = NO, YES -LUA_COMPILER = NO - -# Enable ADC jitter measurement -# Values = NO, YES -JITTER_MEASURE = NO - -# Enable ADC jitter filtering -# Values = NO, YES -JITTER_FILTER = YES - -#------- END BUILD OPTIONS --------------------------- - -# Define programs and commands. -SHELL = sh - -IMG2LBM = -python ../util/img2lbm.py -BIN2LBM = -python ../util/bin2lbm.py -ifeq ($(OS), Windows_NT) - FONT2PNG = -python ../util/font2png.py -else - FONT2PNG = -xvfb-run --server-args="-screen 0 1024x768x24" python ../util/font2png.py -endif -TRANSLATE = -python ../util/translate.py - -VERSION_MAJOR = 2 -VERSION_MINOR = 2 -VERSION_REVISION = 0 - -VERSION = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_REVISION)$(OPENTX_VERSION_SUFFIX) - -THIRDPARTY = thirdparty -COOSDIR = $(THIRDPARTY)/CoOS -FATFSDIR = $(THIRDPARTY)/FatFs -LUADIR = $(THIRDPARTY)/Lua/src - -SRC = -CPPSRC = -INCDIRS = . translations -LUADEP = -DEBUG_TRACE_BUFFER = NO - -# MCU name -ifeq ($(PCB), $(filter $(PCB), HORUS)) - $(error You have to use CMake to compile OpenTX for this PCB $(PCB)) -else ifneq ($(PCB), $(filter $(PCB), STD 9X 9XR STD128 9X128 9XR128 9X2561 9XR2561 GRUVIN9X MEGA2560 SKY9X 9XRPRO AR9X TARANIS FLAMENCO)) - $(error Sorry, the PCB $(PCB) is not supported yet in OpenTX) -endif - -GVARS_VARIANT = +1 -FRSKY_VARIANT = +2 -3POS_VARIANT = +4 -MAVLINK_VARIANT = +8 -M128_VARIANT = +32768 -M2561_VARIANT = +16384 -EEPROM_VARIANT = 0 - -GUIMODELSRC = gui/$(GUIDIRECTORY)/menu_model.cpp gui/$(GUIDIRECTORY)/menu_model_select.cpp gui/$(GUIDIRECTORY)/menu_model_setup.cpp gui/$(GUIDIRECTORY)/menu_model_limits.cpp gui/$(GUIDIRECTORY)/menu_model_logical_switches.cpp gui/$(GUIDIRECTORY)/menu_model_custom_functions.cpp gui/$(GUIDIRECTORY)/menu_model_telemetry.cpp -GUIGENERALSRC = gui/$(GUIDIRECTORY)/menu_general.cpp gui/$(GUIDIRECTORY)/menu_general_setup.cpp gui/$(GUIDIRECTORY)/menu_general_trainer.cpp gui/$(GUIDIRECTORY)/menu_general_version.cpp gui/$(GUIDIRECTORY)/menu_general_calib.cpp - -BITMAPS = bitmaps/sticks.lbm - -FONTS = $(patsubst %.png,%.lbm,$(wildcard fonts/std/*.png)) - -ifeq ($(PCB), $(filter $(PCB), STD 9X 9XR)) - # 9x/9xr radio - GUIDIRECTORY = 9x - ARCH = AVR - LCDSIZE = 128 - TRGT = avr- - MCU = atmega64 - OPT = s - SDCARD = NO - THR_TRACE = NO - INCDIRS += targets/9x bitmaps bitmaps/9x - CPPDEFS = -DF_CPU=$(F_CPU)UL -DPCBSTD -DCPUM64 -DEEPROM -DEEPROM_RLC -DEEPROM_VARIANT=$(shell echo ${EEPROM_VARIANT} | bc) - BOARDSRC = main_avr.cpp targets/9x/board_stock.cpp - EXTRABOARDSRC = targets/common_avr/adc_driver.cpp targets/common_avr/telemetry_driver.cpp - ifeq ($(GUI), YES) - EXTRABOARDSRC += targets/9x/lcd_driver.cpp - endif - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_rlc.cpp - PULSESSRC = pulses/pulses_avr.cpp - CPPSRC += debug.cpp - BITMAPS += bitmaps/9x/splash.lbm bitmaps/9x/asterisk.lbm bitmaps/9x/about.lbm - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs_mixes.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_diagkeys.cpp gui/$(GUIDIRECTORY)/menu_general_diaganas.cpp - - ifeq ($(PCB), 9XR) - FLAVOUR = 9xr - CPPDEFS += -DPCB9XR - else - FLAVOUR = 9x - CPPDEFS += -DPCB9X - endif - - ifeq ($(TELEMETRY_MOD), 14051) - CPPDEFS += -DTELEMETRY_MOD_14051 - endif - - ifeq ($(TELEMETRY_MOD), 14051_SWAPPED) - CPPDEFS += -DTELEMETRY_MOD_14051_SWAPPED - endif - - ifeq ($(AUDIO), YES) - CPPDEFS += -DAUDIO - CPPSRC += audio_avr.cpp - BUZZER = NO - else - BUZZER = YES - endif - - ifeq ($(BUZZER), YES) - CPPDEFS += -DBUZZER - CPPSRC += buzzer.cpp - endif - - ifeq ($(VOICE), YES) - CPPDEFS += -DVOICE - CPPSRC += targets/9x/voice.cpp - endif - - ifeq ($(PWM_BACKLIGHT), YES) - ifeq ($(VOICE), YES) - $(error Sorry, PWM_BACKLIGHT doesnt work on stock board with VOICE mod) - endif - ifeq ($(AUDIO), YES) - $(error Sorry, PWM_BACKLIGHT doesnt work on stock board with AUDIO mod) - endif - CPPDEFS += -DPWM_BACKLIGHT - endif - - ifeq ($(HAPTIC), YES) - CPPDEFS += -DHAPTIC - CPPSRC += haptic.cpp - endif - - ifeq ($(SP22), YES) - CPPDEFS += -DSP22 - endif - - ifeq ($(FAS_OFFSET), YES) - CPPDEFS += -DFAS_OFFSET - endif -endif - -ifeq ($(PCB), $(filter $(PCB), STD128 9X128 9XR128)) - # 9X/9XR radio with ATmega64 replaced by ATmega128 - GUIDIRECTORY = 9x - ARCH = AVR - LCDSIZE = 128 - TRGT = avr- - MCU = atmega128 - OPT = s - SDCARD = NO - THR_TRACE = NO - EEPROM_VARIANT += ${M128_VARIANT} - CPPDEFS = -DF_CPU=$(F_CPU)UL -DPCBSTD -DCPUM128 -DEEPROM -DEEPROM_RLC -DEEPROM_VARIANT=$(shell echo ${EEPROM_VARIANT} | bc) - INCDIRS += targets/9x bitmaps bitmaps/9x - BOARDSRC = main_avr.cpp targets/9x/board_stock.cpp - EXTRABOARDSRC = targets/common_avr/adc_driver.cpp targets/9x/lcd_driver.cpp targets/common_avr/telemetry_driver.cpp - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_rlc.cpp - PULSESSRC = pulses/pulses_avr.cpp - CPPSRC += debug.cpp - BITMAPS += bitmaps/9x/splash.lbm bitmaps/9x/asterisk.lbm bitmaps/9x/about.lbm - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs_mixes.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_diagkeys.cpp gui/$(GUIDIRECTORY)/menu_general_diaganas.cpp - - ifeq ($(PCB), 9XR128) - FLAVOUR = 9xr128 - CPPDEFS += -DPCB9XR128 - else - FLAVOUR = 9x128 - CPPDEFS += -DPCB9X128 - endif - - ifeq ($(TELEMETRY_MOD), 14051) - CPPDEFS += -DTELEMETRY_MOD_14051 - endif - - ifeq ($(TELEMETRY_MOD), 14051_SWAPPED) - CPPDEFS += -DTELEMETRY_MOD_14051_SWAPPED - endif - - ifeq ($(AUDIO), YES) - CPPDEFS += -DAUDIO - CPPSRC += audio_avr.cpp - BUZZER = NO - else - BUZZER = YES - endif - - ifeq ($(BUZZER), YES) - CPPDEFS += -DBUZZER - CPPSRC += buzzer.cpp - endif - - ifeq ($(VOICE), YES) - CPPDEFS += -DVOICE - CPPSRC += targets/9x/voice.cpp - endif - - ifeq ($(PWM_BACKLIGHT), YES) - ifeq ($(VOICE), YES) - $(error Sorry, PWM_BACKLIGHT doesnt work on stock board with VOICE mod) - endif - ifeq ($(AUDIO), YES) - $(error Sorry, PWM_BACKLIGHT doesnt work on stock board with AUDIO mod) - endif - CPPDEFS += -DPWM_BACKLIGHT - endif - - ifeq ($(HAPTIC), YES) - CPPDEFS += -DHAPTIC - CPPSRC += haptic.cpp - endif - - ifeq ($(SP22), YES) - CPPDEFS += -DSP22 - endif -endif - -ifeq ($(PCB), $(filter $(PCB), 9X2561)) - # 9X/9XR radio with ATmega64 replaced by ATmega2561 - GUIDIRECTORY = 9x - ARCH = AVR - LCDSIZE = 128 - TRGT = avr- - MCU = atmega2561 - OPT = s - SDCARD = NO - THR_TRACE = YES - EEPROM_VARIANT += ${M2561_VARIANT} - CPPDEFS = -DF_CPU=$(F_CPU)UL -DPCBSTD -DCPUM2561 -DEEPROM -DEEPROM_RLC -DEEPROM_VARIANT=$(shell echo ${EEPROM_VARIANT} | bc) - INCDIRS += targets/9x bitmaps bitmaps/9x - BOARDSRC = main_avr.cpp targets/9x/board_stock.cpp - EXTRABOARDSRC = targets/common_avr/adc_driver.cpp targets/9x/lcd_driver.cpp targets/common_avr/telemetry_driver.cpp - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_rlc.cpp - PULSESSRC = pulses/pulses_avr.cpp - CPPSRC += debug.cpp - BITMAPS += bitmaps/9x/splash.lbm bitmaps/9x/asterisk.lbm bitmaps/9x/about.lbm - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs_mixes.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_diagkeys.cpp gui/$(GUIDIRECTORY)/menu_general_diaganas.cpp - - ifeq ($(PCB), 9XR2561) - FLAVOUR = 9xr2561 - CPPDEFS += -DPCB9XR2561 - else - FLAVOUR = 9x2561 - CPPDEFS += -DPCB9X2561 - endif - - ifeq ($(AUDIO), YES) - CPPDEFS += -DAUDIO - CPPSRC += audio_avr.cpp - BUZZER = NO - else - BUZZER = YES - endif - - ifeq ($(BUZZER), YES) - CPPDEFS += -DBUZZER - CPPSRC += buzzer.cpp - endif - - ifeq ($(VOICE), YES) - CPPDEFS += -DVOICE - CPPSRC += targets/9x/voice.cpp - endif - - ifeq ($(PWM_BACKLIGHT), YES) - ifeq ($(VOICE), YES) - $(error Sorry, PWM_BACKLIGHT doesnt work on stock board with VOICE mod) - endif - ifeq ($(AUDIO), YES) - $(error Sorry, PWM_BACKLIGHT doesnt work on stock board with AUDIO mod) - endif - CPPDEFS += -DPWM_BACKLIGHT - endif - - ifeq ($(HAPTIC), YES) - CPPDEFS += -DHAPTIC - CPPSRC += haptic.cpp - endif - - ifeq ($(SP22), YES) - CPPDEFS += -DSP22 - endif -endif - -ifeq ($(PCB), GRUVIN9X) - # 9x radio with a gruvin9x replacement board - GUIDIRECTORY = 9x - FLAVOUR = gruvin9x - ARCH = AVR - LCDSIZE = 128 - ifeq ($(PCBREV), REV0) - CPPDEFS = -DREV0 - else - CPPDEFS = -DREV1 - endif - TRGT = avr- - MCU = atmega2560 - OPT = s - CPPDEFS += -DF_CPU=$(F_CPU)UL -DPCBGRUVIN9X -DCPUM2560 -DEEPROM -DEEPROM_RLC -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC - SDCARD = NO - BUZZER = NO - THR_TRACE = YES - INCDIRS += targets/gruvin9x targets/9x bitmaps bitmaps/9x $(FATFSDIR) $(FATFSDIR)/option - BOARDSRC = main_avr.cpp targets/gruvin9x/board_gruvin9x.cpp - EXTRABOARDSRC = targets/common_avr/adc_driver.cpp targets/9x/lcd_driver.cpp targets/common_avr/telemetry_driver.cpp - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_rlc.cpp - PULSESSRC = pulses/pulses_avr.cpp - CPPSRC += audio_avr.cpp haptic.cpp debug.cpp - BITMAPS += bitmaps/9x/splash.lbm bitmaps/9x/asterisk.lbm bitmaps/9x/about.lbm - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs_mixes.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_diagkeys.cpp gui/$(GUIDIRECTORY)/menu_general_diaganas.cpp - - ifeq ($(SDCARD), YES) - CPPDEFS += -DRTCLOCK -DSDCARD - CPPSRC += rtc.cpp sdcard.cpp logs.cpp targets/gruvin9x/rtc_driver.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_sdmanager.cpp - EXTRABOARDSRC += $(FATFSDIR)/ff.c $(FATFSDIR)/fattime.c $(FATFSDIR)/option/ccsbcs.c targets/gruvin9x/diskio.cpp - endif - - ifeq ($(BUZZER), YES) - CPPDEFS += -DBUZZER - CPPSRC += buzzer.cpp - endif - - ifeq ($(VOICE), YES) - CPPDEFS += -DVOICE - CPPSRC += targets/gruvin9x/somo14d.cpp - endif - - # Enable extra rotary encoders (Gruvin9x board only) - # Values = YES, NO - ROTARY_ENCODERS = 2 - CPPDEFS += -DROTARY_ENCODERS=${ROTARY_ENCODERS} -endif - -ifeq ($(PCB), MEGA2560) - # ARDUINO2560 DIY RADIO - GUIDIRECTORY = 9x - FLAVOUR = mega2560 - ARCH = AVR - LCDSIZE = 128 - TRGT = avr- - MCU = atmega2560 - OPT = s - CPPDEFS = -DF_CPU=$(F_CPU)UL -DPCBMEGA2560 -DCPUM2560 -DEEPROM -DEEPROM_RLC -DEEPROM_VARIANT=0 - SDCARD = NO - THR_TRACE = YES - PWRMANAGE = NO - INCDIRS += targets/mega2560 targets/9x bitmaps bitmaps/9x $(FATFSDIR) $(FATFSDIR)/option - BOARDSRC = main_avr.cpp targets/mega2560/board_mega2560.cpp - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_rlc.cpp - PULSESSRC = pulses/pulses_avr.cpp - CPPSRC += debug.cpp - BITMAPS += bitmaps/9x/splash.lbm bitmaps/9x/asterisk.lbm bitmaps/9x/about.lbm - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs_mixes.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_diagkeys.cpp gui/$(GUIDIRECTORY)/menu_general_diaganas.cpp - - EXTRABOARDSRC = targets/common_avr/adc_driver.cpp targets/9x/lcd_driver.cpp targets/common_avr/telemetry_driver.cpp - - ifeq ($(PWRMANAGE), YES) - CPPDEFS += -DPWRMANAGE - endif - - ifeq ($(SDCARD), YES) - EXTRABOARDSRC += $(FATFSDIR)/ff.c $(FATFSDIR)/fattime.c $(FATFSDIR)/option/ccsbcs.c targets/gruvin9x/diskio.cpp - CPPDEFS += -DSDCARD -DRTCLOCK - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_sdmanager.cpp - CPPSRC += rtc.cpp sdcard.cpp logs.cpp targets/gruvin9x/rtc_driver.cpp - endif - - ifeq ($(AUDIO), YES) - CPPDEFS += -DAUDIO - CPPSRC += audio_avr.cpp - BUZZER = NO - else - BUZZER = YES - endif - - ifeq ($(BUZZER), YES) - CPPDEFS += -DBUZZER - CPPSRC += buzzer.cpp - endif - - ifeq ($(VOICE), YES) - CPPDEFS += -DVOICE - CPPSRC += targets/gruvin9x/somo14d.cpp - endif - - ifeq ($(HAPTIC), YES) - CPPDEFS += -DHAPTIC - CPPSRC += haptic.cpp - endif - - # Enable extra rotary encoders - ROTARY_ENCODERS = 2 - CPPDEFS += -DROTARY_ENCODERS=${ROTARY_ENCODERS} -endif - -ifeq ($(PCB), $(filter $(PCB), SKY9X 9XRPRO AR9X)) - # 9x/9XR radio with a sky9x replacement board - GUIDIRECTORY = 9x - ARCH = ARM - LCDSIZE = 128 - CPPDEFS = -Dat91sam3s4 -DPPM_PIN_HW_SERIAL - ifeq ($(PCB), 9XRPRO) - CPPDEFS = -Dat91sam3s8 - FLAVOUR = 9xrpro - CPPDEFS += -DREVX - LDSCRIPT = targets/sky9x/sam3s8c_flash.ld - else ifeq ($(PCB), AR9X) - CPPDEFS = -Dat91sam3s8 - FLAVOUR = ar9x - CPPDEFS += -DAR9X - LDSCRIPT = targets/sky9x/sam3s8c_flash.ld - else ifeq ($(PCBREV), REVA) - FLAVOUR = sky9x - CPPDEFS += -DREVA - LDSCRIPT = targets/sky9x/sam3s2c_flash.ld - CPPSRC += targets/sky9x/coproc_driver.cpp - else ifeq ($(PCBREV), REVB) - FLAVOUR = sky9x - CPPDEFS += -DREVB -DCOPROCESSOR - LDSCRIPT = targets/sky9x/sam3s4c_flash.ld - CPPSRC += targets/sky9x/coproc_driver.cpp - else - FLAVOUR = sky9x - CPPDEFS += -DREVC -DCOPROCESSOR - LDSCRIPT = targets/sky9x/sam3s4c_flash.ld - CPPSRC += targets/sky9x/coproc_driver.cpp - endif - TRGT = arm-none-eabi- - MCU = cortex-m3 - OPT = s - SDCARD = YES - BUZZER = NO - THR_TRACE = YES - EXT = FRSKY_SPORT - CPPDEFS += -DPCBSKY9X -DCPUARM -DEEPROM -DEEPROM_VARIANT=0 -DAUDIO -DHAPTIC -DDSM2 -DDSM2_PPM -DPXX - ifeq ($(PCB), SKY9X) - CPPDEFS += -DROTARY_ENCODERS=1 - CPPSRC += targets/sky9x/rotenc_driver.cpp - endif - ifeq ($(LOG_TELEMETRY), YES) - CPPDEFS += -DLOG_TELEMETRY - endif - INCDIRS += targets/sky9x bitmaps bitmaps/9x $(COOSDIR) $(COOSDIR)/kernel $(COOSDIR)/portable - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_hardware.cpp gui/$(GUIDIRECTORY)/menu_general_diagkeys.cpp gui/$(GUIDIRECTORY)/menu_general_diaganas.cpp - BOARDSRC = main_arm.cpp targets/sky9x/board_sky9x.cpp targets/sky9x/trainer_driver.cpp - EXTRABOARDSRC = targets/sky9x/lcd_driver.cpp - SRC += targets/sky9x/core_cm3.c targets/sky9x/board_lowlevel.c targets/sky9x/crt.c targets/sky9x/vectors_sam3s.c - SRC += $(COOSDIR)/kernel/core.c $(COOSDIR)/kernel/hook.c $(COOSDIR)/kernel/task.c $(COOSDIR)/kernel/event.c $(COOSDIR)/kernel/time.c $(COOSDIR)/kernel/timer.c $(COOSDIR)/kernel/flag.c $(COOSDIR)/kernel/mutex.c $(COOSDIR)/kernel/serviceReq.c $(COOSDIR)/portable/GCC/port.c $(COOSDIR)/portable/arch.c - SRC += targets/sky9x/usb/device/core/USBD_UDP.c targets/sky9x/usb/device/core/USBDDriver.c - SRC += targets/sky9x/usb/device/massstorage/MSDDriver.c targets/sky9x/usb/device/massstorage/MSDDStateMachine.c targets/sky9x/usb/device/massstorage/MSDLun.c targets/sky9x/usb/device/massstorage/MSDDriverDescriptors.c targets/sky9x/usb/device/massstorage/SBCMethods.c - SRC += targets/sky9x/usb/common/core/USBEndpointDescriptor.c targets/sky9x/usb/common/core/USBGenericRequest.c targets/sky9x/usb/common/core/USBFeatureRequest.c targets/sky9x/usb/common/core/USBInterfaceRequest.c targets/sky9x/usb/common/core/USBGetDescriptorRequest.c targets/sky9x/usb/common/core/USBSetAddressRequest.c targets/sky9x/usb/common/core/USBSetConfigurationRequest.c targets/sky9x/usb/common/core/USBConfigurationDescriptor.c targets/sky9x/usb/common/core/USBGenericDescriptor.c - SRC += targets/sky9x/MEDSdcard.c - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_raw.cpp storage/eeprom_conversions.cpp - PULSESSRC = pulses/pulses_arm.cpp pulses/ppm_arm.cpp pulses/pxx_arm.cpp pulses/dsm2_arm.cpp - CPPSRC += tasks_arm.cpp audio_arm.cpp haptic.cpp gui/$(GUIDIRECTORY)/view_about.cpp gui/$(GUIDIRECTORY)/view_text.cpp telemetry/telemetry.cpp - CPPSRC += targets/sky9x/telemetry_driver.cpp targets/sky9x/serial2_driver.cpp targets/sky9x/pwr_driver.cpp targets/sky9x/adc_driver.cpp targets/sky9x/eeprom_driver.cpp targets/sky9x/pulses_driver.cpp targets/sky9x/keys_driver.cpp targets/sky9x/audio_driver.cpp targets/sky9x/buzzer_driver.cpp targets/sky9x/haptic_driver.cpp targets/sky9x/sdcard_driver.cpp targets/sky9x/massstorage.cpp - CPPSRC += debug.cpp - EXTRABOARDSRC += loadboot.cpp - BITMAPS += bitmaps/9x/splash.lbm bitmaps/9x/asterisk.lbm bitmaps/9x/about.lbm - ifeq ($(SDCARD), YES) - CPPDEFS += -DSDCARD -DVOICE - INCDIRS += $(FATFSDIR) $(FATFSDIR)/option - CPPSRC += sdcard.cpp logs.cpp - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs_mixes.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_sdmanager.cpp - EXTRABOARDSRC += $(FATFSDIR)/ff.c $(FATFSDIR)/fattime.c $(FATFSDIR)/option/ccsbcs.c targets/sky9x/diskio.cpp - endif - ifeq ($(BUZZER), YES) - CPPDEFS += -DBUZZER - CPPSRC += buzzer.cpp - endif - ifeq ($(RTCLOCK), YES) - CPPDEFS += -DRTCLOCK - CPPSRC += rtc.cpp targets/sky9x/rtc_driver.cpp - else ifeq ($(PCB), SKY9X) - CPPSRC += targets/sky9x/rtc_driver.cpp - endif - ifeq ($(BLUETOOTH), YES) - CPPDEFS += -DBLUETOOTH - CPPSRC += targets/sky9x/bluetooth.cpp - endif - ifeq ($(DEBUG), YES) - SRC += syscalls.c - endif - ifeq ($(HARDWARE_VOLUME), NO) - CPPDEFS += -DNO_HARDWARE_VOLUME - endif -endif - -ifeq ($(PCB), TARANIS) - # TARANIS radio - ARCH = ARM - LCDSIZE = 212 - GUIDIRECTORY = taranis - ifeq ($(PCBREV), REV9E) - MCU = cortex-m4 - FLAVOUR = taranis-x9e - CPPDEFS = -DREVPLUS -DREV9E - ifeq ($(LCD_DUAL_BUFFER), YES) - CPPDEFS += -DLCD_DUAL_BUFFER - endif - HAPTIC = YES - EXTRABOARDSRC += targets/taranis/bluetooth_driver.cpp - else ifeq ($(PCBREV), REVPLUS) - MCU = cortex-m3 - FLAVOUR = taranis-plus - CPPDEFS = -DREVPLUS - ifeq ($(LCD_DUAL_BUFFER), YES) - CPPDEFS += -DLCD_DUAL_BUFFER - endif - HAPTIC = YES - else ifeq ($(PCBREV), REV4a) - MCU = cortex-m3 - FLAVOUR = taranis - CPPDEFS = -DREV4a - else - MCU = cortex-m3 - FLAVOUR = taranis - CPPDEFS = -DREV4 - endif - ifeq ($(LOG_TELEMETRY), YES) - CPPDEFS += -DLOG_TELEMETRY - endif - ifeq ($(TRACE_SD_CARD), YES) - DEBUG = YES - DEBUG_TRACE_BUFFER = YES - CPPDEFS += -DTRACE_SD_CARD - endif - ifeq ($(TRACE_FATFS), YES) - DEBUG = YES - DEBUG_TRACE_BUFFER = YES - CPPDEFS += -DTRACE_FATFS - endif - ifeq ($(TRACE_AUDIO), YES) - DEBUG = YES - DEBUG_TRACE_BUFFER = YES - CPPDEFS += -DTRACE_AUDIO - endif - ifeq ($(DEBUG_TRACE_BUFFER), YES) - CPPDEFS += -DDEBUG_TRACE_BUFFER - endif - ifeq ($(TARANIS_INTERNAL_PPM), YES) - CPPDEFS += -DTARANIS_INTERNAL_PPM - endif - ifeq ($(SUPPORT_D16_EU_ONLY), YES) - CPPDEFS += -DMODULE_D16_EU_ONLY_SUPPORT - endif - TRGT = arm-none-eabi- - OPT = s - BITMAPS += $(patsubst %.png,%.lbm,$(wildcard bitmaps/taranis/*.png)) - SDCARD = YES - THR_TRACE = YES - EXT = FRSKY_SPORT - AUTOSWITCH = YES - AUTOSOURCE = YES - DBLKEYS = YES - TIMERS = 2 - CPPDEFS += -DTIMERS=$(TIMERS) - PPM_LIMITS_SYMETRICAL = YES - PPM_CENTER_ADJUSTABLE = YES - DSM2 = PPM - CPPDEFS += -DPCBTARANIS -DCPUARM -DCPUSTM32 -DVIRTUALINPUTS -DLUAINPUTS -DXCURVES -DEEPROM -DEEPROM_RLC -DAUDIO -DPXX -DSBUS -DCROSSFIRE - INCDIRS += targets/taranis bitmaps bitmaps/taranis $(THIRDPARTY) $(COOSDIR) $(COOSDIR)/kernel $(COOSDIR)/portable - CPPDEFS += -DHSE_VALUE=12000000 - ifeq ($(PCBREV), REV9E) - STM32LIBPATH = $(THIRDPARTY)/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries - CPPDEFS += -DSTM32F4 -DSTM32F40_41xxx -DEEPROM_VARIANT=32768 - INCDIRS += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Include $(STM32LIBPATH)/CMSIS/Include $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/inc - LDSCRIPT = targets/taranis/stm32f4_flash.ld - else - STM32LIBPATH= $(THIRDPARTY)/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries - CPPDEFS += -DEEPROM_VARIANT=0 - INCDIRS += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/inc $(STM32LIBPATH)/CMSIS/Device/ST/STM32F2xx/Include $(STM32LIBPATH)/CMSIS/include - LDSCRIPT = targets/taranis/stm32f2_flash.ld - endif - STM32USBPATH = $(THIRDPARTY)/STM32_USB-Host-Device_Lib_V2.1.0/Libraries - INCDIRS += $(STM32USBPATH)/STM32_USB_OTG_Driver/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Core/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/hid/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/cdc/inc - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_hardware.cpp - BOARDSRC = main_arm.cpp targets/taranis/board_taranis.cpp - EXTRABOARDSRC += targets/taranis/configure_pins.cpp targets/taranis/lcd_driver.cpp targets/taranis/flash_driver.cpp targets/taranis/i2c_driver.cpp targets/taranis/aspi.c targets/taranis/delays.c serial.cpp - SRC += $(COOSDIR)/kernel/core.c $(COOSDIR)/kernel/hook.c $(COOSDIR)/kernel/task.c $(COOSDIR)/kernel/event.c $(COOSDIR)/kernel/time.c $(COOSDIR)/kernel/timer.c $(COOSDIR)/kernel/flag.c $(COOSDIR)/kernel/mutex.c $(COOSDIR)/kernel/serviceReq.c $(COOSDIR)/portable/GCC/port.c $(COOSDIR)/portable/arch.c - SRC += targets/taranis/pwr_driver.c targets/taranis/usb_driver.c - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_rlc.cpp storage/eeprom_conversions.cpp - PULSESSRC = pulses/pulses_arm.cpp pulses/ppm_arm.cpp pulses/pxx_arm.cpp pulses/crossfire.cpp - CPPSRC += tasks_arm.cpp audio_arm.cpp sbus.cpp telemetry/telemetry.cpp - CPPSRC += targets/taranis/pulses_driver.cpp targets/taranis/keys_driver.cpp targets/taranis/adc_driver.cpp targets/taranis/trainer_driver.cpp targets/taranis/audio_driver.cpp targets/taranis/serial2_driver.cpp targets/taranis/telemetry_driver.cpp - CPPSRC += gui/$(GUIDIRECTORY)/bmp.cpp gui/$(GUIDIRECTORY)/view_channels.cpp gui/$(GUIDIRECTORY)/view_about.cpp gui/$(GUIDIRECTORY)/view_text.cpp debug.cpp - EXTRABOARDSRC += loadboot.cpp - ifeq ($(PCBREV), REV9E) - CPPSRC += targets/taranis/top_lcd_driver.cpp - SRC += targets/taranis/system_stm32f4xx.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/misc.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c - SRC += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f40_41xxx.s - else - SRC += targets/taranis/system_stm32f2xx.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/misc.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_usart.c - SRC += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s - endif - SRC += targets/taranis/usb_bsp.c targets/taranis/usbd_desc.c - SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_core.c - SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_dcd.c - SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_dcd_int.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_core.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_ioreq.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_req.c - EXTRABOARDSRC += targets/taranis/usbd_usr.cpp - SRC += syscalls.c - ifeq ($(USB), JOYSTICK) - CPPDEFS += -DUSB_JOYSTICK - SRC += targets/taranis/usbd_hid_joystick.c - else ifeq ($(USB), SERIAL) - CPPDEFS += -DUSB_SERIAL - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c - EXTRABOARDSRC += targets/taranis/usbd_cdc.cpp - else - CPPDEFS += -DUSB_MASS_STORAGE - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_data.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_scsi.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_core.c - EXTRABOARDSRC += targets/taranis/usbd_storage_msd.cpp - endif - ifeq ($(NANO), YES) - # use newlib-nano for linking - NEWLIB_NANO_FLAGS = --specs=nano.specs -u _printf_float - CPPDEFS += -DNANO - endif - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs.cpp gui/$(GUIDIRECTORY)/menu_model_mixes.cpp - ifeq ($(GVARS), YES) - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_gvars.cpp - endif - ifneq ($(LUA), NO) - ifeq ($(LUA), YES) - CPPDEFS += -DLUA_MODEL_SCRIPTS - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_custom_scripts.cpp - endif - CPPDEFS += -DLUA - INCDIRS += $(LUADIR) - CPPSRC += lua/interface.cpp lua/api_general.cpp lua/api_lcd.cpp lua/api_model.cpp - LUASRC = $(LUADIR)/lapi.c $(LUADIR)/lcode.c $(LUADIR)/lctype.c $(LUADIR)/ldebug.c $(LUADIR)/ldo.c $(LUADIR)/ldump.c $(LUADIR)/lfunc.c $(LUADIR)/lgc.c $(LUADIR)/llex.c $(LUADIR)/lmem.c \ - $(LUADIR)/lobject.c $(LUADIR)/lopcodes.c $(LUADIR)/lparser.c $(LUADIR)/lstate.c $(LUADIR)/lstring.c $(LUADIR)/ltable.c $(LUADIR)/lrotable.c $(LUADIR)/ltm.c $(LUADIR)/lundump.c $(LUADIR)/lvm.c $(LUADIR)/lzio.c \ - $(LUADIR)/lbaselib.c $(LUADIR)/linit.c $(LUADIR)/lmathlib.c $(LUADIR)/lbitlib.c $(LUADIR)/loadlib.c $(LUADIR)/lauxlib.c $(LUADIR)/ltablib.c $(LUADIR)/lcorolib.c $(LUADIR)/liolib.c $(LUADIR)/lstrlib.c - SRC += $(LUASRC) - ifeq ($(PCBREV), REV9E) - LUADEP = lua/lua_exports_taranis_x9e.inc - else - LUADEP = lua/lua_exports_taranis.inc - endif - ifeq ($(USE_BIN_ALLOCATOR), YES) - CPPDEFS += -DUSE_BIN_ALLOCATOR - CPPSRC += bin_allocator.cpp - endif - endif - EXTRABOARDSRC += $(FATFSDIR)/ff.c $(FATFSDIR)/fattime.c $(FATFSDIR)/option/ccsbcs.c targets/taranis/diskio.cpp - CPPSRC += sdcard.cpp logs.cpp rtc.cpp targets/taranis/rtc_driver.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_sdmanager.cpp gui/$(GUIDIRECTORY)/menu_general_diagkeys.cpp gui/$(GUIDIRECTORY)/menu_general_diaganas.cpp - CPPDEFS += -DSDCARD -DVOICE -DRTCLOCK - INCDIRS += $(FATFSDIR) $(FATFSDIR)/option - ifeq ($(DSM2), PPM) - CPPSRC += pulses/dsm2_arm.cpp - endif - ifeq ($(HUBSAN), YES) - CPPDEFS += -DHUBSAN - CPPSRC += pulses/hubsan.cpp - CPPSRC += targets/taranis/a7105_driver.cpp - endif - ifeq ($(HAPTIC), YES) - CPPDEFS += -DHAPTIC - CPPSRC += haptic.cpp - CPPSRC += targets/taranis/haptic_driver.cpp - endif - ifeq ($(MIXERS_MONITOR), YES) - CPPDEFS += -DMIXERS_MONITOR - endif - ifeq ($(WATCHDOG_TEST), YES) - CPPDEFS += -DWATCHDOG_TEST - endif - ifeq ($(JITTER_MEASURE), YES) - CPPDEFS += -DJITTER_MEASURE - endif - ifeq ($(JITTER_FILTER), YES) - CPPDEFS += -DJITTER_FILTER - endif -endif - -ifeq ($(PCB), FLAMENCO) - # FLAMENCO radio - ARCH = ARM - LCDSIZE = 320 - GUIDIRECTORY = flamenco - FLAVOUR = FLAMENCO - LDSCRIPT = targets/flamenco/stm32f4_flash.ld - STM32LIBPATH = $(THIRDPARTY)/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries - STM32USBPATH = $(THIRDPARTY)/STM32_USB-Host-Device_Lib_V2.1.0/Libraries - TRGT = arm-none-eabi- - MCU = cortex-m4 - OPT = 2 - CPPDEFS += -DHSE_VALUE=12000000 -DCOLORLCD -DSTM32F40_41xxx -DPPM_PIN_HW_SERIAL - BITMAPS += $(patsubst %.png,%.lbm,$(wildcard bitmaps/flamenco/*.png)) - FONTS = fonts/flamenco/font_stdsize.lbm fonts/flamenco/font_tinsize.lbm fonts/flamenco/font_smlsize.lbm fonts/flamenco/font_midsize.lbm fonts/flamenco/font_dblsize.lbm fonts/flamenco/font_xxlsize.lbm - SDCARD = YES - THR_TRACE = YES - EXT = FRSKY_SPORT - AUTOSWITCH = YES - AUTOSOURCE = YES - DBLKEYS = YES - PPM_LIMITS_SYMETRICAL = YES - PPM_CENTER_ADJUSTABLE = YES - DSM2 = PPM - TIMERS = 2 - CPPDEFS += -DTIMERS=$(TIMERS) - CPPDEFS += -DPCBFLAMENCO -DCPUARM -DCPUSTM32 -DEEPROM -DVIRTUALINPUTS -DLUAINPUTS -DXCURVES -DEEPROM_VARIANT=0 -DAUDIO -DPXX - INCDIRS += targets/flamenco bitmaps/flamenco $(THIRDPARTY) $(COOSDIR) $(COOSDIR)/kernel $(COOSDIR)/portable - INCDIRS += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/inc $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Include $(STM32LIBPATH)/CMSIS/include - STM32USBPATH = $(THIRDPARTY)/STM32_USB-Host-Device_Lib_V2.1.0/Libraries - INCDIRS += $(STM32USBPATH)/STM32_USB_OTG_Driver/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Core/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/hid/inc - INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/cdc/inc - BOARDSRC = main_arm.cpp targets/flamenco/board_flamenco.cpp - EXTRABOARDSRC += targets/flamenco/lcd_driver.cpp targets/flamenco/delays.c targets/flamenco/i2c_driver.cpp targets/taranis/configure_pins.cpp serial.cpp # targets/taranis/flash_driver.cpp - SRC += $(COOSDIR)/kernel/core.c $(COOSDIR)/kernel/hook.c $(COOSDIR)/kernel/task.c $(COOSDIR)/kernel/event.c $(COOSDIR)/kernel/time.c $(COOSDIR)/kernel/timer.c $(COOSDIR)/kernel/flag.c $(COOSDIR)/kernel/mutex.c $(COOSDIR)/kernel/serviceReq.c $(COOSDIR)/portable/GCC/port.c $(COOSDIR)/portable/arch.c - SRC += targets/flamenco/pwr_driver.c targets/flamenco/usb_driver.c - EEPROMSRC = storage/storage_common.cpp storage/eeprom_common.cpp storage/eeprom_raw.cpp - PULSESSRC = pulses/pulses_arm.cpp pulses/ppm_arm.cpp pulses/pxx_arm.cpp - CPPSRC += tasks_arm.cpp audio_arm.cpp sbus.cpp telemetry/telemetry.cpp - CPPSRC += targets/flamenco/tw8823_driver.cpp targets/flamenco/pulses_driver.cpp targets/flamenco/keys_driver.cpp targets/flamenco/adc_driver.cpp targets/flamenco/eeprom_driver.cpp targets/flamenco/trainer_driver.cpp targets/flamenco/audio_driver.cpp targets/flamenco/serial2_driver.cpp targets/flamenco/telemetry_driver.cpp - CPPSRC += gui/$(GUIDIRECTORY)/view_channels.cpp gui/$(GUIDIRECTORY)/view_about.cpp gui/$(GUIDIRECTORY)/view_text.cpp debug.cpp - SRC += targets/flamenco/system_stm32f4xx.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/misc.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c - SRC += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f40_41xxx.s - SRC += targets/flamenco/sdio_sd.c targets/flamenco/usb_bsp.c targets/flamenco/usbd_desc.c - SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_core.c - SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_dcd.c - SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_dcd_int.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_core.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_ioreq.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_req.c - EXTRABOARDSRC += targets/flamenco/usbd_usr.cpp - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_inputs_mixes.cpp - SRC += syscalls.c - ifeq ($(USB), JOYSTICK) - CPPDEFS += -DUSB_JOYSTICK - SRC += targets/flamenco/usbd_hid_joystick.c - else - CPPDEFS += -DUSB_MASS_STORAGE - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_data.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_scsi.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c - SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_core.c - EXTRABOARDSRC += targets/flamenco/usbd_storage_msd.cpp - endif - ifeq ($(GVARS), YES) - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_gvars.cpp - endif - ifneq ($(LUA), NO) - ifeq ($(LUA), YES) - CPPDEFS += -DLUA_MODEL_SCRIPTS - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_custom_scripts.cpp - endif - CPPDEFS += -DLUA - INCDIRS += $(LUADIR) - CPPSRC += lua/interface.cpp lua/api_general.cpp lua/api_lcd.cpp lua/api_model.cpp - LUASRC = $(LUADIR)/lapi.c $(LUADIR)/lcode.c $(LUADIR)/lctype.c $(LUADIR)/ldebug.c $(LUADIR)/ldo.c $(LUADIR)/ldump.c $(LUADIR)/lfunc.c $(LUADIR)/lgc.c $(LUADIR)/llex.c $(LUADIR)/lmem.c \ - $(LUADIR)/lobject.c $(LUADIR)/lopcodes.c $(LUADIR)/lparser.c $(LUADIR)/lstate.c $(LUADIR)/lstring.c $(LUADIR)/ltable.c $(LUADIR)/lrotable.c $(LUADIR)/ltm.c $(LUADIR)/lundump.c $(LUADIR)/lvm.c $(LUADIR)/lzio.c \ - $(LUADIR)/lbaselib.c $(LUADIR)/linit.c $(LUADIR)/lmathlib.c $(LUADIR)/lbitlib.c $(LUADIR)/loadlib.c $(LUADIR)/lauxlib.c $(LUADIR)/ltablib.c $(LUADIR)/lcorolib.c $(LUADIR)/liolib.c $(LUADIR)/lstrlib.c - SRC += $(LUASRC) - LUADEP = lua/lua_exports_flamenco.inc - endif - - EXTRABOARDSRC += $(FATFSDIR)/ff.c $(FATFSDIR)/fattime.c $(FATFSDIR)/option/ccsbcs.c targets/flamenco/diskio.cpp - CPPDEFS += -DSDCARD -DVOICE -DRTCLOCK - CPPSRC += sdcard.cpp rtc.cpp logs.cpp targets/taranis/rtc_driver.cpp - GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_sdmanager.cpp - INCDIRS += $(FATFSDIR) $(FATFSDIR)/option - - ifeq ($(DSM2), PPM) - CPPSRC += pulses/dsm2_arm.cpp - endif - - CPPDEFS += -DHAPTIC - CPPSRC += haptic.cpp - CPPSRC += targets/flamenco/haptic_driver.cpp - EXTRABOARDSRC += - - ifeq ($(TW8823_TRACES), YES) - CPPDEFS += -DTW8823_TRACES - endif - - ifeq ($(TW8823_BITMAPS), YES) - CPPDEFS += -DTW8823_BITMAPS - endif - - ifeq ($(TW8823_SERIAL), YES) - CPPDEFS += -DTW8823_SERIAL - endif -endif - -CC = $(TRGT)gcc -CPP = $(TRGT)cpp -AS = $(TRGT)as -OBJCOPY = $(TRGT)objcopy -OBJDUMP = $(TRGT)objdump -SIZE = $(TRGT)size -NM = $(TRGT)nm - -REMOVE = rm -f -REMOVEDIR = rm -rf - -SLEEP = sleep - -# Processor frequency. -F_CPU = 16000000 - -# Output format. (can be srec, ihex, binary) -FORMAT = ihex - -# Target file name (without extension). -TARGET = opentx - -# List C++ source files here. (C dependencies are automatically generated.) -ifeq ($(PCB), $(filter $(PCB), SKY9X 9XRPRO AR9X TARANIS FLAMENCO)) - TTS_SRC = translations/tts_cz.cpp translations/tts_de.cpp translations/tts_en.cpp translations/tts_es.cpp translations/tts_fr.cpp translations/tts_it.cpp translations/tts_nl.cpp translations/tts_pt.cpp translations/tts_sk.cpp translations/tts_se.cpp translations/tts_pl.cpp translations/tts_hu.cpp -else - STD_TTS_SRC = translations/tts_$(shell sh -c "echo $(TTS) | tr '[:upper:]' '[:lower:]'").cpp - TTS_SRC = $(shell sh -c "if test -f $(STD_TTS_SRC); then echo $(STD_TTS_SRC); else echo translations/tts_en.cpp; fi") -endif - -ifeq ($(GUI), YES) - GUISRC = gui/$(GUIDIRECTORY)/helpers.cpp gui/$(GUIDIRECTORY)/navigation.cpp gui/$(GUIDIRECTORY)/popups.cpp gui/$(GUIDIRECTORY)/widgets.cpp gui/$(GUIDIRECTORY)/menus.cpp $(GUIMODELSRC) $(GUIGENERALSRC) gui/$(GUIDIRECTORY)/view_main.cpp gui/$(GUIDIRECTORY)/view_statistics.cpp - ifeq ($(ARCH), ARM) - GUISRC += gui/gui_helpers.cpp - endif - CPPDEFS += -DGUI -endif - -CPPSRC += opentx.cpp functions.cpp strhelpers.cpp $(PULSESSRC) switches.cpp curves.cpp mixer.cpp stamp.cpp $(GUISRC) $(EEPROMSRC) timers.cpp trainer_input.cpp - -ifeq ($(GUI), YES) - GUISRC += gui/$(GUIDIRECTORY)/lcd.cpp gui/$(GUIDIRECTORY)/splash.cpp gui/$(GUIDIRECTORY)/fonts.cpp -endif - -GUISRC += keys.cpp maths.cpp translations.cpp $(TTS_SRC) - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DBGFMT = dwarf-2 - -CPPDEFS += -DTRANSLATIONS_$(TRANSLATIONS) - -# TTS language -CPPDEFS += -DTTS_$(TTS) - -ifeq ($(UNITS), IMPERIAL) - CPPDEFS += -DIMPERIAL_UNITS -endif - -ifneq ($(DEFAULT_MODE), NO) - CPPDEFS += -DDEFAULT_MODE=$(DEFAULT_MODE) -endif - -# If POTS are used for fields modification -ifeq ($(NAVIGATION), POT1) - CPPDEFS += -DNAVIGATION_POT1 -endif -ifeq ($(NAVIGATION), POT2) - CPPDEFS += -DNAVIGATION_POT2 -endif -ifeq ($(NAVIGATION), POT3) - CPPDEFS += -DNAVIGATION_POT3 -endif -ifeq ($(NAVIGATION), POTS) - CPPDEFS += -DNAVIGATION_POT1 -DNAVIGATION_POT2 -DNAVIGATION_POT3 -endif -ifeq ($(NAVIGATION), STICKS) - CPPDEFS += -DNAVIGATION_STICKS -endif -ifeq ($(NAVIGATION), ROTENC) - CPPDEFS += -DROTARY_ENCODER_NAVIGATION -endif - -ifeq ($(TURNIGY_TRANSMITTER_FIX), YES) - ifeq ($(PCB), $(filter $(PCB), TARANIS FLAMENCO)) - $(warning TURNIGY_TRANSMITTER_FIX is not available on this radio) - else - CPPDEFS += -DMODULE_ALWAYS_SEND_PULSES - endif -endif - -ifeq ($(LCD), ST7565R) - CPPDEFS += -DLCD_ST7565R -else ifeq ($(LCD), ERC12864FSF) - CPPDEFS += -DLCD_ERC12864FSF -else ifeq ($(LCD), ST7920) - CPPDEFS += -DLCD_ST7920 -endif - -ifeq ($(AUTOSWITCH), YES) - CPPDEFS += -DAUTOSWITCH -endif - -ifeq ($(AUTOSOURCE), YES) - CPPDEFS += -DAUTOSOURCE -endif - -ifeq ($(FRSKY_STICKS), YES) - CPPDEFS += -DFRSKY_STICKS -endif - -ifeq ($(DBLKEYS), YES) - ifeq ($(PCB), $(filter $(PCB), 9XR 9XR128 9XR2561)) - $(warning Sorry, DBLKEYS doesnt work on 9XR) - else - CPPDEFS += -DDBLKEYS - endif -endif - -ifeq ($(SPLASH), YES) - CPPDEFS += -DSPLASH -endif - -ifeq ($(SPLASH), FIXED) - CPPDEFS += -DSPLASH -DFSPLASH -endif - -ifeq ($(GRAPHICS), YES) - CPPDEFS += -DGRAPHICS -endif - -ifeq ($(BOLD), YES) - CPPDEFS += -DBOLD_FONT -endif - -ifneq ($(PCB), $(filter $(PCB), TARANIS FLAMENCO)) - ifeq ($(BATTGRAPH), YES) - CPPDEFS += -DBATTGRAPH - endif -endif - -ifneq ($(FONT), STD) - FONTDIR = $(shell sh -c "echo $(FONT) | tr '[:upper:]' '[:lower:]'") - FONTS += $(patsubst %.png,%.lbm,$(wildcard fonts/$(FONTDIR)/*.png)) - INCDIRS += fonts/$(FONTDIR) -endif - -INCDIRS += gui -INCDIRS += fonts/std - -ifeq ($(THR_TRACE), YES) - CPPDEFS += -DTHRTRACE -endif - -CPPDEFS += -DTIMERS=$(TIMERS) - -ifeq ($(FLIGHT_MODES), YES) - CPPDEFS += -DFLIGHT_MODES - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_flightmodes.cpp -endif - -ifeq ($(CURVES), YES) - CPPDEFS += -DCURVES - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_curves.cpp -endif - -ifeq ($(GVARS), YES) - CPPDEFS += -DGVARS - EEPROM_VARIANT += ${GVARS_VARIANT} -endif - -ifeq ($(MENUS_LOCK), READONLY) - CPPDEFS += -DMENUS_LOCK=1 -endif - -ifeq ($(MENUS_LOCK), NOMENUS) - CPPDEFS += -DMENUS_LOCK=2 -endif - -ifeq ($(CORRECT_NEGATIVE_VALUES), YES) - CPPDEFS += -DCORRECT_NEGATIVE_SHIFTS -endif - -ifeq ($(ARITHMETIC_OVERFLOW_CHECK), YES) - CPPDEFS += -DPREVENT_ARITHMETIC_OVERFLOW -endif - -ifeq ($(ACCURAT_THROTTLE_STATS), YES) - CPPDEFS += -DACCURAT_THROTTLE_TIMER -endif - -# EXTENSIONS (for Telemetry protocols) -ifneq ($(EXT), $(filter $(EXT), STD FRSKY FRSKY_SPORT ARDUPILOT NMEA JETI MAVLINK TELEMETREZ)) - $(error Sorry, the EXT $(EXT) is not supported yet in openTx) -endif - -ifeq ($(EXT), STD) - CPPDEFS += -DEXTSTD -endif - -ifeq ($(EXT), ARDUPILOT) - CPPDEFS += -DARDUPILOT - CPPSRC += telemetry/ardupilot.cpp -endif - -ifeq ($(EXT), NMEA) - CPPDEFS += -DNMEA - CPPSRC += telemetry/nmea.cpp -endif - -ifeq ($(EXT), JETI) - CPPDEFS += -DJETI - CPPSRC += telemetry/jeti.cpp -endif - -ifeq ($(EXT), MAVLINK) - CPPDEFS += -DMAVLINK - INCDIRS += thirdparty targets/common_avr/ - CPPSRC += telemetry/mavlink.cpp gui/$(GUIDIRECTORY)/view_mavlink.cpp targets/common_avr/serial_driver.cpp - EEPROM_VARIANT += ${MAVLINK_VARIANT} -endif - -ifeq ($(EXT), TELEMETREZ) - CPPDEFS += -DTELEMETREZ -endif - -ifeq ($(EXT), $(filter $(EXT), FRSKY FRSKY_SPORT TELEMETREZ)) - CPPDEFS += -DFRSKY - - ifeq ($(ARCH), ARM) - CPPSRC += telemetry/frsky.cpp telemetry/frsky_d_arm.cpp - else - CPPSRC += telemetry/frsky.cpp telemetry/frsky_d.cpp - endif - - ifeq ($(EXT), FRSKY_SPORT) - CPPSRC += telemetry/frsky_sport.cpp - CPPSRC += crc16.cpp - CPPDEFS += -DFRSKY_SPORT - endif - - CPPSRC += gui/$(GUIDIRECTORY)/view_telemetry.cpp - - ifeq ($(FRSKY_HUB), YES) - CPPDEFS += -DFRSKY_HUB - endif - - ifeq ($(WS_HOW_HIGH), YES) - CPPDEFS += -DWS_HOW_HIGH - endif - - ifeq ($(GAUGES), YES) - CPPDEFS += -DGAUGES - endif - - ifeq ($(GPS), YES) - CPPDEFS += -DGPS - endif - - ifeq ($(VARIO), YES) - CPPSRC += vario.cpp - CPPDEFS += -DVARIO - endif - EEPROM_VARIANT += ${FRSKY_VARIANT} -endif - -ifeq ($(SIMU), YES) - CPPDEFS += -DDEBUG - CPPSRC += dump.cpp -else ifeq ($(CLI), YES) - CPPDEFS += -DCLI - CPPSRC += cli.cpp dump.cpp -else ifeq ($(DEBUG), YES) - CPPSRC += dump.cpp -endif - -ifeq ($(DEBUG), YES) - CPPDEFS += -DDEBUG -endif - -ifeq ($(EEPROM_PROGRESS_BAR), YES) - CPPDEFS += -DEEPROM_PROGRESS_BAR -endif - -ifeq ($(SHUTDOWN_CONFIRMATION), YES) - CPPDEFS += -DSHUTDOWN_CONFIRMATION -endif - -RUN_FROM_FLASH = 1 - -### Global Build-Option Directives ### - -ifeq ($(PPM_CENTER_ADJUSTABLE), YES) - CPPDEFS += -DPPM_CENTER_ADJUSTABLE -endif - -ifeq ($(PPM_LIMITS_SYMETRICAL), YES) - CPPDEFS += -DPPM_LIMITS_SYMETRICAL -endif - -ifeq ($(OVERRIDE_CHANNEL_FUNCTION), YES) - CPPDEFS += -DOVERRIDE_CHANNEL_FUNCTION -endif - -ifeq ($(DANGEROUS_MODULE_FUNCTIONS), YES) - CPPDEFS += -DDANGEROUS_MODULE_FUNCTIONS -endif - -ifeq ($(PPM_UNIT), US) - CPPDEFS += -DPPM_UNIT_US -endif - -ifeq ($(PPM_UNIT), PERCENT_PREC1) - CPPDEFS += -DPPM_UNIT_PERCENT_PREC1 -endif - -ifeq ($(PPM_UNIT), PERCENT_PREC0) - CPPDEFS += -DPPM_UNIT_PERCENT_PREC0 -endif - -ifeq ($(FAI), YES) - CPPDEFS += -DFAI -endif -ifeq ($(FAI), CHOICE) - CPPDEFS += -DFAI_CHOICE -endif - -ifeq ($(HELI), YES) - CPPDEFS += -DHELI - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_heli.cpp -endif - -ifeq ($(TEMPLATES), YES) - ifneq ($(PCB), $(filter $(PCB), TARANIS FLAMENCO)) - CPPDEFS += -DTEMPLATES - CPPSRC += templates.cpp - GUIMODELSRC += gui/$(GUIDIRECTORY)/menu_model_templates.cpp - endif -endif - -ifeq ($(PXX), YES) - CPPDEFS += -DPXX -endif - -ifeq ($(DSM2), SERIAL) - CPPDEFS += -DDSM2 -DDSM2_SERIAL -endif - -ifeq ($(DSM2), PPM) - CPPDEFS += -DDSM2 -DDSM2_PPM -endif - -ifeq ($(TX_CADDY), YES) - CPPDEFS += -DTX_CADDY -endif - -ifeq ($(IRPROTOS), YES) - CPPDEFS += -DIRPROTOS -endif - -ifeq ($(LUA_COMPILER), YES) - CPPDEFS += -DLUA_COMPILER -endif - -#---------------- Compiler Options C++ ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CPPFLAGS = -g$(DBGFMT) -CPPFLAGS += $(CPPDEFS) -CPPFLAGS += -Wall -CPPFLAGS += -fno-exceptions -CPPFLAGS += -Wno-strict-aliasing -CPPFLAGS += -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits -INCFLAGS = $(patsubst %,-I%,$(INCDIRS)) - -ifeq ($(WARNINGS_AS_ERRORS), YES) - CPPFLAGS += -Werror -endif - -MATH_LIB = -lm - -#---------------- Linker Options ---------------- -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += $(MATH_LIB) - -# Define Messages -# English -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_COMPILING = Compiling C++: -MSG_CLEANING = Cleaning project: - -# Combine all necessary flags and optional flags. -# Add target processor to flags. - -CPPFLAGS += -DFLAVOUR=\"$(FLAVOUR)\" -ARMCPPFLAGS = -c -mcpu=$(MCU) -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=opentx.lst -DRUN_FROM_FLASH=1 -O$(OPT) $(CPPFLAGS) -fdata-sections -ffunction-sections $(INCFLAGS) $(GENDEPFLAGS) -AVRCPPFLAGS = -mmcu=$(MCU) -I. -x c++ -O$(OPT) $(CPPFLAGS) $(INCFLAGS) $(GENDEPFLAGS) -fwhole-program - -ifeq ($(ARCH), AVR) - GCCVERSIONGTE462 := $(shell expr 4.6.2 \<= `$(CC) -dumpversion`) - ifeq ($(GCCVERSIONGTE462),1) - CPPFLAGS += -flto - endif - - AVRCPPFLAGS += -fno-inline-small-functions - - GCCVERSIONGTE470 := $(shell expr 4.7.0 \<= `$(CC) -dumpversion`) - ifeq ($(GCCVERSIONGTE470),1) - AVRCPPFLAGS += -mstrict-X - endif -endif - -MAJ_VER = ${shell sh -c "grep \"MAJ_VERS\" opentx.h | cut -d\ -f3 | egrep -o \"[[:digit:]]\""} -MIN_VER = ${shell sh -c "grep \"MIN_VERS\" opentx.h | cut -d\ -f3"} - -.SECONDARY: - -# Default target. -all: begin gccversion sizebefore build sizeafter end - -# Change the build target to build a HEX file or a library. -ifeq ($(ARCH), AVR) - build: stamp.h tra lbm allsrc.cpp elf remallsrc hex -else ifeq ($(PCB), $(filter $(PCB), SKY9X 9XRPRO AR9X TARANIS)) - build: stamp.h tra lbm bootloader.lbm $(LUADEP) allsrc.cpp elf remallsrc bin -else - build: stamp.h tra lbm $(LUADEP) allsrc.cpp elf remallsrc bin -endif - -# build bootloader -ifeq ($(PCB), $(filter $(PCB), TARANIS)) -bootloader.lbm: targets/taranis/bootloader/bootloader_ramBoot.bin - $(BIN2LBM) $^ $@ -.PHONY targets/taranis/bootloader/bootloader_ramBoot.bin: - @echo "Building bootloader..." - $(MAKE) -C targets/taranis/bootloader PCB=$(PCB) PCBREV=$(PCBREV) NANO=$(NANO) WARNINGS_AS_ERRORS=$(WARNINGS_AS_ERRORS) -else ifeq ($(PCB), $(filter $(PCB), 9XRPRO AR9X)) -bootloader.lbm: - @echo "Fetching Mike's bootloader..." - wget https://github.com/MikeBland/OpenRcBootloader/releases/download/V1.9/bootflash8.lbm - mv bootflash8.lbm $@ -else ifeq ($(PCB), SKY9X) -bootloader.lbm: - @echo "Fetching Mike's bootloader..." - wget https://github.com/MikeBland/OpenRcBootloader/releases/download/V1.9/bootflash4.lbm - mv bootflash4.lbm $@ -endif - -tra: translations/en.h translations/cz.h translations/de.h translations/es.h translations/fi.h translations/fr.h translations/it.h translations/nl.h translations/pl.h translations/pt.h translations/se.h -lbm: fonts bitmaps - -elf: $(TARGET).elf -bin: $(TARGET).bin -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym - -# Build stamp-file -.PHONY : stamp.h -.PHONY : opentx-stamp - -stamp.h: - @echo "// Automatically generated file (Makefile) - do not edit" > stamp.h - @echo "#define DATE \"`date +%Y-%m-%d | tr -d '\r\n'`\"" > stamp.h - @echo "#define TIME \"`date +%H:%M:%S | tr -d '\r\n'`\"" >> stamp.h - @echo "#define VERSION \"$(VERSION)\"" >> stamp.h - @echo "" >> stamp.h - @echo "#define VERSION_MAJOR $(VERSION_MAJOR)" >> stamp.h - @echo "#define VERSION_MINOR $(VERSION_MINOR)" >> stamp.h - @echo "#define VERSION_REVISION $(VERSION_REVISION)" >> stamp.h - @echo "#define GIT_STR \"$(shell git rev-parse HEAD)\"" >> stamp.h - -opentx-stamp: - @echo "#define DATE_STR \"`date +%Y-%m-%d`\"" > stamp-opentx.txt - @echo "#define TIME_STR \"`date +%H:%M:%S`\"" >> stamp-opentx.txt - @echo "#define VERS_STR \"$(VERSION)\"" >> stamp-opentx.txt - @echo "#define GIT_STR \"$(shell git rev-parse HEAD)\"" >> stamp-opentx.txt - @cat stamp-opentx.txt - - -translations/en.h: translations/en.h.txt - @echo - @echo "Create English language specific header files" - $(TRANSLATE) translations/en.h.txt translations/en.h en - -translations/cz.h: translations/cz.h.txt - @echo - @echo "Create Czech language specific header files" - $(TRANSLATE) translations/cz.h.txt translations/cz.h cz - -translations/de.h: translations/de.h.txt - @echo - @echo "Create German language specific header files" - $(TRANSLATE) translations/de.h.txt translations/de.h de - -translations/es.h: translations/es.h.txt - @echo - @echo "Create Spanish language specific header files" - $(TRANSLATE) translations/es.h.txt translations/es.h es - -translations/fi.h: translations/fi.h.txt - @echo - @echo "Create Finnish language specific header files" - $(TRANSLATE) translations/fi.h.txt translations/fi.h fi - -translations/fr.h: translations/fr.h.txt - @echo - @echo "Create French language specific header files" - $(TRANSLATE) translations/fr.h.txt translations/fr.h fr - -translations/it.h: translations/it.h.txt - @echo - @echo "Create Italian language specific header files" - $(TRANSLATE) translations/it.h.txt translations/it.h it - -translations/nl.h: translations/nl.h.txt - @echo - @echo "Create Nederlands language specific header files" - $(TRANSLATE) translations/nl.h.txt translations/nl.h nl - -translations/pl.h: translations/pl.h.txt - @echo - @echo "Create Polish language specific header files" - $(TRANSLATE) translations/pl.h.txt translations/pl.h pl - -translations/pt.h: translations/pt.h.txt - @echo - @echo "Create Portugese language specific header files" - $(TRANSLATE) translations/pt.h.txt translations/pt.h pt - -translations/se.h: translations/se.h.txt - @echo - @echo "Create Swedish language specific header files" - $(TRANSLATE) translations/se.h.txt translations/se.h se - -ifeq ($(PCB), $(filter $(PCB), FLAMENCO)) - FONTDIR = flamenco - FONTNAME = Roboto - TINSIZE = 5 - SMLSIZE = 7 - STDSIZE = 11 - MIDSIZE = 11 - DBLSIZE = 14 - DBLBOLD = False - XXLSIZE = 38 - MASKFORMAT = 4bits -endif - -.PHONY: fonts -fonts: $(FONTS) - -fonts/$(FONTDIR)/font_%size.lbm: fonts/$(FONTDIR)/font_%size.png - $(IMG2LBM) $^ $@ $(LCDSIZE) $(MASKFORMAT) - -fonts/$(FONTDIR)/font_tinsize.png: - $(FONT2PNG) $(FONTNAME) $(TINSIZE) False fonts/$(FONTDIR)/font_tinsize - -fonts/$(FONTDIR)/font_smlsize.png: - $(FONT2PNG) $(FONTNAME) $(SMLSIZE) False fonts/$(FONTDIR)/font_smlsize - -fonts/$(FONTDIR)/font_stdsize.png: - $(FONT2PNG) $(FONTNAME) $(STDSIZE) False fonts/$(FONTDIR)/font_stdsize - -fonts/$(FONTDIR)/font_midsize.png: - $(FONT2PNG) $(FONTNAME) $(MIDSIZE) False fonts/$(FONTDIR)/font_midsize - -fonts/$(FONTDIR)/font_dblsize.png: - $(FONT2PNG) $(FONTNAME) $(DBLSIZE) $(DBLBOLD) fonts/$(FONTDIR)/font_dblsize - -fonts/$(FONTDIR)/font_xxlsize.png: - $(FONT2PNG) $(FONTNAME) $(XXLSIZE) False fonts/$(FONTDIR)/font_xxlsize - -fonts/%.lbm: fonts/%.png - $(IMG2LBM) $^ $@ $(LCDSIZE) - -.PHONY: bitmaps -bitmaps: $(BITMAPS) - -bitmaps/sticks.lbm: bitmaps/sticks.xbm - $(IMG2LBM) $^ $@ $(LCDSIZE) 1bit 4 - -bitmaps/9x/%.lbm: bitmaps/9x/%.png - $(IMG2LBM) $^ $@ $(LCDSIZE) 1bit - -bitmaps/taranis/%.lbm: bitmaps/taranis/%.png - $(IMG2LBM) $^ $@ $(LCDSIZE) 4bits - -bitmaps/flamenco/%.lbm: bitmaps/flamenco/%.png - $(IMG2LBM) $^ $@ $(LCDSIZE) 4/4/4/4 - -ifeq ($(OS),Windows_NT) - PARSER = avr-cpp -else - PARSER = gcc -E -x c++ -endif - -lua/lua_exports_taranis.inc: myeeprom.h ../util/luaexport.py - @echo "Generating a list of Lua exported constants in lua/lua_exports_taranis.txt" - @$(PARSER) -DEXPORT -DPCBTARANIS -DLUA -DVIRTUALINPUTS myeeprom.h | grep LEXP > lua/lua_exports_taranis.txt - @echo "Parsing and generating C Lua exports in lua/lua_exports_taranis.inc" - @python ../util/luaexport.py $(VERSION) lua/lua_exports_taranis.txt lua/lua_exports_taranis.inc lua/lua_fields_taranis.txt - @rm lua/lua_exports_taranis.txt - -lua/lua_exports_taranis_x9e.inc: myeeprom.h ../util/luaexport.py - @echo "Generating a list of Lua exported constants in lua/lua_exports_taranis_x9e.txt" - @$(PARSER) -DEXPORT -DPCBTARANIS -DREVPLUS -DREV9E -DLUA -DVIRTUALINPUTS myeeprom.h | grep LEXP > lua/lua_exports_taranis_x9e.txt - @echo "Parsing and generating C Lua exports in lua/lua_exports_taranis_x9e.inc" - @python ../util/luaexport.py $(VERSION) lua/lua_exports_taranis_x9e.txt lua/lua_exports_taranis_x9e.inc lua/lua_fields_taranis_x9e.txt - @rm lua/lua_exports_taranis_x9e.txt - -lua/lua_exports_flamenco.inc: myeeprom.h ../util/luaexport.py - @echo "Generating a list of Lua exported constants in lua/lua_exports_flamenco.txt" - @$(PARSER) -DEXPORT -DPCBFLAMENCO -DLUA -DVIRTUALINPUTS myeeprom.h | grep LEXP > lua/lua_exports_flamenco.txt - @echo "Parsing and generating C Lua exports in lua/lua_exports_flamenco.inc" - @python ../util/luaexport.py $(VERSION) lua/lua_exports_flamenco.txt lua/lua_exports_flamenco.inc lua/lua_fields_flamenco.txt - @rm lua/lua_exports_flamenco.txt - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. - -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - -# Display size of file. -ifeq ($(ARCH), AVR) - MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) - FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) - ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf -else - ELFSIZE = $(SIZE) $(TARGET).elf -endif - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); fi - -# Display compiler version information. -gccversion: - @$(CC) --version - -FOXINC=-I/usr/local/include/fox-1.6 -I/usr/include/fox-1.6 \ - -I$(FOXPATH)/include \ - -I/opt/local/include/fox-1.6 -FOXLIB=-L/usr/local/lib \ - -L$(FOXPATH)/src/.libs \ - -L/opt/local/lib \ - -lFOX-1.6 \ - -Wl,-rpath,$(FOXPATH)/src/.libs - -SIMUDEFS = -DSIMU -DLUA_USE_APICHECK -ifeq ($(SIMU_AUDIO), YES) - AUDIOLIB = -L/usr/lib/x86_64-linux-gnu/ -lSDLmain -lSDL - AUDIOINC = -I/usr/include/SDL - SIMUDEFS += -DSIMU_AUDIO -endif - -ifeq ($(SIMU_DISKIO), YES) - CPPSRC += $(FATFSDIR)/ff.c $(FATFSDIR)/option/ccsbcs.c - SIMUDEFS += -DSIMU_DISKIO -endif - -simu: $(LUADEP) stamp.h allsimusrc.cpp Makefile simu.cpp targets/simu/simpgmspace.cpp *.h tra lbm eeprom.bin - gcc $(CPPFLAGS) $(SIMUCPPFLAGS) $(INCFLAGS) simu.cpp allsimusrc.cpp $(LUASRC) targets/simu/simpgmspace.cpp -MD $(SIMUDEFS) -O0 -o simu $(FOXINC) $(FOXLIB) $(AUDIOINC) $(AUDIOLIB) -pthread -fexceptions -lstdc++ -lm - -eeprom.bin: - dd if=/dev/zero of=$@ bs=1 count=2048 - - -# Create final output files (.hex, .eep) from ELF output file. -ifeq ($(ARCH), AVR) -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ -else -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O ihex opentx.elf opentx.hex -endif - -%.bin: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O binary $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S $< > $@ - -# Concatenate all sources files in one big file to optimize size -allsrc.cpp: Makefile $(BOARDSRC) $(CPPSRC) $(EXTRABOARDSRC) - @rm -f allsrc.cpp - for f in $(BOARDSRC) $(CPPSRC) $(EXTRABOARDSRC) ; do echo "# 1 \"$$f\"" >> allsrc.cpp; cat "$$f" >> allsrc.cpp; done - -allsimusrc.cpp: Makefile $(BOARDSRC) $(CPPSRC) - @rm -f allsimusrc.cpp - for f in $(BOARDSRC) $(CPPSRC) ; do echo "# 1 \"$$f\"" >> allsimusrc.cpp; cat "$$f" >> allsimusrc.cpp; done - -remallsrc: - $(REMOVE) allsrc.cpp - $(REMOVE) allsimusrc.cpp - -# Link: create ELF output file from object files. -ifeq ($(ARCH), AVR) -opentx.elf: allsrc.cpp - @echo - @echo $(MSG_COMPILING) $@ - $(CC) $(AVRCPPFLAGS) $< --output $@ $(LDFLAGS) -else -%.o: %.c - $(CC) $(ARMCPPFLAGS) -Wimplicit $< -o $@ -%.o: %.s - $(AS) $< -o $@ -TMP = $(SRC:.c=.o) -OBJS = $(TMP:.s=.o) -opentx.elf: allsrc.cpp $(OBJS) - @echo - @echo $(MSG_COMPILING) $@ - $(CC) $(ARMCPPFLAGS) $< -o allsrc.o - $(CC) $(OBJS) allsrc.o -mcpu=$(MCU) -mthumb -nostartfiles -lm -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map,--cref,--no-warn-mismatch,--gc-sections $(NEWLIB_NANO_FLAGS) -o $@ -endif - -# Target: clean project. -clean: begin clean_list end - -CLEAN_SRC=$(filter %.c,$(SRC)) -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) simu - $(REMOVE) gtests - $(REMOVE) gtest.a - $(REMOVE) gtest_main.a - $(REMOVE) $(TARGET).bin - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVE) $(TARGET).lst - $(REMOVE) $(CLEAN_SRC:.c=.s) - $(REMOVE) `find . -name "*.o"` - $(REMOVE) *.d - $(REMOVE) *.lst - $(REMOVE) allsrc.cpp - $(REMOVE) allsimusrc.cpp - $(REMOVE) stamp.h - $(REMOVE) *.lbm - $(REMOVE) bitmaps/*.lbm - $(REMOVE) bitmaps/*/*.lbm - $(REMOVE) fonts/*/*.lbm - $(REMOVE) translations/*.h - $(REMOVE) lua/lua_exports*.txt lua/lua_fields*.txt lua/lua_exports*.inc - $(MAKE) -C targets/taranis/bootloader clean - -#### Install - -DATE = ${shell sh -c "date +%F:%T" } -AVRCOMMAND = $(AVRDUDE) $(AVRDEVICE) - -WRITE_COMMAND = $(AVRCOMMAND) -U flash:w:opentx.hex:i -ifeq ($(RESTORE_EEPROM), YES) - BACKUP_EEPROM = YES - ifeq ($(DOUBLE_WRITE_OK), YES) - WRITE_COMMAND += -U eeprom:w:$(DATA_DIR)/eeprom-$(DATE).hex:i - else - SECOND_WRITE_COMMAND = -U eeprom:w:$(DATA_DIR)/eeprom-$(DATE).hex:i - endif -endif - -ifeq ($(BACKUP_FLASH), YES) - BACKUP_ARGS += -U eeprom:r:$(DATA_DIR)/eeprom-$(DATE).hex:i $(BACKUPFLASH) -endif -ifeq ($(BACKUP_EEPROM), YES) - BACKUP_ARGS += -U flash:r:$(DATA_DIR)/opentx-$(DATE).hex:i -endif - -install: all -ifdef BACKUP_ARGS - $(AVRCOMMAND) $(BACKUP_ARGS) - $(SLEEP) $(DELAY) -endif - $(WRITE_COMMAND) -ifdef SECOND_WRITE_COMMAND - $(SLEEP) $(DELAY) - $(SECOND_WRITE_COMMAND) -endif - -#### GOOGLE TESTS - -GTEST_INCDIR = /usr/include/gtest -GTEST_SRCDIR = /usr/src/gtest/ - -# Where to find user code. -USER_DIR = ./ - -# All Google Test headers. Usually you shouldn't change this -# definition. -GTEST_HEADERS = $(GTEST_INCDIR)/*.h \ - $(GTEST_INCDIR)/internal/*.h - -# House-keeping build targets. - -# Builds gtest.a and gtest_main.a. - -# Usually you shouldn't tweak such internal variables, indicated by a -# trailing _. -GTEST_SRCS = $(GTEST_SRCDIR)/src/*.cc $(GTEST_HEADERS) - -# For simplicity and to avoid depending on Google Test's -# implementation details, the dependencies specified below are -# conservative and not optimized. This is fine as Google Test -# compiles fast and for ordinary users its source rarely changes. -gtest-all.o : $(GTEST_SRCS) - $(CXX) $(CPPFLAGS) -I$(GTEST_SRCDIR) -I$(GTEST_INCDIR) -c $(GTEST_SRCDIR)/src/gtest-all.cc - -# Builds a sample test. A test should link with either gtest.a or -# gtest_main.a, depending on whether it defines its own main() -# function. - -#use all .cpp files from tests/ dir -GTEST_TESTS_SRCS = $(shell find tests/ -type f -name '*.cpp') - -gtests: allsimusrc.cpp $(GTEST_TESTS_SRCS) targets/simu/simpgmspace.cpp *.h tests/gtests.h gtest-all.o - gcc -std=gnu++0x $(CPPFLAGS) $(SIMUCPPFLAGS) allsimusrc.cpp $(LUASRC) $(GTEST_TESTS_SRCS) targets/simu/simpgmspace.cpp ${INCFLAGS} -I$(GTEST_INCDIR) -I/usr/include/qt4 -o gtests -lpthread -MD -DSIMU -lQtCore -lQtGui gtest-all.o -fexceptions -lstdc++ -lm From 4382445123e26bdfa2aacb3811537165e6058a4c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 30 Mar 2016 07:55:53 +0200 Subject: [PATCH 93/98] Cosmetics --- radio/util/checksize.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/radio/util/checksize.py b/radio/util/checksize.py index 6cc194f61..adfb07a6f 100644 --- a/radio/util/checksize.py +++ b/radio/util/checksize.py @@ -16,7 +16,7 @@ while 1: index += 1 os.chdir(srcdir) - cmd = ["git", "reset", "--hard", "origin/next~%d" % index] + cmd = ["git", "reset", "--hard", "FETCH_HEAD~%d" % index] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = proc.communicate() if proc.returncode != 0: @@ -38,7 +38,10 @@ while 1: print "HEAD~%d make firmware failed" % index continue - oldsize = int(subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % "firmware.hex", shell=True)) + if os.path.isfile("firmware.bin"): + oldsize = os.stat("firmware.bin").st_size + else: + oldsize = int(subprocess.check_output('avr-size -A firmware.hex | grep Total | cut -f2- -d " "', shell=True)) if size: if size > oldsize: print "HEAD~%d %d: increase by %d bytes" % (index-1, size, size-oldsize) From 438f81aef9b4bf8d7399642e51bcfc678de2693d Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 30 Mar 2016 20:14:37 +0400 Subject: [PATCH 94/98] Reorganize / clarify board types by relevance --- .../src/firmwares/opentx/opentxinterface.cpp | 255 +++++++++--------- 1 file changed, 127 insertions(+), 128 deletions(-) diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 2dacafe0b..d58715375 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -1171,8 +1171,117 @@ void registerOpenTxFirmwares() Option nav_options[] = { { "rotenc", QObject::tr("Rotary Encoder use in menus navigation") }, { "potscroll", QObject::tr("Pots use in menus navigation") }, { NULL } }; Option dsm2_options[] = { { "DSM2", QObject::tr("Support for DSM2 modules"), 0 }, { "DSM2PPM", QObject::tr("Support for DSM2 modules using ppm instead of true serial"), 0 }, { NULL } }; + /* Taranis Plus board */ + firmware = new OpenTxFirmware("opentx-taranisplus", QObject::tr("FrSky Taranis Plus"), BOARD_TARANIS_PLUS); + addOpenTxTaranisOptions(firmware); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + + /* Taranis board */ + firmware = new OpenTxFirmware("opentx-taranis", QObject::tr("FrSky Taranis"), BOARD_TARANIS); + firmware->addOption("haptic", QObject::tr("Haptic module installed")); + addOpenTxTaranisOptions(firmware); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + + /* Taranis X9E board */ + firmware = new OpenTxFirmware("opentx-taranisx9e", QObject::tr("FrSky Taranis X9E"), BOARD_TARANIS_X9E); + firmware->addOption("shutdownconfirm", QObject::tr("Confirmation before radio shutdown")); + addOpenTxTaranisOptions(firmware); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + + /* Horus board */ + firmware = new OpenTxFirmware("opentx-horus", QObject::tr("FrSky Horus"), BOARD_HORUS); + firmware->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support")); + firmware->addOption("nogvars", QObject::tr("Disable Global variables")); + firmware->addOption("lua", QObject::tr("Support for Lua model scripts")); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + + /* 9XR-Pro */ + firmware = new OpenTxFirmware("opentx-9xrpro", QObject::tr("Turnigy 9XR-PRO"), BOARD_9XRPRO); + firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support")); + firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); + firmware->addOption("nofp", QObject::tr("No flight modes")); + firmware->addOption("nocurves", QObject::tr("Disable curves menus")); + firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); + firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); + firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); + firmware->addOption("timer3", QObject::tr("Support for a third timer")); + firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); + firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); + firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); + firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); + firmware->addOption("battgraph", QObject::tr("Battery graph")); + firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); + firmware->addOption("bluetooth", QObject::tr("Bluetooth interface")); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + + /* 9XR board with M128 chip */ + firmware = new OpenTxFirmware("opentx-9xr128", QObject::tr("Turnigy 9XR with m128 chip"), BOARD_M128); + firmware->addOptions(extr_options); + firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); + firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); + firmware->addOption("nosplash", QObject::tr("No splash screen")); + firmware->addOption("nofp", QObject::tr("No flight modes")); + firmware->addOption("nocurves", QObject::tr("Disable curves menus")); + firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker")); + firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode")); + firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode")); + // NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol")); + firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules")); + firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); + firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); + firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); + firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); + firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); + firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); + firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); + firmware->addOption("battgraph", QObject::tr("Battery graph")); + firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); + firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics")); + firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar")); + firmware->addOption("imperial", QObject::tr("Imperial units")); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + + /* 9XR board */ + firmware = new OpenTxFirmware("opentx-9xr", QObject::tr("Turnigy 9XR"), BOARD_STOCK); + firmware->addOptions(extr_options); + firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); + firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); + firmware->addOption("nosplash", QObject::tr("No splash screen")); + firmware->addOption("nofp", QObject::tr("No flight modes")); + firmware->addOption("nocurves", QObject::tr("Disable curves menus")); + firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker")); + firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode")); + firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode")); + // NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol")); + firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules")); + firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); + firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); + firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); + firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); + firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); + firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); + firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); + firmware->addOption("battgraph", QObject::tr("Battery graph")); + firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); + firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics")); + firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar")); + firmware->addOption("imperial", QObject::tr("Imperial units")); + firmware->addOption("nowshh", QObject::tr("No Winged Shadow How High support")); + firmware->addOption("novario", QObject::tr("No vario support")); + firmware->addOption("nogps", QObject::tr("No GPS support")); + firmware->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen")); + firmware->addOption("stickrev", QObject::tr("Add support for reversing stick inputs (e.g. needed for FrSky gimbals)")); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + /* 9x board */ - firmware = new OpenTxFirmware("opentx-9x", QObject::tr("9X board"), BOARD_STOCK); + firmware = new OpenTxFirmware("opentx-9x", QObject::tr("9X with stock board"), BOARD_STOCK); firmware->addOptions(ext_options); firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1208,7 +1317,7 @@ void registerOpenTxFirmwares() firmwares.push_back(firmware); /* 9x board with M128 chip */ - firmware = new OpenTxFirmware("opentx-9x128", QObject::tr("M128 / 9X board"), BOARD_M128); + firmware = new OpenTxFirmware("opentx-9x128", QObject::tr("9X with stock board and m128 chip"), BOARD_M128); firmware->addOptions(ext_options); firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1237,69 +1346,52 @@ void registerOpenTxFirmwares() addOpenTxCommonOptions(firmware); firmwares.push_back(firmware); - /* 9XR board */ - firmware = new OpenTxFirmware("opentx-9xr", QObject::tr("9XR"), BOARD_STOCK); - firmware->addOptions(extr_options); - firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); + /* ar9x board */ + firmware = new OpenTxFirmware("opentx-ar9x", QObject::tr("9X with AR9X board"), BOARD_AR9X); + firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support")); firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); - firmware->addOption("nosplash", QObject::tr("No splash screen")); firmware->addOption("nofp", QObject::tr("No flight modes")); firmware->addOption("nocurves", QObject::tr("Disable curves menus")); - firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker")); - firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode")); - firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode")); - // NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol")); - firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules")); firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); + firmware->addOption("timer3", QObject::tr("Support for a third timer")); firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); + firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time")); firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); firmware->addOption("battgraph", QObject::tr("Battery graph")); firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); - firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics")); - firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar")); - firmware->addOption("imperial", QObject::tr("Imperial units")); - firmware->addOption("nowshh", QObject::tr("No Winged Shadow How High support")); - firmware->addOption("novario", QObject::tr("No vario support")); - firmware->addOption("nogps", QObject::tr("No GPS support")); - firmware->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen")); - firmware->addOption("stickrev", QObject::tr("Add support for reversing stick inputs (e.g. needed for FrSky gimbals)")); + firmware->addOption("bluetooth", QObject::tr("Bluetooth interface")); +// firmware->addOption("rtc", QObject::tr("Optional RTC added")); +// firmware->addOption("volume", QObject::tr("i2c volume control added")); addOpenTxCommonOptions(firmware); firmwares.push_back(firmware); - /* 9XR board with M128 chip */ - firmware = new OpenTxFirmware("opentx-9xr128", QObject::tr("9XR with M128 chip"), BOARD_M128); - firmware->addOptions(extr_options); - firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); + /* Sky9x board */ + firmware = new OpenTxFirmware("opentx-sky9x", QObject::tr("9X with Sky9x board"), BOARD_SKY9X); + firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support")); firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); - firmware->addOption("nosplash", QObject::tr("No splash screen")); firmware->addOption("nofp", QObject::tr("No flight modes")); firmware->addOption("nocurves", QObject::tr("Disable curves menus")); - firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker")); - firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode")); - firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode")); - // NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol")); - firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules")); firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); + firmware->addOption("timer3", QObject::tr("Support for a third timer")); firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); + firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time")); firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); firmware->addOption("battgraph", QObject::tr("Battery graph")); firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); - firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics")); - firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar")); - firmware->addOption("imperial", QObject::tr("Imperial units")); + firmware->addOption("bluetooth", QObject::tr("Bluetooth interface")); addOpenTxCommonOptions(firmware); firmwares.push_back(firmware); /* Gruvin9x board */ - firmware = new OpenTxFirmware("opentx-gruvin9x", QObject::tr("Gruvin9x board / 9X"), BOARD_GRUVIN9X); + firmware = new OpenTxFirmware("opentx-gruvin9x", QObject::tr("9X with Gruvin9x board"), BOARD_GRUVIN9X); firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); firmware->addOption("nofp", QObject::tr("No flight modes")); @@ -1324,7 +1416,7 @@ void registerOpenTxFirmwares() firmwares.push_back(firmware); /* MEGA2560 board */ - firmware = new OpenTxFirmware("opentx-mega2560", QObject::tr("MEGA2560 board"), BOARD_MEGA2560); + firmware = new OpenTxFirmware("opentx-mega2560", QObject::tr("DIY MEGA2560 radio"), BOARD_MEGA2560); addOpenTxLcdOptions(firmware); firmware->addOption("PWR", QObject::tr("Power management by soft-off circuitry")); firmware->addOptions(ext_options); @@ -1353,99 +1445,6 @@ void registerOpenTxFirmwares() addOpenTxCommonOptions(firmware); firmwares.push_back(firmware); - /* Sky9x board */ - firmware = new OpenTxFirmware("opentx-sky9x", QObject::tr("Sky9x board / 9X"), BOARD_SKY9X); - firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support")); - firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); - firmware->addOption("nofp", QObject::tr("No flight modes")); - firmware->addOption("nocurves", QObject::tr("Disable curves menus")); - firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); - firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); - firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); - firmware->addOption("timer3", QObject::tr("Support for a third timer")); - firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); - firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); - firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); - firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time")); - firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); - firmware->addOption("battgraph", QObject::tr("Battery graph")); - firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); - firmware->addOption("bluetooth", QObject::tr("Bluetooth interface")); - addOpenTxCommonOptions(firmware); - firmwares.push_back(firmware); - - /* ar9x board */ - firmware = new OpenTxFirmware("opentx-ar9x", QObject::tr("ar9x board / 9X"), BOARD_AR9X); - firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support")); - firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); - firmware->addOption("nofp", QObject::tr("No flight modes")); - firmware->addOption("nocurves", QObject::tr("Disable curves menus")); - firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); - firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); - firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); - firmware->addOption("timer3", QObject::tr("Support for a third timer")); - firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); - firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); - firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); - firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time")); - firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); - firmware->addOption("battgraph", QObject::tr("Battery graph")); - firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); - firmware->addOption("bluetooth", QObject::tr("Bluetooth interface")); -// firmware->addOption("rtc", QObject::tr("Optional RTC added")); -// firmware->addOption("volume", QObject::tr("i2c volume control added")); - addOpenTxCommonOptions(firmware); - firmwares.push_back(firmware); - - /* 9XR-Pro */ - firmware = new OpenTxFirmware("opentx-9xrpro", QObject::tr("9XR-PRO"), BOARD_9XRPRO); - firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support")); - firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu")); - firmware->addOption("nofp", QObject::tr("No flight modes")); - firmware->addOption("nocurves", QObject::tr("Disable curves menus")); - firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits")); - firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT); - firmware->addOption("symlimits", QObject::tr("Symetrical Limits")); - firmware->addOption("timer3", QObject::tr("Support for a third timer")); - firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation")); - firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control")); - firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control")); - firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders")); - firmware->addOption("battgraph", QObject::tr("Battery graph")); - firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items")); - firmware->addOption("bluetooth", QObject::tr("Bluetooth interface")); - addOpenTxCommonOptions(firmware); - firmwares.push_back(firmware); - - /* Taranis board */ - firmware = new OpenTxFirmware("opentx-taranis", QObject::tr("FrSky Taranis"), BOARD_TARANIS); - firmware->addOption("haptic", QObject::tr("Haptic module installed")); - addOpenTxTaranisOptions(firmware); - addOpenTxCommonOptions(firmware); - firmwares.push_back(firmware); - - /* Taranis Plus board */ - firmware = new OpenTxFirmware("opentx-taranisplus", QObject::tr("FrSky Taranis Plus"), BOARD_TARANIS_PLUS); - addOpenTxTaranisOptions(firmware); - addOpenTxCommonOptions(firmware); - firmwares.push_back(firmware); - - /* Taranis X9E board */ - firmware = new OpenTxFirmware("opentx-taranisx9e", QObject::tr("FrSky Taranis X9E"), BOARD_TARANIS_X9E); - firmware->addOption("shutdownconfirm", QObject::tr("Confirmation before radio shutdown")); - firmware->addOption("horussticks", QObject::tr("Horus magnetic sticks")); - addOpenTxTaranisOptions(firmware); - addOpenTxCommonOptions(firmware); - firmwares.push_back(firmware); - - /* Horus board */ - firmware = new OpenTxFirmware("opentx-horus", QObject::tr("FrSky Horus"), BOARD_HORUS); - firmware->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support")); - firmware->addOption("nogvars", QObject::tr("Disable Global variables")); - firmware->addOption("lua", QObject::tr("Support for Lua model scripts")); - addOpenTxCommonOptions(firmware); - firmwares.push_back(firmware); - default_firmware_variant = GetFirmware("opentx-taranisplus-en"); current_firmware_variant = default_firmware_variant; } From 7076889e1aa0c722823bebad6b800128e1abd0b6 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 30 Mar 2016 20:27:28 +0400 Subject: [PATCH 95/98] Channel range fix --- companion/src/modeledit/setup.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 351500a85..fd141b128 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -331,8 +331,8 @@ void ModulePanel::update() ui->failsafesFrame->setVisible(mask & MASK_FAILSAFES); if (mask & MASK_CHANNELS_RANGE) { - ui->channelsStart->setMaximum(32 - ui->channelsCount->value()); - ui->channelsCount->setMaximum(qMin(16, 32-ui->channelsStart->value())); + ui->channelsStart->setMaximum(33 - ui->channelsCount->value()); + ui->channelsCount->setMaximum(qMin(16, 33-ui->channelsStart->value())); } } From e4d820b11e9f592b3edea1787470666f00b2b4fd Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 30 Mar 2016 18:42:36 +0200 Subject: [PATCH 96/98] Dockerfile cosmetics --- radio/util/Dockerfile | 55 ++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index 9d095ef72..aa4c1d4cb 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -1,33 +1,34 @@ # An Debian image for compiling OpenTX 2.2 -FROM debian:jessie -MAINTAINER bsongis +FROM debian:jessie -RUN apt-get update && apt-get install -y \ - software-properties-common \ - wget \ - lib32z1 \ - lib32ncurses5 \ - git \ - cmake \ - gcc \ - avr-libc \ - build-essential \ - libfox-1.6-dev \ - python-qt4 \ - qt5-default \ - qttools5-dev \ - qtmultimedia5-dev \ - qttools5-dev-tools \ - libsdl1.2-dev +RUN apt-get update && \ + apt-get install -y \ + avr-libc \ + build-essential \ + cmake \ + gcc \ + git \ + lib32ncurses5 \ + lib32z1 \ + libfox-1.6-dev \ + libsdl1.2-dev \ + python-qt4 \ + qt5-default \ + qtmultimedia5-dev \ + qttools5-dev \ + qttools5-dev-tools \ + software-properties-common \ + wget -RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ - tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ - mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi +RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ + tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 && \ + mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi -RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb && \ - wget -q http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb && \ - dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb +RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb && \ + wget -q http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb && \ + dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb -VOLUME ["/opentx"] -ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin:/opentx/code/radio/util +VOLUME ["/opentx"] + +ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin:/opentx/code/radio/util From 3c1221452a98337c0b9967fcd81c7dd3c63c85dd Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 30 Mar 2016 22:47:25 +0200 Subject: [PATCH 97/98] Taranis bootloader Makefile removed (CMake now) --- radio/src/targets/taranis/bootloader/Makefile | 342 ------------------ 1 file changed, 342 deletions(-) delete mode 100644 radio/src/targets/taranis/bootloader/Makefile diff --git a/radio/src/targets/taranis/bootloader/Makefile b/radio/src/targets/taranis/bootloader/Makefile deleted file mode 100644 index 80b9a7479..000000000 --- a/radio/src/targets/taranis/bootloader/Makefile +++ /dev/null @@ -1,342 +0,0 @@ -# -# !!!! Do NOT edit this makefile with an editor which replace tabs by spaces !!!! -# -############################################################################################## -# -# On command line: -# -# make all = Create project -# -# make clean = Clean project files. -# -# To rebuild project do "make clean" and "make all". -# - -############################################################################################## -# Start of default section -# - -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CP = $(TRGT)objcopy -CLSS = $(TRGT)objdump -AS = $(TRGT)as -#gcc -x assembler-with-cpp -BIN = $(CP) -O ihex -BINX = $(CP) -O binary - -OBJDIR = . - -THIRDPARTY = ../../../thirdparty -FATFSDIR = $(THIRDPARTY)/FatFs - -ifeq ($(PCBREV), REV9E) - MCU = cortex-m4 - STM32LIBPATH = $(THIRDPARTY)/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries -else - MCU = cortex-m3 - STM32LIBPATH = $(THIRDPARTY)/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries -endif - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -MEMORIES = sram - -EXT = STD - -# -# End of default section -############################################################################################## - -############################################################################################## -# Start of user section -# - -# -# Define project name and Ram/Flash mode here -PROJECT = bootloader - -ifeq ($(PCB), TARANIS) -RUN_FROM_FLASH = 0 - else - ifeq ($(PCB), X9D) - RUN_FROM_FLASH = 0 - else - RUN_FROM_FLASH = 1 - endif -endif - -# PCB revision -PCBREV = - -EXTRAINCDIRS = $(THIRDPARTY) $(FATFSDIR) $(FATFSDIR)/option - -STM32USBPATH = ../../../thirdparty/STM32_USB-Host-Device_Lib_V2.1.0/Libraries - -# -# Define linker script file here -# -ifeq ($(PCB), TARANIS) - ARCH = ARM - LDSCRIPT = ../stm32_ramboot.ld - TRGT = arm-none-eabi- - CPPDEFS += -DHSE_VALUE=12000000 - CPPDEFS += -DPCBTARANIS -DEEPROM_RLC -DUSB_MASS_STORAGE - FULL_PRJ = $(PROJECT)_ramBoot - ifeq ($(PCBREV), REV9E) - CPPDEFS += -DSTM32F40_41xxx - EXTRAINCDIRS += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/inc - EXTRAINCDIRS += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Include - EXTRAINCDIRS += $(STM32LIBPATH)/CMSIS/Include - else - EXTRAINCDIRS += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/inc - EXTRAINCDIRS += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F2xx/Include - EXTRAINCDIRS += $(STM32LIBPATH)/CMSIS/include - endif - EXTRAINCDIRS += $(STM32USBPATH)/STM32_USB_OTG_Driver/inc - EXTRAINCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Core/inc - EXTRAINCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/inc - EXTRAINCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/hid/inc - EXTRAINCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/cdc/inc - EXTRAINCDIRS += .. ../../.. ../../../fonts/std - ifeq ($(PCBREV), REV4a) - CPPDEFS += -DREV4a - else ifeq ($(PCBREV), REVPLUS) - CPPDEFS += -DREVPLUS - HAPTIC = YES - else ifeq ($(PCBREV), REV9E) - CPPDEFS += -DREVPLUS -DREV9E - HAPTIC = YES - else - CPPDEFS += -DREV4 - endif -endif - -# List all user C define here, like -D_DEBUG=1 - -# Define ASM defines here -UADEFS = - -SRC = - -ifeq ($(PCBREV), REV9E) - SRC += ../system_stm32f4xx.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c - SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/misc.c -else - SRC += ../system_stm32f2xx.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c - SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/misc.c -endif - -SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_core.c -SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_dcd.c -SRC += $(STM32USBPATH)/STM32_USB_OTG_Driver/src/usb_dcd_int.c -SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_core.c -SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_ioreq.c -SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Core/src/usbd_req.c -SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_data.c -SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_scsi.c -SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c -SRC += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/src/usbd_msc_core.c -SRC += ../delays.c -SRC += $(THIRDPARTY)/FatFs/ff.c $(THIRDPARTY)/FatFs/option/ccsbcs.c -SRC += ../usbd_desc.c -SRC += ../aspi.c -SRC += ../usb_bsp.c -SRC += ../usb_driver.c -SRC += ../pwr_driver.c -SRC += init.c - -CPPSRC = ../lcd_driver.cpp \ - ../configure_pins.cpp \ - ../keys_driver.cpp \ - ../i2c_driver.cpp \ - ../flash_driver.cpp \ - ../diskio.cpp \ - ../usbd_usr.cpp \ - ../usbd_storage_msd.cpp \ - ../../../gui/taranis/lcd.cpp \ - ../../../keys.cpp \ - ../../../fonts.cpp \ - ../../../strhelpers.cpp \ - boot.cpp - -# List ASM source files here - -ifeq ($(PCBREV), REV9E) - ASRC = $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f40_41xxx.s -else - ASRC = $(STM32LIBPATH)/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s -endif - -# List all user directories here -UINCDIR = ./inc -# \ -# ./cmsis/core \ -# ./cmsis/device - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# Define optimisation level here -OPT = -Os - -# -# End of user defines -############################################################################################## - - -VPATH = $(DIRS) - -INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) -LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) - -ifeq ($(RUN_FROM_FLASH), 0) -DEFS = $(DDEFS) $(UDEFS) -DRUN_FROM_FLASH=0 -else -DEFS = $(DDEFS) $(UDEFS) -DRUN_FROM_FLASH=1 -endif - -ADEFS = $(DADEFS) $(UADEFS) - -AXOBJS = $(ASRC:%.s=%.o) -CXOBJS = $(SRC:%.c=%.o) -CPPXOBJS = $(CPPSRC:%.cpp=%.o) - -LIBS = $(DLIBS) $(ULIBS) -MCFLAGS = -mcpu=$(MCU) - -ifeq ($(NANO), YES) - # use newlib-nano for linking - # NEWLIB_NANO_FLAGS = --specs=nano.specs -u _printf_float #use this version if printf for floats is needed! - NEWLIB_NANO_FLAGS = --specs=nano.specs -endif - -#ASFLAGS = $(MCFLAGS) -g -gdwarf-2 -Wa,-amhls=$(OBJDIR)/$(notdir $(<:.s=.lst)) $(ADEFS) -CPFLAGS = $(MCFLAGS) $(OPT) -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm $(DEFS) -LDFLAGS = $(MCFLAGS) -mthumb -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(FULL_PRJ).map,--cref,--no-warn-mismatch,--gc-sections $(LIBDIR) $(NEWLIB_NANO_FLAGS) -CPPFLAGS = $(MCFLAGS) $(OPT) -gdwarf-2 -mthumb -fomit-frame-pointer -fdata-sections -ffunction-sections -Wall -fverbose-asm $(DEFS) - -ifeq ($(WARNINGS_AS_ERRORS), YES) - CPFLAGS += -Werror - CPPFLAGS += -Werror -endif - -CPPFLAGS += $(CPPDEFS) -CPFLAGS += $(CPPDEFS) -CPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) - -AOBJS = $(patsubst %,$(OBJDIR)/%,$(notdir $(AXOBJS) )) -COBJS = $(patsubst %,$(OBJDIR)/%,$(notdir $(CXOBJS) )) -CPPOBJS = $(patsubst %,$(OBJDIR)/%,$(notdir $(CPPXOBJS) )) -DIRS = $(sort $(dir $(AXOBJS) $(CXOBJS) $(CPPXOBJS) ) ) - - -CPPDEFS += -DCPUARM - -ifeq ($(PCB), TARANIS) - CPPDEFS += -DCPUSTM32 -endif - -CPPDEFS += -DTIMERS=0 - -# If serial Debug required -ifeq ($(DEBUG), 1) - CPPDEFS += -DDEBUG -endif - -CPPDEFS += -DBOOT - -# Generate dependency information -CPFLAGS += -MD -MP -MF .dep/$(@F).d -CPPFLAGS += -MD -MP -MF .dep/$(@F).d -CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) - -# -# makefile rules -# - -all: size_before $(OBJS) $(COBJS) $(CPPOBJS) $(FULL_PRJ).elf $(FULL_PRJ).hex $(FULL_PRJ).lss $(FULL_PRJ).bin size - -#begin: -# @echo $(AXOBJS) $(CXOBJS) $(CPPXOBJS) -# @echo -# @echo $(OBJS) $(COBJS) $(CPPOBJS) -# @echo -# @echo $(DIRS) - -size_before: -# arm-none-eabi-size $(FULL_PRJ).elf - @if test -f $(FULL_PRJ).elf; then arm-none-eabi-size $(FULL_PRJ).elf; fi - -size: -# arm-none-eabi-size $(FULL_PRJ).elf - @if test -f $(FULL_PRJ).elf; then arm-none-eabi-size $(FULL_PRJ).elf; fi - -$(CPPOBJS) : $(OBJDIR)/%.o : %.cpp - $(CC) -c $(CPPFLAGS) -fno-exceptions -I . $(INCDIR) $< -o $@ - -$(COBJS) : $(OBJDIR)/%.o : %.c - $(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ - - -$(AOBJS) : $(OBJDIR)/%.o : %.s - $(AS) -c $(ASFLAGS) $< -o $@ - -%elf: $(AOBJS) $(COBJS) $(CPPOBJS) - $(CC) $(AOBJS) $(COBJS) $(CPPOBJS) $(LDFLAGS) $(LIBS) -o $@ - -# Create extended listing file from ELF output file. -%.lss: %.elf - $(CLSS) -h -S $< > $@ - -%hex: %elf - $(BIN) $< $@ - -%bin: %elf - $(BINX) $< $@ - -# $(PROJECT)_flash8 -# $(PROJECT)_flash4 -# $(PROJECT)_ramBootS -# $(PROJECT)_ramBootT - -clean: - -rm -f *.o - -rm -f *.elf - -rm -f *.map - -rm -f *.hex - -rm -f *.bin - -rm -f *.lss - -rm -fR .dep - - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF *** From 1f54c61e41aff13f75923a4aca4f4aa9aa123f15 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 30 Mar 2016 23:14:17 +0200 Subject: [PATCH 98/98] Dockerfile fixes ported to 'next' --- radio/util/Dockerfile | 7 ++++++- radio/util/build.py | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/radio/util/Dockerfile b/radio/util/Dockerfile index aa4c1d4cb..88566c8f2 100644 --- a/radio/util/Dockerfile +++ b/radio/util/Dockerfile @@ -26,9 +26,14 @@ RUN wget -q https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+downl mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi RUN wget -q http://ftp.de.debian.org/debian/pool/main/g/gcc-avr/gcc-avr_4.7.2-2_amd64.deb && \ + wget -q http://ftp.de.debian.org/debian/pool/main/a/avr-libc/avr-libc_1.8.0-2_all.deb && \ + wget -q http://ftp.de.debian.org/debian/pool/main/b/binutils-avr/binutils-avr_2.24+Atmel3.4.4-1_amd64.deb && \ wget -q http://ftp.de.debian.org/debian/pool/main/m/mpclib/libmpc2_0.9-4_amd64.deb && \ - dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb + dpkg -i gcc-avr_4.7.2-2_amd64.deb libmpc2_0.9-4_amd64.deb avr-libc_1.8.0-2_all.deb binutils-avr_2.24+Atmel3.4.4-1_amd64.deb VOLUME ["/opentx"] ENV PATH $PATH:/opt/gcc-arm-none-eabi/bin:/opentx/code/radio/util +ARG OPENTX_VERSION_SUFFIX= +ENV OPENTX_VERSION_SUFFIX ${OPENTX_VERSION_SUFFIX} + diff --git a/radio/util/build.py b/radio/util/build.py index 814755eab..1e7ff6bc5 100755 --- a/radio/util/build.py +++ b/radio/util/build.py @@ -139,6 +139,8 @@ elif what == "libsimulator": ext = ".so" target = "libopentx-" + options[optcount] + "-simulator.so" filename = "libopentx" +else: + exit(INVALID_BOARD) filename += "-" + options[optcount] optcount += 1 @@ -207,7 +209,7 @@ if not os.path.isfile(path): if what == "firmware": # Check binary size if board_family == BOARD_FAMILY_ARM: - size = os.stat(firmware).st_size + size = os.stat(target).st_size else: size = subprocess.check_output('avr-size -A %s | grep Total | cut -f2- -d " "' % target, shell=True) size = int(size.strip())