knx
ETS configurable knx-stack
function_property.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "property.h"
4 
5 class InterfaceObject;
6 
7 template <class T> class FunctionProperty : public Property
8 {
9  public:
11  void (*commandCallback)(T*, uint8_t*, uint8_t, uint8_t*, uint8_t&),
12  void (*stateCallback)(T*, uint8_t*, uint8_t, uint8_t*, uint8_t&))
13  : Property(id, false, PDT_FUNCTION, 1, ReadLv0 | WriteLv0), _interfaceObject(io), _commandCallback(commandCallback), _stateCallback(stateCallback)
14  /* max_elements is set to 1, read and write level any value so we use Lv0, see 3.3.7 Application Layer p.68 */
15  {}
16 
17  uint8_t read(uint16_t start, uint8_t count, uint8_t* data) const override
18  {
19  return 0;
20  }
21 
22  uint8_t write(uint16_t start, uint8_t count, const uint8_t* data) override
23  {
24  return 0;
25  }
26 
27  void command(uint8_t* data, uint8_t length, uint8_t* resultData, uint8_t& resultLength) override
28  {
29  if (length == 0 || _commandCallback == nullptr )
30  {
31  resultLength = 0;
32  return;
33  }
34 
35  _commandCallback(_interfaceObject, data, length, resultData, resultLength);
36  }
37 
38  void state(uint8_t* data, uint8_t length, uint8_t* resultData, uint8_t& resultLength) override
39  {
40  if (length == 0 || _stateCallback == nullptr )
41  {
42  resultLength = 0;
43  return;
44  }
45 
46  _stateCallback(_interfaceObject, data, length, resultData, resultLength);
47  }
48 
49  private:
50  T* _interfaceObject = nullptr;
51  void (*_commandCallback)(T*, uint8_t*, uint8_t, uint8_t*, uint8_t&) = nullptr;
52  void (*_stateCallback)(T*, uint8_t*, uint8_t, uint8_t*, uint8_t&) = nullptr;
53 };
uint8_t write(uint16_t start, uint8_t count, const uint8_t *data) override
uint8_t read(uint16_t start, uint8_t count, uint8_t *data) const override
FunctionProperty(T *io, PropertyID id, void(*commandCallback)(T *, uint8_t *, uint8_t, uint8_t *, uint8_t &), void(*stateCallback)(T *, uint8_t *, uint8_t, uint8_t *, uint8_t &))
void command(uint8_t *data, uint8_t length, uint8_t *resultData, uint8_t &resultLength) override
void state(uint8_t *data, uint8_t length, uint8_t *resultData, uint8_t &resultLength) override
This class represents and interface object.
PropertyID
Definition: property.h:70
@ PDT_FUNCTION
length: 3
Definition: property.h:65
@ WriteLv0
Definition: property.h:247
@ ReadLv0
Definition: property.h:243