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, '\[', '_'), '\]', ''), '³', '_3'), 'µ', '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, '\[', '_'), '\]', ''), '³', '_3'), 'µ', '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),' ', '_'), '&', '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, '\[', '_'), '\]', ''), '³', '_3'), 'µ', '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) > 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) <= 8">USINT</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) <= 16">UINT</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) <= 32">UDINT</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) <= 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) <= 8">SINT</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) <= 16">INT</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) <= 32">DINT</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) <= 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) <= 16">REAL</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) <= 32">REAL</xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) <= 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) > 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) <= 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) > 6"> + [reserved uint 8 '0x00'] + </xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) < 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) > 6"> + [reserved uint 8 '0x00'] + </xsl:when> + <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) < 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) > 1"> + <xsl:variable name="restSize"> + <xsl:call-template name="fieldsSize"> + <xsl:with-param name="fields" select="$fields[position() > 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
