knx
ETS configurable knx-stack
security_interface_object.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "config.h"
4 #ifdef USE_DATASECURE
5 
6 #include "interface_object.h"
7 #include "knx_types.h"
8 
10 {
11  public:
13 
14  void masterReset(EraseCode eraseCode, uint8_t channel) override;
15 
16  bool isSecurityModeEnabled();
17 
18  bool isLoaded();
19 
20  const uint8_t* toolKey(); // returns single tool key (ETS)
21  const uint8_t* p2pKey(uint16_t addressIndex); // returns p2p key for IA index
22  const uint8_t* groupKey(uint16_t addressIndex); // returns group key for group address index
23 
24  uint16_t indAddressIndex(uint16_t indAddr); // returns 1-based index of address in security IA table
25 
26  void setSequenceNumber(bool toolAccess, uint64_t seqNum);
27  uint64_t getLastValidSequenceNumber(uint16_t deviceAddr);
28  void setLastValidSequenceNumber(uint16_t deviceAddr, uint64_t seqNum);
29 
30  DataSecurity getGroupObjectSecurity(uint16_t index);
31 
33  uint8_t* save(uint8_t* buffer) override;
34  const uint8_t* restore(const uint8_t* buffer) override;
35  uint16_t saveSize() override;
36 
37  private:
38  void setSecurityMode(bool enabled);
39 
40  void clearFailureLog();
41  void getFailureCounters(uint8_t* data);
42  uint8_t getFromFailureLogByIndex(uint8_t index, uint8_t* data, uint8_t maxDataLen);
43 
44  void errorCode(ErrorCode errorCode);
45 
46  void loadEvent(const uint8_t* data);
47  void loadEventUnloaded(const uint8_t* data);
48  void loadEventLoading(const uint8_t* data);
49  void loadEventLoaded(const uint8_t* data);
50  void loadEventError(const uint8_t* data);
51 
52  void loadState(LoadState newState);
53  LoadState _state = LS_UNLOADED;
54 
55  bool _securityModeEnabled {false};
56 
57  uint16_t getNumberOfElements(PropertyID propId);
58 
59  // Our FDSK
60  static const uint8_t _fdsk[];
61  static uint8_t _secReport[];
62  static uint8_t _secReportCtrl[];
63 };
64 #endif
This class represents and interface object.
const uint8_t * groupKey(uint16_t addressIndex)
uint64_t getLastValidSequenceNumber(uint16_t deviceAddr)
void masterReset(EraseCode eraseCode, uint8_t channel) override
uint8_t * save(uint8_t *buffer) override
This method is called when the object should save its state to the buffer.
void setLastValidSequenceNumber(uint16_t deviceAddr, uint64_t seqNum)
void setSequenceNumber(bool toolAccess, uint64_t seqNum)
const uint8_t * p2pKey(uint16_t addressIndex)
const uint8_t * restore(const uint8_t *buffer) override
This method is called when the object should restore its state from the buffer.
uint16_t indAddressIndex(uint16_t indAddr)
DataSecurity getGroupObjectSecurity(uint16_t index)
EraseCode
Definition: knx_types.h:242
DataSecurity
Definition: knx_types.h:223
PropertyID
Definition: property.h:70
ErrorCode
Definition: property.h:218
LoadState
Definition: property.h:198
@ LS_UNLOADED
Definition: property.h:199