From 1cb2d56de159c356e494e36b78f399f5fbcf8cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cornelius=20K=C3=B6pp?= Date: Fri, 8 Nov 2024 23:52:43 +0100 Subject: [PATCH] Group-Object Value Update: Return Indication for Success/Fail of Conversion to DPT Remove _valueNoSend(..) as valueNoSend(..) is now the same --- src/knx/group_object.cpp | 24 ++++++++++-------------- src/knx/group_object.h | 35 ++++++++++++++++------------------- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/src/knx/group_object.cpp b/src/knx/group_object.cpp index cc5eaa31..6b9143db 100644 --- a/src/knx/group_object.cpp +++ b/src/knx/group_object.cpp @@ -224,13 +224,15 @@ GroupObjectUpdatedHandler GroupObject::callback() } #endif -void GroupObject::value(const KNXValue& value, const Dpt& type) +bool GroupObject::value(const KNXValue& value, const Dpt& type) { - if (_valueNoSend(value, type)) + if (valueNoSend(value, type)) { // write on successful conversion/setting value only objectWritten(); + return true; } + return false; } @@ -265,9 +267,9 @@ bool GroupObject::tryValue(KNXValue& value) } -void GroupObject::value(const KNXValue& value) +bool GroupObject::value(const KNXValue& value) { - this->value(value, _datapointType); + return this->value(value, _datapointType); } @@ -277,19 +279,13 @@ KNXValue GroupObject::value() } -void GroupObject::valueNoSend(const KNXValue& value) +bool GroupObject::valueNoSend(const KNXValue& value) { - valueNoSend(value, _datapointType); + return valueNoSend(value, _datapointType); } #endif -void GroupObject::valueNoSend(const KNXValue& value, const Dpt& type) -{ - // ignore actual updating TODO check replacing valueNoSend with _valueNoSend - _valueNoSend(value, type); -} - -bool GroupObject::_valueNoSend(const KNXValue& value, const Dpt& type) +bool GroupObject::valueNoSend(const KNXValue& value, const Dpt& type) { const bool encodingDone = KNX_Encode_Value(value, _data, _dataLength, type); @@ -305,7 +301,7 @@ bool GroupObject::valueNoSendCompare(const KNXValue& value, const Dpt& type) if (_commFlagEx.uninitialized) { // always set first value - return _valueNoSend(value, type); + return valueNoSend(value, type); } else { diff --git a/src/knx/group_object.h b/src/knx/group_object.h index eb65ea3d..4d7823a4 100644 --- a/src/knx/group_object.h +++ b/src/knx/group_object.h @@ -171,8 +171,10 @@ class GroupObject * @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 was converted successfully to the datapoint type and the group object was updated. */ - void value(const KNXValue& value, const Dpt& type); + bool value(const KNXValue& value, const Dpt& type); /** * Check if the value (after conversion to dpt) will differ from current value of the group object and changes the state of the group object to ::WriteRequest if different. @@ -182,18 +184,20 @@ class GroupObject * * The parameters must fit the group object. Otherwise it will stay unchanged. * - * @returns true if the value of the group object has changed + * @returns true if the value of the group object has changed, false if conversion results in same value as stored in group object or failed. */ bool valueCompare(const KNXValue& value, const Dpt& type); /** - * set the current value of the group object. + * 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 value was converted successfully to the datapoint type and the group object was updated. */ - void valueNoSend(const KNXValue& value, const Dpt& type); + bool valueNoSend(const KNXValue& value, const Dpt& type); /** * Check if the value (after conversion to dpt) will differ from current value of the group object and update if necessary. @@ -203,7 +207,7 @@ class GroupObject * * The parameters must fit the group object. Otherwise it will stay unchanged. * - * @returns true if the value of the group object has changed + * @returns true if the value of the group object has changed, false if conversion results in same value as stored in group object or failed. */ bool valueNoSendCompare(const KNXValue& value, const Dpt& type); @@ -229,15 +233,19 @@ class GroupObject * @param value the value the group object is set to * * The parameters must fit the group object and dhe datapoint type must be set with dataPointType(). Otherwise it will stay unchanged. + * + * @returns true if the value was converted successfully to the datapoint type and the group object was updated. */ - void value(const KNXValue& value); + bool value(const KNXValue& value); /** * set the current value of the group object. * @param value the value the group object is set to * - * The parameters must fit the group object and dhe datapoint type must be set with dataPointType(). Otherwise it will stay unchanged. + * The parameters must fit the group object and the datapoint type must be set with dataPointType(). Otherwise it will stay unchanged. + * + * @returns true if the value was converted successfully to the datapoint type and the group object was updated. */ - void valueNoSend(const KNXValue& value); + bool valueNoSend(const KNXValue& value); /** * set the current value of the group object. * @param value the value the group object is set to @@ -284,15 +292,4 @@ class GroupObject GroupObjectUpdatedHandler _updateHandler; Dpt _datapointType; #endif - - /** - * 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. - */ - bool _valueNoSend(const KNXValue& value, const Dpt& type); };