diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 728fdfb66..6855614e6 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -53,6 +53,7 @@ jobs: - x9lites - xlite - xlites + - commando8 container: image: ghcr.io/edgetx/edgetx-dev:latest volumes: @@ -94,6 +95,7 @@ jobs: - x9e;x9e-hall - x9lite;x9lites - xlite;xlites + - commando8 container: image: ghcr.io/edgetx/edgetx-dev:latest volumes: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 441731893..e31e90fa8 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -32,6 +32,7 @@ jobs: - x9d;x9dp;x9dp2019 - x9lite;x9lites - xlite;xlites + - commando8 container: image: ghcr.io/edgetx/edgetx-dev:latest volumes: diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 184b9a56d..7e68d944a 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -446,6 +446,11 @@ if(FRSKY_RELEASE) set(POPUP_LEVEL 3) endif() +if(IFLIGHT_RELEASE) + add_definitions(-DIFLIGHT_RELEASE) +endif() + + if(HARDWARE_TRAINER_MULTI) add_definitions(-DHARDWARE_TRAINER_MULTI) endif() diff --git a/radio/src/gui/128x64/view_channels.cpp b/radio/src/gui/128x64/view_channels.cpp index 58237e0f3..2c4bdf36f 100644 --- a/radio/src/gui/128x64/view_channels.cpp +++ b/radio/src/gui/128x64/view_channels.cpp @@ -27,7 +27,7 @@ constexpr coord_t CHANNEL_GAUGE_OFFSET = CHANNEL_VALUE_OFFSET; constexpr coord_t CHANNEL_BAR_WIDTH = 70; constexpr coord_t CHANNEL_PROPERTIES_OFFSET = CHANNEL_GAUGE_OFFSET + CHANNEL_BAR_WIDTH + 2; -#if defined(RADIO_T8) +#if defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP) #define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN) #define EVT_KEY_NEXT_PAGE EVT_KEY_BREAK(KEY_PLUS) diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index 41710d336..26304a6ad 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -279,7 +279,7 @@ void displayBattVoltage() #define displayVoltageOrAlarm() displayBattVoltage() -#if defined(RADIO_T8) +#if defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define EVT_KEY_CONTEXT_MENU EVT_KEY_LONG(KEY_ENTER) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP) #define EVT_KEY_NEXT_VIEW EVT_KEY_FIRST(KEY_PAGEDN) diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index 8ae02971d..e9b3d9701 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -213,7 +213,7 @@ enum { #define SWITCH_TYPE_MAX(sw) ((MIXSRC_SF - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SH - MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS) #elif defined(RADIO_ZORRO) #define SWITCH_TYPE_MAX(sw) ((MIXSRC_SB - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SC - MIXSRC_FIRST_SWITCH == sw) ? SWITCH_3POS : SWITCH_2POS) -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define SWITCH_TYPE_MAX(sw) ((MIXSRC_SA - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SD - MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS) #elif defined(RADIO_TX12) #define SWITCH_TYPE_MAX(sw) (((MIXSRC_SA - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SD - MIXSRC_FIRST_SWITCH == sw) || \ diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 3e37d2688..0bd1937a8 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -643,6 +643,11 @@ bool isInternalModuleSupported(int moduleType) bool isInternalModuleAvailable(int moduleType) { +#if defined(MUTUALLY_EXCLUSIVE_MODULES) + if (!isModuleNone(EXTERNAL_MODULE)) + return false; +#endif + if (moduleType == MODULE_TYPE_NONE) return true; @@ -681,6 +686,12 @@ bool isInternalModuleAvailable(int moduleType) bool isExternalModuleAvailable(int moduleType) { + +#if defined(MUTUALLY_EXCLUSIVE_MODULES) + if (!isModuleNone(INTERNAL_MODULE)) + return false; +#endif + #if !defined(HARDWARE_EXTERNAL_MODULE_SIZE_SML) if (isModuleTypeR9MLite(moduleType) || moduleType == MODULE_TYPE_XJT_LITE_PXX2) return false; diff --git a/radio/src/gui/screenshot.cpp b/radio/src/gui/screenshot.cpp index 4581d55da..c0cb50373 100644 --- a/radio/src/gui/screenshot.cpp +++ b/radio/src/gui/screenshot.cpp @@ -63,9 +63,11 @@ const char * writeScreenshot() return error; } +#if defined(RTCLOCK) char * tmp = strAppend(&filename[sizeof(SCREENSHOTS_PATH)-1], "/screen"); tmp = strAppendDate(tmp, true); strcpy(tmp, BMP_EXT); +#endif FRESULT result = f_open(&bmpFile, filename, FA_CREATE_ALWAYS | FA_WRITE); if (result != FR_OK) { diff --git a/radio/src/keys.h b/radio/src/keys.h index c8116d407..af016f141 100644 --- a/radio/src/keys.h +++ b/radio/src/keys.h @@ -151,7 +151,7 @@ inline bool IS_KEY_EVT(event_t evt, uint8_t key) #define EVT_ROTARY_LONG EVT_KEY_LONG(KEY_ENTER) #define IS_NEXT_EVENT(event) (event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN)) #define IS_PREVIOUS_EVENT(event) (event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)) -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define EVT_ROTARY_BREAK EVT_KEY_BREAK(KEY_ENTER) #define EVT_ROTARY_LONG EVT_KEY_LONG(KEY_ENTER) #define IS_NEXT_EVENT(event) (event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN)) diff --git a/radio/src/lua/CMakeLists.txt b/radio/src/lua/CMakeLists.txt index 61dbba2d7..85797a255 100644 --- a/radio/src/lua/CMakeLists.txt +++ b/radio/src/lua/CMakeLists.txt @@ -35,6 +35,7 @@ if(PYTHONINTERP_FOUND) add_lua_export_target(tx12mk2 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_TX12MK2) add_lua_export_target(zorro ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_ZORRO) add_lua_export_target(t8 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_T8) + add_lua_export_target(commando8 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_COMMANDO8) add_lua_export_target(t16 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10 -DRADIO_T16) add_lua_export_target(nv14 ${LUA_INCLUDES} -I${RADIO_SRC_DIR}/targets/nv14 -DPCBNV14) endif() diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 0e7948c08..5633a2cd7 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -59,6 +59,8 @@ #include "lua/lua_exports_zorro.inc" #elif defined(RADIO_T8) #include "lua/lua_exports_t8.inc" +#elif defined(RADIO_COMMANDO8) + #include "lua/lua_exports_commando8.inc" #elif defined(PCBX9LITES) #include "lua/lua_exports_x9lites.inc" #elif defined(PCBX9LITE) @@ -2704,7 +2706,7 @@ const luaR_value_entry opentxConstants[] = { { "ROTENC_LOWSPEED", ROTENC_LOWSPEED }, { "ROTENC_MIDSPEED", ROTENC_MIDSPEED }, { "ROTENC_HIGHSPEED", ROTENC_HIGHSPEED }, -#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_T8) // key reverted between field nav and value change +#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_T8) || defined(RADIO_COMMANDO8)// key reverted between field nav and value change { "EVT_VIRTUAL_PREV", EVT_KEY_FIRST(KEY_PLUS) }, { "EVT_VIRTUAL_PREV_REPT", EVT_KEY_REPT(KEY_PLUS) }, { "EVT_VIRTUAL_NEXT", EVT_KEY_FIRST(KEY_MINUS) }, @@ -2741,7 +2743,7 @@ const luaR_value_entry opentxConstants[] = { { "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) }, { "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) }, #elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D) -#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) +#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) { "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_BREAK(KEY_PAGEUP) }, { "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PAGEDN) }, { "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_MODEL) }, diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 90d34c309..dfe4a9895 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -380,6 +380,12 @@ void generalDefault() g_eeGeneral.pwrOnSpeed = 1; // 1 second #endif +#if defined(IFLIGHT_RELEASE) + g_eeGeneral.splashMode = 3; + g_eeGeneral.pwrOnSpeed = 2; + g_eeGeneral.pwrOffSpeed = 2; +#endif + g_eeGeneral.chkSum = 0xFFFF; } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 5e4805e64..0b0239d54 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -888,7 +888,7 @@ constexpr uint8_t OPENTX_START_NO_CHECKS = 0x04; #if defined(STATUS_LEDS) #define LED_ERROR_BEGIN() ledRed() -#if defined(RADIO_T8) +#if defined(RADIO_T8) || defined(RADIO_COMMANDO8) // Because of green backlit logo, green is preferred on this radio #define LED_ERROR_END() ledGreen() #define LED_BIND() ledBlue() diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index eb3bbf0de..8872140b0 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -368,7 +368,7 @@ void OpenTxSim::updateKeysAndSwitches(bool start) KEY_Down, KEY_EXIT, KEY_Right, KEY_TELE, KEY_Left, KEY_SYS, -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) KEY_Page_Up, KEY_PAGEUP, KEY_Page_Down, KEY_PAGEDN, KEY_Return, KEY_ENTER, diff --git a/radio/src/stamp.cpp b/radio/src/stamp.cpp index 91b07724f..3e0be8f6e 100644 --- a/radio/src/stamp.cpp +++ b/radio/src/stamp.cpp @@ -36,6 +36,8 @@ #define DISPLAY_VERSION "-jumper" #elif defined(RADIOMASTER_RELEASE) #define DISPLAY_VERSION "-RM" +#elif defined(IFLIGHT_RELEASE) +#define DISPLAY_VERSION "-IF" #elif defined(TBS_RELEASE) #define DISPLAY_VERSION "-tbs" #elif defined(IMRC_RELEASE) @@ -61,7 +63,7 @@ const char vers_stamp[] = "FW" TAB ": edgetx-" BOARD_NAME "\036VERS" TAB ": " VERSION DISPLAY_VERSION " (" GIT_STR ")" "\036DATE" TAB ": " DATE " " TIME; #elif defined(RADIOMASTER_RELEASE) const char vers_stamp[] = "FW" TAB ": edgetx-" FLAVOUR "\036VERS" TAB ": RM Factory (" GIT_STR ")" "\036BUILT BY : EdgeTX" "\036DATE" TAB ": " DATE " " TIME; -#elif defined(JUMPER_RELEASE) +#elif defined(JUMPER_RELEASE) || defined(IFLIGHT_RELEASE) const char vers_stamp[] = "FW" TAB ": edgetx-" FLAVOUR "\036VERS" TAB ": Factory (" GIT_STR ")" "\036BUILT BY : EdgeTX" "\036DATE" TAB ": " DATE " " TIME; #else #if defined(VERSION_TAG) diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index b0862e2b0..9de086005 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -444,7 +444,7 @@ char getRawSwitchFromIdx(int idx) #endif else return 'A' + idx; -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_T8) +#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) if (idx < 6) return 'A' + idx; else diff --git a/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp b/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp index de4b50be0..4348e2528 100644 --- a/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp +++ b/radio/src/targets/common/arm/stm32/audio_dac_driver.cpp @@ -44,6 +44,34 @@ void dacTimerInit() AUDIO_TIMER->CR1 = TIM_CR1_CEN ; } +#if defined(AUDIO_MUTE_GPIO_PIN) +static inline void setMutePin(bool enabled) +{ + if (enabled) { +#if defined(INVERTED_MUTE_PIN) + GPIO_ResetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#else + GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#endif + } else { +#if defined(INVERTED_MUTE_PIN) + GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#else + GPIO_ResetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#endif + } +} + +static inline bool getMutePin(void) +{ +#if defined(INVERTED_MUTE_PIN) + return !GPIO_ReadOutputDataBit(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#else + return GPIO_ReadOutputDataBit(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); +#endif +} +#endif + // Configure DAC0 // Not sure why PB14 has not be allocated to the DAC, although it is an EXTRA function // So maybe it is automatically done @@ -60,7 +88,7 @@ void dacInit() GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(AUDIO_MUTE_GPIO, &GPIO_InitStructure); - GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + setMutePin(true); #endif GPIO_InitStructure.GPIO_Pin = AUDIO_OUTPUT_GPIO_PIN; @@ -100,11 +128,11 @@ void audioMute() } else if (now - audioQueue.lastAudioPlayTime > AUDIO_MUTE_DELAY / 10) { // delay expired, we may mute - GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + setMutePin(true); } #else // mute - GPIO_SetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + setMutePin(true); #endif } @@ -112,15 +140,15 @@ void audioUnmute() { #if defined(AUDIO_UNMUTE_DELAY) // if muted - if (GPIO_ReadOutputDataBit(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN)) { + if (getMutePin()) { // ..un-mute - GPIO_ResetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + setMutePin(false); RTOS_WAIT_MS(AUDIO_UNMUTE_DELAY); } // reset the mute delay audioQueue.lastAudioPlayTime = 0; #else - GPIO_ResetBits(AUDIO_MUTE_GPIO, AUDIO_MUTE_GPIO_PIN); + setMutePin(false); #endif } #endif diff --git a/radio/src/targets/common/arm/stm32/board_common.h b/radio/src/targets/common/arm/stm32/board_common.h index 426799d32..dde52ca63 100644 --- a/radio/src/targets/common/arm/stm32/board_common.h +++ b/radio/src/targets/common/arm/stm32/board_common.h @@ -146,7 +146,7 @@ static inline uint32_t ticksNow() #define ROTENC_HIGHSPEED 50 #define ROTENC_DELAY_MIDSPEED 32 #define ROTENC_DELAY_HIGHSPEED 16 -#elif defined(RADIO_T8) && defined(__cplusplus) +#elif (defined(RADIO_T8) || defined(RADIO_COMMANDO8)) && defined(__cplusplus) constexpr uint8_t rotencSpeed = 1; #endif diff --git a/radio/src/targets/common/arm/stm32/bootloader/boot.cpp b/radio/src/targets/common/arm/stm32/bootloader/boot.cpp index 79fbd8437..b5bf4d303 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/boot.cpp +++ b/radio/src/targets/common/arm/stm32/bootloader/boot.cpp @@ -248,7 +248,7 @@ void bootloaderInitApp() } } -#if defined(RADIO_T8) && !defined(RADIOMASTER_RELEASE) +#if (defined(RADIO_T8) || defined(RADIO_COMMANDO8)) && !defined(RADIOMASTER_RELEASE) // Bind button not pressed if ((~KEYS_GPIO_REG_BIND & KEYS_GPIO_PIN_BIND) == false) { #else @@ -551,16 +551,12 @@ int bootloaderMain() } if (state == ST_REBOOT) { - lcdClear(); - lcdRefresh(); - lcdRefreshWait(); - #if !defined(SIMU) #if defined(RTC_BACKUP_RAM) rtcInit(); RTC->BKP0R = SOFTRESET_REQUEST; #endif - + blExit(); NVIC_SystemReset(); #else exit(1); diff --git a/radio/src/targets/common/arm/stm32/bootloader/boot.h b/radio/src/targets/common/arm/stm32/bootloader/boot.h index bf35702da..ec1ab8e31 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/boot.h +++ b/radio/src/targets/common/arm/stm32/bootloader/boot.h @@ -92,4 +92,6 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char* str = nullptr // Once for each file in a filename list on screen void bootloaderDrawFilename(const char* str, uint8_t line, bool selected); +void blExit(); + #endif diff --git a/radio/src/targets/common/arm/stm32/sticks_pwm_driver.cpp b/radio/src/targets/common/arm/stm32/sticks_pwm_driver.cpp index 9ef69c6e8..6b2fd3c6a 100644 --- a/radio/src/targets/common/arm/stm32/sticks_pwm_driver.cpp +++ b/radio/src/targets/common/arm/stm32/sticks_pwm_driver.cpp @@ -118,6 +118,15 @@ extern "C" void PWM_IRQHandler(void) } } +#if defined(STICK_CHANNEL_CHANGE) +void sticksPwmRead(uint16_t * values) +{ + values[0] = timer_capture_values[STICK_PWM_CHANNEL_0]; + values[1] = timer_capture_values[STICK_PWM_CHANNEL_1]; + values[2] = timer_capture_values[STICK_PWM_CHANNEL_2]; + values[3] = timer_capture_values[STICK_PWM_CHANNEL_3]; +} +#else void sticksPwmRead(uint16_t * values) { values[0] = timer_capture_values[0]; @@ -125,3 +134,4 @@ void sticksPwmRead(uint16_t * values) values[2] = timer_capture_values[3]; values[3] = timer_capture_values[2]; } +#endif diff --git a/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp b/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp index cde2a9baa..67eaf36bf 100644 --- a/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp @@ -99,7 +99,7 @@ stm32_hal_adc_channel ADC_MAIN_channels[] = { { ADC_CHANNEL_SLIDER2, ADC_SAMPTIME }, { ADC_CHANNEL_BATT, ADC_SAMPTIME } #else -#if defined(RADIO_T8) || defined(RADIO_TLITE) +#if defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_COMMANDO8) // fake channels to fill unsused POT1/POT2 {0, 0}, {0, 0}, diff --git a/radio/src/targets/horus/bootloader/boot_menu.cpp b/radio/src/targets/horus/bootloader/boot_menu.cpp index eae212a87..812669f92 100644 --- a/radio/src/targets/horus/bootloader/boot_menu.cpp +++ b/radio/src/targets/horus/bootloader/boot_menu.cpp @@ -215,3 +215,10 @@ void bootloaderDrawFilename(const char* str, uint8_t line, bool selected) lcd->drawSolidRect(119, 72 + (line * 25), 278, 26, 2, BL_SELECTED); } } + +void blExit(void) +{ + lcdClear(); + lcdRefresh(); + lcdRefreshWait(); +} diff --git a/radio/src/targets/nv14/bootloader/boot_menu.cpp b/radio/src/targets/nv14/bootloader/boot_menu.cpp index 5063a2322..a4849f444 100644 --- a/radio/src/targets/nv14/bootloader/boot_menu.cpp +++ b/radio/src/targets/nv14/bootloader/boot_menu.cpp @@ -237,3 +237,10 @@ void bootloaderDrawFilename(const char* str, uint8_t line, bool selected) BL_SELECTED); } } + +void blExit(void) +{ + lcdClear(); + lcdRefresh(); + lcdRefreshWait(); +} diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index f58729a77..8ce3d908f 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -8,6 +8,7 @@ option(INTERNAL_MODULE_PPM "Support for PPM internal module" OFF) option(AUTOUPDATE "Auto update internal chips from SD" OFF) option(BIND_KEY "Enable bind button" OFF) +set(USE_RTC_CLOCK YES) set(HARDWARE_EXTERNAL_MODULE YES) add_definitions(-DPCBFRSKY) @@ -261,6 +262,31 @@ elseif(PCB STREQUAL X7) add_definitions(-DRADIO_T8) add_definitions(-DEEPROM_VARIANT=0x4004) add_definitions(-DMANUFACTURER_RADIOMASTER) + elseif(PCBREV STREQUAL COMMANDO8) + set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) + set(HARDWARE_EXTERNAL_MODULE YES) + set(FLAVOUR commando8) + set(NAVIGATION_TYPE x7) + set(CPU_TYPE STM32F4) + set(CPU_TYPE_FULL STM32F407xE) # for size report + add_definitions(-DSTM32F407xx) + set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + startup_stm32f40_41xxx.s + ../../thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.8.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c + ) + add_definitions(-DSTM32F407xx -DSTM32F40_41xxx) + set(ROTARY_ENCODER NO) + set(LUA_EXPORT lua_export_commando8) + set(BLUETOOTH NO) + set(USE_RTC_CLOCK NO) + add_definitions(-DRADIO_COMMANDO8) + add_definitions(-DSTICKS_PWM) + add_definitions(-DMUTUALLY_EXCLUSIVE_MODULES) + add_definitions(-DEEPROM_VARIANT=0x4008) + add_definitions(-DMANUFACTURER_IFLIGHT) elseif(PCBREV STREQUAL ACCESS) set(DEFAULT_INTERNAL_MODULE ISRM_PXX2 CACHE STRING "Default internal module") set(INTERNAL_MODULE_SERIAL YES) @@ -521,7 +547,12 @@ if(SPLASH STREQUAL OFF) endif() add_definitions(-DPCBTARANIS) -add_definitions(-DAUDIO -DVOICE -DRTCLOCK) +add_definitions(-DAUDIO -DVOICE ) + +if(USE_RTC_CLOCK) + add_definitions(-DRTCLOCK) +endif() + set(SRC ${SRC} @@ -557,7 +588,7 @@ set(FIRMWARE_TARGET_SRC trainer_driver.cpp ) -if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES) +if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCBREV STREQUAL COMMANDO8) set(FIRMWARE_SRC ${FIRMWARE_SRC} targets/common/arm/stm32/sticks_pwm_driver.cpp) diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 0c76e6215..b13c55812 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -428,3 +428,30 @@ const etx_serial_port_t* auxSerialGetPort(int port_nr) if (port_nr >= MAX_AUX_SERIAL) return nullptr; return serialPorts[port_nr]; } + +void setMutePin(GPIO_TypeDef* GPIOx,uint16_t Pinx) +{ +#if defined(AUDIO_MUTE_PIN_INVERT) + GPIO_ResetBits(GPIOx, Pinx); +#else + GPIO_SetBits(GPIOx, Pinx); +#endif +} + +void resetMutePin(GPIO_TypeDef* GPIOx,uint16_t Pinx) +{ +#if defined(AUDIO_MUTE_PIN_INVERT) + GPIO_SetBits(GPIOx, Pinx); +#else + GPIO_ResetBits(GPIOx, Pinx); +#endif +} + +uint8_t readMutePinLevel(GPIO_TypeDef* GPIOx,uint16_t Pinx) +{ +#if defined(AUDIO_MUTE_PIN_INVERT) + return !GPIO_ReadOutputDataBit(GPIOx, Pinx); +#else + return GPIO_ReadOutputDataBit(GPIOx, Pinx); +#endif +} diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 100317094..cbff3a9c5 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -432,7 +432,7 @@ enum EnumSwitchesPositions #define STORAGE_NUM_SWITCHES NUM_SWITCHES #define DEFAULT_SWITCH_CONFIG (SWITCH_TOGGLE << 14) + (SWITCH_TOGGLE << 12) + (SWITCH_2POS << 10) + (SWITCH_2POS << 8) + (SWITCH_TOGGLE << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_TOGGLE << 0) #define DEFAULT_POTS_CONFIG (POT_WITHOUT_DETENT << 0) + (POT_WITHOUT_DETENT << 2); -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define NUM_SWITCHES 4 #define STORAGE_NUM_SWITCHES 8 #define DEFAULT_SWITCH_CONFIG (SWITCH_2POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_2POS << 0); @@ -539,7 +539,7 @@ enum Analogs { #define NUM_SLIDERS 0 #define STORAGE_NUM_POTS 1 #define STORAGE_NUM_SLIDERS 0 -#elif defined(RADIO_T8) || defined(RADIO_TLITE) +#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_COMMANDO8) #define NUM_POTS 0 #define NUM_SLIDERS 0 #define STORAGE_NUM_POTS 2 @@ -649,6 +649,10 @@ extern uint16_t adcValues[NUM_ANALOGS]; #define BATTERY_WARN 35 // 3.5V #define BATTERY_MIN 34 // 3.4V #define BATTERY_MAX 42 // 4.2V +#elif defined(RADIO_COMMANDO8) + #define BATTERY_WARN 32 // 3.5V + #define BATTERY_MIN 30 // 3.0V + #define BATTERY_MAX 42 // 4.2V #else // NI-MH 7.2V #define BATTERY_WARN 65 // 6.5V @@ -733,6 +737,10 @@ uint8_t isBacklightEnabled(); #define USB_NAME "Jumper TPro" #define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */ #define USB_PRODUCT 'T', '-', 'P', 'R', 'O', ' ', ' ', ' ' /* 8 Bytes */ +#elif defined(RADIO_COMMANDO8) + #define USB_NAME "iFlight Commando 8" + #define USB_MANUFACTURER 'i', 'F', 'l', 'i', 'g', 'h', 't', '-' /* 8 bytes */ + #define USB_PRODUCT 'C', 'o', 'm', 'm', 'a', 'n', 'd', 'o' /* 8 Bytes */ #else #define USB_NAME "FrSky Taranis" #define USB_MANUFACTURER 'F', 'r', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */ @@ -903,7 +911,7 @@ void fsLedOn(uint8_t); #define LCD_CONTRAST_MAX 30 #if defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define LCD_CONTRAST_DEFAULT 20 -#elif defined(RADIO_TPRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TPRO) +#elif defined(RADIO_TPRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TPRO) || defined(RADIO_COMMANDO8) #define LCD_CONTRAST_DEFAULT 25 #else #define LCD_CONTRAST_DEFAULT 15 diff --git a/radio/src/targets/taranis/bootloader/boot_menu.cpp b/radio/src/targets/taranis/bootloader/boot_menu.cpp index 28b20449d..67372e142 100644 --- a/radio/src/targets/taranis/bootloader/boot_menu.cpp +++ b/radio/src/targets/taranis/bootloader/boot_menu.cpp @@ -119,3 +119,20 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char *str) lcdDrawTextAlignedLeft(4 * FH, CENTER "\007Writing complete"); } } + +void blExit(void) +{ +#if defined(RADIO_COMMANDO8) + lcdClear(); + lcdDrawText(2, 22,"Press the power button."); + lcdDrawText(2, 33,"Exit the flashing mode."); + lcdRefresh(); + lcdRefreshWait(); + while(1); +#else + lcdClear(); + lcdRefresh(); + lcdRefreshWait(); +#endif +} + diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 2fef8aedb..b291d8dc9 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -118,6 +118,25 @@ #define KEYS_GPIO_PIN_MINUS GPIO_Pin_10 // PE.10 #define KEYS_GPIO_REG_BIND GPIOA->IDR #define KEYS_GPIO_PIN_BIND GPIO_Pin_10 // PA.10 +#elif defined(RADIO_COMMANDO8) + #define KEYS_GPIO_REG_PAGEUP GPIOE->IDR + #define KEYS_GPIO_PIN_PAGEUP GPIO_Pin_11 // PE.11 + #define KEYS_GPIO_REG_PAGEDN GPIOE->IDR + #define KEYS_GPIO_PIN_PAGEDN GPIO_Pin_13 // PE.13 + #define KEYS_GPIO_REG_EXIT GPIOD->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02 + #define KEYS_GPIO_REG_ENTER GPIOE->IDR + #define KEYS_GPIO_PIN_ENTER GPIO_Pin_10 // PE.10 + #define KEYS_GPIO_REG_SYS GPIOD->IDR + #define KEYS_GPIO_PIN_SYS GPIO_Pin_1 // PD.01 + #define KEYS_GPIO_REG_MDL GPIOD->IDR + #define KEYS_GPIO_PIN_MDL GPIO_Pin_0 // PD.00 + #define KEYS_GPIO_REG_PLUS GPIOE->IDR + #define KEYS_GPIO_PIN_PLUS GPIO_Pin_12 // PE.12 + #define KEYS_GPIO_REG_MINUS GPIOE->IDR + #define KEYS_GPIO_PIN_MINUS GPIO_Pin_14 // PE.14 + #define KEYS_GPIO_REG_BIND GPIOD->IDR + #define KEYS_GPIO_PIN_BIND GPIO_Pin_9 // PD.09 #elif defined(PCBX7) #define KEYS_GPIO_REG_PAGE GPIOD->IDR #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 @@ -285,7 +304,7 @@ #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02 #define TRIMS_GPIO_REG_RHL GPIOE->IDR #define TRIMS_GPIO_PIN_RHL GPIO_Pin_4 // PE.04 -#elif defined(PCBX7) +#elif defined(PCBX7) && !defined(RADIO_COMMANDO8) #define TRIMS_GPIO_REG_LHL GPIOD->IDR #define TRIMS_GPIO_PIN_LHL GPIO_Pin_15 // PD.15 #define TRIMS_GPIO_REG_LHR GPIOC->IDR @@ -302,6 +321,23 @@ #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02 #define TRIMS_GPIO_REG_RHR GPIOE->IDR #define TRIMS_GPIO_PIN_RHR GPIO_Pin_4 // PE.04 +#elif defined(PCBX7) && defined(RADIO_COMMANDO8) + #define TRIMS_GPIO_REG_LHL GPIOD->IDR + #define TRIMS_GPIO_PIN_LHL GPIO_Pin_15 // PD.15 + #define TRIMS_GPIO_REG_LHR GPIOC->IDR + #define TRIMS_GPIO_PIN_LHR GPIO_Pin_6 // PC.06 + #define TRIMS_GPIO_REG_LVD GPIOE->IDR + #define TRIMS_GPIO_PIN_LVD GPIO_Pin_6 // PE.06 + #define TRIMS_GPIO_REG_LVU GPIOE->IDR + #define TRIMS_GPIO_PIN_LVU GPIO_Pin_1 // PE.01 + #define TRIMS_GPIO_REG_RVD GPIOC->IDR + #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03 + #define TRIMS_GPIO_REG_RHL GPIOE->IDR + #define TRIMS_GPIO_PIN_RHL GPIO_Pin_0 // PE.00 + #define TRIMS_GPIO_REG_RVU GPIOC->IDR + #define TRIMS_GPIO_PIN_RVU GPIO_Pin_7 // PC.07 + #define TRIMS_GPIO_REG_RHR GPIOE->IDR + #define TRIMS_GPIO_PIN_RHR GPIO_Pin_15 // PE.15 #elif defined(PCBX9LITE) #define TRIMS_GPIO_REG_LHR GPIOC->IDR #define TRIMS_GPIO_PIN_LHR GPIO_Pin_4 // PC.04 @@ -381,6 +417,11 @@ #define HARDWARE_SWITCH_A #define SWITCHES_GPIO_REG_A GPIOE->IDR #define SWITCHES_GPIO_PIN_A GPIO_Pin_14 // PE.14 +#elif defined(RADIO_COMMANDO8) + #define STORAGE_SWITCH_A + #define HARDWARE_SWITCH_A + #define SWITCHES_GPIO_REG_A GPIOE->IDR + #define SWITCHES_GPIO_PIN_A GPIO_Pin_3 // PE.03 #elif defined(RADIO_TPRO) #define STORAGE_SWITCH_A #define HARDWARE_SWITCH_A @@ -425,6 +466,13 @@ #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_7 // PE.07 #define SWITCHES_GPIO_REG_B_H GPIOE->IDR #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_13 // PE.13 +#elif defined(RADIO_COMMANDO8) + #define STORAGE_SWITCH_B + #define HARDWARE_SWITCH_B + #define SWITCHES_GPIO_REG_B_L GPIOE->IDR + #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_5 // PE.05 + #define SWITCHES_GPIO_REG_B_H GPIOE->IDR + #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_4 // PE.04 #elif defined(RADIO_TLITE) || defined(RADIO_TPRO) #define STORAGE_SWITCH_B #define HARDWARE_SWITCH_B @@ -497,6 +545,13 @@ #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_2 // PE.02 #define SWITCHES_GPIO_REG_C_H GPIOE->IDR #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_1 // PE.01 +#elif defined(RADIO_COMMANDO8) + #define STORAGE_SWITCH_C + #define HARDWARE_SWITCH_C + #define SWITCHES_GPIO_REG_C_L GPIOC->IDR + #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_4 // PC.04 + #define SWITCHES_GPIO_REG_C_H GPIOA->IDR + #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_6 // PA.06 #elif defined(RADIO_TLITE) || defined(RADIO_TPRO) #define STORAGE_SWITCH_C #define HARDWARE_SWITCH_C @@ -549,6 +604,11 @@ #define HARDWARE_SWITCH_D #define SWITCHES_GPIO_REG_D GPIOD->IDR #define SWITCHES_GPIO_PIN_D GPIO_Pin_14 // PD.14 +#elif defined(RADIO_COMMANDO8) + #define STORAGE_SWITCH_D + #define HARDWARE_SWITCH_D + #define SWITCHES_GPIO_REG_D GPIOA->IDR + #define SWITCHES_GPIO_PIN_D GPIO_Pin_5 // PA.05 #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D @@ -559,7 +619,14 @@ #define HARDWARE_SWITCH_D #define SWITCHES_GPIO_REG_D GPIOD->IDR #define SWITCHES_GPIO_PIN_D GPIO_Pin_14 // PD.14 -#elif defined(PCBX7) +#elif defined(PCBX7) && !defined(RADIO_COMMANDO8) + #define STORAGE_SWITCH_D + #define HARDWARE_SWITCH_D + #define SWITCHES_GPIO_REG_D_L GPIOE->IDR + #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_1 // PE.01 + #define SWITCHES_GPIO_REG_D_H GPIOE->IDR + #define SWITCHES_GPIO_PIN_D_H GPIO_Pin_2 // PE.02 +#elif defined(PCBX7) && defined(RADIO_COMMANDO8) #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D #define SWITCHES_GPIO_REG_D_L GPIOE->IDR @@ -681,7 +748,7 @@ #define HARDWARE_SWITCH_F #define SWITCHES_GPIO_REG_F GPIOG->IDR #define SWITCHES_GPIO_PIN_F GPIO_Pin_6 // PG.06 -#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_TPRO) +#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_COMMANDO8) // no SWF #define STORAGE_SWITCH_F #elif defined(RADIO_T12) @@ -723,7 +790,7 @@ #define HARDWARE_SWITCH_G #define SWITCHES_GPIO_REG_G GPIOG->IDR #define SWITCHES_GPIO_PIN_G GPIO_Pin_5 // PG.05 -#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) +#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) // no SWG #else #define STORAGE_SWITCH_G @@ -746,7 +813,7 @@ #define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14 #elif defined(PCBXLITE) || defined(PCBX9LITE) // no SWH -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define STORAGE_SWITCH_H // no SWH #elif defined(RADIO_TX12) @@ -789,7 +856,7 @@ #define SWITCHES_GPIO_REG_I GPIOC->IDR #define SWITCHES_GPIO_PIN_I GPIO_Pin_13 // PC.13 #define STORAGE_SWITCH_J -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define STORAGE_SWITCH_I #define STORAGE_SWITCH_J // no SWI/J @@ -974,6 +1041,13 @@ #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_RVD) #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_PAGEUP | KEYS_GPIO_PIN_PAGEDN | SWITCHES_GPIO_PIN_D | TRIMS_GPIO_PIN_LHL) #define KEYS_GPIOE_PINS (SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_C_L | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR | TRIMS_GPIO_PIN_LVU | TRIMS_GPIO_PIN_LVD | SWITCHES_GPIO_PIN_B_L | KEYS_GPIO_PIN_PLUS | KEYS_GPIO_PIN_MINUS | KEYS_GPIO_PIN_MDL | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_A) +#elif defined(RADIO_COMMANDO8) + #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE) + #define KEYS_GPIOA_PINS (SWITCHES_GPIO_PIN_D |SWITCHES_GPIO_PIN_C_H) + #define KEYS_GPIOB_PINS (0) + #define KEYS_GPIOC_PINS (SWITCHES_GPIO_PIN_C_L | TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_RVD) + #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_MDL |KEYS_GPIO_PIN_SYS| TRIMS_GPIO_PIN_LHL|KEYS_GPIO_PIN_BIND) + #define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_ENTER | KEYS_GPIO_PIN_PAGEUP | KEYS_GPIO_PIN_PAGEDN | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR | TRIMS_GPIO_PIN_LVU | TRIMS_GPIO_PIN_LVD | SWITCHES_GPIO_PIN_B_L | KEYS_GPIO_PIN_PLUS | KEYS_GPIO_PIN_MINUS | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_A) #elif defined(RADIO_X7ACCESS) #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE) #define KEYS_GPIOA_PINS GPIO_Pin_5 @@ -1147,6 +1221,35 @@ #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT #define ADC_CHANNEL_BATT ADC_Channel_10 #define ADC_VREF_PREC2 300 +#elif defined(RADIO_COMMANDO8) + #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) + #define ADC_RCC_APB1Periph RCC_APB1Periph_TIM5 + #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1 + #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_3 // PA.03 + #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_0 // PA.00 + #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_1 // PA.01 + #define ADC_CHANNEL_STICK_RV ADC_Channel_2 // ADC1_IN2 + #define ADC_CHANNEL_STICK_RH ADC_Channel_3 // ADC1_IN3 + #define ADC_CHANNEL_STICK_LV ADC_Channel_0 // ADC1_IN0 + #define ADC_CHANNEL_STICK_LH ADC_Channel_1 // ADC1_IN1 + #define ADC_GPIO_PIN_BATT GPIO_Pin_5 // PC.05 + #define ADC_GPIOB_PINS 0 + #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT + #define ADC_CHANNEL_BATT ADC_Channel_15 + #define ADC_VREF_PREC2 320 + #define ADC_GPIOA_PINS (STICKS_PWM_ENABLED() ? 0 : (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV)) + #define PWM_IRQHandler TIM5_IRQHandler + #define PWM_TIMER TIM5 + #define PWM_GPIO GPIOA + #define PWM_GPIO_AF GPIO_AF_TIM5 + #define PWM_IRQn TIM5_IRQn + #define PWM_GPIOA_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) + #define STICK_CHANNEL_CHANGE + #define STICK_PWM_CHANNEL_0 1 + #define STICK_PWM_CHANNEL_1 0 + #define STICK_PWM_CHANNEL_2 2 + #define STICK_PWM_CHANNEL_3 3 #elif defined(RADIO_TLITE) #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) #define ADC_RCC_APB1Periph 0 @@ -1277,6 +1380,11 @@ #define PWR_SWITCH_GPIO_PIN GPIO_Pin_7 // PA.07 #define PWR_ON_GPIO GPIOE #define PWR_ON_GPIO_PIN GPIO_Pin_9 // PE.09 +#elif defined(RADIO_COMMANDO8) + #define PWR_SWITCH_GPIO GPIOD + #define PWR_SWITCH_GPIO_PIN GPIO_Pin_11 // PD.11 + #define PWR_ON_GPIO GPIOD + #define PWR_ON_GPIO_PIN GPIO_Pin_10 // PD.10 #else #define PWR_SWITCH_GPIO GPIOD #define PWR_SWITCH_GPIO_PIN GPIO_Pin_1 // PD.01 @@ -1326,6 +1434,16 @@ #define LED_BLUE_GPIO_PIN GPIO_Pin_5 // PC.05 #define LED_GREEN_GPIO GPIOB #define LED_GREEN_GPIO_PIN GPIO_Pin_1 // PB.01 +#elif defined(RADIO_COMMANDO8) + #define STATUS_LEDS + #define GPIO_LED_GPIO_ON GPIO_SetBits + #define GPIO_LED_GPIO_OFF GPIO_ResetBits + #define LED_RED_GPIO GPIOC + #define LED_RED_GPIO_PIN GPIO_Pin_2 // PC.02 + #define LED_BLUE_GPIO GPIOC + #define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PC.01 + #define LED_GREEN_GPIO GPIOC + #define LED_GREEN_GPIO_PIN GPIO_Pin_0 // PC.00 #elif defined(RADIO_ZORRO) #define STATUS_LEDS #define GPIO_LED_GPIO_ON GPIO_SetBits @@ -1544,6 +1662,26 @@ #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_11 // PF.11 #define INIT_INTMODULE_BOOTCMD_PIN() GPIO_ResetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); #endif +#elif defined(RADIO_COMMANDO8) + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_DMA1) + #define INTMODULE_RCC_APB1Periph (RCC_APB1Periph_USART3 | RCC_APB1Periph_TIM2) + #define INTMODULE_RCC_APB2Periph 0 + #define INTMODULE_PWR_GPIO GPIOE + #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PE.08 + #define INTMODULE_GPIO GPIOB + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PB.10 + #define INTMODULE_RX_GPIO_PIN GPIO_Pin_11 // PB.11 + #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource10 + #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource11 + #define INTMODULE_USART USART3 + #define INTMODULE_GPIO_AF GPIO_AF_USART3 + #define INTMODULE_GPIO_AF_LL LL_GPIO_AF_7 + #define INTMODULE_USART_IRQn USART3_IRQn + #define INTMODULE_USART_IRQHandler USART3_IRQHandler + // DMA1_Stream3 is already used by SDIO + #define INTMODULE_DMA NULL + #define INTMODULE_DMA_CHANNEL 0 + #define INTMODULE_DMA_STREAM 0 #else #define INTMODULE_PULSES #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) @@ -1621,10 +1759,19 @@ #else #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8 +#if defined(RADIO_COMMANDO8) + #define EXTMODULE_RF_SWITCH_GPIO GPIOE //Antenna switching port + #define EXTMODULE_RF_SWITCH_GPIO_PIN GPIO_Pin_7 //Antenna switching pin //PE.07 + #define EXTMODULE_PWR_GPIO GPIOE //External tuner power port //PE.02 + #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_2 //External tuner power pin + #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN|EXTMODULE_RF_SWITCH_GPIO_PIN) + #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN|EXTMODULE_RF_SWITCH_GPIO_PIN) +#else #define EXTMODULE_PWR_GPIO GPIOD #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) +#endif #define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET) #define EXTMODULE_TX_GPIO GPIOA #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 @@ -1787,7 +1934,7 @@ #define TELEMETRY_EXTI_IRQn EXTI9_5_IRQn #define TELEMETRY_EXTI_TRIGGER EXTI_Trigger_Rising -#if defined(RADIO_X7) || defined(RADIO_X7ACCESS) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_TPRO) +#if defined(RADIO_X7) || defined(RADIO_X7ACCESS) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) #define TELEMETRY_EXTI_REUSE_INTERRUPT_ROTARY_ENCODER #elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) #define TELEMETRY_EXTI_IRQHandler EXTI9_5_IRQHandler @@ -2056,6 +2203,19 @@ #define BACKLIGHT_RCC_AHB1Periph 0 #define BACKLIGHT_RCC_APB1Periph 0 #define BACKLIGHT_RCC_APB2Periph 0 +#elif defined(RADIO_COMMANDO8) + #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD + #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4 + #define BACKLIGHT_RCC_APB2Periph 0 + #define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) + #define BACKLIGHT_TIMER TIM4 + #define BACKLIGHT_GPIO GPIOD + #define BACKLIGHT_GPIO_PIN GPIO_Pin_13 // PD.13 + #define BACKLIGHT_GPIO_PinSource GPIO_PinSource13 + #define BACKLIGHT_GPIO_AF GPIO_AF_TIM4 + #define BACKLIGHT_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 // Channel2, PWM + #define BACKLIGHT_CCER TIM_CCER_CC2E + #define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR2 #elif defined(PCBX7) #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4 @@ -2083,7 +2243,7 @@ #define KEYS_BACKLIGHT_RCC_AHB1Periph 0 // LCD driver -#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_TPRO) +#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) #define LCD_VERTICAL_INVERT #endif #if defined(PCBX9E) @@ -2231,8 +2391,10 @@ #define SD_GPIO_PRESENT_GPIO GPIOD #if defined(PCBXLITE) || defined(PCBX9LITE) #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_10 // PD.10 +#elif defined(RADIO_COMMANDO8) + #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_8 // PD.08 #else - #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_9 // PD.09 + #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_9 // PD.09 #endif #define SD_GPIO GPIOB #define SD_GPIO_PIN_CS GPIO_Pin_12 // PB.12 @@ -2286,6 +2448,12 @@ #else #define AUDIO_UNMUTE_DELAY 150 // ms #endif +#elif defined(RADIO_COMMANDO8) + #define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1) + #define AUDIO_MUTE_GPIO GPIOB + #define AUDIO_MUTE_GPIO_PIN GPIO_Pin_1 // PB.01 + #define AUDIO_MUTE_DELAY 500 // ms + #define INVERTED_MUTE_PIN #else #define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1) #endif @@ -2406,7 +2574,7 @@ #define BT_USART_IRQn USART3_IRQn // #define BT_DMA_Stream_RX DMA1_Stream1 // #define BT_DMA_Channel_RX DMA_Channel_4 -#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_T8) || defined(RADIO_ZORRO) +#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_ZORRO) #define STORAGE_BLUETOOTH #define BT_RCC_AHB1Periph 0 #define BT_RCC_APB1Periph 0 diff --git a/radio/src/targets/taranis/keys_driver.cpp b/radio/src/targets/taranis/keys_driver.cpp index 32aaa76f3..eec55a668 100644 --- a/radio/src/targets/taranis/keys_driver.cpp +++ b/radio/src/targets/taranis/keys_driver.cpp @@ -184,7 +184,7 @@ uint32_t switchState(uint8_t index) switch (index) { -#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) +#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) ADD_2POS_CASE(A); ADD_3POS_CASE(B, 1); ADD_3POS_CASE(C, 2); @@ -236,7 +236,7 @@ uint32_t switchState(uint8_t index) ADD_3POS_CASE(F, 5); ADD_2POS_CASE(I); ADD_2POS_CASE(J); -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) ADD_2POS_CASE(D); #elif defined(RADIO_TLITE) // Only 4 switches diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index 155339a65..da750108c 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -27,7 +27,7 @@ #include "opentx.h" #endif -#if defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_TPRO) +#if defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) #define LCD_CONTRAST_OFFSET -10 #else #define LCD_CONTRAST_OFFSET 160 diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index 820b7057f..e2b3ce71e 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -224,7 +224,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 60772ff9b..b0cc47452 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -242,7 +242,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 149c8b9f5..affe33969 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -226,7 +226,7 @@ #define TR_VKEYS "Exit","Enter","Ned","Op","Højre","Venstre" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index be51da899..da66cb62f 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -227,7 +227,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 8828a8ade..1ff98e2be 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -224,7 +224,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 0408c90aa..426f37230 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -224,7 +224,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index 90456c3d3..554514e93 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -242,7 +242,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index cdc078f88..01cbc0e01 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -245,7 +245,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index a069149ed..40f929fea 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -228,7 +228,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index f35662439..e5007a831 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -227,7 +227,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index cdd48b503..426177a21 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -224,7 +224,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index 5e3b248fe..105ae2bcc 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -221,7 +221,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index de061024c..4ba08a15e 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -244,7 +244,7 @@ #define TR_VKEYS "Exit","Enter","Down","Up","Right","Left" #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) #define TR_VKEYS "Exit","Enter","PGUP","PGDN","SYS","MDL","TELE" -#elif defined(RADIO_T8) +#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","UP","DOWN" #elif defined(RADIO_ZORRO) #define TR_VKEYS "RTN","ENTER","PGUP","PGDN","SYS","MDL","TELE" diff --git a/radio/util/fwoptions.py b/radio/util/fwoptions.py index 4a1d29b67..10a23ec4b 100755 --- a/radio/util/fwoptions.py +++ b/radio/util/fwoptions.py @@ -321,3 +321,13 @@ options_radiomaster_tx16s = { "internalgps": ("INTERNAL_GPS", "YES", "NO"), "externalaccessmod": ("HARDWARE_EXTERNAL_ACCESS_MOD", "YES", "NO"), } + +options_commando8_t8 = { + "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"), +} diff --git a/tools/boards.py b/tools/boards.py index 72e367cb3..b53da92cc 100755 --- a/tools/boards.py +++ b/tools/boards.py @@ -66,4 +66,8 @@ boards = { "PCB": "X7", "PCBREV": "TX12", }, + "COMMANDO8": { + "PCB": "X7", + "PCBREV": "COMMANDO8", + }, } diff --git a/tools/build-gh.sh b/tools/build-gh.sh index 6b96f1c25..8de55335d 100755 --- a/tools/build-gh.sh +++ b/tools/build-gh.sh @@ -167,6 +167,9 @@ do nv14) BUILD_OPTIONS+="-DPCB=NV14" ;; + commando8) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=COMMANDO8" + ;; esac cmake ${BUILD_OPTIONS} "${SRCDIR}" diff --git a/tools/build-iflight.py b/tools/build-iflight.py new file mode 100644 index 000000000..6d6aa0787 --- /dev/null +++ b/tools/build-iflight.py @@ -0,0 +1,73 @@ +#!/usr/bin/python3 + +import argparse +import datetime +import os +from builtins import NotADirectoryError +import shutil +import tempfile + +boards = { + "COMMANDO8": { + "PCB": "X7", + "PCBREV": "COMMANDO8", + "DEFAULT_MODE": "1", + "IFLIGHT_RELEASE": "YES", + } +} + + +translations = [ + "EN", +] + + +def timestamp(): + return datetime.datetime.now().strftime("%y%m%d") + + +def build(board, translation, srcdir): + cmake_options = " ".join(["-D%s=%s" % (key, value) for key, value in boards[board].items()]) + cwd = os.getcwd() + if not os.path.exists("output"): + os.mkdir("output") + path = tempfile.mkdtemp() + os.chdir(path) + command = "cmake %s -DTRANSLATIONS=%s -DIFLIGHT_RELEASE=YES %s" % (cmake_options, translation, srcdir) + print(command) + os.system(command) + os.system("make firmware -j6") + os.chdir(cwd) + index = 0 + while 1: + suffix = "" if index == 0 else "_%d" % index + filename = "output/firmware_%s_%s_%s%s.bin" % (board.lower(), translation.lower(), timestamp(), suffix) + if not os.path.exists(filename): + shutil.copy("%s/firmware.bin" % path, filename) + break + index += 1 + shutil.rmtree(path) + + +def dir_path(string): + if os.path.isdir(string): + return string + else: + raise NotADirectoryError(string) + + +def main(): + parser = argparse.ArgumentParser(description="Build iFlight firmware") + parser.add_argument("-b", "--boards", action="append", help="Destination boards", required=True) + parser.add_argument("-t", "--translations", action="append", help="Translations", required=True) + parser.add_argument("srcdir", type=dir_path) + + args = parser.parse_args() + + for board in (boards.keys() if "ALL" in args.boards else args.boards): + for translation in (translations if "ALL" in args.translations else args.translations): + build(board, translation, args.srcdir) + + +if __name__ == "__main__": + main() diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index b2b745d96..f9f3670d2 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -136,6 +136,9 @@ do nv14) BUILD_OPTIONS+="-DPCB=NV14" ;; + commando8) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=COMMANDO8" + ;; esac cmake ${BUILD_OPTIONS} "${SRCDIR}" diff --git a/tools/generate-yaml.sh b/tools/generate-yaml.sh index 25847c699..30ad4154b 100755 --- a/tools/generate-yaml.sh +++ b/tools/generate-yaml.sh @@ -98,6 +98,9 @@ do nv14) BUILD_OPTIONS+="-DPCB=NV14" ;; + commando8) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=COMMANDO8" + ;; esac cmake ${BUILD_OPTIONS} "${SRCDIR}"