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"