knx
ETS configurable knx-stack
knx_ip_frame.cpp
Go to the documentation of this file.
1 #include "knx_ip_frame.h"
2 
3 #ifdef USE_IP
4 
5 #include <cstring>
6 #include "bits.h"
7 
8 #define KNXIP_HEADER_LEN 0x6
9 #define KNXIP_PROTOCOL_VERSION 0x10
10 
11 KnxIpFrame::KnxIpFrame(uint8_t* data,
12  uint16_t length)
13 {
14  _data = data;
15  _dataLength = length;
16 }
17 
18 uint8_t KnxIpFrame::headerLength() const
19 {
20  return _data[0];
21 }
22 
23 void KnxIpFrame::headerLength(uint8_t length)
24 {
25  _data[0] = length;
26 }
27 
29 {
30  return (KnxIpVersion)_data[1];
31 }
32 
34 {
35  _data[1] = (uint8_t)version;
36 }
37 
39 {
40  return getWord(_data + 2);
41 }
42 
43 void KnxIpFrame::serviceTypeIdentifier(uint16_t identifier)
44 {
45  pushWord(identifier, _data + 2);
46 }
47 
48 uint16_t KnxIpFrame::totalLength() const
49 {
50  return getWord(_data + 4);
51 }
52 
53 void KnxIpFrame::totalLength(uint16_t length)
54 {
55  pushWord(length, _data + 4);
56 }
57 
58 uint8_t* KnxIpFrame::data()
59 {
60  return _data;
61 }
62 
63 
65 {
66  if (_freeData)
67  delete[] _data;
68 }
69 
70 
71 KnxIpFrame::KnxIpFrame(uint16_t length)
72 {
73  _data = new uint8_t[length];
74  _dataLength = length;
75  _freeData = true;
76  memset(_data, 0, length);
77  headerLength(LEN_KNXIP_HEADER);
79  totalLength(length);
80 }
81 #endif
uint8_t * pushWord(uint16_t w, uint8_t *data)
Definition: bits.cpp:64
uint16_t getWord(const uint8_t *data)
Definition: bits.cpp:91
virtual ~KnxIpFrame()
uint8_t * data()
KnxIpFrame(uint8_t *data, uint16_t length)
uint16_t _dataLength
Definition: knx_ip_frame.h:55
uint8_t headerLength() const
uint16_t totalLength() const
KnxIpVersion protocolVersion() const
uint16_t serviceTypeIdentifier() const
uint8_t * _data
Definition: knx_ip_frame.h:54
bool _freeData
Definition: knx_ip_frame.h:53
KnxIpVersion
Definition: knx_ip_frame.h:10
@ KnxIp1_0
Definition: knx_ip_frame.h:11