mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	Merge 9ee6e11ca5 into 5048de6c75
				
					
				
			This commit is contained in:
		
						commit
						21bd4e3812
					
				| @ -485,6 +485,18 @@ namespace Knx | ||||
|             ComFlag _commFlag : 7; | ||||
|             uint8_t* _data = 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); | ||||
| @ -492,8 +504,11 @@ namespace Knx | ||||
|     template <class DPT> | ||||
|     void GroupObject::value(const DPT& value) | ||||
|     { | ||||
|         valueNoSend(value); | ||||
|         objectWritten(); | ||||
|         if (_valueNoSend(value)) | ||||
|         { | ||||
|             // write on successful conversion/setting value only
 | ||||
|             objectWritten(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     template <class DPT> | ||||
| @ -519,14 +534,24 @@ namespace Knx | ||||
| 
 | ||||
|     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()) | ||||
|             return; | ||||
| 
 | ||||
|         if (_uninitialized) | ||||
|         const bool encodingDone = true; // TODO FIXME for devel! value.encode needs success indicator
 | ||||
|         value.encode(_data); | ||||
| 
 | ||||
|         // initialize on succesful conversion only
 | ||||
|         if (encodingDone && _uninitialized) | ||||
|             commFlag(Ok); | ||||
| 
 | ||||
|         value.encode(_data); | ||||
|         return encodingDone; | ||||
|     } | ||||
| 
 | ||||
|     template <class DPT> | ||||
| @ -538,15 +563,22 @@ namespace Knx | ||||
|         if (_uninitialized) | ||||
|         { | ||||
|             // always set first value
 | ||||
|             this->valueNoSend(value); | ||||
|             return true; | ||||
|             return _valueNoSend(value); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             // convert new value to given dtp
 | ||||
|             // convert new value to given DPT
 | ||||
|             uint8_t newData[_dataLength]; | ||||
|             memset(newData, 0, _dataLength); | ||||
| 
 | ||||
|             const bool encodingDone = true; // TODO FIXME for devel! value.encode needs success indicator
 | ||||
|             value.encode(newData); | ||||
|             if (!encodingDone) | ||||
|             { | ||||
|                 // value conversion to DPT failed
 | ||||
|                 // do NOT update the value of the KO!
 | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|             // check for change in converted value / update value on change only
 | ||||
|             const bool dataChanged = memcmp(_data, newData, _dataLength); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user