From b06e8651413bebfbc013afc5d768b2a49a64dc77 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 12 Dec 2019 14:44:34 +0100 Subject: [PATCH] Wismy/x7 access (#7182) X7 ACCESS --- companion/src/CMakeLists.txt | 4 +- companion/src/firmwares/boards.cpp | 5 + companion/src/firmwares/boards.h | 10 +- .../src/firmwares/opentx/opentxinterface.cpp | 10 ++ companion/src/simulation/simulatorwidget.cpp | 1 + radio/src/gui/128x64/lcd.cpp | 2 +- radio/src/gui/128x64/model_setup.cpp | 6 +- radio/src/lua/CMakeLists.txt | 23 ++-- radio/src/lua/api_general.cpp | 2 + radio/src/switches.cpp | 4 +- .../common/arm/stm32/bluetooth_driver.cpp | 8 +- radio/src/targets/simu/opentxsimulator.cpp | 2 + radio/src/targets/taranis/CMakeLists.txt | 78 ++++++++----- radio/src/targets/taranis/board.h | 17 ++- radio/src/targets/taranis/hal.h | 110 ++++++++++++++++-- radio/src/targets/taranis/keys_driver.cpp | 6 + radio/src/targets/taranis/lcd_driver_spi.cpp | 2 +- tools/build-frsky.py | 11 ++ 18 files changed, 240 insertions(+), 61 deletions(-) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 16245c848..413756985 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -341,7 +341,9 @@ endif() # the current flavour is not automatically added if build in the current cmake iteration, so always # add its library name to be sure -if(PCB STREQUAL X7 AND PCBREV STREQUAL T12) +if(PCB STREQUAL X7 AND PCBREV STREQUAL ACCESS) + set(FLAVOUR x7access) +elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T12) set(FLAVOUR t12) elseif(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) set(FLAVOUR x9d+2019) diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 726cae256..9f42fa9c3 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -66,6 +66,7 @@ uint32_t Boards::getFourCC(Type board) case BOARD_TARANIS_XLITES: return 0x3B78746F; case BOARD_TARANIS_X7: + case BOARD_TARANIS_X7_ACCESS: return 0x3678746F; case BOARD_TARANIS_X9E: return 0x3578746F; @@ -116,6 +117,7 @@ int Boards::getEEpromSize(Board::Type board) case BOARD_TARANIS_XLITES: case BOARD_TARANIS_XLITE: case BOARD_TARANIS_X7: + case BOARD_TARANIS_X7_ACCESS: case BOARD_TARANIS_X9LITE: case BOARD_TARANIS_X9LITES: case BOARD_TARANIS_X9D: @@ -154,6 +156,7 @@ int Boards::getFlashSize(Type board) case BOARD_TARANIS_XLITES: case BOARD_TARANIS_XLITE: case BOARD_TARANIS_X7: + case BOARD_TARANIS_X7_ACCESS: case BOARD_TARANIS_X9LITE: case BOARD_TARANIS_X9LITES: case BOARD_TARANIS_X9D: @@ -497,6 +500,8 @@ QString Boards::getBoardName(Board::Type board) return "MEGA2560"; case BOARD_TARANIS_X7: return "Taranis X7/X7S"; + case BOARD_TARANIS_X7_ACCESS: + return "Taranis X7/X7S Access"; case BOARD_JUMPER_T12: return "Jumper T12"; case BOARD_TARANIS_XLITE: diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index c3cd3ff59..1057d3706 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -40,6 +40,7 @@ namespace Board { BOARD_9XRPRO, BOARD_AR9X, BOARD_TARANIS_X7, + BOARD_TARANIS_X7_ACCESS, BOARD_TARANIS_X9D, BOARD_TARANIS_X9DP, BOARD_TARANIS_X9DP_2019, @@ -241,7 +242,12 @@ inline bool IS_TARANIS_XLITES(Board::Type board) inline bool IS_TARANIS_X7(Board::Type board) { - return board == Board::BOARD_TARANIS_X7; + return board == Board::BOARD_TARANIS_X7 || board == Board::BOARD_TARANIS_X7_ACCESS; +} + +inline bool IS_TARANIS_X7_ACCESS(Board::Type board) +{ + return board == Board::BOARD_TARANIS_X7_ACCESS; } inline bool IS_TARANIS_X9LITE(Board::Type board) @@ -321,7 +327,7 @@ inline bool HAS_EXTERNAL_ANTENNA(Board::Type board) inline bool IS_ACCESS_RADIO(Board::Type board, QString &id) { - return (IS_TARANIS_XLITES(board) || IS_TARANIS_X9LITE(board) || board == Board::BOARD_TARANIS_X9DP_2019 || board == Board::BOARD_X10_EXPRESS || + return (IS_TARANIS_XLITES(board) || IS_TARANIS_X9LITE(board) || board == Board::BOARD_TARANIS_X9DP_2019 || board == Board::BOARD_X10_EXPRESS || IS_TARANIS_X7_ACCESS(board) || (IS_HORUS(board) && id.contains("internalaccess"))); } diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 9509c3c28..aaff3123b 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -80,6 +80,8 @@ const char * OpenTxEepromInterface::getName() return "OpenTX for FrSky Taranis X9E"; case BOARD_TARANIS_X7: return "OpenTX for FrSky Taranis X7"; + case BOARD_TARANIS_X7_ACCESS: + return "OpenTX for FrSky Taranis X7 Access"; case BOARD_TARANIS_X9LITES: return "OpenTX for FrSky Taranis X9-Lite S"; case BOARD_TARANIS_X9LITE: @@ -330,6 +332,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u else if (IS_TARANIS_X9LITE(board)) { variant |= TARANIS_X9LITE_VARIANT; } + else if (IS_TARANIS_X7_ACCESS(board)) { + variant |= TARANIS_X7_VARIANT; + } else if (IS_TARANIS_X7(board)) { variant |= TARANIS_X7_VARIANT; } @@ -1254,6 +1259,11 @@ void registerOpenTxFirmwares() addOpenTxTaranisOptions(firmware); registerOpenTxFirmware(firmware); + /* FrSky X7 Access board */ + firmware = new OpenTxFirmware("opentx-x7access", Firmware::tr("FrSky Taranis X7 / X7S Access"), BOARD_TARANIS_X7_ACCESS); + addOpenTxTaranisOptions(firmware); + registerOpenTxFirmware(firmware); + /* FrSky X-Lite S/PRO board */ firmware = new OpenTxFirmware("opentx-xlites", Firmware::tr("FrSky Taranis X-Lite S/PRO"), BOARD_TARANIS_XLITES); addOpenTxTaranisOptions(firmware); diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index c96cd480e..2a472fc00 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -64,6 +64,7 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato radioUiWidget = new SimulatedUIWidgetX9LITE(simulator, this); break; case Board::BOARD_TARANIS_X7: + case Board::BOARD_TARANIS_X7_ACCESS: radioUiWidget = new SimulatedUIWidgetX7(simulator, this); break; case Board::BOARD_TARANIS_X9D: diff --git a/radio/src/gui/128x64/lcd.cpp b/radio/src/gui/128x64/lcd.cpp index 15d543e72..91baa3d19 100644 --- a/radio/src/gui/128x64/lcd.cpp +++ b/radio/src/gui/128x64/lcd.cpp @@ -20,7 +20,7 @@ #include "opentx.h" -display_t displayBuf[DISPLAY_BUFFER_SIZE]; +display_t displayBuf[DISPLAY_BUFFER_SIZE] __DMA; void lcdClear() { diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 5860bf2ca..be933710b 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -259,7 +259,11 @@ void onModelAntennaSwitchConfirm(const char * result) #define EXTERNAL_ANTENNA_ROW #endif -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(PCBX7ACCESS) + #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)) + #define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) + #define TRAINER_ROWS LABEL(Trainer), 0, IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW +#elif defined(PCBX7) || defined(PCBX9LITE) #if defined(BLUETOOTH) #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)), #else diff --git a/radio/src/lua/CMakeLists.txt b/radio/src/lua/CMakeLists.txt index f0ed96e94..abdf0f11e 100644 --- a/radio/src/lua/CMakeLists.txt +++ b/radio/src/lua/CMakeLists.txt @@ -16,15 +16,16 @@ set(LUA_INCLUDES ) if(PYTHONINTERP_FOUND) - add_lua_export_target(x9lite ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9LITE -DPCBX9) - add_lua_export_target(x9lites ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9LITES -DPCBX9LITE -DPCBX9) - add_lua_export_target(x7 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_X7) - add_lua_export_target(xlite ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITE) - add_lua_export_target(xlites ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITES -DPCBXLITE -DGYRO) - add_lua_export_target(x9d ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9D -DPCBX9) - add_lua_export_target(x9e ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9E -DPCBX9) - add_lua_export_target(x10 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10) - add_lua_export_target(x12s ${LUA_INCLUDES} -DPCBHORUS -DPCBX12S) - add_lua_export_target(t12 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_T12) - add_lua_export_target(t16 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10 -DRADIO_T16) + add_lua_export_target(x9lite ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9LITE -DPCBX9) + add_lua_export_target(x9lites ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9LITES -DPCBX9LITE -DPCBX9) + add_lua_export_target(x7 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_X7) + add_lua_export_target(x7access ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7ACCESS -DPCBX7 -DRADIO_X7) + add_lua_export_target(xlite ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITE) + add_lua_export_target(xlites ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITES -DPCBXLITE -DGYRO) + add_lua_export_target(x9d ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9D -DPCBX9) + add_lua_export_target(x9e ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9E -DPCBX9) + add_lua_export_target(x10 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10) + add_lua_export_target(x12s ${LUA_INCLUDES} -DPCBHORUS -DPCBX12S) + add_lua_export_target(t12 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_T12) + add_lua_export_target(t16 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10 -DRADIO_T16) endif() diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index ea2ce80a4..f49025745 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -34,6 +34,8 @@ #include "lua/lua_exports_x10.inc" #elif defined(PCBX9E) #include "lua/lua_exports_x9e.inc" +#elif defined(PCBX7ACCESS) + #include "lua/lua_exports_x7access.inc" #elif defined(RADIO_X7) #include "lua/lua_exports_x7.inc" #elif defined(RADIO_T12) diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index 6067f4d8c..b02c05861 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -162,7 +162,9 @@ void getSwitchesPosition(bool startup) CHECK_2POS(SW_SI); #endif -#if defined(PCBHORUS) || defined(PCBX7) +#if defined(PCBX7ACCESS) + CHECK_2POS(SW_SI); +#elif defined(PCBHORUS) || defined(PCBX7) CHECK_2POS(SW_SI); CHECK_2POS(SW_SJ); #endif diff --git a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp index 1d861e1d6..1d4bee5e0 100644 --- a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp +++ b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp @@ -24,7 +24,9 @@ Fifo btTxFifo; Fifo btRxFifo; -#if defined(PCBX7) || defined(PCBXLITE) +#if defined(PCBX7ACCESS) +//nothing to do +#elif defined(PCBX7) || defined(PCBXLITE) volatile uint8_t btChipPresent = 0; #endif @@ -117,7 +119,9 @@ extern "C" void BT_USART_IRQHandler(void) uint8_t byte = USART_ReceiveData(BT_USART); btRxFifo.push(byte); TRACE("BT %02X", byte); -#if defined(PCBX7) || defined(PCBXLITE) +#if defined(PCBX7ACCESS) + //nothing to do +#elif defined(PCBX7) || defined(PCBXLITE) if (!btChipPresent) { // This is to differentiate X7 and X7S and X-Lite with/without BT btChipPresent = 1; diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index 4a948da00..be01f250e 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -605,6 +605,8 @@ class OpenTxSimulatorFactory: public SimulatorFactory return Board::BOARD_HORUS_X12S; #elif defined(PCBX10) return Board::BOARD_X10; +#elif defined(PCBX7ACCESS) + return Board::BOARD_TARANIS_X7_ACCESS; #elif defined(PCBX7) return Board::BOARD_TARANIS_X7; #elif defined(PCBX9LITES) diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 6715cc46a..26fee42b1 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -52,39 +52,39 @@ elseif(PCB STREQUAL X9D+) if (${PCBREV} STREQUAL 2019) option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF) option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON) - set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") + set(FLAVOUR x9d+2019) set(CPU_TYPE STM32F4) set(CPU_TYPE_FULL STM32F407xE) # for size report + set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld) + set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} startup_stm32f40_41xxx.s ) - set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld) add_definitions(-DSTM32F40_41xxx) add_definitions(-DSOFTWARE_VOLUME -DPWR_BUTTON_${PWR_BUTTON} -DHARDWARE_POWER_MANAGEMENT_UNIT) set(STATUS_LEDS YES) set(PXX2 ON) set(PXX_FREQUENCY "HIGH") - set(FLAVOUR x9d+2019) else() option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON) option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF) + set(FLAVOUR x9d+) set(CPU_TYPE STM32F2) set(CPU_TYPE_FULL STM32F205xE) # for size report set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp) set(STATUS_LEDS NO) - set(FLAVOUR x9d+) endif() elseif(PCB STREQUAL X9D) option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON) option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF) + set(FLAVOUR x9d) set(CPU_TYPE STM32F2) set(CPU_TYPE_FULL STM32F205xE) # for size report set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) option(HAPTIC "Haptic support" OFF) set(LUA_EXPORT lua_export_x9d) - set(FLAVOUR x9d) add_definitions(-DPCBX9D -DPCBX9) add_definitions(-DEEPROM_VARIANT=0) set(GUI_DIR 212x64) @@ -97,34 +97,58 @@ elseif(PCB STREQUAL X9D) set(STATUS_LEDS NO) elseif(PCB STREQUAL X7) 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) - if(PCBREV STREQUAL T12) - set(LUA_EXPORT lua_export_t12) - set(FLAVOUR t12) - set(NAVIGATION_TYPE 9x) - add_definitions(-DRADIO_T12) - add_definitions(-DEEPROM_VARIANT=0x4001) - option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" OFF) - else() - option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON) - option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF) - set(LUA_EXPORT lua_export_x7) - set(FLAVOUR x7) - set(NAVIGATION_TYPE x7) - add_definitions(-DRADIO_X7) - add_definitions(-DEEPROM_VARIANT=0x4000) - endif() - add_definitions(-DPCBX7 -DSOFTWARE_VOLUME) - add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) set(GVAR_SCREEN model_gvars.cpp) set(STATUS_LEDS YES) + add_definitions(-DPCBX7 -DSOFTWARE_VOLUME) + add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) + if(PCBREV STREQUAL T12) + option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" OFF) + set(FLAVOUR t12) + set(NAVIGATION_TYPE 9x) + set(CPU_TYPE STM32F2) + set(CPU_TYPE_FULL STM32F205xE) # for size report + set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) + set(LUA_EXPORT lua_export_t12) + add_definitions(-DRADIO_T12) + add_definitions(-DEEPROM_VARIANT=0x4001) + elseif(PCBREV STREQUAL ACCESS) + option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF) + option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON) + set(FLAVOUR x7access) + set(NAVIGATION_TYPE x7) + set(CPU_TYPE STM32F4) + set(CPU_TYPE_FULL STM32F407xE) # for size report + set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld) + set(LUA_EXPORT lua_export_x7access) + add_definitions(-DRADIO_X7) + add_definitions(-DEEPROM_VARIANT=0x4000) + add_definitions(-DPCBREV=${PCBREV}) + add_definitions(-DPCBX7ACCESS) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + startup_stm32f40_41xxx.s + ) + add_definitions(-DSTM32F40_41xxx) + set(PXX2 ON) + set(PXX_FREQUENCY "HIGH") + add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT) + else() + option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON) + option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF) + set(FLAVOUR x7) + set(NAVIGATION_TYPE x7) + set(CPU_TYPE STM32F2) + set(CPU_TYPE_FULL STM32F205xE) # for size report + set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) + set(LUA_EXPORT lua_export_x7) + add_definitions(-DRADIO_X7) + add_definitions(-DEEPROM_VARIANT=0x4000) + endif() elseif(PCB STREQUAL X9LITE) option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF) option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON) @@ -229,7 +253,7 @@ if(PCB STREQUAL XLITES) ) endif() -if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9LITE OR PCB STREQUAL X9LITES OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019)) +if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9LITE OR PCB STREQUAL X9LITES OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) OR (PCB STREQUAL X7 AND PCBREV STREQUAL ACCESS)) add_definitions(-DINTERNAL_MODULE_SERIAL) if(PXX_FREQUENCY STREQUAL HIGH) add_definitions(-DPXX_FREQUENCY_HIGH) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 07b7f3dba..a5d8ca825 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -338,7 +338,11 @@ enum EnumSwitchesPositions SW_SI1, SW_SI2, #endif -#if defined(PCBX7) +#if defined(PCBX7ACCESS) + SW_SI0, + SW_SI1, + SW_SI2, +#elif defined(PCBX7) SW_SI0, SW_SI1, SW_SI2, @@ -396,6 +400,11 @@ enum EnumSwitchesPositions #define STORAGE_NUM_SWITCHES NUM_SWITCHES #define DEFAULT_SWITCH_CONFIG (SWITCH_2POS << 10) + (SWITCH_2POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0) #define DEFAULT_POTS_CONFIG (POT_WITHOUT_DETENT << 0) + (POT_WITHOUT_DETENT << 2); // S1 = pot without detent, S2 = pot with detent +#elif defined(PCBX7ACCESS) + #define NUM_SWITCHES 7 + #define STORAGE_NUM_SWITCHES 8 + #define DEFAULT_SWITCH_CONFIG (SWITCH_TOGGLE << 10) + (SWITCH_2POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0) + #define DEFAULT_POTS_CONFIG (POT_WITHOUT_DETENT << 0) + (POT_WITH_DETENT << 2); // S1 = pot without detent, S2 = pot with detent #elif defined(PCBX7) #define NUM_SWITCHES 8 #define STORAGE_NUM_SWITCHES NUM_SWITCHES @@ -689,7 +698,9 @@ extern uint32_t telemetryErrors; void telemetryPortInvertedInit(uint32_t baudrate); // PCBREV driver -#if defined(PCBX7) +#if defined(PCBX7ACCESS) + #define HAS_SPORT_UPDATE_CONNECTOR() true +#elif defined(PCBX7) #define IS_PCBREV_40() (GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) == Bit_SET) #define HAS_SPORT_UPDATE_CONNECTOR() IS_PCBREV_40() #elif defined(SPORT_UPDATE_PWR_GPIO) @@ -785,7 +796,7 @@ void bluetoothInit(uint32_t baudrate, bool enable); void bluetoothWriteWakeup(); uint8_t bluetoothIsWriting(); void bluetoothDisable(); -#if defined(PCBX9LITES) +#if defined(PCBX9LITES) || defined(PCBX7ACCESS) #define IS_BLUETOOTH_CHIP_PRESENT() (true) #elif defined(PCBX9LITE) #define IS_BLUETOOTH_CHIP_PRESENT() (false) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 235e5eefb..8a1aecd2f 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -193,6 +193,23 @@ #define TRIMS_GPIO_PIN_LVU GPIO_Pin_0 // PB.00 #define TRIMS_GPIO_REG_LVD GPIOB->IDR #define TRIMS_GPIO_PIN_LVD GPIO_Pin_1 // PB.01 +#elif defined(PCBX7ACCESS) + #define TRIMS_GPIO_REG_LHR GPIOD->IDR + #define TRIMS_GPIO_PIN_LHR GPIO_Pin_15 // PD.15 + #define TRIMS_GPIO_REG_LHL GPIOC->IDR + #define TRIMS_GPIO_PIN_LHL GPIO_Pin_1 // PC.01 + #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_5 // PE.05 + #define TRIMS_GPIO_REG_RVD GPIOC->IDR + #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03 + #define TRIMS_GPIO_REG_RHR GPIOE->IDR + #define TRIMS_GPIO_PIN_RHR GPIO_Pin_3 // PE.03 + #define TRIMS_GPIO_REG_RVU GPIOC->IDR + #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) #define TRIMS_GPIO_REG_LHL GPIOD->IDR #define TRIMS_GPIO_PIN_LHL GPIO_Pin_15 // PD.15 @@ -351,8 +368,13 @@ #define HARDWARE_SWITCH_C #define SWITCHES_GPIO_REG_C_L GPIOD->IDR #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_11 // PD.11 - #define SWITCHES_GPIO_REG_C_H GPIOE->IDR - #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_0 // PE.00 + #if defined(PCBX7ACCESS) + #define SWITCHES_GPIO_REG_C_H GPIOD->IDR + #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_10 // PD.10 + #else + #define SWITCHES_GPIO_REG_C_H GPIOE->IDR + #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_0 // PE.00 + #endif #else #define STORAGE_SWITCH_C #define HARDWARE_SWITCH_C @@ -524,13 +546,19 @@ #endif // X7 P400 P401 headers additionnal momentary switches -#if defined(PCBX7) +#if defined(PCBX7ACCESS) #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I - #define STORAGE_SWITCH_J - #define HARDWARE_SWITCH_J #define SWITCHES_GPIO_REG_I GPIOC->IDR #define SWITCHES_GPIO_PIN_I GPIO_Pin_13 // PC.13 + #define STORAGE_SWITCH_J +#elif defined(PCBX7) + #define STORAGE_SWITCH_I + #define HARDWARE_SWITCH_I + #define SWITCHES_GPIO_REG_I GPIOC->IDR + #define SWITCHES_GPIO_PIN_I GPIO_Pin_13 // PC.13 + #define STORAGE_SWITCH_J + #define HARDWARE_SWITCH_J #define SWITCHES_GPIO_REG_J GPIOD->IDR #define SWITCHES_GPIO_PIN_J GPIO_Pin_10 // PD.10 #endif @@ -639,6 +667,12 @@ #define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) #define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15) #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15) +#elif defined(PCBX7ACCESS) + #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 + #define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_13) + #define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15) + #define KEYS_GPIOE_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15) #elif defined(RADIO_X7) #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 @@ -898,6 +932,14 @@ #define LED_RED_GPIO_PIN GPIO_Pin_4 // PE.04 #define LED_GREEN_GPIO GPIOE #define LED_GREEN_GPIO_PIN GPIO_Pin_5 // PE.05 +#elif defined(PCBX7ACCESS) + #define STATUS_LEDS + #define GPIO_LED_GPIO_ON GPIO_SetBits + #define GPIO_LED_GPIO_OFF GPIO_ResetBits + #define LED_BLUE_GPIO GPIOB + #define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PB.01 + #define LED_RED_GPIO GPIOC + #define LED_RED_GPIO_PIN GPIO_Pin_4 // PC.04 #elif defined(PCBX7) #define STATUS_LEDS #define GPIO_LED_GPIO_ON GPIO_SetBits @@ -982,6 +1024,26 @@ #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7 #define INTMODULE_DMA_CHANNEL DMA_Channel_4 +#elif defined(PCBX7ACCESS) + #define INTMODULE_RCC_APB1Periph 0 + #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1 + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2) + #define INTMODULE_PWR_GPIO GPIOC + #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_5 // PC.05 + #define INTMODULE_GPIO GPIOB + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06 + #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07 + #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6 + #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7 + #define INTMODULE_USART USART1 + #define INTMODULE_GPIO_AF GPIO_AF_USART1 + #define INTMODULE_USART_IRQHandler USART1_IRQHandler + #define INTMODULE_USART_IRQn USART1_IRQn + #define INTMODULE_DMA_STREAM DMA2_Stream7 + #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn + #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler + #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7 + #define INTMODULE_DMA_CHANNEL DMA_Channel_4 #elif defined(PCBX9E) || defined(PCBX9DP) || defined(RADIO_X7) #define INTMODULE_PULSES #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) @@ -1051,9 +1113,9 @@ #endif // External Module -#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) +#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS) #define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6) - #if defined(PCBX9DP) && PCBREV >= 2019 + #if (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS) #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define EXTMODULE_PWR_GPIO GPIOD #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 @@ -1268,7 +1330,7 @@ #define TELEMETRY_RCC_APB1Periph RCC_APB1Periph_USART2 #define TELEMETRY_DIR_GPIO GPIOD #define TELEMETRY_DIR_GPIO_PIN GPIO_Pin_4 // PD.04 -#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) +#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS) #define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN #define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN #else @@ -1324,6 +1386,13 @@ #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits +#elif defined(PCBX7ACCESS) + #define SPORT_MAX_BAUDRATE 400000 + #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define SPORT_UPDATE_PWR_GPIO GPIOB + #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03 + #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits + #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits #elif defined(PCBX7) #define SPORT_MAX_BAUDRATE 250000 // < 400000 #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB @@ -1372,12 +1441,22 @@ // #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line9 // #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn // #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI9_5_IRQHandler -#elif defined(RADIO_X7) +#elif defined(PCBX7ACCESS) + #define INTMODULE_HEARTBEAT + #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER + #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA + #define INTMODULE_HEARTBEAT_GPIO GPIOA + #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PA.07 + #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOA + #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7 + #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7 + #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn +#elif defined(RADIO_X7) #define INTMODULE_HEARTBEAT #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC #define INTMODULE_HEARTBEAT_GPIO GPIOC - #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7 + #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PC.07 #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOC #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7 #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7 @@ -1646,6 +1725,15 @@ #define I2C_WP_GPIO_PIN GPIO_Pin_7 // PD.07 #define I2C_SCL_GPIO_PinSource GPIO_PinSource8 #define I2C_SDA_GPIO_PinSource GPIO_PinSource9 +#elif defined(PCBX7ACCESS) + #define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define I2C_SPI_GPIO GPIOB + #define I2C_SDA_GPIO_PIN GPIO_Pin_9 // PB.09 + #define I2C_SCL_GPIO_PIN GPIO_Pin_8 // PB.08 + #define I2C_WP_GPIO GPIOB + #define I2C_WP_GPIO_PIN GPIO_Pin_5 // PB.05 + #define I2C_SDA_GPIO_PinSource GPIO_PinSource9 + #define I2C_SCL_GPIO_PinSource GPIO_PinSource8 #elif defined(PCBX9DP) && PCBREV >= 2019 #define I2C_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF) #define I2C_SPI_GPIO GPIOB @@ -1759,7 +1847,7 @@ #define HAPTIC_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 #define HAPTIC_CCER TIM_CCER_CC2E #define BACKLIGHT_BDTR TIM_BDTR_MOE -#elif defined(PCBX9DP) && PCBREV >= 2019 +#elif (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS) #define HAPTIC_PWM #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOA #define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM1 diff --git a/radio/src/targets/taranis/keys_driver.cpp b/radio/src/targets/taranis/keys_driver.cpp index ccaf60760..424c9345b 100644 --- a/radio/src/targets/taranis/keys_driver.cpp +++ b/radio/src/targets/taranis/keys_driver.cpp @@ -195,6 +195,12 @@ uint32_t switchState(uint8_t index) #elif defined(PCBXLITE) ADD_3POS_CASE(D, 3); // no SWE, SWF, SWG and SWH on XLITE +#elif defined(PCBX7ACCESS) + ADD_3POS_CASE(D, 3); + ADD_2POS_CASE(F); + ADD_2POS_CASE(H); + ADD_2POS_CASE(I); + // no SWJ on XLITE #elif defined(PCBX7) ADD_3POS_CASE(D, 3); ADD_2POS_CASE(F); diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index 50eb13982..c3ab17629 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -311,7 +311,7 @@ void lcdInit() issued by the other parts of the code. */ -#if defined(PCBX9DP) && PCBREV >= 2019 +#if (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS) #define LCD_DELAY_NEEDED() true #else #define LCD_DELAY_NEEDED() (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) diff --git a/tools/build-frsky.py b/tools/build-frsky.py index 9e538bc4a..3db1e97fb 100755 --- a/tools/build-frsky.py +++ b/tools/build-frsky.py @@ -103,6 +103,17 @@ boards = { "MULTIMODULE": "NO", "CROSSFIRE": "NO", "DEFAULT_MODE": "2", + }, + "X7ACCESS": { + "PCB": "X7", + "PCBREV": "ACCESS", + "LUA": "NO_MODEL_SCRIPTS", + "GVARS": "YES", + "AUTOUPDATE": "YES", + "PXX1": "YES", + "MULTIMODULE": "NO", + "CROSSFIRE": "NO", + "DEFAULT_MODE": "2", } }