diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml
index 18a969f24..d101050c1 100644
--- a/.github/workflows/actions.yml
+++ b/.github/workflows/actions.yml
@@ -101,7 +101,7 @@ jobs:
- t12;t12max
- t15;t16;t18
- t8;zorro;pocket;mt12;commando8
- - tlite;tpro;tprov2;tpros;lr3pro
+ - tlite;tpro;tprov2;tpros;bumblebee;lr3pro
- t20;t20v2;t14
- tx12;tx12mk2;boxer
- tx16s
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index b834d90e3..22a237b88 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -21,7 +21,7 @@ jobs:
- t12;t12max
- t15;t16;t18
- t8;zorro;pocket;mt12;commando8
- - tlite;tpro;tprov2;tpros;lr3pro
+ - tlite;tpro;tprov2;tpros;bumblebee;lr3pro
- t20;t20v2;t14
- tx12;tx12mk2;boxer
- tx16s
diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt
index 6fd2f8d11..f592d0357 100644
--- a/companion/src/CMakeLists.txt
+++ b/companion/src/CMakeLists.txt
@@ -308,6 +308,8 @@ elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TPROV2)
set(FLAVOUR tprov2)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TPROS)
set(FLAVOUR tpros)
+elseif(PCB STREQUAL X7 AND PCBREV STREQUAL BUMBLEBEE)
+ set(FLAVOUR bumblebee)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T20)
set(FLAVOUR t20)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T20V2)
diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc
index aa873dd53..4f406391c 100644
--- a/companion/src/companion.qrc
+++ b/companion/src/companion.qrc
@@ -220,6 +220,14 @@
images/simulator/JumperTPROS/exit.png
images/simulator/JumperTPROS/menu.png
images/simulator/JumperTPROS/page.png
+ images/simulator/JumperBumblebee/top.png
+ images/simulator/JumperBumblebee/bottom.png
+ images/simulator/JumperBumblebee/enter.png
+ images/simulator/JumperBumblebee/exit.png
+ images/simulator/JumperBumblebee/left.png
+ images/simulator/JumperBumblebee/menu.png
+ images/simulator/JumperBumblebee/page.png
+ images/simulator/JumperBumblebee/right.png
images/simulator/TX12/left.png
images/simulator/TX12/left-pageup.png
images/simulator/TX12/left-pagedn.png
diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp
index 3a46dd32c..40370f90c 100644
--- a/companion/src/firmwares/boards.cpp
+++ b/companion/src/firmwares/boards.cpp
@@ -192,6 +192,7 @@ int Boards::getEEpromSize(Board::Type board)
case BOARD_JUMPER_TLITE_F4:
case BOARD_JUMPER_TPRO:
case BOARD_JUMPER_TPROV2:
+ case BOARD_JUMPER_BUMBLEBEE:
case BOARD_JUMPER_TPROS:
case BOARD_RADIOMASTER_TX12:
case BOARD_RADIOMASTER_TX12_MK2:
@@ -251,6 +252,7 @@ int Boards::getFlashSize(Type board)
case BOARD_JUMPER_TPRO:
case BOARD_JUMPER_TPROV2:
case BOARD_JUMPER_TPROS:
+ case BOARD_JUMPER_BUMBLEBEE:
case BOARD_RADIOMASTER_TX12:
case BOARD_RADIOMASTER_TX12_MK2:
case BOARD_RADIOMASTER_ZORRO:
@@ -299,7 +301,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
return 8;
else if (IS_JUMPER_TPROV2(board))
return 6;
- else if (IS_JUMPER_TLITE(board) || IS_JUMPER_TPROV1(board) || IS_BETAFPV_LR3PRO(board) || IS_IFLIGHT_COMMANDO8(board))
+ else if (IS_JUMPER_TLITE(board) || IS_JUMPER_TPROV1(board) || IS_BETAFPV_LR3PRO(board) || IS_IFLIGHT_COMMANDO8(board) || IS_JUMPER_BUMBLEBEE(board))
return 4;
else if(IS_RADIOMASTER_ZORRO(board))
return 8;
@@ -587,6 +589,8 @@ QString Boards::getBoardName(Board::Type board)
return "Jumper T-Pro S";
case BOARD_JUMPER_T12MAX:
return "Jumper T12 MAX";
+ case BOARD_JUMPER_BUMBLEBEE:
+ return "Jumper Bumblebee";
case BOARD_JUMPER_T14:
return "Jumper T14";
case BOARD_JUMPER_T15:
@@ -747,6 +751,7 @@ int Boards::getDefaultInternalModules(Board::Type board)
case BOARD_JUMPER_T20:
case BOARD_JUMPER_T20V2:
case BOARD_JUMPER_TPROS:
+ case BOARD_JUMPER_BUMBLEBEE:
case BOARD_FATFISH_F16:
case BOARD_HELLORADIOSKY_V16:
return (int)MODULE_TYPE_CROSSFIRE;
diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h
index 0718867bf..b2e8f1635 100644
--- a/companion/src/firmwares/boards.h
+++ b/companion/src/firmwares/boards.h
@@ -86,6 +86,7 @@ namespace Board {
BOARD_JUMPER_TPROS,
BOARD_RADIOMASTER_POCKET,
BOARD_JUMPER_T20V2,
+ BOARD_JUMPER_BUMBLEBEE,
BOARD_FATFISH_F16,
BOARD_HELLORADIOSKY_V16,
BOARD_RADIOMASTER_MT12,
@@ -514,6 +515,11 @@ inline bool IS_JUMPER_TPROV2(Board::Type board)
return board == Board::BOARD_JUMPER_TPROV2;
}
+inline bool IS_JUMPER_BUMBLEBEE(Board::Type board)
+{
+ return board == Board::BOARD_JUMPER_BUMBLEBEE;
+}
+
inline bool IS_JUMPER_TPROS(Board::Type board)
{
return board == Board::BOARD_JUMPER_TPROS;
@@ -616,6 +622,7 @@ inline bool IS_FAMILY_T12(Board::Type board)
board == Board::BOARD_JUMPER_TPRO ||
board == Board::BOARD_JUMPER_TPROV2 ||
board == Board::BOARD_JUMPER_TPROS ||
+ board == Board::BOARD_JUMPER_BUMBLEBEE ||
board == Board::BOARD_RADIOMASTER_TX12 ||
board == Board::BOARD_RADIOMASTER_TX12_MK2 ||
board == Board::BOARD_RADIOMASTER_ZORRO ||
diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp
index 2afea1a4c..6c3193012 100644
--- a/companion/src/firmwares/opentx/opentxeeprom.cpp
+++ b/companion/src/firmwares/opentx/opentxeeprom.cpp
@@ -46,11 +46,11 @@ inline int MAX_SWITCHES(Board::Type board, int version)
if (IS_TARANIS_X9D(board))
return 9;
- if (IS_JUMPER_TPROV2(board))
- return 12;
-
if (IS_JUMPER_TPROV1(board))
- return 10;
+ return 10;
+
+ if (IS_JUMPER_TPROV2(board) || IS_JUMPER_BUMBLEBEE(board))
+ return 14;
if (IS_FAMILY_T12(board))
return 8;
diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp
index c36d432be..2e62ea717 100644
--- a/companion/src/firmwares/opentx/opentxinterface.cpp
+++ b/companion/src/firmwares/opentx/opentxinterface.cpp
@@ -71,6 +71,8 @@ const char * OpenTxEepromInterface::getName()
return "EdgeTX for Jumper T-Pro V2";
case BOARD_JUMPER_TPROS:
return "EdgeTX for Jumper T-Pro S";
+ case BOARD_JUMPER_BUMBLEBEE:
+ return "EdgeTX for Jumper Bumblebee";
case BOARD_JUMPER_T12MAX:
return "EdgeTX for Jumper T12 MAX";
case BOARD_JUMPER_T14:
@@ -1424,6 +1426,16 @@ void registerOpenTxFirmwares()
registerOpenTxFirmware(firmware);
addOpenTxRfOptions(firmware, FLEX);
+ /* Jumper Bumblebee board */
+ firmware = new OpenTxFirmware(FIRMWAREID("bumblebee"), QCoreApplication::translate("Firmware", "Jumper Bumblebee"), BOARD_JUMPER_BUMBLEBEE);
+ 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"));
+ addOpenTxFontOptions(firmware);
+ registerOpenTxFirmware(firmware);
+ addOpenTxRfOptions(firmware, FLEX);
+
/* Jumper T12 board */
firmware = new OpenTxFirmware(FIRMWAREID("t12"), QCoreApplication::translate("Firmware", "Jumper T12 / T12 Pro"), BOARD_JUMPER_T12);
addOpenTxCommonOptions(firmware);
diff --git a/companion/src/images/simulator/JumperBumblebee/bottom.png b/companion/src/images/simulator/JumperBumblebee/bottom.png
new file mode 100644
index 000000000..aa5a464fc
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/bottom.png differ
diff --git a/companion/src/images/simulator/JumperBumblebee/enter.png b/companion/src/images/simulator/JumperBumblebee/enter.png
new file mode 100644
index 000000000..2c7ef315d
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/enter.png differ
diff --git a/companion/src/images/simulator/JumperBumblebee/exit.png b/companion/src/images/simulator/JumperBumblebee/exit.png
new file mode 100644
index 000000000..dfa26cad7
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/exit.png differ
diff --git a/companion/src/images/simulator/JumperBumblebee/left.png b/companion/src/images/simulator/JumperBumblebee/left.png
new file mode 100644
index 000000000..7175728bb
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/left.png differ
diff --git a/companion/src/images/simulator/JumperBumblebee/menu.png b/companion/src/images/simulator/JumperBumblebee/menu.png
new file mode 100644
index 000000000..a6192e94a
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/menu.png differ
diff --git a/companion/src/images/simulator/JumperBumblebee/page.png b/companion/src/images/simulator/JumperBumblebee/page.png
new file mode 100644
index 000000000..e9028436b
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/page.png differ
diff --git a/companion/src/images/simulator/JumperBumblebee/right.png b/companion/src/images/simulator/JumperBumblebee/right.png
new file mode 100644
index 000000000..725bb666f
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/right.png differ
diff --git a/companion/src/images/simulator/JumperBumblebee/top.png b/companion/src/images/simulator/JumperBumblebee/top.png
new file mode 100644
index 000000000..ed0c72018
Binary files /dev/null and b/companion/src/images/simulator/JumperBumblebee/top.png differ
diff --git a/companion/src/simulation/CMakeLists.txt b/companion/src/simulation/CMakeLists.txt
index 661f4228e..fe809bc3f 100644
--- a/companion/src/simulation/CMakeLists.txt
+++ b/companion/src/simulation/CMakeLists.txt
@@ -48,6 +48,7 @@ set(${PROJECT_NAME}_SRCS
simulateduiwidgetJumperTLITE.cpp
simulateduiwidgetJumperTPRO.cpp
simulateduiwidgetJumperTPROS.cpp
+ simulateduiwidgetJumperBumblebee.cpp
simulateduiwidgetLR3PRO.cpp
simulateduiwidgetMT12.cpp
simulateduiwidgetNV14.cpp
diff --git a/companion/src/simulation/simulateduiwidget.h b/companion/src/simulation/simulateduiwidget.h
index 29df48e06..cbb8b557f 100644
--- a/companion/src/simulation/simulateduiwidget.h
+++ b/companion/src/simulation/simulateduiwidget.h
@@ -173,6 +173,7 @@ namespace Ui {
class SimulatedUIWidgetJumperTLITE;
class SimulatedUIWidgetJumperTPRO;
class SimulatedUIWidgetJumperTPROS;
+ class SimulatedUIWidgetJumperBumblebee;
class SimulatedUIWidgetJumperT12max;
class SimulatedUIWidgetJumperT14;
class SimulatedUIWidgetJumperT15;
@@ -390,6 +391,18 @@ private:
Ui::SimulatedUIWidgetJumperTPROS * ui;
};
+class SimulatedUIWidgetJumperBumblebee: public SimulatedUIWidget
+{
+ Q_OBJECT
+
+public:
+ explicit SimulatedUIWidgetJumperBumblebee(SimulatorInterface * simulator, QWidget * parent = NULL);
+ virtual ~SimulatedUIWidgetJumperBumblebee();
+
+private:
+ Ui::SimulatedUIWidgetJumperBumblebee * ui;
+};
+
class SimulatedUIWidgetJumperT15: public SimulatedUIWidget
{
Q_OBJECT
diff --git a/companion/src/simulation/simulateduiwidgetJumperBumblebee.cpp b/companion/src/simulation/simulateduiwidgetJumperBumblebee.cpp
new file mode 100644
index 000000000..a24e0d698
--- /dev/null
+++ b/companion/src/simulation/simulateduiwidgetJumperBumblebee.cpp
@@ -0,0 +1,57 @@
+#include "simulateduiwidget.h"
+#include "ui_simulateduiwidgetJumperBumblebee.h"
+#include "eeprominterface.h"
+
+// NOTE: RadioUiAction(NUMBER,...): NUMBER relates to enum EnumKeys in the specific board.h
+
+SimulatedUIWidgetJumperBumblebee::SimulatedUIWidgetJumperBumblebee(SimulatorInterface *simulator, QWidget * parent):
+ SimulatedUIWidget(simulator, parent),
+ ui(new Ui::SimulatedUIWidgetJumperBumblebee)
+{
+ RadioUiAction * act;
+
+ ui->setupUi(this);
+
+ act = new RadioUiAction(KEY_MENU, QList() << Qt::Key_PageUp << Qt::Key_Up, SIMU_STR_HLP_KEYS_GO_UP, SIMU_STR_HLP_ACT_MENU_ICN);
+ addRadioWidget(ui->bottombuttons->addArea(QRect(55, 15, 50, 50), "JumperBumblebee/menu.png", act));
+
+ act = new RadioUiAction(KEY_PAGEDN, QList() << Qt::Key_PageDown << Qt::Key_Down, SIMU_STR_HLP_KEYS_GO_DN, SIMU_STR_HLP_ACT_PAGE);
+ addRadioWidget(ui->bottombuttons->addArea(QRect(10, 25, 50, 50), "JumperBumblebee/page.png", act));
+
+ act = new RadioUiAction(KEY_EXIT, QList() << Qt::Key_Delete << Qt::Key_Escape << Qt::Key_Backspace, SIMU_STR_HLP_KEYS_EXIT, SIMU_STR_HLP_ACT_EXIT);
+ addRadioWidget(ui->bottombuttons->addArea(QRect(25, 80, 50, 50), "JumperBumblebee/exit.png", act));
+
+ m_mouseMidClickAction = new RadioUiAction(KEY_ENTER, QList() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ROT_DN);
+ addRadioWidget(ui->bottombuttons->addArea(QRect(145, 20, 100, 100), "JumperBumblebee/enter.png", m_mouseMidClickAction));
+
+ //addRadioWidget(ui->leftbuttons->addArea(QRect(10, 65, 70, 50), "JumperBumblebee/left_scrnshot.png", m_screenshotAction));
+
+ 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);
+
+ if (getCurrentBoard() == Board::BOARD_JUMPER_BUMBLEBEE) {
+ ui->lcd->setBgDefaultColor(QColor(0, 0, 0));
+ ui->lcd->setFgDefaultColor(QColor(255, 255, 255));
+ }
+
+ setLcd(ui->lcd);
+
+ QString css = "#radioUiWidget {"
+ "background-color: rgb(167, 167, 167);"
+ "}";
+
+ QTimer * tim = new QTimer(this);
+ tim->setSingleShot(true);
+ connect(tim, &QTimer::timeout, [this, css]() {
+ emit customStyleRequest(css);
+ });
+ tim->start(100);
+}
+
+SimulatedUIWidgetJumperBumblebee::~SimulatedUIWidgetJumperBumblebee()
+{
+ delete ui;
+}
diff --git a/companion/src/simulation/simulateduiwidgetJumperBumblebee.ui b/companion/src/simulation/simulateduiwidgetJumperBumblebee.ui
new file mode 100644
index 000000000..1c35996cd
--- /dev/null
+++ b/companion/src/simulation/simulateduiwidgetJumperBumblebee.ui
@@ -0,0 +1,196 @@
+
+
+ SimulatedUIWidgetJumperBumblebee
+
+
+
+ 0
+ 0
+ 726
+ 368
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 726
+ 368
+
+
+
+
+ 726
+ 368
+
+
+
+ Jumper Bumblebee 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
+
+
+
+
+ 234
+ 368
+
+
+
+
+ 234
+ 368
+
+
+
+ background:url(:/images/simulator/JumperBumblebee/left.png);
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 256
+ 128
+
+
+
+
+ 256
+ 128
+
+
+
+ background-color: rgb(215, 243, 255);
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 236
+ 368
+
+
+
+
+ 236
+ 368
+
+
+
+ background:url(:/images/simulator/JumperBumblebee/right.png)
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 256
+ 97
+
+
+
+
+ 256
+ 97
+
+
+
+ background:url(:/images/simulator/JumperBumblebee/top.png)
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 256
+ 143
+
+
+
+
+ 256
+ 143
+
+
+
+ background:url(:/images/simulator/JumperBumblebee/bottom.png)
+
+
+
+
+
+
+
+ LcdWidget
+ QWidget
+
+ 1
+
+
+ ButtonsWidget
+ QWidget
+
+ 1
+
+
+
+
+
diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp
index bcae14c8e..dd605a7dc 100644
--- a/companion/src/simulation/simulatorwidget.cpp
+++ b/companion/src/simulation/simulatorwidget.cpp
@@ -109,6 +109,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato
case Board::BOARD_JUMPER_TPROS:
radioUiWidget = new SimulatedUIWidgetJumperTPROS(simulator, this);
break;
+ case Board::BOARD_JUMPER_BUMBLEBEE:
+ radioUiWidget = new SimulatedUIWidgetJumperBumblebee(simulator, this);
+ break;
case Board::BOARD_JUMPER_T12MAX:
radioUiWidget = new SimulatedUIWidgetJumperT12max(simulator, this);
break;
diff --git a/fw.json b/fw.json
index fa60b1bcd..f836ad033 100644
--- a/fw.json
+++ b/fw.json
@@ -24,6 +24,7 @@
["HelloRadioSky V14", "v14-"],
["HelloRadioSky V16", "v16-"],
["iFlight Commando 8", "commando8-"],
+ ["Jumper Bumblebee", "bumblebee-"],
["Jumper T12", "t12-"],
["Jumper T12 MAX", "t12max-"],
["Jumper T14", "t14-"],
diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h
index f575a1097..f20d1f031 100644
--- a/radio/src/datastructs.h
+++ b/radio/src/datastructs.h
@@ -90,7 +90,7 @@ static inline void check_struct()
CHKSIZE(RadioData, 870);
#endif
-#if defined(RADIO_TPRO) || defined(RADIO_TPROV2)
+#if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_BUMBLEBEE)
CHKSIZE(ModelData, 6354);
#elif defined(RADIO_T14) || defined(RADIO_T12MAX)
CHKSIZE(ModelData, 6329);
diff --git a/radio/src/hal/rotary_encoder.h b/radio/src/hal/rotary_encoder.h
index 1b8f5bec8..93f4679c1 100644
--- a/radio/src/hal/rotary_encoder.h
+++ b/radio/src/hal/rotary_encoder.h
@@ -27,7 +27,7 @@
#define ROTENC_MIDSPEED 5
#define ROTENC_HIGHSPEED 50
-#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_T15)
+#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_T15) || defined(RADIO_BUMBLEBEE)
#define ROTARY_ENCODER_GRANULARITY 4
#else
#define ROTARY_ENCODER_GRANULARITY 2
diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp
index 201b57d61..76e6392f9 100644
--- a/radio/src/simu.cpp
+++ b/radio/src/simu.cpp
@@ -436,7 +436,7 @@ void OpenTxSim::updateKeysAndSwitches(bool start)
SWITCH_KEY(C, 2, 3);
SWITCH_KEY(D, 3, 3);
- #if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS)
+ #if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_BUMBLEBEE)
SWITCH_KEY(1, 4, 2);
SWITCH_KEY(2, 5, 2);
SWITCH_KEY(3, 6, 2);
diff --git a/radio/src/storage/yaml/yaml_datastructs.cpp b/radio/src/storage/yaml/yaml_datastructs.cpp
index 60670b04b..5c6448896 100644
--- a/radio/src/storage/yaml/yaml_datastructs.cpp
+++ b/radio/src/storage/yaml/yaml_datastructs.cpp
@@ -41,7 +41,7 @@
#elif defined(PCBPL18)
#include "yaml_datastructs_pl18.cpp"
#elif defined(PCBX7)
- #if defined(RADIO_TPRO) || defined(RADIO_TPROV2)
+ #if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_BUMBLEBEE)
#include "yaml_datastructs_tpro.cpp"
#elif defined(RADIO_FAMILY_T20)
#include "yaml_datastructs_t20.cpp"
diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt
index 50804f468..6e11b3339 100644
--- a/radio/src/targets/taranis/CMakeLists.txt
+++ b/radio/src/targets/taranis/CMakeLists.txt
@@ -148,6 +148,19 @@ elseif(PCB STREQUAL X7)
add_definitions(-DRADIO_TPROS)
add_definitions(-DMANUFACTURER_JUMPER)
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
+ elseif(PCBREV STREQUAL BUMBLEBEE)
+ set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module")
+ set(INTERNAL_MODULE_SERIAL YES)
+ set(MODULE_SIZE_SML YES)
+ set(FLAVOUR bumblebee)
+ set(NAVIGATION_TYPE x7)
+ set(CPU_TYPE_FULL STM32F407xG)
+ set(ROTARY_ENCODER YES)
+ add_definitions(-DFUNCTION_SWITCHES)
+ add_definitions(-DRADIO_BUMBLEBEE)
+ add_definitions(-DMANUFACTURER_JUMPER)
+ set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
+ set(AUX_SERIAL ON)
elseif (PCBREV STREQUAL T14)
set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module")
set(INTERNAL_MODULE_SERIAL YES)
diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h
index 3ffd3265d..fded243dc 100644
--- a/radio/src/targets/taranis/hal.h
+++ b/radio/src/targets/taranis/hal.h
@@ -160,7 +160,7 @@
#define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_14 // PE.14
#define KEYS_GPIO_REG_BIND GPIOD
#define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_9 // PD.09
-#elif defined(RADIO_FAMILY_T20)
+#elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define KEYS_GPIO_REG_PAGEDN GPIOD
#define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PD.11
#define KEYS_GPIO_REG_MENU GPIOD
@@ -268,7 +268,7 @@
#define USE_EXTI15_10_IRQ
#define EXTI15_10_IRQ_Priority 5
#endif
-#elif defined(RADIO_X7) || defined(RADIO_X7ACCESS) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_FAMILY_T20)
+#elif defined(RADIO_X7) || defined(RADIO_X7ACCESS) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define ROTARY_ENCODER_NAVIGATION
#define ROTARY_ENCODER_GPIO GPIOE
#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_9 // PE.09
@@ -459,6 +459,23 @@
#define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PD.15
#define TRIMS_GPIO_REG_RHR GPIOE
#define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_5 // PE.05
+#elif defined(RADIO_BUMBLEBEE)
+ #define TRIMS_GPIO_REG_LHR GPIOG
+ #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02
+ #define TRIMS_GPIO_REG_LHL GPIOD
+ #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_13 // PD.13
+ #define TRIMS_GPIO_REG_LVD GPIOG
+ #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PG.03
+ #define TRIMS_GPIO_REG_LVU GPIOD
+ #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PD.14
+ #define TRIMS_GPIO_REG_RVD GPIOF
+ #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_2 // PF.02
+ #define TRIMS_GPIO_REG_RHL GPIOE
+ #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_5 // PE.05
+ #define TRIMS_GPIO_REG_RVU GPIOE
+ #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_6 // PE.06
+ #define TRIMS_GPIO_REG_RHR GPIOF
+ #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PF.01
#elif defined(RADIO_T14) || defined(RADIO_T12MAX)
#define TRIMS_GPIO_REG_LHL GPIOE
#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PE.03
@@ -630,6 +647,13 @@
#define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_0 // PE.00
#define SWITCHES_GPIO_REG_A_L GPIOD
#define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_11 // PD.11
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_A
+ #define HARDWARE_SWITCH_A
+ #define SWITCHES_GPIO_REG_A_L GPIOD
+ #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_2 // PD.02
+ #define SWITCHES_GPIO_REG_A_H GPIOD
+ #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_1 // PD.01
#elif defined(RADIO_FAMILY_T20)
#define STORAGE_SWITCH_A
#define HARDWARE_SWITCH_A
@@ -696,6 +720,13 @@
#define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_5 // PA.05
#define SWITCHES_GPIO_REG_B_H GPIOE
#define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_15 // PE.15
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_B
+ #define HARDWARE_SWITCH_B
+ #define SWITCHES_GPIO_REG_B_H GPIOE
+ #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_0 // PE.00
+ #define SWITCHES_GPIO_REG_B_L GPIOE
+ #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_1 // PE.01
#elif defined(RADIO_FAMILY_T20)
#define STORAGE_SWITCH_B
#define HARDWARE_SWITCH_B
@@ -817,6 +848,11 @@
#define HARDWARE_SWITCH_C
#define SWITCHES_GPIO_REG_C GPIOE
#define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_8 // PE.08
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_C
+ #define HARDWARE_SWITCH_C
+ #define SWITCHES_GPIO_REG_C GPIOD
+ #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_0 // PD.00
#elif defined(RADIO_FAMILY_T20)
#define STORAGE_SWITCH_C
#define HARDWARE_SWITCH_C
@@ -905,6 +941,11 @@
#define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_5 // PA.05
#define SWITCHES_GPIO_REG_D_H GPIOE
#define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_15 // PE.15
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_D
+ #define HARDWARE_SWITCH_D
+ #define SWITCHES_GPIO_REG_D GPIOE
+ #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_2 // PE.02
#elif defined(RADIO_FAMILY_T20)
#define STORAGE_SWITCH_D
#define HARDWARE_SWITCH_D
@@ -996,16 +1037,21 @@
#define HARDWARE_SWITCH_E
#define SWITCHES_GPIO_REG_E GPIOC
#define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PC.05
-#elif defined(RADIO_TPROV2)
- #define STORAGE_SWITCH_E
- #define HARDWARE_SWITCH_E
- #define SWITCHES_GPIO_REG_E GPIOG
- #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_0 // PG.00
#elif defined(RADIO_TPRO)
#define STORAGE_SWITCH_E
#define HARDWARE_SWITCH_E
#define SWITCHES_GPIO_REG_E GPIOG
#define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_10 // PG.10
+#elif defined(RADIO_TPROV2)
+ #define STORAGE_SWITCH_E
+ #define HARDWARE_SWITCH_E
+ #define SWITCHES_GPIO_REG_E GPIOG
+ #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_0 // PG.00
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_E
+ #define HARDWARE_SWITCH_E
+ #define SWITCHES_GPIO_REG_E GPIOD
+ #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PD.03
#elif defined(RADIO_T14) || defined(RADIO_T12MAX)
#define STORAGE_SWITCH_E
#define HARDWARE_SWITCH_E
@@ -1078,16 +1124,21 @@
#define HARDWARE_SWITCH_F
#define SWITCHES_GPIO_REG_F GPIOE
#define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_7 // PE.07
-#elif defined(RADIO_TPROV2)
- #define STORAGE_SWITCH_F
- #define HARDWARE_SWITCH_F
- #define SWITCHES_GPIO_REG_F GPIOG
- #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_1 // PG.01
#elif defined(RADIO_TPRO)
#define STORAGE_SWITCH_F
#define HARDWARE_SWITCH_F
#define SWITCHES_GPIO_REG_F GPIOG
#define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_9 // PG.09
+#elif defined(RADIO_TPROV2)
+ #define STORAGE_SWITCH_F
+ #define HARDWARE_SWITCH_F
+ #define SWITCHES_GPIO_REG_F GPIOG
+ #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_1 // PG.01
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_F
+ #define HARDWARE_SWITCH_F
+ #define SWITCHES_GPIO_REG_F GPIOB
+ #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_5 // PB.05
#elif defined(RADIO_T14) || defined(RADIO_T12MAX)
#define STORAGE_SWITCH_F
#define HARDWARE_SWITCH_F
@@ -1153,6 +1204,11 @@
#define HARDWARE_SWITCH_G
#define SWITCHES_GPIO_REG_G GPIOG
#define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_7 // PG.07
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_G
+ #define HARDWARE_SWITCH_G
+ #define SWITCHES_GPIO_REG_G GPIOD
+ #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_15// PD.15 - Left trim push
#elif defined(RADIO_FAMILY_T20)
//TRIM left low
#define STORAGE_SWITCH_G
@@ -1200,6 +1256,11 @@
#define HARDWARE_SWITCH_H
#define SWITCHES_GPIO_REG_H GPIOG
#define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_6 // PG.06
+#elif defined(RADIO_BUMBLEBEE)
+ #define STORAGE_SWITCH_H
+ #define HARDWARE_SWITCH_H
+ #define SWITCHES_GPIO_REG_H GPIOF
+ #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_0 // PF.00 - Right trim push
#elif defined(RADIO_FAMILY_T20)
//TRIM right low
#define STORAGE_SWITCH_H
@@ -1296,6 +1357,43 @@
#define HARDWARE_SWITCH_O
#define SWITCHES_GPIO_REG_O GPIOG
#define SWITCHES_GPIO_PIN_O LL_GPIO_PIN_2 // PG.02
+#elif defined(RADIO_BUMBLEBEE)
+ // SW1
+ #define FUNCTION_SWITCH_1 SJ
+ #define STORAGE_SWITCH_J
+ #define HARDWARE_SWITCH_J
+ #define SWITCHES_GPIO_REG_J GPIOE
+ #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_15 // PE.15
+ // SW2
+ #define FUNCTION_SWITCH_2 SK
+ #define STORAGE_SWITCH_K
+ #define HARDWARE_SWITCH_K
+ #define SWITCHES_GPIO_REG_K GPIOE
+ #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_14 // PE.14
+ // SW3
+ #define FUNCTION_SWITCH_3 SL
+ #define STORAGE_SWITCH_L
+ #define HARDWARE_SWITCH_L
+ #define SWITCHES_GPIO_REG_L GPIOE
+ #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_13 // PE.13
+ // SW4
+ #define FUNCTION_SWITCH_4 SM
+ #define STORAGE_SWITCH_M
+ #define HARDWARE_SWITCH_M
+ #define SWITCHES_GPIO_REG_M GPIOE
+ #define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_10 // PE.10
+ // SW5
+ #define FUNCTION_SWITCH_5 SO
+ #define STORAGE_SWITCH_O
+ #define HARDWARE_SWITCH_O
+ #define SWITCHES_GPIO_REG_O GPIOE
+ #define SWITCHES_GPIO_PIN_O LL_GPIO_PIN_8 // PE.08
+ // SW6
+ #define FUNCTION_SWITCH_6 SP
+ #define STORAGE_SWITCH_P
+ #define HARDWARE_SWITCH_P
+ #define SWITCHES_GPIO_REG_P GPIOE
+ #define SWITCHES_GPIO_PIN_P LL_GPIO_PIN_12 // PE.12
#elif defined(RADIO_TPRO)
// SW3
#define FUNCTION_SWITCH_3 SI
@@ -1454,7 +1552,7 @@
#endif
// ADC
-#if !defined(RADIO_FAMILY_T20)
+#if !defined(RADIO_FAMILY_T20) && !defined(RADIO_BUMBLEBEE)
#define ADC_MAIN ADC1
#define ADC_DMA DMA2
#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0
@@ -1716,6 +1814,33 @@
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8
#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10
#define ADC_VREF_PREC2 330
+#elif defined(RADIO_BUMBLEBEE)
+ #define ADC_MAIN ADC3
+ #define ADC_DMA DMA2
+ #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2
+ #define ADC_DMA_STREAM LL_DMA_STREAM_0
+ #define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn
+ #define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
+ #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00
+ #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01
+ #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02
+ #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03
+ #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC123_IN0
+ #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC123_IN1
+ #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC123_IN2
+ #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC123_IN3
+ #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_15 // ADC3_IN15
+ #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC3_IN9
+ #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_IN14
+ #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_5 // PF.05
+ #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_3 // PF.03
+ #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_4 // PF.04
+ #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV)
+ #define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT1, ADC_GPIO_PIN_POT2, ADC_GPIO_PIN_BATT)
+ #define ADC_EXT ADC1
+ #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT }
+ #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
+ #define ADC_VREF_PREC2 300
#elif defined(RADIO_FAMILY_T20)
#define ADC_MAIN ADC3
#define ADC_DMA DMA2
@@ -1902,6 +2027,8 @@
#define ADC_DIRECTION {1, -1, 1, -1, 1, 1, 1}
#elif defined(RADIO_T12MAX)
#define ADC_DIRECTION {-1, 1, -1, 1, 1, 1, 1}
+#elif defined(RADIO_BUMBLEBEE)
+ #define ADC_DIRECTION {1,-1,1,-1, 1,1, 1}
#elif defined(RADIO_FAMILY_T20)
#define ADC_DIRECTION {1,-1,1,-1, -1,1,-1,-1,-1,-1}
#elif defined(RADIO_MT12)
@@ -1929,7 +2056,7 @@
#elif defined(RADIO_COMMANDO8)
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOD, 11) // PD.11
#define PWR_ON_GPIO GPIO_PIN(GPIOD, 10) // PD.10
-#elif defined(RADIO_FAMILY_T20)
+#elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOG, 5) // PG.05
#define PWR_ON_GPIO GPIO_PIN(GPIOG, 6) // PG.06
#elif defined(RADIO_V14) || defined(RADIO_V12)
@@ -1999,7 +2126,7 @@
#define LED_GREEN_GPIO GPIO_PIN(GPIOB, 1) // PB.01
#define LED_RED_GPIO GPIO_PIN(GPIOC, 5) // PC.05
#define LED_BLUE_GPIO GPIO_PIN(GPIOC, 4) // PC.04
-#elif defined(RADIO_FAMILY_T20)
+#elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define STATUS_LEDS
#define GPIO_LED_GPIO_ON gpio_set
#define GPIO_LED_GPIO_OFF gpio_clear
@@ -2078,7 +2205,17 @@
#endif
#if defined(FUNCTION_SWITCHES)
-#if defined(RADIO_FAMILY_T20)
+#if defined(RADIO_BUMBLEBEE)
+ #define GPIO_FSLED_GPIO_ON GPIO_SetBits
+ #define GPIO_FSLED_GPIO_OFF GPIO_ResetBits
+ #define FSLED_GPIO GPIOF
+ #define FSLED_GPIO_PIN_1 GPIO_PIN(FSLED_GPIO, 13)
+ #define FSLED_GPIO_PIN_2 GPIO_PIN(FSLED_GPIO, 6)
+ #define FSLED_GPIO_PIN_3 GPIO_PIN(FSLED_GPIO, 7)
+ #define FSLED_GPIO_PIN_4 GPIO_PIN(FSLED_GPIO, 10)
+ #define FSLED_GPIO_PIN_5 GPIO_PIN(FSLED_GPIO, 9)
+ #define FSLED_GPIO_PIN_6 GPIO_PIN(FSLED_GPIO, 8)
+#elif defined(RADIO_FAMILY_T20)
#define GPIO_FSLED_GPIO_ON GPIO_SetBits
#define GPIO_FSLED_GPIO_OFF GPIO_ResetBits
#define FSLED_GPIO GPIOF
@@ -2147,9 +2284,8 @@
#define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn
#define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler
#define INTMODULE_DMA_CHANNEL LL_DMA_CHANNEL_4
-#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) || defined(RADIO_V14) || defined(RADIO_V12)
-
-#if defined(RADIO_T20V2)
+#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) || defined(RADIO_V14) || defined(RADIO_V12) || defined(RADIO_BUMBLEBEE)
+#if defined(RADIO_T20V2) || defined(RADIO_BUMBLEBEE)
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOE, 4) // PE.04
#define INTMODULE_PWR_GPIO GPIO_PIN(GPIOC, 6) // PC.06
#else
@@ -2211,7 +2347,7 @@
#elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS)
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOF, 11) // PF.11
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
- #elif defined(RADIO_FAMILY_T20)
+ #elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOE, 4) // PE.04
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
#elif defined(RADIO_LR3PRO)
@@ -2295,7 +2431,7 @@
gpio_clear(EXTMODULE_PWR_GPIO); \
gpio_clear(EXTMODULE_RF_SWITCH_GPIO); \
} while (0)
- #elif defined(RADIO_FAMILY_T20)
+ #elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define EXTMODULE_PWR_GPIO GPIO_PIN(GPIOB, 1) // PB.01
#define EXTERNAL_MODULE_PWR_ON() gpio_set(EXTMODULE_PWR_GPIO)
#define EXTERNAL_MODULE_PWR_OFF() gpio_clear(EXTMODULE_PWR_GPIO)
@@ -2343,7 +2479,7 @@
#define TRAINER_IN_TIMER_Channel LL_TIM_CHANNEL_CH3
#define TRAINER_OUT_GPIO GPIO_PIN(GPIOC, 9) // PC.09
#define TRAINER_OUT_TIMER_Channel LL_TIM_CHANNEL_CH4
-#if defined(RADIO_FAMILY_T20)
+#if defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define TRAINER_DETECT_GPIO GPIO_PIN(GPIOE, 3) // PE.03
#elif defined(RADIO_MT12)
#define TRAINER_DETECT_GPIO GPIO_PIN(GPIOD, 14) // PD.14
@@ -2572,7 +2708,7 @@
#define BACKLIGHT_CCMR1 TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 // Channel 1, PWM
#define BACKLIGHT_CCER TIM_CCER_CC1E
#define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR1
-#elif defined(RADIO_T8) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14)
+#elif defined(RADIO_T8) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_BUMBLEBEE)
// No backlight: OLED display
#elif defined(RADIO_COMMANDO8)
#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
@@ -2598,10 +2734,10 @@
#endif
// LCD driver
-#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_MT12) || defined(RADIO_T12MAX) || defined(RADIO_V14) || defined(RADIO_V12)
+#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_MT12) || defined(RADIO_T12MAX) || defined(RADIO_V14) || defined(RADIO_V12) || defined(RADIO_BUMBLEBEE)
#define LCD_VERTICAL_INVERT
#endif
-#if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14)
+#if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_BUMBLEBEE)
#define LCD_HORIZONTAL_INVERT
#define OLED_SCREEN
#endif
@@ -2641,7 +2777,7 @@
#define LCD_CLK_GPIO GPIO_PIN(GPIOC, 10) // PC.10
#define LCD_A0_GPIO GPIO_PIN(GPIOC, 11) // PC.11
#define LCD_NCS_GPIO GPIO_PIN(GPIOA, 15) // PA.15
-#if defined(RADIO_FAMILY_T20)
+#if defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE)
#define LCD_RST_GPIO GPIO_PIN(GPIOA, 14) // PA.14
#else
#define LCD_RST_GPIO GPIO_PIN(GPIOD, 12) // PD.12
@@ -2726,7 +2862,7 @@
#endif
// SD - SPI2
-#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS)
+#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) || defined(RADIO_BUMBLEBEE)
// Using chip, so no detect
#else
#if defined(PCBXLITE) || defined(PCBX9LITE)
@@ -2786,7 +2922,7 @@
#endif
// Haptic
-#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2)|| defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) || defined(RADIO_V14) || defined(RADIO_V12)
+#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2)|| defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) || defined(RADIO_V14) || defined(RADIO_V12) || defined(RADIO_BUMBLEBEE)
#define HAPTIC_PWM
#define HAPTIC_GPIO GPIO_PIN(GPIOB, 3) // PB.03
#define HAPTIC_GPIO_AF GPIO_AF1
diff --git a/radio/src/targets/taranis/usb_descriptor.h b/radio/src/targets/taranis/usb_descriptor.h
index 8be765b22..1cf001348 100644
--- a/radio/src/targets/taranis/usb_descriptor.h
+++ b/radio/src/targets/taranis/usb_descriptor.h
@@ -69,6 +69,10 @@
#define USB_NAME "Jumper T-Pro S"
#define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'T', '-', 'P', 'r', 'o', ' ', 'S', ' ' /* 8 Bytes */
+#elif defined(RADIO_BUMBLEBEE)
+ #define USB_NAME "Jumper Bumblebee"
+ #define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */
+ #define USB_PRODUCT 'B', 'u', 'm', 'b', 'l', 'e', 'b', 'e' /* 8 Bytes */
#elif defined(RADIO_T14)
#define USB_NAME "Jumper T14"
#define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */
diff --git a/radio/util/hw_defs/legacy_names.py b/radio/util/hw_defs/legacy_names.py
index 9932712e0..76f2c70b4 100644
--- a/radio/util/hw_defs/legacy_names.py
+++ b/radio/util/hw_defs/legacy_names.py
@@ -431,7 +431,7 @@ LEGACY_NAMES = [
"lr3pro",
"nv14", "el18",
"t8", "t12",
- "tlite", "tlitef4", "tpro", "tprov2", "tpros",
+ "tlite", "tlitef4", "tpro", "tprov2", "tpros", "bumblebee",
"tx12", "tx12mk2",
"x7", "x7access",
"xlite", "xlites",
diff --git a/radio/util/hw_defs/pot_config.py b/radio/util/hw_defs/pot_config.py
index c28c3a545..2d3159065 100644
--- a/radio/util/hw_defs/pot_config.py
+++ b/radio/util/hw_defs/pot_config.py
@@ -67,6 +67,10 @@ POT_CONFIG = {
"P1": {"default": "POT_CENTER"},
"P2": {"default": "POT_CENTER"}
},
+ "bumblebee": {
+ "P1": {"default": "POT_CENTER"},
+ "P2": {"default": "POT_CENTER"}
+ },
"t20": {
"P1": {"default": "POT_CENTER"},
"P2": {"default": "POT_CENTER"},
diff --git a/radio/util/hw_defs/switch_config.py b/radio/util/hw_defs/switch_config.py
index 0cc530e2c..8dd9a8f55 100644
--- a/radio/util/hw_defs/switch_config.py
+++ b/radio/util/hw_defs/switch_config.py
@@ -221,6 +221,18 @@ SWITCH_CONFIG = {
"SD": {"default": "TOGGLE", "display": [1, 1]},
"SF": {"default": "2POS", "display": [1, 2]},
},
+ "bumblebee": {
+ # left side
+ "SA": {"default": "3POS", "display": [0, 0]},
+ "SC": {"default": "TOGGLE", "display": [0, 1]},
+ "SE": {"default": "2POS", "display": [0, 2]},
+ "SG": {"default": "TOGGLE", "display": [0, 3]},
+ # right side
+ "SB": {"default": "3POS", "display": [1, 0]},
+ "SD": {"default": "TOGGLE", "display": [1, 1]},
+ "SF": {"default": "2POS", "display": [1, 2]},
+ "SH": {"default": "TOGGLE", "display": [1, 3]},
+ },
"t20": {
# left side
"SA": {"default": "2POS", "display": [0, 0]},
diff --git a/tools/build-common.sh b/tools/build-common.sh
index 75d4af930..d1c8cd23d 100644
--- a/tools/build-common.sh
+++ b/tools/build-common.sh
@@ -53,6 +53,9 @@ get_target_build_options() {
tpros)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TPROS"
;;
+ bumblebee)
+ BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=BUMBLEBEE"
+ ;;
t20)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20"
;;
diff --git a/tools/build-companion.sh b/tools/build-companion.sh
index 70e4f8b27..7b4f939ef 100755
--- a/tools/build-companion.sh
+++ b/tools/build-companion.sh
@@ -70,7 +70,7 @@ declare -a simulator_plugins=(x9lite x9lites
x7 x7access
t8 t12 t12max tx12 tx12mk2
zorro commando8 boxer pocket mt12
- tlite tpro tprov2 tpros lr3pro t14
+ tlite tpro tprov2 tpros bumblebee lr3pro t14
x9d x9dp x9dp2019 x9e
xlite xlites
nv14 el18 pl18 pl18ev
diff --git a/tools/generate-hw-defs.sh b/tools/generate-hw-defs.sh
index 86b0ff550..767fa833b 100755
--- a/tools/generate-hw-defs.sh
+++ b/tools/generate-hw-defs.sh
@@ -9,7 +9,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
: "${SRCDIR:=$(dirname "$(pwd)/$0")/..}"
-: ${FLAVOR:="nv14;el18;t12;t12max;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;t20;t20v2;t14;lr3pro;mt12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v14;v12"}
+: ${FLAVOR:="nv14;el18;t12;t12max;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;bumblebee;t20;t20v2;t14;lr3pro;mt12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v14;v12"}
: ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"}
# wipe build directory clean