From 78650bb662096233efd896a181cd41a1648231a4 Mon Sep 17 00:00:00 2001 From: Kilrah Date: Mon, 20 Aug 2018 22:15:10 +0200 Subject: [PATCH] Companion support --- companion/src/firmwares/boards.cpp | 24 ++++++++++++++++--- companion/src/firmwares/boards.h | 8 ++++--- companion/src/firmwares/opentx/opentxeeprom.h | 1 + .../src/firmwares/opentx/opentxinterface.cpp | 16 +++++++++++++ companion/src/simulation/simulatorwidget.cpp | 3 ++- radio/src/main_arm.cpp | 2 +- radio/src/sdcard.h | 3 +++ radio/src/targets/simu/simpgmspace.cpp | 4 ++++ radio/src/targets/taranis/CMakeLists.txt | 2 +- 9 files changed, 54 insertions(+), 9 deletions(-) diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 25b33b98d..a51151d4f 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -96,6 +96,7 @@ const int Boards::getEEpromSize(Board::Type board) case BOARD_9XRPRO: case BOARD_AR9X: return EESIZE_9XRPRO; + case BOARD_TARANIS_XLITES: case BOARD_TARANIS_XLITE: case BOARD_TARANIS_X7: case BOARD_TARANIS_X9D: @@ -124,6 +125,7 @@ const int Boards::getFlashSize(Type board) case BOARD_9XRPRO: case BOARD_AR9X: return FSIZE_9XRPRO; + case BOARD_TARANIS_XLITES: case BOARD_TARANIS_XLITE: case BOARD_TARANIS_X7: case BOARD_TARANIS_X9D: @@ -145,7 +147,19 @@ const SwitchInfo Boards::getSwitchInfo(Board::Type board, int index) if (index < 0) return {SWITCH_NOT_AVAILABLE, CPN_STR_UNKNOWN_ITEM}; - if (IS_TARANIS_XLITE(board)) { + if (IS_TARANIS_XLITES(board)) { + const Board::SwitchInfo switches[] = { + {SWITCH_3POS, "SA"}, + {SWITCH_3POS, "SB"}, + {SWITCH_2POS, "SC"}, + {SWITCH_2POS, "SD"}, + {SWITCH_TOGGLE, "SE"}, + {SWITCH_TOGGLE, "SF"} + }; + if (index < DIM(switches)) + return switches[index]; + } + else if (IS_TARANIS_XLITE(board)) { const Board::SwitchInfo switches[] = { {SWITCH_3POS, "SA"}, {SWITCH_3POS, "SB"}, @@ -155,7 +169,7 @@ const SwitchInfo Boards::getSwitchInfo(Board::Type board, int index) if (index < DIM(switches)) return switches[index]; } - if (IS_TARANIS_X7(board)) { + else if (IS_TARANIS_X7(board)) { const Board::SwitchInfo switches[] = { {SWITCH_3POS, "SA"}, {SWITCH_3POS, "SB"}, @@ -246,7 +260,7 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) return getCapability(board, Board::Sticks) + getCapability(board, Board::Pots) + getCapability(board, Board::Sliders) + getCapability(board, Board::MouseAnalogs); case MultiposPots: - return IS_HORUS_OR_TARANIS(board) ? 3 : 0; + return IS_HORUS_OR_TARANIS(board) ? getCapability(board, Board::Pots) : 0; case MultiposPotsPositions: return IS_HORUS_OR_TARANIS(board) ? 6 : 0; @@ -256,6 +270,8 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) return 18; else if (IS_TARANIS_X7(board)) return 6; + else if (IS_TARANIS_XLITES(board)) + return 6; else if (IS_TARANIS_XLITE(board)) return 4; else if (IS_HORUS_OR_TARANIS(board)) @@ -405,6 +421,8 @@ const QString Boards::getBoardName(Board::Type board) return "Taranis X7/X7S"; case BOARD_TARANIS_XLITE: return "Taranis X-Lite"; + case BOARD_TARANIS_XLITES: + return "Taranis X-Lite S"; case BOARD_TARANIS_X9D: return "Taranis X9D"; case BOARD_TARANIS_X9DP: diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 885da2fc3..87f9733e0 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -46,6 +46,7 @@ namespace Board { BOARD_X12S, BOARD_X10, BOARD_TARANIS_XLITE, + BOARD_TARANIS_XLITES, BOARD_ENUM_COUNT }; @@ -186,14 +187,15 @@ class Boards #define IS_2560(board) (board==Board::BOARD_GRUVIN9X || board==Board::BOARD_MEGA2560) #define IS_SKY9X(board) (board==Board::BOARD_SKY9X || board==Board::BOARD_9XRPRO || board==Board::BOARD_AR9X) #define IS_9XRPRO(board) (board==Board::BOARD_9XRPRO) -#define IS_TARANIS_XLITE(board) (board==Board::BOARD_TARANIS_XLITE) +#define IS_TARANIS_XLITE(board) (board==Board::BOARD_TARANIS_XLITE || board==Board::BOARD_TARANIS_XLITES) +#define IS_TARANIS_XLITES(board) (board==Board::BOARD_TARANIS_XLITES) #define IS_TARANIS_X7(board) (board==Board::BOARD_TARANIS_X7) #define IS_TARANIS_X9(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9E) #define IS_TARANIS_X9D(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP) #define IS_TARANIS_PLUS(board) (board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9E) #define IS_TARANIS_X9E(board) (board==Board::BOARD_TARANIS_X9E) -#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board)) -#define IS_TARANIS_SMALL(board) (board==Board::BOARD_TARANIS_X7 || board==Board::BOARD_TARANIS_XLITE) +#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board) || IS_TARANIS_XLITES(board)) +#define IS_TARANIS_SMALL(board) (board==Board::BOARD_TARANIS_X7 || board==Board::BOARD_TARANIS_XLITE || board==Board::BOARD_TARANIS_XLITES) #define IS_TARANIS_NOT_X9E(board) (IS_TARANIS(board) && !IS_TARANIS_X9E(board)) #define IS_HORUS_X12S(board) (board==Board::BOARD_X12S) #define IS_HORUS_X10(board) (board==Board::BOARD_X10) diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h index 35c571787..ee840cc77 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -33,6 +33,7 @@ #define TARANIS_X9E_VARIANT 0x8000 #define TARANIS_X7_VARIANT 0x4000 #define TARANIS_XLITE_VARIANT 0x2000 +#define TARANIS_XLITES_VARIANT 0x1000 #define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT) #define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS) diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index c9c35e251..c1b449941 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -317,6 +317,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u else if (IS_TARANIS_X7(board)) { variant |= TARANIS_X7_VARIANT; } + else if (IS_TARANIS_XLITES(board)) { + variant |= TARANIS_XLITES_VARIANT; + } else if (IS_TARANIS_XLITE(board)) { variant |= TARANIS_XLITE_VARIANT; } @@ -691,6 +694,8 @@ int OpenTxFirmware::getCapability(::Capability capability) return TARANIS_X9E_VARIANT; else if (IS_TARANIS_X7(board)) return TARANIS_X7_VARIANT; + else if (IS_TARANIS_XLITES(board)) + return TARANIS_XLITES_VARIANT; else if (IS_TARANIS_XLITE(board)) return TARANIS_XLITE_VARIANT; else @@ -921,6 +926,11 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari variantError = true; } } + else if (IS_TARANIS_XLITES(board)) { + if (variant != TARANIS_XLITES_VARIANT) { + variantError = true; + } + } else if (IS_TARANIS_XLITE(board)) { if (variant != TARANIS_XLITE_VARIANT) { variantError = true; @@ -1165,6 +1175,12 @@ void registerOpenTxFirmwares() addOpenTxTaranisOptions(firmware, false); registerOpenTxFirmware(firmware); + /* FrSky X-Lite S board */ + firmware = new OpenTxFirmware("opentx-xlites", QCoreApplication::translate("Firmware", "FrSky Taranis X-Lite S"), BOARD_TARANIS_XLITES); + // firmware->addOption("stdr9m", QCoreApplication::translate("Firmware", "Use JR-sized R9M module")); + addOpenTxTaranisOptions(firmware); + registerOpenTxFirmware(firmware); + /* FrSky X-Lite board */ firmware = new OpenTxFirmware("opentx-xlite", Firmware::tr("FrSky Taranis X-Lite"), BOARD_TARANIS_XLITE); // firmware->addOption("stdr9m", Firmware::tr("Use JR-sized R9M module")); diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index 4ad053c73..5d059f4db 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -77,6 +77,7 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato radioUiWidget = new SimulatedUIWidgetX9(simulator, this); break; case Board::BOARD_TARANIS_XLITE: + case Board::BOARD_TARANIS_XLITES: radioUiWidget = new SimulatedUIWidgetXLITE(simulator, this); break; case Board::BOARD_TARANIS_X9E: @@ -108,7 +109,7 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato vJoyLeft = new VirtualJoystickWidget(this, 'L'); ui->leftStickLayout->addWidget(vJoyLeft); - vJoyRight = new VirtualJoystickWidget(this, 'R', (m_board == Board::BOARD_TARANIS_XLITE ? false : true)); // TODO: maybe remove trims for both joysticks and add a cross in the middle? + vJoyRight = new VirtualJoystickWidget(this, 'R', (m_board == Board::BOARD_TARANIS_XLITE || m_board == Board::BOARD_TARANIS_XLITES ? false : true)); // TODO: maybe remove trims for both joysticks and add a cross in the middle? ui->rightStickLayout->addWidget(vJoyRight); connect(vJoyLeft, &VirtualJoystickWidget::valueChange, this, &SimulatorWidget::onRadioWidgetValueChange); diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index f68226fcc..c02786d46 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -74,7 +74,7 @@ void handleUsbConnection() #endif // defined(STM32) && !defined(SIMU) } -#if defined(JACK_DETECT_GPIO) +#if defined(JACK_DETECT_GPIO) && !defined(SIMU) bool isJackPlugged() { // debounce diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index 4211e395f..cebd3c2eb 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -129,6 +129,9 @@ const char * getFileExtension(const char * filename, uint8_t size=0, uint8_t ext #elif defined(PCBX9E) #define OTX_FOURCC 0x3578746F // otx for Taranis X9E #define O9X_FOURCC 0x3378396F // o9x for Taranis X9E +#elif defined(PCBXLITES) + #define OTX_FOURCC 0x3B78746F // otx for Taranis X-Lite S + #define O9X_FOURCC 0x3B78396F // o9x for Taranis X-Lite S #elif defined(PCBXLITE) #define OTX_FOURCC 0x3978746F // otx for Taranis X-Lite #define O9X_FOURCC 0x3978396F // o9x for Taranis X-Lite diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index dedbaec25..cab8c5008 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -693,6 +693,10 @@ uint32_t isBootloaderStart(const uint8_t * block) { return 1; } void LCD_ControlLight(uint16_t dutyCycle) { } #endif +#if defined(PCBXLITES) +bool isJackPlugged() { return false; } +#endif + void serialPrintf(const char * format, ...) { } void serialCrlf() { } void serialPutc(char c) { } diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 8d71b30c3..262c4ee5a 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -108,7 +108,7 @@ elseif(PCB STREQUAL XLITES) set(LUA_EXPORT lua_export_xlite) set(FLAVOUR xlites) add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME) - add_definitions(-DEEPROM_VARIANT=0x2000) + add_definitions(-DEEPROM_VARIANT=0x1000) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) set(NAVIGATION_TYPE xlite)