diff --git a/src/knx/group_object.cpp b/src/knx/group_object.cpp index cc62220..dcec322 100644 --- a/src/knx/group_object.cpp +++ b/src/knx/group_object.cpp @@ -242,13 +242,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; } @@ -283,9 +285,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); } @@ -295,19 +297,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); @@ -323,7 +319,7 @@ bool GroupObject::valueNoSendCompare(const KNXValue& value, const Dpt& type) if (_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 2f1da9b..10b9c11 100644 --- a/src/knx/group_object.h +++ b/src/knx/group_object.h @@ -162,8 +162,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. @@ -173,18 +175,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 objectand 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. @@ -194,7 +198,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); @@ -220,15 +224,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 @@ -276,15 +284,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); };