diff --git a/DONATIONS.txt b/DONATIONS.txt
index aa31b72d6..8436823af 100644
--- a/DONATIONS.txt
+++ b/DONATIONS.txt
@@ -310,3 +310,5 @@ Ronald Donker
Paul Oldenkamp
Dietmar Drees
Bradley Murchie
+Richard Fahie
+James Kaufman
diff --git a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp
index 47b8fb04a..fbd65c564 100644
--- a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp
+++ b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp
@@ -77,6 +77,7 @@ inline int geteepromsize() {
#include "radio/src/targets/taranis/pulses_driver.cpp"
#include "radio/src/targets/taranis/rtc_driver.cpp"
#include "radio/src/targets/taranis/trainer_driver.cpp"
+#include "radio/src/targets/taranis/uart3_driver.cpp"
#include "radio/src/protocols/pulses_arm.cpp"
#include "radio/src/stamp.cpp"
#include "radio/src/maths.cpp"
diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp
index 2a5e4f2fc..c27a88672 100644
--- a/companion/src/helpers.cpp
+++ b/companion/src/helpers.cpp
@@ -48,8 +48,8 @@ void populateGvSourceCB(QComboBox *b, int value)
void populateVoiceLangCB(QComboBox *b, QString language)
{
- QString strings[] = { QObject::tr("English"), QObject::tr("French"), QObject::tr("Italian"), QObject::tr("German"), QObject::tr("Czech"), QObject::tr("Slovak"), QObject::tr("Spanish"), QObject::tr("Portuguese"), QObject::tr("Swedish"), NULL};
- QString langcode[] = { "en", "fr", "it", "de", "cz", "sk", "es", "pt", "se", NULL};
+ QString strings[] = { QObject::tr("English"), QObject::tr("French"), QObject::tr("Italian"), QObject::tr("German"), QObject::tr("Czech"), QObject::tr("Slovak"), QObject::tr("Spanish"), QObject::tr("Polish"), QObject::tr("Portuguese"), QObject::tr("Swedish"), NULL};
+ QString langcode[] = { "en", "fr", "it", "de", "cz", "sk", "es", "pl", "pt", "se", NULL};
b->clear();
for (int i=0; strings[i]!=NULL; i++) {
diff --git a/companion/src/translations/companion_pl.ts b/companion/src/translations/companion_pl.ts
index 57fa3ae87..e4e822e8b 100644
--- a/companion/src/translations/companion_pl.ts
+++ b/companion/src/translations/companion_pl.ts
@@ -4904,6 +4904,11 @@ p, li { white-space: pre-wrap; }
Portuguese
Portugalski
+
+
+ Polish
+ Polski
+
No
diff --git a/radio/src/Makefile b/radio/src/Makefile
index 4ce991777..97083ad00 100644
--- a/radio/src/Makefile
+++ b/radio/src/Makefile
@@ -620,7 +620,7 @@ ifeq ($(PCB), TARANIS)
EEPROMSRC = eeprom_common.cpp eeprom_rlc.cpp eeprom_conversions.cpp
PULSESSRC = protocols/pulses_arm.cpp protocols/ppm_arm.cpp protocols/pxx_arm.cpp
CPPSRC += audio_arm.cpp
- CPPSRC += targets/taranis/pwr_driver.cpp 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/delays.cpp targets/taranis/uart_driver.cpp targets/taranis/sport_driver.cpp
+ CPPSRC += targets/taranis/pwr_driver.cpp 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/delays.cpp targets/taranis/uart3_driver.cpp targets/taranis/sport_driver.cpp
CPPSRC += bmp.cpp gui/view_channels.cpp gui/view_about.cpp gui/view_text.cpp
SRC += targets/taranis/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c
SRC += targets/taranis/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/misc.c
diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp
index 3fff37af0..dc16ff64a 100644
--- a/radio/src/audio_arm.cpp
+++ b/radio/src/audio_arm.cpp
@@ -679,6 +679,9 @@ void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id)
if (!sdMounted())
return;
+ if (g_eeGeneral.beepMode == e_mode_quiet)
+ return;
+
if (strlen(filename) > AUDIO_FILENAME_MAXLEN) {
POPUP_WARNING(STR_PATH_TOO_LONG);
return;
@@ -870,7 +873,7 @@ void audioEvent(uint8_t e, uint16_t f)
break;
// timer == 0
case AU_TIMER_00:
- audioQueue.play(BEEP_DEFAULT_FREQ+150, 240, 20, PLAY_NOW);
+ audioQueue.play(BEEP_DEFAULT_FREQ+150, 300, 20, PLAY_NOW);
break;
// timer <= 10 seconds left
case AU_TIMER_LT10:
diff --git a/radio/src/debug.h b/radio/src/debug.h
index f259d4b11..cd852f852 100644
--- a/radio/src/debug.h
+++ b/radio/src/debug.h
@@ -73,7 +73,6 @@ inline void dump(unsigned char *data, unsigned int size)
extern "C" {
#endif
-void debugPutc(const char c);
void debugPuts(const char *string, ...);
void dump(unsigned char *data, unsigned int size);
diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp
index e422861fd..28656db26 100644
--- a/radio/src/gui/menu_general.cpp
+++ b/radio/src/gui/menu_general.cpp
@@ -1200,8 +1200,12 @@ void menuGeneralHardware(uint8_t event)
}
case ITEM_SETUP_HW_UART3_MODE:
- g_eeGeneral.hw_uartMode = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.hw_uartMode, 0, 2, attr, event);
+ g_eeGeneral.uart3Mode = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.uart3Mode, 0, UART_MODE_MAX, attr, event);
+ if (checkIncDec_Ret) {
+ uart3Init(g_eeGeneral.uart3Mode);
+ }
break;
+
}
}
@@ -1301,7 +1305,7 @@ void menuCommonCalib(uint8_t event)
else {
if (reusableBuffer.calib.xpotsCalib[idx].lastCount < 255) reusableBuffer.calib.xpotsCalib[idx].lastCount++;
}
- if (reusableBuffer.calib.xpotsCalib[idx].lastCount == 8/*80ms*/) {
+ if (reusableBuffer.calib.xpotsCalib[idx].lastCount == 10/*100ms*/) {
int16_t position = reusableBuffer.calib.xpotsCalib[idx].lastPosition;
bool found = false;
for (int j=0; jsteps[j] = (reusableBuffer.calib.xpotsCalib[idx].steps[j+1] + reusableBuffer.calib.xpotsCalib[idx].steps[j]) >> 5;
}
}
+ else {
+ g_eeGeneral.potsType &= ~(1<> 1;
StepsCalibData * calib = (StepsCalibData *) &g_eeGeneral.calib[x];
- if (IS_MULTIPOS_POT(x) && calib->count>0 && calib->countcount>0 && calib->count> 4);
s_anaFilt[x] = 2*RESX;
for (int i=0; icount; i++) {
@@ -3802,15 +3802,6 @@ void doMixerCalculations()
s_last_phase = phase;
}
- if (tick10ms) {
-#if defined(CPUARM)
- requiredSpeakerVolume = g_eeGeneral.speakerVolume + VOLUME_LEVEL_DEF;
-#endif
-
- // the reason this needs to be done before limits is the applyLimit function; it checks for safety switches which would be not initialized otherwise
- evalFunctions();
- }
-
int32_t weight = 0;
if (s_fade_flight_phases) {
memclear(sum_chans512, sizeof(sum_chans512));
@@ -3818,7 +3809,7 @@ void doMixerCalculations()
s_last_switch_used = 0;
if (s_fade_flight_phases & ((ACTIVE_PHASES_TYPE)1 << p)) {
s_perout_flight_phase = p;
- perOut(p==phase?e_perout_mode_normal:e_perout_mode_inactive_phase, p==phase?tick10ms:0);
+ perOut(p==phase ? e_perout_mode_normal : e_perout_mode_inactive_phase, p==phase ? tick10ms : 0);
for (uint8_t i=0; i> 4) * fp_act[p];
weight += fp_act[p];
@@ -3832,7 +3823,17 @@ void doMixerCalculations()
s_perout_flight_phase = phase;
perOut(e_perout_mode_normal, tick10ms);
}
-
+
+ //========== FUNCTIONS ===============
+ // must be done after mixing because some functions use the inputs/channels values
+ // must be done before limits because of the applyLimit function: it checks for safety switches which would be not initialized otherwise
+ if (tick10ms) {
+#if defined(CPUARM)
+ requiredSpeakerVolume = g_eeGeneral.speakerVolume + VOLUME_LEVEL_DEF;
+#endif
+ evalFunctions();
+ }
+
//========== LIMITS ===============
for (uint8_t i=0; i 1024*256
@@ -3988,7 +3989,10 @@ void doMixerCalculations()
switch(timerState->state)
{
case TMR_RUNNING:
- if (tv && newTimerVal>=(int16_t)tv) timerState->state = TMR_NEGATIVE;
+ if (tv && newTimerVal>=(int16_t)tv) {
+ AUDIO_TIMER_00(g_model.timers[i].countdownBeep);
+ timerState->state = TMR_NEGATIVE;
+ }
break;
case TMR_NEGATIVE:
if (newTimerVal >= (int16_t)tv + MAX_ALERT_TIME) timerState->state = TMR_STOPPED;
@@ -4003,7 +4007,6 @@ void doMixerCalculations()
if (g_model.timers[i].countdownBeep && g_model.timers[i].start) {
if (newTimerVal==30) AUDIO_TIMER_30();
if (newTimerVal==20) AUDIO_TIMER_20();
- if (newTimerVal==00) AUDIO_TIMER_00(g_model.timers[i].countdownBeep);
if (newTimerVal<=10) AUDIO_TIMER_LT10(g_model.timers[i].countdownBeep, newTimerVal);
}
if (g_model.timers[i].minuteBeep && (newTimerVal % 60)==0) {
@@ -4979,6 +4982,10 @@ inline void opentxInit(OPENTX_INIT_ARGS)
lcdSetContrast();
backlightOn();
+#if defined(PCBTARANIS)
+ uart3Init(g_eeGeneral.uart3Mode);
+#endif
+
#if defined(CPUARM)
init_trainer_capture();
#endif
diff --git a/radio/src/simpgmspace.cpp b/radio/src/simpgmspace.cpp
index 10c7abd4a..a502dd7f0 100644
--- a/radio/src/simpgmspace.cpp
+++ b/radio/src/simpgmspace.cpp
@@ -632,6 +632,7 @@ void lcdRefresh()
#if defined(PCBTARANIS)
void usbStart() { }
+void USART_DeInit(USART_TypeDef* ) { }
ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) { return SUCCESS; }
ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct) { return SUCCESS; }
void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct) { }
diff --git a/radio/src/simpgmspace.h b/radio/src/simpgmspace.h
index b177d82a0..d3684200f 100644
--- a/radio/src/simpgmspace.h
+++ b/radio/src/simpgmspace.h
@@ -406,4 +406,5 @@ extern char simuSdDirectory[1024];
#define SD_GET_SIZE_MB() (0)
#define SD_GET_SPEED() (0)
+
#endif
diff --git a/radio/src/targets/sky9x/board_sky9x.h b/radio/src/targets/sky9x/board_sky9x.h
index 873d3e7e5..7cde0cfc9 100644
--- a/radio/src/targets/sky9x/board_sky9x.h
+++ b/radio/src/targets/sky9x/board_sky9x.h
@@ -258,4 +258,7 @@ void rotencEnd();
#define rotencDown() 0
#endif
+// Debug driver
+void debugPutc(const char c);
+
#endif
diff --git a/radio/src/targets/taranis/board_taranis.cpp b/radio/src/targets/taranis/board_taranis.cpp
index 36987fab9..754f6e6c1 100644
--- a/radio/src/targets/taranis/board_taranis.cpp
+++ b/radio/src/targets/taranis/board_taranis.cpp
@@ -192,9 +192,6 @@ void boardInit()
adcInit();
delaysInit();
audioInit();
-#if defined(DEBUG)
- uartInit(DEBUG_UART_BAUDRATE);
-#endif
init5msTimer();
__enable_irq();
eepromInit();
diff --git a/radio/src/targets/taranis/board_taranis.h b/radio/src/targets/taranis/board_taranis.h
index 1de2f354d..4bbd2fde0 100644
--- a/radio/src/targets/taranis/board_taranis.h
+++ b/radio/src/targets/taranis/board_taranis.h
@@ -77,11 +77,11 @@ extern uint16_t sessionTimer;
void delaysInit();
-#define DEBUG_UART_BAUDRATE 115200
+#define DEBUG_BAUDRATE 115200
#define SPORT_BAUDRATE 57600
-void uartInit(uint32_t baudrate);
-void uartPutc(const char c);
+void uart3Init(unsigned int mode);
+void uart3Putc(const char c);
void sportInit(void);
@@ -183,6 +183,8 @@ bool usbPlugged(void);
void eeWriteBlockCmp(const void *pointer_ram, uint16_t pointer_eeprom, size_t size);
#endif
+// Debug driver
+void debugPutc(const char c);
extern uint8_t currentTrainerMode;
diff --git a/radio/src/targets/taranis/uart_driver.cpp b/radio/src/targets/taranis/uart3_driver.cpp
similarity index 81%
rename from radio/src/targets/taranis/uart_driver.cpp
rename to radio/src/targets/taranis/uart3_driver.cpp
index f084ae8fb..00a0d8891 100644
--- a/radio/src/targets/taranis/uart_driver.cpp
+++ b/radio/src/targets/taranis/uart3_driver.cpp
@@ -36,7 +36,7 @@
#include "../../opentx.h"
-void uartInit(uint32_t baudrate)
+void uart3Setup(unsigned int baudrate)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
@@ -69,22 +69,47 @@ void uartInit(uint32_t baudrate)
USART_ITConfig(UART3, USART_IT_TXE, DISABLE);
NVIC_EnableIRQ(USART3_IRQn);
- NVIC_SetPriority(USART3_IRQn, 8);
+ NVIC_SetPriority(USART3_IRQn, 7);
+}
+
+void uart3Init(unsigned int mode)
+{
+ USART_DeInit(USART3);
+
+ switch(mode) {
+ case UART_MODE_SPORT:
+ uart3Setup(SPORT_BAUDRATE);
+ break;
+#if defined(DEBUG)
+ case UART_MODE_DEBUG:
+ uart3Setup(DEBUG_BAUDRATE);
+ break;
+#endif
+ }
+}
+
+Fifo<512> uart3TxFifo;
+
+void uart3Putc(const char c)
+{
+ uart3TxFifo.push(c);
+ USART_ITConfig(UART3, USART_IT_TXE, ENABLE);
}
#if defined(DEBUG)
-Fifo<512> debugTxFifo;
void debugPutc(const char c)
{
- debugTxFifo.push(c);
- USART_ITConfig(UART3, USART_IT_TXE, ENABLE);
+ if (g_eeGeneral.uart3Mode == UART_MODE_DEBUG) {
+ uart3Putc(c);
+ }
}
+#endif
extern "C" void USART3_IRQHandler(void)
{
if (USART_GetITStatus(UART3, USART_IT_TXE) != RESET) {
uint8_t txchar;
- if (debugTxFifo.pop(txchar)) {
+ if (uart3TxFifo.pop(txchar)) {
/* Write one byte to the transmit data register */
USART_SendData(UART3, txchar);
}
@@ -93,4 +118,3 @@ extern "C" void USART3_IRQHandler(void)
}
}
}
-#endif
diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp
index dcb6d3693..613f30daa 100644
--- a/radio/src/telemetry/frsky_sport.cpp
+++ b/radio/src/telemetry/frsky_sport.cpp
@@ -534,6 +534,10 @@ void processSerialData(uint8_t data)
btPushByte(data);
#endif
+ if (g_eeGeneral.uart3Mode == UART_MODE_SPORT) {
+ uart3Putc(data);
+ }
+
if (data == START_STOP) {
dataState = STATE_DATA_IN_FRAME;
numPktBytes = 0;
diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt
index 1e539d4dd..258b522a4 100644
--- a/radio/src/translations/cz.h.txt
+++ b/radio/src/translations/cz.h.txt
@@ -69,7 +69,7 @@
#define TR_TRNCHN "CH1CH2CH3CH4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "OFF\0 ""SPORT Mirror\0 ""Virtual SP2UART"
+#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0"
#define LEN_POTTYPES "\017"
#define TR_POTTYPES "Pot\0 ""Multipos Switch"
diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt
index 45355f3f4..4b104e5ec 100644
--- a/radio/src/translations/de.h.txt
+++ b/radio/src/translations/de.h.txt
@@ -69,7 +69,7 @@
#define TR_TRNCHN "CH1CH2CH3CH4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "OFF\0 ""SPORT Mirror\0 ""Virtual SP2UART"
+#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0"
#define LEN_POTTYPES "\017"
#define TR_POTTYPES "Pot\0 ""Multipos Switch"
diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h
index 1c9054538..3d58a6203 100644
--- a/radio/src/translations/en.h
+++ b/radio/src/translations/en.h
@@ -69,7 +69,7 @@
#define TR_TRNCHN "CH1CH2CH3CH4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "OFF\0 ""SPORT Mirror\0 ""Virtual SP2UART"
+#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0"
#define LEN_POTTYPES "\017"
#define TR_POTTYPES "Pot\0 ""Multipos Switch"
diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt
index 51260c6c2..6198acd90 100644
--- a/radio/src/translations/es.h.txt
+++ b/radio/src/translations/es.h.txt
@@ -69,7 +69,7 @@
#define TR_TRNCHN "CH1CH2CH3CH4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "OFF\0 ""SPORT Mirror\0 ""Virtual SP2UART"
+#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0"
#define LEN_POTTYPES "\017"
#define TR_POTTYPES "Pot\0 ""Multipos Switch"
diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt
index 69b34183a..a89a410d5 100644
--- a/radio/src/translations/fr.h.txt
+++ b/radio/src/translations/fr.h.txt
@@ -69,10 +69,10 @@
#define TR_TRNCHN "CH1CH2CH3CH4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "OFF\0 ""SPORT Mirror\0 ""Virtual SP2UART"
+#define TR_UART3MODES "OFF\0 ""Recopie S-Port\0""Debug\0"
#define LEN_POTTYPES "\017"
-#define TR_POTTYPES "Pot\0 ""Multipos Switch"
+#define TR_POTTYPES "Potentiomètre\0 ""Inter multi-pos"
#define LEN_DATETIME "\005"
#define TR_DATETIME "DATE:""HEURE"
@@ -683,8 +683,8 @@
#define TR_PERSISTENT_MAH TR(INDENT "Enr. mAh",INDENT "Enregistrer mAh")
#define TR_FAS_OFFSET TR(INDENT "Corr FAS", INDENT "Correction FAS")
#define TR_UART3MODE "Port série"
-#define TR_POT1TYPE "S1 Type"
-#define TR_POT2TYPE "S2 Type"
+#define TR_POT1TYPE "Type S1"
+#define TR_POT2TYPE "Type S2"
#if defined(MAVLINK)
#define TR_MAVLINK_RC_RSSI_SCALE_LABEL "RSSI Max"
diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt
index 4326c226f..bd9c119c5 100644
--- a/radio/src/translations/it.h.txt
+++ b/radio/src/translations/it.h.txt
@@ -69,7 +69,7 @@
#define TR_TRNCHN "ch1ch2ch3ch4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "OFF\0 ""SPORT Mirror\0 ""Virtual SP2UART"
+#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0"
#define LEN_POTTYPES "\017"
#define TR_POTTYPES "Pot\0 ""Multipos Switch"
diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt
index 23c962ba7..94f95686d 100644
--- a/radio/src/translations/pl.h.txt
+++ b/radio/src/translations/pl.h.txt
@@ -69,10 +69,10 @@
#define TR_TRNCHN "KN1KN2KN3KN4"
#define LEN_UART3MODES "\021"
-#define TR_UART3MODES "WYŁ\0 ""SPORT Mirror\0 ""Wirtualny SP2UART"
+#define TR_UART3MODES "Wyłącz\0 ""S-Port Mirror\0 ""Virtual SP2UART"
#define LEN_POTTYPES "\017"
-#define TR_POTTYPES "Potencj.\0 ""Prz.Wielopoz\0 "
+#define TR_POTTYPES "Potencjometr\0 ""Przeł.Wielopoz."
#define LEN_DATETIME "\006"
#define TR_DATETIME "DATA:\0""CZAS:\0"
diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt
index 33e9d16fe..23a8b5144 100644
--- a/radio/src/translations/pt.h.txt
+++ b/radio/src/translations/pt.h.txt
@@ -69,7 +69,7 @@
#define TR_TRNCHN "CH1CH2CH3CH4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "OFF\0 ""SPORT Mirror\0 ""Virtual SP2UART"
+#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0"
#define LEN_POTTYPES "\017"
#define TR_POTTYPES "Pot\0 ""Multipos Switch"
diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt
index ad1277001..94277581c 100644
--- a/radio/src/translations/se.h.txt
+++ b/radio/src/translations/se.h.txt
@@ -69,7 +69,7 @@
#define TR_TRNCHN "KN1KN2KN3KN4"
#define LEN_UART3MODES "\017"
-#define TR_UART3MODES "Av\0 ""SPORT-spegel\0 ""VirtuellSP2UART"
+#define TR_UART3MODES "Av\0 ""S-Port-spegel\0 ""Debug\0"
#define LEN_POTTYPES "\017"
#define TR_POTTYPES "Pot\0 ""Multipos Switch"