You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/11/20 13:42:32 UTC
[plc4x] branch feature/plc4go updated: - Ficed the test-definition
to the latest changes in the KNX protocol.
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/plc4go
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/plc4go by this push:
new cf70c2f - Ficed the test-definition to the latest changes in the KNX protocol.
cf70c2f is described below
commit cf70c2fda06b735de6c6819eb7592e3348d4c2e8
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Nov 20 14:42:22 2020 +0100
- Ficed the test-definition to the latest changes in the KNX protocol.
---
.../knxnetip/ParserSerializerTestsuite.xml | 4 +-
.../plc4go/knxnetip/readwrite/ParserHelper.go | 40 +++---
.../plc4go/knxnetip/readwrite/XmlParserHelper.go | 96 ++++++-------
.../knxnetip/readwrite/model/DIBDeviceInfo.go | 18 +--
.../knxnetip/readwrite/model/KnxDatapoint.go | 150 ++++++++++++++++++++-
.../resources/protocols/knxnetip/knxnetip.mspec | 10 +-
.../knxnetip/ParserSerializerTestsuite.xml | 4 +-
7 files changed, 233 insertions(+), 89 deletions(-)
diff --git a/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml b/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
index 90217fe..2eae8b6 100644
--- a/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
+++ b/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
@@ -146,7 +146,7 @@
</hpaiControlEndpoint>
<dibDeviceInfo className="org.apache.plc4x.java.knxnetip.readwrite.DIBDeviceInfo">
<descriptionType>1</descriptionType>
- <knxMedium>2</knxMedium>
+ <knxMedium>MEDIUM_TP1</knxMedium>
<deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
<programMode>false</programMode>
</deviceStatus>
@@ -211,7 +211,7 @@
<DescriptionResponse className="org.apache.plc4x.java.knxnetip.readwrite.DescriptionResponse">
<dibDeviceInfo className="org.apache.plc4x.java.knxnetip.readwrite.DIBDeviceInfo">
<descriptionType>1</descriptionType>
- <knxMedium>2</knxMedium>
+ <knxMedium>MEDIUM_TP1</knxMedium>
<deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
<programMode>false</programMode>
</deviceStatus>
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go b/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go
index ab14594..827fb09 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go
@@ -30,26 +30,12 @@ type KnxnetipParserHelper struct {
func (m KnxnetipParserHelper) Parse(typeName string, arguments []string, io *utils.ReadBuffer) (spi.Message, error) {
switch typeName {
- case "CEMIAdditionalInformation":
- return model.CEMIAdditionalInformationParse(io)
case "HPAIControlEndpoint":
return model.HPAIControlEndpointParse(io)
case "TunnelingResponseDataBlock":
return model.TunnelingResponseDataBlockParse(io)
- case "KnxAddress":
- return model.KnxAddressParse(io)
- case "ConnectionResponseDataBlock":
- return model.ConnectionResponseDataBlockParse(io)
- case "TunnelingRequestDataBlock":
- return model.TunnelingRequestDataBlockParse(io)
- case "DIBDeviceInfo":
- return model.DIBDeviceInfoParse(io)
- case "DeviceConfigurationRequestDataBlock":
- return model.DeviceConfigurationRequestDataBlockParse(io)
case "DeviceConfigurationAckDataBlock":
return model.DeviceConfigurationAckDataBlockParse(io)
- case "DIBSuppSvcFamilies":
- return model.DIBSuppSvcFamiliesParse(io)
case "ConnectionRequestInformation":
return model.ConnectionRequestInformationParse(io)
case "HPAIDiscoveryEndpoint":
@@ -70,6 +56,26 @@ func (m KnxnetipParserHelper) Parse(typeName string, arguments []string, io *uti
return nil, err
}
return model.CEMIParse(io, size)
+ case "KnxNetIpMessage":
+ return model.KnxNetIpMessageParse(io)
+ case "DeviceStatus":
+ return model.DeviceStatusParse(io)
+ case "IPAddress":
+ return model.IPAddressParse(io)
+ case "CEMIAdditionalInformation":
+ return model.CEMIAdditionalInformationParse(io)
+ case "KnxAddress":
+ return model.KnxAddressParse(io)
+ case "ConnectionResponseDataBlock":
+ return model.ConnectionResponseDataBlockParse(io)
+ case "TunnelingRequestDataBlock":
+ return model.TunnelingRequestDataBlockParse(io)
+ case "DIBDeviceInfo":
+ return model.DIBDeviceInfoParse(io)
+ case "DeviceConfigurationRequestDataBlock":
+ return model.DeviceConfigurationRequestDataBlockParse(io)
+ case "DIBSuppSvcFamilies":
+ return model.DIBSuppSvcFamiliesParse(io)
case "KnxGroupAddress":
numLevels, err := utils.StrToUint8(arguments[0])
if err != nil {
@@ -78,14 +84,8 @@ func (m KnxnetipParserHelper) Parse(typeName string, arguments []string, io *uti
return model.KnxGroupAddressParse(io, numLevels)
case "MACAddress":
return model.MACAddressParse(io)
- case "KnxNetIpMessage":
- return model.KnxNetIpMessageParse(io)
case "CEMIFrame":
return model.CEMIFrameParse(io)
- case "DeviceStatus":
- return model.DeviceStatusParse(io)
- case "IPAddress":
- return model.IPAddressParse(io)
}
return nil, errors.New("Unsupported type " + typeName)
}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go
index 3d0dfea..3074255 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go
@@ -30,169 +30,169 @@ type KnxnetipXmlParserHelper struct {
func (m KnxnetipXmlParserHelper) Parse(typeName string, xmlString string) (spi.Message, error) {
switch typeName {
- case "CEMIAdditionalInformation":
- var obj *model.CEMIAdditionalInformation
+ case "HPAIControlEndpoint":
+ var obj *model.HPAIControlEndpoint
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "HPAIControlEndpoint":
- var obj *model.HPAIControlEndpoint
+ case "TunnelingResponseDataBlock":
+ var obj *model.TunnelingResponseDataBlock
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "TunnelingResponseDataBlock":
- var obj *model.TunnelingResponseDataBlock
+ case "DeviceConfigurationAckDataBlock":
+ var obj *model.DeviceConfigurationAckDataBlock
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "KnxAddress":
- var obj *model.KnxAddress
+ case "ConnectionRequestInformation":
+ var obj *model.ConnectionRequestInformation
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "ConnectionResponseDataBlock":
- var obj *model.ConnectionResponseDataBlock
+ case "HPAIDiscoveryEndpoint":
+ var obj *model.HPAIDiscoveryEndpoint
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "TunnelingRequestDataBlock":
- var obj *model.TunnelingRequestDataBlock
+ case "ProjectInstallationIdentifier":
+ var obj *model.ProjectInstallationIdentifier
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "DIBDeviceInfo":
- var obj *model.DIBDeviceInfo
+ case "CEMIDataFrame":
+ var obj *model.CEMIDataFrame
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "DeviceConfigurationRequestDataBlock":
- var obj *model.DeviceConfigurationRequestDataBlock
+ case "ServiceId":
+ var obj *model.ServiceId
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "DeviceConfigurationAckDataBlock":
- var obj *model.DeviceConfigurationAckDataBlock
+ case "HPAIDataEndpoint":
+ var obj *model.HPAIDataEndpoint
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "DIBSuppSvcFamilies":
- var obj *model.DIBSuppSvcFamilies
+ case "RelativeTimestamp":
+ var obj *model.RelativeTimestamp
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "ConnectionRequestInformation":
- var obj *model.ConnectionRequestInformation
+ case "CEMI":
+ var obj *model.CEMI
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "HPAIDiscoveryEndpoint":
- var obj *model.HPAIDiscoveryEndpoint
+ case "KnxNetIpMessage":
+ var obj *model.KnxNetIpMessage
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "ProjectInstallationIdentifier":
- var obj *model.ProjectInstallationIdentifier
+ case "DeviceStatus":
+ var obj *model.DeviceStatus
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "CEMIDataFrame":
- var obj *model.CEMIDataFrame
+ case "IPAddress":
+ var obj *model.IPAddress
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "ServiceId":
- var obj *model.ServiceId
+ case "CEMIAdditionalInformation":
+ var obj *model.CEMIAdditionalInformation
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "HPAIDataEndpoint":
- var obj *model.HPAIDataEndpoint
+ case "KnxAddress":
+ var obj *model.KnxAddress
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "RelativeTimestamp":
- var obj *model.RelativeTimestamp
+ case "ConnectionResponseDataBlock":
+ var obj *model.ConnectionResponseDataBlock
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "CEMI":
- var obj *model.CEMI
+ case "TunnelingRequestDataBlock":
+ var obj *model.TunnelingRequestDataBlock
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "KnxGroupAddress":
- var obj *model.KnxGroupAddress
+ case "DIBDeviceInfo":
+ var obj *model.DIBDeviceInfo
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "MACAddress":
- var obj *model.MACAddress
+ case "DeviceConfigurationRequestDataBlock":
+ var obj *model.DeviceConfigurationRequestDataBlock
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "KnxNetIpMessage":
- var obj *model.KnxNetIpMessage
+ case "DIBSuppSvcFamilies":
+ var obj *model.DIBSuppSvcFamilies
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "CEMIFrame":
- var obj *model.CEMIFrame
+ case "KnxGroupAddress":
+ var obj *model.KnxGroupAddress
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "DeviceStatus":
- var obj *model.DeviceStatus
+ case "MACAddress":
+ var obj *model.MACAddress
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
}
return obj, nil
- case "IPAddress":
- var obj *model.IPAddress
+ case "CEMIFrame":
+ var obj *model.CEMIFrame
err := xml.Unmarshal([]byte(xmlString), &obj)
if err != nil {
return nil, errors.New("error unmarshalling xml: " + err.Error())
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
index b83fc96..2a96408 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
@@ -29,7 +29,7 @@ import (
// The data-structure of this message
type DIBDeviceInfo struct {
DescriptionType uint8
- KnxMedium uint8
+ KnxMedium KnxMedium
DeviceStatus *DeviceStatus
KnxAddress *KnxAddress
ProjectInstallationIdentifier *ProjectInstallationIdentifier
@@ -48,7 +48,7 @@ type IDIBDeviceInfo interface {
xml.Marshaler
}
-func NewDIBDeviceInfo(descriptionType uint8, knxMedium uint8, deviceStatus *DeviceStatus, knxAddress *KnxAddress, projectInstallationIdentifier *ProjectInstallationIdentifier, knxNetIpDeviceSerialNumber []int8, knxNetIpDeviceMulticastAddress *IPAddress, knxNetIpDeviceMacAddress *MACAddress, deviceFriendlyName []int8) *DIBDeviceInfo {
+func NewDIBDeviceInfo(descriptionType uint8, knxMedium KnxMedium, deviceStatus *DeviceStatus, knxAddress *KnxAddress, projectInstallationIdentifier *ProjectInstallationIdentifier, knxNetIpDeviceSerialNumber []int8, knxNetIpDeviceMulticastAddress *IPAddress, knxNetIpDeviceMacAddress *MACAddress, deviceFriendlyName []int8) *DIBDeviceInfo {
return &DIBDeviceInfo{DescriptionType: descriptionType, KnxMedium: knxMedium, DeviceStatus: deviceStatus, KnxAddress: knxAddress, ProjectInstallationIdentifier: projectInstallationIdentifier, KnxNetIpDeviceSerialNumber: knxNetIpDeviceSerialNumber, KnxNetIpDeviceMulticastAddress: knxNetIpDeviceMulticastAddress, KnxNetIpDeviceMacAddress: knxNetIpDeviceMacAddress, DeviceFriendlyName: deviceFriendlyName}
}
@@ -74,7 +74,7 @@ func (m *DIBDeviceInfo) LengthInBits() uint16 {
// Simple field (descriptionType)
lengthInBits += 8
- // Simple field (knxMedium)
+ // Enum Field (knxMedium)
lengthInBits += 8
// Simple field (deviceStatus)
@@ -123,8 +123,8 @@ func DIBDeviceInfoParse(io *utils.ReadBuffer) (*DIBDeviceInfo, error) {
return nil, errors.New("Error parsing 'descriptionType' field " + _descriptionTypeErr.Error())
}
- // Simple Field (knxMedium)
- knxMedium, _knxMediumErr := io.ReadUint8(8)
+ // Enum field (knxMedium)
+ knxMedium, _knxMediumErr := KnxMediumParse(io)
if _knxMediumErr != nil {
return nil, errors.New("Error parsing 'knxMedium' field " + _knxMediumErr.Error())
}
@@ -201,9 +201,9 @@ func (m *DIBDeviceInfo) Serialize(io utils.WriteBuffer) error {
return errors.New("Error serializing 'descriptionType' field " + _descriptionTypeErr.Error())
}
- // Simple Field (knxMedium)
- knxMedium := uint8(m.KnxMedium)
- _knxMediumErr := io.WriteUint8(8, (knxMedium))
+ // Enum field (knxMedium)
+ knxMedium := CastKnxMedium(m.KnxMedium)
+ _knxMediumErr := knxMedium.Serialize(io)
if _knxMediumErr != nil {
return errors.New("Error serializing 'knxMedium' field " + _knxMediumErr.Error())
}
@@ -283,7 +283,7 @@ func (m *DIBDeviceInfo) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
}
m.DescriptionType = data
case "knxMedium":
- var data uint8
+ var data KnxMedium
if err := d.DecodeElement(&data, &tok); err != nil {
return err
}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go
index 74285bc..6253750 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go
@@ -137,6 +137,82 @@ func KnxDatapointParse(io *utils.ReadBuffer, formatName string) (api.PlcValue, e
return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
}
return values.NewPlcSINT(value), nil
+ case formatName == "B5N3": // Struct
+ _map := map[string]api.PlcValue{}
+
+ // Reserved Field (Just skip the bytes)
+ if _, _err := io.ReadUint8(3); _err != nil {
+ return nil, errors.New("Error parsing reserved field " + _err.Error())
+ }
+
+ // Simple Field (a)
+ a, _aErr := io.ReadBit()
+ if _aErr != nil {
+ return nil, errors.New("Error parsing 'a' field " + _aErr.Error())
+ }
+ _map["Struct"] = values.NewPlcBOOL(a)
+
+ // Simple Field (b)
+ b, _bErr := io.ReadBit()
+ if _bErr != nil {
+ return nil, errors.New("Error parsing 'b' field " + _bErr.Error())
+ }
+ _map["Struct"] = values.NewPlcBOOL(b)
+
+ // Simple Field (c)
+ c, _cErr := io.ReadBit()
+ if _cErr != nil {
+ return nil, errors.New("Error parsing 'c' field " + _cErr.Error())
+ }
+ _map["Struct"] = values.NewPlcBOOL(c)
+
+ // Simple Field (d)
+ d, _dErr := io.ReadBit()
+ if _dErr != nil {
+ return nil, errors.New("Error parsing 'd' field " + _dErr.Error())
+ }
+ _map["Struct"] = values.NewPlcBOOL(d)
+
+ // Simple Field (e)
+ e, _eErr := io.ReadBit()
+ if _eErr != nil {
+ return nil, errors.New("Error parsing 'e' field " + _eErr.Error())
+ }
+ _map["Struct"] = values.NewPlcBOOL(e)
+
+ // Simple Field (value)
+ value, _valueErr := io.ReadInt8(8)
+ if _valueErr != nil {
+ return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+ }
+ _map["Struct"] = values.NewPlcSINT(value)
+ return values.NewPlcStruct(_map), nil
+ case formatName == "U16": // UINT
+
+ // Reserved Field (Just skip the bytes)
+ if _, _err := io.ReadUint8(8); _err != nil {
+ return nil, errors.New("Error parsing reserved field " + _err.Error())
+ }
+
+ // Simple Field (value)
+ value, _valueErr := io.ReadUint16(16)
+ if _valueErr != nil {
+ return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+ }
+ return values.NewPlcUINT(value), nil
+ case formatName == "V16": // INT
+
+ // Reserved Field (Just skip the bytes)
+ if _, _err := io.ReadUint8(8); _err != nil {
+ return nil, errors.New("Error parsing reserved field " + _err.Error())
+ }
+
+ // Simple Field (value)
+ value, _valueErr := io.ReadInt16(16)
+ if _valueErr != nil {
+ return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+ }
+ return values.NewPlcINT(value), nil
case formatName == "F16": // REAL
// Reserved Field (Just skip the bytes)
@@ -210,6 +286,11 @@ func KnxDatapointParse(io *utils.ReadBuffer, formatName string) (api.PlcValue, e
return nil, errors.New("Error parsing reserved field " + _err.Error())
}
+ // Reserved Field (Just skip the bytes)
+ if _, _err := io.ReadUint8(4); _err != nil {
+ return nil, errors.New("Error parsing reserved field " + _err.Error())
+ }
+
// Simple Field (month)
month, _monthErr := io.ReadUint8(4)
if _monthErr != nil {
@@ -2873,11 +2954,11 @@ func KnxDatapointParse(io *utils.ReadBuffer, formatName string) (api.PlcValue, e
_map["Struct"] = values.NewPlcUSINT(version)
// Simple Field (medium)
- medium, _mediumErr := io.ReadInt8(8)
+ medium, _mediumErr := io.ReadUint8(8)
if _mediumErr != nil {
return nil, errors.New("Error parsing 'medium' field " + _mediumErr.Error())
}
- _map["Struct"] = values.NewPlcSINT(medium)
+ _map["Struct"] = values.NewPlcUSINT(medium)
return values.NewPlcStruct(_map), nil
case formatName == "A8A8A8A8": // Struct
_map := map[string]api.PlcValue{}
@@ -3388,6 +3469,64 @@ func KnxDatapointSerialize(io *utils.WriteBuffer, value api.PlcValue, formatName
if _err := io.WriteInt8(8, value.GetInt8()); _err != nil {
return errors.New("Error serializing 'value' field " + _err.Error())
}
+ case formatName == "B5N3": // Struct
+
+ // Reserved Field (Just skip the bytes)
+ if _err := io.WriteUint8(3, uint8(0x0)); _err != nil {
+ return errors.New("Error serializing reserved field " + _err.Error())
+ }
+
+ // Simple Field (a)
+ if _err := io.WriteBit(value.GetBool()); _err != nil {
+ return errors.New("Error serializing 'a' field " + _err.Error())
+ }
+
+ // Simple Field (b)
+ if _err := io.WriteBit(value.GetBool()); _err != nil {
+ return errors.New("Error serializing 'b' field " + _err.Error())
+ }
+
+ // Simple Field (c)
+ if _err := io.WriteBit(value.GetBool()); _err != nil {
+ return errors.New("Error serializing 'c' field " + _err.Error())
+ }
+
+ // Simple Field (d)
+ if _err := io.WriteBit(value.GetBool()); _err != nil {
+ return errors.New("Error serializing 'd' field " + _err.Error())
+ }
+
+ // Simple Field (e)
+ if _err := io.WriteBit(value.GetBool()); _err != nil {
+ return errors.New("Error serializing 'e' field " + _err.Error())
+ }
+
+ // Simple Field (value)
+ if _err := io.WriteInt8(8, value.GetInt8()); _err != nil {
+ return errors.New("Error serializing 'value' field " + _err.Error())
+ }
+ case formatName == "U16": // UINT
+
+ // Reserved Field (Just skip the bytes)
+ if _err := io.WriteUint8(8, uint8(0x0)); _err != nil {
+ return errors.New("Error serializing reserved field " + _err.Error())
+ }
+
+ // Simple Field (value)
+ if _err := io.WriteUint16(16, value.GetUint16()); _err != nil {
+ return errors.New("Error serializing 'value' field " + _err.Error())
+ }
+ case formatName == "V16": // INT
+
+ // Reserved Field (Just skip the bytes)
+ if _err := io.WriteUint8(8, uint8(0x0)); _err != nil {
+ return errors.New("Error serializing reserved field " + _err.Error())
+ }
+
+ // Simple Field (value)
+ if _err := io.WriteInt16(16, value.GetInt16()); _err != nil {
+ return errors.New("Error serializing 'value' field " + _err.Error())
+ }
case formatName == "F16": // REAL
// Reserved Field (Just skip the bytes)
@@ -3452,6 +3591,11 @@ func KnxDatapointSerialize(io *utils.WriteBuffer, value api.PlcValue, formatName
return errors.New("Error serializing reserved field " + _err.Error())
}
+ // Reserved Field (Just skip the bytes)
+ if _err := io.WriteUint8(4, uint8(0x00)); _err != nil {
+ return errors.New("Error serializing reserved field " + _err.Error())
+ }
+
// Simple Field (month)
if _err := io.WriteUint8(4, value.GetUint8()); _err != nil {
return errors.New("Error serializing 'month' field " + _err.Error())
@@ -5443,7 +5587,7 @@ func KnxDatapointSerialize(io *utils.WriteBuffer, value api.PlcValue, formatName
}
// Simple Field (medium)
- if _err := io.WriteInt8(8, value.GetInt8()); _err != nil {
+ if _err := io.WriteUint8(8, value.GetUint8()); _err != nil {
return errors.New("Error serializing 'medium' field " + _err.Error())
}
case formatName == "A8A8A8A8": // Struct
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index ae59941..d22fd72 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -1022,11 +1022,11 @@
[simple uint 8 'statusOrCommand']
]
['U16U32U8N8' Struct
- [reserved uint 8 '0x0']
- [simple uint 16 'manufacturerId']
- [simple uint 32 'identNumber']
- [simple uint 8 'version']
- [enum SupportedPhysicalMedia 'medium']
+ [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']
diff --git a/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml b/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml
index 90217fe..2eae8b6 100644
--- a/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml
+++ b/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml
@@ -146,7 +146,7 @@
</hpaiControlEndpoint>
<dibDeviceInfo className="org.apache.plc4x.java.knxnetip.readwrite.DIBDeviceInfo">
<descriptionType>1</descriptionType>
- <knxMedium>2</knxMedium>
+ <knxMedium>MEDIUM_TP1</knxMedium>
<deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
<programMode>false</programMode>
</deviceStatus>
@@ -211,7 +211,7 @@
<DescriptionResponse className="org.apache.plc4x.java.knxnetip.readwrite.DescriptionResponse">
<dibDeviceInfo className="org.apache.plc4x.java.knxnetip.readwrite.DIBDeviceInfo">
<descriptionType>1</descriptionType>
- <knxMedium>2</knxMedium>
+ <knxMedium>MEDIUM_TP1</knxMedium>
<deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
<programMode>false</programMode>
</deviceStatus>