From 48fbdbb7a94e3e527beb64cd012cac7021ff847d Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 4 Jun 2019 18:14:09 +0200 Subject: [PATCH] ACCESS support started in Companion --- companion/src/firmwares/boards.h | 3 ++- companion/src/firmwares/modeldata.cpp | 6 +++++- companion/src/firmwares/moduledata.cpp | 1 + companion/src/firmwares/moduledata.h | 6 +++++- companion/src/firmwares/opentx/opentxeeprom.cpp | 8 ++++---- companion/src/modeledit/setup.cpp | 13 +++++++++---- 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index eb70dbb0c..7b0299eb2 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -195,7 +195,7 @@ class Boards #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_X9LITE(board) (board==Board::BOARD_TARANIS_X9LITE) +#define IS_TARANIS_X9LITE(board) (board==Board::BOARD_TARANIS_X9LITE) #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) @@ -208,6 +208,7 @@ class Boards #define IS_HORUS_OR_TARANIS(board) (IS_HORUS(board) || IS_TARANIS(board)) #define IS_STM32(board) (IS_TARANIS(board) || IS_HORUS(board)) #define IS_ARM(board) (IS_STM32(board) || IS_SKY9X(board)) +#define IS_ACCESS_RADIO(board) (IS_TARANIS_X9LITE(board) || IS_TARANIS_XLITES(board)) #define HAS_LARGE_LCD(board) (IS_HORUS(board) || IS_TARANIS_X9(board)) #endif // _BOARDS_H_ diff --git a/companion/src/firmwares/modeldata.cpp b/companion/src/firmwares/modeldata.cpp index 2a596e2ba..aea7d88e6 100644 --- a/companion/src/firmwares/modeldata.cpp +++ b/companion/src/firmwares/modeldata.cpp @@ -164,7 +164,11 @@ void ModelData::clear() moduleData[1].ppm.delay = 300; moduleData[2].ppm.delay = 300; int board = getCurrentBoard(); - if (IS_HORUS_OR_TARANIS(board)) { + if (IS_ACCESS_RADIO(board)) { + moduleData[0].protocol = PULSES_ACCESS_ISRM; + moduleData[1].protocol = PULSES_OFF; + } + else if (IS_HORUS_OR_TARANIS(board)) { moduleData[0].protocol = PULSES_PXX_XJT_X16; moduleData[1].protocol = PULSES_OFF; } diff --git a/companion/src/firmwares/moduledata.cpp b/companion/src/firmwares/moduledata.cpp index 6828ebe09..cd72f01f1 100644 --- a/companion/src/firmwares/moduledata.cpp +++ b/companion/src/firmwares/moduledata.cpp @@ -104,6 +104,7 @@ QString ModuleData::protocolToString(unsigned protocol) "TBS Crossfire", "DIY Multiprotocol Module", "FrSky PXX R9M", + "FrSky PXX R9M Lite", "SBUS output at VBat", "FrSky ACCESS ISRM", "FrSky ACCESS R9M", diff --git a/companion/src/firmwares/moduledata.h b/companion/src/firmwares/moduledata.h index 06f48f144..c5148cde5 100644 --- a/companion/src/firmwares/moduledata.h +++ b/companion/src/firmwares/moduledata.h @@ -137,7 +137,6 @@ class ModuleData { unsigned int failsafeMode; int failsafeChannels[CPN_MAX_CHNOUT]; - struct { int delay; bool pulsePol; // false = positive @@ -161,6 +160,11 @@ class ModuleData { bool sport_out; } pxx; + struct { + // unsigned int receivers; + // char receiverName[3][8]; + char data[1 + 3 * 8]; + } access; void clear() { memset(this, 0, sizeof(ModuleData)); } void convert(RadioDataConversionState & cstate); diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 98fb22441..5968af129 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2207,7 +2207,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig internalField.Append(new SignedField<8>(this, modelData.moduleData[module].ppm.frameLength)); if (version >= 219) { // TODO ACCESS - internalField.Append(new SpareBitsField<(1 + 3 * 8 - 2) * 8>(this)); + internalField.Append(new CharField<1 + 3 * 8 - 2>(this, modelData.moduleData[module].access.data)); } } @@ -2310,10 +2310,10 @@ void OpenTxModelData::beforeExport() { // qDebug() << QString("before export model") << modelData.name; - for (int module=0; module<3; module++) { + for (int module=0; module<2; module++) { if ((modelData.moduleData[module].protocol >= PULSES_PXX_XJT_X16 && modelData.moduleData[module].protocol <= PULSES_PXX_XJT_LR12) || modelData.moduleData[module].protocol == PULSES_PXX_R9M) { - if (! (modelData.moduleData[module].protocol == PULSES_PXX_R9M)) { + if (modelData.moduleData[module].protocol != PULSES_PXX_R9M) { subprotocols[module] = modelData.moduleData[module].protocol - PULSES_PXX_XJT_X16; } int pxxByte = (modelData.moduleData[module].pxx.power & 0x03) @@ -2362,7 +2362,7 @@ void OpenTxModelData::afterImport() modelData.moduleData[0].protocol = PULSES_PXX_XJT_X16; } - for (int module=0; module<3; module++) { + for (int module=0; module<2; module++) { if (modelData.moduleData[module].protocol == PULSES_PXX_XJT_X16 || modelData.moduleData[module].protocol == PULSES_LP45) { if (subprotocols[module] >= 0) modelData.moduleData[module].protocol += subprotocols[module]; diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index e4a3bf2a0..fead754c7 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -255,8 +255,10 @@ ModulePanel::~ModulePanel() bool ModulePanel::moduleHasFailsafes() { - return (((PulsesProtocol)module.protocol == PulsesProtocol::PULSES_PXX_XJT_X16 || (PulsesProtocol)module.protocol == PulsesProtocol::PULSES_PXX_R9M) - && firmware->getCapability(HasFailsafe)); + return firmware->getCapability(HasFailsafe) && ( + (PulsesProtocol)module.protocol == PulsesProtocol::PULSES_ACCESS_ISRM || + (PulsesProtocol)module.protocol == PulsesProtocol::PULSES_PXX_XJT_X16 || + (PulsesProtocol)module.protocol == PulsesProtocol::PULSES_PXX_R9M); } void ModulePanel::setupFailsafes() @@ -362,6 +364,9 @@ void ModulePanel::update() if (moduleIdx >= 0) { mask |= MASK_PROTOCOL; switch (protocol) { + case PULSES_ACCESS_ISRM: + mask |= MASK_CHANNELS_RANGE | MASK_CHANNELS_COUNT | MASK_RX_NUMBER; + break; case PULSES_PXX_R9M: mask |= MASK_R9M | MASK_SUBTYPES; case PULSES_PXX_XJT_X16: @@ -371,7 +376,7 @@ void ModulePanel::update() mask |= MASK_CHANNELS_RANGE | MASK_CHANNELS_COUNT; if (protocol==PULSES_PXX_XJT_X16 || protocol==PULSES_PXX_XJT_LR12 || protocol==PULSES_PXX_R9M) mask |= MASK_RX_NUMBER; - if ((IS_HORUS(board) || IS_TARANIS_XLITE(board)) && moduleIdx==0) + if ((IS_HORUS(board) || board == Board::BOARD_TARANIS_XLITE) && moduleIdx == 0) mask |= MASK_ANTENNA; break; case PULSES_LP45: @@ -555,7 +560,7 @@ void ModulePanel::update() if (mask & MASK_CHANNELS_RANGE) { ui->channelsStart->setMaximum(33 - ui->channelsCount->value()); - ui->channelsCount->setMaximum(qMin(16, 33-ui->channelsStart->value())); + ui->channelsCount->setMaximum(qMin(24, 33-ui->channelsStart->value())); } }