mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	save work
This commit is contained in:
		
							parent
							
								
									fb5fb42d8a
								
							
						
					
					
						commit
						5ced388133
					
				@ -33,6 +33,9 @@ Bau091A::Bau091A(Platform& platform)
 | 
			
		||||
    _memory.addSaveRestore(&_cemiServerObject);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    _memory.addSaveRestore(&_rtObjPrimary);
 | 
			
		||||
    _memory.addSaveRestore(&_rtObjSecondary);
 | 
			
		||||
 | 
			
		||||
    _memory.addSaveRestore(&_ipParameters);
 | 
			
		||||
 | 
			
		||||
    // Set Mask Version in Device Object depending on the BAU
 | 
			
		||||
 | 
			
		||||
@ -51,7 +51,7 @@ RouterObjectFilterTable::RouterObjectFilterTable(Memory& memory)
 | 
			
		||||
                return 1;
 | 
			
		||||
            }),
 | 
			
		||||
 | 
			
		||||
        new DataProperty( PID_MCB_TABLE, false, PDT_GENERIC_08, 1, ReadLv3 | WriteLv0, (uint16_t) 0 ), // TODO
 | 
			
		||||
        new DataProperty( PID_MCB_TABLE, false, PDT_GENERIC_08, 1, ReadLv3 | WriteLv0),
 | 
			
		||||
 | 
			
		||||
        new FunctionProperty<RouterObjectFilterTable>(this, PID_ROUTETABLE_CONTROL,
 | 
			
		||||
            // Command Callback of PID_ROUTETABLE_CONTROL
 | 
			
		||||
@ -105,6 +105,8 @@ const uint8_t* RouterObjectFilterTable::restore(const uint8_t* buffer)
 | 
			
		||||
    else
 | 
			
		||||
        _data = 0;
 | 
			
		||||
 | 
			
		||||
    _filterTableGroupAddresses = (uint16_t*)_data;
 | 
			
		||||
 | 
			
		||||
    return RouterObject::restore(buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -357,6 +359,32 @@ void RouterObjectFilterTable::errorCode(ErrorCode errorCode)
 | 
			
		||||
    prop->write(data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RouterObjectFilterTable::beforeStateChange(LoadState& newState)
 | 
			
		||||
{
 | 
			
		||||
    if (newState != LS_LOADED)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    // calculate crc16-ccitt for PID_MCB_TABLE
 | 
			
		||||
    updateMcb();
 | 
			
		||||
 | 
			
		||||
    _filterTableGroupAddresses = (uint16_t*)_data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RouterObjectFilterTable::updateMcb()
 | 
			
		||||
{
 | 
			
		||||
    uint8_t mcb[propertySize(PID_MCB_TABLE)];
 | 
			
		||||
 | 
			
		||||
    static constexpr uint32_t segmentSize = 8192;
 | 
			
		||||
    uint16_t crc16 = crc16Ccitt(_data, segmentSize);
 | 
			
		||||
 | 
			
		||||
    pushInt(segmentSize, &mcb[0]); // Segment size
 | 
			
		||||
    pushByte(0x00, &mcb[4]);       // CRC control byte -> 0: always valid -> according to coupler spec. it shall always be a valid CRC
 | 
			
		||||
    pushByte(0xFF, &mcb[5]);       // Read access 4 bits + Write access 4 bits (unknown: value taken from real coupler device)
 | 
			
		||||
    pushWord(crc16, &mcb[6]);      // CRC-16 CCITT of filter table
 | 
			
		||||
 | 
			
		||||
    property(PID_MCB_TABLE)->write(mcb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RouterObjectFilterTable::masterReset(EraseCode eraseCode, uint8_t channel)
 | 
			
		||||
{
 | 
			
		||||
    RouterObject::masterReset(eraseCode, channel);
 | 
			
		||||
 | 
			
		||||
@ -23,11 +23,14 @@ public:
 | 
			
		||||
  const uint8_t* restore(const uint8_t* buffer) override;
 | 
			
		||||
  uint16_t saveSize() override;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  // Function properties
 | 
			
		||||
  void functionRouteTableControl(bool isCommand, uint8_t* data, uint8_t length, uint8_t* resultData, uint8_t& resultLength);
 | 
			
		||||
  void functionRfEnableSbc(bool isCommand, uint8_t* data, uint8_t length, uint8_t* resultData, uint8_t& resultLength);
 | 
			
		||||
 | 
			
		||||
  void updateMcb();
 | 
			
		||||
 | 
			
		||||
  uint32_t tableReference();
 | 
			
		||||
  bool allocTable(uint32_t size, bool doFill, uint8_t fillByte);
 | 
			
		||||
  void errorCode(ErrorCode errorCode);
 | 
			
		||||
@ -38,6 +41,7 @@ private:
 | 
			
		||||
  void loadEventLoaded(const uint8_t* data);
 | 
			
		||||
  void loadEventError(const uint8_t* data);
 | 
			
		||||
  void additionalLoadControls(const uint8_t* data);
 | 
			
		||||
  void beforeStateChange(LoadState& newState);
 | 
			
		||||
 | 
			
		||||
  void loadState(LoadState newState);
 | 
			
		||||
  LoadState _state = LS_UNLOADED;
 | 
			
		||||
@ -45,4 +49,5 @@ private:
 | 
			
		||||
  Memory& _memory;
 | 
			
		||||
  uint8_t *_data = 0;
 | 
			
		||||
  bool _rfSbcRoutingEnabled = false;
 | 
			
		||||
  uint16_t* _filterTableGroupAddresses = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user