From 5767e9a7c16f9b4231847ac48126e92bc1fc68e9 Mon Sep 17 00:00:00 2001 From: elecpower Date: Fri, 2 Oct 2020 07:17:36 +1000 Subject: [PATCH 1/3] Do not apply offset when clearing model references --- companion/src/firmwares/modeldata.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/companion/src/firmwares/modeldata.cpp b/companion/src/firmwares/modeldata.cpp index e38958249..419418f3b 100644 --- a/companion/src/firmwares/modeldata.cpp +++ b/companion/src/firmwares/modeldata.cpp @@ -847,7 +847,7 @@ void ModelData::updateTypeIndexRef(R & curRef, const T type, const int idxAdj, c newRef.clear(); else { newRef.type = (T)defType; - newRef.index = defIndex + idxAdj; + newRef.index = defIndex; } break; case REF_UPD_ACT_SHIFT: @@ -904,7 +904,7 @@ void ModelData::updateTypeValueRef(R & curRef, const T type, const int idxAdj, c newRef.clear(); else { newRef.type = (T)defType; - newRef.value = defValue + idxAdj; + newRef.value = defValue; } break; case REF_UPD_ACT_SHIFT: @@ -989,7 +989,7 @@ void ModelData::updateAssignFunc(CustomFunctionData * cfd) case REF_UPD_TYPE_TIMER: if (cfd->func < FuncSetTimer1 || cfd->func > FuncSetTimer3) // TODO refactor to FuncSetTimerLast return; - idxAdj = FuncSetTimer1 - 2; // reverse earlier offset requiured for rawsource + idxAdj = FuncSetTimer1 - 2; // reverse earlier offset required for rawsource break; default: return; From 9901a4a0db9466426212a128645f2116cfcb67cb Mon Sep 17 00:00:00 2001 From: elecpower Date: Sun, 8 Nov 2020 06:50:43 +1100 Subject: [PATCH 2/3] Add missing update refs for reset telemetry sensor --- companion/src/firmwares/modeldata.cpp | 65 ++++++++++++++++++++++++++- companion/src/firmwares/modeldata.h | 1 + 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/companion/src/firmwares/modeldata.cpp b/companion/src/firmwares/modeldata.cpp index 419418f3b..83db37b04 100644 --- a/companion/src/firmwares/modeldata.cpp +++ b/companion/src/firmwares/modeldata.cpp @@ -728,6 +728,9 @@ int ModelData::updateReference() if (cfd->param == 0) cfd->clear(); } + else if (cfd->func == FuncReset) { + updateResetParam(cfd); + } } } } @@ -972,7 +975,7 @@ void ModelData::updateAssignFunc(CustomFunctionData * cfd) { const int invalidateRef = -1; int newRef = (int)cfd->func; - int idxAdj; + int idxAdj = 0; switch (updRefInfo.type) { @@ -1374,3 +1377,63 @@ void ModelData::sortMixes() memcpy(&mixData[0], &sortedMixData[0], CPN_MAX_MIXERS * sizeof(MixData)); } + +void ModelData::updateResetParam(CustomFunctionData * cfd) +{ + + if (cfd->func != FuncReset) + return; + + const int invalidateRef = -1; + int newRef = cfd->param; + int idxAdj = 0; + + switch (updRefInfo.type) + { + case REF_UPD_TYPE_SENSOR: + idxAdj = 5/*3 Timers + Flight + Telemetery*/ + getCurrentFirmware()->getCapability(RotaryEncoders); + if (cfd->param < idxAdj) + return; + break; + default: + return; + } + + switch (updRefInfo.action) + { + case REF_UPD_ACT_CLEAR: + if (newRef != (updRefInfo.index1 + idxAdj)) + return; + newRef = invalidateRef; + break; + case REF_UPD_ACT_SHIFT: + if (newRef < (updRefInfo.index1 + idxAdj)) + return; + + newRef += updRefInfo.shift; + + if (newRef < (updRefInfo.index1 + idxAdj) || newRef > (updRefInfo.maxindex + idxAdj)) + newRef = invalidateRef; + break; + case REF_UPD_ACT_SWAP: + if (newRef == updRefInfo.index1 + idxAdj) + newRef = updRefInfo.index2 + idxAdj; + else if (newRef == updRefInfo.index2 + idxAdj) + newRef = updRefInfo.index1 + idxAdj; + break; + default: + qDebug() << "Error - unhandled action:" << updRefInfo.action; + return; + } + + if (newRef == invalidateRef) { + cfd->clear(); + //qDebug() << "Function cleared"; + updRefInfo.updcnt++; + } + else if (cfd->param != newRef) { + //qDebug() << "Updated reference:" << cfd->param << " -> " << newRef; + cfd->param = newRef; + updRefInfo.updcnt++; + } +} diff --git a/companion/src/firmwares/modeldata.h b/companion/src/firmwares/modeldata.h index 558b848df..1ada78636 100644 --- a/companion/src/firmwares/modeldata.h +++ b/companion/src/firmwares/modeldata.h @@ -337,6 +337,7 @@ class ModelData { value = swtch.toValue(); } void sortMixes(); + void updateResetParam(CustomFunctionData * cfd); }; #endif // MODELDATA_H From d6dcc6ccc4f2faa684c880cc31e9c7f80b50f162 Mon Sep 17 00:00:00 2001 From: elecpower Date: Sun, 8 Nov 2020 06:57:02 +1100 Subject: [PATCH 3/3] Use firmware capability for reset tele upd refs --- companion/src/firmwares/modeldata.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/companion/src/firmwares/modeldata.cpp b/companion/src/firmwares/modeldata.cpp index 83db37b04..930df092c 100644 --- a/companion/src/firmwares/modeldata.cpp +++ b/companion/src/firmwares/modeldata.cpp @@ -723,7 +723,8 @@ int ModelData::updateReference() updateAssignFunc(cfd); if (!cfd->isEmpty()) { updateSwitchRef(cfd->swtch); - if (cfd->func == FuncVolume || cfd->func == FuncBacklight || cfd->func == FuncPlayValue || (cfd->func >= FuncAdjustGV1 && cfd->func <= FuncAdjustGVLast && (cfd->adjustMode == FUNC_ADJUST_GVAR_GVAR || cfd->adjustMode == FUNC_ADJUST_GVAR_SOURCE))) { + if (cfd->func == FuncVolume || cfd->func == FuncBacklight || cfd->func == FuncPlayValue || + (cfd->func >= FuncAdjustGV1 && cfd->func <= FuncAdjustGVLast && (cfd->adjustMode == FUNC_ADJUST_GVAR_GVAR || cfd->adjustMode == FUNC_ADJUST_GVAR_SOURCE))) { updateSourceIntRef(cfd->param); if (cfd->param == 0) cfd->clear(); @@ -1387,12 +1388,13 @@ void ModelData::updateResetParam(CustomFunctionData * cfd) const int invalidateRef = -1; int newRef = cfd->param; int idxAdj = 0; + Firmware *firmware = getCurrentFirmware(); switch (updRefInfo.type) { case REF_UPD_TYPE_SENSOR: - idxAdj = 5/*3 Timers + Flight + Telemetery*/ + getCurrentFirmware()->getCapability(RotaryEncoders); - if (cfd->param < idxAdj) + idxAdj = 5/*3 Timers + Flight + Telemetery*/ + firmware->getCapability(RotaryEncoders); + if (cfd->param < idxAdj || cfd->param > (idxAdj + firmware->getCapability(Sensors))) return; break; default: