From 6735a42b082767a3a13345afa2d7748734faec75 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 8 Dec 2021 18:01:07 +0100 Subject: [PATCH] Radiomaster Zorro Port of opentx/opentx#8791 --- companion/src/CMakeLists.txt | 2 + companion/src/companion.qrc | 11 + companion/src/firmwares/boards.cpp | 22 ++ companion/src/firmwares/boards.h | 9 +- companion/src/firmwares/generalsettings.cpp | 4 + companion/src/firmwares/opentx/opentxeeprom.h | 1 + .../src/firmwares/opentx/opentxinterface.cpp | 21 ++ .../src/images/simulator/Zorro/bottom.png | Bin 0 -> 3406 bytes .../images/simulator/Zorro/left-pagedn.png | Bin 0 -> 12551 bytes .../images/simulator/Zorro/left-pageup.png | Bin 0 -> 12503 bytes .../src/images/simulator/Zorro/left-rtn.png | Bin 0 -> 12534 bytes .../src/images/simulator/Zorro/left-sys.png | Bin 0 -> 12420 bytes companion/src/images/simulator/Zorro/left.png | Bin 0 -> 12539 bytes .../src/images/simulator/Zorro/right-ent.png | Bin 0 -> 19687 bytes .../src/images/simulator/Zorro/right-mdl.png | Bin 0 -> 20808 bytes .../src/images/simulator/Zorro/right-tele.png | Bin 0 -> 20854 bytes .../src/images/simulator/Zorro/right.png | Bin 0 -> 20885 bytes companion/src/images/simulator/Zorro/top.png | Bin 0 -> 8243 bytes companion/src/simulation/CMakeLists.txt | 2 + companion/src/simulation/simulateduiwidget.h | 14 + .../src/simulation/simulateduiwidgetZorro.cpp | 67 +++++ .../src/simulation/simulateduiwidgetZorro.ui | 258 ++++++++++++++++++ companion/src/simulation/simulatorwidget.cpp | 3 + companion/src/storage/appdata.h | 2 +- .../src/gui/common/stdlcd/radio_hardware.cpp | 2 + radio/src/hal/adc_driver.cpp | 2 + radio/src/lua/CMakeLists.txt | 1 + radio/src/lua/api_general.cpp | 4 +- radio/src/sdcard.h | 2 + radio/src/simu.cpp | 2 +- radio/src/storage/conversions/CMakeLists.txt | 4 + radio/src/strhelpers.cpp | 4 +- radio/src/switches.cpp | 10 +- radio/src/targets/taranis/CMakeLists.txt | 21 ++ radio/src/targets/taranis/board.h | 32 ++- radio/src/targets/taranis/hal.h | 118 ++++++-- radio/src/targets/taranis/keys_driver.cpp | 10 +- radio/src/targets/taranis/lcd_driver_spi.cpp | 2 +- radio/src/translations/untranslated.h | 6 +- radio/util/build-firmware.py | 5 + radio/util/fwoptions.py | 13 + tools/build-radiomaster.py | 10 + 42 files changed, 620 insertions(+), 44 deletions(-) create mode 100644 companion/src/images/simulator/Zorro/bottom.png create mode 100644 companion/src/images/simulator/Zorro/left-pagedn.png create mode 100644 companion/src/images/simulator/Zorro/left-pageup.png create mode 100644 companion/src/images/simulator/Zorro/left-rtn.png create mode 100644 companion/src/images/simulator/Zorro/left-sys.png create mode 100644 companion/src/images/simulator/Zorro/left.png create mode 100644 companion/src/images/simulator/Zorro/right-ent.png create mode 100644 companion/src/images/simulator/Zorro/right-mdl.png create mode 100644 companion/src/images/simulator/Zorro/right-tele.png create mode 100644 companion/src/images/simulator/Zorro/right.png create mode 100644 companion/src/images/simulator/Zorro/top.png create mode 100644 companion/src/simulation/simulateduiwidgetZorro.cpp create mode 100644 companion/src/simulation/simulateduiwidgetZorro.ui diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 63215807f..6914f667c 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -325,6 +325,8 @@ elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TLITE) set(FLAVOUR tlite) elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TX12) set(FLAVOUR tx12) +elseif(PCB STREQUAL X7 AND PCBREV STREQUAL ZORRO) + set(FLAVOUR zorro) elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T8) set(FLAVOUR t8) elseif(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc index 4c39ec17d..c34fcd295 100644 --- a/companion/src/companion.qrc +++ b/companion/src/companion.qrc @@ -199,6 +199,17 @@ images/simulator/TX12/right-mdl.png images/simulator/TX12/bottom.png images/simulator/TX12/top.png + images/simulator/Zorro/left.png + images/simulator/Zorro/left-pageup.png + images/simulator/Zorro/left-pagedn.png + images/simulator/Zorro/left-rtn.png + images/simulator/Zorro/left-sys.png + images/simulator/Zorro/right-tele.png + images/simulator/Zorro/right.png + images/simulator/Zorro/right-ent.png + images/simulator/Zorro/right-mdl.png + images/simulator/Zorro/bottom.png + images/simulator/Zorro/top.png images/simulator/T8/left.png images/simulator/T8/left-pageup.png images/simulator/T8/left-pagedn.png diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 57290628f..18605ea10 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -90,6 +90,8 @@ uint32_t Boards::getFourCC(Type board) return 0x3878746F; case BOARD_RADIOMASTER_TX12: return 0x4178746F; + case BOARD_RADIOMASTER_ZORRO: + return 0x4778746F; case BOARD_RADIOMASTER_T8: return 0x4378746F; case BOARD_FLYSKY_NV14: @@ -121,6 +123,7 @@ int Boards::getEEpromSize(Board::Type board) case BOARD_JUMPER_TLITE: case BOARD_RADIOMASTER_TX12: case BOARD_RADIOMASTER_T8: + case BOARD_RADIOMASTER_ZORRO: return EESIZE_TARANIS; case BOARD_UNKNOWN: return EESIZE_MAX; @@ -158,6 +161,7 @@ int Boards::getFlashSize(Type board) case BOARD_JUMPER_T12: case BOARD_JUMPER_TLITE: case BOARD_RADIOMASTER_TX12: + case BOARD_RADIOMASTER_ZORRO: case BOARD_RADIOMASTER_T8: return FSIZE_TARANIS; case BOARD_HORUS_X12S: @@ -243,6 +247,20 @@ SwitchInfo Boards::getSwitchInfo(Board::Type board, int index) if (index < DIM(switches)) return switches[index]; } + else if (IS_RADIOMASTER_ZORRO(board)) { + const Board::SwitchInfo switches[] = { + {SWITCH_TOGGLE, "SA"}, + {SWITCH_3POS, "SB"}, + {SWITCH_3POS, "SC"}, + {SWITCH_TOGGLE, "SD"}, + {SWITCH_2POS, "SE"}, + {SWITCH_2POS, "SF"}, + {SWITCH_TOGGLE, "SG"}, + {SWITCH_TOGGLE, "SH"} + }; + if (index < DIM(switches)) + return switches[index]; + } else if (IS_RADIOMASTER_T8(board)) { const Board::SwitchInfo switches[] = { {SWITCH_TOGGLE, "SA"}, @@ -431,6 +449,8 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) return 8; else if (IS_JUMPER_TLITE(board)) return 4; + else if(IS_RADIOMASTER_ZORRO(board)) + return 8; else if (IS_FAMILY_T12(board)) return 6; else if (IS_HORUS_X12S(board)) @@ -633,6 +653,8 @@ QString Boards::getBoardName(Board::Type board) return "Radiomaster TX16S"; case BOARD_RADIOMASTER_TX12: return "Radiomaster TX12"; + case BOARD_RADIOMASTER_ZORRO: + return "Radiomaster Zorro"; case BOARD_RADIOMASTER_T8: return "Radiomaster T8"; case BOARD_FLYSKY_NV14: diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index ef9cd0de8..2bc37a458 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -62,6 +62,7 @@ namespace Board { BOARD_RADIOMASTER_T8, BOARD_JUMPER_TLITE, BOARD_FLYSKY_NV14, + BOARD_RADIOMASTER_ZORRO, BOARD_TYPE_COUNT, BOARD_TYPE_MAX = BOARD_TYPE_COUNT - 1 }; @@ -256,6 +257,12 @@ inline bool IS_RADIOMASTER_TX12(Board::Type board) return board == Board::BOARD_RADIOMASTER_TX12; } +inline bool IS_RADIOMASTER_ZORRO(Board::Type board) +{ + return board == Board::BOARD_RADIOMASTER_ZORRO; +} + + inline bool IS_RADIOMASTER_T8(Board::Type board) { return board == Board::BOARD_RADIOMASTER_T8; @@ -268,7 +275,7 @@ inline bool IS_FAMILY_T16(Board::Type board) inline bool IS_FAMILY_T12(Board::Type board) { - return board == Board::BOARD_JUMPER_T12 || board == Board::BOARD_RADIOMASTER_TX12 || board == Board::BOARD_RADIOMASTER_T8 || board == Board::BOARD_JUMPER_TLITE; + return board == Board::BOARD_JUMPER_T12 || board == Board::BOARD_RADIOMASTER_TX12 || board == Board::BOARD_RADIOMASTER_ZORRO || board == Board::BOARD_RADIOMASTER_T8 || board == Board::BOARD_JUMPER_TLITE; } inline bool IS_FLYSKY_NV14(Board::Type board) diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index ceb6d1587..2ccb66254 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -273,6 +273,10 @@ void GeneralSettings::setDefaultControlTypes(Board::Type board) potConfig[0] = Board::POT_WITHOUT_DETENT; potConfig[1] = Board::POT_WITH_DETENT; } + else if(IS_RADIOMASTER_ZORRO(board)) { + potConfig[0] = Board::POT_WITHOUT_DETENT; + potConfig[1] = Board::POT_WITHOUT_DETENT; + } else if (IS_FAMILY_T12(board)) { potConfig[0] = Board::POT_WITH_DETENT; potConfig[1] = Board::POT_WITH_DETENT; diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h index c3395693d..c3f188eea 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -39,6 +39,7 @@ #define RADIOMASTER_TX12_VARIANT 0x4002 #define JUMPER_TLITE_VARIANT 0x4003 #define RADIOMASTER_T8_VARIANT 0x4004 +#define RADIOMASTER_ZORRO_VARIANT 0x4006 class OpenTxGeneralData: public TransformedField { public: diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 8da245c6b..59c6bab33 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -70,6 +70,8 @@ const char * OpenTxEepromInterface::getName() return "OpenTX for Radiomaster TX16S"; case BOARD_RADIOMASTER_TX12: return "OpenTX for Radiomaster TX12"; + case BOARD_RADIOMASTER_ZORRO: + return "OpenTX for Radiomaster Zorro"; case BOARD_RADIOMASTER_T8: return "OpenTX for Radiomaster T8"; case BOARD_TARANIS_X9D: @@ -348,6 +350,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u else if (IS_RADIOMASTER_TX12(board)) { variant |= RADIOMASTER_TX12_VARIANT; } + else if (IS_RADIOMASTER_ZORRO(board)) { + variant |= RADIOMASTER_ZORRO_VARIANT; + } else if (IS_RADIOMASTER_T8(board)) { variant |= RADIOMASTER_T8_VARIANT; } @@ -1025,6 +1030,11 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari variantError = true; } } + else if (IS_RADIOMASTER_ZORRO(board)) { + if (variant != RADIOMASTER_ZORRO_VARIANT) { + variantError = true; + } + } else if (IS_RADIOMASTER_T8(board)) { if (variant != RADIOMASTER_T8_VARIANT) { variantError = true; @@ -1380,6 +1390,17 @@ void registerOpenTxFirmwares() registerOpenTxFirmware(firmware); addOpenTxRfOptions(firmware, FLEX); + /* Radiomaster Zorro board */ + firmware = new OpenTxFirmware("opentx-zorro", QCoreApplication::translate("Firmware", "Radiomaster Zorro"), Board::BOARD_RADIOMASTER_ZORRO); + addOpenTxCommonOptions(firmware); + firmware->addOption("noheli", Firmware::tr("Disable HELI menu and cyclic mix support")); + firmware->addOption("nogvars", Firmware::tr("Disable Global variables")); + firmware->addOption("lua", Firmware::tr("Enable Lua custom scripts screen")); + firmware->addOption("internalelrs", Firmware::tr("Select if internal ELRS module is installed")); + addOpenTxFontOptions(firmware); + registerOpenTxFirmware(firmware); + addOpenTxRfOptions(firmware, FLEX + AFHDS3); + /* Radiomaster T8 board */ firmware = new OpenTxFirmware("opentx-t8", QCoreApplication::translate("Firmware", "Radiomaster T8"), BOARD_RADIOMASTER_T8); addOpenTxCommonOptions(firmware); diff --git a/companion/src/images/simulator/Zorro/bottom.png b/companion/src/images/simulator/Zorro/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..15c9630e1d862e039e5fe97f8b7114ea3606e4df GIT binary patch literal 3406 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

Eil>m^-t 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 MR(6)z|kfT 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 literal 0 HcmV?d00001 diff --git a/companion/src/images/simulator/Zorro/left.png b/companion/src/images/simulator/Zorro/left.png new file mode 100644 index 0000000000000000000000000000000000000000..eef3f9a724205dc036d341aab0eddbcb465ea08c GIT binary patch literal 12539 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 sk}r{PBG94hU@3f1=!f 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 Q{}mb8KVXH7v_12G0Oqz0?*IS* literal 0 HcmV?d00001 diff --git a/companion/src/images/simulator/Zorro/right-mdl.png b/companion/src/images/simulator/Zorro/right-mdl.png new file mode 100644 index 0000000000000000000000000000000000000000..80d701e05d33bc6313efcb7cc3524c1dce7c3165 GIT binary patch literal 20808 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 WUYx=7;PQXaS%;pkelF{r5}E**OH3UA literal 0 HcmV?d00001 diff --git a/companion/src/images/simulator/Zorro/right-tele.png b/companion/src/images/simulator/Zorro/right-tele.png new file mode 100644 index 0000000000000000000000000000000000000000..330fbfcefb72998bd800438a3cbb211df3eb9dbd GIT binary patch literal 20854 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 E0CuW>5dZ)H literal 0 HcmV?d00001 diff --git a/companion/src/images/simulator/Zorro/right.png b/companion/src/images/simulator/Zorro/right.png new file mode 100644 index 0000000000000000000000000000000000000000..ee592bae5dbbe6dade4a15e1606f96e87668f186 GIT binary patch literal 20885 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 P4o>uR^>bP0l+XkK1OrM3 literal 0 HcmV?d00001 diff --git a/companion/src/images/simulator/Zorro/top.png b/companion/src/images/simulator/Zorro/top.png new file mode 100644 index 0000000000000000000000000000000000000000..00fdd86cb0464a234a73c0d49e6ba3f0dacc62e4 GIT binary patch literal 8243 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 + + // add actions in order of appearance on the help menu + + act = new RadioUiAction(5, QList() << Qt::Key_Up, SIMU_STR_HLP_KEY_UP, SIMU_STR_HLP_ACT_MDL); + addRadioWidget(ui->rightbuttons->addArea(QRect(65, 35, 90, 45), "Zorro/right-mdl.png", act)); + + m_mouseMidClickAction = new RadioUiAction(1, QList() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ROT_DN); + addRadioWidget(ui->rightbuttons->addArea(QRect(7, 84, 110, 90), "Zorro/right-ent.png", m_mouseMidClickAction)); + + act = new RadioUiAction(4, QList() << Qt::Key_Left, SIMU_STR_HLP_KEY_LFT, SIMU_STR_HLP_ACT_SYS); + addRadioWidget(ui->leftbuttons->addArea(QRect(52, 39, 70, 50), "Zorro/left-sys.png", act)); + + act = new RadioUiAction(6, QList() << Qt::Key_Right, SIMU_STR_HLP_KEY_RGT, SIMU_STR_HLP_ACT_TELE); + addRadioWidget(ui->rightbuttons->addArea(QRect(75, 180, 80, 35), "Zorro/right-tele.png", act)); + + act = new RadioUiAction(3, QList() << Qt::Key_PageDown, SIMU_STR_HLP_KEY_PGDN, SIMU_STR_HLP_ACT_PGDN); + addRadioWidget(ui->leftbuttons->addArea(QRect(70, 145, 80, 35), "Zorro/left-pagedn.png", act)); + + act = new RadioUiAction(2, QList() << Qt::Key_PageUp, SIMU_STR_HLP_KEY_PGUP, SIMU_STR_HLP_ACT_PGUP); + addRadioWidget(ui->leftbuttons->addArea(QRect(60, 185, 80, 35), "Zorro/left-pageup.png", act)); + + act = new RadioUiAction(0, QList() << Qt::Key_Down << Qt::Key_Delete << Qt::Key_Escape << Qt::Key_Backspace, SIMU_STR_HLP_KEYS_EXIT, SIMU_STR_HLP_ACT_EXIT); + addRadioWidget(ui->leftbuttons->addArea(QRect(85, 105, 80, 35), "Zorro/left-rtn.png", act)); + + m_scrollUpAction = new RadioUiAction(-1, QList() << Qt::Key_Minus << Qt::Key_Equal << Qt::Key_Left, SIMU_STR_HLP_KEYS_GO_LFT, SIMU_STR_HLP_ACT_ROT_LFT); + m_scrollDnAction = new RadioUiAction(-1, QList() << Qt::Key_Plus << Qt::Key_Right, SIMU_STR_HLP_KEYS_GO_RGT, SIMU_STR_HLP_ACT_ROT_RGT); + connectScrollActions(); + + m_backlightColors << QColor(215, 243, 255); // X7 Blue + m_backlightColors << QColor(166,247,159); + m_backlightColors << QColor(247,159,166); + m_backlightColors << QColor(255,195,151); + m_backlightColors << QColor(247,242,159); + + setLcd(ui->lcd); + + QString css = "#radioUiWidget {" + "background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1," + "stop:0 rgba(255, 255, 255, 255)," + "stop:0.757062 rgba(241, 238, 238, 255)," + "stop:1 rgba(247, 245, 245, 255));" + "}"; + + QTimer * tim = new QTimer(this); + tim->setSingleShot(true); + connect(tim, &QTimer::timeout, [this, css]() { + emit customStyleRequest(css); + }); + tim->start(100); +} + +SimulatedUIWidgetZorro::~SimulatedUIWidgetZorro() +{ + delete ui; +} diff --git a/companion/src/simulation/simulateduiwidgetZorro.ui b/companion/src/simulation/simulateduiwidgetZorro.ui new file mode 100644 index 000000000..329008deb --- /dev/null +++ b/companion/src/simulation/simulateduiwidgetZorro.ui @@ -0,0 +1,258 @@ + + + SimulatedUIWidgetZorro + + + + 0 + 0 + 641 + 253 + + + + + 0 + 0 + + + + + 641 + 253 + + + + + 641 + 253 + + + + Taranis Zorro Simulator + + + background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 255, 255, 255), stop:0.757062 rgba(241, 238, 238, 255), stop:1 rgba(247, 245, 245, 255)); + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 196 + 253 + + + + + 196 + 253 + + + + background:url(:/images/simulator/Zorro/left.png); + + + + + + + + 0 + 0 + + + + + 256 + 180 + + + + + 424 + 180 + + + + background-color: rgb(215, 243, 255); + + + + + + + + 0 + 0 + + + + + 189 + 253 + + + + + 189 + 253 + + + + background:url(:/images/simulator/Zorro/right.png) + + + + + + + + 0 + 0 + + + + + 256 + 48 + + + + + 256 + 48 + + + + background:url(:/images/simulator/Zorro/top.png) + + + + + + + + 0 + 0 + + + + + 261 + 55 + + + + + 261 + 55 + + + + background:url(:/images/simulator/Zorro/bottom.png) + + + + + + + + 0 + 0 + + + + + 0 + 10 + + + + + 16777215 + 12 + + + + + 0 + 12 + + + + background-color: rgb(255, 255, 255); + + + + + + + + + + + 0 + 0 + + + + + 0 + 10 + + + + + 16777215 + 10 + + + + background-color: rgb(247, 245, 245); + + + + + + + + + + + LcdWidget + QWidget +

lcdwidget.h
+ 1 + + + ButtonsWidget + QWidget +
buttonswidget.h
+ 1 +
+ + + + diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index 1d1d3dbba..b087c7055 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -103,6 +103,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato case Board::BOARD_RADIOMASTER_TX12: radioUiWidget = new SimulatedUIWidgetTX12(simulator, this); break; + case Board::BOARD_RADIOMASTER_ZORRO: + radioUiWidget = new SimulatedUIWidgetZorro(simulator, this); + break; case Board::BOARD_RADIOMASTER_T8: radioUiWidget = new SimulatedUIWidgetT8(simulator, this); break; diff --git a/companion/src/storage/appdata.h b/companion/src/storage/appdata.h index 25aaa25d0..49d8f0658 100644 --- a/companion/src/storage/appdata.h +++ b/companion/src/storage/appdata.h @@ -64,7 +64,7 @@ #define CPN_URL_DOWNLOAD_CUR_RC CPN_URL_DOWNLOAD_CUR_VERS "rc/" #define CPN_URL_DOWNLOAD_CUR_UNST CPN_URL_DOWNLOAD_CUR_VERS "nightlies/" -#define MAX_PROFILES 15 +#define MAX_PROFILES 20 #define MAX_JOYSTICKS 8 // It important that these function names are consistent everywhere. diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index 22b24515c..48bb47246 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -203,6 +203,8 @@ enum { #define SWITCH_TYPE_MAX(sw) (SWITCH_3POS) #elif defined(PCBX9E) #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_TX12) || defined(RADIO_T8) #define SWITCH_TYPE_MAX(sw) ((MIXSRC_SA - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SD - MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS) #elif defined(RADIO_T12) diff --git a/radio/src/hal/adc_driver.cpp b/radio/src/hal/adc_driver.cpp index 28373e8bc..a7e5dc6c9 100644 --- a/radio/src/hal/adc_driver.cpp +++ b/radio/src/hal/adc_driver.cpp @@ -57,6 +57,8 @@ const etx_hal_adc_driver_t* etx_hal_adc_driver = nullptr; const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, 1,1,0, 1,1, 1, 1}; #elif defined(RADIO_TX12) const int8_t adcDirection[NUM_ANALOGS] = {-1,1,-1,1, -1,-1, 1, 1}; +#elif defined(RADIO_ZORRO) + const int8_t adcDirection[NUM_ANALOGS] = {-1, 1, 1, -1, -1, 1, 1, 1}; #elif defined(PCBX7) const int8_t adcDirection[NUM_ANALOGS] = {-1,1,-1,1, 1,1, 1, 1}; #elif defined(PCBX9LITE) diff --git a/radio/src/lua/CMakeLists.txt b/radio/src/lua/CMakeLists.txt index ac6f0176d..8a75d379c 100644 --- a/radio/src/lua/CMakeLists.txt +++ b/radio/src/lua/CMakeLists.txt @@ -31,6 +31,7 @@ if(PYTHONINTERP_FOUND) add_lua_export_target(t12 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_T12) add_lua_export_target(tlite ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_TLITE) add_lua_export_target(tx12 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_TX12) + 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(t16 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10 -DRADIO_T16) add_lua_export_target(nv14 ${LUA_INCLUDES} -I${RADIO_SRC_DIR}/targets/nv14 -DPCBNV14) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index bd6843aa4..8ac29f153 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -52,6 +52,8 @@ #include "lua/lua_exports_tlite.inc" #elif defined(RADIO_TX12) #include "lua/lua_exports_tx12.inc" +#elif defined(RADIO_ZORRO) + #include "lua/lua_exports_zorro.inc" #elif defined(RADIO_T8) #include "lua/lua_exports_t8.inc" #elif defined(PCBX9LITES) @@ -2316,7 +2318,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_T8) +#if defined(RADIO_TX12) || defined(RADIO_ZORRO) || defined(RADIO_T8) { "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/sdcard.h b/radio/src/sdcard.h index 3d590ad66..2ac4f5dc6 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -154,6 +154,8 @@ const char * getBasename(const char * path); #define OTX_FOURCC 0x4278746F // otx for Jumper TLite #elif defined(RADIO_TX12) #define OTX_FOURCC 0x4178746F // otx for Radiomaster TX12 +#elif defined(RADIO_ZORRO) + #define OTX_FOURCC 0x4778746F // otx for Radiomaster Zorro #elif defined(RADIO_T8) #define OTX_FOURCC 0x4378746F // otx for Radiomaster T8 #elif defined(PCBX7) diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 99df475f0..53410cb2e 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -361,7 +361,7 @@ void OpenTxSim::updateKeysAndSwitches(bool start) KEY_Left, KEY_LEFT, KEY_Up, KEY_UP, KEY_Down, KEY_DOWN, -#elif defined(RADIO_TX12) +#elif defined(RADIO_TX12) || defined(RADIO_ZORRO) KEY_Page_Up, KEY_PAGEUP, KEY_Page_Down, KEY_PAGEDN, KEY_Return, KEY_ENTER, diff --git a/radio/src/storage/conversions/CMakeLists.txt b/radio/src/storage/conversions/CMakeLists.txt index 23bb4582c..601482530 100644 --- a/radio/src/storage/conversions/CMakeLists.txt +++ b/radio/src/storage/conversions/CMakeLists.txt @@ -1,5 +1,9 @@ set(STORAGE_CONVERSIONS 219) +if(PCB STREQUAL X7 AND PCBREV STREQUAL ZORRO) + set(STORAGE_CONVERSIONS 221) +endif() + if(STORAGE_CONVERSIONS) add_definitions(-DSTORAGE_CONVERSIONS=${STORAGE_CONVERSIONS}) set(SRC diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index b1774da19..291e109ae 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -426,7 +426,7 @@ int getRawSwitchIdx(char sw) if (sw < 'A' || sw > 'Z') return -1; -#if defined(PCBX7) && !defined(RADIO_TX12) +#if defined(PCBX7) && !defined(RADIO_TX12) && !defined(RADIO_ZORRO) if (sw >= 'H') return sw - 'H' + 5; #if defined(RADIO_T12) @@ -444,7 +444,7 @@ int getRawSwitchIdx(char sw) char getRawSwitchFromIdx(int idx) { -#if defined(PCBX7) && !defined(RADIO_TX12) +#if defined(PCBX7) && !defined(RADIO_TX12) && !defined(RADIO_ZORRO) if (idx >= 5) return 'H' + idx - 5; else if (idx == 4) diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index 219d43a3a..5d77bb168 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -129,7 +129,7 @@ uint64_t check3PosSwitchPosition(uint8_t idx, uint8_t sw, bool startup) void getSwitchesPosition(bool startup) { uint64_t newPos = 0; -#if defined(RADIO_TX12) +#if defined(RADIO_TX12) || defined(RADIO_ZORRO) CHECK_2POS(SW_SA); CHECK_3POS(0, SW_SB); CHECK_3POS(1, SW_SC); @@ -155,6 +155,12 @@ void getSwitchesPosition(bool startup) #elif defined(PCBXLITE) CHECK_3POS(3, SW_SD); // no SWE, SWF, SWG and SWH on XLITE +#elif defined(RADIO_ZORRO) + CHECK_2POS(SW_SD); + CHECK_2POS(SW_SE); + CHECK_2POS(SW_SF); + CHECK_2POS(SW_SG); + CHECK_2POS(SW_SH); #elif defined(RADIO_TX12) CHECK_2POS(SW_SD); CHECK_3POS(2, SW_SE); @@ -181,7 +187,7 @@ void getSwitchesPosition(bool startup) #if defined(PCBX7ACCESS) CHECK_2POS(SW_SI); -#elif defined(PCBHORUS) || defined(PCBX7) +#elif defined(PCBHORUS) || (defined(PCBX7) && !defined(RADIO_ZORRO)) CHECK_2POS(SW_SI); CHECK_2POS(SW_SJ); #endif diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 907e47cd4..5d959c2c1 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -166,6 +166,27 @@ elseif(PCB STREQUAL X7) add_definitions(-DRADIO_TX12) add_definitions(-DEEPROM_VARIANT=0x4002) add_definitions(-DMANUFACTURER_RADIOMASTER) + elseif(PCBREV STREQUAL ZORRO) + set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) + set(FLAVOUR zorro) + 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(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + startup_stm32f40_41xxx.s + ) + add_definitions(-DSTM32F40_41xxx) + set(ROTARY_ENCODER YES) + set(LUA_EXPORT lua_export_zorro) + set(BLUETOOTH NO) + set(USB_CHARGER YES) + set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp) + add_definitions(-DRADIO_ZORRO) + add_definitions(-DEEPROM_VARIANT=0x4006) + add_definitions(-DMANUFACTURER_RADIOMASTER) elseif(PCBREV STREQUAL T8) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") set(INTERNAL_MODULE_SERIAL YES) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index ff85cc531..01df37927 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -28,7 +28,7 @@ #include "board_common.h" #include "hal.h" -#if defined(RADIO_TX12) || defined(RADIO_TX12) +#if defined(RADIO_TX12) || defined(RADIO_ZORRO) #define NAVIGATION_X7_TX12 #endif @@ -38,6 +38,10 @@ void rotaryEncoderInit(); void rotaryEncoderCheck(); #endif +#if defined(RADIO_ZORRO) +#define ROTARY_ENCODER_INVERT +#endif + #define FLASHSIZE 0x80000 #define BOOTLOADER_SIZE 0x8000 #define FIRMWARE_ADDRESS 0x08000000 @@ -330,6 +334,8 @@ enum EnumSwitches }; #if defined(RADIO_TX12) #define IS_3POS(x) ((x) != SW_SA && (x) != SW_SD) +#elif defined(RADIO_ZORRO) + #define IS_3POS(x) ((x) == SW_SB || (x) == SW_SC) #else #define IS_3POS(x) ((x) != SW_SF && (x) != SW_SH) #endif @@ -347,22 +353,22 @@ enum EnumSwitchesPositions SW_SD0, SW_SD1, SW_SD2, -#if defined(PCBX9) || defined(PCBXLITES) || defined(PCBX9LITES) || defined(RADIO_TX12) +#if defined(PCBX9) || defined(PCBXLITES) || defined(PCBX9LITES) || defined(RADIO_TX12) || defined(RADIO_ZORRO) SW_SE0, SW_SE1, SW_SE2, #endif -#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || (defined(PCBX7) && !defined(RADIO_T12)) || defined(PCBXLITES) || defined(PCBX9LITES) || defined(RADIO_T8) +#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || (defined(PCBX7) && !defined(RADIO_T12)) || defined(PCBXLITES) || defined(PCBX9LITES) || defined(RADIO_T8) || defined(RADIO_ZORRO) SW_SF0, SW_SF1, SW_SF2, #endif -#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBX9LITES) || defined(RADIO_T12) +#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBX9LITES) || defined(RADIO_T12) || defined(RADIO_ZORRO) SW_SG0, SW_SG1, SW_SG2, #endif -#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || (defined(PCBX7) && !defined(RADIO_TX12)) || defined(RADIO_T8) +#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || (defined(PCBX7) && !defined(RADIO_TX12)) || defined(RADIO_T8) || defined(RADIO_ZORRO) SW_SH0, SW_SH1, SW_SH2, @@ -376,7 +382,7 @@ enum EnumSwitchesPositions SW_SI0, SW_SI1, SW_SI2, -#elif defined(PCBX7) +#elif defined(PCBX7) && !defined(RADIO_ZORRO) SW_SI0, SW_SI1, SW_SI2, @@ -444,6 +450,11 @@ enum EnumSwitchesPositions #define STORAGE_NUM_SWITCHES NUM_SWITCHES #define DEFAULT_SWITCH_CONFIG (SWITCH_3POS << 10) + (SWITCH_3POS << 8) + (SWITCH_TOGGLE << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_TOGGLE << 0) #define DEFAULT_POTS_CONFIG (POT_WITH_DETENT << 0) + (POT_WITH_DETENT << 2); +#elif defined(RADIO_ZORRO) + #define NUM_SWITCHES 8 + #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) #define NUM_SWITCHES 4 #define STORAGE_NUM_SWITCHES 8 @@ -493,6 +504,11 @@ enum EnumSwitchesPositions void keysInit(); uint32_t switchState(uint8_t index); +#if defined(RADIO_ZORRO) +static const uint8_t switchReOrder[] = {1, 0, 4, 2, 3, 5}; +#else +static const uint8_t switchReOrder[] = {0, 1, 2, 3, 4, 5}; +#endif uint32_t readKeys(); uint32_t readTrims(); #define TRIMS_PRESSED() (readTrims()) @@ -729,6 +745,10 @@ uint8_t isBacklightEnabled(); #define USB_NAME "Radiomaster TX12" #define USB_MANUFACTURER 'R', 'M', '_', 'T', 'X', ' ', ' ', ' ' /* 8 bytes */ #define USB_PRODUCT 'R', 'M', ' ', 'T', 'X', '1', '2', ' ' /* 8 Bytes */ +#elif defined(RADIO_ZORRO) + #define USB_NAME "Radiomaster Zorro" + #define USB_MANUFACTURER 'R', 'M', '_', 'T', 'X', ' ', ' ', ' ' /* 8 bytes */ + #define USB_PRODUCT 'R', 'M', ' ', 'Z', 'O', 'R', 'R', 'O' /* 8 Bytes */ #elif defined(RADIO_T8) #define USB_NAME "Radiomaster T8" #define USB_MANUFACTURER 'R', 'M', '_', 'T', 'X', ' ', ' ', ' ' /* 8 bytes */ diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index d7256bf17..c354e3a61 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -66,13 +66,18 @@ #define KEYS_GPIO_PIN_LEFT GPIO_Pin_7 // PD.07 #define KEYS_GPIO_REG_RIGHT GPIOD->IDR #define KEYS_GPIO_PIN_RIGHT GPIO_Pin_3 // PD.03 -#elif defined(RADIO_TX12) +#elif defined(RADIO_TX12) || defined(RADIO_ZORRO) #define KEYS_GPIO_REG_PAGEUP GPIOD->IDR #define KEYS_GPIO_PIN_PAGEUP GPIO_Pin_3 // PD.03 #define KEYS_GPIO_REG_PAGEDN GPIOD->IDR #define KEYS_GPIO_PIN_PAGEDN GPIO_Pin_7 // PD.07 +#if defined(RADIO_TX12) #define KEYS_GPIO_REG_EXIT GPIOB->IDR #define KEYS_GPIO_PIN_EXIT GPIO_Pin_3 // PB.03 +#else + #define KEYS_GPIO_REG_EXIT GPIOC->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_5 // PC.05 +#endif #define KEYS_GPIO_REG_ENTER GPIOA->IDR #define KEYS_GPIO_PIN_ENTER GPIO_Pin_13 // PA.13 #define KEYS_GPIO_REG_SYS GPIOB->IDR @@ -197,7 +202,7 @@ #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOE #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource10 #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource12 -#elif defined(RADIO_TX12) +#elif defined(RADIO_TX12) || defined(RADIO_ZORRO) #define ROTARY_ENCODER_NAVIGATION #define ROTARY_ENCODER_GPIO GPIOE #define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_9 // PE.9 @@ -353,7 +358,7 @@ #define SWITCHES_GPIO_PIN_A_H GPIO_Pin_1 // PE.01 #define SWITCHES_GPIO_REG_A_L GPIOE->IDR #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_0 // PE.00 -#elif defined(RADIO_TX12) +#elif defined(RADIO_TX12) || defined(RADIO_ZORRO) #define STORAGE_SWITCH_A #define HARDWARE_SWITCH_A #define SWITCHES_GPIO_REG_A GPIOC->IDR @@ -451,6 +456,13 @@ #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 +#elif defined(RADIO_ZORRO) + #define STORAGE_SWITCH_C + #define HARDWARE_SWITCH_C + #define SWITCHES_GPIO_REG_C_L GPIOE->IDR + #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_0 // PE.00 + #define SWITCHES_GPIO_REG_C_H GPIOD->IDR + #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_11 // PD.11 #elif defined(RADIO_T8) #define STORAGE_SWITCH_C #define HARDWARE_SWITCH_C @@ -510,7 +522,7 @@ #define HARDWARE_SWITCH_D #define SWITCHES_GPIO_REG_D GPIOD->IDR #define SWITCHES_GPIO_PIN_D GPIO_Pin_14 // PD.14 -#elif defined(RADIO_TX12) +#elif defined(RADIO_TX12) || defined(RADIO_ZORRO) #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D #define SWITCHES_GPIO_REG_D GPIOE->IDR @@ -561,6 +573,11 @@ #define HARDWARE_SWITCH_E #define SWITCHES_GPIO_REG_E GPIOA->IDR #define SWITCHES_GPIO_PIN_E GPIO_Pin_5 // PA.05 +#elif defined(RADIO_ZORRO) + #define STORAGE_SWITCH_E + #define HARDWARE_SWITCH_E + #define SWITCHES_GPIO_REG_E GPIOE->IDR + #define SWITCHES_GPIO_PIN_E GPIO_Pin_7 // PE.07 #elif defined(RADIO_TX12) #define STORAGE_SWITCH_E #define HARDWARE_SWITCH_E @@ -599,6 +616,11 @@ #define SWITCHES_GPIO_PIN_F GPIO_Pin_3 // PC.03 #elif defined(PCBX9LITE) // no SWF +#elif defined(RADIO_ZORRO) + #define STORAGE_SWITCH_F + #define HARDWARE_SWITCH_F + #define SWITCHES_GPIO_REG_F GPIOE->IDR + #define SWITCHES_GPIO_PIN_F GPIO_Pin_1 // PE.01 #elif defined(RADIO_TX12) #define STORAGE_SWITCH_F #define HARDWARE_SWITCH_F @@ -635,7 +657,7 @@ #define HARDWARE_SWITCH_G #define SWITCHES_GPIO_REG_G GPIOC->IDR #define SWITCHES_GPIO_PIN_G GPIO_Pin_2 // PC.02 -#elif defined(RADIO_T12) +#elif defined(RADIO_T12) || defined(RADIO_ZORRO) #define STORAGE_SWITCH_G #define HARDWARE_SWITCH_G #define SWITCHES_GPIO_REG_G GPIOE->IDR @@ -716,6 +738,8 @@ #define STORAGE_SWITCH_I // no SWJ #define STORAGE_SWITCH_J +#elif defined(RADIO_ZORRO) + // No I/J #elif defined(PCBX7) #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I @@ -831,6 +855,13 @@ #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(RADIO_ZORRO) + #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE) + #define KEYS_GPIOA_PINS (KEYS_GPIO_PIN_ENTER | SWITCHES_GPIO_PIN_B_H) + #define KEYS_GPIOB_PINS (KEYS_GPIO_PIN_SYS) + #define KEYS_GPIOC_PINS (KEYS_GPIO_PIN_EXIT | TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU | SWITCHES_GPIO_PIN_A) + #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_PAGEUP | KEYS_GPIO_PIN_PAGEDN | KEYS_GPIO_PIN_TELE | TRIMS_GPIO_PIN_LHL |SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_H) + #define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_MDL | TRIMS_GPIO_PIN_LVD | TRIMS_GPIO_PIN_LVU | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_C_L | SWITCHES_GPIO_PIN_D | SWITCHES_GPIO_PIN_E | SWITCHES_GPIO_PIN_F | SWITCHES_GPIO_PIN_G | ROTARY_ENCODER_GPIO_PIN_A | ROTARY_ENCODER_GPIO_PIN_B) #elif defined(RADIO_TX12) #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_13 | GPIO_Pin_5) @@ -1173,6 +1204,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_ZORRO) + #define STATUS_LEDS + #define GPIO_LED_GPIO_ON GPIO_SetBits + #define GPIO_LED_GPIO_OFF GPIO_ResetBits + #define LED_GREEN_GPIO GPIOA + #define LED_GREEN_GPIO_PIN GPIO_Pin_7 // PA.07 + #define LED_RED_GPIO GPIOE + #define LED_RED_GPIO_PIN GPIO_Pin_13 // PE.13 + #define LED_BLUE_GPIO GPIOE + #define LED_BLUE_GPIO_PIN GPIO_Pin_2 // PE.02 #elif defined(PCBX7) #define STATUS_LEDS #define GPIO_LED_GPIO_ON GPIO_SetBits @@ -1278,6 +1319,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(RADIO_ZORRO) + #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_4 // PC.04 + #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) @@ -1298,7 +1359,7 @@ #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream5_IRQHandler #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5 #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) -#elif (defined(RADIO_FAMILY_JUMPER_T12) && defined(HARDWARE_INTERNAL_MODULE))|| defined(RADIO_TX12) || defined(RADIO_T8) +#elif (defined(RADIO_FAMILY_JUMPER_T12) && defined(HARDWARE_INTERNAL_MODULE)) || defined(RADIO_TX12) || defined(RADIO_ZORRO) || defined(RADIO_T8) #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define INTMODULE_RCC_APB1Periph (RCC_APB1Periph_USART3 | RCC_APB1Periph_TIM2) #define INTMODULE_RCC_APB2Periph 0 @@ -1342,9 +1403,9 @@ #endif // External Module -#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) || defined(PCBX7ACCESS) +#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) || defined(PCBX7ACCESS) || defined(RADIO_ZORRO) #define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6) - #if defined(RADIO_X9DP2019) || defined(RADIO_X7ACCESS) + #if defined(RADIO_X9DP2019) || defined(RADIO_X7ACCESS) || defined(RADIO_ZORRO) #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 @@ -1488,7 +1549,7 @@ #endif // Serial Port -#if defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) +#if (defined(PCBX7) && !defined(RADIO_ZORRO)) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) #define AUX_SERIAL_RCC_AHB1Periph 0 #define AUX_SERIAL_RCC_APB1Periph 0 #define AUX_SERIAL_RCC_APB2Periph 0 @@ -1548,7 +1609,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_T8) +#if defined(RADIO_X7) || defined(RADIO_X7ACCESS) || defined(RADIO_TX12) || defined(RADIO_ZORRO) || defined(RADIO_T8) #define TELEMETRY_EXTI_REUSE_INTERRUPT_ROTARY_ENCODER #elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) #define TELEMETRY_EXTI_IRQHandler EXTI9_5_IRQHandler @@ -1656,6 +1717,16 @@ #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_X9DP2019) || defined(RADIO_ZORRO) + #define INTMODULE_HEARTBEAT + #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define INTMODULE_HEARTBEAT_GPIO GPIOB + #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_1 // PB.01 + #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOB + #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource1 + #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line1 + #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI1_IRQn + #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI1_IRQHandler #elif defined(RADIO_X7) || defined(RADIO_TX12) #define INTMODULE_HEARTBEAT #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER @@ -1666,16 +1737,6 @@ #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_X9DP2019) - #define INTMODULE_HEARTBEAT - #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB - #define INTMODULE_HEARTBEAT_GPIO GPIOB - #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_1 // PB.01 - #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOB - #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource1 - #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line1 - #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI1_IRQn - #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI1_IRQHandler #else #define INTMODULE_HEARTBEAT #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC @@ -1847,7 +1908,7 @@ #define KEYS_BACKLIGHT_RCC_AHB1Periph 0 // LCD driver -#if defined(RADIO_TX12) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) +#if defined(RADIO_TX12) || defined(RADIO_ZORRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) #define LCD_VERTICAL_INVERT #endif #if defined(PCBX9E) @@ -1949,6 +2010,15 @@ #define I2C_B1_WP_GPIO_PIN GPIO_Pin_5 // PB.05 #define I2C_B1_SDA_GPIO_PinSource GPIO_PinSource9 #define I2C_B1_SCL_GPIO_PinSource GPIO_PinSource8 +#elif defined(RADIO_ZORRO) + #define I2C_B1_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define I2C_B1_SPI_GPIO GPIOB + #define I2C_B1_SDA_GPIO_PIN GPIO_Pin_9 // PB.09 + #define I2C_B1_SCL_GPIO_PIN GPIO_Pin_8 // PB.08 + #define I2C_B1_WP_GPIO GPIOD + #define I2C_B1_WP_GPIO_PIN GPIO_Pin_10 // PD.10 + #define I2C_B1_SDA_GPIO_PinSource GPIO_PinSource9 + #define I2C_B1_SCL_GPIO_PinSource GPIO_PinSource8 #elif defined(RADIO_X9DP2019) #define I2C_B1_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF) #define I2C_B1_SPI_GPIO GPIOB @@ -2042,7 +2112,7 @@ #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_9 // PD.09 -#elif defined(RADIO_TX12) || defined(RADIO_T8) || defined(RADIO_TLITE) +#elif defined(RADIO_TX12) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_TLITE) #define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1) #define AUDIO_MUTE_GPIO GPIOE #define AUDIO_MUTE_GPIO_PIN GPIO_Pin_12 // PE.12 @@ -2057,7 +2127,7 @@ #endif // Haptic -#if defined(PCBXLITE) || defined(PCBX9LITE) +#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_ZORRO) #define HAPTIC_PWM #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define HAPTIC_RCC_APB1Periph RCC_APB1Periph_TIM2 @@ -2172,7 +2242,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_T8) +#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_T8) || 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 ae7b1b431..3dc4260eb 100644 --- a/radio/src/targets/taranis/keys_driver.cpp +++ b/radio/src/targets/taranis/keys_driver.cpp @@ -206,7 +206,7 @@ uint32_t switchState(uint8_t index) switch (index) { -#if defined(RADIO_TX12) || defined(RADIO_T8) +#if defined(RADIO_TX12) || defined(RADIO_ZORRO) || defined(RADIO_T8) ADD_2POS_CASE(A); ADD_3POS_CASE(B, 1); ADD_3POS_CASE(C, 2); @@ -242,7 +242,13 @@ uint32_t switchState(uint8_t index) ADD_2POS_CASE(H); ADD_2POS_CASE(I); // no SWJ on XLITE -#elif defined(RADIO_TX12) +#elif defined(RADIO_ZORRO) + ADD_2POS_CASE(D); + ADD_2POS_CASE(E); + ADD_2POS_CASE(F); + ADD_2POS_CASE(G); + ADD_2POS_CASE(H); +#elif defined(RADIO_TX12) || defined(RADIO_ZORRO) ADD_2POS_CASE(D); ADD_3POS_CASE(E, 4); ADD_3POS_CASE(F, 5); diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index 7a764bfd8..53ac9ac25 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -21,7 +21,7 @@ #include "opentx.h" -#if defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_T8) +#if defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_ZORRO) || defined(RADIO_T8) #define LCD_CONTRAST_OFFSET -10 #else #define LCD_CONTRAST_OFFSET 160 diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index c4754fb4c..0e1277a64 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -46,9 +46,9 @@ #elif defined(RADIO_TX12) #define TR_POTS_VSRCRAW STR_CHAR_POT "S1\0" STR_CHAR_POT "S2\0" #define TR_SW_VSRCRAW STR_CHAR_SWITCH "SA\0" STR_CHAR_SWITCH "SB\0" STR_CHAR_SWITCH "SC\0" STR_CHAR_SWITCH "SD\0" STR_CHAR_SWITCH "SE\0" STR_CHAR_SWITCH "SF\0" STR_CHAR_SWITCH "SI\0" STR_CHAR_SWITCH "SJ\0" -#elif defined(RADIO_TX12) - #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" - #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SI\0""\312SJ\0" +#elif defined(RADIO_ZORRO) + #define TR_POTS_VSRCRAW STR_CHAR_POT"S1\0" STR_CHAR_POT"S2\0" + #define TR_SW_VSRCRAW STR_CHAR_SWITCH "SA\0" STR_CHAR_SWITCH "SB\0" STR_CHAR_SWITCH "SC\0" STR_CHAR_SWITCH "SD\0" STR_CHAR_SWITCH "SE\0" STR_CHAR_SWITCH "SF\0" STR_CHAR_SWITCH "SG\0" STR_CHAR_SWITCH "SH\0" #elif defined(PCBX7) #define TR_POTS_VSRCRAW STR_CHAR_POT"S1\0" STR_CHAR_POT"S2\0" #define TR_SW_VSRCRAW STR_CHAR_SWITCH"SA\0" STR_CHAR_SWITCH"SB\0" STR_CHAR_SWITCH"SC\0" STR_CHAR_SWITCH"SD\0" STR_CHAR_SWITCH"SF\0" STR_CHAR_SWITCH"SH\0" STR_CHAR_SWITCH"SI\0" STR_CHAR_SWITCH"SJ\0" diff --git a/radio/util/build-firmware.py b/radio/util/build-firmware.py index 5d577092c..4ae44a808 100755 --- a/radio/util/build-firmware.py +++ b/radio/util/build-firmware.py @@ -153,6 +153,11 @@ def main(): cmake_options["PCBREV"] = "TX12" firmware_options = options_radiomaster_tx12 maxsize = 65536 * 8 + elif board_name == "zorro": + cmake_options["PCB"] = "X7" + cmake_options["PCBREV"] = "ZORRO" + firmware_options = options_radiomaster_zorro + maxsize = 65536 * 8 elif board_name == "t8": cmake_options["PCB"] = "X7" cmake_options["PCBREV"] = "T8" diff --git a/radio/util/fwoptions.py b/radio/util/fwoptions.py index 761e42373..753a6e52e 100755 --- a/radio/util/fwoptions.py +++ b/radio/util/fwoptions.py @@ -271,6 +271,19 @@ options_radiomaster_tx12 = { "afhds3": ("AFHDS3", "YES", "NO") } +options_radiomaster_zorro = { + "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"), + "flexr9m": ("MODULE_PROTOCOL_FLEX", "YES", None), + "afhds3": ("AFHDS3", "YES", "NO"), + "internalelrs": ("INTERNAL_MODULE_ELRS", "YES", "NO"), +} + options_radiomaster_t8 = { "noheli": ("HELI", "NO", "YES"), "ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"), diff --git a/tools/build-radiomaster.py b/tools/build-radiomaster.py index 564463537..f1db01305 100755 --- a/tools/build-radiomaster.py +++ b/tools/build-radiomaster.py @@ -29,6 +29,16 @@ boards = { "PCBREV": "TX12", "DEFAULT_MODE": "2", }, + "ZORRO_1": { + "PCB": "X7", + "PCBREV": "ZORRO", + "DEFAULT_MODE": "1", + }, + "ZORRO_2": { + "PCB": "X7", + "PCBREV": "ZORRO", + "DEFAULT_MODE": "2", + }, "T8_1": { "PCB": "X7", "PCBREV": "T8",