From 2388b90a9033ed54020ed5d7cb3a34fdc37a6532 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 15 Aug 2018 15:08:49 +0200 Subject: [PATCH] XLITE-S support --- radio/src/CMakeLists.txt | 8 +-- radio/src/dataconstants.h | 49 ++++++-------- radio/src/datastructs.h | 8 ++- radio/src/gui/128x64/radio_setup.cpp | 15 ++++- radio/src/lua/interface.cpp | 8 +-- radio/src/main_arm.cpp | 78 +++++++++++++++++++++++ radio/src/opentx.cpp | 4 +- radio/src/opentx.h | 15 +++++ radio/src/strhelpers.cpp | 2 +- radio/src/targets/horus/board.h | 1 + radio/src/targets/taranis/CMakeLists.txt | 26 ++++++-- radio/src/targets/taranis/board.cpp | 57 +++++++++++++++++ radio/src/targets/taranis/board.h | 35 ++++++++-- radio/src/targets/taranis/hal.h | 67 +++++++++++++++++-- radio/src/targets/taranis/keys_driver.cpp | 6 +- radio/src/translations.cpp | 2 + radio/src/translations.h | 5 +- radio/src/translations/cz.h.txt | 4 ++ radio/src/translations/de.h.txt | 4 ++ radio/src/translations/en.h.txt | 7 ++ radio/src/translations/es.h.txt | 4 ++ radio/src/translations/fi.h.txt | 4 ++ radio/src/translations/fr.h.txt | 4 ++ radio/src/translations/it.h.txt | 4 ++ radio/src/translations/nl.h.txt | 4 ++ radio/src/translations/pl.h.txt | 4 ++ radio/src/translations/pt.h.txt | 4 ++ radio/src/translations/se.h.txt | 4 ++ 28 files changed, 376 insertions(+), 57 deletions(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 713655f44..15fac6e5f 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -1,7 +1,7 @@ include(CMakeForceCompiler) include(Bitmaps) -set(PCB_TYPES X7 XLITE X9D X9D+ X9E X10 X12S SKY9X 9XRPRO AR9X) +set(PCB_TYPES X7 XLITE XLITES X9D X9D+ X9E X10 X12S SKY9X 9XRPRO AR9X) set(GUI_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU NL) set(TTS_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU NL RU) @@ -82,7 +82,7 @@ set(FATFS_SRC if(PCB STREQUAL X12S OR PCB STREQUAL X10) include(targets/horus/CMakeLists.txt) -elseif(PCB STREQUAL X9E OR PCB STREQUAL X9D+ OR PCB STREQUAL X9D OR PCB STREQUAL X7 OR PCB STREQUAL XLITE) +elseif(PCB STREQUAL X9E OR PCB STREQUAL X9D+ OR PCB STREQUAL X9D OR PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES) include(targets/taranis/CMakeLists.txt) elseif(PCB STREQUAL SKY9X OR PCB STREQUAL 9XRPRO OR PCB STREQUAL AR9X) include(targets/sky9x/CMakeLists.txt) @@ -133,7 +133,7 @@ else() add_definitions(-DEEPROM -DEEPROM_RAW) endif() -if(ARCH STREQUAL ARM AND NOT PCB STREQUAL X12S AND NOT PCB STREQUAL X10 AND NOT PCB STREQUAL XLITE) +if(ARCH STREQUAL ARM AND NOT PCB STREQUAL X12S AND NOT PCB STREQUAL X10 AND NOT PCB STREQUAL XLITE AND NOT PCB STREQUAL XLITES) add_definitions(-DEEPROM_CONVERSIONS) set(SRC ${SRC} storage/eeprom_conversions.cpp) endif() @@ -458,7 +458,7 @@ if(NOT MSVC) set(SRC ${SRC} bin_allocator.cpp) endif() - if(PCB STREQUAL XLITE OR PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL X10 OR PCB STREQUAL X12S) + if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL X10 OR PCB STREQUAL X12S) add_subdirectory(targets/common/arm/stm32/bootloader) include_directories(${CMAKE_CURRENT_BINARY_DIR}/targets/common/arm/stm32/bootloader) set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} bootloader) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index a82ecb289..8b168b7ff 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -358,7 +358,7 @@ enum SwitchSources { SWSRC_FIRST_SWITCH, -#if defined(PCBTARANIS) || defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBTARANIS) SWSRC_SA0 = SWSRC_FIRST_SWITCH, SWSRC_SA1, SWSRC_SA2, @@ -371,22 +371,22 @@ enum SwitchSources { SWSRC_SD0, SWSRC_SD1, SWSRC_SD2, -#if !defined(PCBX7) && !defined(PCBXLITE) +#if defined(PCBHORUS) || defined(PCBX9) || defined(PCBXLITES) SWSRC_SE0, SWSRC_SE1, SWSRC_SE2, #endif -#if !defined(PCBXLITE) +#if defined(PCBHORUS) || defined(PCBX9) || defined(PCBX7) || defined(PCBXLITES) SWSRC_SF0, SWSRC_SF1, SWSRC_SF2, #endif -#if !defined(PCBX7) && !defined(PCBXLITE) +#if defined(PCBHORUS) || defined(PCBX9) SWSRC_SG0, SWSRC_SG1, SWSRC_SG2, #endif -#if !defined(PCBXLITE) +#if defined(PCBHORUS) || defined(PCBX9) || defined(PCBX7) SWSRC_SH0, SWSRC_SH1, SWSRC_SH2, @@ -423,15 +423,11 @@ enum SwitchSources { SWSRC_SR1, SWSRC_SR2, #endif -#if defined(PCBX9E) + SWSRC_LAST_SWITCH = SWSRC_FIRST_SWITCH + NUM_SWITCHES_POSITIONS - 1, +#if NUM_SWITCHES >= 8 SWSRC_TRAINER = SWSRC_SH2, - SWSRC_LAST_SWITCH = SWSRC_SR2, -#elif defined(PCBXLITE) - SWSRC_TRAINER = SWSRC_SD2, - SWSRC_LAST_SWITCH = SWSRC_SD2, #else - SWSRC_TRAINER = SWSRC_SH2, - SWSRC_LAST_SWITCH = SWSRC_SH2, + SWSRC_TRAINER = SWSRC_LAST_SWITCH, #endif #else // neither Taranis nor Horus SWSRC_ID0 = SWSRC_FIRST_SWITCH, @@ -607,25 +603,23 @@ enum MixSources { MIXSRC_FIRST_SWITCH, -#if defined(PCBXLITE) +#if defined(PCBHORUS) || defined(PCBTARANIS) MIXSRC_SA = MIXSRC_FIRST_SWITCH, LUA_EXPORT("sa", "Switch A") MIXSRC_SB, LUA_EXPORT("sb", "Switch B") MIXSRC_SC, LUA_EXPORT("sc", "Switch C") MIXSRC_SD, LUA_EXPORT("sd", "Switch D") - MIXSRC_LAST_SWITCH = MIXSRC_SD, -#elif defined(PCBTARANIS) || defined(PCBHORUS) - MIXSRC_SA = MIXSRC_FIRST_SWITCH, LUA_EXPORT("sa", "Switch A") - MIXSRC_SB, LUA_EXPORT("sb", "Switch B") - MIXSRC_SC, LUA_EXPORT("sc", "Switch C") - MIXSRC_SD, LUA_EXPORT("sd", "Switch D") -#if !defined(PCBX7) +#if defined(PCBHORUS) || defined(PCBX9) || defined(PCBXLITES) MIXSRC_SE, LUA_EXPORT("se", "Switch E") #endif +#if defined(PCBHORUS) || defined(PCBX9) || defined(PCBX7) || defined(PCBXLITES) MIXSRC_SF, LUA_EXPORT("sf", "Switch F") -#if !defined(PCBX7) +#endif +#if defined(PCBHORUS) || defined(PCBX9) MIXSRC_SG, LUA_EXPORT("sg", "Switch G") #endif +#if defined(PCBHORUS) || defined(PCBX9) || defined(PCBX7) MIXSRC_SH, LUA_EXPORT("sh", "Switch H") +#endif #if defined(PCBX9E) MIXSRC_SI, LUA_EXPORT("si", "Switch I") MIXSRC_SJ, LUA_EXPORT("sj", "Switch J") @@ -637,9 +631,6 @@ enum MixSources { MIXSRC_SP, LUA_EXPORT("sp", "Switch P") MIXSRC_SQ, LUA_EXPORT("sq", "Switch Q") MIXSRC_SR, LUA_EXPORT("sr", "Switch R") - MIXSRC_LAST_SWITCH = MIXSRC_SR, -#else - MIXSRC_LAST_SWITCH = MIXSRC_SH, #endif #else MIXSRC_3POS = MIXSRC_FIRST_SWITCH, @@ -649,7 +640,6 @@ enum MixSources { MIXSRC_AIL, MIXSRC_GEA, MIXSRC_TRN, - MIXSRC_LAST_SWITCH = MIXSRC_TRN, #endif MIXSRC_FIRST_LOGICAL_SWITCH, MIXSRC_SW1 = MIXSRC_FIRST_LOGICAL_SWITCH, LUA_EXPORT_MULTIPLE("ls", "Logical switch L%d", MAX_LOGICAL_SWITCHES) @@ -703,10 +693,11 @@ enum MixSources { MIXSRC_LAST_TELEM = MIXSRC_FIRST_TELEM+3*MAX_TELEMETRY_SENSORS-1 }; -#define MIXSRC_FIRST (MIXSRC_NONE+1) -#define MIXSRC_LAST MIXSRC_LAST_CH -#define INPUTSRC_FIRST MIXSRC_Rud -#define INPUTSRC_LAST MIXSRC_LAST_TELEM +#define MIXSRC_FIRST (MIXSRC_NONE + 1) +#define MIXSRC_LAST MIXSRC_LAST_CH +#define MIXSRC_LAST_SWITCH (MIXSRC_FIRST_SWITCH + NUM_SWITCHES - 1) +#define INPUTSRC_FIRST MIXSRC_Rud +#define INPUTSRC_LAST MIXSRC_LAST_TELEM enum BacklightMode { e_backlight_mode_off = 0, diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 44eb39f6a..dbab633c1 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -626,7 +626,8 @@ PACK(struct TrainerData { NOBACKUP(uint8_t jitterFilter:1); /* 0 - active */\ NOBACKUP(uint8_t disableRssiPoweroffAlarm:1); \ NOBACKUP(uint8_t USBMode:2); \ - NOBACKUP(uint8_t spareExtraArm:3); \ + NOBACKUP(uint8_t jackMode:2); \ + NOBACKUP(uint8_t spareExtraArm:1); \ NOBACKUP(char ttsLanguage[2]); \ NOBACKUP(int8_t beepVolume:4); \ NOBACKUP(int8_t wavVolume:4); \ @@ -869,7 +870,10 @@ static inline void check_struct() CHKSIZE(RssiAlarmData, 2); CHKSIZE(TrainerData, 16); -#if defined(PCBXLITE) +#if defined(PCBXLITES) + CHKSIZE(RadioData, 850); + CHKSIZE(ModelData, 6025); +#elif defined(PCBXLITE) CHKSIZE(RadioData, 844); CHKSIZE(ModelData, 6025); #elif defined(PCBX7) diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index ca8199462..6b7a44987 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -97,6 +97,7 @@ enum MenuRadioSetupItems { IF_FAI_CHOICE(ITEM_SETUP_FAI) ITEM_SETUP_SWITCHES_DELAY, CASE_STM32(ITEM_SETUP_USB_MODE) + CASE_JACK_DETECT(ITEM_SETUP_JACK_MODE) ITEM_SETUP_RX_CHANNEL_ORD, ITEM_SETUP_STICK_MODE_LABELS, ITEM_SETUP_STICK_MODE, @@ -131,7 +132,11 @@ void menuRadioSetup(event_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabGeneral, MENU_RADIO_SETUP, HEADER_LINE+ITEM_SETUP_MAX, { HEADER_LINE_COLUMNS CASE_RTCLOCK(2) CASE_RTCLOCK(2) CASE_BATTGRAPH(1) LABEL(SOUND), CASE_AUDIO(0) CASE_BUZZER(0) 0, 0, 0, 0, 0, CASE_AUDIO(0) CASE_VARIO(LABEL(VARIO)) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_CAPACITY(0) CASE_PCBSKY9X(0) 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) 0, CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) 0, CASE_STM32(0) 0, COL_TX_MODE, 0, 1/*to force edit mode*/}); + MENU(STR_MENURADIOSETUP, menuTabGeneral, MENU_RADIO_SETUP, HEADER_LINE+ITEM_SETUP_MAX, { HEADER_LINE_COLUMNS CASE_RTCLOCK(2) CASE_RTCLOCK(2) CASE_BATTGRAPH(1) + LABEL(SOUND), CASE_AUDIO(0) CASE_BUZZER(0) 0, 0, 0, 0, 0, CASE_AUDIO(0) CASE_VARIO(LABEL(VARIO)) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_CAPACITY(0) CASE_PCBSKY9X(0) 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) 0, CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) 0, + CASE_STM32(0) // USB mode + CASE_JACK_DETECT(0) // Jack mode + 0, COL_TX_MODE, 0, 1/*to force edit mode*/}); if (event == EVT_ENTRY) { reusableBuffer.generalSettings.stickMode = g_eeGeneral.stickMode; @@ -524,11 +529,19 @@ void menuRadioSetup(event_t event) lcdDrawText(lcdLastRightPos, y, STR_MS, attr); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.switchesDelay, -15, 100-15); break; + #if defined(STM32) case ITEM_SETUP_USB_MODE: g_eeGeneral.USBMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_USBMODE, STR_USBMODES, g_eeGeneral.USBMode, USB_UNSELECTED_MODE, USB_MAX_MODE, attr, event); break; #endif + +#if defined(JACK_DETECT_GPIO) + case ITEM_SETUP_JACK_MODE: + g_eeGeneral.jackMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_JACKMODE, STR_JACKMODES, g_eeGeneral.jackMode, JACK_UNSELECTED_MODE, JACK_MAX_MODE, attr, event); + break; +#endif + case ITEM_SETUP_RX_CHANNEL_ORD: lcdDrawTextAlignedLeft(y, STR_RXCHANNELORD); // RAET->AETR for (uint8_t i=1; i<=4; i++) { diff --git a/radio/src/lua/interface.cpp b/radio/src/lua/interface.cpp index 235e83afa..83f5d3f3a 100644 --- a/radio/src/lua/interface.cpp +++ b/radio/src/lua/interface.cpp @@ -671,10 +671,10 @@ bool luaLoadTelemetryScript(uint8_t index) ScriptInternalData & sid = scriptInternalData[luaScriptsCount++]; sid.reference = SCRIPT_TELEMETRY_FIRST+index; sid.state = SCRIPT_NOFILE; - char filename[sizeof(SCRIPTS_TELEM_PATH)+sizeof(script.file)+sizeof(SCRIPT_EXT)] = SCRIPTS_TELEM_PATH "/"; - strncpy(filename+sizeof(SCRIPTS_TELEM_PATH), script.file, sizeof(script.file)); - filename[sizeof(SCRIPTS_TELEM_PATH)+sizeof(script.file)] = '\0'; - strcat(filename+sizeof(SCRIPTS_TELEM_PATH), SCRIPT_EXT); + char filename[sizeof(SCRIPTS_TELEM_PATH) + LEN_SCRIPT_FILENAME + sizeof(SCRIPT_EXT)] = SCRIPTS_TELEM_PATH "/"; + strncpy(filename + sizeof(SCRIPTS_TELEM_PATH), script.file, LEN_SCRIPT_FILENAME); + filename[sizeof(SCRIPTS_TELEM_PATH) + LEN_SCRIPT_FILENAME] = '\0'; + strcat(filename + sizeof(SCRIPTS_TELEM_PATH), SCRIPT_EXT); if (luaLoad(lsScripts, filename, sid) == SCRIPT_PANIC) { return false; } diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index 5b601ff5a..f68226fcc 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -74,6 +74,83 @@ void handleUsbConnection() #endif // defined(STM32) && !defined(SIMU) } +#if defined(JACK_DETECT_GPIO) +bool isJackPlugged() +{ + // debounce + static bool debounced_state = 0; + static bool last_state = 0; + + if (GPIO_ReadInputDataBit(JACK_DETECT_GPIO, JACK_DETECT_GPIO_PIN)) { + if (!last_state) { + debounced_state = false; + } + last_state = false; + } + else { + if (last_state) { + debounced_state = true; + } + last_state = true; + } + return debounced_state; +} +#endif + +enum JackState +{ + SPEAKER_ACTIVE, + HEADPHONE_ACTIVE, + TRAINER_ACTIVE, +}; + +uint8_t jackState = SPEAKER_ACTIVE; + +const char STR_JACK_HEADPHONE[] = "Headphone"; +const char STR_JACK_TRAINER[] = "Trainer"; + +void onJackConnectMenu(const char * result) +{ + if (result == STR_JACK_HEADPHONE) { + jackState = HEADPHONE_ACTIVE; + disableSpeaker(); + enableHeadphone(); + } + else if (result == STR_JACK_TRAINER) { + jackState = TRAINER_ACTIVE; + enableTrainer(); + } +} + +void handleJackConnection() +{ +#if defined(JACK_DETECT_GPIO) + if (jackState == SPEAKER_ACTIVE && isJackPlugged()) { + if (g_eeGeneral.jackMode == JACK_HEADPHONE_MODE) { + jackState = HEADPHONE_ACTIVE; + disableSpeaker(); + enableHeadphone(); + } + else if (g_eeGeneral.jackMode == JACK_TRAINER_MODE) { + jackState = TRAINER_ACTIVE; + enableTrainer(); + } + else if (popupMenuNoItems == 0) { + POPUP_MENU_ADD_ITEM(STR_JACK_HEADPHONE); + POPUP_MENU_ADD_ITEM(STR_JACK_TRAINER); + POPUP_MENU_START(onJackConnectMenu); + } + } + else if (jackState == SPEAKER_ACTIVE && !isJackPlugged() && popupMenuNoItems > 0 && popupMenuHandler == onJackConnectMenu) { + popupMenuNoItems = 0; + } + else if (jackState != SPEAKER_ACTIVE && !isJackPlugged()) { + jackState = SPEAKER_ACTIVE; + enableSpeaker(); + } +#endif +} + void checkSpeakerVolume() { if (currentSpeakerVolume != requiredSpeakerVolume) { @@ -409,6 +486,7 @@ void perMain() checkEeprom(); logsWrite(); handleUsbConnection(); + handleJackConnection(); checkTrainerSettings(); periodicTick(); DEBUG_TIMER_STOP(debugTimerPerMain1); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index e45eb194c..fb3a0f269 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -248,7 +248,9 @@ void generalDefault() g_eeGeneral.slidersConfig = 0x03; // LS and RS = sliders with detent #endif -#if defined(PCBXLITE) +#if defined(PCBXLITES) + g_eeGeneral.switchConfig = (SWITCH_TOGGLE << 10) + (SWITCH_TOGGLE << 8) + (SWITCH_2POS << 6) + (SWITCH_2POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0); // 2x3POS, 2x2POS +#elif defined(PCBXLITE) g_eeGeneral.switchConfig = (SWITCH_2POS << 6) + (SWITCH_2POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0); // 2x3POS, 2x2POS #elif defined(PCBX7) g_eeGeneral.switchConfig = 0x000006ff; // 4x3POS, 1x2POS, 1xTOGGLE diff --git a/radio/src/opentx.h b/radio/src/opentx.h index daf616120..61d252886 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -211,6 +211,12 @@ #include "board.h" +#if defined(JACK_DETECT_GPIO) +#define CASE_JACK_DETECT(x) x, +#else +#define CASE_JACK_DETECT(x) +#endif + #if defined(DISK_CACHE) #include "disk_cache.h" #endif @@ -1290,4 +1296,13 @@ extern JitterMeter avgJitter[NUM_ANALOGS]; #include "bluetooth.h" #endif +#if defined(JACK_DETECT_GPIO) +enum JackMode { + JACK_UNSELECTED_MODE, + JACK_HEADPHONE_MODE, + JACK_TRAINER_MODE, + JACK_MAX_MODE = JACK_TRAINER_MODE +}; +#endif + #endif // _OPENTX_H_ diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index c3cd63c3b..99a61996a 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -266,7 +266,7 @@ char * getSwitchString(char * dest, swsrc_t idx) else *s++ = 'A'+swinfo.quot; #else - *s++ = 'A'+swinfo.quot; + *s++ = 'A' + swinfo.quot; #endif } *s++ = "\300-\301"[swinfo.rem]; diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index d14f2f706..09639e812 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -280,6 +280,7 @@ enum EnumSwitchesPositions SW_SH0, SW_SH1, SW_SH2, + NUM_SWITCHES_POSITIONS }; void keysInit(void); uint8_t keyState(uint8_t index); diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 78b09bfb5..8d71b30c3 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -98,9 +98,27 @@ elseif(PCB STREQUAL XLITE) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) set(GVAR_SCREEN model_gvars.cpp) +elseif(PCB STREQUAL XLITES) + set(PXX_FREQUENCY "HIGH" CACHE STRING "PXX frequency (LOW / HIGH)") + set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") + set(CPU_TYPE STM32F2) + set(CPU_TYPE_FULL STM32F205xE) # for size report + set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) + set(HAPTIC YES) + set(LUA_EXPORT lua_export_xlite) + set(FLAVOUR xlites) + add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME) + add_definitions(-DEEPROM_VARIANT=0x2000) + add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) + set(GUI_DIR 128x64) + set(NAVIGATION_TYPE xlite) + set(BITMAPS_TARGET 9x_bitmaps) + set(FONTS_TARGET 9x_fonts_1bit) + set(LCD_DRIVER lcd_driver_spi.cpp) + set(GVAR_SCREEN model_gvars.cpp) endif() -if(PCB STREQUAL XLITE) +if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES) if(PXX_FREQUENCY STREQUAL HIGH) add_definitions(-DPXX_FREQUENCY_HIGH) endif() @@ -124,7 +142,7 @@ else() ) endif() -if(PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL XLITE) +if(PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES) add_definitions(-DBLUETOOTH) set(TARGET_SRC ${TARGET_SRC} @@ -163,7 +181,7 @@ set(GUI_SRC ${GUI_SRC} ../screenshot.cpp ) -if(PCB STREQUAL X7 OR PCB STREQUAL XLITE) +if(PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES) set(LED_DRIVER led_driver.cpp) endif() @@ -177,7 +195,7 @@ set(TARGET_SRC ../common/arm/stm32/adc_driver.cpp ) -if(PCB STREQUAL XLITE) +if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES) set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/sticks_pwm_driver.cpp diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 5c092ee03..b5f57f607 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -272,6 +272,15 @@ void boardInit() if (HAS_SPORT_UPDATE_CONNECTOR()) { sportUpdateInit(); } + +#if defined(AUDIO_JACK_DETECT_GPIO) + initJackDetect(void); +#endif + + initSpeakerEnable(); + enableSpeaker(); + + initHeadphoneTrainerSwitch(); #endif // !defined(SIMU) } @@ -357,3 +366,51 @@ uint16_t getBatteryVoltage() instant_vbat += 20; // add 0.2V because of the diode TODO check if this is needed, but removal will beak existing calibrations!!! return (uint16_t)instant_vbat; } + +#if defined(AUDIO_SPEAKER_ENABLE_GPIO) +void initSpeakerEnable() +{ + GPIO_InitTypeDef GPIO_InitStructure; + + GPIO_InitStructure.GPIO_Pin = AUDIO_SPEAKER_ENABLE_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(AUDIO_SPEAKER_ENABLE_GPIO, &GPIO_InitStructure); +} + +void enableSpeaker() +{ + GPIO_SetBits(AUDIO_SPEAKER_ENABLE_GPIO, AUDIO_SPEAKER_ENABLE_GPIO_PIN); +} + +void disableSpeaker() +{ + GPIO_ResetBits(AUDIO_SPEAKER_ENABLE_GPIO, AUDIO_SPEAKER_ENABLE_GPIO_PIN); +} +#endif + +#if defined(HEADPHONE_TRAINER_SWITCH_GPIO) +void initHeadphoneTrainerSwitch() +{ + GPIO_InitTypeDef GPIO_InitStructure; + + GPIO_InitStructure.GPIO_Pin = HEADPHONE_TRAINER_SWITCH_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(HEADPHONE_TRAINER_SWITCH_GPIO, &GPIO_InitStructure); +} + +void enableHeadphone() +{ + GPIO_ResetBits(HEADPHONE_TRAINER_SWITCH_GPIO, HEADPHONE_TRAINER_SWITCH_GPIO_PIN); +} + +void enableTrainer() +{ + GPIO_SetBits(HEADPHONE_TRAINER_SWITCH_GPIO, HEADPHONE_TRAINER_SWITCH_GPIO_PIN); +} +#endif diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index be890a8ad..9c9e70572 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -313,22 +313,22 @@ enum EnumSwitchesPositions SW_SD0, SW_SD1, SW_SD2, -#if !defined(PCBX7) && !defined(PCBXLITE) +#if defined(PCBX9) || defined(PCBXLITES) SW_SE0, SW_SE1, SW_SE2, #endif -#if !defined(PCBXLITE) +#if defined(PCBX9) || defined(PCBX7) || defined(PCBXLITES) SW_SF0, SW_SF1, SW_SF2, #endif -#if !defined(PCBX7) && !defined(PCBXLITE) +#if defined(PCBX9) SW_SG0, SW_SG1, SW_SG2, #endif -#if !defined(PCBXLITE) +#if defined(PCBX9) || defined(PCBX7) SW_SH0, SW_SH1, SW_SH2, @@ -365,8 +365,11 @@ enum EnumSwitchesPositions SW_SR1, SW_SR2, #endif + NUM_SWITCHES_POSITIONS }; -#if defined(PCBXLITE) +#if defined(PCBXLITES) + #define NUM_SWITCHES 6 +#elif defined(PCBXLITE) #define NUM_SWITCHES 4 #elif defined(PCBX7) #define NUM_SWITCHES 6 @@ -605,6 +608,28 @@ void setScaledVolume(uint8_t volume); void setVolume(uint8_t volume); int32_t getVolume(void); #endif +#if defined(AUDIO_SPEAKER_ENABLE_GPIO) +void initSpeakerEnable(void); +void enableSpeaker(); +void disableSpeaker(); +#else +static inline void initSpeakerEnable(void) { } +static inline void enableSpeaker(void) { } +static inline void disableSpeaker(void) { } +#endif +#if defined(HEADPHONE_TRAINER_SWITCH_GPIO) +void initHeadphoneTrainerSwitch(void); +void enableHeadphone(void); +void enableTrainer(void); +#else +static inline void initHeadphoneTrainerSwitch(void) { } +static inline void enableHeadphone(void) { } +static inline void enableTrainer(void) { } +#endif +#if defined(AUDIO_JACK_DETECT_GPIO) +void initJackDetect(void); +bool isJackPlugged(); +#endif void audioConsumeCurrentBuffer(); #define audioDisableIrq() __disable_irq() #define audioEnableIrq() __enable_irq() diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 716bae368..2aabf23f1 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -253,6 +253,9 @@ #define SWITCHES_GPIO_PIN_E_H GPIO_Pin_7 // PE.07 #define SWITCHES_GPIO_REG_E_L GPIOE->IDR #define SWITCHES_GPIO_PIN_E_L GPIO_Pin_13 // PE.13 +#elif defined(PCBXLITES) + #define SWITCHES_GPIO_REG_E GPIOE->IDR + #define SWITCHES_GPIO_PIN_E GPIO_Pin_5 // PE.05 #elif defined(PCBX7) || defined(PCBXLITE) // no SWE #else @@ -265,6 +268,9 @@ #if defined(PCBX9E) #define SWITCHES_GPIO_REG_F GPIOE->IDR #define SWITCHES_GPIO_PIN_F GPIO_Pin_11 // PE.11 +#elif defined(PCBXLITES) + #define SWITCHES_GPIO_REG_F GPIOC->IDR + #define SWITCHES_GPIO_PIN_F GPIO_Pin_3 // PC.03 #elif defined(PCBXLITE) // no SWF #elif defined(PCBX7) @@ -364,6 +370,12 @@ #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR) #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_MENU | KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_PAGE | SWITCHES_GPIO_PIN_H) #define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_PLUS | KEYS_GPIO_PIN_ENTER | KEYS_GPIO_PIN_MINUS | TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LVD | TRIMS_GPIO_PIN_LVU | SWITCHES_GPIO_PIN_F | SWITCHES_GPIO_PIN_A_L | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_D_H | SWITCHES_GPIO_PIN_D_L | SWITCHES_GPIO_PIN_G_H | SWITCHES_GPIO_PIN_G_L) +#elif defined(PCBXLITES) + #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE) + #define KEYS_GPIOA_PINS (GPIO_Pin_5 | GPIO_Pin_6) + #define KEYS_GPIOB_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5) + #define KEYS_GPIOC_PINS (GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5) + #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14) #elif defined(PCBXLITE) #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE) #define KEYS_GPIOA_PINS (GPIO_Pin_5 | GPIO_Pin_6) @@ -576,11 +588,17 @@ // Internal Module #if defined(PCBXLITE) - #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define INTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM3 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1 - #define INTMODULE_PWR_GPIO GPIOD - #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_9 // PD.09 + #if defined(PCBXLITES) + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2) + #define INTMODULE_PWR_GPIO GPIOA + #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_15 // PA.15 + #else + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define INTMODULE_PWR_GPIO GPIOD + #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_9 // PD.09 + #endif #define INTMODULE_TX_GPIO GPIOB #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06 #define INTMODULE_RX_GPIO GPIOB @@ -857,6 +875,19 @@ #define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource13 #define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM4 #define BACKLIGHT_GPIO_AF_2 GPIO_AF_TIM4 +#elif defined(PCBXLITES) + #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA + #define BACKLIGHT_RCC_APB1Periph 0 + #define BACKLIGHT_RCC_APB2Periph RCC_APB2Periph_TIM1 + #define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) + #define BACKLIGHT_TIMER TIM1 + #define BACKLIGHT_GPIO GPIOA + #define BACKLIGHT_GPIO_PIN GPIO_Pin_10 // PA.10 + #define BACKLIGHT_GPIO_PinSource GPIO_PinSource10 + #define BACKLIGHT_GPIO_AF GPIO_AF_TIM1 + #define BACKLIGHT_CCMR2 TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 // Channel 3, PWM + #define BACKLIGHT_CCER TIM_CCER_CC3E + #define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR3 #elif defined(PCBXLITE) #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA #define BACKLIGHT_RCC_APB1Periph 0 @@ -1005,6 +1036,23 @@ #define I2C_ADDRESS_VOLUME 0x5C #define I2C_FLASH_PAGESIZE 64 +// Second I2C Bus: IMU +#if defined(PCBXLITES) + #define I2CX_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC) + #define I2CX_RCC_APB1Periph RCC_APB1Periph_I2C3 + #define I2CX I2C3 + #define I2CX_SCL_GPIO GPIOA + #define I2CX_SCL_GPIO_PIN GPIO_Pin_8 // PA.08 + #define I2CX_SDA_GPIO GPIOC + #define I2CX_SDA_GPIO_PIN GPIO_Pin_9 // PC.09 + #define I2CX_GPIO_AF GPIO_AF_I2C3 + #define I2CX_SCL_GPIO_PinSource GPIO_PinSource8 + #define I2CX_SDA_GPIO_PinSource GPIO_PinSource9 + #define I2CX_SPEED 400000 + #define I2CX_IMU_INT_GPIO GPIOC + #define I2CX_IMU_INT_GPIO_PIN GPIO_Pin_8 // PC.08 +#endif + // SD - SPI2 #define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define SD_RCC_APB1Periph RCC_APB1Periph_SPI2 @@ -1037,7 +1085,6 @@ #endif // Audio -#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1) #define AUDIO_RCC_APB1Periph (RCC_APB1Periph_TIM6 | RCC_APB1Periph_DAC) #define AUDIO_OUTPUT_GPIO GPIOA #define AUDIO_OUTPUT_GPIO_PIN GPIO_Pin_4 // PA.04 @@ -1049,6 +1096,18 @@ #define AUDIO_TIMER TIM6 #define AUDIO_DMA DMA1 +#if defined(PCBXLITES) + #define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1) + #define JACK_DETECT_GPIO GPIOC + #define JACK_DETECT_GPIO_PIN GPIO_Pin_13 // PC.13 + #define AUDIO_SPEAKER_ENABLE_GPIO GPIOD + #define AUDIO_SPEAKER_ENABLE_GPIO_PIN GPIO_Pin_14 // PD.14 + #define HEADPHONE_TRAINER_SWITCH_GPIO GPIOD + #define HEADPHONE_TRAINER_SWITCH_GPIO_PIN GPIO_Pin_13 // PD.13 +#else + #define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1) +#endif + // Haptic #if defined(PCBXLITE) #define HAPTIC_PWM diff --git a/radio/src/targets/taranis/keys_driver.cpp b/radio/src/targets/taranis/keys_driver.cpp index 95c93c658..69a5dcd23 100644 --- a/radio/src/targets/taranis/keys_driver.cpp +++ b/radio/src/targets/taranis/keys_driver.cpp @@ -204,7 +204,11 @@ uint32_t switchState(uint8_t index) ADD_3POS_CASE(B, 1); ADD_3POS_CASE(C, 2); ADD_3POS_CASE(D, 3); -#if defined(PCBXLITE) +#if defined(PCBXLITES) + ADD_2POS_CASE(E); + ADD_2POS_CASE(F); + // no SWF, SWG and SWH on XLITE +#elif defined(PCBXLITE) // no SWF, SWG and SWH on XLITE #elif defined(PCBX7) ADD_2POS_CASE(F); diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 6684816da..0f9bce91b 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -88,6 +88,7 @@ const char STR_OPEN9X[] = ISTR(VVARIOCENTER) ISTR(COUNTRYCODES) ISTR(USBMODES) + ISTR(JACKMODES) ISTR(VFAILSAFE) ISTR(VTRAINERMODES) ISTR(TARANIS_PROTOCOLS) @@ -359,6 +360,7 @@ const char STR_MODULE_TELEMETRY[] = TR_MODULE_TELEMETRY; const char STR_MODULE_TELEM_ON[] = TR_MODULE_TELEM_ON; const char STR_COUNTRYCODE[] = TR_COUNTRYCODE; const char STR_USBMODE[] = TR_USBMODE; +const char STR_JACKMODE[] = TR_JACKMODE; const char STR_FAILSAFE[] = TR_FAILSAFE; const char STR_FAILSAFESET[] = TR_FAILSAFESET; const char STR_HOLD[] = TR_HOLD; diff --git a/radio/src/translations.h b/radio/src/translations.h index 2ec3981dd..7169b4d8f 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -185,7 +185,8 @@ extern const char STR_OPEN9X[]; #define OFS_VVARIOCENTER (OFS_VBEEPCOUNTDOWN + sizeof(TR_VBEEPCOUNTDOWN)) #define OFS_COUNTRYCODES (OFS_VVARIOCENTER + sizeof(TR_VVARIOCENTER)) #define OFS_USBMODES (OFS_COUNTRYCODES + sizeof(TR_COUNTRYCODES)) - #define OFS_VFAILSAFE (OFS_USBMODES + sizeof(TR_USBMODES)) + #define OFS_JACKMODES (OFS_USBMODES + sizeof(TR_USBMODES)) + #define OFS_VFAILSAFE (OFS_JACKMODES + sizeof(TR_JACKMODES)) #define OFS_VTRAINERMODES (OFS_VFAILSAFE + sizeof(TR_VFAILSAFE)) #define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES)) #define OFS_R9M_REGION (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS)) @@ -290,6 +291,7 @@ extern const char STR_OPEN9X[]; #define STR_COUNTRYCODES (STR_OPEN9X + OFS_COUNTRYCODES) #define STR_USBMODES (STR_OPEN9X + OFS_USBMODES) + #define STR_JACKMODES (STR_OPEN9X + OFS_JACKMODES) #define STR_VFAILSAFE (STR_OPEN9X + OFS_VFAILSAFE) #define STR_VTRAINERMODES (STR_OPEN9X + OFS_VTRAINERMODES) @@ -579,6 +581,7 @@ extern const char STR_MENUSENSOR[]; extern const char STR_SENSOR[]; extern const char STR_COUNTRYCODE[]; extern const char STR_USBMODE[]; +extern const char STR_JACKMODE[]; extern const char STR_DISABLE_INTERNAL[]; #if defined(TELEMETRY_FRSKY) diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 20b40cd90..66f481171 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -99,6 +99,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "Vyp\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -927,6 +930,7 @@ #define TR_SENSOR "SENZOR" #define TR_COUNTRYCODE "Kód regionu" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Jazyk hlasu" #define TR_UNITSSYSTEM "Jednotky" #define TR_EDIT "Upravit" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 94520161b..18dd7e0fa 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Fragen""Joyst\0""SDCard""Serial", "Fragen\0 ""Joystick""Speicher""Seriell\0") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF""MULT""R9M\0""SBUS" @@ -932,6 +935,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Landescode" #define TR_USBMODE "USB Modus" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Sprach-Ansagen" #define TR_UNITSSYSTEM "Einheiten" #define TR_EDIT "Zeile Editieren" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 920dce585..d70bcaf01 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -420,6 +423,9 @@ #elif defined(PCBX9E) #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(PCBXLITES) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0" #elif defined(PCBXLITE) #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0" @@ -931,6 +937,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Country code" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Voice language" #define TR_UNITSSYSTEM "Units" #define TR_EDIT "Edit" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 9526692a3..059702cdc 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -938,6 +941,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Codigo Pais" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Idioma voces" #define TR_UNITSSYSTEM "Unidades" #define TR_EDIT "Editar" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 2b29e1140..127c1574d 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -930,6 +933,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Country Code" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Voice Language" #define TR_UNITSSYSTEM "Units" #define TR_EDIT "Edit" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index b6b62a7e5..ccf16dcb8 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Popup\0""Joyst\0""SDCard""Série\0", "Demander""Joystick""Stockage""Série\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -942,6 +945,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE TR("Zone géo.", "Zone géographique") #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG TR("Langue voix", "Langue annonces vocales") #define TR_UNITSSYSTEM "Unités" #define TR_EDIT "Editer" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 4cc640c15..d653425ea 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -932,6 +935,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE TR("Codice Paese","Standard 2.4Ghz") #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Lingua Voce" #define TR_UNITSSYSTEM "Unità" #define TR_EDIT "Modifica" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 1091d3ae1..56f70cfd3 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -103,6 +103,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "UIT\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -933,6 +936,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Landcode" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Taal" #define TR_UNITSSYSTEM "Eenheden" #define TR_EDIT "Wijzigen" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index f24c2846e..b38b5bae9 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -933,6 +936,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Kod regionu" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Język głosu" #define TR_UNITSSYSTEM "Jednostki" #define TR_EDIT "Edytuj" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 61de3d069..64ea4f6f3 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -937,6 +940,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Country Code" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Voice Language" #define TR_UNITSSYSTEM "Units" #define TR_EDIT "Edit" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 7bc236511..0e0fdc594 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -101,6 +101,9 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" + #define LEN_TARANIS_PROTOCOLS "\004" #define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""SBUS" @@ -944,6 +947,7 @@ #define TR_SENSOR "SENSOR" #define TR_COUNTRYCODE "Landskod" #define TR_USBMODE "USB Mode" +#define TR_JACKMODE "Jack Mode" #define TR_VOICELANG "Röstspråk" #define TR_UNITSSYSTEM "Enheter" #define TR_EDIT "Redigera"