(Prepare for devel) Fix: Do NOT Send when Updating KO Failed on Value Conversion

This commit is contained in:
Cornelius Köpp 2024-11-02 23:31:08 +01:00
parent a7d344fae9
commit 9ee6e11ca5

View File

@ -478,15 +478,30 @@ namespace Knx
ComFlag _commFlag : 7; ComFlag _commFlag : 7;
uint8_t* _data = 0; uint8_t* _data = 0;
uint8_t _dataLength = 0; uint8_t _dataLength = 0;
/**
* set the current value of the group object and show success.
* @param value the value the group object is set to
* @param type the datapoint type used for the conversion.
*
* The parameters must fit the group object. Otherwise it will stay unchanged.
*
* @returns true if the value of the group object was updated after successful conversion.
*/
template<class DPT> bool _valueNoSend(const DPT& value);
}; };
bool operator==(const GroupObject& lhs, const GroupObject& rhs); bool operator==(const GroupObject& lhs, const GroupObject& rhs);
template<class DPT> void GroupObject::value(const DPT& value) template<class DPT> void GroupObject::value(const DPT& value)
{ {
valueNoSend(value); if (_valueNoSend(value))
{
// write on successful conversion/setting value only
objectWritten(); objectWritten();
} }
}
template<class DPT> DPT GroupObject::value() template<class DPT> DPT GroupObject::value()
{ {
@ -508,6 +523,12 @@ namespace Knx
} }
template<class DPT> void GroupObject::valueNoSend(const DPT& value) template<class DPT> void GroupObject::valueNoSend(const DPT& value)
{
// ignore actual updating TODO check replacing valueNoSend with _valueNoSend
_valueNoSend(value);
}
template<class DPT> bool GroupObject::_valueNoSend(const KNXValue& value)
{ {
if (value.size() != sizeCode()) if (value.size() != sizeCode())
return; return;
@ -518,6 +539,8 @@ namespace Knx
// initialize on succesful conversion only // initialize on succesful conversion only
if (encodingDone && _uninitialized) if (encodingDone && _uninitialized)
commFlag(Ok); commFlag(Ok);
return encodingDone;
} }
template<class DPT> bool GroupObject::valueNoSendCompare(const DPT& value) template<class DPT> bool GroupObject::valueNoSendCompare(const DPT& value)
@ -528,8 +551,7 @@ namespace Knx
if (_uninitialized) if (_uninitialized)
{ {
// always set first value // always set first value
this->valueNoSend(value); return _valueNoSend(value);
return true;
} }
else else
{ {