diff --git a/src/PositionController.cpp b/src/PositionController.cpp index 8817c9e..8288b1e 100644 --- a/src/PositionController.cpp +++ b/src/PositionController.cpp @@ -506,7 +506,7 @@ void PositionController::setPositionLowerLimit(uint8_t positionLimit, bool moveT } else if (targetPosition() > positionLimit || moveToLimit) { - _blockedPosition = targetPosition(); + if (_blockedPosition == NOTUSED) _blockedPosition = targetPosition(); _calculatedTargetPosition = positionLimit; _setPosition = positionLimit; logDebugP("Position limit forces new position %d, store %d", (int)_setPosition, (int)_blockedPosition); @@ -542,7 +542,7 @@ void PositionController::setSlatLowerLimit(uint8_t slatLimit, bool moveToLimit) } else if (slat() > slatLimit || moveToLimit) { - _blockedSlat = slat(); + if (_blockedSlat == NOTUSED) _blockedSlat = slat(); _setSlat = slatLimit; logDebugP("Slat limit forces new slat %d, store %d", (int)_setSlat, (int)_blockedSlat); } diff --git a/src/ShutterControllerChannel.cpp b/src/ShutterControllerChannel.cpp index 4c9c179..a0cb11e 100755 --- a/src/ShutterControllerChannel.cpp +++ b/src/ShutterControllerChannel.cpp @@ -61,7 +61,7 @@ void ShutterControllerChannel::setup() _modeManual = new ModeManual(*this); for (uint8_t i = 1; i <= ParamSHC_CWindowOpenCount; i++) { - _windowOpenHandlers.push_back(new WindowOpenHandler(_channelIndex, i, ParamSHC_CWindowOpenCount != i)); + _windowOpenHandlers.push_back(new WindowOpenHandler(_channelIndex, i, i == 2)); // ParamSHC_CWindowOpenCount != i)); } _modes.push_back(_modeManual); @@ -411,10 +411,12 @@ void ShutterControllerChannel::execute(CallContext &callContext) if (nextWindowOpenHandler != nullptr) logInfoP("Start window open %s", nextWindowOpenHandler->name()); else + { logInfoP("Stop window open"); + if (_currentWindowOpenHandler != nullptr) + _currentWindowOpenHandler->stop(callContext, nextWindowOpenHandler, _positionController); + } } - if (_currentWindowOpenHandler != nullptr) - _currentWindowOpenHandler->stop(callContext, nextWindowOpenHandler, _positionController); _currentWindowOpenHandler = nextWindowOpenHandler; if (_currentWindowOpenHandler != nullptr) _currentWindowOpenHandler->start(callContext, _currentWindowOpenHandler, _positionController); @@ -466,7 +468,7 @@ void ShutterControllerChannel::execute(CallContext &callContext) } logIndentDown(); } - if (_currentMode != nextMode) + if (_currentMode != nextMode && nextMode != nullptr) { sceneChanged = true; if (nextMode == _modeManual) diff --git a/src/ShutterControllerModule.share.xml b/src/ShutterControllerModule.share.xml index 1ce7989..30a6277 100755 --- a/src/ShutterControllerModule.share.xml +++ b/src/ShutterControllerModule.share.xml @@ -6,9 +6,29 @@ + + + + + + + + + + + + + + + + + + + + @@ -552,7 +572,7 @@ - + diff --git a/src/ShutterControllerModule.templ.xml b/src/ShutterControllerModule.templ.xml index 237a521..899e808 100755 --- a/src/ShutterControllerModule.templ.xml +++ b/src/ShutterControllerModule.templ.xml @@ -19,30 +19,7 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/WindowOpenHandler.cpp b/src/WindowOpenHandler.cpp index 5865f2a..a70fabc 100644 --- a/src/WindowOpenHandler.cpp +++ b/src/WindowOpenHandler.cpp @@ -6,15 +6,15 @@ #ifdef SHC_CWindowOpenPosition2 // redefine SHC_ParamCalcIndex to add offset for Window Mode 2 #undef SHC_ParamCalcIndex -#define SHC_ParamCalcIndex(index) (index + SHC_ParamBlockOffset + _channelIndex * SHC_ParamBlockSize + (SHC_CWindowOpenPosition2 - SHC_CWindowOpenPosition1) * (_index - 1)) +#define SHC_ParamCalcIndex(index) (index + SHC_ParamBlockOffset + _channelIndex * SHC_ParamBlockSize + (SHC_CWindowOpenPosition2 - SHC_CWindowOpenPosition1) * (1 - _isTiltHandler)) // redefine SHC_KoCalcNumber to add offset for Window Mode 2 #undef SHC_KoCalcNumber -#define SHC_KoCalcNumber(index) (index + SHC_KoBlockOffset + _channelIndex * SHC_KoBlockSize + (_index - 1) * (SHC_KoCWindowOpenModeActive2 - SHC_KoCWindowOpenModeActive1)) +#define SHC_KoCalcNumber(index) (index + SHC_KoBlockOffset + _channelIndex * SHC_KoBlockSize + (_isTiltHandler) * (SHC_KoCWindowOpenModeActive2 - SHC_KoCWindowOpenModeActive1)) // redefine SHC_KoCalcIndex to add offset for Window Mode 2 #undef SHC_KoCalcIndex -#define SHC_KoCalcIndex(number) ((number >= SHC_KoCalcNumber(0) && number < SHC_KoCalcNumber(SHC_KoBlockSize)) ? (number - SHC_KoBlockOffset - (_index - 1) * (SHC_KoCWindowOpenModeActive2 - SHC_KoCWindowOpenModeActive1)) % SHC_KoBlockSize : -1) +#define SHC_KoCalcIndex(number) ((number >= SHC_KoCalcNumber(0) && number < SHC_KoCalcNumber(SHC_KoBlockSize)) ? (number - SHC_KoBlockOffset - (_isTiltHandler) * (SHC_KoCWindowOpenModeActive2 - SHC_KoCWindowOpenModeActive1)) % SHC_KoBlockSize : -1) #endif