knx
ETS configurable knx-stack
knx_ip_search_request_extended.cpp
Go to the documentation of this file.
2 #include "bits.h"
3 #include "service_families.h"
4 #if KNX_SERVICE_FAMILY_CORE >= 2
5 #ifdef USE_IP
7  : KnxIpFrame(data, length), _hpai(data + LEN_KNXIP_HEADER)
8 {
9  if (length == LEN_KNXIP_HEADER + LEN_IPHPAI)
10  return; //we dont have SRPs
11 
12  int currentPos = LEN_KNXIP_HEADER + LEN_IPHPAI;
13 
14  while (currentPos < length)
15  {
16  switch (data[currentPos + 1])
17  {
18  case 0x01:
19  srpByProgMode = true;
20  break;
21 
22  case 0x02:
23  srpByMacAddr = true;
24  srpMacAddr = data + currentPos + 2;
25  break;
26 
27  case 0x03:
28  srpByService = true;
29  srpServiceFamilies = data + currentPos;
30  break;
31 
32  case 0x04:
33  srpRequestDIBs = true;
34 
35  for (int i = 0; i < data[currentPos] - 2; i++)
36  {
37  if (data[currentPos + i + 2] == 0)
38  continue;
39 
40  if (data[currentPos + i + 2] > REQUESTED_DIBS_MAX)
41  {
42  print("Requested DIBs too high ");
43  continue;
44  }
45 
46  requestedDIBs[data[currentPos + i + 2]] = true;
47  }
48 
49  break;
50  }
51 
52  currentPos += data[currentPos];
53  };
54 }
55 
57 {
58  return _hpai;
59 }
60 
62 {
63  if (code > REQUESTED_DIBS_MAX)
64  return false;
65 
66  return requestedDIBs[code];
67 }
68 #endif
69 #endif
void print(const char *s)
uint8_t * data()
KnxIpSearchRequestExtended(uint8_t *data, uint16_t length)
IpHostProtocolAddressInformation & hpai()