This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/plc4c
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 9e3ca942346653eb850a700c4a52df719ccc2e45
Author: Christofer Dutz <[email protected]>
AuthorDate: Sun Jan 24 12:52:59 2021 +0100

    - Replaced the manually created KnxDatatypes and DataIo with a fully 
generated version
---
 .../resources/protocols/knxnetip/knxnetip.mspec    | 1446 +++-----------------
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |  261 +++-
 2 files changed, 474 insertions(+), 1233 deletions(-)

diff --git 
a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec 
b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index 5686916..620bc3c 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -245,7 +245,7 @@
             [simple   uint 8                    'additionalInformationLength']
             [array    CEMIAdditionalInformation 'additionalInformation' length 
'additionalInformationLength']
             [simple   LDataFrame                'dataFrame']
-            [optional uint 8                    'crc'                   
'dataFrame.notAckFrame']
+            //[optional uint 8                    'crc'                   
'dataFrame.notAckFrame']
         ]
 
         // Page 72ff
@@ -350,68 +350,226 @@
     [discriminator bit          'extendedFrame']
     [discriminator bit          'polling']
     [simple        bit          'repeated']
-    [discriminator bit          'notAckFrame']
+    [simple        bit          'notAckFrame']
     [enum          CEMIPriority 'priority']
     [simple        bit          'acknowledgeRequested']
     [simple        bit          'errorFlag']
-    [typeSwitch 'notAckFrame','extendedFrame','polling'
-        ['false' LDataFrameAck
-        ]
-        // Page 28ff
-        ['true','false','false' LDataFrameData
+    [typeSwitch 'extendedFrame','polling'
+       // Page 28ff
+        ['false','false' LDataFrameData
             [simple   KnxAddress   'sourceAddress']
             [array    int 8        'destinationAddress' count '2']
             [simple   bit          'groupAddress']
             [simple   uint 3       'hopCount']
-            [simple   uint 4       'dataLength']
-            // 10_01 Logical Tag Extended v01.02.01 AS.pdf Page 74ff
-            [simple   bit          'control']
-            [simple   bit          'numbered']
-            [simple   uint 4       'counter']
-            [optional ControlType  'controlType'   'control']
-            [optional APCI         'apci'          '!control']
-            // The 4 bit of APCI only allow 16 options, in order to extend, if 
APCI is set to 0xF
-            // the following 6 bit allow a bit more room for selection
-            [optional ExtendedAPCI 'extendedApci'  '!control && apci == 
APCI.OTHER_PDU']
-            // If the extended APCI is used, these 6 bits can't be used for 
data.
-            [optional int 6        'dataFirstByte' '!control && apci != 
APCI.OTHER_PDU']
-            [array    int 8        'data' count    '(dataLength < 1) ? 0 : 
dataLength - 1']
+            [simple   Apdu         'apdu']
+        ]
+        // Page 29ff
+        ['true','false' LDataFrameDataExt
+            [simple   bit          'groupAddress']
+            [simple   uint 3       'hopCount']
+            [simple   uint 4       'extendedFrameFormat']
+            [simple   KnxAddress   'sourceAddress']
+            [array    int 8        'destinationAddress' count '2']
+            [simple   Apdu         'apdu']
         ]
         // Page 31ff
-        ['true','true','true' LDataFramePollingData
+        ['true','true' LDataFramePollingData
             [simple   KnxAddress   'sourceAddress']
             [array    int 8        'targetAddress' count '2']
             [reserved uint 4       '0x00']
             [simple   uint 6       'numberExpectedPollData']
         ]
         // Page 31ff
-        ['true','false','true' LDataFramePollingData
+        ['false','true' LDataFramePollingData
             [simple   KnxAddress   'sourceAddress']
             [array    int 8        'targetAddress' count '2']
             [reserved uint 4       '0x00']
             [simple   uint 6       'numberExpectedPollData']
         ]
-        // Page 29ff
-        ['true','true','false' LDataFrameDataExt
-            [simple   bit          'groupAddress']
-            [simple   uint 3       'hopCount']
-            [simple   uint 4       'extendedFrameFormat']
-            [simple   KnxAddress   'sourceAddress']
-            [array    int 8        'destinationAddress' count '2']
-            [simple   uint 8       'dataLength']
-            // 10_01 Logical Tag Extended v01.02.01 AS.pdf Page 74ff
-            [simple   bit          'control']
-            [simple   bit          'numbered']
-            [simple   uint 4       'counter']
-            [optional ControlType  'controlType'   'control']
-            [optional APCI         'apci'          '!control']
-            // The 4 bit of APCI only allow 16 options, in order to extend, if 
APCI is set to 0xF
-            // the following 6 bit allow a bit more room for selection
-            [optional ExtendedAPCI 'extendedApci'  '!control && apci == 
APCI.OTHER_PDU']
-            // If the extended APCI is used, these 6 bits can't be used for 
data.
-            [optional int 6        'dataFirstByte' '!control && apci != 
APCI.OTHER_PDU']
-            [array    int 8        'data' count    '(dataLength < 1) ? 0 : 
dataLength - 1']
+    ]
+]
+
+[discriminatedType 'Apdu'
+    [simple   uint 8      'dataLength']
+    // 10_01 Logical Tag Extended v01.02.01 AS.pdf Page 74ff
+    [discriminator uint 1 'control']
+    [simple        bit    'numbered']
+    [simple        uint 4 'counter']
+    [typeSwitch 'control'
+        ['1' ApduControlContainer
+            [simple ApduControl 'controlApdu']
+        ]
+        ['0' ApduDataContainer [uint 8 'dataLength']
+            [simple ApduData 'dataApdu' ['dataLength']]
+        ]
+    ]
+]
+
+[discriminatedType 'ApduControl'
+    [discriminator uint 2 'controlType']
+    [typeSwitch 'controlType'
+        ['0x0' ApduControlConnect
+        ]
+        ['0x1' ApduControlDisconnect
+        ]
+        ['0x2' ApduControlAck
+        ]
+        ['0x3' ApduControlNack
+        ]
+    ]
+]
+
+[discriminatedType 'ApduData' [uint 8 'dataLength']
+    [discriminator uint 4 'apciType']
+    // 03_03_07 Application Layer v01.06.02 AS Page 9ff
+    [typeSwitch 'apciType'
+        ['0x0' ApduDataGroupValueRead
+        ]
+        ['0x1' ApduDataGroupValueResponse
+        ]
+        ['0x2' ApduDataGroupValueWrite [uint 8 'dataLength']
+            [simple int 6 'dataFirstByte']
+            [array  int 8 'data' count  '(dataLength < 1) ? 0 : dataLength - 
1']
+        ]
+        ['0x3' ApduDataIndividualAddressWrite
+        ]
+        ['0x4' ApduDataIndividualAddressRead
+        ]
+        ['0x5' ApduDataIndividualAddressResponse
+        ]
+        ['0x6' ApduDataAdcRead
+        ]
+        // In case of this type the following 6 bits contain more detailed 
information
+        ['0x7' ApduDataAdcResponse
+        ]
+        ['0x8' ApduDataMemoryRead
+        ]
+        ['0x9' ApduDataMemoryResponse
+        ]
+        ['0xA' ApduDataMemoryWrite
+        ]
+        // In case of this type the following 6 bits contain more detailed 
information
+        ['0xB' ApduDataUserMessage
+        ]
+        ['0xC' ApduDataDeviceDescriptorRead
+        ]
+        ['0xD' ApduDataDeviceDescriptorResponse
+        ]
+        ['0xE' ApduDataRestart
+        ]
+        ['0xF' ApduDataOther [uint 8 'dataLength']
+            [simple ApduDataExt 'extendedApdu' ['dataLength']]
+        ]
+    ]
+]
+
+// 03_03_07 Application Layer v01.06.02 AS Page 9ff
+[discriminatedType 'ApduDataExt' [uint 8 'length']
+    [discriminator uint 8 'extApciType']
+    [typeSwitch 'extApciType'
+        ['0x00' ApduDataExtOpenRoutingTableRequest
+        ]
+        ['0x01' ApduDataExtReadRoutingTableRequest
+        ]
+        ['0x02' ApduDataExtReadRoutingTableResponse
+        ]
+        ['0x03' ApduDataExtWriteRoutingTableRequest
+        ]
+        ['0x08' ApduDataExtReadRouterMemoryRequest
+        ]
+        ['0x09' ApduDataExtReadRouterMemoryResponse
+        ]
+        ['0x0A' ApduDataExtWriteRouterMemoryRequest
+        ]
+        ['0x0D' ApduDataExtReadRouterStatusRequest
+        ]
+        ['0x0E' ApduDataExtReadRouterStatusResponse
+        ]
+        ['0x0F' ApduDataExtWriteRouterStatusRequest
+        ]
+
+        ['0x10' ApduDataExtMemoryBitWrite
+        ]
+
+        ['0x11' ApduDataExtAuthorizeRequest
+        ]
+        ['0x12' ApduDataExtAuthorizeResponse
         ]
+        ['0x13' ApduDataExtKeyWrite
+        ]
+        ['0x14' ApduDataExtKeyResponse
+        ]
+
+        ['0x15' ApduDataExtPropertyValueRead
+            [simple uint 8  'objectIndex']
+            [simple uint 8  'propertyId']
+            [simple uint 4  'count']
+            [simple uint 12 'index']
+        ]
+        ['0x16' ApduDataExtPropertyValueResponse [uint 8 'length']
+            [simple uint 8  'objectIndex']
+            [simple uint 8  'propertyId']
+            [simple uint 4  'count']
+            [simple uint 12 'index']
+            [array  uint 8 'data' count 'length - 5']
+        ]
+        ['0x17' ApduDataExtPropertyValueWrite
+        ]
+        ['0x18' ApduDataExtPropertyDescriptionRead
+        ]
+        ['0x19' ApduDataExtPropertyDescriptionResponse
+        ]
+
+        ['0x1A' ApduDataExtNetworkParameterRead
+        ]
+        ['0x1B' ApduDataExtNetworkParameterResponse
+        ]
+
+        ['0x1C' ApduDataExtIndividualAddressSerialNumberRead
+        ]
+        ['0x1D' ApduDataExtIndividualAddressSerialNumberResponse
+        ]
+        ['0x1E' ApduDataExtIndividualAddressSerialNumberWrite
+        ]
+
+        ['0x20' ApduDataExtDomainAddressWrite
+        ]
+        ['0x21' ApduDataExtDomainAddressRead
+        ]
+        ['0x22' ApduDataExtDomainAddressResponse
+        ]
+        ['0x23' ApduDataExtDomainAddressSelectiveRead
+        ]
+
+        ['0x24' ApduDataExtNetworkParameterWrite
+        ]
+
+        ['0x25' ApduDataExtLinkRead
+        ]
+        ['0x26' ApduDataExtLinkResponse
+        ]
+        ['0x27' ApduDataExtLinkWrite
+        ]
+
+        ['0x28' ApduDataExtGroupPropertyValueRead
+        ]
+        ['0x29' ApduDataExtGroupPropertyValueResponse
+        ]
+        ['0x2A' ApduDataExtGroupPropertyValueWrite
+        ]
+        ['0x2B' ApduDataExtGroupPropertyValueInfoReport
+        ]
+
+        ['0x2C' ApduDataExtDomainAddressSerialNumberRead
+        ]
+        ['0x2D' ApduDataExtDomainAddressSerialNumberResponse
+        ]
+        ['0x2E' ApduDataExtDomainAddressSerialNumberWrite
+        ]
+
+        ['0x30' ApduDataExtFileStreamInfoReport
+        ]
+
     ]
 ]
 
@@ -436,1086 +594,6 @@
     ]
 ]
 
-[dataIo 'KnxDatapoint' [string 'formatName']
-    [typeSwitch 'formatName'
-        ['B1' BOOL
-            [reserved uint 7 '0x0']
-            [simple   bit    'value']
-        ]
-        ['B2' Struct
-            [reserved uint 6 '0x0']
-            [simple   bit    'control']
-            [simple   bit    'value']
-        ]
-        ['B1U3' Struct
-            [reserved uint 4 '0x0']
-            [simple   bit    'control']
-            [simple   uint 3 'value']
-        ]
-        ['A8_ASCII' STRING
-            [reserved uint 8   '0x0']
-            [simple   string 8 'ASCII' 'value']
-        ]
-        ['A8_8859_1' STRING
-            [reserved uint 8   '0x0']
-            [simple   string 8 'ISO-8859-1' 'value']
-        ]
-        ['U8' USINT
-            [reserved uint 8   '0x0']
-            [simple   uint 8 'value']
-        ]
-        ['V8' SINT
-            [reserved uint 8   '0x0']
-            [simple   int 8 'value']
-        ]
-        // TODO value should actually be an enum ...
-        ['B5N3' Struct
-            [reserved uint 3 '0x0']
-            [simple   bit    'a']
-            [simple   bit    'b']
-            [simple   bit    'c']
-            [simple   bit    'd']
-            [simple   bit    'e']
-            [simple   int 8  'value']
-        ]
-        ['U16' UINT
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'value']
-        ]
-        ['V16' INT
-            [reserved uint 8  '0x0']
-            [simple   int 16 'value']
-        ]
-        ['F16' REAL
-            [reserved uint 8     '0x0']
-            [simple   float 4.11 'value']
-        ]
-        // TODO Not sure how to encode the day in this
-        ['N3N5r2N6r2N6' TIME_OF_DAY
-            [reserved uint 8 '0x0']
-            [simple   uint 3 'day']
-            [simple   uint 5 'hour']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'minutes']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'seconds']
-        ]
-        ['r3N5r4N4r1U7' DATE
-            [reserved uint 3 '0x00']
-            [simple   uint 5 'day']
-            [reserved uint 4 '0x00']
-            [reserved uint 4 '0x00']
-            [simple   uint 4 'month']
-            [reserved uint 1 '0x00']
-            [simple   uint 7 'year']
-        ]
-        ['U32' UDINT
-            [reserved uint 8  '0x0']
-            [simple   uint 32 'value']
-        ]
-        ['V32' DINT
-            [reserved uint 8  '0x0']
-            [simple   int 32 'value']
-        ]
-        ['F32' REAL
-            [reserved uint 8     '0x0']
-            [simple   float 8.23 'value']
-        ]
-        ['U4U4U4U4U4U4B4N4' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 4 'd6']
-            [simple   uint 4 'd5']
-            [simple   uint 4 'd4']
-            [simple   uint 4 'd3']
-            [simple   uint 4 'd2']
-            [simple   uint 4 'd1']
-            [simple   bit    'e']
-            [simple   bit    'p']
-            [simple   bit    'd']
-            [simple   bit    'c']
-            [simple   uint 4 'index']
-        ]
-        ['A112_ASCII' STRING
-            [reserved uint 8  '0x0']
-            [simple   string 112 'ASCII' 'value']
-        ]
-        ['A112_8859_1' STRING
-            [reserved uint 8  '0x0']
-            [simple   string 112 'ISO-8859-1' 'value']
-        ]
-        ['r2U6' USINT
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'value']
-        ]
-        ['B1r1U6' Struct
-            [reserved uint 8  '0x0']
-            [simple   bit    'learn']
-            [reserved uint 1 '0x00']
-            [simple   uint 6 'sceneNumber']
-        ]
-        ['U8r4U4r3U5U3U5r2U6r2U6B16' DATE_AND_TIME
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'year']
-            [reserved uint 4 '0x00']
-            [simple   uint 4 'month']
-            [reserved uint 3 '0x00']
-            [simple   uint 5 'day']
-            [simple   uint 3 'dayOfWeek']
-            [simple   uint 5 'hour']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'minutes']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'seconds']
-            [simple   bit    'fault']
-            [simple   bit    'workingDay']
-            [simple   bit    'noWorkingDay']
-            [simple   bit    'noYear']
-            [simple   bit    'noMonthAndDay']
-            [simple   bit    'noDayOfWeek']
-            [simple   bit    'noTime']
-            [simple   bit    'standardSummerTime']
-            [simple   bit    'clockWithSyncSignal']
-        ]
-        // TODO This should actually be enums depending on their type
-        ['N8' USINT
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'value']
-        ]
-        ['B8' BYTE
-            [reserved uint 8  '0x0']
-            [simple uint 8 'value']
-        ]
-        ['B16' WORD
-            [reserved uint 8  '0x0']
-            [simple uint 16 'value']
-        ]
-        // TODO Probably should be a 2-bit unsigned plc-value
-        // TODO value should actually be enums depending on their type
-        ['N2' USINT
-            [reserved uint 6 '0x00']
-            [simple   uint 2 'value']
-        ]
-        ['An_8859_1' STRING
-            [reserved uint 8  '0x0']
-            // TODO: Implement this field
-            //[manual string 8 'ISO-8859-1' 'value' '' '' '']
-        ]
-        ['U4U4' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 4 'busy']
-            [simple   uint 4 'nak']
-        ]
-        ['r1b1U6' Struct
-            [reserved uint 8  '0x0']
-            [reserved uint 1 '0x00']
-            [simple   bit    'sceneActive']
-            [simple   uint 6 'sceneNumber']
-        ]
-        ['B32' DWORD
-            [reserved uint 8  '0x0']
-            [simple uint 32 'value']
-        ]
-        // TODO UTF-8 chars can be two type values. probably better to do a 
"manual" element
-        ['An_UTF_8' STRING
-            [reserved uint 8  '0x0']
-            // TODO: Implement this field
-            //[manual string 8 'UTF-8' 'value' '' '' '']
-        ]
-        ['V64' LINT
-            [reserved uint 8  '0x0']
-            [simple int 64 'value']
-        ]
-        ['B24' List
-            [reserved uint 8  '0x0']
-            [array bit 'value' count '24']
-        ]
-        // TODO Probably should be a 3-bit unsigned plc-value
-        // TODO value should actually be enums depending on their type
-        ['N3' USINT
-            [reserved uint 5 '0x00']
-            [simple   uint 3 'value']
-        ]
-        ['B1Z8HeatingOrCoolingZ' Struct
-            [reserved uint 7 '0x00']
-            [simple   bit    'heating']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['B1Z8BinaryValueZ' Struct
-            [reserved uint 7 '0x00']
-            [simple   bit    'high']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8HvacOperatingMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'hvacOperatingMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8DhwMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'dhwMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8HvacControllingMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'hvacControllingMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8EnableHeatingOrCoolingStage' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'enableHeatingOrCoolingStage']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8BuildingMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'buildingMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8OccupancyMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'occupancyMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8EmergencyMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'hvacEmergencyMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['U8Z8Rel' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'relValue']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['U8Z8Counter' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'counterValue']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['U16Z8TimePeriod' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'timePeriod']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8FlowRate' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'flowRate']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8Counter' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'counterValue']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8ElectricCurrent' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'electricalCurrent']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8Power' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'power']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8AtmPressure' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'atmPressure']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8PercentValue' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'percentValue']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8HvacAirQuality' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'ppmResolution']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8WindSpeed' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'windSpeed']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8SunIntensity' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'sunIntensity']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8HvacAirFlow' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'airFlow']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['V8Z8RelSignedValue' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 8  'relSignedValue']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['V16Z8DeltaTime' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  16 'deltaTime']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['V16Z8RelSignedValue' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  16 'relSignedValue']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16N8HvacModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'hvacMode']
-        ]
-        ['U16N8DhwModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'dhwMode']
-        ]
-        ['U16N8OccupancyModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'occupationMode']
-        ]
-        ['U16N8BuildingModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'buildingMode']
-        ]
-        ['U8B8StatusBurnerController' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'actualRelativePower']
-            [reserved uint 4    '0x00']
-            [simple   bit       'stage2Active']
-            [simple   bit       'stage1Active']
-            [simple   bit       'failure']
-            [simple   bit       'actualRelativePowerValid']
-        ]
-        ['U8B8LockingSignal' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'requestedPowerReduction']
-            [reserved uint 6    '0x00']
-            [simple   bit       'critical']
-            [simple   bit       'requestedPowerReductionValid']
-        ]
-        ['U8B8BoilerControllerDemandSignal' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'relativeDemand']
-            [reserved uint 6    '0x00']
-            [simple   bit       'controlsOperationStage2']
-            [simple   bit       'controlsOperationStage1']
-        ]
-        ['U8B8ActuatorPositionDemand' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'actuatorPositionDemand']
-            [reserved uint 4    '0x00']
-            [simple   bit       'emergencyDemand']
-            [simple   bit       'shiftLoadPriority']
-            [simple   bit       'absoluteLoadPriority']
-            [simple   bit       'actuatorPositionDemandValid']
-        ]
-        ['U8B8ActuatorPositionStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'actualActuatorPosition']
-            [reserved uint 3    '0x00']
-            [simple   bit       'synchronizationMode']
-            [simple   bit       'valveKick']
-            [simple   bit       'callibrationMode']
-            [simple   bit       'positionManuallyOverridden']
-            [simple   bit       'failure']
-        ]
-        ['U8B8StatusLightingActuator' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'lightingLevel']
-            [simple   bit       'failure']
-            [simple   bit       'localOverride']
-            [simple   bit       'dimming']
-            [simple   bit       'staircaseLightingFunction']
-            [simple   bit       'nightMode']
-            [simple   bit       'forced']
-            [simple   bit       'locked']
-            [simple   bit       'lightingLevelValid']
-        ]
-        ['V16B8HeatProducerManagerStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'tempFlowProdSegmH']
-            [reserved uint 3     '0x00']
-            [simple   bit        'temporarilyOff']
-            [simple   bit        'permanentlyOff']
-            [simple   bit        'switchedOffSummerMode']
-            [simple   bit        'failure']
-            [simple   bit        'tempFlowProdSegmHValid']
-        ]
-        ['V16B8RoomTemperatureDemand' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'roomTemperatureDemand']
-            [reserved uint 4     '0x00']
-            [simple   bit        'emergencyDemand']
-            [simple   bit        'shiftLoadPriority']
-            [simple   bit        'absoluteLoadPriority']
-            [simple   bit        'roomTemperatureDemandValid']
-        ]
-        ['V16B8ColdWaterProducerManagerStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'flowTemperatureProdSegmC']
-            [reserved uint 4     '0x00']
-            [simple   bit        'temporarilyOff']
-            [simple   bit        'permanentlyOff']
-            [simple   bit        'failure']
-            [simple   bit        'flowTemperatureProdSegmCValid']
-        ]
-        ['V16B8WaterTemperatureControllerStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'actualTemperature']
-            [reserved uint 5     '0x00']
-            [simple   bit        'controllerWorking']
-            [simple   bit        'failure']
-            [simple   bit        'actualTemperatureValid']
-        ]
-        ['V16B16' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'flowTemperatureDemand']
-            [reserved uint 4     '0x00']
-            [simple   bit        
'demandFromDhwWhileLegionellaFunctionIsActive']
-            [simple   bit        'emergencyDemandForFrostProtection']
-            [simple   bit        
'requestForWaterCirculationInPrimaryDistributionSegment']
-            [simple   bit        'demandFromAuxillaryHeatOrCoolConsumer']
-            [simple   bit        'demandFromVentilation']
-            [simple   bit        'demandForRoomHeatingOrCooling']
-            [simple   bit        'heatDemandFromDhw']
-            [simple   bit        'flowTemperatureDemandIsMin']
-            [simple   bit        'flowTemperatureDemandIsMax']
-            [simple   bit        'shiftLoadPriority']
-            [simple   bit        'absoluteLoadPriority']
-            [simple   bit        'flowTemperatureDemandValid']
-        ]
-        ['U8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'energyDemand']
-            [simple   uint 8  'actualControllerMode']
-        ]
-        ['V16V16V16RoomTemperature' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointComfort']
-            [simple   float 4.11 'temperatureSetpointStandby']
-            [simple   float 4.11 'temperatureSetpointEco']
-        ]
-        ['V16V16V16RoomTemperatureShift' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointShiftComfort']
-            [simple   float 4.11 'temperatureSetpointShiftStandby']
-            [simple   float 4.11 'temperatureSetpointShiftEco']
-        ]
-        ['V16V16V16V16RoomTemperature' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointComfort']
-            [simple   float 4.11 'temperatureSetpointStandby']
-            [simple   float 4.11 'temperatureSetpointEco']
-            [simple   float 4.11 'temperatureSetpointBProt']
-        ]
-        ['V16V16V16V16DhwtTemperature' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointLegioProtect']
-            [simple   float 4.11 'temperatureSetpointNormal']
-            [simple   float 4.11 'temperatureSetpointReduced']
-            [simple   float 4.11 'temperatureSetpointFrostProtect']
-        ]
-        ['V16V16V16V16RoomTemperatureShift' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointShiftComfort']
-            [simple   float 4.11 'temperatureSetpointShiftStandby']
-            [simple   float 4.11 'temperatureSetpointShiftEco']
-            [simple   float 4.11 'temperatureSetpointShiftBProt']
-        ]
-        ['V16U8B8Heat' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'flowTemperatureDemand']
-            [simple   uint 8  'relativePower']
-            [reserved uint 2  '0x00']
-            [simple   bit     'boilerEnabled']
-            [simple   bit     'stage2Forced']
-            [simple   bit     'stage2Enabled']
-            [simple   bit     'stage1Forced']
-            [simple   bit     'stage1Enabled']
-            [simple   bit     'flowTemperatureDemandValid']
-        ]
-        ['V16U8B8ChilledWater' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'chilledWaterFlowTemperatureDemand']
-            [simple   uint 8  'relativePower']
-            [reserved uint 5  '0x00']
-            [simple   bit     'chilledWaterPumpEnabled']
-            [simple   bit     'relativePowerValid']
-            [simple   bit     'chilledWaterFlowTemperatureDemandValid']
-        ]
-        ['V16U8B16Boiler' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'tempBoiler']
-            [simple   uint 8  'relativePower']
-            [reserved uint 4  '0x00']
-            [simple   bit     'chimneySweepFunctionActive']
-            [simple   bit     'reducedAvailability']
-            [simple   bit     'powerLimitBoilerReached']
-            [simple   bit     'powerLimitStage1Reached']
-            [simple   bit     'stage2Enabled']
-            [simple   bit     'stage1Enabled']
-            [simple   bit     'boilerTemporarilyNotProvidingHeat']
-            [simple   bit     'permanentlyOff']
-            [simple   bit     'boilerSwitchedOffWinterSummerMode']
-            [simple   bit     'boilerFailure']
-            [simple   bit     'relativePowerValid']
-            [simple   bit     'tempBoilerValid']
-        ]
-        ['V16U8B16Chiller' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'tempChiller']
-            [simple   uint 8  'relativePower']
-            [reserved uint 8  '0x00']
-            [simple   bit     'reducedAvailability']
-            [simple   bit     'powerLimitChillerReached']
-            [simple   bit     'powerLimitCurrentStageReached']
-            [simple   bit     'permanentlyOff']
-            [simple   bit     'chillerFailure']
-            [simple   bit     'chillerRunningStatus']
-            [simple   bit     'relativePowerValid']
-            [simple   bit     'tempChillerValid']
-        ]
-        ['U16U8N8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'nominalPower']
-            [simple   uint 8  'relativePowerLimit']
-            [simple   int  8  'burnerType']
-            [reserved uint 5  '0x00']
-            [simple   bit     'solidState']
-            [simple   bit     'gas']
-            [simple   bit     'oil']
-        ]
-        ['U5U5U6' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 5 'magicNumber']
-            [simple   uint 5 'versionNumber']
-            [simple   uint 6 'revisionNumber']
-        ]
-        ['V32Z8VolumeLiter' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'volumeLiter']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['V32Z8FlowRate' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'flowRate']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U8N8N8N8B8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'logNumber']
-            [simple   uint 8 'alarmPriority']
-            [simple   uint 8 'applicationArea']
-            [simple   uint 8 'errorClass']
-            [reserved uint 4 '0x00']
-            [simple   bit    'errorCode_Sup']
-            [simple   bit    'alarmText_Sup']
-            [simple   bit    'timeStamp_Sup']
-            [simple   bit    'ack_Sup']
-            [reserved uint 5 '0x00']
-            [simple   bit    'alarmUnAck']
-            [simple   bit    'locked']
-            [simple   bit    'inAlarm']
-        ]
-        ['U16V16' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'delayTime']
-            [simple   int  16 'temperature']
-        ]
-        ['N16U32' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'manufacturerCode']
-            [simple   uint 32 'incrementedNumber']
-        ]
-        ['F16F16F16' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointComfort']
-            [simple   float 4.11 'temperatureSetpointShiftStandby']
-            [simple   float 4.11 'temperatureSetpointShiftEco']
-        ]
-        ['V8N8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  8  'energyDemand']
-            [simple   uint 8  'hvacControllerMode']
-            [simple   uint 8  'hvacEmergencyMode']
-        ]
-        ['V16V16N8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  16 'tempSetpointCooling']
-            [simple   int  16 'tempSetpointHeating']
-            [simple   uint 8  'hvacControllerMode']
-            [simple   uint 8  'hvacEmergencyMode']
-        ]
-        ['U16U8Scaling' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'timePeriod']
-            [simple   uint 8  'percent']
-        ]
-        ['U16U8TariffNext' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'delayTime']
-            [simple   uint 8  'tariff']
-        ]
-        ['V32N8Z8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'countVal']
-            [simple   uint 8  'valInfField']
-            [simple   uint 8  'statusOrCommand']
-        ]
-        ['U16U32U8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'manufacturerId']
-            [simple   uint 32 'identNumber']
-            [simple   uint 8  'version']
-            [simple   uint 8  'medium']
-        ]
-        ['A8A8A8A8' Struct
-            [reserved uint 8  '0x0']
-            [simple   string 16 'ASCII' 'languageCode']
-            [simple   string 16 'ASCII' 'regionCode']
-        ]
-        ['U8U8U8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'red']
-            [simple   uint 8  'green']
-            [simple   uint 8  'blue']
-        ]
-        ['A8A8Language' Struct
-            [reserved uint 8  '0x0']
-            [simple   string 16 'ASCII' 'languageCode']
-        ]
-        ['A8A8Region' Struct
-            [reserved uint 8  '0x0']
-            [simple   string 16 'ASCII' 'regionCode']
-        ]
-        ['V32U8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'activeElectricalEnergy']
-            [simple   uint 8  'tariff']
-            [reserved uint 6  '0x00']
-            [simple   bit     'noTariff']
-            [simple   bit     'noActiveElectricalEnergy']
-        ]
-        ['B1N3N4' Struct
-            [reserved uint 8  '0x0']
-            [simple   bit     'deactivationOfPriority']
-            [simple   uint 3  'priorityLevel']
-            [simple   uint 4  'modeLevel']
-        ]
-        ['B10U6' Struct
-            [reserved uint 5  '0x00']
-            [simple   bit     'convertorError']
-            [simple   bit     'ballastFailure']
-            [simple   bit     'lampError']
-            [simple   bit     'read']
-            [simple   bit     'groupAddress']
-            [simple   uint 6  'address']
-        ]
-        ['B2U6' Struct
-            [reserved uint 8  '0x0']
-            [simple   bit     'sceneActivationInactive']
-            [simple   bit     'storageFunctionDisable']
-            [simple   uint 6  'sceneNumber']
-        ]
-        ['U8r7B1' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'setValue']
-            [reserved uint 7  '0x00']
-            [simple   bit     'channelActivationActive']
-        ]
-        ['U8U8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'heightPosition']
-            [simple   uint 8  'slatsPosition']
-            [reserved uint 6  '0x00']
-            [simple   bit     'validSlatsPos']
-            [simple   bit     'validHeightPos']
-        ]
-        ['U8U8B16' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'heightPosition']
-            [simple   uint 8  'slatsPosition']
-            [simple   bit     'validSlatsPos']
-            [simple   bit     'validHeightPos']
-            [reserved uint 3  '0x00']
-            [simple   bit     'failure']
-            [simple   bit     'localOverride']
-            [simple   bit     'locked']
-            [simple   bit     'forced']
-            [simple   bit     'weatherAlarm']
-            [simple   bit     'targetSPosRestrict']
-            [simple   bit     'targetHPosRestrict']
-            [simple   bit     'driveState']
-            [simple   bit     'lowerPredefPos']
-            [simple   bit     'lowerEndPos']
-            [simple   bit     'upperEndPos']
-        ]
-    ]
-]
-
-[enum string 'KnxDatapointType' [uint 10 'mainNumber', uint 10 'subNumber', 
string 'formatName']
-    ['DPT_Switch'                               DPT_Switch                     
        ['1',   '1',    'B1']]
-    ['DPT_Bool'                                 DPT_Bool                       
        ['1',   '2',    'B1']]
-    ['DPT_Enable'                               DPT_Enable                     
        ['1',   '3',    'B1']]
-    ['DPT_Ramp'                                 DPT_Ramp                       
        ['1',   '4',    'B1']]
-    ['DPT_Alarm'                                DPT_Alarm                      
        ['1',   '5',    'B1']]
-    ['DPT_BinaryValue'                          DPT_BinaryValue                
        ['1',   '6',    'B1']]
-    ['DPT_Step'                                 DPT_Step                       
        ['1',   '7',    'B1']]
-    ['DPT_UpDown'                               DPT_UpDown                     
        ['1',   '8',    'B1']]
-    ['DPT_OpenClose'                            DPT_OpenClose                  
        ['1',   '9',    'B1']]
-    ['DPT_Start'                                DPT_Start                      
        ['1',   '10',   'B1']]
-    ['DPT_State'                                DPT_State                      
        ['1',   '11',   'B1']]
-    ['DPT_Invert'                               DPT_Invert                     
        ['1',   '12',   'B1']]
-    ['DPT_DimSendStyle'                         DPT_DimSendStyle               
        ['1',   '13',   'B1']]
-    ['DPT_InputSource'                          DPT_InputSource                
        ['1',   '14',   'B1']]
-    ['DPT_Reset'                                DPT_Reset                      
        ['1',   '15',   'B1']]
-    ['DPT_Ack'                                  DPT_Ack                        
        ['1',   '16',   'B1']]
-    ['DPT_Trigger'                              DPT_Trigger                    
        ['1',   '17',   'B1']]
-    ['DPT_Occupancy'                            DPT_Occupancy                  
        ['1',   '18',   'B1']]
-    ['DPT_Window_Door'                          DPT_Window_Door                
        ['1',   '19',   'B1']]
-    ['DPT_LogicalFunction'                      DPT_LogicalFunction            
        ['1',   '21',   'B1']]
-    ['DPT_Scene_AB'                             DPT_Scene_AB                   
        ['1',   '22',   'B1']]
-    ['DPT_ShutterBlinds_Mode'                   DPT_ShutterBlinds_Mode         
        ['1',   '23',   'B1']]
-    ['DPT_Heat_Cool'                            DPT_Heat_Cool                  
        ['1',   '100',  'B1']]
-    ['DPT_Switch_Control'                       DPT_Switch_Control             
        ['2',   '1',    'B2']]
-    ['DPT_Bool_Control'                         DPT_Bool_Control               
        ['2',   '2',    'B2']]
-    ['DPT_Enable_Control'                       DPT_Enable_Control             
        ['2',   '3',    'B2']]
-    ['DPT_Ramp_Control'                         DPT_Ramp_Control               
        ['2',   '4',    'B2']]
-    ['DPT_Alarm_Control'                        DPT_Alarm_Control              
        ['2',   '5',    'B2']]
-    ['DPT_BinaryValue_Control'                  DPT_BinaryValue_Control        
        ['2',   '6',    'B2']]
-    ['DPT_Step_Control'                         DPT_Step_Control               
        ['2',   '7',    'B2']]
-    ['DPT_Direction1_Control'                   DPT_Direction1_Control         
        ['2',   '8',    'B2']]
-    ['DPT_Direction2_Control'                   DPT_Direction2_Control         
        ['2',   '9',    'B2']]
-    ['DPT_Start_Control'                        DPT_Start_Control              
        ['2',   '10',   'B2']]
-    ['DPT_State_Control'                        DPT_State_Control              
        ['2',   '11',   'B2']]
-    ['DPT_Invert_Control'                       DPT_Invert_Control             
        ['2',   '12',   'B2']]
-    ['DPT_Control_Dimming'                      DPT_Control_Dimming            
        ['3',   '7',    'B1U3']]
-    ['DPT_Control_Blinds'                       DPT_Control_Blinds             
        ['3',   '8',    'B1U3']]
-    ['DPT_Char_ASCII'                           DPT_Char_ASCII                 
        ['4',   '1',    'A8_ASCII']]
-    ['DPT_Char_8859_1'                          DPT_Char_8859_1                
        ['4',   '2',    'A8_8859_1']]
-    ['DPT_Scaling'                              DPT_Scaling                    
        ['5',   '1',    'U8']]
-    ['DPT_Angle'                                DPT_Angle                      
        ['5',   '3',    'U8']]
-    ['DPT_Percent_U8'                           DPT_Percent_U8                 
        ['5',   '4',    'U8']]
-    ['DPT_DecimalFactor'                        DPT_DecimalFactor              
        ['5',   '5',    'U8']]
-    ['DPT_Tariff'                               DPT_Tariff                     
        ['5',   '6',    'U8']]
-    ['DPT_Value_1_Ucount'                       DPT_Value_1_Ucount             
        ['5',   '10',   'U8']]
-    ['DPT_Percent_V8'                           DPT_Percent_V8                 
        ['6',   '1',    'V8']]
-    ['DPT_Value_1_Count'                        DPT_Value_1_Count              
        ['6',   '10',   'V8']]
-    ['DPT_Status_Mode3'                         DPT_Status_Mode3               
        ['6',   '20',   'B5N3']]
-    ['DPT_Value_2_Ucount'                       DPT_Value_2_Ucount             
        ['7',   '1',    'U16']]
-    ['DPT_TimePeriodMsec'                       DPT_TimePeriodMsec             
        ['7',   '2',    'U16']]
-    ['DPT_TimePeriod10MSec'                     DPT_TimePeriod10MSec           
        ['7',   '3',    'U16']]
-    ['DPT_TimePeriod100MSec'                    DPT_TimePeriod100MSec          
        ['7',   '4',    'U16']]
-    ['DPT_TimePeriodSec'                        DPT_TimePeriodSec              
        ['7',   '5',    'U16']]
-    ['DPT_TimePeriodMin'                        DPT_TimePeriodMin              
        ['7',   '6',    'U16']]
-    ['DPT_TimePeriodHrs'                        DPT_TimePeriodHrs              
        ['7',   '7',    'U16']]
-    ['DPT_PropDataType'                         DPT_PropDataType               
        ['7',   '10',   'U16']]
-    ['DPT_Length_mm'                            DPT_Length_mm                  
        ['7',   '11',   'U16']]
-    ['DPT_UElCurrentmA'                         DPT_UElCurrentmA               
        ['7',   '12',   'U16']]
-    ['DPT_Brightness'                           DPT_Brightness                 
        ['7',   '13',   'U16']]
-    ['DPT_Value_2_Count'                        DPT_Value_2_Count              
        ['8',   '1',    'V16']]
-    ['DPT_DeltaTimeMsec'                        DPT_DeltaTimeMsec              
        ['8',   '2',    'V16']]
-    ['DPT_DeltaTime10MSec'                      DPT_DeltaTime10MSec            
        ['8',   '3',    'V16']]
-    ['DPT_DeltaTime100MSec'                     DPT_DeltaTime100MSec           
        ['8',   '4',    'V16']]
-    ['DPT_DeltaTimeSec'                         DPT_DeltaTimeSec               
        ['8',   '5',    'V16']]
-    ['DPT_DeltaTimeMin'                         DPT_DeltaTimeMin               
        ['8',   '6',    'V16']]
-    ['DPT_DeltaTimeHrs'                         DPT_DeltaTimeHrs               
        ['8',   '7',    'V16']]
-    ['DPT_Percent_V16'                          DPT_Percent_V16                
        ['8',   '10',   'V16']]
-    ['DPT_Rotation_Angle'                       DPT_Rotation_Angle             
        ['8',   '11',   'V16']]
-    ['DPT_Value_Temp'                           DPT_Value_Temp                 
        ['9',   '1',    'F16']]
-    ['DPT_Value_Tempd'                          DPT_Value_Tempd                
        ['9',   '2',    'F16']]
-    ['DPT_Value_Tempa'                          DPT_Value_Tempa                
        ['9',   '3',    'F16']]
-    ['DPT_Value_Lux'                            DPT_Value_Lux                  
        ['9',   '4',    'F16']]
-    ['DPT_Value_Wsp'                            DPT_Value_Wsp                  
        ['9',   '5',    'F16']]
-    ['DPT_Value_Pres'                           DPT_Value_Pres                 
        ['9',   '6',    'F16']]
-    ['DPT_Value_Humidity'                       DPT_Value_Humidity             
        ['9',   '7',    'F16']]
-    ['DPT_Value_AirQuality'                     DPT_Value_AirQuality           
        ['9',   '8',    'F16']]
-    ['DPT_Value_Time1'                          DPT_Value_Time1                
        ['9',   '10',   'F16']]
-    ['DPT_Value_Time2'                          DPT_Value_Time2                
        ['9',   '11',   'F16']]
-    ['DPT_Value_Volt'                           DPT_Value_Volt                 
        ['9',   '20',   'F16']]
-    ['DPT_Value_Curr'                           DPT_Value_Curr                 
        ['9',   '21',   'F16']]
-    ['DPT_PowerDensity'                         DPT_PowerDensity               
        ['9',   '22',   'F16']]
-    ['DPT_KelvinPerPercent'                     DPT_KelvinPerPercent           
        ['9',   '23',   'F16']]
-    ['DPT_Power'                                DPT_Power                      
        ['9',   '24',   'F16']]
-    ['DPT_Value_Volume_Flow'                    DPT_Value_Volume_Flow          
        ['9',   '25',   'F16']]
-    ['DPT_Rain_Amount'                          DPT_Rain_Amount                
        ['9',   '26',   'F16']]
-    ['DPT_Value_Temp_F'                         DPT_Value_Temp_F               
        ['9',   '27',   'F16']]
-    ['DPT_Value_Wsp_kmh'                        DPT_Value_Wsp_kmh              
        ['9',   '28',   'F16']]
-    ['DPT_TimeOfDay'                            DPT_TimeOfDay                  
        ['10',  '1',    'N3N5r2N6r2N6']]
-    ['DPT_Date'                                 DPT_Date                       
        ['11',  '1',    'r3N5r4N4r1U7']]
-    ['DPT_Value_4_Ucount'                       DPT_Value_4_Ucount             
        ['12',  '1',    'U32']]
-    ['DPT_Value_4_Count'                        DPT_Value_4_Count              
        ['13',  '1',    'V32']]
-    ['DPT_FlowRate_m3h'                         DPT_FlowRate_m3h               
        ['13',  '2',    'V32']]
-    ['DPT_ActiveEnergy'                         DPT_ActiveEnergy               
        ['13',  '10',   'V32']]
-    ['DPT_ApparantEnergy'                       DPT_ApparantEnergy             
        ['13',  '11',   'V32']]
-    ['DPT_ReactiveEnergy'                       DPT_ReactiveEnergy             
        ['13',  '12',   'V32']]
-    ['DPT_ActiveEnergy_kWh'                     DPT_ActiveEnergy_kWh           
        ['13',  '13',   'V32']]
-    ['DPT_ApparantEnergy_kVAh'                  DPT_ApparantEnergy_kVAh        
        ['13',  '14',   'V32']]
-    ['DPT_ReactiveEnergy_kVARh'                 DPT_ReactiveEnergy_kVARh       
        ['13',  '15',   'V32']]
-    ['DPT_LongDeltaTimeSec'                     DPT_LongDeltaTimeSec           
        ['13',  '100',  'V32']]
-    ['DPT_Value_Acceleration'                   DPT_Value_Acceleration         
        ['14',  '0',    'F32']]
-    ['DPT_Value_Acceleration_Angular'           DPT_Value_Acceleration_Angular 
        ['14',  '1',    'F32']]
-    ['DPT_Value_Activation_Energy'              DPT_Value_Activation_Energy    
        ['14',  '2',    'F32']]
-    ['DPT_Value_Activity'                       DPT_Value_Activity             
        ['14',  '3',    'F32']]
-    ['DPT_Value_Mol'                            DPT_Value_Mol                  
        ['14',  '4',    'F32']]
-    ['DPT_Value_Amplitude'                      DPT_Value_Amplitude            
        ['14',  '5',    'F32']]
-    ['DPT_Value_AngleRad'                       DPT_Value_AngleRad             
        ['14',  '6',    'F32']]
-    ['DPT_Value_AngleDeg'                       DPT_Value_AngleDeg             
        ['14',  '7',    'F32']]
-    ['DPT_Value_Angular_Momentum'               DPT_Value_Angular_Momentum     
        ['14',  '8',    'F32']]
-    ['DPT_Value_Angular_Velocity'               DPT_Value_Angular_Velocity     
        ['14',  '9',    'F32']]
-    ['DPT_Value_Area'                           DPT_Value_Area                 
        ['14',  '10',   'F32']]
-    ['DPT_Value_Capacitance'                    DPT_Value_Capacitance          
        ['14',  '11',   'F32']]
-    ['DPT_Value_Charge_DensitySurface'          
DPT_Value_Charge_DensitySurface        ['14',  '12',   'F32']]
-    ['DPT_Value_Charge_DensityVolume'           DPT_Value_Charge_DensityVolume 
        ['14',  '13',   'F32']]
-    ['DPT_Value_Compressibility'                DPT_Value_Compressibility      
        ['14',  '14',   'F32']]
-    ['DPT_Value_Conductance'                    DPT_Value_Conductance          
        ['14',  '15',   'F32']]
-    ['DPT_Value_Electrical_Conductivity'        
DPT_Value_Electrical_Conductivity      ['14',  '16',   'F32']]
-    ['DPT_Value_Density'                        DPT_Value_Density              
        ['14',  '17',   'F32']]
-    ['DPT_Value_Electric_Charge'                DPT_Value_Electric_Charge      
        ['14',  '18',   'F32']]
-    ['DPT_Value_Electric_Current'               DPT_Value_Electric_Current     
        ['14',  '19',   'F32']]
-    ['DPT_Value_Electric_CurrentDensity'        
DPT_Value_Electric_CurrentDensity      ['14',  '20',   'F32']]
-    ['DPT_Value_Electric_DipoleMoment'          
DPT_Value_Electric_DipoleMoment        ['14',  '21',   'F32']]
-    ['DPT_Value_Electric_Displacement'          
DPT_Value_Electric_Displacement        ['14',  '22',   'F32']]
-    ['DPT_Value_Electric_FieldStrength'         
DPT_Value_Electric_FieldStrength       ['14',  '23',   'F32']]
-    ['DPT_Value_Electric_Flux'                  DPT_Value_Electric_Flux        
        ['14',  '24',   'F32']]
-    ['DPT_Value_Electric_FluxDensity'           DPT_Value_Electric_FluxDensity 
        ['14',  '25',   'F32']]
-    ['DPT_Value_Electric_Polarization'          
DPT_Value_Electric_Polarization        ['14',  '26',   'F32']]
-    ['DPT_Value_Electric_Potential'             DPT_Value_Electric_Potential   
        ['14',  '27',   'F32']]
-    ['DPT_Value_Electric_PotentialDifference'   
DPT_Value_Electric_PotentialDifference ['14',  '28',   'F32']]
-    ['DPT_Value_ElectromagneticMoment'          
DPT_Value_ElectromagneticMoment        ['14',  '29',   'F32']]
-    ['DPT_Value_Electromotive_Force'            DPT_Value_Electromotive_Force  
        ['14',  '30',   'F32']]
-    ['DPT_Value_Energy'                         DPT_Value_Energy               
        ['14',  '31',   'F32']]
-    ['DPT_Value_Force'                          DPT_Value_Force                
        ['14',  '32',   'F32']]
-    ['DPT_Value_Frequency'                      DPT_Value_Frequency            
        ['14',  '33',   'F32']]
-    ['DPT_Value_Angular_Frequency'              DPT_Value_Angular_Frequency    
        ['14',  '34',   'F32']]
-    ['DPT_Value_Heat_Capacity'                  DPT_Value_Heat_Capacity        
        ['14',  '35',   'F32']]
-    ['DPT_Value_Heat_FlowRate'                  DPT_Value_Heat_FlowRate        
        ['14',  '36',   'F32']]
-    ['DPT_Value_Heat_Quantity'                  DPT_Value_Heat_Quantity        
        ['14',  '37',   'F32']]
-    ['DPT_Value_Impedance'                      DPT_Value_Impedance            
        ['14',  '38',   'F32']]
-    ['DPT_Value_Length'                         DPT_Value_Length               
        ['14',  '39',   'F32']]
-    ['DPT_Value_Light_Quantity'                 DPT_Value_Light_Quantity       
        ['14',  '40',   'F32']]
-    ['DPT_Value_Luminance'                      DPT_Value_Luminance            
        ['14',  '41',   'F32']]
-    ['DPT_Value_Luminous_Flux'                  DPT_Value_Luminous_Flux        
        ['14',  '42',   'F32']]
-    ['DPT_Value_Luminous_Intensity'             DPT_Value_Luminous_Intensity   
        ['14',  '43',   'F32']]
-    ['DPT_Value_Magnetic_FieldStrength'         
DPT_Value_Magnetic_FieldStrength       ['14',  '44',   'F32']]
-    ['DPT_Value_Magnetic_Flux'                  DPT_Value_Magnetic_Flux        
        ['14',  '45',   'F32']]
-    ['DPT_Value_Magnetic_FluxDensity'           DPT_Value_Magnetic_FluxDensity 
        ['14',  '46',   'F32']]
-    ['DPT_Value_Magnetic_Moment'                DPT_Value_Magnetic_Moment      
        ['14',  '47',   'F32']]
-    ['DPT_Value_Magnetic_Polarization'          
DPT_Value_Magnetic_Polarization        ['14',  '48',   'F32']]
-    ['DPT_Value_Magnetization'                  DPT_Value_Magnetization        
        ['14',  '49',   'F32']]
-    ['DPT_Value_MagnetomotiveForce'             DPT_Value_MagnetomotiveForce   
        ['14',  '50',   'F32']]
-    ['DPT_Value_Mass'                           DPT_Value_Mass                 
        ['14',  '51',   'F32']]
-    ['DPT_Value_MassFlux'                       DPT_Value_MassFlux             
        ['14',  '52',   'F32']]
-    ['DPT_Value_Momentum'                       DPT_Value_Momentum             
        ['14',  '53',   'F32']]
-    ['DPT_Value_Phase_AngleRad'                 DPT_Value_Phase_AngleRad       
        ['14',  '54',   'F32']]
-    ['DPT_Value_Phase_AngleDeg'                 DPT_Value_Phase_AngleDeg       
        ['14',  '55',   'F32']]
-    ['DPT_Value_Power'                          DPT_Value_Power                
        ['14',  '56',   'F32']]
-    ['DPT_Value_Power_Factor'                   DPT_Value_Power_Factor         
        ['14',  '57',   'F32']]
-    ['DPT_Value_Pressure'                       DPT_Value_Pressure             
        ['14',  '58',   'F32']]
-    ['DPT_Value_Reactance'                      DPT_Value_Reactance            
        ['14',  '59',   'F32']]
-    ['DPT_Value_Resistance'                     DPT_Value_Resistance           
        ['14',  '60',   'F32']]
-    ['DPT_Value_Resistivity'                    DPT_Value_Resistivity          
        ['14',  '61',   'F32']]
-    ['DPT_Value_SelfInductance'                 DPT_Value_SelfInductance       
        ['14',  '62',   'F32']]
-    ['DPT_Value_SolidAngle'                     DPT_Value_SolidAngle           
        ['14',  '63',   'F32']]
-    ['DPT_Value_Sound_Intensity'                DPT_Value_Sound_Intensity      
        ['14',  '64',   'F32']]
-    ['DPT_Value_Speed'                          DPT_Value_Speed                
        ['14',  '65',   'F32']]
-    ['DPT_Value_Stress'                         DPT_Value_Stress               
        ['14',  '66',   'F32']]
-    ['DPT_Value_Surface_Tension'                DPT_Value_Surface_Tension      
        ['14',  '67',   'F32']]
-    ['DPT_Value_Common_Temperature'             DPT_Value_Common_Temperature   
        ['14',  '68',   'F32']]
-    ['DPT_Value_Absolute_Temperature'           DPT_Value_Absolute_Temperature 
        ['14',  '69',   'F32']]
-    ['DPT_Value_TemperatureDifference'          
DPT_Value_TemperatureDifference        ['14',  '70',   'F32']]
-    ['DPT_Value_Thermal_Capacity'               DPT_Value_Thermal_Capacity     
        ['14',  '71',   'F32']]
-    ['DPT_Value_Thermal_Conductivity'           DPT_Value_Thermal_Conductivity 
        ['14',  '72',   'F32']]
-    ['DPT_Value_ThermoelectricPower'            DPT_Value_ThermoelectricPower  
        ['14',  '73',   'F32']]
-    ['DPT_Value_Time'                           DPT_Value_Time                 
        ['14',  '74',   'F32']]
-    ['DPT_Value_Torque'                         DPT_Value_Torque               
        ['14',  '75',   'F32']]
-    ['DPT_Value_Volume'                         DPT_Value_Volume               
        ['14',  '76',   'F32']]
-    ['DPT_Value_Volume_Flux'                    DPT_Value_Volume_Flux          
        ['14',  '77',   'F32']]
-    ['DPT_Value_Weight'                         DPT_Value_Weight               
        ['14',  '78',   'F32']]
-    ['DPT_Value_Work'                           DPT_Value_Work                 
        ['14',  '79',   'F32']]
-    ['DPT_Access_Data'                          DPT_Access_Data                
        ['15',  '0',    'U4U4U4U4U4U4B4N4']]
-    ['DPT_String_ASCII'                         DPT_String_ASCII               
        ['16',  '0',    'A112_ASCII']]
-    ['DPT_String_8859_1'                        DPT_String_8859_1              
        ['16',  '1',    'A112_8859_1']]
-    ['DPT_SceneNumber'                          DPT_SceneNumber                
        ['17',  '1',    'r2U6']]
-    ['DPT_SceneControl'                         DPT_SceneControl               
        ['18',  '1',    'B1r1U6']]
-    ['DPT_DateTime'                             DPT_DateTime                   
        ['19',  '1',    'U8r4U4r3U5U3U5r2U6r2U6B16']]
-    ['DPT_SCLOMode'                             DPT_SCLOMode                   
        ['20',  '1',    'N8']]
-    ['DPT_BuildingMode'                         DPT_BuildingMode               
        ['20',  '2',    'N8']]
-    ['DPT_OccMode'                              DPT_OccMode                    
        ['20',  '3',    'N8']]
-    ['DPT_Priority'                             DPT_Priority                   
        ['20',  '4',    'N8']]
-    ['DPT_LightApplicationMode'                 DPT_LightApplicationMode       
        ['20',  '5',    'N8']]
-    ['DPT_ApplicationArea'                      DPT_ApplicationArea            
        ['20',  '6',    'N8']]
-    ['DPT_AlarmClassType'                       DPT_AlarmClassType             
        ['20',  '7',    'N8']]
-    ['DPT_PSUMode'                              DPT_PSUMode                    
        ['20',  '8',    'N8']]
-    ['DPT_ErrorClass_System'                    DPT_ErrorClass_System          
        ['20',  '11',   'N8']]
-    ['DPT_ErrorClass_HVAC'                      DPT_ErrorClass_HVAC            
        ['20',  '12',   'N8']]
-    ['DPT_Time_Delay'                           DPT_Time_Delay                 
        ['20',  '13',   'N8']]
-    ['DPT_Beaufort_Wind_Force_Scale'            DPT_Beaufort_Wind_Force_Scale  
        ['20',  '14',   'N8']]
-    ['DPT_SensorSelect'                         DPT_SensorSelect               
        ['20',  '17',   'N8']]
-    ['DPT_ActuatorConnectType'                  DPT_ActuatorConnectType        
        ['20',  '20',   'N8']]
-    ['DPT_FuelType'                             DPT_FuelType                   
        ['20',  '100',  'N8']]
-    ['DPT_BurnerType'                           DPT_BurnerType                 
        ['20',  '101',  'N8']]
-    ['DPT_HVACMode'                             DPT_HVACMode                   
        ['20',  '102',  'N8']]
-    ['DPT_DHWMode'                              DPT_DHWMode                    
        ['20',  '103',  'N8']]
-    ['DPT_LoadPriority'                         DPT_LoadPriority               
        ['20',  '104',  'N8']]
-    ['DPT_HVACContrMode'                        DPT_HVACContrMode              
        ['20',  '105',  'N8']]
-    ['DPT_HVACEmergMode'                        DPT_HVACEmergMode              
        ['20',  '106',  'N8']]
-    ['DPT_ChangeoverMode'                       DPT_ChangeoverMode             
        ['20',  '107',  'N8']]
-    ['DPT_ValveMode'                            DPT_ValveMode                  
        ['20',  '108',  'N8']]
-    ['DPT_DamperMode'                           DPT_DamperMode                 
        ['20',  '109',  'N8']]
-    ['DPT_HeaterMode'                           DPT_HeaterMode                 
        ['20',  '110',  'N8']]
-    ['DPT_FanMode'                              DPT_FanMode                    
        ['20',  '111',  'N8']]
-    ['DPT_MasterSlaveMode'                      DPT_MasterSlaveMode            
        ['20',  '112',  'N8']]
-    ['DPT_StatusRoomSetp'                       DPT_StatusRoomSetp             
        ['20',  '113',  'N8']]
-    ['DPT_ADAType'                              DPT_ADAType                    
        ['20',  '120',  'N8']]
-    ['DPT_BackupMode'                           DPT_BackupMode                 
        ['20',  '121',  'N8']]
-    ['DPT_StartSynchronization'                 DPT_StartSynchronization       
        ['20',  '122',  'N8']]
-    ['DPT_Behaviour_Lock_Unlock'                DPT_Behaviour_Lock_Unlock      
        ['20',  '600',  'N8']]
-    ['DPT_Behaviour_Bus_Power_Up_Down'          
DPT_Behaviour_Bus_Power_Up_Down        ['20',  '601',  'N8']]
-    ['DPT_DALI_Fade_Time'                       DPT_DALI_Fade_Time             
        ['20',  '602',  'N8']]
-    ['DPT_BlinkingMode'                         DPT_BlinkingMode               
        ['20',  '603',  'N8']]
-    ['DPT_LightControlMode'                     DPT_LightControlMode           
        ['20',  '604',  'N8']]
-    ['DPT_SwitchPBModel'                        DPT_SwitchPBModel              
        ['20',  '605',  'N8']]
-    ['DPT_PBAction'                             DPT_PBAction                   
        ['20',  '606',  'N8']]
-    ['DPT_DimmPBModel'                          DPT_DimmPBModel                
        ['20',  '607',  'N8']]
-    ['DPT_SwitchOnMode'                         DPT_SwitchOnMode               
        ['20',  '608',  'N8']]
-    ['DPT_LoadTypeSet'                          DPT_LoadTypeSet                
        ['20',  '609',  'N8']]
-    ['DPT_LoadTypeDetected'                     DPT_LoadTypeDetected           
        ['20',  '610',  'N8']]
-    ['DPT_SABExceptBehaviour'                   DPT_SABExceptBehaviour         
        ['20',  '801',  'N8']]
-    ['DPT_SABBehaviour_Lock_Unlock'             DPT_SABBehaviour_Lock_Unlock   
        ['20',  '802',  'N8']]
-    ['DPT_SSSBMode'                             DPT_SSSBMode                   
        ['20',  '803',  'N8']]
-    ['DPT_BlindsControlMode'                    DPT_BlindsControlMode          
        ['20',  '804',  'N8']]
-    ['DPT_CommMode'                             DPT_CommMode                   
        ['20',  '1000', 'N8']]
-    ['DPT_AddInfoTypes'                         DPT_AddInfoTypes               
        ['20',  '1001', 'N8']]
-    ['DPT_RF_ModeSelect'                        DPT_RF_ModeSelect              
        ['20',  '1002', 'N8']]
-    ['DPT_RF_FilterSelect'                      DPT_RF_FilterSelect            
        ['20',  '1003', 'N8']]
-    ['DPT_StatusGen'                            DPT_StatusGen                  
        ['21',  '1',    'B8']]
-    ['DPT_Device_Control'                       DPT_Device_Control             
        ['21',  '2',    'B8']]
-    ['DPT_ForceSign'                            DPT_ForceSign                  
        ['21',  '100',  'B8']]
-    ['DPT_ForceSignCool'                        DPT_ForceSignCool              
        ['21',  '101',  'B8']]
-    ['DPT_StatusRHC'                            DPT_StatusRHC                  
        ['21',  '102',  'B8']]
-    ['DPT_StatusSDHWC'                          DPT_StatusSDHWC                
        ['21',  '103',  'B8']]
-    ['DPT_FuelTypeSet'                          DPT_FuelTypeSet                
        ['21',  '104',  'B8']]
-    ['DPT_StatusRCC'                            DPT_StatusRCC                  
        ['21',  '105',  'B8']]
-    ['DPT_StatusAHU'                            DPT_StatusAHU                  
        ['21',  '106',  'B8']]
-    ['DPT_LightActuatorErrorInfo'               DPT_LightActuatorErrorInfo     
        ['21',  '601',  'B8']]
-    ['DPT_RF_ModeInfo'                          DPT_RF_ModeInfo                
        ['21',  '1000', 'B8']]
-    ['DPT_RF_FilterInfo'                        DPT_RF_FilterInfo              
        ['21',  '1001', 'B8']]
-    ['DPT_Channel_Activation_8'                 DPT_Channel_Activation_8       
        ['21',  '1010', 'B8']]
-    ['DPT_StatusDHWC'                           DPT_StatusDHWC                 
        ['22',  '100',  'B16']]
-    ['DPT_StatusRHCC'                           DPT_StatusRHCC                 
        ['22',  '101',  'B16']]
-    ['DPT_Media'                                DPT_Media                      
        ['22',  '1000', 'B16']]
-    ['DPT_Channel_Activation_16'                DPT_Channel_Activation_16      
        ['22',  '1010', 'B16']]
-    ['DPT_OnOff_Action'                         DPT_OnOff_Action               
        ['23',  '1',    'N2']]
-    ['DPT_Alarm_Reaction'                       DPT_Alarm_Reaction             
        ['23',  '2',    'N2']]
-    ['DPT_UpDown_Action'                        DPT_UpDown_Action              
        ['23',  '3',    'N2']]
-    ['DPT_HVAC_PB_Action'                       DPT_HVAC_PB_Action             
        ['23',  '102',  'N2']]
-    ['DPT_VarString_8859_1'                     DPT_VarString_8859_1           
        ['24',  '1',    'An_8859_1']]
-    ['DPT_DoubleNibble'                         DPT_DoubleNibble               
        ['25',  '1000', 'U4U4']]
-    ['DPT_SceneInfo'                            DPT_SceneInfo                  
        ['26',  '1',    'r1b1U6']]
-    ['DPT_CombinedInfoOnOff'                    DPT_CombinedInfoOnOff          
        ['27',  '1',    'B32']]
-    ['DPT_UTF_8'                                DPT_UTF_8                      
        ['28',  '1',    'An_UTF_8']]
-    ['DPT_ActiveEnergy_V64'                     DPT_ActiveEnergy_V64           
        ['29',  '10',   'V64']]
-    ['DPT_ApparantEnergy_V64'                   DPT_ApparantEnergy_V64         
        ['29',  '11',   'V64']]
-    ['DPT_ReactiveEnergy_V64'                   DPT_ReactiveEnergy_V64         
        ['29',  '12',   'V64']]
-    ['DPT_Channel_Activation_24'                DPT_Channel_Activation_24      
        ['30',  '1010', 'B24']]
-    ['DPT_PB_Action_HVAC_Extended'              DPT_PB_Action_HVAC_Extended    
        ['31',  '101',  'N3']]
-    ['DPT_Heat_Cool_Z'                          DPT_Heat_Cool_Z                
        ['200', '100',  'B1Z8HeatingOrCoolingZ']]
-    ['DPT_BinaryValue_Z'                        DPT_BinaryValue_Z              
        ['200', '101',  'B1Z8BinaryValueZ']]
-    ['DPT_HVACMode_Z'                           DPT_HVACMode_Z                 
        ['201', '100',  'N8Z8HvacOperatingMode']]
-    ['DPT_DHWMode_Z'                            DPT_DHWMode_Z                  
        ['201', '102',  'N8Z8DhwMode']]
-    ['DPT_HVACContrMode_Z'                      DPT_HVACContrMode_Z            
        ['201', '104',  'N8Z8HvacControllingMode']]
-    ['DPT_EnablH_Cstage_Z_DPT_EnablH_CStage'    
DPT_EnablH_Cstage_Z_DPT_EnablH_CStage  ['201', '105',  
'N8Z8EnableHeatingOrCoolingStage']]
-    ['DPT_BuildingMode_Z'                       DPT_BuildingMode_Z             
        ['201', '107',  'N8Z8BuildingMode']]
-    ['DPT_OccMode_Z'                            DPT_OccMode_Z                  
        ['201', '108',  'N8Z8OccupancyMode']]
-    ['DPT_HVACEmergMode_Z'                      DPT_HVACEmergMode_Z            
        ['201', '109',  'N8Z8EmergencyMode']]
-    ['DPT_RelValue_Z'                           DPT_RelValue_Z                 
        ['202', '1',    'U8Z8Rel']]
-    ['DPT_UCountValue8_Z'                       DPT_UCountValue8_Z             
        ['202', '2',    'U8Z8Counter']]
-    ['DPT_TimePeriodMsec_Z'                     DPT_TimePeriodMsec_Z           
        ['203', '2',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriod10Msec_Z'                   DPT_TimePeriod10Msec_Z         
        ['203', '3',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriod100Msec_Z'                  DPT_TimePeriod100Msec_Z        
        ['203', '4',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriodSec_Z'                      DPT_TimePeriodSec_Z            
        ['203', '5',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriodMin_Z'                      DPT_TimePeriodMin_Z            
        ['203', '6',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriodHrs_Z'                      DPT_TimePeriodHrs_Z            
        ['203', '7',    'U16Z8TimePeriod']]
-    ['DPT_UFlowRateLiter_h_Z'                   DPT_UFlowRateLiter_h_Z         
        ['203', '11',   'U16Z8FlowRate']]
-    ['DPT_UCountValue16_Z'                      DPT_UCountValue16_Z            
        ['203', '12',   'U16Z8Counter']]
-    ['DPT_UElCurrentyA_Z'                       DPT_UElCurrentyA_Z             
        ['203', '13',   'U16Z8ElectricCurrent']]
-    ['DPT_PowerKW_Z'                            DPT_PowerKW_Z                  
        ['203', '14',   'U16Z8Power']]
-    ['DPT_AtmPressureAbs_Z'                     DPT_AtmPressureAbs_Z           
        ['203', '15',   'U16Z8AtmPressure']]
-    ['DPT_PercentU16_Z'                         DPT_PercentU16_Z               
        ['203', '17',   'U16Z8PercentValue']]
-    ['DPT_HVACAirQual_Z'                        DPT_HVACAirQual_Z              
        ['203', '100',  'U16Z8HvacAirQuality']]
-    ['DPT_WindSpeed_Z_DPT_WindSpeed'            DPT_WindSpeed_Z_DPT_WindSpeed  
        ['203', '101',  'U16Z8WindSpeed']]
-    ['DPT_SunIntensity_Z'                       DPT_SunIntensity_Z             
        ['203', '102',  'U16Z8SunIntensity']]
-    ['DPT_HVACAirFlowAbs_Z'                     DPT_HVACAirFlowAbs_Z           
        ['203', '104',  'U16Z8HvacAirFlow']]
-    ['DPT_RelSignedValue_Z'                     DPT_RelSignedValue_Z           
        ['204', '1',    'V8Z8RelSignedValue']]
-    ['DPT_DeltaTimeMsec_Z'                      DPT_DeltaTimeMsec_Z            
        ['205', '2',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTime10Msec_Z'                    DPT_DeltaTime10Msec_Z          
        ['205', '3',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTime100Msec_Z'                   DPT_DeltaTime100Msec_Z         
        ['205', '4',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTimeSec_Z'                       DPT_DeltaTimeSec_Z             
        ['205', '5',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTimeMin_Z'                       DPT_DeltaTimeMin_Z             
        ['205', '6',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTimeHrs_Z'                       DPT_DeltaTimeHrs_Z             
        ['205', '7',    'V16Z8DeltaTime']]
-    ['DPT_Percent_V16_Z'                        DPT_Percent_V16_Z              
        ['205', '17',   'V16Z8RelSignedValue']]
-    ['DPT_TempHVACAbs_Z'                        DPT_TempHVACAbs_Z              
        ['205', '100',  'V16Z8RelSignedValue']]
-    ['DPT_TempHVACRel_Z'                        DPT_TempHVACRel_Z              
        ['205', '101',  'V16Z8RelSignedValue']]
-    ['DPT_HVACAirFlowRel_Z'                     DPT_HVACAirFlowRel_Z           
        ['205', '102',  'V16Z8RelSignedValue']]
-    ['DPT_HVACModeNext'                         DPT_HVACModeNext               
        ['206', '100',  'U16N8HvacModeAndTimeDelay']]
-    ['DPT_DHWModeNext'                          DPT_DHWModeNext                
        ['206', '102',  'U16N8DhwModeAndTimeDelay']]
-    ['DPT_OccModeNext'                          DPT_OccModeNext                
        ['206', '104',  'U16N8OccupancyModeAndTimeDelay']]
-    ['DPT_BuildingModeNext'                     DPT_BuildingModeNext           
        ['206', '105',  'U16N8BuildingModeAndTimeDelay']]
-    ['DPT_StatusBUC'                            DPT_StatusBUC                  
        ['207', '100',  'U8B8StatusBurnerController']]
-    ['DPT_LockSign'                             DPT_LockSign                   
        ['207', '101',  'U8B8LockingSignal']]
-    ['DPT_ValueDemBOC'                          DPT_ValueDemBOC                
        ['207', '102',  'U8B8BoilerControllerDemandSignal']]
-    ['DPT_ActPosDemAbs'                         DPT_ActPosDemAbs               
        ['207', '104',  'U8B8ActuatorPositionDemand']]
-    ['DPT_StatusAct'                            DPT_StatusAct                  
        ['207', '105',  'U8B8ActuatorPositionStatus']]
-    ['DPT_StatusLightingActuator'               DPT_StatusLightingActuator     
        ['207', '600',  'U8B8StatusLightingActuator']]
-    ['DPT_StatusHPM'                            DPT_StatusHPM                  
        ['209', '100',  'V16B8HeatProducerManagerStatus']]
-    ['DPT_TempRoomDemAbs'                       DPT_TempRoomDemAbs             
        ['209', '101',  'V16B8RoomTemperatureDemand']]
-    ['DPT_StatusCPM'                            DPT_StatusCPM                  
        ['209', '102',  'V16B8ColdWaterProducerManagerStatus']]
-    ['DPT_StatusWTC'                            DPT_StatusWTC                  
        ['209', '103',  'V16B8WaterTemperatureControllerStatus']]
-    ['DPT_TempFlowWaterDemAbs'                  DPT_TempFlowWaterDemAbs        
        ['210', '100',  'V16B16']]
-    ['DPT_EnergyDemWater'                       DPT_EnergyDemWater             
        ['211', '100',  'U8N8']]
-    ['DPT_TempRoomSetpSetShift3'                DPT_TempRoomSetpSetShift3      
        ['212', '100',  'V16V16V16RoomTemperatureShift']]
-    ['DPT_TempRoomSetpSet3'                     DPT_TempRoomSetpSet3           
        ['212', '101',  'V16V16V16RoomTemperature']]
-    ['DPT_TempRoomSetpSet4'                     DPT_TempRoomSetpSet4           
        ['213', '100',  'V16V16V16V16RoomTemperature']]
-    ['DPT_TempDHWSetpSet4'                      DPT_TempDHWSetpSet4            
        ['213', '101',  'V16V16V16V16DhwtTemperature']]
-    ['DPT_TempRoomSetpSetShift4'                DPT_TempRoomSetpSetShift4      
        ['213', '102',  'V16V16V16V16RoomTemperatureShift']]
-    ['DPT_PowerFlowWaterDemHPM'                 DPT_PowerFlowWaterDemHPM       
        ['214', '100',  'V16U8B8Heat']]
-    ['DPT_PowerFlowWaterDemCPM'                 DPT_PowerFlowWaterDemCPM       
        ['214', '101',  'V16U8B8ChilledWater']]
-    ['DPT_StatusBOC'                            DPT_StatusBOC                  
        ['215', '100',  'V16U8B16Boiler']]
-    ['DPT_StatusCC'                             DPT_StatusCC                   
        ['215', '101',  'V16U8B16Chiller']]
-    ['DPT_SpecHeatProd'                         DPT_SpecHeatProd               
        ['216', '100',  'U16U8N8B8']]
-    ['DPT_Version'                              DPT_Version                    
        ['217', '1',    'U5U5U6']]
-    ['DPT_VolumeLiter_Z'                        DPT_VolumeLiter_Z              
        ['218', '1',    'V32Z8VolumeLiter']]
-    ['DPT_FlowRate_m3h_Z'                       DPT_FlowRate_m3h_Z             
        ['218', '2',    'V32Z8FlowRate']]
-    ['DPT_AlarmInfo'                            DPT_AlarmInfo                  
        ['219', '1',    'U8N8N8N8B8B8']]
-    ['DPT_TempHVACAbsNext'                      DPT_TempHVACAbsNext            
        ['220', '100',  'U16V16']]
-    ['DPT_SerNum'                               DPT_SerNum                     
        ['221', '1',    'N16U32']]
-    ['DPT_TempRoomSetpSetF163'                  DPT_TempRoomSetpSetF163        
        ['222', '100',  'F16F16F16']]
-    ['DPT_TempRoomSetpSetShiftF163'             DPT_TempRoomSetpSetShiftF163   
        ['222', '101',  'F16F16F16']]
-    ['DPT_EnergyDemAir'                         DPT_EnergyDemAir               
        ['223', '100',  'V8N8N8']]
-    ['DPT_TempSupply_AirSetpSet'                DPT_TempSupply_AirSetpSet      
        ['224', '100',  'V16V16N8N8']]
-    ['DPT_ScalingSpeed'                         DPT_ScalingSpeed               
        ['225', '1',    'U16U8Scaling']]
-    ['DPT_Scaling_Step_Time'                    DPT_Scaling_Step_Time          
        ['225', '2',    'U16U8Scaling']]
-    ['DPT_TariffNext'                           DPT_TariffNext                 
        ['225', '3',    'U16U8TariffNext']]
-    ['DPT_MeteringValue'                        DPT_MeteringValue              
        ['229', '1',    'V32N8Z8']]
-    ['DPT_MBus_Address'                         DPT_MBus_Address               
        ['230', '1000', 'U16U32U8N8']]
-    ['DPT_Locale_ASCII'                         DPT_Locale_ASCII               
        ['231', '1',    'A8A8A8A8']]
-    ['DPT_Colour_RGB'                           DPT_Colour_RGB                 
        ['232', '600',  'U8U8U8']]
-    ['DPT_LanguageCodeAlpha2_ASCII'             DPT_LanguageCodeAlpha2_ASCII   
        ['234', '1',    'A8A8Language']]
-    ['DPT_RegionCodeAlpha2_ASCII'               DPT_RegionCodeAlpha2_ASCII     
        ['234', '2',    'A8A8Region']]
-    ['DPT_Tariff_ActiveEnergy'                  DPT_Tariff_ActiveEnergy        
        ['235', '1',    'V32U8B8']]
-    ['DPT_Prioritised_Mode_Control'             DPT_Prioritised_Mode_Control   
        ['236', '1',    'B1N3N4']]
-    ['DPT_DALI_Control_Gear_Diagnostic'         
DPT_DALI_Control_Gear_Diagnostic       ['237', '600',  'B10U6']]
-    ['DPT_SceneConfig'                          DPT_SceneConfig                
        ['238', '1',    'B2U6']]
-    ['DPT_DALI_Diagnostics'                     DPT_DALI_Diagnostics           
        ['238', '600',  'B2U6']]
-    ['DPT_FlaggedScaling'                       DPT_FlaggedScaling             
        ['239', '1',    'U8r7B1']]
-    ['DPT_CombinedPosition'                     DPT_CombinedPosition           
        ['240', '800',  'U8U8B8']]
-    ['DPT_StatusSAB'                            DPT_StatusSAB                  
        ['241', '800',  'U8U8B16']]
-]
-
 [enum uint 2 'CEMIPriority'
     ['0x0' SYSTEM]
     ['0x1' NORMAL]
@@ -1523,13 +601,6 @@
     ['0x3' LOW]
 ]
 
-[enum uint 2 'ControlType'
-    ['0x0' CONNECT]
-    ['0x1' DISCONNECT]
-    ['0x2' ACK]
-    ['0x3' NACK]
-]
-
 [enum uint 8 'Status'
     ['0x00' NO_ERROR]
     ['0x01' PROTOCOL_TYPE_NOT_SUPPORTED]
@@ -1575,84 +646,6 @@
     ['0x20' MEDIUM_KNX_IP]
 ]
 
-// 03_03_07 Application Layer v01.06.02 AS Page 9ff
-[enum uint 4 'APCI'
-    ['0x0' GROUP_VALUE_READ_PDU]
-    ['0x1' GROUP_VALUE_RESPONSE_PDU]
-    ['0x2' GROUP_VALUE_WRITE_PDU]
-    ['0x3' INDIVIDUAL_ADDRESS_WRITE_PDU]
-    ['0x4' INDIVIDUAL_ADDRESS_READ_PDU]
-    ['0x5' INDIVIDUAL_ADDRESS_RESPONSE_PDU]
-    ['0x6' ADC_READ_PDU]
-    // In case of this type the following 6 bits contain more detailed 
information
-    ['0x7' ADC_RESPONSE_PDU]
-    ['0x8' MEMORY_READ_PDU]
-    ['0x9' MEMORY_RESPONSE_PDU]
-    ['0xA' MEMORY_WRITE_PDU]
-    // In case of this type the following 6 bits contain more detailed 
information
-    ['0xB' USER_MESSAGE_PDU]
-    ['0xC' DEVICE_DESCRIPTOR_READ_PDU]
-    ['0xD' DEVICE_DESCRIPTOR_RESPONSE_PDU]
-    ['0xE' RESTART_PDU]
-    ['0xF' OTHER_PDU]
-]
-
-// 03_03_07 Application Layer v01.06.02 AS Page 9ff
-[enum uint 6 'ExtendedAPCI'
-    ['0x00' OPEN_ROUTING_TABLE_REQUEST_PDU]
-    ['0x01' READ_ROUTING_TABLE_REQUEST_PDU]
-    ['0x02' READ_ROUTING_TABLE_RESPONSE_PDU]
-    ['0x03' WRITE_ROUTING_TABLE_REQUEST_PDU]
-    ['0x08' READ_ROUTER_MEMORY_REQUEST_PDU]
-    ['0x09' READ_ROUTER_MEMORY_RESPONSE_PDU]
-    ['0x0A' WRITE_ROUTER_MEMORY_REQUEST_PDU]
-    ['0x0D' READ_ROUTER_STATUS_REQUEST_PDU]
-    ['0x0E' READ_ROUTER_STATUS_RESPONSE_PDU]
-    ['0x0F' WRITE_ROUTER_STATUS_REQUEST_PDU]
-
-    ['0x10' MEMORY_BIT_WRITE_PDU]
-
-    ['0x11' AUTHORIZE_REQUEST_PDU]
-    ['0x12' AUTHORIZE_RESPONSE_PDU]
-    ['0x13' KEY_WRITE_PDU]
-    ['0x14' KEY_RESPONSE_PDU]
-
-    ['0x15' PROPERTY_VALUE_READ_PDU]
-    ['0x16' PROPERTY_VALUE_RESPONSE_PDU]
-    ['0x17' PROPERTY_VALUE_WRITE_PDU]
-    ['0x18' PROPERTY_DESCRIPTION_READ_PDU]
-    ['0x19' PROPERTY_DESCRIPTION_RESPONSE_PDU]
-
-    ['0x1A' NETWORK_PARAMETER_READ_PDU]
-    ['0x1B' NETWORK_PARAMETER_RESPONSE_PDU]
-
-    ['0x1C' INDIVIDUAL_ADDRESS_SERIAL_NUMBER_READ_PDU]
-    ['0x1D' INDIVIDUAL_ADDRESS_SERIAL_NUMBER_RESPONSE_PDU]
-    ['0x1E' INDIVIDUAL_ADDRESS_SERIAL_NUMBER_WRITE_PDU]
-
-    ['0x20' DOMAIN_ADDRESS_WRITE]
-    ['0x21' DOMAIN_ADDRESS_READ]
-    ['0x22' DOMAIN_ADDRESS_RESPONSE]
-    ['0x23' DOMAIN_ADDRESS_SELECTIVE_READ]
-
-    ['0x24' NETWORK_PARAMETER_WRITE]
-
-    ['0x25' LINK_READ]
-    ['0x26' LINK_RESPONSE]
-    ['0x27' LINK_WRITE]
-
-    ['0x28' GROUP_PROPERTY_VALUE_READ]
-    ['0x29' GROUP_PROPERTY_VALUE_RESPONSE]
-    ['0x2A' GROUP_PROPERTY_VALUE_WRITE]
-    ['0x2B' GROUP_PROPERTY_VALUE_INFO_REPORT]
-
-    ['0x2C' DOMAIN_ADDRESS_SERIAL_NUMBER_READ]
-    ['0x2D' DOMAIN_ADDRESS_SERIAL_NUMBER_RESPONSE]
-    ['0x2E' DOMAIN_ADDRESS_SERIAL_NUMBER_WRITE]
-
-    ['0x30' FILE_STREAM_INFO_REPORT]
-]
-
 [enum uint 8 'SupportedPhysicalMedia' [string 'description',                   
                                 bit 'knxSupport']
     ['0x00' OTHER                     ['used_for_undefined_physical_medium',   
                                 'true']]
     ['0x01' OIL_METER                 ['measures_volume_of_oil',               
                                 'true']]
@@ -1679,7 +672,7 @@
 
 // The definition of the constants for medium type in the device descriptor 
differs from that of the other parts
 // 03_05_01 Resources v01.09.03 AS.pdf Page 22
-[enum uint 4 DeviceDescriptorMediumType
+[enum uint 4 'DeviceDescriptorMediumType'
     ['0x0' TP1      ]
     ['0x1' PL110    ]
     ['0x2' RF       ]
@@ -1689,20 +682,20 @@
 ]
 
 // 03_05_01 Resources v01.09.03 AS.pdf Page 22
-[enum uint 8 FirmwareType
-    ['0xAF' NONE                      ]
-    ['0x00' BCU_1                     ]
-    ['0x01' BCU_1_SYSTEM_1            ]
-    ['0x02' BCU_2_SYSTEM_2            ]
-    ['0x70' BIM_M112                  ]
-    ['0x7B' SYSTEM_B                  ]
-    ['0x81' IR_DECODER                ]
-    ['0x90' MEDIA_COUPLER_PL_TP       ]
-    ['0x91' COUPLER                   ]
-    ['0x20' RF_BI_DIRECTIONAL_DEVICES ]
-    ['0x21' RF_UNI_DIRECTIONAL_DEVICES]
-    ['0x' SYSTEM_300                  ]
-    ['0x' SYSTEM_7                    ]
+[enum uint 4 'FirmwareType' [uint 8 'code']
+    ['0x1' NONE                      ['0xAF']]
+    ['0x2' BCU_1                     ['0x00']]
+    ['0x3' BCU_1_SYSTEM_1            ['0x01']]
+    ['0x4' BCU_2_SYSTEM_2            ['0x02']]
+    ['0x5' BIM_M112                  ['0x70']]
+    ['0x6' SYSTEM_B                  ['0x7B']]
+    ['0x7' IR_DECODER                ['0x81']]
+    ['0x8' MEDIA_COUPLER_PL_TP       ['0x90']]
+    ['0x9' COUPLER                   ['0x91']]
+    ['0xA' RF_BI_DIRECTIONAL_DEVICES ['0x01']]
+    ['0xB' RF_UNI_DIRECTIONAL_DEVICES['0x11']]
+    ['0xC' SYSTEM_300                ['0x30']]
+    ['0xD' SYSTEM_7                  ['0x70']]
 ]
 
 // Helper enum that binds the combinations of medium type and firmware
@@ -1735,12 +728,9 @@
     ['0x1900' PL110_MEDIA_COUPLER_PL_TP ['DeviceDescriptorMediumType.PL110',   
     'FirmwareType.MEDIA_COUPLER_PL_TP'       ]]
     ['0x2010' RF_BI_DIRECTIONAL_DEVICES ['DeviceDescriptorMediumType.RF',      
     'FirmwareType.RF_BI_DIRECTIONAL_DEVICES' ]]
     ['0x2110' RF_UNI_DIRECTIONAL_DEVICES['DeviceDescriptorMediumType.RF',      
     'FirmwareType.RF_UNI_DIRECTIONAL_DEVICES']]
-    // This should actually be BCU_1 and not BCU_1_SYSTEM_1, unfortunately the 
code seems to be different in this case
-    ['0x3012' TP0_BCU_1                 ['DeviceDescriptorMediumType.TP0',     
     'FirmwareType.BCU_1_SYSTEM_1'            ]]
-    // This should actually be BCU_1 and not BCU_1_SYSTEM_1, unfortunately the 
code seems to be different in this case
-    ['0x4012' PL132_BCU_1               ['DeviceDescriptorMediumType.PL132',   
     'FirmwareType.BCU_1_SYSTEM_1'            ]]
-    // This should actually be SYSTEM7 and not BIM_M112, unfortunately the 
code seems to be the same in this case
-    ['0x5705' KNX_IP_SYSTEM7            ['DeviceDescriptorMediumType.KNX_IP',  
     'FirmwareType.BIM_M112'                  ]]
+    ['0x3012' TP0_BCU_1                 ['DeviceDescriptorMediumType.TP0',     
     'FirmwareType.BCU_1'                     ]]
+    ['0x4012' PL132_BCU_1               ['DeviceDescriptorMediumType.PL132',   
     'FirmwareType.BCU_1'                     ]]
+    ['0x5705' KNX_IP_SYSTEM7            ['DeviceDescriptorMediumType.KNX_IP',  
     'FirmwareType.SYSTEM_7'                  ]]
 ]
 
 // 03_05_01 Resources v01.09.03 AS.pdf Page 23ff
diff --git a/protocols/knxnetip/src/main/xslt/knx-types.xsl 
b/protocols/knxnetip/src/main/xslt/knx-types.xsl
index 65a43f4..f3877a5 100644
--- a/protocols/knxnetip/src/main/xslt/knx-types.xsl
+++ b/protocols/knxnetip/src/main/xslt/knx-types.xsl
@@ -47,13 +47,13 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-[enum uint 16 'KnxDatapointType' [uint 16 'number', uint 8 'sizeInBits', 
string 'name']
+[enum uint 16 'KnxDatapointMainType' [uint 16 'number', uint 8 'sizeInBits', 
string 'name']
     ['0' DPT_UNKNOWN ['0', '0', '"Unknown Datapoint Type"']]
     <xsl:apply-templates 
select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType"/>
 ]
 
-[enum uint 32 'KnxDatapointSubtype' [uint 16 'number', KnxDatapointType 
'datapointType', string 'name']
-    ['0' DPST_UNKNOWN ['0', 'KnxDatapointType.DPT_UNKNOWN', '"Unknown 
Datapoint Subtype"']]
+[enum uint 32 'KnxDatapointType' [uint 16 'number', KnxDatapointType 
'datapointType', string 'name']
+    ['0' DPT_UNKNOWN ['0', 'KnxDatapointType.DPT_UNKNOWN', '"Unknown Datapoint 
Subtype"']]
     <xsl:apply-templates 
select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType/knx:DatapointSubtypes/knx:DatapointSubtype"/>
 ]
 
@@ -77,6 +77,16 @@
     ['0' M_UNKNOWN ['0', '"Unknown Manufacturer"']]
     <xsl:apply-templates 
select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
 ]
+
+[dataIo 'KnxDatapoint' [KnxDatapointType 'datapointType']
+    [typeSwitch 'datapointType'
+    <xsl:for-each 
select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType/knx:DatapointSubtypes/knx:DatapointSubtype">
+        <xsl:call-template name="generateDataIoEntry">
+            <xsl:with-param name="datapointSubtype" select="."/>
+        </xsl:call-template>
+    </xsl:for-each>
+    ]
+]
     </xsl:template>
 
     <xsl:template match="knx:DatapointType">
@@ -90,8 +100,8 @@
     <xsl:template match="knx:DatapointSubtype">
         <xsl:variable name="datapointSubtypeId">
             <xsl:choose>
-                <xsl:when test="fn:starts-with(@Name, 
'DPT')">DPST_<xsl:value-of 
select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name,
 '\[', '_'), '\]', ''), '&#x00B3;', '_3'), '&#xB5;', 'y'), '/', ''), '-', '_'), 
'DPT_')"/></xsl:when>
-                <xsl:otherwise>DPST_<xsl:for-each select="tokenize(@Name, ' 
')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 
2))"/><xsl:if 
test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
+                <xsl:when test="fn:starts-with(@Name, 
'DPT')">DPT_<xsl:value-of 
select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name,
 '\[', '_'), '\]', ''), '&#x00B3;', '_3'), '&#xB5;', 'y'), '/', ''), '-', '_'), 
'DPT_')"/></xsl:when>
+                <xsl:otherwise>DPT_<xsl:for-each select="tokenize(@Name, ' 
')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 
2))"/><xsl:if 
test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
             </xsl:choose>
         </xsl:variable>
         <xsl:variable name="datapointTypeId">
@@ -185,4 +195,245 @@
         <xsl:value-of 
select="fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(normalize-space($cleanedText2),'&#xa0;',
 '_'), '&amp;', 'AND'), '-', '_'), ' ', '_'), '\.', '_'), ',', '_'), '\+', 
'Plus'), '/', '_'), 'Ä', 'AE'), 'Ö', 'OE'), 'Ü', 'UE'), 'ß', 'SS'), ':', '_')"/>
     </xsl:template>
 
+    <xsl:template name="generateDataIoEntry">
+        <xsl:param name="datapointSubtype"/>
+        <xsl:variable name="datapointSubtypeId">
+            <xsl:choose>
+                <xsl:when test="fn:starts-with(@Name, 
'DPT')">DPT_<xsl:value-of 
select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name,
 '\[', '_'), '\]', ''), '&#x00B3;', '_3'), '&#xB5;', 'y'), '/', ''), '-', '_'), 
'DPT_')"/></xsl:when>
+                <xsl:otherwise>DPT_<xsl:for-each select="tokenize(@Name, ' 
')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 
2))"/><xsl:if 
test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+        <xsl:variable name="datapointValueType">
+            <xsl:choose>
+                <xsl:when 
test="count($datapointSubtype/knx:Format/knx:Bit|$datapointSubtype/knx:Format/knx:String|$datapointSubtype/knx:Format/knx:UnsignedInteger|$datapointSubtype/knx:Format/knx:SignedInteger|$datapointSubtype/knx:Format/knx:Float|$datapointSubtype/knx:Format/knx:Enumeration|$datapointSubtype/knx:Format/knx:RefType)
 &gt; 1">Struct</xsl:when>
+                <xsl:when 
test="$datapointSubtype/knx:Format/knx:Bit">BOOL</xsl:when>
+                <xsl:when 
test="$datapointSubtype/knx:Format/knx:String">STRING</xsl:when>
+                <xsl:when 
test="$datapointSubtype/knx:Format/knx:UnsignedInteger">
+                    <xsl:choose>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 
8">USINT</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 
16">UINT</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 
32">UDINT</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 
64">ULINT</xsl:when>
+                    </xsl:choose>
+                </xsl:when>
+                <xsl:when 
test="$datapointSubtype/knx:Format/knx:SignedInteger">
+                    <xsl:choose>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 
8">SINT</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 
16">INT</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 
32">DINT</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 
64">LINT</xsl:when>
+                    </xsl:choose>
+                </xsl:when>
+                <xsl:when test="$datapointSubtype/knx:Format/knx:Float">
+                    <xsl:choose>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) &lt;= 
16">REAL</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) &lt;= 
32">REAL</xsl:when>
+                        <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) &lt;= 
64">LREAL</xsl:when>
+                    </xsl:choose>
+                </xsl:when>
+                <xsl:when 
test="$datapointSubtype/knx:Format/knx:Enumeration">STRING</xsl:when>
+                <xsl:otherwise>Hurz:<xsl:value-of 
select="name($datapointSubtype/*)"/></xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+        ['KnxDatapointType.<xsl:value-of select="$datapointSubtypeId"/>' 
<xsl:value-of select="$datapointValueType"/>
+        <xsl:choose>
+            <xsl:when 
test="count($datapointSubtype/knx:Format/knx:Bit|$datapointSubtype/knx:Format/knx:String|$datapointSubtype/knx:Format/knx:UnsignedInteger|$datapointSubtype/knx:Format/knx:SignedInteger|$datapointSubtype/knx:Format/knx:Float|$datapointSubtype/knx:Format/knx:Enumeration|$datapointSubtype/knx:Format/knx:RefType)
 &gt; 1">
+                <xsl:variable name="resolvedFields">
+                    <xsl:call-template name="resolveTypeReferences">
+                        <xsl:with-param name="fields" 
select="$datapointSubtype/knx:Format/*"/>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:variable name="size">
+                    <xsl:call-template name="fieldsSize">
+                        <xsl:with-param name="fields" 
select="$resolvedFields/*"/>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:choose>
+                    <xsl:when test="(($size mod 8) != 0) and (($size mod 8) 
&lt;= 6)">
+            [reserved uint <xsl:value-of select="8 - ($size mod 8)"/> '0x00']
+                    </xsl:when>
+                    <xsl:when test="(($size mod 8) = 0) and 
(name($resolvedFields/*[1]) = 'Reserved') and 
(number($resolvedFields/*[1]/@Width) > 2)"></xsl:when>
+                    <xsl:otherwise>
+            [reserved uint 8 '0x00']
+                    </xsl:otherwise>
+                </xsl:choose>
+                <xsl:for-each select="$resolvedFields/*">
+                    <xsl:variable name="fieldType">
+                        <xsl:choose>
+                            <xsl:when test="name() = 
'Reserved'">reserved</xsl:when>
+                            <xsl:otherwise>simple</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:variable>
+                    <xsl:variable name="fieldName">
+                        <xsl:choose>
+                            <xsl:when test="name() = 
'Reserved'">0x00</xsl:when>
+                            <xsl:when test="@Name">
+                                <xsl:call-template name="getFieldName">
+                                    <xsl:with-param name="fieldName" 
select="@Name"/>
+                                </xsl:call-template>
+                            </xsl:when>
+                            <xsl:when test="@Set">
+                                <xsl:call-template name="getFieldName">
+                                    <xsl:with-param name="fieldName" 
select="@Set"/>
+                                </xsl:call-template>
+                            </xsl:when>
+                            <xsl:when test="@Unit">
+                                <xsl:call-template name="getFieldName">
+                                    <xsl:with-param name="fieldName" 
select="@Unit"/>
+                                </xsl:call-template>
+                            </xsl:when>
+                            <!-- Special case for one enum -->
+                            <xsl:when test="@Id = 
'DPST-6-20_F-6'">Mode</xsl:when>
+                            <xsl:when test="@Id = 
'DPST-15-0_F-1'">Value1</xsl:when>
+                            <xsl:when test="@Id = 
'DPST-15-0_F-1'">Value2</xsl:when>
+                            <xsl:when test="@Id = 
'DPST-15-0_F-1'">Value3</xsl:when>
+                            <xsl:when test="@Id = 
'DPST-15-0_F-1'">Value4</xsl:when>
+                            <xsl:when test="@Id = 
'DPST-15-0_F-1'">Value5</xsl:when>
+                            <xsl:when test="@Id = 
'DPST-15-0_F-1'">Value6</xsl:when>
+                            <xsl:otherwise>Hurz</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:variable>
+                    <xsl:variable name="dataType">
+                        <xsl:call-template name="getMspecType">
+                            <xsl:with-param name="field" select="."/>
+                        </xsl:call-template>
+                    </xsl:variable>                    
+            [<xsl:value-of select="$fieldType"/><xsl:text 
disable-output-escaping="yes"> </xsl:text><xsl:value-of select="$dataType"/> 
'<xsl:value-of select="$fieldName"/>']
+                </xsl:for-each>
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:Bit">
+            [reserved uint 7 '0x00']
+            [simple   bit    'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:String">
+                <xsl:variable name="encoding">
+                    <xsl:choose>
+                        <xsl:when 
test="$datapointSubtype/knx:Format/knx:String/@Encoding = 
'us-ascii'">ASCII</xsl:when>
+                        <xsl:when 
test="$datapointSubtype/knx:Format/knx:String/@Encoding = 
'iso-8859-1'">ISO-8859-1</xsl:when>
+                    </xsl:choose>
+                </xsl:variable>
+            [reserved uint 8   '0x0']
+            [simple   string <xsl:value-of 
select="$datapointSubtype/knx:Format/knx:String/@Width"/> '<xsl:value-of 
select="$encoding"/>' 'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:UnsignedInteger">
+                <xsl:choose>
+                    <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &gt; 
6">
+            [reserved uint 8 '0x00']
+                    </xsl:when>
+                    <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt; 
6">
+            [reserved uint <xsl:value-of select="6 - 
fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width)"/> '0x00']
+                    </xsl:when>
+                </xsl:choose>
+            [simple   uint <xsl:value-of 
select="$datapointSubtype/knx:Format/knx:UnsignedInteger/@Width"/> 'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:SignedInteger">
+                <xsl:choose>
+                    <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &gt; 6">
+            [reserved uint 8 '0x00']
+                    </xsl:when>
+                    <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt; 6">
+            [reserved uint <xsl:value-of select="6 - 
fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width)"/> '0x00']
+                    </xsl:when>
+                </xsl:choose>
+            [simple   int <xsl:value-of 
select="$datapointSubtype/knx:Format/knx:SignedInteger/@Width"/> 'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:Float">
+            [reserved uint 8 '0x00']
+                <xsl:choose>
+                    <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) = 16">
+            [simple   float 4.11 'value']
+                    </xsl:when>
+                    <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) = 32">
+            [simple   float 8.23 'value']
+                    </xsl:when>
+                    <xsl:when 
test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) = 64">
+            [simple   float 11.52 'value']
+                    </xsl:when>
+                </xsl:choose>
+            </xsl:when>
+            <xsl:when 
test="$datapointSubtype/knx:Format/knx:Enumeration"></xsl:when>
+        </xsl:choose>
+        ]
+    </xsl:template>
+
+    <xsl:template name="resolveTypeReferences">
+        <xsl:param name="fields"/>
+        <xsl:for-each select="$fields">
+            <xsl:choose>
+                <xsl:when test="name(.) = 'RefType'">
+                    <xsl:variable name="curNode" select="."/>
+                    <xsl:copy-of select="//*[@Id = $curNode/@RefId]"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:copy-of select="."/>
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:for-each>
+    </xsl:template>
+
+    <xsl:template name="getMspecType">
+        <xsl:param name="field"/>
+        <xsl:choose>
+            <xsl:when test="name($field) = 'Bit'">bit</xsl:when>
+            <xsl:when test="name($field) = 'String'">
+                <xsl:variable name="encoding">
+                    <xsl:choose>
+                        <xsl:when test="$field/@Encoding = 
'us-ascii'">ASCII</xsl:when>
+                        <xsl:when test="$field/@Encoding = 
'iso-8859-1'">ISO-8859-1</xsl:when>
+                    </xsl:choose>
+                </xsl:variable>
+                string <xsl:value-of select="$field/@Width"/> '<xsl:value-of 
select="$encoding"/>'</xsl:when>
+            <xsl:when test="name($field) = 'UnsignedInteger'">uint 
<xsl:value-of select="$field/@Width"/></xsl:when>
+            <xsl:when test="name($field) = 'SignedInteger'">int <xsl:value-of 
select="$field/@Width"/></xsl:when>
+            <xsl:when test="name($field) = 'Float'">
+                <xsl:choose>
+                    <xsl:when test="$field/@Width = 16">float 4.11</xsl:when>
+                    <xsl:when test="$field/@Width = 32">float 8.23</xsl:when>
+                    <xsl:when test="$field/@Width = 64">float 11.52</xsl:when>
+                    <xsl:otherwise>hurz</xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+            <xsl:when test="name($field) = 'Enumeration'">uint <xsl:value-of 
select="$field/@Width"/></xsl:when>
+            <xsl:when test="name($field) = 'Reserved'">uint <xsl:value-of 
select="$field/@Width"/></xsl:when>
+        </xsl:choose>
+    </xsl:template>
+    
+    <xsl:template name="getFieldName">
+        <xsl:param name="fieldName"/>
+        <xsl:variable name="cleanedName" 
select="fn:replace(fn:replace($fieldName, '%', 'Percent'), '[^a-zA-Z0-9]', ' 
')"/>
+        <xsl:for-each select="fn:tokenize($cleanedName, ' ')">
+            <xsl:choose>
+                <xsl:when test="fn:string-length(.) = 1"><xsl:value-of 
select="fn:upper-case(.)"/></xsl:when>
+                <xsl:otherwise>
+                    <xsl:variable name="firstLetter" 
select="fn:upper-case(fn:substring(., 1, 1))"/>
+                    <xsl:variable name="rest" 
select="fn:lower-case(fn:substring(., 2))"/>
+                    <xsl:value-of select="fn:concat($firstLetter, $rest)"/>    
               
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:for-each>
+    </xsl:template>
+    
+    <xsl:template name="fieldsSize">
+        <xsl:param name="fields"/>
+        <xsl:choose>
+            <xsl:when test="count($fields) &gt; 1">
+                <xsl:variable name="restSize">
+                    <xsl:call-template name="fieldsSize">
+                        <xsl:with-param name="fields" 
select="$fields[position() &gt; 1]"/>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:choose>
+                    <xsl:when test="name($fields[1]) = 'Bit'"><xsl:value-of 
select="1 + $restSize"/></xsl:when>
+                    <xsl:otherwise><xsl:value-of 
select="number($fields[1]/@Width) + $restSize"/></xsl:otherwise>
+                </xsl:choose>               
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="name($fields[1]) = 'Bit'"><xsl:value-of 
select="1"/></xsl:when>
+                    <xsl:otherwise><xsl:value-of 
select="number($fields[1]/@Width)"/></xsl:otherwise>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
 </xsl:stylesheet>
\ No newline at end of file

Reply via email to