knx
ETS configurable knx-stack
knx_ip_connect_response.cpp
Go to the documentation of this file.
2 #ifdef USE_IP
3 
4 KnxIpConnectResponse::KnxIpConnectResponse(IpParameterObject& parameters, uint16_t address, uint16_t port, uint8_t channel, uint8_t type)
5  : KnxIpFrame(LEN_KNXIP_HEADER + 1 /*Channel*/ + 1 /*Status*/ + LEN_IPHPAI + ((type == 4) ? 4 : 2)),
6  _controlEndpoint(_data + LEN_KNXIP_HEADER + 1 /*Channel*/ + 1 /*Status*/),
7  _crd(_data + LEN_KNXIP_HEADER + 1 /*Channel*/ + 1 /*Status*/ + LEN_IPHPAI)
8 {
10 
11  _data[LEN_KNXIP_HEADER] = channel;
12 
13  _controlEndpoint.length(LEN_IPHPAI);
14  _controlEndpoint.code(IPV4_UDP);
15  _controlEndpoint.ipAddress(parameters.propertyValue<uint32_t>(PID_CURRENT_IP_ADDRESS));
16  _controlEndpoint.ipPortNumber(KNXIP_MULTICAST_PORT);
17 
18  _crd.length((type == 4) ? 4 : 2); //TunnelConnectionResponse length = 4; ConfigConnectionResponse length = 2;
19  _crd.type(type);
20  if(type == 4) // only fill address when it is a TunnelConnectionResponse
21  _crd.address(address);
22 }
23 
24 KnxIpConnectResponse::KnxIpConnectResponse(uint8_t channel, uint8_t errorCode)
25  : KnxIpFrame(LEN_KNXIP_HEADER + 1 /*Channel*/ + 1 /*Status*/),
26  _controlEndpoint(nullptr),
27  _crd(nullptr)
28 {
30 
31  _data[LEN_KNXIP_HEADER] = channel;
32  _data[LEN_KNXIP_HEADER + 1] = errorCode;
33 }
34 
35 
37 {
38  return _controlEndpoint;
39 }
40 
42 {
43  return _crd;
44 }
45 
46 #endif
T propertyValue(PropertyID id)
uint8_t length() const
Definition: knx_ip_crd.cpp:9
void address(uint16_t addr)
Definition: knx_ip_crd.cpp:36
void type(uint8_t addr)
Definition: knx_ip_crd.cpp:24
IpHostProtocolAddressInformation & controlEndpoint()
KnxIpConnectResponse(IpParameterObject &parameters, uint16_t address, uint16_t port, uint8_t channel, uint8_t type)
uint16_t serviceTypeIdentifier() const
uint8_t * _data
Definition: knx_ip_frame.h:54
@ ConnectResponse
Definition: knx_ip_frame.h:21
@ PID_CURRENT_IP_ADDRESS
Definition: property.h:121