mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	add overrides keyword for all interface objects.
refactor properties more
This commit is contained in:
		
							parent
							
								
									396994c1a5
								
							
						
					
					
						commit
						71448efdad
					
				@ -87,11 +87,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_ERROR_CODE, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_ERROR_CODE, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t AddressTableObject::propertyCount()
 | 
					uint8_t AddressTableObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -52,9 +52,9 @@ class AddressTableObject : public TableObject
 | 
				
			|||||||
    bool contains(uint16_t groupAddress);
 | 
					    bool contains(uint16_t groupAddress);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected:
 | 
					  protected:
 | 
				
			||||||
    virtual void beforeStateChange(LoadState& newState);
 | 
					    virtual void beforeStateChange(LoadState& newState) override;
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					    uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					    PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
    uint16_t* _groupAddresses = 0;
 | 
					    uint16_t* _groupAddresses = 0;
 | 
				
			||||||
 | 
				
			|||||||
@ -97,11 +97,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_PEI_TYPE, false, PDT_UNSIGNED_CHAR, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_PEI_TYPE, false, PDT_UNSIGNED_CHAR, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
    { PID_PROG_VERSION, true, PDT_GENERIC_05, 1, ReadLv3 | WriteLv3 },
 | 
					    { PID_PROG_VERSION, true, PDT_GENERIC_05, 1, ReadLv3 | WriteLv3 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t ApplicationProgramObject::propertyCount()
 | 
					uint8_t ApplicationProgramObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,21 +6,21 @@ class ApplicationProgramObject : public TableObject
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
    ApplicationProgramObject(Memory& memory);
 | 
					    ApplicationProgramObject(Memory& memory);
 | 
				
			||||||
    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data);
 | 
					    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count);
 | 
					    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count) override;
 | 
				
			||||||
    uint8_t propertySize(PropertyID id);
 | 
					    uint8_t propertySize(PropertyID id) override;
 | 
				
			||||||
    ObjectType objectType() { return OT_APPLICATION_PROG; }    
 | 
					    ObjectType objectType() override { return OT_APPLICATION_PROG; }    
 | 
				
			||||||
    uint8_t* data(uint32_t addr);
 | 
					    uint8_t* data(uint32_t addr);
 | 
				
			||||||
    uint8_t getByte(uint32_t addr);
 | 
					    uint8_t getByte(uint32_t addr);
 | 
				
			||||||
    uint16_t getWord(uint32_t addr);
 | 
					    uint16_t getWord(uint32_t addr);
 | 
				
			||||||
    uint32_t getInt(uint32_t addr);
 | 
					    uint32_t getInt(uint32_t addr);
 | 
				
			||||||
    uint8_t* save(uint8_t* buffer);
 | 
					    uint8_t* save(uint8_t* buffer) override;
 | 
				
			||||||
    uint8_t* restore(uint8_t* buffer);
 | 
					    uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
    uint16_t saveSize();
 | 
					    uint16_t saveSize() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected:
 | 
					  protected:
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					    uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					    PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
    uint8_t _programVersion[5] = {0, 0, 0, 0, 0};
 | 
					    uint8_t _programVersion[5] = {0, 0, 0, 0, 0};
 | 
				
			||||||
 | 
				
			|||||||
@ -81,11 +81,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_TABLE_REFERENCE, false, PDT_UNSIGNED_LONG, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_TABLE_REFERENCE, false, PDT_UNSIGNED_LONG, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
    { PID_ERROR_CODE, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_ERROR_CODE, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t AssociationTableObject::propertyCount()
 | 
					uint8_t AssociationTableObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,18 +6,18 @@ class AssociationTableObject : public TableObject
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
    AssociationTableObject(Memory& memory);
 | 
					    AssociationTableObject(Memory& memory);
 | 
				
			||||||
    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data);
 | 
					    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    ObjectType objectType() { return OT_ASSOC_TABLE; }
 | 
					    ObjectType objectType() override { return OT_ASSOC_TABLE; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint8_t* restore(uint8_t* buffer);
 | 
					    uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int32_t translateAsap(uint16_t asap);
 | 
					    int32_t translateAsap(uint16_t asap);
 | 
				
			||||||
    int32_t nextAsap(uint16_t tsap, uint16_t& startIdx);
 | 
					    int32_t nextAsap(uint16_t tsap, uint16_t& startIdx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected:
 | 
					  protected:
 | 
				
			||||||
    void beforeStateChange(LoadState& newState);
 | 
					    void beforeStateChange(LoadState& newState) override;
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					    uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					    PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
    uint16_t entryCount();
 | 
					    uint16_t entryCount();
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,12 @@ CallbackProperty::CallbackProperty(PropertyID id, bool writeEnable, PropertyData
 | 
				
			|||||||
    : Property(id, writeEnable, type, maxElements, access), _readCallback(), _writeCallback()
 | 
					    : Property(id, writeEnable, type, maxElements, access), _readCallback(), _writeCallback()
 | 
				
			||||||
{}
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CallbackProperty::CallbackProperty(PropertyID id, bool writeEnable, PropertyDataType type,
 | 
				
			||||||
 | 
					                                   uint16_t maxElements, uint8_t access,
 | 
				
			||||||
 | 
					                                   PropertyCallback readCallback)
 | 
				
			||||||
 | 
					    : Property(id, writeEnable, type, maxElements, access), _readCallback()
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t CallbackProperty::read(uint16_t start, uint8_t count, uint8_t* data)
 | 
					uint8_t CallbackProperty::read(uint16_t start, uint8_t count, uint8_t* data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (count == 0 || _readCallback == nullptr)
 | 
					    if (count == 0 || _readCallback == nullptr)
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,8 @@ class CallbackProperty : public Property
 | 
				
			|||||||
  public:
 | 
					  public:
 | 
				
			||||||
    CallbackProperty(PropertyID id, bool writeEnable, PropertyDataType type, uint16_t maxElements,
 | 
					    CallbackProperty(PropertyID id, bool writeEnable, PropertyDataType type, uint16_t maxElements,
 | 
				
			||||||
                     uint8_t access, PropertyCallback readCallback, PropertyCallback writeCallback);
 | 
					                     uint8_t access, PropertyCallback readCallback, PropertyCallback writeCallback);
 | 
				
			||||||
 | 
					    CallbackProperty(PropertyID id, bool writeEnable, PropertyDataType type, uint16_t maxElements,
 | 
				
			||||||
 | 
					                     uint8_t access, PropertyCallback readCallback);
 | 
				
			||||||
    virtual uint8_t read(uint16_t start, uint8_t count, uint8_t* data) override;
 | 
					    virtual uint8_t read(uint16_t start, uint8_t count, uint8_t* data) override;
 | 
				
			||||||
    virtual uint8_t write(uint16_t start, uint8_t count, uint8_t* data) override;
 | 
					    virtual uint8_t write(uint16_t start, uint8_t count, uint8_t* data) override;
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
 | 
				
			|||||||
@ -100,11 +100,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_MEDIUM_AVAILABILITY, false, PDT_BITSET16, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_MEDIUM_AVAILABILITY, false, PDT_BITSET16, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
    { PID_ADD_INFO_TYPES, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 }
 | 
					    { PID_ADD_INFO_TYPES, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t CemiServerObject::propertyCount()
 | 
					uint8_t CemiServerObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PropertyDescription* CemiServerObject::propertyDescriptions()
 | 
					PropertyDescription* CemiServerObject::propertyDescriptions()
 | 
				
			||||||
 | 
				
			|||||||
@ -8,14 +8,13 @@ public:
 | 
				
			|||||||
    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
					    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count) override;
 | 
					    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count) override;
 | 
				
			||||||
    uint8_t propertySize(PropertyID id) override;
 | 
					    uint8_t propertySize(PropertyID id) override;
 | 
				
			||||||
    uint8_t* save(uint8_t* buffer);
 | 
					    uint8_t* save(uint8_t* buffer) override;
 | 
				
			||||||
    uint8_t* restore(uint8_t* buffer);
 | 
					    uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
    void readPropertyDescription(uint8_t propertyId, uint8_t& propertyIndex, bool& writeEnable, uint8_t& type, uint16_t& numberOfElements, uint8_t& access);
 | 
					    ObjectType objectType() override { return OT_CEMI_SERVER; }
 | 
				
			||||||
    ObjectType objectType() { return OT_CEMI_SERVER; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					  uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					  PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    // cEMI additional info types supported by this cEMI server: only 0x02 (RF Control Octet and Serial Number or DoA)
 | 
					    // cEMI additional info types supported by this cEMI server: only 0x02 (RF Control Octet and Serial Number or DoA)
 | 
				
			||||||
    uint8_t _addInfoTypesTable[1] = { 0x02 }; 
 | 
					    uint8_t _addInfoTypesTable[1] = { 0x02 }; 
 | 
				
			||||||
 | 
				
			|||||||
@ -324,11 +324,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_OBJECT_TYPE, false, PDT_UNSIGNED_INT, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_OBJECT_TYPE, false, PDT_UNSIGNED_INT, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
    { PID_SERIAL_NUMBER, false, PDT_GENERIC_06, 1, ReadLv3 | WriteLv0 }
 | 
					    { PID_SERIAL_NUMBER, false, PDT_GENERIC_06, 1, ReadLv3 | WriteLv0 }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t DeviceObject::propertyCount()
 | 
					uint8_t DeviceObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,14 +7,14 @@
 | 
				
			|||||||
class DeviceObject: public InterfaceObject
 | 
					class DeviceObject: public InterfaceObject
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data);
 | 
					    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count);
 | 
					    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count) override;
 | 
				
			||||||
    uint8_t propertySize(PropertyID id);
 | 
					    uint8_t propertySize(PropertyID id) override;
 | 
				
			||||||
    uint8_t* save(uint8_t* buffer);
 | 
					    uint8_t* save(uint8_t* buffer) override;
 | 
				
			||||||
    uint8_t* restore(uint8_t* buffer);
 | 
					    uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
    uint16_t saveSize();
 | 
					    uint16_t saveSize() override;
 | 
				
			||||||
    void readPropertyDescription(uint8_t propertyId, uint8_t& propertyIndex, bool& writeEnable, uint8_t& type, uint16_t& numberOfElements, uint8_t& access);
 | 
					    void readPropertyDescription(uint8_t propertyId, uint8_t& propertyIndex, bool& writeEnable, uint8_t& type, uint16_t& numberOfElements, uint8_t& access);
 | 
				
			||||||
    ObjectType objectType() { return OT_DEVICE; }
 | 
					    ObjectType objectType() override { return OT_DEVICE; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint16_t induvidualAddress();
 | 
					    uint16_t induvidualAddress();
 | 
				
			||||||
    void induvidualAddress(uint16_t value);
 | 
					    void induvidualAddress(uint16_t value);
 | 
				
			||||||
@ -49,8 +49,8 @@ public:
 | 
				
			|||||||
    uint8_t* rfDomainAddress();
 | 
					    uint8_t* rfDomainAddress();
 | 
				
			||||||
    void rfDomainAddress(uint8_t* value);
 | 
					    void rfDomainAddress(uint8_t* value);
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					    uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					    PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    uint8_t _deviceControl = 0;
 | 
					    uint8_t _deviceControl = 0;
 | 
				
			||||||
    uint8_t _routingCount = 0;
 | 
					    uint8_t _routingCount = 0;
 | 
				
			||||||
 | 
				
			|||||||
@ -133,11 +133,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_TABLE_REFERENCE, false, PDT_UNSIGNED_LONG, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_TABLE_REFERENCE, false, PDT_UNSIGNED_LONG, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
    { PID_ERROR_CODE, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_ERROR_CODE, false, PDT_ENUM8, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t GroupObjectTableObject::propertyCount()
 | 
					uint8_t GroupObjectTableObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -10,19 +10,19 @@ class GroupObjectTableObject : public TableObject
 | 
				
			|||||||
  public:
 | 
					  public:
 | 
				
			||||||
    GroupObjectTableObject(Memory& memory);
 | 
					    GroupObjectTableObject(Memory& memory);
 | 
				
			||||||
    virtual ~GroupObjectTableObject();
 | 
					    virtual ~GroupObjectTableObject();
 | 
				
			||||||
    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data);
 | 
					    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    ObjectType objectType() { return OT_GRP_OBJ_TABLE; }
 | 
					    ObjectType objectType() override { return OT_GRP_OBJ_TABLE; }
 | 
				
			||||||
    uint16_t entryCount();
 | 
					    uint16_t entryCount();
 | 
				
			||||||
    GroupObject& get(uint16_t asap);
 | 
					    GroupObject& get(uint16_t asap);
 | 
				
			||||||
    GroupObject& nextUpdatedObject(bool& valid);
 | 
					    GroupObject& nextUpdatedObject(bool& valid);
 | 
				
			||||||
    void groupObjects(GroupObject* objs, uint16_t size);
 | 
					    void groupObjects(GroupObject* objs, uint16_t size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint8_t* restore(uint8_t* buffer);
 | 
					    uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected:
 | 
					  protected:
 | 
				
			||||||
    void beforeStateChange(LoadState& newState);
 | 
					    void beforeStateChange(LoadState& newState) override;
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					    uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					    PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
    void freeGroupObjects();
 | 
					    void freeGroupObjects();
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,17 @@
 | 
				
			|||||||
 | 
					#include <cstring>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "interface_object.h"
 | 
					#include "interface_object.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					InterfaceObject::~InterfaceObject()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (_properties != nullptr)
 | 
				
			||||||
 | 
					        delete[] _properties;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void InterfaceObject::readPropertyDescription(uint8_t& propertyId, uint8_t& propertyIndex, bool& writeEnable, uint8_t& type, uint16_t& numberOfElements, uint8_t& access)
 | 
					void InterfaceObject::readPropertyDescription(uint8_t& propertyId, uint8_t& propertyIndex, bool& writeEnable, uint8_t& type, uint16_t& numberOfElements, uint8_t& access)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PropertyDescription* descriptions = propertyDescriptions();
 | 
					    PropertyDescription* descriptions = propertyDescriptions();
 | 
				
			||||||
    uint8_t count = propertyCount();
 | 
					    uint8_t count = propertyDescriptionCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    numberOfElements = 0;
 | 
					    numberOfElements = 0;
 | 
				
			||||||
    if (descriptions == nullptr || count == 0)
 | 
					    if (descriptions == nullptr || count == 0)
 | 
				
			||||||
@ -65,7 +73,7 @@ uint8_t InterfaceObject::propertySize(PropertyID id)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t InterfaceObject::propertyCount()
 | 
					uint8_t InterfaceObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -75,3 +83,20 @@ PropertyDescription* InterfaceObject::propertyDescriptions()
 | 
				
			|||||||
    return nullptr;
 | 
					    return nullptr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void InterfaceObject::initializeProperties(size_t propertiesSize, Property** properties)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _propertyCount = propertiesSize / sizeof(Property*);
 | 
				
			||||||
 | 
					    _properties = new Property*[_propertyCount];
 | 
				
			||||||
 | 
					    memcpy(_properties, properties, propertiesSize);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Property* InterfaceObject::property(PropertyID id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    for (int i = 0; i < _propertyCount; i++)
 | 
				
			||||||
 | 
					        if (_properties[i]->Id() == id)
 | 
				
			||||||
 | 
					            return _properties[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return nullptr;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -62,7 +62,7 @@ class InterfaceObject : public SaveRestore
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Destructor
 | 
					     * Destructor
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual ~InterfaceObject() {}
 | 
					    virtual ~InterfaceObject();
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Read a property of the interface object. See section 4.8.4.2 of @cite knx:3/4/1.
 | 
					     * Read a property of the interface object. See section 4.8.4.2 of @cite knx:3/4/1.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
@ -126,14 +126,27 @@ class InterfaceObject : public SaveRestore
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual ObjectType objectType() = 0;
 | 
					    virtual ObjectType objectType() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets property with PropertyID id if it exists and nullptr otherwise.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Property* property(PropertyID id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected:
 | 
					  protected:
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns the number of properties the interface object has.
 | 
					     * Returns the number of properties the interface object has.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual uint8_t propertyCount();
 | 
					    virtual uint8_t propertyDescriptionCount();
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns a pointer to the first PropertyDescription of the interface object. 
 | 
					     * Returns a pointer to the first PropertyDescription of the interface object. 
 | 
				
			||||||
     * This is used by readPropertyDescription() together with propertyCount().
 | 
					     * This is used by readPropertyDescription() together with propertyCount().
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual PropertyDescription* propertyDescriptions();
 | 
					    virtual PropertyDescription* propertyDescriptions();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Intializes the Property-array the the supplied values.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void initializeProperties(size_t propertiesSize, Property** properties);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Property** _properties = nullptr;
 | 
				
			||||||
 | 
					    uint8_t _propertyCount = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -8,7 +8,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
IpParameterObject::IpParameterObject(DeviceObject& deviceObject, Platform& platform): _deviceObject(deviceObject),
 | 
					IpParameterObject::IpParameterObject(DeviceObject& deviceObject, Platform& platform): _deviceObject(deviceObject),
 | 
				
			||||||
    _platform(platform)
 | 
					    _platform(platform)
 | 
				
			||||||
{}
 | 
					{
 | 
				
			||||||
 | 
					    Property* properties[] =
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        new DataProperty(PID_OBJECT_TYPE, false, PDT_UNSIGNED_INT, 1, ReadLv3 | WriteLv0)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    initializeProperties(sizeof(properties), properties);  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void IpParameterObject::readProperty(PropertyID propertyId, uint16_t start, uint8_t& count, uint8_t* data)
 | 
					void IpParameterObject::readProperty(PropertyID propertyId, uint16_t start, uint8_t& count, uint8_t* data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -312,11 +318,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_OBJECT_TYPE, false, PDT_UNSIGNED_INT, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_OBJECT_TYPE, false, PDT_UNSIGNED_INT, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
    { PID_PROJECT_INSTALLATION_ID, true, PDT_UNSIGNED_INT, 1, ReadLv3 | WriteLv3 },
 | 
					    { PID_PROJECT_INSTALLATION_ID, true, PDT_UNSIGNED_INT, 1, ReadLv3 | WriteLv3 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t IpParameterObject::propertyCount()
 | 
					uint8_t IpParameterObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "interface_object.h"
 | 
					#include "interface_object.h"
 | 
				
			||||||
 | 
					#include "data_property.h"
 | 
				
			||||||
#include "device_object.h"
 | 
					#include "device_object.h"
 | 
				
			||||||
#include "platform.h"
 | 
					#include "platform.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -8,21 +9,24 @@ class IpParameterObject : public InterfaceObject
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
    IpParameterObject(DeviceObject& deviceObject, Platform& platform);
 | 
					    IpParameterObject(DeviceObject& deviceObject, Platform& platform);
 | 
				
			||||||
    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data);
 | 
					    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count);
 | 
					    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count) override;
 | 
				
			||||||
    uint8_t propertySize(PropertyID id);
 | 
					    uint8_t propertySize(PropertyID id) override;
 | 
				
			||||||
    ObjectType objectType() { return OT_IP_PARAMETER; }
 | 
					    ObjectType objectType() override
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return OT_IP_PARAMETER;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint8_t* save(uint8_t* buffer);
 | 
					    uint8_t* save(uint8_t* buffer) override;
 | 
				
			||||||
    uint8_t* restore(uint8_t* buffer);
 | 
					    uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
    uint16_t saveSize();
 | 
					    uint16_t saveSize() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint32_t multicastAddress() const;
 | 
					    uint32_t multicastAddress() const;
 | 
				
			||||||
    uint8_t ttl() const { return _ttl; }
 | 
					    uint8_t ttl() const { return _ttl; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected:
 | 
					  protected:
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					    uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					    PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
    uint16_t _projectInstallationId = 0;
 | 
					    uint16_t _projectInstallationId = 0;
 | 
				
			||||||
@ -46,4 +50,7 @@ class IpParameterObject : public InterfaceObject
 | 
				
			|||||||
    void loadState(LoadState newState);
 | 
					    void loadState(LoadState newState);
 | 
				
			||||||
    LoadState _state = LS_UNLOADED;
 | 
					    LoadState _state = LS_UNLOADED;
 | 
				
			||||||
    ErrorCode _errorCode = E_NO_FAULT;
 | 
					    ErrorCode _errorCode = E_NO_FAULT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Property** _properties = nullptr;
 | 
				
			||||||
 | 
					    uint8_t _propertyCount = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -124,11 +124,11 @@ static PropertyDescription _propertyDescriptions[] =
 | 
				
			|||||||
    { PID_RF_RETRANSMITTER, false, PDT_GENERIC_01, 1, ReadLv3 | WriteLv0 },
 | 
					    { PID_RF_RETRANSMITTER, false, PDT_GENERIC_01, 1, ReadLv3 | WriteLv0 },
 | 
				
			||||||
    { PID_RF_DOMAIN_ADDRESS, true, PDT_GENERIC_06, 1, ReadLv3 | WriteLv0 }
 | 
					    { PID_RF_DOMAIN_ADDRESS, true, PDT_GENERIC_06, 1, ReadLv3 | WriteLv0 }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static uint8_t _propertyCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
					static uint8_t _propertyDescriptionCount = sizeof(_propertyDescriptions) / sizeof(PropertyDescription);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t RfMediumObject::propertyCount()
 | 
					uint8_t RfMediumObject::propertyDescriptionCount()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return _propertyCount;
 | 
					    return _propertyDescriptionCount;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PropertyDescription* RfMediumObject::propertyDescriptions()
 | 
					PropertyDescription* RfMediumObject::propertyDescriptions()
 | 
				
			||||||
 | 
				
			|||||||
@ -5,21 +5,20 @@
 | 
				
			|||||||
class RfMediumObject: public InterfaceObject
 | 
					class RfMediumObject: public InterfaceObject
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data);
 | 
					    void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count);
 | 
					    void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count) override;
 | 
				
			||||||
    uint8_t propertySize(PropertyID id);
 | 
					    uint8_t propertySize(PropertyID id) override;
 | 
				
			||||||
    uint8_t* save(uint8_t* buffer);
 | 
					    uint8_t* save(uint8_t* buffer) override;
 | 
				
			||||||
    uint8_t* restore(uint8_t* buffer);
 | 
					    uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
    uint16_t saveSize();
 | 
					    uint16_t saveSize() override;
 | 
				
			||||||
    void readPropertyDescription(uint8_t propertyId, uint8_t& propertyIndex, bool& writeEnable, uint8_t& type, uint16_t& numberOfElements, uint8_t& access);
 | 
					    ObjectType objectType() override { return OT_RF_MEDIUM; }
 | 
				
			||||||
    ObjectType objectType() { return OT_RF_MEDIUM; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint8_t* rfDomainAddress();
 | 
					    uint8_t* rfDomainAddress();
 | 
				
			||||||
    void rfDomainAddress(uint8_t* value);
 | 
					    void rfDomainAddress(uint8_t* value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    uint8_t propertyCount();
 | 
					    uint8_t propertyDescriptionCount() override;
 | 
				
			||||||
    PropertyDescription* propertyDescriptions();
 | 
					    PropertyDescription* propertyDescriptions() override;
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    uint8_t _rfDomainAddress[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // see KNX RF S-Mode AN160 p.11
 | 
					    uint8_t _rfDomainAddress[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // see KNX RF S-Mode AN160 p.11
 | 
				
			||||||
    uint8_t _rfDiagSourceAddressFilterTable[24] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
 | 
					    uint8_t _rfDiagSourceAddressFilterTable[24] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,11 @@ class SaveRestore
 | 
				
			|||||||
     * @return The buffer plus the size of the object state. The next object will use this value as 
 | 
					     * @return The buffer plus the size of the object state. The next object will use this value as 
 | 
				
			||||||
     * the start of its buffer.
 | 
					     * the start of its buffer.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual uint8_t* save(uint8_t* buffer) = 0;
 | 
					    virtual uint8_t* save(uint8_t* buffer)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return buffer;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This method is called when the object should restore its state from the buffer.
 | 
					     * This method is called when the object should restore its state from the buffer.
 | 
				
			||||||
     *  
 | 
					     *  
 | 
				
			||||||
@ -24,9 +28,16 @@ class SaveRestore
 | 
				
			|||||||
     * @return The buffer plus the size of the object state. The next object will use this value as 
 | 
					     * @return The buffer plus the size of the object state. The next object will use this value as 
 | 
				
			||||||
     * the start of its buffer.
 | 
					     * the start of its buffer.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual uint8_t* restore(uint8_t* buffer) = 0;
 | 
					    virtual uint8_t* restore(uint8_t* buffer)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return buffer;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @return The number of byte the object needs to save its state. 
 | 
					     * @return The number of byte the object needs to save its state. 
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual uint16_t saveSize() = 0;
 | 
					    virtual uint16_t saveSize()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -16,9 +16,9 @@ class TableObject: public InterfaceObject
 | 
				
			|||||||
     * @param memory The instance of the memory management class to use.
 | 
					     * @param memory The instance of the memory management class to use.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    TableObject(Memory& memory);
 | 
					    TableObject(Memory& memory);
 | 
				
			||||||
    virtual void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data);
 | 
					    virtual void readProperty(PropertyID id, uint16_t start, uint8_t& count, uint8_t* data) override;
 | 
				
			||||||
    virtual void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count);
 | 
					    virtual void writeProperty(PropertyID id, uint16_t start, uint8_t* data, uint8_t& count) override;
 | 
				
			||||||
    virtual uint8_t propertySize(PropertyID id);
 | 
					    virtual uint8_t propertySize(PropertyID id) override;
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The destructor.
 | 
					     * The destructor.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@ -27,9 +27,9 @@ class TableObject: public InterfaceObject
 | 
				
			|||||||
     * This method returns the ::LoadState of the interface object.
 | 
					     * This method returns the ::LoadState of the interface object.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    LoadState loadState();
 | 
					    LoadState loadState();
 | 
				
			||||||
    virtual uint8_t* save(uint8_t* buffer);
 | 
					    virtual uint8_t* save(uint8_t* buffer) override;
 | 
				
			||||||
    virtual uint8_t* restore(uint8_t* buffer);
 | 
					    virtual uint8_t* restore(uint8_t* buffer) override;
 | 
				
			||||||
    uint16_t saveSize();
 | 
					    uint16_t saveSize() override;
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This method is called before the interface object enters a new ::LoadState.
 | 
					     * This method is called before the interface object enters a new ::LoadState.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user