xojo:info:constants

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
xojo:info:constants [2021/04/24 18:17]
mz angelegt
xojo:info:constants [2021/04/26 09:41] (aktuell)
mz
Zeile 1: Zeile 1:
 +
 +&&XML&&
 +
 +<?xml version="1.0" encoding="UTF-8"?>
 +<RBProject version="2021r1" FormatVersion="2" MinIDEVersion="20070100">
 +<block type="Module" ID="1757749247">
 + <ObjName>KNXnetIP_client</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <Superclass>UDPSocket</Superclass>
 + <ItemFlags>0</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <HookInstance>
 +  <ItemName>DataAvailable</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2140579839</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub DataAvailable()</SourceLine>
 +   <SourceLine>do until me.PacketsAvailable = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>IncomingFrame(me.Read) // process received datagram</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>loop</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 + </HookInstance>
 + <Method>
 +  <ItemName>Open</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1375277055</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Open()</SourceLine>
 +   <SourceLine>self.Port = k_KNXnetIP_PortNumber</SourceLine>
 +   <SourceLine>self.RouterHops = 32</SourceLine>
 +   <SourceLine>self.SendToSelf = False</SourceLine>
 +   <SourceLine>self.Connect</SourceLine>
 +   <SourceLine>mMulticastStatus = self.JoinMulticastGroup(k_KNXnetIP_SystemSetupMulticastAddress)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>IncomingFrame</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1630824447</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub IncomingFrame(rxd As Datagram)</SourceLine>
 +   <SourceLine>// incoming Datagram</SourceLine>
 +   <SourceLine>print RepeatChar("=", kLogWidth)</SourceLine>
 +   <SourceLine>print "From " + rxd.Address + ":" + rxd.Port.ToString + " received " + rxd.Data.Bytes.ToString + " Bytes"</SourceLine>
 +   <SourceLine>dump rxd.Data</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// extract frame header</SourceLine>
 +   <SourceLine>var header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>header.StringValue(k_BIG_ENDIAN) = rxd.Data.LeftBytes(header.Size)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// check for valid KNXnet/IP frame</SourceLine>
 +   <SourceLine>if header.Header_Length = k_HEADER_SIZE_10 and header.Protocol_Version = k_KNXnetIP_VERSION_10 then</SourceLine>
 +   <SourceLine>print "---- Frame Header ----"</SourceLine>
 +   <SourceLine>print "Header len:    " + header.Header_Length.ToString</SourceLine>
 +   <SourceLine>print "Proto Ver:     " + header.Protocol_Version.ToHex(2)</SourceLine>
 +   <SourceLine>print "Service Type:  " + header.Service_Type.ToHex(4)</SourceLine>
 +   <SourceLine>print "Total len:     " + header.Total_Length.ToString + " (actual len = " + rxd.Data.Bytes.ToString + ")"</SourceLine>
 +   <SourceLine>if header.Total_Length &lt;&gt; rxd.Data.Bytes then print "**** WARNING: len contradictory ! ****"</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine>else</SourceLine>
 +   <SourceLine>print "UNKNOWN frame. discarding..." // discard</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine>Return</SourceLine>
 +   <SourceLine>end if</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// process known Services</SourceLine>
 +   <SourceLine>var body as String = rxd.Data.MiddleBytes(header.Header_Length)</SourceLine>
 +   <SourceLine>Select Case header.Service_Type</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.SEARCH_RESPONSE)</SourceLine>
 +   <SourceLine>print "SEARCH_RESPONSE"</SourceLine>
 +   <SourceLine>Search_Response(body)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.DESCRIPTION_RESPONSE)</SourceLine>
 +   <SourceLine>print "DESCRIPTION_RESPONSE"</SourceLine>
 +   <SourceLine>Description_Response(body)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.CONNECT_RESPONSE)</SourceLine>
 +   <SourceLine>Connection.Rx_CONNECT_RESPONSE(rxd.Data)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.CONNECTIONSTATE_RESPONSE)</SourceLine>
 +   <SourceLine>print "CONNECTIONSTATE_RESPONSE"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.TUNNELING_REQUEST)</SourceLine>
 +   <SourceLine>print "TUNNELING_REQUEST"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.TUNNELING_ACK)</SourceLine>
 +   <SourceLine>print "TUNNELING_ACK"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.DISCONNECT_REQUEST)</SourceLine>
 +   <SourceLine>print "DISCONNECT_REQUEST"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint16(e_ServiceType.DISCONNECT_RESPONSE)</SourceLine>
 +   <SourceLine>Connection.Rx_DISCONNECT_RESPONSE(rxd.Data)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>else</SourceLine>
 +   <SourceLine>print "UNKNOWN Service Type. discarding..."</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine>Return</SourceLine>
 +   <SourceLine>end select</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>rxd As Datagram</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Search_Request</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1776386047</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Search_Request()</SourceLine>
 +   <SourceLine>if not self.IsConnected then Return // we need an open port</SourceLine>
 +   <SourceLine>if Search_Waiting then Return // search already running</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// clear results array</SourceLine>
 +   <SourceLine>DIB_Search_Responses.RemoveAll</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// prepare request</SourceLine>
 +   <SourceLine>var frame As s_SEARCH_REQUEST</SourceLine>
 +   <SourceLine>frame.Frame_Header = FRAME_HEADER_struct(uint16(e_ServiceType.SEARCH_REQUEST), frame.Size)</SourceLine>
 +   <SourceLine>frame.Discovery_Endpoint = HPAI_struct(self.LocalAddress, self.Port, uint8(e_HostProtocol.IPV4_UDP))</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// start timer and enable receiver</SourceLine>
 +   <SourceLine>Search_Waiting = True</SourceLine>
 +   <SourceLine>Timer.CallLater(k_SEARCH_REQUEST_TIMEOUT * 1000, AddressOf Search_Timeout)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// send</SourceLine>
 +   <SourceLine>self.Write(k_KNXnetIP_SystemSetupMulticastAddress, frame.StringValue(k_BIG_ENDIAN))</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Search_Response</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1695733759</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Search_Response(body as String)</SourceLine>
 +   <SourceLine>if not Search_Waiting then Return</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>var i as Integer = 0 // reading index</SourceLine>
 +   <SourceLine>var h As s_DIB_HEADER</SourceLine>
 +   <SourceLine>var dib as new c_DIB_Search</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get HPAI block</SourceLine>
 +   <SourceLine>dib.HPAI.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_HPAI.Size)</SourceLine>
 +   <SourceLine>i = i + s_HPAI.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>print "Server Control Endpoint: " + IPV4_ADDR_string(dib.HPAI.IP_Address) + ":" + dib.HPAI.IP_Port_Number.ToString + _</SourceLine>
 +   <SourceLine>" " + if(dib.HPAI.Host_Protocol_Code = 1, "UDP", "TCP")</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get DEVICE_INFO block</SourceLine>
 +   <SourceLine>h.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_HEADER.Size) // ASSERT: len = &amp;h36, typecode = &amp;h01</SourceLine>
 +   <SourceLine>i = i + s_DIB_HEADER.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>dib.DEVICE_INFO.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_DEVICE_INFO.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_DEVICE_INFO.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>print "Name:   " + dib.DEVICE_INFO.Device_Friendly_Name</SourceLine>
 +   <SourceLine>print "KNX IA: " + KNX_IA_string(dib.DEVICE_INFO.KNX_Individual_Address)</SourceLine>
 +   <SourceLine>print "Medium: " + dib.DEVICE_INFO.KNX_Medium.ToHex(2)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get SUPP_SVC_FAMILIES</SourceLine>
 +   <SourceLine>h.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_HEADER.Size) // ASSERT: typecode = &amp;h02</SourceLine>
 +   <SourceLine>i = i + s_DIB_HEADER.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>var n as Integer</SourceLine>
 +   <SourceLine>n = (h.Structure_Length - s_DIB_HEADER.Size) / s_DIB_SUPP_SVC_FAMILIES_ITEM.Size</SourceLine>
 +   <SourceLine>for j as Integer = 1 to n</SourceLine>
 +   <SourceLine>var fi as s_DIB_SUPP_SVC_FAMILIES_ITEM</SourceLine>
 +   <SourceLine>fi.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_SUPP_SVC_FAMILIES_ITEM.Size)</SourceLine>
 +   <SourceLine>dib.SUPP_SVC_FAMILIES.Add(fi)</SourceLine>
 +   <SourceLine>i = i + s_DIB_SUPP_SVC_FAMILIES_ITEM.Size</SourceLine>
 +   <SourceLine>next</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>DIB_Search_Responses.Add(dib)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>body as String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>MulticastStatus</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>406990847</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function MulticastStatus() As Boolean</SourceLine>
 +   <SourceLine>return mMulticastStatus</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>Boolean</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Print_Status</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>452614143</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Print_Status()</SourceLine>
 +   <SourceLine>print RepeatChar("-", kLogWidth)</SourceLine>
 +   <SourceLine>print if(IsConnected, "Listening enabled", "*** OFFLINE ***")</SourceLine>
 +   <SourceLine>print if(mMulticastStatus, "Multicast Rx enabled", "*** Multicast OFF ***")</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine>print "Local Address:    " + LocalAddress</SourceLine>
 +   <SourceLine>print "Local Port:       " + Port.ToString</SourceLine>
 +   <SourceLine>print "Broadcast Addr:   " + BroadcastAddress</SourceLine>
 +   <SourceLine>print "Multicast Addr:   " + k_KNXnetIP_SystemSetupMulticastAddress</SourceLine>
 +   <SourceLine>if NetworkInterface = nil then</SourceLine>
 +   <SourceLine>print "Interface:        nil"</SourceLine>
 +   <SourceLine>else</SourceLine>
 +   <SourceLine>print "Interface Name:   " + NetworkInterface.Name</SourceLine>
 +   <SourceLine>print "Interface Addr:   " + NetworkInterface.IPAddress</SourceLine>
 +   <SourceLine>print "Interface Subnet: " + NetworkInterface.SubnetMask</SourceLine>
 +   <SourceLine>print "Interface MAC:    " + NetworkInterface.MACAddress</SourceLine>
 +   <SourceLine>end if</SourceLine>
 +   <SourceLine>print "TTL:              " + RouterHops.ToString</SourceLine>
 +   <SourceLine>print "Echo:             " + SendToSelf.ToString</SourceLine>
 +   <SourceLine>print "Packets Avail:    " + PacketsAvailable.ToString</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Search_Timeout</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1401505791</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Search_Timeout()</SourceLine>
 +   <SourceLine>Search_Waiting = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Description_Request</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>826865663</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Description_Request(serverIP as string)</SourceLine>
 +   <SourceLine>if not self.IsConnected then Return // we need an open port</SourceLine>
 +   <SourceLine>if Description_Waiting then Return // description already running</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// prepare request</SourceLine>
 +   <SourceLine>var frame As s_DESCRIPTION_REQUEST</SourceLine>
 +   <SourceLine>frame.Frame_Header = FRAME_HEADER_struct(uint16(e_ServiceType.DESCRIPTION_REQUEST), frame.Size)</SourceLine>
 +   <SourceLine>frame.Control_Endpoint = HPAI_struct(self.LocalAddress, self.Port, uint8(e_HostProtocol.IPV4_UDP))</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// start timer and enable receiver</SourceLine>
 +   <SourceLine>Description_Waiting = True</SourceLine>
 +   <SourceLine>Timer.CallLater(k_DESCRIPTION_REQUEST_TIMEOUT * 1000, AddressOf Description_Timeout)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// send</SourceLine>
 +   <SourceLine>self.Write(serverIP, frame.StringValue(k_BIG_ENDIAN))</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>serverIP as string</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Description_Response</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2089555967</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Description_Response(body as String)</SourceLine>
 +   <SourceLine>if not Description_Waiting then Return </SourceLine>
 +   <SourceLine>Description_Waiting = False</SourceLine>
 +   <SourceLine>Timer.CancelCallLater(AddressOf Description_Timeout)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>var i as Integer = 0 // reading body index</SourceLine>
 +   <SourceLine>var h As s_DIB_HEADER</SourceLine>
 +   <SourceLine>var b as string // current block</SourceLine>
 +   <SourceLine>var n as Integer // struct len</SourceLine>
 +   <SourceLine>var dib as new c_DIB_Description</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>do</SourceLine>
 +   <SourceLine>// get header</SourceLine>
 +   <SourceLine>h.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_HEADER.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_HEADER.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// process typecode</SourceLine>
 +   <SourceLine>select case h.Description_Type_Code</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint8(e_DIB_Type.DEVICE_INFO)</SourceLine>
 +   <SourceLine>// ASSERT: h.Structure_Length == s_DIB_HEADER.Size + s_DIB_DEVICE_INFO.Size</SourceLine>
 +   <SourceLine>dib.DEVICE_INFO.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_DEVICE_INFO.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_DEVICE_INFO.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint8(e_DIB_Type.SUPP_SVC_FAMILIES)</SourceLine>
 +   <SourceLine>n = (h.Structure_Length - s_DIB_HEADER.Size) / s_DIB_SUPP_SVC_FAMILIES_ITEM.Size</SourceLine>
 +   <SourceLine>for j as Integer = 1 to n</SourceLine>
 +   <SourceLine>var fi as s_DIB_SUPP_SVC_FAMILIES_ITEM</SourceLine>
 +   <SourceLine>fi.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_SUPP_SVC_FAMILIES_ITEM.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_SUPP_SVC_FAMILIES_ITEM.Size</SourceLine>
 +   <SourceLine>dib.SUPP_SVC_FAMILIES.Add(fi)</SourceLine>
 +   <SourceLine>next</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint8(e_DIB_Type.IP_CONFIG)</SourceLine>
 +   <SourceLine>// ASSERT: h.Structure_Length == s_DIB_HEADER.Size + s_DIB_IP_CONFIG.Size</SourceLine>
 +   <SourceLine>dib.IP_CONFIG.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_IP_CONFIG.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_IP_CONFIG.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint8(e_DIB_Type.IP_CUR_CONFIG)</SourceLine>
 +   <SourceLine>// ASSERT: h.Structure_Length == s_DIB_HEADER.Size + s_DIB_IP_CUR_CONFIG.Size</SourceLine>
 +   <SourceLine>dib.IP_CUR_CONFIG.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_IP_CUR_CONFIG.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_IP_CUR_CONFIG.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint8(e_DIB_Type.KNX_ADDRESSES)</SourceLine>
 +   <SourceLine>n = (h.Structure_Length - s_DIB_HEADER.Size) / s_DIB_KNX_ADDRESSES_ITEM.Size</SourceLine>
 +   <SourceLine>for j as Integer = 1 to n</SourceLine>
 +   <SourceLine>var ki as s_DIB_KNX_ADDRESSES_ITEM</SourceLine>
 +   <SourceLine>ki.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_KNX_ADDRESSES_ITEM.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_KNX_ADDRESSES_ITEM.Size</SourceLine>
 +   <SourceLine>dib.KNX_ADDRESSES.Add(ki)</SourceLine>
 +   <SourceLine>next</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>case uint8(e_DIB_Type.MFR_DATA)</SourceLine>
 +   <SourceLine>dib.MFR_DATA.StringValue(k_BIG_ENDIAN) = body.MiddleBytes(i, s_DIB_MFR_DATA.Size)</SourceLine>
 +   <SourceLine>i = i + s_DIB_MFR_DATA.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>n = h.Structure_Length - s_DIB_HEADER.Size - s_DIB_MFR_DATA.Size</SourceLine>
 +   <SourceLine>dib.MFR_DATA_SPEC = body.MiddleBytes(i, n)</SourceLine>
 +   <SourceLine>i = i + n</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>else // unknown</SourceLine>
 +   <SourceLine>i = i + h.Structure_Length - s_DIB_HEADER.Size</SourceLine>
 +   <SourceLine>print "*** UNKNOWN DIB found"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>end select</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>loop until i &gt;= body.Bytes</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>DIB_Description_Response = dib</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>body as String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Description_Timeout</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1078249471</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Description_Timeout()</SourceLine>
 +   <SourceLine>Description_Waiting = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Constructor</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>735172607</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Constructor()</SourceLine>
 +   <SourceLine>// Calling the overridden superclass constructor.</SourceLine>
 +   <SourceLine>// Note that this may need modifications if there are multiple constructor choices.</SourceLine>
 +   <SourceLine>// Possible constructor calls:</SourceLine>
 +   <SourceLine>// Constructor() -- From UDPSocket</SourceLine>
 +   <SourceLine>// Constructor() -- From SocketCore</SourceLine>
 +   <SourceLine>Super.Constructor</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>knx_CONNECT = new c_CONNECT</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Property>
 +  <ItemName>mMulticastStatus</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1998583807</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mMulticastStatus As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mMulticastStatus As Boolean</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>DIB_Search_Responses()</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>461461503</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>DIB_Search_Responses() As c_DIB_Search</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>DIB_Search_Responses() As c_DIB_Search</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mSearch_Waiting</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>55275519</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mSearch_Waiting As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mSearch_Waiting As Boolean</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Search_Waiting</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>424878079</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Search_Waiting As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Search_Waiting As Boolean</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <SetAccessor>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Set</SourceLine>
 +   <SourceLine>mSearch_Waiting = value</SourceLine>
 +   <SourceLine>print "*** SEARCHING " + if(mSearch_Waiting, "ON", "OFF")</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Set</SourceLine>
 +  </SetAccessor>
 +  <GetAccessor>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Get</SourceLine>
 +   <SourceLine>Return mSearch_Waiting</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Get</SourceLine>
 +  </GetAccessor>
 + </Property>
 + <Property>
 +  <ItemName>DIB_Description_Response</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>620322815</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>DIB_Description_Response As c_DIB_Description</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>DIB_Description_Response As c_DIB_Description</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mDescription_Waiting</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>887973887</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mDescription_Waiting As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mDescription_Waiting As Boolean</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Description_Waiting</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1375510527</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Description_Waiting As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Description_Waiting As Boolean</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <SetAccessor>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Set</SourceLine>
 +   <SourceLine>mDescription_Waiting = value</SourceLine>
 +   <SourceLine>print "*** DESCRIPTION " + if(mDescription_Waiting, "ON", "OFF")</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Set</SourceLine>
 +  </SetAccessor>
 +  <GetAccessor>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Get</SourceLine>
 +   <SourceLine>Return mDescription_Waiting</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Get</SourceLine>
 +  </GetAccessor>
 + </Property>
 + <Property>
 +  <ItemName>knx_CONNECT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1555871743</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>knx_CONNECT As c_CONNECT</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>knx_CONNECT As c_CONNECT</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>knx_DISCONNECT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1625368575</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>knx_DISCONNECT As c_DISCONNECT</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>knx_DISCONNECT As c_DISCONNECT</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Port</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>RouterHops</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>32</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>SendToSelf</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>False</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="1925568511">
 + <ObjName>IPAddressTextField</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <Superclass>TextField</Superclass>
 + <ItemFlags>0</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <HookInstance>
 +  <ItemName>KeyDown</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1323888639</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function KeyDown(Key As String) As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If NOT KeyDown(Key) Then // raise event to subclass before</SourceLine>
 +   <SourceLine>print "=== KEY: " + key.ToInteger.ToString</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Key &lt;&gt; chr(9) And Key &lt;&gt; chr(30) And Key &lt;&gt; chr(31) Then  // Don't check for tab keys or arrow up/down keys</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If (Asc(Key) &lt; 48 or Asc(Key) &gt; 57) And Asc(Key) &lt;&gt; 8  And Asc(Key) &lt;&gt; 46 Then Return True  //  If the key being pressed is not a number, backspace or period, then return and stop any input</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Dim TextArray() As String  // We will use this to break down the text of the field into an array so as to see how many Octets we have</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Asc(Key) = 8 Then                                // If we have a backspace then we...</SourceLine>
 +   <SourceLine>AddyComplete = False                        // If we have backed up, the address is now not complete regardless if it was before.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Dim s as string = me.Text.Left(me.text.len-1)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If s.CountFields(".") = 4 Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If s.NthField(".",4) = "" Then</SourceLine>
 +   <SourceLine>RaiseEvent AddressChanged(3,AddyComplete)</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>RaiseEvent AddressChanged(s.CountFields("."),AddyComplete)</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return False                           // Allow the framework to do it's stuff</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf AddyComplete Then  // If the address is complete, return true to block any further input or action</SourceLine>
 +   <SourceLine>Return True</SourceLine>
 +   <SourceLine>End</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If InStr(me.Text, ".") = 0 Then  // If there are no periods in the field's text then we are in the first octet.  So trying to create an array will fail.  Instead we pass what we need.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>me.Text = BuildOctet(me.Text, Key,Len(me.Text)+1,1)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>TextArray = Split(me.Text,"." // Create an array separated into elements by the period which says how many Octets we have</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>TextArray(TextArray.Ubound) = BuildOctet(TextArray(TextArray.Ubound),Key,Len(TextArray(TextArray.Ubound))+1,TextArray.Ubound+1)  // Build the Octet </SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// The text we want to send to the BuildOctet function is the text that is in the last Octet we have built.</SourceLine>
 +   <SourceLine>// We want to add the Key to the new text</SourceLine>
 +   <SourceLine>// The number of characters entered into the new Octet so far is the length of the string in the last array element plus 1 for the character just entered</SourceLine>
 +   <SourceLine>// The Octet number is the array element number + 1 (add the one as we start the Octet with 1 and arrays start with 0</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>me.Text = Join(TextArray,"." // Build the string back up.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>me.SelStart = Len(me.Text)  // Set the insertion point</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return True // We built the string - don't let the framework.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>Return False // Let the framework handle the tab key</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return True // We built the string - don't let the framework.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 + </HookInstance>
 + <Method>
 +  <ItemName>BuildOctet</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1642061823</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function BuildOctet(MyText As String, MyKey as String, Count as Integer,Octet As Integer) As String</SourceLine>
 +   <SourceLine>// MyText is the intial or existing text from the text field.</SourceLine>
 +   <SourceLine>// MyKey is the key that has been pressed</SourceLine>
 +   <SourceLine>// Count is the current character position (starting at 1) in the current octet</SourceLine>
 +   <SourceLine>// Octet is the current Octet we are in (starting at 1)</SourceLine>
 +   <SourceLine>If Not Subnet Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Select Case Count</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 1  // First Character in the Octet</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If (Octet =1 or Octet = 4) And MyKey = "0" Then  // We don't allow a first or last octet of 0 so we ignore the key</SourceLine>
 +   <SourceLine>MyText = ""</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf (Octet = 2 or Octet = 3) and MyKey = "0" Then  // If 0 is entered as the first character of the 2nd or third octet, we add the period</SourceLine>
 +   <SourceLine>MyText = MyKey+"."</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf MyKey = "." Then  // We don't allow a period to be entered as the first key.  Return a blank string (ignore the key)</SourceLine>
 +   <SourceLine>MyText=""</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else  // We have valid input - return the key</SourceLine>
 +   <SourceLine>MyText = MyKey</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End if</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 2 // Second Character in the Octet or Octet termination (period)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyKey = "." Then   // If we have a period...</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Octet &lt; 4 Then MyText = MyText+MyKey  // If We are in Octets 1, 2 or 3 then we return the initial text plus the period.  Otherwise, we end up returning the intial text.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Elseif Asc(mid(MyText,len(MyText),1)) &gt; 50 Then  // If the previous character is &gt; 2 </SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText = FourthOctetCheck(MyText,MyKey,Octet)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Elseif Asc(mid(MyText,len(MyText),1)) = 50 Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If ASC(MyKey) &gt; 53 Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText=FourthOctetCheck(MyText,MyKey,Octet)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText = MyText+MyKey</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText = MyText+MyKey  // Otherwise we have plain, valid text - add it on to the existing text.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 3  // Third character for the Octet or Octet termination (period)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyKey = "." Then  // If the third character is a period</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Octet &lt; 4 Then MyText = MyText+MyKey  // If We are in Octets 1, 2 or 3 then we return the initial text plus the period.  Otherwise, we end up returning the intial text.</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf Asc(mid(MyText,len(MyText)-1,1)) = 50 And Asc(mid(MyText,len(MyText),1)) = 53 and Asc(MyKey) &gt; 52 Then</SourceLine>
 +   <SourceLine>MyText = MyText  // If two characters prior is a 2 and 1 character prior is a 5 and we are trying to enter higher than 4 then return and ignore the input since we can't have higher than 254.</SourceLine>
 +   <SourceLine>// Do Nothing</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyText.Left(1).Asc = 50 Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyText.Mid(2,1).Asc &gt; 53 Then</SourceLine>
 +   <SourceLine>MyText = FourthOctetCheck(MyText,"",Octet)</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = FourthOctetCheck(MyText,MyKey,Octet)</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf MyText.Left(1).Asc &gt; 50 Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText = FourthOctetCheck(MyText,"",Octet)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText = FourthOctetCheck(MyText,MyKey,Octet)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End if</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Select</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//Handle 224, 240, 248, 252, 254,255</SourceLine>
 +   <SourceLine>Select Case Count</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 1</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyKey = "0" and Octet &gt;1 Then</SourceLine>
 +   <SourceLine>MyText = BuildSubnet(MyText+MyKey,Octet)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf MyKey = "1" or MyKey = "2" Then</SourceLine>
 +   <SourceLine>MyText = MyKey</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = ""</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 2</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If (Left(MyText,1) = "1" and (MyKey = "2" or MyKey = "9")) Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyKey = "2" Then</SourceLine>
 +   <SourceLine>MyText = MyText+"28"</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText+"92"</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText = BuildSubnet(MyText,Octet)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf (Left(MyText,1) = "2" and (MyKey = "2" or MyKey = "4" or MyKey = "5")) Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//Handle 224, 240, 248, 252, 254,255</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyKey = "2" Then</SourceLine>
 +   <SourceLine>MyText = MyText+"24"</SourceLine>
 +   <SourceLine>MyText = BuildSubnet(MyText,Octet)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf MyKey = "4" Then</SourceLine>
 +   <SourceLine>MyText = MyText+"4"</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText+"5"</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>'AddyComplete = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 3</SourceLine>
 +   <SourceLine>Dim test as string = Mid(MyText,2,1)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If MyKey = "0" Then</SourceLine>
 +   <SourceLine>If Left(MyText,2) = "24" Then </SourceLine>
 +   <SourceLine>MyText = MyText+MyKey</SourceLine>
 +   <SourceLine>MyText = BuildSubnet(MyText,Octet)</SourceLine>
 +   <SourceLine>Else </SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//Handle 224, 240, 248, 252, 254,255</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf MyKey = "2" Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Left(MyText,2) = "25"  Or Left(MyText,2) = "19" Then</SourceLine>
 +   <SourceLine>MyText = MyText+MyKey</SourceLine>
 +   <SourceLine>MyText = BuildSubnet(MyText,Octet)</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End IF</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf MyKey = "4" Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Left(MyText,2) = "25" Then</SourceLine>
 +   <SourceLine>MyText = MyText + MyKey</SourceLine>
 +   <SourceLine>MyText = BuildSubnet(MyText,Octet)</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>ElseIf MyKey = "5" And Octet &lt; 4 Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Left(MyText,2) = "25" Then</SourceLine>
 +   <SourceLine>MyText = MyText+"5."</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Elseif MyKey = "8" Then</SourceLine>
 +   <SourceLine>If Left(MyText,2) = "24" Or Left(MyText,2) = "12" Then</SourceLine>
 +   <SourceLine>MyText = MyText+MyKey</SourceLine>
 +   <SourceLine>MyText = BuildSubnet(MyText,Octet)</SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Select</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>RaiseEvent AddressChanged(Octet,AddyComplete)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return MyText</SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>MyText As String, MyKey as String, Count as Integer,Octet As Integer</ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>BuildSubnet</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>256712703</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function BuildSubnet(MyText as String,Octet as Integer) As String</SourceLine>
 +   <SourceLine>Select Case Octet</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 1</SourceLine>
 +   <SourceLine>MyText = MyText +".0.0.0"</SourceLine>
 +   <SourceLine>Case 2</SourceLine>
 +   <SourceLine>MyText = MyText+".0.0"</SourceLine>
 +   <SourceLine>Case 3</SourceLine>
 +   <SourceLine>MyText = MyText+".0"</SourceLine>
 +   <SourceLine>Case 4</SourceLine>
 +   <SourceLine>MyText = MyText</SourceLine>
 +   <SourceLine>End</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>AddyComplete = True</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return MyText</SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>MyText as String,Octet as Integer</ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>FourthOctetCheck</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>48945151</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function FourthOctetCheck(MyText as String, MyKey as String, Octet As  Integer) As String</SourceLine>
 +   <SourceLine>If Octet &lt; 4 Then  // If we are not in the 4th Octet, the Octet will now be complete so add the key and the period to the string</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//Remove Any Extraneous zeros</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>If Len(MyText) &gt; 1 Then  // Only check of the text length &gt; 1 - we can have 1 zero</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>While MyText.Left(1).Asc = 48  // If the first character is already a zero then keep only the right most characters.  Loop it until you get rid of leading zeros.</SourceLine>
 +   <SourceLine>MyText = MyText.Right(Len(MyText)-1)</SourceLine>
 +   <SourceLine>Wend</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>MyText = MyText+MyKey+"."</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Else</SourceLine>
 +   <SourceLine>MyText = MyText+MyKey   // We are in the 4th Octet, add in the new character but no period and mark the address as complete so we can't enter more input.</SourceLine>
 +   <SourceLine>AddyComplete = True             // The address is complete.  No more characters will be allowed</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return MyText</SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>MyText as String, MyKey as String, Octet As  Integer</ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Hook>
 +  <ItemName>AddressChanged</ItemName>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemFlags>33</ItemFlags>
 +  <SystemFlags>0</SystemFlags>
 +  <ItemParams>Octet As Integer, AddressComplete As Boolean</ItemParams>
 +  <ItemResult></ItemResult>
 + </Hook>
 + <Hook>
 +  <ItemName>KeyDown</ItemName>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemFlags>33</ItemFlags>
 +  <SystemFlags>0</SystemFlags>
 +  <ItemParams>Key As String</ItemParams>
 +  <ItemResult>Boolean</ItemResult>
 + </Hook>
 + <Note>
 +  <ItemName>Documentation</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1867466751</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <NoteLine>Documentation</NoteLine>
 +   <NoteLine>IP Address TextField</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>Written by: Jon Ogden, jon@justaddsoftware.net</NoteLine>
 +   <NoteLine>©2012 Just Add Software, LLC</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>This custom text field is used to ensure generation of "proper" IP addresses.  It will allow users to enter in any valid set of IPV4 Octets.  Depending on the character's entered,</NoteLine>
 +   <NoteLine>a new Octet will either be started by the automatic entry of a period or entry will be blocked all together (ie: you can't enter an Octet of something like 259).</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>Full docmentation of the code is provided by comments.</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>I'm not sure if there is any more to explain than this!</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>I'd appreciate any feedback or comments on where you are using this.</NoteLine>
 +  </ItemSource>
 +  <ItemFlags>0</ItemFlags>
 + </Note>
 + <Note>
 +  <ItemName>License</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>523532287</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <NoteLine>License</NoteLine>
 +   <NoteLine>IP Address TextField</NoteLine>
 +   <NoteLine>© 2012 Just Add Software LLC</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>Written by Jon Ogden - jon@justaddsoftware.net</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>License:</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>Permission is hereby granted, free of charge, to any person obtaining a copy</NoteLine>
 +   <NoteLine>of this software and associated documentation files (the "Software"), to deal</NoteLine>
 +   <NoteLine>in the Software without restriction, including without limitation the rights to</NoteLine>
 +   <NoteLine>use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies</NoteLine>
 +   <NoteLine>of the Software, and to permit persons to whom the Software is furnished to do</NoteLine>
 +   <NoteLine>so, subject to the following conditions:</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>The author's name and company listed above and the above copyright notice and this permission notice shall be included in all</NoteLine>
 +   <NoteLine>copies or substantial portions of the Software.</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>This license note and the documentation note must accompany any redistribution of this software.</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,</NoteLine>
 +   <NoteLine>INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A</NoteLine>
 +   <NoteLine>PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</NoteLine>
 +   <NoteLine>HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF</NoteLine>
 +   <NoteLine>CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE</NoteLine>
 +   <NoteLine>OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</NoteLine>
 +   <NoteLine></NoteLine>
 +   <NoteLine></NoteLine>
 +  </ItemSource>
 +  <ItemFlags>0</ItemFlags>
 + </Note>
 + <Property>
 +  <ItemName>AddressChanged</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>93351935</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>AddressChanged As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>AddressChanged As Boolean</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>AddyComplete</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1294501887</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>AddyComplete As Boolean</SourceLine>
 +   <SourceLine>// This property is used to signify when the IP address has been completed and no more characters are allowed.</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>AddyComplete As Boolean</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mNetworkBits</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1408106495</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mNetworkBits As Integer</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mNetworkBits As Integer</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>NetworkBits</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1391302655</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>NetworkBits As Integer</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>NetworkBits As Integer</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <SetAccessor>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Set</SourceLine>
 +   <SourceLine>If me.Subnet Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Select Case value</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case 24</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.0"</SourceLine>
 +   <SourceLine>Case 1</SourceLine>
 +   <SourceLine>me.Text = "128.0.0.0"</SourceLine>
 +   <SourceLine>Case 2</SourceLine>
 +   <SourceLine>me.Text = "192.0.0.0"</SourceLine>
 +   <SourceLine>Case 3</SourceLine>
 +   <SourceLine>me.Text = "224.0.0.0"</SourceLine>
 +   <SourceLine>Case 4</SourceLine>
 +   <SourceLine>me.Text = "240.0.0.0"</SourceLine>
 +   <SourceLine>Case 5</SourceLine>
 +   <SourceLine>me.Text = "248.0.0.0"</SourceLine>
 +   <SourceLine>Case 6</SourceLine>
 +   <SourceLine>me.Text = "252.0.0.0"</SourceLine>
 +   <SourceLine>Case 7</SourceLine>
 +   <SourceLine>me.Text = "254.0.0.0"</SourceLine>
 +   <SourceLine>Case 8</SourceLine>
 +   <SourceLine>me.Text = "255.0.0.0"</SourceLine>
 +   <SourceLine>Case 9</SourceLine>
 +   <SourceLine>me.Text = "255.128.0.0"</SourceLine>
 +   <SourceLine>Case 10</SourceLine>
 +   <SourceLine>me.Text = "255.192.0.0"</SourceLine>
 +   <SourceLine>Case 11</SourceLine>
 +   <SourceLine>me.Text = "255.224.0.0"</SourceLine>
 +   <SourceLine>Case 12</SourceLine>
 +   <SourceLine>me.Text = "255.240.0.0"</SourceLine>
 +   <SourceLine>Case 13</SourceLine>
 +   <SourceLine>me.Text = "255.248.0.0"</SourceLine>
 +   <SourceLine>Case 14</SourceLine>
 +   <SourceLine>me.Text = "255.252.0.0"</SourceLine>
 +   <SourceLine>Case 15</SourceLine>
 +   <SourceLine>me.Text = "255.254.0.0"</SourceLine>
 +   <SourceLine>Case 16</SourceLine>
 +   <SourceLine>me.Text = "255.255.0.0"</SourceLine>
 +   <SourceLine>Case 17</SourceLine>
 +   <SourceLine>me.Text = "255.255.128.0"</SourceLine>
 +   <SourceLine>Case 18</SourceLine>
 +   <SourceLine>me.Text = "255.255.192.0"</SourceLine>
 +   <SourceLine>Case 19</SourceLine>
 +   <SourceLine>me.Text = "255.255.224.0"</SourceLine>
 +   <SourceLine>Case 20</SourceLine>
 +   <SourceLine>me.Text = "255.255.240.0"</SourceLine>
 +   <SourceLine>Case 21</SourceLine>
 +   <SourceLine>me.Text = "255.255.248.0"</SourceLine>
 +   <SourceLine>Case 22</SourceLine>
 +   <SourceLine>me.Text = "255.255.252.0"</SourceLine>
 +   <SourceLine>Case 23</SourceLine>
 +   <SourceLine>me.Text = "255.255.254.0"</SourceLine>
 +   <SourceLine>Case 25</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.128"</SourceLine>
 +   <SourceLine>Case 26</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.192"</SourceLine>
 +   <SourceLine>Case 27</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.224"</SourceLine>
 +   <SourceLine>Case 28</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.240"</SourceLine>
 +   <SourceLine>Case 29</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.248"</SourceLine>
 +   <SourceLine>Case 30</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.252"</SourceLine>
 +   <SourceLine>Case 31</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.254"</SourceLine>
 +   <SourceLine>Case 32</SourceLine>
 +   <SourceLine>me.Text = "255.255.255.255"</SourceLine>
 +   <SourceLine>End Select</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End If</SourceLine>
 +   <SourceLine>End Set</SourceLine>
 +  </SetAccessor>
 +  <GetAccessor>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Get</SourceLine>
 +   <SourceLine>If me.Subnet Then</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Select Case Me.Text</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Case "255.255.255.0"</SourceLine>
 +   <SourceLine>Return 24</SourceLine>
 +   <SourceLine>Case "128.0.0.0"</SourceLine>
 +   <SourceLine>Return 1</SourceLine>
 +   <SourceLine>Case "192.0.0.0"</SourceLine>
 +   <SourceLine>Return 2</SourceLine>
 +   <SourceLine>Case "224.0.0.0"</SourceLine>
 +   <SourceLine>Return 3</SourceLine>
 +   <SourceLine>Case "240.0.0.0"</SourceLine>
 +   <SourceLine>Return 4</SourceLine>
 +   <SourceLine>Case "248.0.0.0"</SourceLine>
 +   <SourceLine>Return 5</SourceLine>
 +   <SourceLine>Case "252.0.0.0"</SourceLine>
 +   <SourceLine>Return 6</SourceLine>
 +   <SourceLine>Case "254.0.0.0"</SourceLine>
 +   <SourceLine>Return 7</SourceLine>
 +   <SourceLine>Case "255.0.0.0"</SourceLine>
 +   <SourceLine>Return 8</SourceLine>
 +   <SourceLine>Case "255.128.0.0"</SourceLine>
 +   <SourceLine>Return 9</SourceLine>
 +   <SourceLine>Case "255.192.0.0"</SourceLine>
 +   <SourceLine>Return 10</SourceLine>
 +   <SourceLine>Case "255.224.0.0"</SourceLine>
 +   <SourceLine>Return 11</SourceLine>
 +   <SourceLine>Case "255.240.0.0"</SourceLine>
 +   <SourceLine>Return 12</SourceLine>
 +   <SourceLine>Case "255.248.0.0"</SourceLine>
 +   <SourceLine>Return 13</SourceLine>
 +   <SourceLine>Case "255.252.0.0"</SourceLine>
 +   <SourceLine>Return 14</SourceLine>
 +   <SourceLine>Case "255.254.0.0"</SourceLine>
 +   <SourceLine>Return 15</SourceLine>
 +   <SourceLine>Case "255.255.0.0"</SourceLine>
 +   <SourceLine>Return 16</SourceLine>
 +   <SourceLine>Case "255.255.128.0"</SourceLine>
 +   <SourceLine>Return 17</SourceLine>
 +   <SourceLine>Case "255.255.192.0"</SourceLine>
 +   <SourceLine>Return 18</SourceLine>
 +   <SourceLine>Case "255.255.224.0"</SourceLine>
 +   <SourceLine>Return 19</SourceLine>
 +   <SourceLine>Case "255.255.240.0"</SourceLine>
 +   <SourceLine>Return 20</SourceLine>
 +   <SourceLine>Case "255.255.248.0"</SourceLine>
 +   <SourceLine>Return 21</SourceLine>
 +   <SourceLine>Case "255.255.252.0"</SourceLine>
 +   <SourceLine>Return 22</SourceLine>
 +   <SourceLine>Case "255.255.254.0"</SourceLine>
 +   <SourceLine>Return 23</SourceLine>
 +   <SourceLine>Case "255.255.255.128"</SourceLine>
 +   <SourceLine>Return 25</SourceLine>
 +   <SourceLine>Case "255.255.255.192"</SourceLine>
 +   <SourceLine>Return 26</SourceLine>
 +   <SourceLine>Case "255.255.255.224"</SourceLine>
 +   <SourceLine>Return 27</SourceLine>
 +   <SourceLine>Case "255.255.255.240"</SourceLine>
 +   <SourceLine>Return 28</SourceLine>
 +   <SourceLine>Case "255.255.255.248"</SourceLine>
 +   <SourceLine>Return 29</SourceLine>
 +   <SourceLine>Case "255.255.255.252"</SourceLine>
 +   <SourceLine>Return 30</SourceLine>
 +   <SourceLine>Case "255.255.255.254"</SourceLine>
 +   <SourceLine>Return 31</SourceLine>
 +   <SourceLine>Case "255.255.255.255"</SourceLine>
 +   <SourceLine>Return 32</SourceLine>
 +   <SourceLine>End Select</SourceLine>
 +   <SourceLine>End</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Get</SourceLine>
 +  </GetAccessor>
 + </Property>
 + <Property>
 +  <ItemName>Subnet</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>748476415</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Subnet As Boolean</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Subnet As Boolean</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>AllowAutoDeactivate</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>True</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>BackgroundColor</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>&amp;hFFFFFF</PropertyValue>
 +   <ItemType>Color</ItemType>
 +   <EditorType>Color</EditorType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>HasBorder</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>True</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Tooltip</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <ItemType>String</ItemType>
 +   <EditorType>MultiLineEditor</EditorType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Transparent</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>False</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>AllowFocusRing</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>True</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>FontName</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Font</PropertyGroup>
 +   <PropertyValue>System</PropertyValue>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>FontSize</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Font</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Single</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>FontUnit</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Font</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>FontUnits</ItemType>
 +   <EditorType>Enum</EditorType>
 +   <Enumeration>
 +    <ItemDef>0 - Default</ItemDef>
 +    <ItemDef>1 - Pixel</ItemDef>
 +    <ItemDef>2 - Point</ItemDef>
 +    <ItemDef>3 - Inch</ItemDef>
 +    <ItemDef>4 - Millimeter</ItemDef>
 +   </Enumeration>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Hint</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Initial State</PropertyGroup>
 +   <ItemType>String</ItemType>
 +   <EditorType>MultiLineEditor</EditorType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>AllowTabs</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>False</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>TextAlignment</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>TextAlignments</ItemType>
 +   <EditorType>Enum</EditorType>
 +   <Enumeration>
 +    <ItemDef>0 - Default</ItemDef>
 +    <ItemDef>1 - Left</ItemDef>
 +    <ItemDef>2 - Center</ItemDef>
 +    <ItemDef>3 - Right</ItemDef>
 +   </Enumeration>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>AllowSpellChecking</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>False</PropertyValue>
 +   <ItemType>boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>MaximumCharactersAllowed</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>ValidationMask</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Width</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>80</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Height</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>22</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>LockLeft</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>LockTop</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>LockRight</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>LockBottom</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>TabPanelIndex</ObjName>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>TabIndex</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>TabStop</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>True</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Password</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>TextColor</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>&amp;h000000</PropertyValue>
 +   <ItemType>Color</ItemType>
 +   <EditorType>Color</EditorType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Enabled</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>True</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Format</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Visible</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Appearance</PropertyGroup>
 +   <PropertyValue>True</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Bold</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Font</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Italic</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Font</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Underline</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Font</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Text</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Initial State</PropertyGroup>
 +   <ItemType>String</ItemType>
 +   <EditorType>MultiLineEditor</EditorType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>ReadOnly</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Subnet</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>NetworkBits</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>AddressChanged</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>DataSource</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Database Binding</PropertyGroup>
 +   <ItemType>String</ItemType>
 +   <EditorType>DataSource</EditorType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>DataField</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Database Binding</PropertyGroup>
 +   <ItemType>String</ItemType>
 +   <EditorType>DataField</EditorType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="1445591039">
 + <ObjName>IPv4_Address</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <Superclass>MemoryBlock</Superclass>
 + <ItemFlags>0</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>Constructor</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2000656383</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Constructor()</SourceLine>
 +   <SourceLine>Super.Constructor(4)</SourceLine>
 +   <SourceLine>LittleEndian = False // KNX specific, needs big endian</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1027137535</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Operator_Convert() As String</SourceLine>
 +   <SourceLine>Return Value</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>986585087</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Operator_Convert(s As String)</SourceLine>
 +   <SourceLine>// acts as constructor for new object implicitly created</SourceLine>
 +   <SourceLine>Size = 4</SourceLine>
 +   <SourceLine>LittleEndian = False // KNX specific, needs big endian</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Value = s</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>s As String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Value</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>456169471</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Value() As String</SourceLine>
 +   <SourceLine>var s as String = _</SourceLine>
 +   <SourceLine>self.Byte(0).ToString + "." + _</SourceLine>
 +   <SourceLine>self.Byte(1).ToString + "." + _</SourceLine>
 +   <SourceLine>self.Byte(2).ToString + "." + _</SourceLine>
 +   <SourceLine>self.Byte(3).ToString</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return s</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Value</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>155564031</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Value(assigns s as String)</SourceLine>
 +   <SourceLine>var sa() as String = s.Split(".")</SourceLine>
 +   <SourceLine>sa.ResizeTo(3) // (index 0 to 3 are 4 elements)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>for i as Integer = 0 to 3</SourceLine>
 +   <SourceLine>self.Byte(i) = CType(sa(i).ToInteger, UInt8)</SourceLine>
 +   <SourceLine>next</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>assigns s as String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Clone</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>897695743</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Clone() As IPv4_Address</SourceLine>
 +   <SourceLine>var obj as new IPv4_Address</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>obj.UInt32Value(0) = self.UInt32Value(0)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return obj</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>IPv4_Address</ItemResult>
 + </Method>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>LittleEndian</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Boolean</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Size</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="564332543">
 + <ObjName>c_DIB_Description</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>2</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Property>
 +  <ItemName>DEVICE_INFO</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1782716415</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>DEVICE_INFO As s_DIB_DEVICE_INFO</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>DEVICE_INFO As s_DIB_DEVICE_INFO</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>SUPP_SVC_FAMILIES()</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>474753023</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>SUPP_SVC_FAMILIES() As s_DIB_SUPP_SVC_FAMILIES_ITEM</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>SUPP_SVC_FAMILIES() As s_DIB_SUPP_SVC_FAMILIES_ITEM</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>IP_CONFIG</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1586135039</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>IP_CONFIG As s_DIB_IP_CONFIG</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>IP_CONFIG As s_DIB_IP_CONFIG</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>IP_CUR_CONFIG</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1043224575</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>IP_CUR_CONFIG As s_DIB_IP_CUR_CONFIG</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>IP_CUR_CONFIG As s_DIB_IP_CUR_CONFIG</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>KNX_ADDRESSES()</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1136017407</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>KNX_ADDRESSES() As s_DIB_KNX_ADDRESSES_ITEM</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>KNX_ADDRESSES() As s_DIB_KNX_ADDRESSES_ITEM</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>MFR_DATA</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1315610623</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>MFR_DATA As s_DIB_MFR_DATA</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>MFR_DATA As s_DIB_MFR_DATA</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>MFR_DATA_SPEC</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>513429503</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>MFR_DATA_SPEC As String</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>MFR_DATA_SPEC As String</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>MFR_DATA_SPEC</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>String</ItemType>
 +   <EditorType>MultiLineEditor</EditorType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="1812180991">
 + <ObjName>c_DIB_Search</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>2</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Property>
 +  <ItemName>DEVICE_INFO</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1782716415</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>DEVICE_INFO As s_DIB_DEVICE_INFO</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>DEVICE_INFO As s_DIB_DEVICE_INFO</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>SUPP_SVC_FAMILIES()</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>474753023</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>SUPP_SVC_FAMILIES() As s_DIB_SUPP_SVC_FAMILIES_ITEM</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>SUPP_SVC_FAMILIES() As s_DIB_SUPP_SVC_FAMILIES_ITEM</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>HPAI</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>507217919</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>HPAI As s_HPAI</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>HPAI As s_HPAI</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="421066751">
 + <ObjName>c_CONNECT</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>2</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>Tx_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1567016959</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Tx_REQUEST(com As KNXnetIP_client)</SourceLine>
 +   <SourceLine>if not com.IsConnected then Return // we need an open socket</SourceLine>
 +   <SourceLine>if Busy then Return</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create frame</SourceLine>
 +   <SourceLine>var f As s_CONNECT_REQUEST</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// frame header</SourceLine>
 +   <SourceLine>f.Frame_Header.Header_Length = s_FRAME_HEADER.Size</SourceLine>
 +   <SourceLine>f.Frame_Header.Protocol_Version = k_KNXnetIP_VERSION_10</SourceLine>
 +   <SourceLine>f.Frame_Header.Service_Type = k_CONNECT_REQUEST</SourceLine>
 +   <SourceLine>f.Frame_Header.Total_Length = s_CONNECT_REQUEST.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// client control endpoint</SourceLine>
 +   <SourceLine>f.Control_Endpoint.Structure_Length = s_HPAI.Size</SourceLine>
 +   <SourceLine>f.Control_Endpoint.Host_Protocol_Code = Client_Control_Endpoint.Protocol</SourceLine>
 +   <SourceLine>f.Control_Endpoint.IP_Address = Client_Control_Endpoint.Addr.UInt32Value(0)</SourceLine>
 +   <SourceLine>f.Control_Endpoint.IP_Port_Number = Client_Control_Endpoint.Port</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// client data endpoint</SourceLine>
 +   <SourceLine>f.Data_Endpoint.Structure_Length = s_HPAI.Size</SourceLine>
 +   <SourceLine>f.Data_Endpoint.Host_Protocol_Code = Client_Data_Endpoint.Protocol</SourceLine>
 +   <SourceLine>f.Data_Endpoint.IP_Address = Client_Data_Endpoint.Addr.UInt32Value(0)</SourceLine>
 +   <SourceLine>f.Data_Endpoint.IP_Port_Number = Client_Data_Endpoint.Port</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// connection request information</SourceLine>
 +   <SourceLine>f.Connection_Request_Information.Structure_Length = s_CRI.Size</SourceLine>
 +   <SourceLine>f.Connection_Request_Information.Connection_Type_Code = k_TUNNEL_CONNECTION</SourceLine>
 +   <SourceLine>f.Connection_Request_Information.KNX_Layer = k_TUNNEL_LINKLAYER</SourceLine>
 +   <SourceLine>f.Connection_Request_Information.reserved = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create datagram</SourceLine>
 +   <SourceLine>var dg as new Datagram</SourceLine>
 +   <SourceLine>dg.Address = Server_Control_Endpoint.Addr</SourceLine>
 +   <SourceLine>dg.Port = Server_Control_Endpoint.Port</SourceLine>
 +   <SourceLine>dg.Data = f.StringValue(k_BIG_ENDIAN)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// enable receiver, start timer and send</SourceLine>
 +   <SourceLine>Busy = True</SourceLine>
 +   <SourceLine>com.Write(dg)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>print "&gt;&gt;&gt; CONNECT_REQUEST"</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com As KNXnetIP_client</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Rx_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>628858879</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Rx_RESPONSE(com as KNXnetIP_client, dg as datagram)</SourceLine>
 +   <SourceLine>if not Busy then Return // receiver disabled, ignore spurious frames</SourceLine>
 +   <SourceLine>Busy = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get dg in structure</SourceLine>
 +   <SourceLine>var f As s_CONNECT_RESPONSE</SourceLine>
 +   <SourceLine>f.StringValue(k_BIG_ENDIAN) = dg.Data</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// check header (ASSERTION)</SourceLine>
 +   <SourceLine>if f.Frame_Header.Total_Length &lt;&gt; s_CONNECT_RESPONSE.Size then print "??? FRAME size ERROR"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read payload data fields</SourceLine>
 +   <SourceLine>Comm_Channel_ID = f.Communication_Channel_ID</SourceLine>
 +   <SourceLine>mStatus = f.Status</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read Servers HPAI</SourceLine>
 +   <SourceLine>if f.Data_Endpoint.Structure_Length &lt;&gt; s_HPAI.Size then print "??? HPAI size ERROR"</SourceLine>
 +   <SourceLine>Server_Data_Endpoint.Addr.UInt32Value(0) = f.Data_Endpoint.IP_Address</SourceLine>
 +   <SourceLine>Server_Data_Endpoint.Port = f.Data_Endpoint.IP_Port_Number</SourceLine>
 +   <SourceLine>Server_Data_Endpoint.Protocol = f.Data_Endpoint.Host_Protocol_Code</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read connection request data block</SourceLine>
 +   <SourceLine>if f.CRD.Structure_Length &lt;&gt; s_CRD.Size then print "??? CRD size ERROR"</SourceLine>
 +   <SourceLine>Connection_Type_Code = f.CRD.Connection_Type_Code</SourceLine>
 +   <SourceLine>KNX_IA = f.CRD.KNX_Individual_Address</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&lt;&lt;&lt; CONNECT_RESPONSE"</SourceLine>
 +   <SourceLine>print "Status:    " + Status.ToHex(2)</SourceLine>
 +   <SourceLine>print "ChannelID: " + Comm_Channel_ID.ToHex(2)</SourceLine>
 +   <SourceLine>print "Conn Typ:  " + Connection_Type_Code.ToHex(2)</SourceLine>
 +   <SourceLine>print "Server Data Endpoint: " + _</SourceLine>
 +   <SourceLine>Server_Data_Endpoint.Addr.Value + ":" + _</SourceLine>
 +   <SourceLine>Server_Data_Endpoint.Port.ToString + " " + _</SourceLine>
 +   <SourceLine>Server_Data_Endpoint.Protocol.ToString</SourceLine>
 +   <SourceLine>print "KNX IA:    " + KNX_IA.ToString</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com as KNXnetIP_client, dg as datagram</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>timeout</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1339994111</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub timeout()</SourceLine>
 +   <SourceLine>Busy = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>print "--- CONNECT TIMEOUT"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Status</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>719790079</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Status() As uint8</SourceLine>
 +   <SourceLine>return mStatus</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>uint8</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Busy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1580890111</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Busy() As Boolean</SourceLine>
 +   <SourceLine>return mBusy</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>Boolean</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Busy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1436297215</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Busy(assigns req as Boolean)</SourceLine>
 +   <SourceLine>if req and not mBusy then</SourceLine>
 +   <SourceLine>Timer.CallLater(k_CONNECT_REQUEST_TIMEOUT * 1000, AddressOf timeout)</SourceLine>
 +   <SourceLine>ElseIf mBusy and not req then</SourceLine>
 +   <SourceLine>Timer.CancelCallLater(AddressOf timeout)</SourceLine>
 +   <SourceLine>end if</SourceLine>
 +   <SourceLine>mBusy = req</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>assigns req as Boolean</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Constructor</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>349753343</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Constructor()</SourceLine>
 +   <SourceLine>Client_Control_Endpoint = new IPv4_Endpoint</SourceLine>
 +   <SourceLine>Client_Data_Endpoint = new IPv4_Endpoint </SourceLine>
 +   <SourceLine>Server_Control_Endpoint = new IPv4_Endpoint</SourceLine>
 +   <SourceLine>Server_Data_Endpoint = new IPv4_Endpoint</SourceLine>
 +   <SourceLine>KNX_IA = "0.0.0"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Property>
 +  <ItemName>Comm_Channel_ID</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1310517247</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Comm_Channel_ID As uint8</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Comm_Channel_ID As uint8</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mStatus</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1581776895</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mStatus As uint8 = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mStatus As uint8 = 0</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Connection_Type_Code</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>354750463</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Connection_Type_Code As uint8</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Connection_Type_Code As uint8</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mBusy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1455890431</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mBusy As Boolean = False</SourceLine>
 +   <SourceLine>// 0 = idle</SourceLine>
 +   <SourceLine>// 1 = timeout</SourceLine>
 +   <SourceLine>// 2 = timer running</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mBusy As Boolean = False</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Server_Data_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>109152255</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Server_Data_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Server_Data_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>KNX_IA</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>464406527</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>KNX_IA As KNX_IndividualAddress</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>KNX_IA As KNX_IndividualAddress</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Client_Data_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2104444927</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Client_Data_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Client_Data_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Client_Control_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1107437567</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Client_Control_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Client_Control_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Server_Control_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2044794879</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Server_Control_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Server_Control_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Comm_Channel_ID</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>uint8</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Connection_Type_Code</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>uint8</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="1555253247">
 + <ObjName>c_DISCONNECT</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>2</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>timeout</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1339994111</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub timeout()</SourceLine>
 +   <SourceLine>Busy = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>print "--- DISCONNECT TIMEOUT"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Tx_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>684589055</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Tx_REQUEST(com As KNXnetIP_client)</SourceLine>
 +   <SourceLine>if not com.IsConnected then Return // we need an open socket</SourceLine>
 +   <SourceLine>if Busy then Return</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create frame</SourceLine>
 +   <SourceLine>var f As s_DISCONNECT_REQUEST</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// frame header</SourceLine>
 +   <SourceLine>f.Frame_Header.Header_Length = s_FRAME_HEADER.Size</SourceLine>
 +   <SourceLine>f.Frame_Header.Protocol_Version = k_KNXnetIP_VERSION_10</SourceLine>
 +   <SourceLine>f.Frame_Header.Service_Type = k_DISCONNECT_REQUEST</SourceLine>
 +   <SourceLine>f.Frame_Header.Total_Length = s_DISCONNECT_REQUEST.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// payload data</SourceLine>
 +   <SourceLine>f.Communication_Channel_ID = Comm_Channel_ID</SourceLine>
 +   <SourceLine>f.reserved = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// client control endpoint</SourceLine>
 +   <SourceLine>f.Control_Endpoint.Structure_Length = s_HPAI.Size</SourceLine>
 +   <SourceLine>f.Control_Endpoint.Host_Protocol_Code = Client_Control_Endpoint.Protocol</SourceLine>
 +   <SourceLine>f.Control_Endpoint.IP_Address = Client_Control_Endpoint.Addr.UInt32Value(0)</SourceLine>
 +   <SourceLine>f.Control_Endpoint.IP_Port_Number = Client_Control_Endpoint.Port</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create datagram</SourceLine>
 +   <SourceLine>var dg as new Datagram</SourceLine>
 +   <SourceLine>dg.Address = Server_Control_Endpoint.Addr</SourceLine>
 +   <SourceLine>dg.Port = Server_Control_Endpoint.Port</SourceLine>
 +   <SourceLine>dg.Data = f.StringValue(k_BIG_ENDIAN)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// enable receiver, start timer and send</SourceLine>
 +   <SourceLine>Busy = True</SourceLine>
 +   <SourceLine>com.Write(dg)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&gt;&gt;&gt; DISCONNECT_REQUEST"</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com As KNXnetIP_client</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Rx_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>296923135</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Rx_RESPONSE(com as KNXnetIP_client, dg as datagram)</SourceLine>
 +   <SourceLine>// status check</SourceLine>
 +   <SourceLine>if not Busy then Return // receiver disabled, ignore spurious frames</SourceLine>
 +   <SourceLine>Busy = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get dg in structure</SourceLine>
 +   <SourceLine>var f As s_DISCONNECT_RESPONSE</SourceLine>
 +   <SourceLine>f.StringValue(k_BIG_ENDIAN) = dg.Data</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// check header (ASSERTION)</SourceLine>
 +   <SourceLine>if f.Frame_Header.Total_Length &lt;&gt; s_DISCONNECT_RESPONSE.Size then print "??? FRAME size ERROR"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read payload data fields</SourceLine>
 +   <SourceLine>Comm_Channel_ID = f.Communication_Channel_ID</SourceLine>
 +   <SourceLine>mStatus = f.Status</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&lt;&lt;&lt; DISCONNECT_RESPONSE"</SourceLine>
 +   <SourceLine>print "Channel ID: " + Comm_Channel_ID.ToHex(2)</SourceLine>
 +   <SourceLine>print "Status:     " + Status.ToHex(2)</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com as KNXnetIP_client, dg as datagram</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Constructor</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>224899071</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Constructor()</SourceLine>
 +   <SourceLine>Client_Control_Endpoint = new IPv4_Endpoint</SourceLine>
 +   <SourceLine>Server_Control_Endpoint = new IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Status</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>641689599</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Status() As uint8</SourceLine>
 +   <SourceLine>return mStatus</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>uint8</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Busy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>77606911</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Busy() As Boolean</SourceLine>
 +   <SourceLine>return mBusy</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>Boolean</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Busy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1689626623</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Busy(assigns req as Boolean)</SourceLine>
 +   <SourceLine>if req and not mBusy then</SourceLine>
 +   <SourceLine>Timer.CallLater(k_DISCONNECT_REQUEST_TIMEOUT * 1000, AddressOf timeout)</SourceLine>
 +   <SourceLine>ElseIf mBusy and not req then</SourceLine>
 +   <SourceLine>Timer.CancelCallLater(AddressOf timeout)</SourceLine>
 +   <SourceLine>end if</SourceLine>
 +   <SourceLine>mBusy = req</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>assigns req as Boolean</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Tx_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>171644927</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Tx_RESPONSE(com As KNXnetIP_client)</SourceLine>
 +   <SourceLine>if not com.IsConnected then Return // we need an open socket</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create frame</SourceLine>
 +   <SourceLine>var f As s_DISCONNECT_RESPONSE</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// frame header</SourceLine>
 +   <SourceLine>f.Frame_Header.Header_Length = s_FRAME_HEADER.Size</SourceLine>
 +   <SourceLine>f.Frame_Header.Protocol_Version = k_KNXnetIP_VERSION_10</SourceLine>
 +   <SourceLine>f.Frame_Header.Service_Type = k_DISCONNECT_RESPONSE</SourceLine>
 +   <SourceLine>f.Frame_Header.Total_Length = s_DISCONNECT_RESPONSE.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// payload data</SourceLine>
 +   <SourceLine>f.Communication_Channel_ID = Comm_Channel_ID</SourceLine>
 +   <SourceLine>f.Status = k_E_NO_ERROR</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create datagram</SourceLine>
 +   <SourceLine>var dg as new Datagram</SourceLine>
 +   <SourceLine>dg.Address = Server_Control_Endpoint.Addr</SourceLine>
 +   <SourceLine>dg.Port = Server_Control_Endpoint.Port</SourceLine>
 +   <SourceLine>dg.Data = f.StringValue(k_BIG_ENDIAN)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// send</SourceLine>
 +   <SourceLine>com.Write(dg)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&gt;&gt;&gt; DISCONNECT_RESPONSE"</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com As KNXnetIP_client</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Rx_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>967145471</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Rx_REQUEST(com as KNXnetIP_client, dg as datagram)</SourceLine>
 +   <SourceLine>// no status check here</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get dg in structure</SourceLine>
 +   <SourceLine>var f As s_DISCONNECT_REQUEST</SourceLine>
 +   <SourceLine>f.StringValue(k_BIG_ENDIAN) = dg.Data</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// check header (ASSERTION)</SourceLine>
 +   <SourceLine>if f.Frame_Header.Total_Length &lt;&gt; s_DISCONNECT_REQUEST.Size then print "??? FRAME size ERROR"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read payload data fields</SourceLine>
 +   <SourceLine>Comm_Channel_ID = f.Communication_Channel_ID</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read server control endpoint</SourceLine>
 +   <SourceLine>if f.Control_Endpoint.Structure_Length &lt;&gt; s_HPAI.Size then print "??? HPAI size ERROR"</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Addr.UInt32Value(0) = f.Control_Endpoint.IP_Address</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Port = f.Control_Endpoint.IP_Port_Number</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Protocol = f.Control_Endpoint.Host_Protocol_Code</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&lt;&lt;&lt; DISCONNECT_REQUEST"</SourceLine>
 +   <SourceLine>print "Channel ID: " + Comm_Channel_ID.ToHex(2)</SourceLine>
 +   <SourceLine>print "Server Control Endpoint: " + _</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Addr.Value + ":" + _</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Port.ToString + " " + _</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Protocol.ToString</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// send confirmation packet</SourceLine>
 +   <SourceLine>Tx_RESPONSE(com)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com as KNXnetIP_client, dg as datagram</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Property>
 +  <ItemName>Comm_Channel_ID</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1310517247</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Comm_Channel_ID As uint8</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Comm_Channel_ID As uint8</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Client_Control_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1367627775</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Client_Control_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Client_Control_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mStatus</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1491130367</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mStatus As uint8 = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mStatus As uint8 = 0</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mBusy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>236169215</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mBusy As Boolean = False</SourceLine>
 +   <SourceLine>// 0 = idle</SourceLine>
 +   <SourceLine>// 1 = timeout</SourceLine>
 +   <SourceLine>// 2 = timer running</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mBusy As Boolean = False</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Server_Control_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>226447359</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Server_Control_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Server_Control_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Comm_Channel_ID</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>uint8</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="2000797695">
 + <ObjName>c_CONNECTIONSTATE</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>2</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>timeout</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1339994111</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub timeout()</SourceLine>
 +   <SourceLine>Busy = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>print "--- DISCONNECT TIMEOUT"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Tx_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>684589055</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Tx_REQUEST(com As KNXnetIP_client)</SourceLine>
 +   <SourceLine>if not com.IsConnected then Return // we need an open socket</SourceLine>
 +   <SourceLine>if Busy then Return</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create frame</SourceLine>
 +   <SourceLine>var f As s_CONNECTIONSTATE_REQUEST</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// frame header</SourceLine>
 +   <SourceLine>f.Frame_Header.Header_Length = s_FRAME_HEADER.Size</SourceLine>
 +   <SourceLine>f.Frame_Header.Protocol_Version = k_KNXnetIP_VERSION_10</SourceLine>
 +   <SourceLine>f.Frame_Header.Service_Type = k_CONNECTIONSTATE_REQUEST</SourceLine>
 +   <SourceLine>f.Frame_Header.Total_Length = s_CONNECTIONSTATE_REQUEST.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// payload data</SourceLine>
 +   <SourceLine>f.Communication_Channel_ID = Comm_Channel_ID</SourceLine>
 +   <SourceLine>f.reserved = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// client control endpoint</SourceLine>
 +   <SourceLine>f.Control_Endpoint.Structure_Length = s_HPAI.Size</SourceLine>
 +   <SourceLine>f.Control_Endpoint.Host_Protocol_Code = Client_Control_Endpoint.Protocol</SourceLine>
 +   <SourceLine>f.Control_Endpoint.IP_Address = Client_Control_Endpoint.Addr.UInt32Value(0)</SourceLine>
 +   <SourceLine>f.Control_Endpoint.IP_Port_Number = Client_Control_Endpoint.Port</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create datagram</SourceLine>
 +   <SourceLine>var dg as new Datagram</SourceLine>
 +   <SourceLine>dg.Address = Server_Control_Endpoint.Addr</SourceLine>
 +   <SourceLine>dg.Port = Server_Control_Endpoint.Port</SourceLine>
 +   <SourceLine>dg.Data = f.StringValue(k_BIG_ENDIAN)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// enable receiver, start timer and send</SourceLine>
 +   <SourceLine>Busy = True</SourceLine>
 +   <SourceLine>com.Write(dg)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&gt;&gt;&gt; CONNECTIONSTATE_REQUEST"</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com As KNXnetIP_client</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Rx_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>296923135</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Rx_RESPONSE(com as KNXnetIP_client, dg as datagram)</SourceLine>
 +   <SourceLine>// status check</SourceLine>
 +   <SourceLine>if not Busy then Return // receiver disabled, ignore spurious frames</SourceLine>
 +   <SourceLine>Busy = False</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get dg in structure</SourceLine>
 +   <SourceLine>var f As s_CONNECTIONSTATE_RESPONSE</SourceLine>
 +   <SourceLine>f.StringValue(k_BIG_ENDIAN) = dg.Data</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// check header (ASSERTION)</SourceLine>
 +   <SourceLine>if f.Frame_Header.Total_Length &lt;&gt; s_CONNECTIONSTATE_RESPONSE.Size then print "??? FRAME size ERROR"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read payload data fields</SourceLine>
 +   <SourceLine>Comm_Channel_ID = f.Communication_Channel_ID</SourceLine>
 +   <SourceLine>mStatus = f.Status</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&lt;&lt;&lt; CONNECTIONSTATE_RESPONSE"</SourceLine>
 +   <SourceLine>print "Channel ID: " + Comm_Channel_ID.ToHex(2)</SourceLine>
 +   <SourceLine>print "Status:     " + Status.ToHex(2)</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com as KNXnetIP_client, dg as datagram</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Constructor</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>224899071</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Constructor()</SourceLine>
 +   <SourceLine>Client_Control_Endpoint = new IPv4_Endpoint</SourceLine>
 +   <SourceLine>Server_Control_Endpoint = new IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Status</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>641689599</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Status() As uint8</SourceLine>
 +   <SourceLine>return mStatus</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>uint8</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Busy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>77606911</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Busy() As Boolean</SourceLine>
 +   <SourceLine>return mBusy</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>Boolean</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Busy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1689626623</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Busy(assigns req as Boolean)</SourceLine>
 +   <SourceLine>if req and not mBusy then</SourceLine>
 +   <SourceLine>Timer.CallLater(k_CONNECTIONSTATE_REQUEST_TIMEOUT * 1000, AddressOf timeout)</SourceLine>
 +   <SourceLine>ElseIf mBusy and not req then</SourceLine>
 +   <SourceLine>Timer.CancelCallLater(AddressOf timeout)</SourceLine>
 +   <SourceLine>end if</SourceLine>
 +   <SourceLine>mBusy = req</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>assigns req as Boolean</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Tx_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>171644927</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Tx_RESPONSE(com As KNXnetIP_client)</SourceLine>
 +   <SourceLine>if not com.IsConnected then Return // we need an open socket</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create frame</SourceLine>
 +   <SourceLine>var f As s_CONNECTIONSTATE_RESPONSE</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// frame header</SourceLine>
 +   <SourceLine>f.Frame_Header.Header_Length = s_FRAME_HEADER.Size</SourceLine>
 +   <SourceLine>f.Frame_Header.Protocol_Version = k_KNXnetIP_VERSION_10</SourceLine>
 +   <SourceLine>f.Frame_Header.Service_Type = k_CONNECTIONSTATE_RESPONSE</SourceLine>
 +   <SourceLine>f.Frame_Header.Total_Length = s_CONNECTIONSTATE_RESPONSE.Size</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// payload data</SourceLine>
 +   <SourceLine>f.Communication_Channel_ID = Comm_Channel_ID</SourceLine>
 +   <SourceLine>f.Status = k_E_NO_ERROR</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// create datagram</SourceLine>
 +   <SourceLine>var dg as new Datagram</SourceLine>
 +   <SourceLine>dg.Address = Server_Control_Endpoint.Addr</SourceLine>
 +   <SourceLine>dg.Port = Server_Control_Endpoint.Port</SourceLine>
 +   <SourceLine>dg.Data = f.StringValue(k_BIG_ENDIAN)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// send</SourceLine>
 +   <SourceLine>com.Write(dg)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&gt;&gt;&gt; CONNECTIONSTATE_RESPONSE"</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com As KNXnetIP_client</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Rx_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>967145471</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Rx_REQUEST(com as KNXnetIP_client, dg as datagram)</SourceLine>
 +   <SourceLine>// no status check here</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// get dg in structure</SourceLine>
 +   <SourceLine>var f As s_CONNECTIONSTATE_REQUEST</SourceLine>
 +   <SourceLine>f.StringValue(k_BIG_ENDIAN) = dg.Data</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// check header (ASSERTION)</SourceLine>
 +   <SourceLine>if f.Frame_Header.Total_Length &lt;&gt; s_CONNECTIONSTATE_REQUEST.Size then print "??? FRAME size ERROR"</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read payload data fields</SourceLine>
 +   <SourceLine>Comm_Channel_ID = f.Communication_Channel_ID</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// read server control endpoint</SourceLine>
 +   <SourceLine>if f.Control_Endpoint.Structure_Length &lt;&gt; s_HPAI.Size then print "??? HPAI size ERROR"</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Addr.UInt32Value(0) = f.Control_Endpoint.IP_Address</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Port = f.Control_Endpoint.IP_Port_Number</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Protocol = f.Control_Endpoint.Host_Protocol_Code</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// logging</SourceLine>
 +   <SourceLine>print "&lt;&lt;&lt; CONNECTIONSTATE_REQUEST"</SourceLine>
 +   <SourceLine>print "Channel ID: " + Comm_Channel_ID.ToHex(2)</SourceLine>
 +   <SourceLine>print "Server Control Endpoint: " + _</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Addr.Value + ":" + _</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Port.ToString + " " + _</SourceLine>
 +   <SourceLine>Server_Control_Endpoint.Protocol.ToString</SourceLine>
 +   <SourceLine>print</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>// send confirmation packet</SourceLine>
 +   <SourceLine>Tx_RESPONSE(com)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>com as KNXnetIP_client, dg as datagram</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Property>
 +  <ItemName>Comm_Channel_ID</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1310517247</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Comm_Channel_ID As uint8</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Comm_Channel_ID As uint8</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Client_Control_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1367627775</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Client_Control_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Client_Control_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mStatus</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1491130367</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mStatus As uint8 = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mStatus As uint8 = 0</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>mBusy</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>236169215</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mBusy As Boolean = False</SourceLine>
 +   <SourceLine>// 0 = idle</SourceLine>
 +   <SourceLine>// 1 = timeout</SourceLine>
 +   <SourceLine>// 2 = timer running</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mBusy As Boolean = False</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Server_Control_Endpoint</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>226447359</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Server_Control_Endpoint As IPv4_Endpoint</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Server_Control_Endpoint As IPv4_Endpoint</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Comm_Channel_ID</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <ItemType>uint8</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="578017279">
 + <ObjName>IPv4_Endpoint</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>0</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>Clone</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1204436991</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Clone() As IPv4_Endpoint</SourceLine>
 +   <SourceLine>var obj as new IPv4_Endpoint</SourceLine>
 +   <SourceLine>obj.Addr = Addr</SourceLine>
 +   <SourceLine>obj.Port = Port</SourceLine>
 +   <SourceLine>obj.Protocol = Protocol</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return obj</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>IPv4_Endpoint</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Constructor</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>254971903</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Constructor()</SourceLine>
 +   <SourceLine>Addr = "0.0.0.0"</SourceLine>
 +   <SourceLine>Protocol = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Property>
 +  <ItemName>Port</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>557723647</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Port As UInt16 = 3671</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Port As UInt16 = 3671</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Addr</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1144741887</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Addr As IPv4_Address</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Addr As IPv4_Address</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <Property>
 +  <ItemName>Protocol</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>869656575</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Protocol As IPv4_Protocol</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>Protocol As IPv4_Protocol</ItemDeclaration>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Port</ObjName>
 +   <PropertyGroup>Behavior</PropertyGroup>
 +   <PropertyValue>3671</PropertyValue>
 +   <ItemType>UInt16</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="1603973119">
 + <ObjName>IPv4_Protocol</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>0</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1027137535</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Operator_Convert() As String</SourceLine>
 +   <SourceLine>Return ToString</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>986585087</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Operator_Convert(s As String)</SourceLine>
 +   <SourceLine>// acts as constructor for new object implicitly created</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>FromString(s)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>s As String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>814850047</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Operator_Convert() As UInt8</SourceLine>
 +   <SourceLine>Return Value</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>UInt8</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>490283007</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Operator_Convert(i As Integer)</SourceLine>
 +   <SourceLine>// acts as constructor for new object implicitly created</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Value = CType(i, UInt8)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>i As Integer</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>ToString</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2146996223</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function ToString() As String</SourceLine>
 +   <SourceLine>select case Value</SourceLine>
 +   <SourceLine>case &amp;h01</SourceLine>
 +   <SourceLine>Return "UDP"</SourceLine>
 +   <SourceLine>case &amp;h02</SourceLine>
 +   <SourceLine>Return "TCP"</SourceLine>
 +   <SourceLine>case else</SourceLine>
 +   <SourceLine>Return Value.ToString</SourceLine>
 +   <SourceLine>end select</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Value</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1396336639</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Value() As UInt8</SourceLine>
 +   <SourceLine>Return mProtocolCode</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>UInt8</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>FromString</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>782364671</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub FromString(s as String)</SourceLine>
 +   <SourceLine>select case s.Uppercase</SourceLine>
 +   <SourceLine>case "UDP"</SourceLine>
 +   <SourceLine>Value = &amp;h01</SourceLine>
 +   <SourceLine>case "TCP"</SourceLine>
 +   <SourceLine>Value = &amp;h02</SourceLine>
 +   <SourceLine>case else</SourceLine>
 +   <SourceLine>Value = s.ToInteger</SourceLine>
 +   <SourceLine>end Select</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>s as String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Value</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>454696959</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Value(assigns ui as UInt8)</SourceLine>
 +   <SourceLine>mProtocolCode = ui</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>assigns ui as UInt8</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Property>
 +  <ItemName>mProtocolCode</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2080421887</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mProtocolCode As UInt8 = &amp;h01</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mProtocolCode As UInt8 = &amp;h01</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="888487935">
 + <ObjName>KNX_IndividualAddress</ObjName>
 + <ObjContainerID>813438975</ObjContainerID>
 + <IsClass>1</IsClass>
 + <ItemFlags>0</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1027137535</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Operator_Convert() As String</SourceLine>
 +   <SourceLine>Return ToString</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>986585087</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Operator_Convert(s As String)</SourceLine>
 +   <SourceLine>// acts as constructor for new object implicitly created</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>FromString(s)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>s As String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>814850047</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Operator_Convert() As UInt16</SourceLine>
 +   <SourceLine>Return Value</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>UInt16</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Operator_Convert</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>490283007</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Operator_Convert(i As Integer)</SourceLine>
 +   <SourceLine>// acts as constructor for new object implicitly created</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Value = CType(i, UInt16)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>i As Integer</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>ToString</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2146996223</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function ToString() As String</SourceLine>
 +   <SourceLine>Return Bitwise.ShiftRight(mIndividualAddress AND &amp;h0F000, 12).ToString  + "." + _ </SourceLine>
 +   <SourceLine>Bitwise.ShiftRight(mIndividualAddress AND &amp;h00F00, 8).ToString + "." + _</SourceLine>
 +   <SourceLine>BitwiseAnd(mIndividualAddress, &amp;h000FF).ToString </SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Value</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1396336639</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function Value() As UInt16</SourceLine>
 +   <SourceLine>Return mIndividualAddress</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams></ItemParams>
 +  <ItemResult>UInt16</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>FromString</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>782364671</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub FromString(s as String)</SourceLine>
 +   <SourceLine>var sa() as String = s.Split(".")</SourceLine>
 +   <SourceLine>sa.ResizeTo(2) // (index 0 to 2 are 3 elements)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>var ia as uint16</SourceLine>
 +   <SourceLine>ia = _</SourceLine>
 +   <SourceLine>Bitwise.ShiftLeft(sa(0).ToInteger AND &amp;h0F, 12) OR _</SourceLine>
 +   <SourceLine>Bitwise.ShiftLeft(sa(1).ToInteger AND &amp;h0F, 8) OR _</SourceLine>
 +   <SourceLine>sa(2).ToInteger AND &amp;hFF</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>mIndividualAddress = ia</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>s as String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>Value</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>454696959</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub Value(assigns ui as UInt16)</SourceLine>
 +   <SourceLine>mIndividualAddress = ui</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>assigns ui as UInt16</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Property>
 +  <ItemName>mIndividualAddress</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2080421887</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>mIndividualAddress As UInt16 = 0</SourceLine>
 +   <SourceLine></SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemDeclaration>mIndividualAddress As UInt16 = 0</ItemDeclaration>
 +  <ItemFlags>33</ItemFlags>
 +  <IsShared>0</IsShared>
 + </Property>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 +</block>
 +<block type="Module" ID="813438975">
 + <ObjName>KNX</ObjName>
 + <ObjContainerID>0</ObjContainerID>
 + <IsClass>0</IsClass>
 + <ItemFlags>1</ItemFlags>
 + <IsInterface>0</IsInterface>
 + <Compatibility></Compatibility>
 + <Method>
 +  <ItemName>print</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1271128063</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub print(optional s as String = "")</SourceLine>
 +   <SourceLine>Window1.scr.AddText s + EndOfLine.Windows</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>optional s as String = ""</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>dump</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>871927807</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Sub dump(s as String)</SourceLine>
 +   <SourceLine>var mb as MemoryBlock = s</SourceLine>
 +   <SourceLine>var ln1, ln2 As String = ""</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>for i as Integer = 0 to mb.Size - 1</SourceLine>
 +   <SourceLine>ln1 = ln1 + mb.Byte(i).ToHex(2) + " "</SourceLine>
 +   <SourceLine>ln2 = ln2 + RightAlign(mb.Byte(i), 3) + " "</SourceLine>
 +   <SourceLine>select case (i AND &amp;h0F)</SourceLine>
 +   <SourceLine>case &amp;h07</SourceLine>
 +   <SourceLine>ln1 = ln1 + "  "</SourceLine>
 +   <SourceLine>ln2 = ln2 + "  "</SourceLine>
 +   <SourceLine>case &amp;h0F</SourceLine>
 +   <SourceLine>print ln1 + " | " + ln2</SourceLine>
 +   <SourceLine>ln1 = ""</SourceLine>
 +   <SourceLine>ln2 = ""</SourceLine>
 +   <SourceLine>end select</SourceLine>
 +   <SourceLine>next</SourceLine>
 +   <SourceLine>print ln1 + RepeatChar(" ", 50 - ln1.Length) + " | " + ln2</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Sub</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>s as String</ItemParams>
 +  <ItemResult></ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>RepeatChar</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>857585663</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function RepeatChar(c as String, n as Integer) As String</SourceLine>
 +   <SourceLine>var s as String</SourceLine>
 +   <SourceLine>if n &gt; 0 then</SourceLine>
 +   <SourceLine>for i as Integer = 1 to n</SourceLine>
 +   <SourceLine>s = s + c</SourceLine>
 +   <SourceLine>next</SourceLine>
 +   <SourceLine>end if</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>return s</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>c as String, n as Integer</ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <Method>
 +  <ItemName>RightAlign</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1471377407</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Function RightAlign(i as Integer, width as UInteger) As String</SourceLine>
 +   <SourceLine>var s as String = RepeatChar(" ", width) + i.ToString</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>Return s.Right(width)</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>//</SourceLine>
 +   <SourceLine></SourceLine>
 +   <SourceLine>End Function</SourceLine>
 +  </ItemSource>
 +  <TextEncoding>134217984</TextEncoding>
 +  <AliasName></AliasName>
 +  <ItemFlags>0</ItemFlags>
 +  <IsShared>0</IsShared>
 +  <ItemParams>i as Integer, width as UInteger</ItemParams>
 +  <ItemResult>String</ItemResult>
 + </Method>
 + <ViewBehavior>
 +  <ViewProperty>
 +   <ObjName>Name</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Index</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <PropertyValue>-2147483648</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Super</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>ID</PropertyGroup>
 +   <ItemType>String</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Left</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 +  <ViewProperty>
 +   <ObjName>Top</ObjName>
 +   <Visible>1</Visible>
 +   <PropertyGroup>Position</PropertyGroup>
 +   <PropertyValue>0</PropertyValue>
 +   <ItemType>Integer</ItemType>
 +  </ViewProperty>
 + </ViewBehavior>
 + <Constant>
 +  <ItemName>k_KNXnetIP_PortNumber</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2094727167</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>3671</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_KNXnetIP_SystemSetupMulticastAddress</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>945201151</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>0</ItemType>
 +  <ItemDef>224.0.23.12</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_KNXnetIP_VERSION_10</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>693262335</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h10</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_HEADER_SIZE_10</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1019740159</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h06</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_BIG_ENDIAN</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1829822463</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>3</ItemType>
 +  <ItemDef>False</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECTIONSTATE_REQUEST_TIMEOUT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1154476031</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>10</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_TUNNELING_REQUEST_TIMEOUT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>706924543</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>1</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECTION_ALIVE_TIME</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1845434367</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>120</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECTION_HEARTBEAT_TIME</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1765941247</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>60</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SEARCH_REQUEST_TIMEOUT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>506656767</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>3</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>kLogWidth</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2040625151</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>50</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DESCRIPTION_REQUEST_TIMEOUT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1628780543</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>10</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DISCONNECT_REQUEST_TIMEOUT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2090063871</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>10</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_IPV4_UDP</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>302188543</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h01</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_IPV4_TCP</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>422152191</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h02</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DEVICE_MGMT_CONNECTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>265279487</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h03</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_TUNNEL_CONNECTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1135194111</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h04</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_REMLOG_CONNECTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1464309759</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h06</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_REMCONF_CONNECTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2146793471</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h07</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_OBJSVR_CONNECTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1553385471</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h08</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_NO_ERROR</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1912543231</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h00</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_CONNECTION_TYPE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>566310911</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h22</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_CONNECTION_OPTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>297238527</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h23</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_NO_MORE_CONNECTIONS</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2117294079</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h24</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_TUNNEL_LINKLAYER</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>257230847</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h02</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_TUNNEL_RAW</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1812301823</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h04</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_TUNNEL_BUSMONITOR</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>946696191</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h80</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECT_REQUEST_TIMEOUT</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>551831551</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>10</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECT_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>85004287</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0205</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECT_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>549644287</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0206</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DISCONNECT_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1288566783</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0209</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DISCONNECT_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1233113087</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h020A</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECTIONSTATE_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2066814975</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0207</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_CONNECTIONSTATE_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>222119935</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0208</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SEARCH_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1446680575</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0201</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SEARCH_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>163794943</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0202</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DESCRIPTION_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2092138495</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0203</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DESCRIPTION_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>434110463</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0204</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DEVICE_CONFIGURATION_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1763586047</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0310</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DEVICE_CONFIGURATION_ACK</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1417000959</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0311</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_TUNNELING_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1125009407</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0420</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_TUNNELING_ACK</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>457625599</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0421</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_ROUTING_INDICATION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1464424447</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0530</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_ROUTING_LOST_MESSAGE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1828769791</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h0531</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_HOST_PROTOCOL_TYPE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>735709183</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h01</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_VERSION_NOT_SUPPORTED</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1049821183</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h02</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_SEQUENCE_NUMBER</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>875962367</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h04</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_CONNECTION_ID</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>108609535</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h21</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_DATA_CONNECTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>767053823</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h26</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_KNX_CONNECTION</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1381896191</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h27</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_E_TUNNELING_LAYER</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1925316607</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h29</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DIB_DEVICE_INFO</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2131132415</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h01</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DIB_SUPP_SVC_FAMILIES</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1352294399</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h02</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DIB_IP_CONFIG</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1154531327</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h03</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DIB_IP_CUR_CONFIG</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>892841983</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h04</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DIB_KNX_ADDRESSES</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1273579519</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h05</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_DIB_MFR_DATA</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>838557695</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;hFE</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SF_Core</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1640351743</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h02</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SF_DeviceManagement</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1227569151</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h03</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SF_Tunneling</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1957122047</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h04</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SF_Routing</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1318838271</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h05</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SF_RemoteLogging</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1979711487</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h06</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SF_RemoteConfiguration</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>792989695</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h07</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Constant>
 +  <ItemName>k_SF_ObjectServer</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>909910015</PartID>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemType>2</ItemType>
 +  <ItemDef>&amp;h08</ItemDef>
 +  <ItemFlags>0</ItemFlags>
 + </Constant>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_FRAME_HEADER</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_FRAME_HEADER</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1994727423</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Header_Length as uint8</SourceLine>
 +   <SourceLine>Protocol_Version as uint8</SourceLine>
 +   <SourceLine>Service_Type as uint16</SourceLine>
 +   <SourceLine>Total_Length as uint16</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_HPAI</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_HPAI</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>94738431</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Structure_Length as uint8</SourceLine>
 +   <SourceLine>Host_Protocol_Code as uint8</SourceLine>
 +   <SourceLine>IP_Address as uint32</SourceLine>
 +   <SourceLine>IP_Port_Number as uint16</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_SEARCH_REQUEST</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_SEARCH_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1387759615</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Discovery_Endpoint as s_HPAI</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DIB_IP_CONFIG</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DIB_IP_CONFIG</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1871718399</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>IP_Address as uint32</SourceLine>
 +   <SourceLine>Subnet_Mask as uint32</SourceLine>
 +   <SourceLine>Default_Gateway as uint32</SourceLine>
 +   <SourceLine>IP_Capabilities as uint8</SourceLine>
 +   <SourceLine>IP_Assignment_Method as uint8</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DIB_DEVICE_INFO</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DIB_DEVICE_INFO</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1291542527</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>KNX_Medium as uint8</SourceLine>
 +   <SourceLine>Device_Status as uint8</SourceLine>
 +   <SourceLine>KNX_Individual_Address as uint16</SourceLine>
 +   <SourceLine>Project_Installation_Identifier as uint16</SourceLine>
 +   <SourceLine>KNXnetIP_Device_KNX_Serial_Number as string * 6</SourceLine>
 +   <SourceLine>KNXnetIP_Device_Routing_Multicast_Address as uint32</SourceLine>
 +   <SourceLine>KNXnetIP_Device_MAC_Address as string * 6</SourceLine>
 +   <SourceLine>Device_Friendly_Name as string * 30</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DIB_HEADER</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DIB_HEADER</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>739596287</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Structure_Length as uint8</SourceLine>
 +   <SourceLine>Description_Type_Code as uint8</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DIB_KNX_ADDRESSES_ITEM</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DIB_KNX_ADDRESSES_ITEM</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>591538175</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>KNX_Individual_Address as uint16</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DIB_IP_CUR_CONFIG</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DIB_IP_CUR_CONFIG</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1328351231</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>IP_Address as uint32</SourceLine>
 +   <SourceLine>Subnet_Mask as uint32</SourceLine>
 +   <SourceLine>Default_Gateway as uint32</SourceLine>
 +   <SourceLine>DHCP_Server as uint32</SourceLine>
 +   <SourceLine>IP_Assignment_Method as uint8</SourceLine>
 +   <SourceLine>Reserved as uint8</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DIB_MFR_DATA</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DIB_MFR_DATA</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>386875391</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>KNX_Manufacturer_ID as uint16</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DIB_SUPP_SVC_FAMILIES_ITEM</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DIB_SUPP_SVC_FAMILIES_ITEM</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>889796607</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Service_Family_ID as uint8</SourceLine>
 +   <SourceLine>Service_Family_Version as uint8</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DESCRIPTION_REQUEST</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DESCRIPTION_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2126141439</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Control_Endpoint as s_HPAI</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DISCONNECT_RESPONSE</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DISCONNECT_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>994977791</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Communication_Channel_ID as uint8</SourceLine>
 +   <SourceLine>Status as uint8</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_DISCONNECT_REQUEST</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_DISCONNECT_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1436194815</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Communication_Channel_ID as uint8</SourceLine>
 +   <SourceLine>reserved as uint8</SourceLine>
 +   <SourceLine>Control_Endpoint as s_HPAI</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_CONNECTIONSTATE_RESPONSE</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_CONNECTIONSTATE_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>478877695</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Communication_Channel_ID as uint8</SourceLine>
 +   <SourceLine>Status as uint8</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_CONNECTIONSTATE_REQUEST</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_CONNECTIONSTATE_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1649688575</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Communication_Channel_ID as uint8</SourceLine>
 +   <SourceLine>reserved as uint8</SourceLine>
 +   <SourceLine>Control_Endpoint as s_HPAI</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_CRD</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_CRD</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>922470399</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Structure_Length as uint8</SourceLine>
 +   <SourceLine>Connection_Type_Code as uint8</SourceLine>
 +   <SourceLine>KNX_Individual_Address as uint16</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_CONNECT_REQUEST</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_CONNECT_REQUEST</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1168777215</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Control_Endpoint as s_HPAI</SourceLine>
 +   <SourceLine>Data_Endpoint as s_HPAI</SourceLine>
 +   <SourceLine>Connection_Request_Information as s_CRI</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_CONNECT_RESPONSE</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_CONNECT_RESPONSE</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>2137655295</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Frame_Header as s_FRAME_HEADER</SourceLine>
 +   <SourceLine>Communication_Channel_ID as uint8</SourceLine>
 +   <SourceLine>Status as uint8</SourceLine>
 +   <SourceLine>Data_Endpoint as s_HPAI</SourceLine>
 +   <SourceLine>CRD as s_CRD</SourceLine>
 +  </ItemSource>
 + </Structure>
 + <Structure>
 +  <TextEncoding>134217984</TextEncoding>
 +  <ItemName>s_CRI</ItemName>
 +  <ItemFlags>0</ItemFlags>
 +  <ItemName>s_CRI</ItemName>
 +  <Compatibility></Compatibility>
 +  <Visible>1</Visible>
 +  <PartID>1490841599</PartID>
 +  <ItemSource>
 +   <TextEncoding>134217984</TextEncoding>
 +   <SourceLine>Structure_Length as uint8</SourceLine>
 +   <SourceLine>Connection_Type_Code as uint8</SourceLine>
 +   <SourceLine>KNX_Layer as uint8</SourceLine>
 +   <SourceLine>reserved as uint8</SourceLine>
 +  </ItemSource>
 + </Structure>
 +</block>
 +</RBProject>
 +
 +&&XSLT&&
 +
 +<?xml version="1.0" encoding="ISO-8859-1"?>
 +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
 +<xsl:template match="/RBProject">
 +  <html>
 +  <body>
 +  <h2>Constants</h2>
 +    <table border="1">
 +      <tr bgcolor="#9acd32">
 +        <th>ItemName</th>
 +        <th>ItemDef</th>
 +        <th>ItemType</th>
 +      </tr>
 +      <xsl:for-each select="block/Constant">
 +      <tr>
 +        <td><xsl:value-of select="../ObjName"/>.<xsl:value-of select="ItemName"/></td>
 +        <td><xsl:value-of select="ItemDef"/></td>
 +        <td><xsl:value-of select="ItemType"/></td>
 +      </tr>
 +      </xsl:for-each>
 +    </table>
 +  </body>
 +  </html>
 +</xsl:template>
 +</xsl:stylesheet>
 +
 +&&END&&
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +----
 +
 +
 ====== Constants ====== ====== Constants ======
  
Zeile 5: Zeile 5214:
 | KNX.kLogWidth | kLogWidth | 50 | 2 | | KNX.kLogWidth | kLogWidth | 50 | 2 |
 | KNX.k_BIG_ENDIAN | k_BIG_ENDIAN | False | 3 | | KNX.k_BIG_ENDIAN | k_BIG_ENDIAN | False | 3 |
-| KNX.k_CONNECTIONSTATE_REQUEST | k_CONNECTIONSTATE_REQUEST |  &h0207 | 2 |+| KNX.k_CONNECTIONSTATE_REQUEST | k_CONNECTIONSTATE_REQUEST | &h0207 | 2 |
 | KNX.k_CONNECTIONSTATE_REQUEST_TIMEOUT | k_CONNECTIONSTATE_REQUEST_TIMEOUT | 10 | 2 | | KNX.k_CONNECTIONSTATE_REQUEST_TIMEOUT | k_CONNECTIONSTATE_REQUEST_TIMEOUT | 10 | 2 |
 | KNX.k_CONNECTIONSTATE_RESPONSE | k_CONNECTIONSTATE_RESPONSE | &h0208 | 2 | | KNX.k_CONNECTIONSTATE_RESPONSE | k_CONNECTIONSTATE_RESPONSE | &h0208 | 2 |
Zeile 68: Zeile 5277:
 | KNX.k_TUNNEL_RAW | k_TUNNEL_RAW | &h04 | 2 | | KNX.k_TUNNEL_RAW | k_TUNNEL_RAW | &h04 | 2 |
 </datatables> </datatables>
- 
- 
  
  
  • xojo/info/constants.1619281025.txt.gz
  • Zuletzt geändert: 2021/04/24 18:17
  • von mz